1f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project/* Copyright (C) 2003 Vladimir Roubtsov. All rights reserved.
2f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project *
3f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * This program and the accompanying materials are made available under
4f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * the terms of the Common Public License v1.0 which accompanies this distribution,
5f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * and is available at http://www.eclipse.org/legal/cpl-v10.html
6f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project *
7f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * $Id: IOptsParser.java,v 1.1.1.1 2004/05/09 16:57:56 vlad_r Exp $
8f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project */
9f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectpackage com.vladium.util.args;
10f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
11f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectimport java.io.PrintWriter;
12f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
13f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project// ----------------------------------------------------------------------------
14f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project/**
15f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * @author Vlad Roubtsov, (C) 2002
16f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project */
17f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectpublic
18f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectinterface IOptsParser
19f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project{
20f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    // public: ................................................................
21f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
22f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    int SHORT_USAGE     = 1;
23f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    int DETAILED_USAGE  = 2;
24f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
25f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    interface IOpt
26f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
27f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        String getName ();
28f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        String getCanonicalName ();
29f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
30f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        String getPatternPrefix ();
31f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
32f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        int getValueCount ();
33f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        String getFirstValue ();
34f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        String [] getValues ();
35f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
36f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    } // end of interface
37f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
38f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
39f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    interface IOpts
40f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
41f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        /**
42f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project         * 0: none, 1: short, 2: detailed
43f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project         *
44f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project         * @return
45f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project         */
46f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        int usageRequestLevel ();
47f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        void error (PrintWriter out, int width);
48f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
49f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        IOpt [] getOpts ();
50f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        boolean hasArg (String name);
51f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
52f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        IOpt [] getOpts (String pattern);
53f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
54f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        /**
55f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project         *
56f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project         * @return [never null, could be empty]
57f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project         */
58f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        String [] getFreeArgs ();
59f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
60f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    } // end of interface
61f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
62f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    void usage (PrintWriter out, int level, int width);
63f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    IOpts parse (String [] args);
64f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
65f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    abstract class Factory
66f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
67f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        // TODO: pass short/long usage opt names in?
68f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
69f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        public static IOptsParser create (final String metadataResourceName, final ClassLoader loader,
70f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                                          final String msgPrefix, final String [] usageOpts)
71f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        {
72f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            return new OptsParser (metadataResourceName, loader, msgPrefix, usageOpts);
73f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        }
74f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
75f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    } // end of nested class
76f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
77f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project} // end of interface
78f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project// ----------------------------------------------------------------------------