KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > sun > cli > jmx > cmd > ConfigureCmd


1 /*
2  * The contents of this file are subject to the terms
3  * of the Common Development and Distribution License
4  * (the License). You may not use this file except in
5  * compliance with the License.
6  *
7  * You can obtain a copy of the license at
8  * https://glassfish.dev.java.net/public/CDDLv1.0.html or
9  * glassfish/bootstrap/legal/CDDLv1.0.txt.
10  * See the License for the specific language governing
11  * permissions and limitations under the License.
12  *
13  * When distributing Covered Code, include this CDDL
14  * Header Notice in each file and include the License file
15  * at glassfish/bootstrap/legal/CDDLv1.0.txt.
16  * If applicable, add the following below the CDDL Header,
17  * with the fields enclosed by brackets [] replaced by
18  * you own identifying information:
19  * "Portions Copyrighted [year] [name of copyright owner]"
20  *
21  * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
22  */

23  
24 /*
25  * $Header: /cvs/glassfish/admin-cli/cli-api/src/java/com/sun/cli/jmx/cmd/ConfigureCmd.java,v 1.3 2005/12/25 03:45:32 tcfujii Exp $
26  * $Revision: 1.3 $
27  * $Date: 2005/12/25 03:45:32 $
28  */

29  
30 package com.sun.cli.jmx.cmd;
31
32 import java.util.ArrayList JavaDoc;
33 import java.util.Iterator JavaDoc;
34
35 import com.sun.cli.util.stringifier.IteratorStringifier;
36
37 import com.sun.cli.jmx.spi.JMXConnectorProvider;
38 import com.sun.cli.util.ClassUtil;
39
40
41 public class ConfigureCmd extends JMXCmd
42 {
43     public final static char CLASSNAME_DELIM = ',';
44     
45         public
46     ConfigureCmd( final CmdEnv env )
47     {
48         super( env );
49     }
50     
51         int
52     getNumRequiredOperands()
53     {
54         return( 0 );
55     }
56     
57     
58         String JavaDoc
59     getUsage()
60     {
61         return( CmdStrings.CONFIGURE_HELP.toString() );
62     }
63     
64     public final static String JavaDoc NAME = "configure";
65     public final static String JavaDoc SHOW_CONFIG = "show-config";
66     public final static String JavaDoc ADD_PROVIDER = "add-provider";
67     public final static String JavaDoc REMOVE_PROVIDER = "remove-provider";
68     public final static String JavaDoc ADD_CMD = "add-cmd";
69     public final static String JavaDoc REMOVE_CMD = "remove-cmd";
70     
71     private final static String JavaDoc [] NAMES = new String JavaDoc []
72     {
73          NAME, SHOW_CONFIG, ADD_PROVIDER, REMOVE_PROVIDER, ADD_CMD, REMOVE_CMD
74     };
75     
76         public static String JavaDoc []
77     getNames( )
78     {
79         return( NAMES );
80     }
81     
82     
83     static private final String JavaDoc OPTIONS_INFO = "";
84         
85     
86         ArgHelper.OptionsInfo
87     getOptionInfo()
88         throws ArgHelper.IllegalOptionException
89     {
90         return( new ArgHelperOptionsInfo( OPTIONS_INFO ) );
91     }
92     
93     static class ClassList
94     {
95         final ArrayList JavaDoc mItems;
96         
97         ClassList( String JavaDoc providersString )
98         {
99             mItems = new ArrayList JavaDoc();
100             
101             if ( providersString != null )
102             {
103                 final String JavaDoc [] list = providersString.trim().split( "" + CLASSNAME_DELIM );
104                 
105                 // first listed should be first in priority, so add to end
106
for ( int i = 0; i < list.length; ++i )
107                 {
108                     mItems.add( list[ i ] );
109                 }
110             }
111         }
112         
113             public String JavaDoc
114         toString()
115         {
116             return( IteratorStringifier.stringify( mItems.iterator(), "" + CLASSNAME_DELIM ) );
117         }
118         
119             public String JavaDoc []
120         toArray()
121         {
122             return( (String JavaDoc [])mItems.toArray( new String JavaDoc[ mItems.size() ] ) );
123         }
124         
125             public boolean
126         exists( String JavaDoc name )
127         {
128             return( mItems.contains( name ) );
129         }
130         
131             public Iterator JavaDoc
132         iterator()
133         {
134             return( mItems.iterator() );
135         }
136         
137             public void
138         add( String JavaDoc name )
139         {
140             // add it in front--last added is first in priority
141
mItems.add( 0, name );
142         }
143         
144             public void
145         remove( String JavaDoc name )
146         {
147             // add it in front--last added is first in priority
148
mItems.remove( name );
149         }
150     }
151     
152         ClassList
153     createProviderList()
154     {
155         return( new ClassList( (String JavaDoc)envGet( ENV_PROVIDERS ) ) );
156     }
157     
158         ClassList
159     createCmdList()
160     {
161         return( new ClassList( (String JavaDoc)envGet( ENV_COMMANDS ) ) );
162     }
163     
164         boolean
165     isLegalClassname( String JavaDoc name )
166     {
167         // should test this properly, but at least make sure it doesn't have our delim
168
return( name.indexOf( CLASSNAME_DELIM ) < 0 );
169     }
170     
171         void
172     addProvider( )
173         throws Exception JavaDoc
174     {
175         requireNumOperands( 1, "A provider classname must be specified");
176         
177         final String JavaDoc providerClassname = getOperands()[ 0 ];
178         
179         ClassList list = createProviderList();
180         
181         if ( list.exists( providerClassname ) )
182         {
183             println( "Provider already in list: " + providerClassname );
184         }
185         else if ( ! isLegalClassname( providerClassname ) )
186         {
187             printError( "Illegal classname: " + providerClassname );
188         }
189         else
190         {
191             // if this succeeds, then we'll update the env
192
try
193             {
194                 getConnectionMgr().addProvider( Class.forName( providerClassname ) );
195             }
196             catch( Exception JavaDoc e )
197             {
198                 printError( "WARNING: unable to instantiate provider (added to list anyway): " +
199                     e.getMessage() );
200             }
201             
202             list.add( providerClassname );
203             
204             envPut( ENV_PROVIDERS, list.toString(), true );
205         }
206     }
207     
208         void
209     removeProvider( )
210         throws Exception JavaDoc
211     {
212         requireNumOperands( 1, "A provider classname must be specified");
213         
214         final String JavaDoc providerClassname = getOperands()[ 0 ];
215         
216         ClassList list = createProviderList();
217         
218         if ( ! list.exists( providerClassname ) )
219         {
220             println( "Provider not found: " + providerClassname );
221         }
222         else
223         {
224             // if this succeeds, then we'll update the env
225
try
226             {
227                 final Class JavaDoc theClass = Class.forName( providerClassname );
228                 getConnectionMgr().removeProvider( theClass );
229             }
230             catch( Exception JavaDoc e )
231             {
232                 // ignore
233
}
234             
235             list.remove( providerClassname );
236             
237             envPut( ENV_PROVIDERS, list.toString(), true );
238         }
239     }
240     
241         void
242     displayProviders( )
243         throws Exception JavaDoc
244     {
245         println( "Available providers: " );
246         final String JavaDoc list = IteratorStringifier.stringify( createProviderList().iterator(), "\n" );
247         
248         println( (list.length() == 0) ? "<none>" : list );
249         
250         println( "\nProviders successfully loaded (includes built-ins): " );
251         final JMXConnectorProvider [] providersLoaded = getConnectionMgr().getProviders();
252         for ( int i = 0; i < providersLoaded.length; ++i )
253         {
254             JMXConnectorProvider provider = providersLoaded[ i ];
255             
256             println( provider.getClass().getName() );
257         }
258     }
259     
260         void
261     displayCmds( )
262         throws Exception JavaDoc
263     {
264         println( "Commands configured: " );
265         final String JavaDoc list = IteratorStringifier.stringify( createCmdList().iterator(), "\n" );
266         
267         println( (list.length() == 0) ? "<none>" : list );
268     }
269     
270         void
271     displayConfig( )
272         throws Exception JavaDoc
273     {
274         displayProviders();
275         
276         println( "" );
277         
278         displayCmds();
279     }
280     
281         void
282     addCmd()
283         throws Exception JavaDoc
284     {
285         requireNumOperands( 1, "A command classname must be specified");
286         
287         final String JavaDoc commandClassname = getOperands()[ 0 ];
288         
289         final ClassList list = createCmdList();
290         
291         if ( list.exists( commandClassname ) )
292         {
293             println( "Command already in list: " + commandClassname );
294         }
295         else if ( ! isLegalClassname( commandClassname ) )
296         {
297             printError( "Illegal classname: " + commandClassname );
298         }
299         else
300         {
301             final CmdFactoryIniter initer = new CmdFactoryIniter( getCmdFactory() );
302             final Class JavaDoc theClass = ClassUtil.getClassFromName( commandClassname );
303             
304             initer.addMappings( theClass );
305             
306             list.add( commandClassname );
307             envPut( ENV_COMMANDS, list.toString(), true );
308         }
309     }
310     
311     
312         void
313     removeCmd()
314         throws Exception JavaDoc
315     {
316         requireNumOperands( 1, "A classname must be specified");
317         
318         final String JavaDoc classname = getOperands()[ 0 ];
319         final ClassList list = createCmdList();
320         
321         if ( ! list.exists( classname ) )
322         {
323             println( "Command not registered: " + classname );
324         }
325         else
326         {
327             // remove it from the preferences
328
list.remove( classname );
329             envPut( ENV_PROVIDERS, list.toString(), true );
330             
331             // remove it from the factory
332
final CmdFactoryIniter initer = new CmdFactoryIniter( getCmdFactory() );
333             initer.removeMappings( ClassUtil.getClassFromName( classname ) );
334
335         }
336     }
337     
338     
339         void
340     executeInternal()
341         throws Exception JavaDoc
342     {
343         final String JavaDoc cmdName = getCmdNameAsInvoked();
344         
345         if ( cmdName.equals( SHOW_CONFIG ) )
346         {
347             displayConfig();
348         }
349         else if ( cmdName.equals( ADD_PROVIDER ) )
350         {
351             addProvider();
352         }
353         else if ( cmdName.equals( REMOVE_PROVIDER ) )
354         {
355             removeProvider( );
356         }
357         else if ( cmdName.equals( ADD_CMD ) )
358         {
359             addCmd( );
360         }
361         else if ( cmdName.equals( REMOVE_CMD ) )
362         {
363             removeCmd( );
364         }
365         else
366         {
367             printUsage();
368         }
369     }
370 }
371
372
373
374
375
376
377
Popular Tags