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 * Copyright (c) 2001 by Sun Microsystems, Inc.
24 * All rights reserved.
25 */
26 package com.sun.dhcpmgr.cli.pntadm;
27
28 import com.sun.dhcpmgr.cli.common.*;
29
30 import java.lang.IllegalArgumentException;
31
32 /**
33 * This class represents the entry point to the DHCP CLI network tables
34 * administration.
35 */
36 public class PntAdm
37 extends DhcpCliProgram {
38
39 /**
40 * The program signature.
41 */
42 public static final String SIGNATURE = "pntadm: ";
43
44 /**
45 * The valid options for all PntAdm administration.
46 */
47 private static String optString = "LPCRyavxA:D:M:r:p:u:s:i:f:e:m:c:n:B;";
48
49 public static final int ADD_CLIENT_ENTRY = 'A';
50 public static final int MODIFY_CLIENT_ENTRY = 'M';
51 public static final int DELETE_CLIENT_ENTRY = 'D';
52 public static final int CREATE_NETWORK_TABLE = 'C';
53 public static final int REMOVE_NETWORK_TABLE = 'R';
54 public static final int DISPLAY_NETWORK_TABLE = 'P';
55 public static final int LIST_NETWORK_TABLES = 'L';
56 public static final int BATCH_EXECUTION = 'B';
57
58 public static final int VERIFY_MACRO = 'y';
59 public static final int CONVERT_CLIENTID = 'a';
60 public static final int RAW = 'x';
61 public static final int VERBOSE = 'v';
62 public static final int RESOURCE = 'r';
63 public static final int RESOURCE_CONFIG = 'u';
64 public static final int PATH = 'p';
65 public static final int SERVER = 's';
66 public static final int CLIENTID = 'i';
67 public static final int FLAGS = 'f';
68 public static final int LEASE_EXPIRATION = 'e';
69 public static final int MACRO_NAME = 'm';
70 public static final int COMMENT = 'c';
71 public static final int NEW_IP = 'n';
72
73 /**
74 * Constructs a pntadm command.
75 * @param args the options to the command.
76 */
77 public PntAdm(String [] args) {
78 reset(args);
79 } // constructor
80
81 /**
82 * Resets a PntAdm for reuse. Used by DhcpBatch program.
83 * @param args the options to the command.
84 */
85 public void reset(String [] args) {
86
87 clearFunction();
88 options = new DhcpCliOptions();
89 this.args = args;
90
91 }
92
93 /**
94 * Returns the manpage signature for the program.
95 * @return the manpage signature for the program.
96 */
97 public String getManPage() {
98 return "pntadm(1M)";
99 }
100
101 /**
102 * Displays program usage.
103 */
104 public void usage() {
105
106 DhcpCliPrint.printErrMessage(getString("usage"));
107
108 } // usage
109
110 /**
111 * Executes the program function.
112 * @return SUCCESS, EXISTS, ENOENT, WARNING, or CRITICAL
113 */
114 public int execute() {
115
116 int returnCode = SUCCESS;
117
118 // Get the options and go exec the correct function.
119 //
120 GetOpt getopt = new GetOpt(args, optString);
121 try {
122 int option;
123 while ((option = getopt.getNextOption()) != -1) {
124 processArg(option, getopt.getOptionArg());
125 }
126
127 int networkIndex = getopt.getNextOptionIndex();
128 String network = null;
129
130 if (args.length == (networkIndex + 1)) {
131 network = args[networkIndex];
132 } else if (args.length >= networkIndex + 1) {
133 throw new IllegalArgumentException(
134 ResourceStrings.getString("invalid_args"));
135 }
136
137 if (function == null) {
138 String msg = getString("no_function_error");
139 throw new IllegalArgumentException(msg);
140 }
141
142 // Check the validity of the data store version.
143 //
144 if (!function.isVersionValid(false)) {
145 return (CRITICAL);
146 }
147
148 // Not all functions accept network arguments.
149 //
150 if (function instanceof ListNetworkTables ||
151 function instanceof PntAdmBatch) {
152 if (network != null) {
153 String msg = getString("network_specified");
154 throw new IllegalArgumentException(msg);
155 }
156 } else {
157 if (network == null) {
158 String msg = getString("no_network_specified");
159 throw new IllegalArgumentException(msg);
160 }
161 }
162
163 // Create a DHCP datastore object with the user specified objects.
164 //
165 function.setDhcpDatastore(options.valueOf(RESOURCE),
166 options.valueOf(PATH), options.valueOf(RESOURCE_CONFIG));
167
168 function.setOptions(options);
169 ((PntAdmFunction)function).setNetworkName(network);
170 returnCode = function.execute();
171
172 } catch (IllegalArgumentException e) {
173 StringBuffer msg = new StringBuffer(SIGNATURE);
174 msg.append(DhcpCliFunction.getMessage(e));
175 DhcpCliPrint.printErrMessage(msg.toString());
176 DhcpCliPrint.printErrMessage("");
177 usage();
178 returnCode = CRITICAL;
179 } catch (Throwable e) {
180 StringBuffer msg = new StringBuffer(SIGNATURE);
181 msg.append(DhcpCliFunction.getMessage(e));
182 DhcpCliPrint.printErrMessage(msg.toString());
183 returnCode = CRITICAL;
184 }
185
186 return (returnCode);
187
188 } // execute
189
190 /**
191 * Processes one program argument.
192 * @param option the option flag
193 * @param value the option value(if any)
194 * @exception IllegalArgumentException if an invalid argument was entered
195 */
196 public void processArg(int option, String value)
197 throws IllegalArgumentException {
198
199 switch (option) {
200 case ADD_CLIENT_ENTRY:
201 setFunction(new AddClientEntry(value));
202 break;
203 case MODIFY_CLIENT_ENTRY:
204 setFunction(new ModifyClientEntry(value));
205 break;
206 case DELETE_CLIENT_ENTRY:
207 setFunction(new DeleteClientEntry(value));
208 break;
209 case CREATE_NETWORK_TABLE:
210 setFunction(new CreateNetworkTable());
211 break;
212 case REMOVE_NETWORK_TABLE:
213 setFunction(new RemoveNetworkTable());
214 break;
215 case DISPLAY_NETWORK_TABLE:
216 setFunction(new DisplayNetworkTable());
217 break;
218 case LIST_NETWORK_TABLES:
219 setFunction(new ListNetworkTables());
220 break;
221 case BATCH_EXECUTION:
222 setFunction(new PntAdmBatch(value));
223 break;
224 default:
225 options.setOption(option, value);
226 }
227
228 } // processArg
229
230 /**
231 * Returns a localized string for this function
232 * @param key the resource bundle string identifier
233 * @return string from resource bundle.
234 */
235 public String getString(String key) {
236
237 return ResourceStrings.getString(key);
238
239 } // getString
240
241 /**
242 * The entry point for the program.
243 * @param args the program arguments
244 */
245 public static void main(String[] args) {
246
247 PntAdm pntadm = new PntAdm(args);
248 int returnCode = PntAdm.CRITICAL;
249 if (pntadm.isValidUser()) {
250 returnCode = pntadm.execute();
251 }
252 System.exit(returnCode);
253
254 } // main
255
256 } // PntAdm