1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License, Version 1.0 only
6  * (the "License").  You may not use this file except in compliance
7  * with the License.
8  *
9  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10  * or http://www.opensolaris.org/os/licensing.
11  * See the License for the specific language governing permissions
12  * and limitations under the License.
13  *
14  * When distributing Covered Code, include this CDDL HEADER in each
15  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16  * If applicable, add the following below this CDDL HEADER, with the
17  * fields enclosed by brackets "[]" replaced with your own identifying
18  * information: Portions Copyright [yyyy] [name of copyright owner]
19  *
20  * CDDL HEADER END
21  */
22 /*
23  * ident	"%Z%%M%	%I%	%E% SMI"
24  *
25  * Copyright (c) 2001 by Sun Microsystems, Inc.
26  * All rights reserved.
27  */
28 package com.sun.dhcpmgr.cli.common;
29 
30 import java.lang.IllegalArgumentException;
31 import java.util.ArrayList;
32 import java.text.MessageFormat;
33 
34 /**
35  * This class is used to represent all the command line options.
36  */
37 public class DhcpCliOptions {
38 
39     /**
40      * Actual container for the options.
41      */
42     ArrayList options;
43 
44     /**
45      * Basic constructor.
46      */
DhcpCliOptions()47     public DhcpCliOptions() {
48 
49 	options = new ArrayList();
50 
51     } // constructor
52 
53     /**
54      * Creates a new option and adds it to the list.
55      * @param flag the option key value
56      * @param value the option value
57      */
setOption(int flag, String value)58     public void setOption(int flag, String value)
59 	throws IllegalArgumentException {
60 
61 	DhcpCliOption option = new DhcpCliOption(flag, value);
62 	int i = options.indexOf(option);
63 	if (i == -1) {
64 	    options.add(option);
65 	} else {
66 	    String format =
67 		ResourceStrings.getString("repeated_option");
68 	    Object[] args = new Object[1];
69 	    args[0] = option.getOptionCharacter();
70 	    String msg = MessageFormat.format(format, args);
71 	    throw new IllegalArgumentException(msg);
72 	}
73 
74     } // setOption
75 
76     /**
77      * Reports as to whether or not an option exists in the list.
78      * @param flag the option key value
79      * @return true if the option is in the list, false if not
80      */
isSet(int flag)81     public boolean isSet(int flag) {
82 
83 	DhcpCliOption option = new DhcpCliOption(flag);
84 	return options.contains(option);
85 
86     } // isSet
87 
88     /**
89      * Returns the value of an option.
90      * @param flag the option key value
91      * @return the value of the option or null if the option is not
92      * in the list.
93      */
valueOf(int flag)94     public String valueOf(int flag) {
95 
96 	DhcpCliOption option = new DhcpCliOption(flag);
97 
98 	int i = options.indexOf(option);
99 	if (i != -1) {
100 	    return ((DhcpCliOption)options.get(i)).getValue();
101 	} else {
102 	    return null;
103 	}
104     } // valueOf
105 
106     /**
107      * Given a list of supported options, validates that there are no
108      * options in the in the option list that are not supported.
109      * @param supportedOptions array of option key values
110      * @return true if there are no options in the option list that are
111      * not in the supportedOptions, false otherwise.
112      */
validate(int [] supportedOptions)113     public void validate(int [] supportedOptions)
114 	throws IllegalArgumentException {
115 
116 	boolean result = true;
117 	int option = 0;
118 
119 	for (int i = 0; i < options.size() && result; i++) {
120 	    option = ((DhcpCliOption)options.get(i)).getOption();
121 	    result = false;
122 	    for (int j = 0; j < supportedOptions.length && !result; j++) {
123 		if (supportedOptions[j] == option) {
124 		    result = true;
125 		}
126 	    }
127 	}
128 
129 	if (!result) {
130 	    String format =
131 		ResourceStrings.getString("bad_function_option");
132 	    Object[] args = new Object[1];
133 	    args[0] = DhcpCliOption.getOptionCharacter(option);
134 	    String msg = MessageFormat.format(format, args);
135 	    throw new IllegalArgumentException(msg);
136 	}
137 
138     } // validate
139 
140 } // DhcpCliOptions
141