001         package com.croftsoft.apps.vaft.app;
002    
003         import java.io.*;
004         import java.util.StringTokenizer;
005    
006         import com.croftsoft.apps.vaft.core.HostInfo;
007    
008         /*********************************************************************
009         * <P>
010         * @author
011         *   <A HREF="http://www.alumni.caltech.edu/~croft">David W. Croft</A>
012         * @version
013         *   1998-04-26
014         *********************************************************************/
015    
016         public class  Config implements Serializable
017         //////////////////////////////////////////////////////////////////////
018         //////////////////////////////////////////////////////////////////////
019         {
020    
021         private boolean  use_control_panel;
022         private String   rmi_server_name;
023         private int      rmi_server_port;
024         private String   rmi_object_name;
025         private String   web_server_name;
026         private int      web_server_port;
027         private String   web_server_root;
028         private String   peer_list_path;
029         private String   seed_server_name;
030         private int      seed_server_port;
031         private String   seed_object_name;
032         private long     swap_delay;
033         private String   agent_dir;
034    
035         public static final String  USE_CONTROL_PANEL = "USE_CONTROL_PANEL";
036         public static final String  RMI_SERVER_NAME   = "RMI_SERVER_NAME";
037         public static final String  RMI_SERVER_PORT   = "RMI_SERVER_PORT";
038         public static final String  RMI_OBJECT_NAME   = "RMI_OBJECT_NAME";
039         public static final String  WEB_SERVER_NAME   = "WEB_SERVER_NAME";
040         public static final String  WEB_SERVER_PORT   = "WEB_SERVER_PORT";
041         public static final String  WEB_SERVER_ROOT   = "WEB_SERVER_ROOT";
042         public static final String  PEER_LIST_PATH    = "PEER_LIST_PATH";
043         public static final String  SEED_SERVER_NAME  = "SEED_SERVER_NAME";
044         public static final String  SEED_SERVER_PORT  = "SEED_SERVER_PORT";
045         public static final String  SEED_OBJECT_NAME  = "SEED_OBJECT_NAME";
046         public static final String  SWAP_DELAY        = "SWAP_DELAY";
047         public static final String  AGENT_DIR         = "AGENT_DIR";
048    
049         //////////////////////////////////////////////////////////////////////
050         // Static methods
051         //////////////////////////////////////////////////////////////////////
052    
053         public static void  help ( PrintStream  printStream )
054         //////////////////////////////////////////////////////////////////////
055         {
056           Config  default_Config = new Config (
057             Defaults.USE_CONTROL_PANEL,
058             Defaults.RMI_SERVER_NAME  ,
059             Defaults.RMI_SERVER_PORT  ,
060             Defaults.RMI_OBJECT_NAME  ,
061             Defaults.WEB_SERVER_NAME  ,
062             Defaults.WEB_SERVER_PORT  ,
063             Defaults.WEB_SERVER_ROOT  ,
064             Defaults.PEER_LIST_PATH   ,
065             Defaults.SEED_SERVER_NAME ,
066             Defaults.SEED_SERVER_PORT ,
067             Defaults.SEED_OBJECT_NAME ,
068             Defaults.SWAP_DELAY       ,
069             Defaults.AGENT_DIR        );
070           printStream.println ( Defaults.INFO + "\n"
071             + "Argument...:  Default\n" + display ( default_Config ) );
072         }
073    
074         public static String  display ( Config  config )
075         //////////////////////////////////////////////////////////////////////
076         {
077           return
078               USE_CONTROL_PANEL + "...:" + config.use_control_panel + "\n"
079             + RMI_SERVER_NAME + ".....:" + config.rmi_server_name   + "\n"
080             + RMI_SERVER_PORT + ".....:" + config.rmi_server_port   + "\n"
081             + RMI_OBJECT_NAME + ".....:" + config.rmi_object_name   + "\n"
082             + WEB_SERVER_NAME + ".....:" + config.web_server_name   + "\n"
083             + WEB_SERVER_PORT + ".....:" + config.web_server_port   + "\n"
084             + WEB_SERVER_ROOT + ".....:" + config.web_server_root   + "\n"
085             + PEER_LIST_PATH + "......:" + config.peer_list_path    + "\n"
086             + SEED_SERVER_NAME + "....:" + config.seed_server_name  + "\n"
087             + SEED_SERVER_PORT + "....:" + config.seed_server_port  + "\n"
088             + SEED_OBJECT_NAME + "....:" + config.seed_object_name  + "\n"
089             + SWAP_DELAY + "..........:" + config.swap_delay        + "\n"
090             + AGENT_DIR + "...........:" + config.agent_dir         + "\n";
091         }
092    
093         //////////////////////////////////////////////////////////////////////
094         // Factory method
095         //////////////////////////////////////////////////////////////////////
096    
097         public static Config  parse (
098           String [ ]  args, PrintStream  printStream )
099         //////////////////////////////////////////////////////////////////////
100         {
101           if ( ( args == null ) || ( args.length == 0 ) )
102           {
103             Config.help ( printStream );
104             return null;
105           }
106             
107           boolean  use_control_panel = Defaults.USE_CONTROL_PANEL;
108           String   rmi_server_name   = Defaults.RMI_SERVER_NAME;
109           int      rmi_server_port   = Defaults.RMI_SERVER_PORT;
110           String   rmi_object_name   = Defaults.RMI_OBJECT_NAME;
111           String   web_server_name   = Defaults.WEB_SERVER_NAME;
112           int      web_server_port   = Defaults.WEB_SERVER_PORT;
113           String   web_server_root   = Defaults.WEB_SERVER_ROOT;
114           String   peer_list_path    = Defaults.PEER_LIST_PATH;
115           String   seed_server_name  = Defaults.SEED_SERVER_NAME;
116           int      seed_server_port  = Defaults.SEED_SERVER_PORT;
117           String   seed_object_name  = Defaults.SEED_OBJECT_NAME;
118           long     swap_delay        = Defaults.SWAP_DELAY;
119           String   agent_dir         = Defaults.AGENT_DIR;
120    
121           try
122           {
123             for ( int  i = 0; i < args.length; i++ )
124             {
125               String  argument_name  = args [ i ];
126               String  argument_value = args [ ++i ];
127    
128               argument_name = argument_name.toUpperCase ( );
129    
130               if ( argument_name.equals ( USE_CONTROL_PANEL ) )
131                 use_control_panel
132                   = Boolean.valueOf ( argument_value ).booleanValue ( );
133               else if ( argument_name.equals ( RMI_SERVER_NAME ) )
134                 rmi_server_name = argument_value;
135               else if ( argument_name.equals ( RMI_SERVER_PORT ) )
136                 rmi_server_port = Integer.parseInt ( argument_value );
137               else if ( argument_name.equals ( RMI_OBJECT_NAME ) )
138                 rmi_object_name = argument_value;
139               else if ( argument_name.equals ( WEB_SERVER_NAME ) )
140                 web_server_name = argument_value;
141               else if ( argument_name.equals ( WEB_SERVER_PORT ) )
142                 web_server_port = Integer.parseInt ( argument_value );
143               else if ( argument_name.equals ( WEB_SERVER_ROOT ) )
144                 web_server_root = argument_value;
145               else if ( argument_name.equals ( PEER_LIST_PATH ) )
146                 peer_list_path = argument_value;
147               else if ( argument_name.equals ( SEED_SERVER_NAME ) )
148                 seed_server_name = argument_value;
149               else if ( argument_name.equals ( SEED_SERVER_PORT ) )
150                 seed_server_port = Integer.parseInt ( argument_value );
151               else if ( argument_name.equals ( SEED_OBJECT_NAME ) )
152                 seed_object_name = argument_value;
153               else if ( argument_name.equals ( SWAP_DELAY ) )
154                 swap_delay = Long.parseLong ( argument_value );
155               else if ( argument_name.equals ( AGENT_DIR ) )
156                 agent_dir = argument_value;
157               else
158                 throw new IllegalArgumentException ( args [ i ] );
159             }
160           }
161           catch ( IllegalArgumentException  ex )
162           {
163             if ( printStream == null ) throw ex;
164             Config.help ( printStream );
165             printStream.println ( ex.getMessage ( ) );
166             return null;
167           }
168    
169           return new Config (
170             use_control_panel,
171             rmi_server_name,
172             rmi_server_port,
173             rmi_object_name,
174             web_server_name,
175             web_server_port,
176             web_server_root,
177             peer_list_path,
178             seed_server_name,
179             seed_server_port,
180             seed_object_name,
181             swap_delay,
182             agent_dir );
183         }
184    
185         //////////////////////////////////////////////////////////////////////
186         // Constructor method
187         //////////////////////////////////////////////////////////////////////
188    
189         public  Config (
190           boolean  use_control_panel,
191           String   rmi_server_name,
192           int      rmi_server_port,
193           String   rmi_object_name,
194           String   web_server_name,
195           int      web_server_port,
196           String   web_server_root,
197           String   peer_list_path,
198           String   seed_server_name,
199           int      seed_server_port,
200           String   seed_object_name,
201           long     swap_delay,
202           String   agent_dir )
203         //////////////////////////////////////////////////////////////////////
204         {
205           this.use_control_panel = use_control_panel;
206           this.rmi_server_name   = rmi_server_name;
207           this.rmi_server_port   = rmi_server_port;
208           this.rmi_object_name   = rmi_object_name;
209           this.web_server_name   = web_server_name;
210           this.web_server_port   = web_server_port;
211           this.web_server_root   = web_server_root;
212           this.peer_list_path    = peer_list_path;
213           this.seed_server_name  = seed_server_name;
214           this.seed_server_port  = seed_server_port;
215           this.seed_object_name  = seed_object_name;
216           this.swap_delay        = swap_delay;
217           this.agent_dir         = agent_dir;
218         }
219    
220         //////////////////////////////////////////////////////////////////////
221         // Access methods
222         //////////////////////////////////////////////////////////////////////
223    
224         public boolean  getUse_control_panel ( ) { return use_control_panel; }
225         public String   getRmi_server_name   ( ) { return rmi_server_name  ; }
226         public int      getRmi_server_port   ( ) { return rmi_server_port  ; }
227         public String   getRmi_object_name   ( ) { return rmi_object_name  ; }
228         public String   getWeb_server_name   ( ) { return web_server_name  ; }
229         public int      getWeb_server_port   ( ) { return web_server_port  ; }
230         public String   getWeb_server_root   ( ) { return web_server_root  ; }
231         public String   getPeer_list_path    ( ) { return peer_list_path   ; }
232         public String   getSeed_server_name  ( ) { return seed_server_name ; }
233         public int      getSeed_server_port  ( ) { return seed_server_port ; }
234         public String   getSeed_object_name  ( ) { return seed_object_name ; }
235         public long     getSwap_delay        ( ) { return swap_delay       ; }
236         public String   getAgent_dir         ( ) { return agent_dir        ; }
237    
238         //////////////////////////////////////////////////////////////////////
239         //////////////////////////////////////////////////////////////////////
240    
241         public String  display ( )
242         //////////////////////////////////////////////////////////////////////
243         {
244           return display ( this );
245         }
246    
247         public HostInfo  createSeed ( )
248         //////////////////////////////////////////////////////////////////////
249         {
250           return new HostInfo (
251             seed_server_name, seed_server_port, seed_object_name,
252             new String [ ] { "com.orbs.pub.app.agent.vaft.core.SwapRemote" }
253             );
254         }
255    
256         //////////////////////////////////////////////////////////////////////
257         //////////////////////////////////////////////////////////////////////
258         }