1 23 24 29 30 package com.sun.cli.jmx.cmd; 31 32 import java.util.HashMap ; 33 import java.util.ArrayList ; 34 import java.util.Iterator ; 35 36 import com.sun.cli.jmx.support.CLISupportMBeanProxy; 37 import com.sun.cli.util.ClassUtil; 38 import com.sun.cli.util.stringifier.SmartStringifier; 39 40 public class CmdFactory 41 { 42 private final HashMap mCmds; 43 44 public static final String DEFAULT_CMD_NAME = "DEFAULT_CMD"; 45 46 private static void 47 p( Object o ) 48 { 49 System.out.println( SmartStringifier.toString( o ) ); 50 } 51 52 public 53 CmdFactory() 54 { 55 mCmds = new HashMap (); 56 } 57 58 public void 59 addCmdMapping( String name, Class theClass ) 60 { 61 if ( ! Cmd.class.isAssignableFrom( theClass ) ) 62 { 63 throw new IllegalArgumentException ( "Command " + theClass.getName() + 64 " must implement " + Cmd.class.getName() ); 65 } 66 67 mCmds.put( name, theClass ); 68 } 69 70 public void 71 removeCmdMapping( String name ) 72 { 73 mCmds.remove( name ); 74 } 75 76 public Cmd 77 createCmd( String name, CmdEnv env ) 78 throws Exception 79 { 80 final String cmdString = name; 81 82 final Cmd cmd = instantiateCmd( cmdString, env ); 83 84 return( cmd ); 85 } 86 87 public Class 88 getClass( String cmdName ) 89 throws Exception 90 { 91 final Class cmdClass = (Class )mCmds.get( cmdName ); 92 93 return( cmdClass ); 94 } 95 96 public String [] 97 getNames( Class theClass ) 98 { 99 final ArrayList list = new ArrayList (); 100 101 final Iterator keys = mCmds.keySet().iterator(); 102 103 while( keys.hasNext() ) 104 { 105 final String key = (String )keys.next(); 106 107 final Class thisClass = (Class )mCmds.get( key ); 108 if ( thisClass == theClass ) 109 { 110 list.add( key ); 111 } 112 } 113 114 final String [] names = new String [ list.size() ]; 115 list.toArray( names ); 116 117 return( names ); 118 } 119 120 private Cmd 121 instantiateCmd( String cmdName, CmdEnv env ) 122 throws Exception 123 { 124 Class cmdClass = (Class )mCmds.get( cmdName ); 125 126 if ( cmdClass == null ) 127 { 128 cmdClass = (Class )mCmds.get( DEFAULT_CMD_NAME ); 130 } 131 132 if ( cmdClass == null ) 133 { 134 return( null ); 135 } 136 137 final Object [] args = new Object [] { env }; 138 139 Cmd cmd = null; 140 try 141 { 142 cmd = (CmdBase)ClassUtil.InstantiateObject( cmdClass, args ); 143 } 144 catch( Exception e ) 145 { 146 p( e.getMessage() ); 147 e.printStackTrace(); 148 throw e; 149 } 150 151 return( cmd ); 152 } 153 } 154 155 | Popular Tags |