Author: thobbs
Date: Thu Apr 12 17:39:08 2012
New Revision: 1325398

URL: http://svn.apache.org/viewvc?rev=1325398&view=rev
Log:
Started tidy up of easy config code.  Lookupservice config is starting to look 
better.

Added:
    
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/ConfigurationFactory.java
    
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/EasyConfiguration.java
    
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/settings/
    
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/settings/ClasspathSetting.java
    
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/settings/CodebaseSetting.java
    
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/settings/DefaultOptions.java
    
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/settings/GroupedSetting.java
    
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/settings/Options.java
    
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/settings/PolicySetting.java
    
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/settings/ServerExporterSetting.java
    
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/settings/Setting.java
    
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/settings/SettingsFactory.java
    
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/settings/start.config
Removed:
    
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/ClasspathSetting.java
    
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/CodebaseSetting.java
    
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/GroupedSetting.java
    
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/Options.java
    
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/PolicySetting.java
    
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/ServerExporterSetting.java
    
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/Setting.java
    
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/start.config
    
river/jtsk/skunk/easystart/test/src/org/apache/river/extra/easystart/GroupEncapsulatorTest.java
Modified:
    
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/StartLookupService.java
    
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/StartMahaloService.java
    
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/StartOutriggerService.java
    
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/JavaSpaceConfiguration.java
    
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/LookupServiceConfiguration.java
    
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/TransactionServiceConfiguration.java

Modified: 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/StartLookupService.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/StartLookupService.java?rev=1325398&r1=1325397&r2=1325398&view=diff
==============================================================================
--- 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/StartLookupService.java
 (original)
+++ 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/StartLookupService.java
 Thu Apr 12 17:39:08 2012
@@ -22,11 +22,11 @@ import java.io.File;
 import java.io.IOException;
 import java.util.logging.Logger;
 
-import org.apache.river.extra.easystart.config.LookupServiceConfiguration;
-
-import net.jini.config.Configuration;
 import net.jini.config.ConfigurationException;
 
+import org.apache.river.extra.easystart.config.ConfigurationFactory;
+import org.apache.river.extra.easystart.config.LookupServiceConfiguration;
+import org.apache.river.extra.easystart.config.settings.DefaultOptions;
 
 import com.sun.jini.start.ServiceStarter;
 
@@ -52,15 +52,15 @@ public class StartLookupService {
                log.info("Using RIVER_HOME="+RIVER_HOME);
                log.info("Using HTTP_PORT="+HTTP_PORT);
                
-               final String riverHome = "/home/tom/projects/river/easystart";
-               final String pathToConfig = 
"/home/tom/projects/river/easystart/src-extra/empty.config";
-               final String pathToPolicy = 
"/home/tom/projects/river/easystart/src-extra/outrigger.policy";
+//             final String riverHome = "/home/tom/projects/river/easystart";
+//             final String pathToConfig = 
"/home/tom/projects/river/easystart/src-extra/empty.config";
+//             final String pathToPolicy = 
"/home/tom/projects/river/easystart/src-extra/outrigger.policy";
                
                //this works because these files are in river-extras.jar which 
is on the CP
 //             final String pathToConfig = "empty.config";
 //             final String pathToPolicy = "outrigger.policy";
                
-               final String classpath = 
"/home/tom/projects/river/easystart/lib/reggie.jar";
+//             final String classpath = 
"/home/tom/projects/river/easystart/lib/reggie.jar";
                
 //             LookupServiceConfiguration config = new 
LookupServiceConfiguration(8080,
 //                             riverHome,
@@ -85,8 +85,17 @@ public class StartLookupService {
 //             Configuration config = vcb.createConfiguration();
                
 //             Configuration config = new 
ConventionalLookupServiceConfiguration(new String[0]);
-               Configuration config = LookupServiceConfiguration.config();
-               ServiceStarter.main(config);
+//             Configuration config = LookupServiceConfiguration.config();
+               
+               DefaultOptions options = new DefaultOptions();
+               
+               ConfigurationFactory configFac = new 
ConfigurationFactory(options);
+               LookupServiceConfiguration config = 
configFac.lookupServiceConfig();
+               config.addMemberGroup("Lester").addMemberGroup("Jeff");
+               config.addLookupGroup("Sarah").addLookupGroup("Chuck");
+               config.setRiverPort(4160);
+               
+               ServiceStarter.main(config.riverConfig());
                
        }
 

Modified: 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/StartMahaloService.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/StartMahaloService.java?rev=1325398&r1=1325397&r2=1325398&view=diff
==============================================================================
--- 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/StartMahaloService.java
 (original)
+++ 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/StartMahaloService.java
 Thu Apr 12 17:39:08 2012
@@ -22,13 +22,8 @@ import java.io.File;
 import java.io.IOException;
 import java.util.logging.Logger;
 
-import net.jini.config.Configuration;
 import net.jini.config.ConfigurationException;
 
-import org.apache.river.extra.easystart.config.TransactionServiceConfiguration;
-
-import com.sun.jini.start.ServiceStarter;
-
 public class StartMahaloService {
 
 
@@ -51,8 +46,8 @@ public class StartMahaloService {
                log.info("Using RIVER_HOME="+RIVER_HOME);
                log.info("Using HTTP_PORT="+HTTP_PORT);
                
-               Configuration config = TransactionServiceConfiguration.config();
-               ServiceStarter.main(config);
+//             Configuration config = TransactionServiceConfiguration.config();
+//             ServiceStarter.main(config);
        }
 
        private static void validateArgs(String[] args) {

Modified: 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/StartOutriggerService.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/StartOutriggerService.java?rev=1325398&r1=1325397&r2=1325398&view=diff
==============================================================================
--- 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/StartOutriggerService.java
 (original)
+++ 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/StartOutriggerService.java
 Thu Apr 12 17:39:08 2012
@@ -22,13 +22,8 @@ import java.io.File;
 import java.io.IOException;
 import java.util.logging.Logger;
 
-import net.jini.config.Configuration;
 import net.jini.config.ConfigurationException;
 
-import org.apache.river.extra.easystart.config.JavaSpaceConfiguration;
-
-import com.sun.jini.start.ServiceStarter;
-
 public class StartOutriggerService {
 
 
@@ -67,8 +62,8 @@ public class StartOutriggerService {
 //             config.addLookupGroup("Lester");
 //             config.addLookupGroup("Jeff");
                
-               Configuration config = JavaSpaceConfiguration.config();
-               ServiceStarter.main(config);
+//             Configuration config = JavaSpaceConfiguration.config();
+//             ServiceStarter.main(config);
        }
 
        private static void validateArgs(String[] args) {

Added: 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/ConfigurationFactory.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/ConfigurationFactory.java?rev=1325398&view=auto
==============================================================================
--- 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/ConfigurationFactory.java
 (added)
+++ 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/ConfigurationFactory.java
 Thu Apr 12 17:39:08 2012
@@ -0,0 +1,33 @@
+package org.apache.river.extra.easystart.config;
+
+import org.apache.river.extra.easystart.config.settings.DefaultOptions;
+
+public class ConfigurationFactory {
+
+       private final DefaultOptions options;
+       
+       public ConfigurationFactory(DefaultOptions options) {
+               this.options = (DefaultOptions) options.clone();
+       }
+       
+
+       public LookupServiceConfiguration lookupServiceConfig() {
+               return new LookupServiceConfiguration(options);
+               
+//             opts.PACKAGE_NAME.setOverride("com.sun.jini.reggie");
+////   opts.RIVER_HOME;  - no override for this
+//     opts.HTTP_PORT.setOverride("8080");
+//     opts.JINI_PORT.setOverride("4160");
+////   opts.MEMBER_GROUPS.add("Lester").add("Jeff");
+//     opts.MEMBER_GROUPS.add("Chuck").add("Sarah");
+////   opts.LOOKUP_GROUPS.add("Chuck").add("Sarah");
+//     
opts.SERVICE_IMPL.setOverride("com.sun.jini.reggie.TransientRegistrarImpl");
+//     opts.CODEBASE.add("reggie-dl.jar").add("jsk-dl.jar");
+//     opts.CLASSPATH.add(opts.RIVER_HOME.getOverride()+"/lib/reggie.jar");
+//     opts.CLASSPATH.add(opts.RIVER_HOME.getOverride()+"/lib/jini-ext.jar");
+////   opts.POLICY.setOverride("secure.policy");
+////   opts.SERVER_EXPORTER.asJeriExporter("localhost", 4161);
+               
+       }
+       
+}

Added: 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/EasyConfiguration.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/EasyConfiguration.java?rev=1325398&view=auto
==============================================================================
--- 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/EasyConfiguration.java
 (added)
+++ 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/EasyConfiguration.java
 Thu Apr 12 17:39:08 2012
@@ -0,0 +1,20 @@
+package org.apache.river.extra.easystart.config;
+
+import java.io.Reader;
+import java.util.HashMap;
+import java.util.Map;
+
+import net.jini.config.ConfigurationException;
+import net.jini.config.ConfigurationFile;
+
+import org.apache.river.extra.easystart.config.settings.Setting;
+
+public abstract class EasyConfiguration extends ConfigurationFile {
+
+       private final Map<String, Setting> defaults = new HashMap<String, 
Setting>();
+       
+       protected EasyConfiguration(Reader reader, String[] options) throws 
ConfigurationException {
+               super(reader, options);
+       }
+
+}

Modified: 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/JavaSpaceConfiguration.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/JavaSpaceConfiguration.java?rev=1325398&r1=1325397&r2=1325398&view=diff
==============================================================================
--- 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/JavaSpaceConfiguration.java
 (original)
+++ 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/JavaSpaceConfiguration.java
 Thu Apr 12 17:39:08 2012
@@ -1,89 +1,80 @@
 package org.apache.river.extra.easystart.config;
 
-import java.io.IOException;
 import java.io.Reader;
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.util.Properties;
 import java.util.logging.Logger;
 
 import net.jini.config.ConfigurationException;
 import net.jini.config.ConfigurationFile;
 
-import org.apache.river.config.builder.VelocityConfigurationBuilder;
-import org.apache.velocity.Template;
-import org.apache.velocity.VelocityContext;
-import org.apache.velocity.app.VelocityEngine;
-
 public class JavaSpaceConfiguration extends ConfigurationFile {
 
        private static final Logger LOGGER = 
Logger.getLogger(JavaSpaceConfiguration.class.getName());
        
-       public static JavaSpaceConfiguration config() throws IOException, 
ConfigurationException {
-               
-               Options opts = new Options();
-               opts.PACKAGE_NAME.setOverride("com.sun.jini.outrigger");
-//             opts.RIVER_HOME;  - no override for this
-               opts.HTTP_PORT.setOverride("8080");
-//             opts.JINI_PORT.setOverride("4160");
-//             opts.MEMBER_GROUPS.add("Lester").add("Jeff");
-               opts.LOOKUP_GROUPS.add("Chuck").add("Sarah");
-               
opts.SERVICE_IMPL.setOverride("com.sun.jini.outrigger.TransientOutriggerImpl");
-               opts.CODEBASE.add("outrigger-dl.jar").add("jsk-dl.jar");
-               
opts.CLASSPATH.add(opts.RIVER_HOME.getOverride()+"/lib/outrigger.jar");
-//             
opts.CLASSPATH.add(opts.RIVER_HOME.getOverride()+"/lib/jini-ext.jar");
-//             opts.POLICY.setOverride("secure.policy");
-//             opts.SERVER_EXPORTER.asJeriExporter("localhost", 4161);
-               
-               Properties p = new Properties();
-               p.load( 
VelocityConfigurationBuilder.class.getResourceAsStream("velocity.properties") );
-               VelocityEngine ve = new VelocityEngine(p);
-               VelocityContext context = new VelocityContext();
-               
-               StringBuilder options = new StringBuilder();
-               StringBuilder defaults = new StringBuilder();
-               String key = opts.PACKAGE_NAME.getOverride()+'.';
-               for(Setting setting : opts.OPTIONS) {
-                       String format = setting.getFormatter();
-                       if(setting.isServiceDescription()) {
-                       
-                       String name = key + setting.getName();
-                       
-                       options
-                               .append(",\"")
-                               .append(name)
-                               .append('=')
-                               .append(String.format(format, 
setting.getOverride()))
-                               .append("\"\n");
-                       
-                       defaults
-                               .append(setting.getName())
-                               .append('=')
-                               .append(String.format(format, 
setting.getDefault()))
-                               .append(";\n");
-                       } else {
-                       context.put(setting.getName(),
-                               String.format(format, setting.getOverride()));
-                       }
-               }
-               
-        context.put("defaults", defaults.toString());
-        context.put("options", options.toString());
-        
-        Template template = ve.getTemplate( 
Options.class.getResource("start.config").toExternalForm() );
-        
-        StringWriter sw = new StringWriter();
-
-        template.merge(context, sw);
-        
-        String s = sw.toString();
-        
-        LOGGER.warning(s);
-        
-        StringReader sr = new StringReader(s);
-        
-        return new JavaSpaceConfiguration(sr, new 
String[0]);//opts.getOptionsArray());
-       }
+//     public static JavaSpaceConfiguration config() throws IOException, 
ConfigurationException {
+//             
+//             Options opts = new Options();
+//             opts.PACKAGE_NAME.setOverride("com.sun.jini.outrigger");
+////           opts.RIVER_HOME;  - no override for this
+//             opts.HTTP_PORT.setOverride("8080");
+////           opts.JINI_PORT.setOverride("4160");
+////           opts.MEMBER_GROUPS.add("Lester").add("Jeff");
+//             opts.LOOKUP_GROUPS.add("Chuck").add("Sarah");
+//             
opts.SERVICE_IMPL.setOverride("com.sun.jini.outrigger.TransientOutriggerImpl");
+//             opts.CODEBASE.add("outrigger-dl.jar").add("jsk-dl.jar");
+//             
opts.CLASSPATH.add(opts.RIVER_HOME.getOverride()+"/lib/outrigger.jar");
+////           
opts.CLASSPATH.add(opts.RIVER_HOME.getOverride()+"/lib/jini-ext.jar");
+////           opts.POLICY.setOverride("secure.policy");
+////           opts.SERVER_EXPORTER.asJeriExporter("localhost", 4161);
+//             
+//             Properties p = new Properties();
+//             p.load( 
VelocityConfigurationBuilder.class.getResourceAsStream("velocity.properties") );
+//             VelocityEngine ve = new VelocityEngine(p);
+//             VelocityContext context = new VelocityContext();
+//             
+//             StringBuilder options = new StringBuilder();
+//             StringBuilder defaults = new StringBuilder();
+//             String key = opts.PACKAGE_NAME.getOverride()+'.';
+//             for(Setting setting : opts.OPTIONS) {
+//                     String format = setting.getFormatter();
+//                     if(setting.isServiceDescription()) {
+//                     
+//                     String name = key + setting.getName();
+//                     
+//                     options
+//                             .append(",\"")
+//                             .append(name)
+//                             .append('=')
+//                             .append(String.format(format, 
setting.getOverride()))
+//                             .append("\"\n");
+//                     
+//                     defaults
+//                             .append(setting.getName())
+//                             .append('=')
+//                             .append(String.format(format, 
setting.getDefault()))
+//                             .append(";\n");
+//                     } else {
+//                     context.put(setting.getName(),
+//                             String.format(format, setting.getOverride()));
+//                     }
+//             }
+//             
+//        context.put("defaults", defaults.toString());
+//        context.put("options", options.toString());
+//        
+//        Template template = ve.getTemplate( 
Options.class.getResource("start.config").toExternalForm() );
+//        
+//        StringWriter sw = new StringWriter();
+//
+//        template.merge(context, sw);
+//        
+//        String s = sw.toString();
+//        
+//        LOGGER.warning(s);
+//        
+//        StringReader sr = new StringReader(s);
+//        
+//        return new JavaSpaceConfiguration(sr, new 
String[0]);//opts.getOptionsArray());
+//     }
        
        private JavaSpaceConfiguration(Reader reader, String[] options) throws 
ConfigurationException {
                super(reader,options);

Modified: 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/LookupServiceConfiguration.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/LookupServiceConfiguration.java?rev=1325398&r1=1325397&r2=1325398&view=diff
==============================================================================
--- 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/LookupServiceConfiguration.java
 (original)
+++ 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/LookupServiceConfiguration.java
 Thu Apr 12 17:39:08 2012
@@ -1,41 +1,64 @@
 package org.apache.river.extra.easystart.config;
 
 import java.io.IOException;
-import java.io.Reader;
 import java.io.StringReader;
 import java.io.StringWriter;
 import java.util.Properties;
 import java.util.logging.Logger;
 
+import net.jini.config.Configuration;
 import net.jini.config.ConfigurationException;
 import net.jini.config.ConfigurationFile;
 
 import org.apache.river.config.builder.VelocityConfigurationBuilder;
+import org.apache.river.extra.easystart.config.settings.DefaultOptions;
+import org.apache.river.extra.easystart.config.settings.GroupedSetting;
+import org.apache.river.extra.easystart.config.settings.Options;
+import org.apache.river.extra.easystart.config.settings.Setting;
 import org.apache.velocity.Template;
 import org.apache.velocity.VelocityContext;
 import org.apache.velocity.app.VelocityEngine;
 
-public class LookupServiceConfiguration extends ConfigurationFile {
+public class LookupServiceConfiguration {
 
-       private static final Logger LOGGER = 
Logger.getLogger(LookupServiceConfiguration.class.getName());
+       private final DefaultOptions options;
        
-       public static LookupServiceConfiguration config() throws IOException, 
ConfigurationException {
-               
-               Options opts = new Options();
-               opts.PACKAGE_NAME.setOverride("com.sun.jini.reggie");
-//             opts.RIVER_HOME;  - no override for this
-               opts.HTTP_PORT.setOverride("8080");
-               opts.JINI_PORT.setOverride("4160");
-//             opts.MEMBER_GROUPS.add("Lester").add("Jeff");
-               opts.MEMBER_GROUPS.add("Chuck").add("Sarah");
-//             opts.LOOKUP_GROUPS.add("Chuck").add("Sarah");
-               
opts.SERVICE_IMPL.setOverride("com.sun.jini.reggie.TransientRegistrarImpl");
-               opts.CODEBASE.add("reggie-dl.jar").add("jsk-dl.jar");
-               
opts.CLASSPATH.add(opts.RIVER_HOME.getOverride()+"/lib/reggie.jar");
-               
opts.CLASSPATH.add(opts.RIVER_HOME.getOverride()+"/lib/jini-ext.jar");
-//             opts.POLICY.setOverride("secure.policy");
-//             opts.SERVER_EXPORTER.asJeriExporter("localhost", 4161);
+       public LookupServiceConfiguration(DefaultOptions opts) {
+               this.options = opts;
                
+               
this.options.get(DefaultOptions.PACKAGE_NAME).setOverride("com.sun.jini.reggie");
+               
this.options.get(DefaultOptions.SERVICE_IMPL).setOverride("com.sun.jini.reggie.TransientRegistrarImpl");
+               
this.options.getGrouped(DefaultOptions.CODEBASE).add("reggie-dl.jar").add("jsk-dl.jar");
+               
this.options.getGrouped(DefaultOptions.CLASSPATH).add(opts.get(DefaultOptions.RIVER_HOME).getOverride()+"/lib/reggie.jar");
+               
this.options.getGrouped(DefaultOptions.CLASSPATH).add(opts.get(DefaultOptions.RIVER_HOME).getOverride()+"/lib/jini-ext.jar");
+       }
+
+       private static final Logger LOGGER = 
Logger.getLogger(LookupServiceConfiguration.class.getName());
+
+       public LookupServiceConfiguration addMemberGroup(String grp) {
+               getGroupSetting(Options.MEMBER_GROUP).add(grp);
+               return this;
+       }
+
+       public LookupServiceConfiguration addLookupGroup(String grp) {
+               getGroupSetting(Options.LOOKUP_GROUP).add(grp);
+               return this;
+       }
+
+       public LookupServiceConfiguration setRiverPort(int port) {
+               
getSetting(Options.RIVER_PORT).setOverride(String.valueOf(port));
+               return this;
+       }
+       
+       private Setting getSetting(String key) {
+               return options.get(key);
+       }
+
+       private GroupedSetting getGroupSetting(String key) {
+               return (GroupedSetting) options.get(key);
+       }
+       
+       public Configuration riverConfig() throws ConfigurationException, 
IOException {
                Properties p = new Properties();
                p.load( 
VelocityConfigurationBuilder.class.getResourceAsStream("velocity.properties") );
                VelocityEngine ve = new VelocityEngine(p);
@@ -43,8 +66,8 @@ public class LookupServiceConfiguration 
                
                StringBuilder options = new StringBuilder();
                StringBuilder defaults = new StringBuilder();
-               String key = opts.PACKAGE_NAME.getOverride()+'.';
-               for(Setting setting : opts.OPTIONS) {
+               String key = 
this.options.get(Options.PACKAGE_NAME).getOverride()+'.';
+               for(Setting setting : this.options.getOptions()) {
                        String format = setting.getFormatter();
                        if(setting.isServiceDescription()) {
                        
@@ -83,25 +106,79 @@ public class LookupServiceConfiguration 
         
         StringReader sr = new StringReader(s);
         
-        return new LookupServiceConfiguration(sr, new 
String[0]);//opts.getOptionsArray());
+        return new ConfigurationFile(sr, new 
String[0]);//opts.getOptionsArray());
        }
        
-       private LookupServiceConfiguration(Reader reader, String[] options) 
throws ConfigurationException {
-               super(reader,options);
-       }
+//     public static LookupServiceConfiguration config() throws IOException, 
ConfigurationException {
+//             
+//             Options opts = new Options();
+//             opts.PACKAGE_NAME.setOverride("com.sun.jini.reggie");
+////           opts.RIVER_HOME;  - no override for this
+//             opts.HTTP_PORT.setOverride("8080");
+//             opts.JINI_PORT.setOverride("4160");
+////           opts.MEMBER_GROUPS.add("Lester").add("Jeff");
+//             opts.MEMBER_GROUPS.add("Chuck").add("Sarah");
+////           opts.LOOKUP_GROUPS.add("Chuck").add("Sarah");
+//             
opts.SERVICE_IMPL.setOverride("com.sun.jini.reggie.TransientRegistrarImpl");
+//             opts.CODEBASE.add("reggie-dl.jar").add("jsk-dl.jar");
+//             
opts.CLASSPATH.add(opts.RIVER_HOME.getOverride()+"/lib/reggie.jar");
+//             
opts.CLASSPATH.add(opts.RIVER_HOME.getOverride()+"/lib/jini-ext.jar");
+////           opts.POLICY.setOverride("secure.policy");
+////           opts.SERVER_EXPORTER.asJeriExporter("localhost", 4161);
+//             
+//             Properties p = new Properties();
+//             p.load( 
VelocityConfigurationBuilder.class.getResourceAsStream("velocity.properties") );
+//             VelocityEngine ve = new VelocityEngine(p);
+//             VelocityContext context = new VelocityContext();
+//             
+//             StringBuilder options = new StringBuilder();
+//             StringBuilder defaults = new StringBuilder();
+//             String key = opts.PACKAGE_NAME.getOverride()+'.';
+//             for(Setting setting : opts.OPTIONS) {
+//                     String format = setting.getFormatter();
+//                     if(setting.isServiceDescription()) {
+//                     
+//                     String name = key + setting.getName();
+//                     
+//                     options
+//                             .append(",\"")
+//                             .append(name)
+//                             .append('=')
+//                             .append(String.format(format, 
setting.getOverride()))
+//                             .append("\"\n");
+//                     
+//                     defaults
+//                             .append(setting.getName())
+//                             .append('=')
+//                             .append(String.format(format, 
setting.getDefault()))
+//                             .append(";\n");
+//                     } else {
+//                     context.put(setting.getName(),
+//                             String.format(format, setting.getOverride()));
+//                     }
+//             }
+//             
+//        context.put("defaults", defaults.toString());
+//        context.put("options", options.toString());
+//        
+//        Template template = ve.getTemplate( 
Options.class.getResource("start.config").toExternalForm() );
+//        
+//        StringWriter sw = new StringWriter();
+//
+//        template.merge(context, sw);
+//        
+//        String s = sw.toString();
+//        
+//        LOGGER.warning(s);
+//        
+//        StringReader sr = new StringReader(s);
+//        
+//        return new LookupServiceConfiguration(sr, new 
String[0]);//opts.getOptionsArray());
+//     }
        
-//     public ConventionalLookupServiceConfiguration(String[] options) throws 
ConfigurationException {
-//             super(fileReader(), options);
+//     LookupServiceConfiguration(Reader reader, String[] options) throws 
ConfigurationException {
+//             super(reader,options);
 //     }
+       
 
-       @Override
-       public Object getEntry(String component, String name, Class type,
-                       Object defaultValue) throws ConfigurationException {
-               if("initialMemberGroups".equals(name)) {
-//                     return new String[0];
-                       return super.getEntry(component, name, type, 
defaultValue);
-               } else {
-                       return super.getEntry(component, name, type, 
defaultValue);
-               }
-       }
 }

Modified: 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/TransactionServiceConfiguration.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/TransactionServiceConfiguration.java?rev=1325398&r1=1325397&r2=1325398&view=diff
==============================================================================
--- 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/TransactionServiceConfiguration.java
 (original)
+++ 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/TransactionServiceConfiguration.java
 Thu Apr 12 17:39:08 2012
@@ -1,89 +1,80 @@
 package org.apache.river.extra.easystart.config;
 
-import java.io.IOException;
 import java.io.Reader;
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.util.Properties;
 import java.util.logging.Logger;
 
 import net.jini.config.ConfigurationException;
 import net.jini.config.ConfigurationFile;
 
-import org.apache.river.config.builder.VelocityConfigurationBuilder;
-import org.apache.velocity.Template;
-import org.apache.velocity.VelocityContext;
-import org.apache.velocity.app.VelocityEngine;
-
 public class TransactionServiceConfiguration extends ConfigurationFile {
 
        private static final Logger LOGGER = 
Logger.getLogger(TransactionServiceConfiguration.class.getName());
        
-       public static TransactionServiceConfiguration config() throws 
IOException, ConfigurationException {
-               
-               Options opts = new Options();
-               opts.PACKAGE_NAME.setOverride("com.sun.jini.mahalo");
-//             opts.RIVER_HOME;  - no override for this
-               opts.HTTP_PORT.setOverride("8080");
-//             opts.JINI_PORT.setOverride("4160");
-//             opts.MEMBER_GROUPS.add("Lester").add("Jeff");
-               opts.LOOKUP_GROUPS.add("Chuck").add("Sarah");
-               
opts.SERVICE_IMPL.setOverride("com.sun.jini.mahalo.TransientMahaloImpl");
-               opts.CODEBASE.add("mahalo-dl.jar").add("jsk-dl.jar");
-               
opts.CLASSPATH.add(opts.RIVER_HOME.getOverride()+"/lib/mahalo.jar");
-//             
opts.CLASSPATH.add(opts.RIVER_HOME.getOverride()+"/lib/jini-ext.jar");
-//             opts.POLICY.setOverride("secure.policy");
-//             opts.SERVER_EXPORTER.asJeriExporter("localhost", 4161);
-               
-               Properties p = new Properties();
-               p.load( 
VelocityConfigurationBuilder.class.getResourceAsStream("velocity.properties") );
-               VelocityEngine ve = new VelocityEngine(p);
-               VelocityContext context = new VelocityContext();
-               
-               StringBuilder options = new StringBuilder();
-               StringBuilder defaults = new StringBuilder();
-               String key = opts.PACKAGE_NAME.getOverride()+'.';
-               for(Setting setting : opts.OPTIONS) {
-                       String format = setting.getFormatter();
-                       if(setting.isServiceDescription()) {
-                       
-                       String name = key + setting.getName();
-                       
-                       options
-                               .append(",\"")
-                               .append(name)
-                               .append('=')
-                               .append(String.format(format, 
setting.getOverride()))
-                               .append("\"\n");
-                       
-                       defaults
-                               .append(setting.getName())
-                               .append('=')
-                               .append(String.format(format, 
setting.getDefault()))
-                               .append(";\n");
-                       } else {
-                       context.put(setting.getName(),
-                               String.format(format, setting.getOverride()));
-                       }
-               }
-               
-        context.put("defaults", defaults.toString());
-        context.put("options", options.toString());
-        
-        Template template = ve.getTemplate( 
Options.class.getResource("start.config").toExternalForm() );
-        
-        StringWriter sw = new StringWriter();
-
-        template.merge(context, sw);
-        
-        String s = sw.toString();
-        
-        LOGGER.warning(s);
-        
-        StringReader sr = new StringReader(s);
-        
-        return new TransactionServiceConfiguration(sr, new 
String[0]);//opts.getOptionsArray());
-       }
+//     public static TransactionServiceConfiguration config() throws 
IOException, ConfigurationException {
+//             
+//             Options opts = new Options();
+//             opts.PACKAGE_NAME.setOverride("com.sun.jini.mahalo");
+////           opts.RIVER_HOME;  - no override for this
+//             opts.HTTP_PORT.setOverride("8080");
+////           opts.JINI_PORT.setOverride("4160");
+////           opts.MEMBER_GROUPS.add("Lester").add("Jeff");
+//             opts.LOOKUP_GROUPS.add("Chuck").add("Sarah");
+//             
opts.SERVICE_IMPL.setOverride("com.sun.jini.mahalo.TransientMahaloImpl");
+//             opts.CODEBASE.add("mahalo-dl.jar").add("jsk-dl.jar");
+//             
opts.CLASSPATH.add(opts.RIVER_HOME.getOverride()+"/lib/mahalo.jar");
+////           
opts.CLASSPATH.add(opts.RIVER_HOME.getOverride()+"/lib/jini-ext.jar");
+////           opts.POLICY.setOverride("secure.policy");
+////           opts.SERVER_EXPORTER.asJeriExporter("localhost", 4161);
+//             
+//             Properties p = new Properties();
+//             p.load( 
VelocityConfigurationBuilder.class.getResourceAsStream("velocity.properties") );
+//             VelocityEngine ve = new VelocityEngine(p);
+//             VelocityContext context = new VelocityContext();
+//             
+//             StringBuilder options = new StringBuilder();
+//             StringBuilder defaults = new StringBuilder();
+//             String key = opts.PACKAGE_NAME.getOverride()+'.';
+//             for(Setting setting : opts.OPTIONS) {
+//                     String format = setting.getFormatter();
+//                     if(setting.isServiceDescription()) {
+//                     
+//                     String name = key + setting.getName();
+//                     
+//                     options
+//                             .append(",\"")
+//                             .append(name)
+//                             .append('=')
+//                             .append(String.format(format, 
setting.getOverride()))
+//                             .append("\"\n");
+//                     
+//                     defaults
+//                             .append(setting.getName())
+//                             .append('=')
+//                             .append(String.format(format, 
setting.getDefault()))
+//                             .append(";\n");
+//                     } else {
+//                     context.put(setting.getName(),
+//                             String.format(format, setting.getOverride()));
+//                     }
+//             }
+//             
+//        context.put("defaults", defaults.toString());
+//        context.put("options", options.toString());
+//        
+//        Template template = ve.getTemplate( 
Options.class.getResource("start.config").toExternalForm() );
+//        
+//        StringWriter sw = new StringWriter();
+//
+//        template.merge(context, sw);
+//        
+//        String s = sw.toString();
+//        
+//        LOGGER.warning(s);
+//        
+//        StringReader sr = new StringReader(s);
+//        
+//        return new TransactionServiceConfiguration(sr, new 
String[0]);//opts.getOptionsArray());
+//     }
        
        private TransactionServiceConfiguration(Reader reader, String[] 
options) throws ConfigurationException {
                super(reader,options);

Added: 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/settings/ClasspathSetting.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/settings/ClasspathSetting.java?rev=1325398&view=auto
==============================================================================
--- 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/settings/ClasspathSetting.java
 (added)
+++ 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/settings/ClasspathSetting.java
 Thu Apr 12 17:39:08 2012
@@ -0,0 +1,46 @@
+package org.apache.river.extra.easystart.config.settings;
+
+import java.util.List;
+
+public class ClasspathSetting extends GroupedSetting {
+
+       protected ClasspathSetting(String name, 
+                                                     List<String> defaults,
+                                                     String format, 
+                                                     String elementFormat, 
+                                                     boolean 
serviceDescription) {
+               super(name, defaults, format, elementFormat, 
serviceDescription);
+       }
+
+       @Override
+       protected String formatAsArray(List<String> items) {
+               StringBuilder sb = new StringBuilder();
+               sb
+                       .append("ConfigUtil.concat(")
+                       .append('\n')
+                       .append("new Object[] {")
+                       .append('\n');
+               for(int i=0 ; i<items.size() ; i++) {
+                       sb.append('"').append(items.get(i)).append('"');
+                       if(i < items.size()-1) {
+                               sb.append(",java.io.File.pathSeparator,");
+                       }
+               }
+               sb.append(" })");
+               
+               return String.format(super.getFormatter(), sb.toString());
+       }
+       
+       @Override
+       public Object clone() {
+               GroupedSetting clone = new ClasspathSetting(super.name, 
+                                                                               
                   super.defaults, 
+                                                                               
                   super.format, 
+                                                                               
                   this.elementFormat, 
+                                                                               
                   super.isServiceDescription());
+               for(String override : this.overrides) {
+                       clone.add(override);
+               }
+               return clone;
+       }
+}

Added: 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/settings/CodebaseSetting.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/settings/CodebaseSetting.java?rev=1325398&view=auto
==============================================================================
--- 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/settings/CodebaseSetting.java
 (added)
+++ 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/settings/CodebaseSetting.java
 Thu Apr 12 17:39:08 2012
@@ -0,0 +1,60 @@
+package org.apache.river.extra.easystart.config.settings;
+
+import java.util.List;
+
+public class CodebaseSetting extends GroupedSetting {
+
+       private final Setting httpPort;
+       private final Setting httpServer;
+       
+       protected CodebaseSetting(String name, 
+                                                         Setting httpPort,
+                                                         Setting httpServer,
+                                                     List<String> defaults,
+                                                     String format, 
+                                                     String elementFormat, 
+                                                     boolean 
serviceDescription) {
+               super(name, defaults, format, elementFormat, 
serviceDescription);
+
+               this.httpPort = httpPort;
+               this.httpServer = httpServer;
+       }
+
+       @Override
+       protected String formatAsArray(List<String> items) {
+               StringBuilder sb = new StringBuilder();
+               sb
+                       .append("ConfigUtil.concat(")
+                       .append('\n')
+                       .append("new Object[] {")
+                       .append('\n');
+               for(String item : items) {
+                       sb
+                               .append("\"http://\";, ")
+                               .append(httpServer.getOverride())
+                               .append(", \":")
+                               .append(httpPort.getOverride())
+                               .append('/')
+                               .append(item)
+                               .append("\", \" \",\n");
+               }
+               sb.append(" })");
+               
+               return sb.toString();
+       }
+       
+       @Override
+       public Object clone() {
+               GroupedSetting clone = new CodebaseSetting(super.name, 
+                                                                               
                   this.httpPort,
+                                                                               
                   this.httpServer,
+                                                                               
                   super.defaults, 
+                                                                               
                   super.format, 
+                                                                               
                   this.elementFormat, 
+                                                                               
                   super.isServiceDescription());
+               for(String override : this.overrides) {
+                       clone.add(override);
+               }
+               return clone;
+       }
+}

Added: 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/settings/DefaultOptions.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/settings/DefaultOptions.java?rev=1325398&view=auto
==============================================================================
--- 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/settings/DefaultOptions.java
 (added)
+++ 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/settings/DefaultOptions.java
 Thu Apr 12 17:39:08 2012
@@ -0,0 +1,107 @@
+package org.apache.river.extra.easystart.config.settings;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.Map;
+import java.util.logging.Logger;
+
+public class DefaultOptions implements Cloneable {
+
+       private static final Logger LOGGER = 
Logger.getLogger(Options.class.getName());
+
+       public static final String NO_FORMAT = "%s";
+       public static final String STRING_FORMAT = "\"%s\"";
+       public static final String ESCAPED_STRING_FORMAT = "\\\"%s\\\"";
+       public static final String INTEGER_FORMAT = "%s";
+       
+       private static final String RIVER_HOME_ENV_NAME = "RIVER_HOME";
+
+       public static final String MEMBER_GROUP = "initialMemberGroups";
+       public static final String LOOKUP_GROUP = "initialLookupGroups";
+       public static final String RIVER_PORT = "initialUnicastDiscoveryPort";
+       public static final String PACKAGE_NAME = "servicePackageName";
+       public static final String SERVICE_IMPL = "serviceImpl";
+       public static final String CODEBASE = "codebase";
+       public static final String CLASSPATH = "classpath";
+       public static final String RIVER_HOME = "riverHome";
+       
+       private static String RIVER_HOME_DIR;
+       static {
+               RIVER_HOME_DIR = (String) 
System.getProperties().get(RIVER_HOME_ENV_NAME);
+               if(null == RIVER_HOME_DIR) {
+                       LOGGER.severe(RIVER_HOME_ENV_NAME+" has not been set");
+                       RIVER_HOME_DIR = ".";
+               } else {
+                       LOGGER.severe("Using 
"+RIVER_HOME_ENV_NAME+"="+RIVER_HOME_DIR);
+               }
+       }
+       
+       private final Map<String, Setting> options = new HashMap<String, 
Setting>();
+       
+       public DefaultOptions() {
+               options.put(RIVER_HOME, new Setting(RIVER_HOME, RIVER_HOME_DIR, 
STRING_FORMAT, false));
+               options.put("servicePackageName", new 
Setting("servicePackageName", "org.apache.river", NO_FORMAT, false));
+               options.put(RIVER_PORT, new Setting(RIVER_PORT, "4160", 
INTEGER_FORMAT, true));
+               options.put("httpPort", new Setting("httpPort", "8080", 
INTEGER_FORMAT, false));
+               options.put(MEMBER_GROUP, new GroupedSetting(MEMBER_GROUP,
+                                                                               
                                new LinkedList<String>(),
+                                                                               
                                NO_FORMAT, 
+                                                                               
                                ESCAPED_STRING_FORMAT, 
+                                                                               
                                true));
+               options.put(LOOKUP_GROUP, new GroupedSetting(LOOKUP_GROUP,
+                                                                               
                                          new LinkedList<String>(),
+                                                                               
                                          NO_FORMAT, 
+                                                                               
                                          ESCAPED_STRING_FORMAT, 
+                                                                               
                                          true));
+               options.put(SERVICE_IMPL, new Setting(SERVICE_IMPL, "", 
STRING_FORMAT, false));
+               options.put("httpServer", new Setting("httpServer",
+                                                                               
                 "ConfigUtil.getHostName()",
+                                                                               
                 NO_FORMAT,
+                                                                               
                 false));
+               options.put(CODEBASE, new CodebaseSetting(CODEBASE,
+                               options.get("httpPort"),
+                               options.get("httpServer"),
+                               Collections.<String>emptyList(), 
+                               NO_FORMAT, 
+                               STRING_FORMAT, 
+                               false));
+               options.put(CLASSPATH, new ClasspathSetting(CLASSPATH,
+                                                                               
                                                
Collections.<String>emptyList(), 
+                                                                               
                                                NO_FORMAT, 
+                                                                               
                                                STRING_FORMAT, 
+                                                                               
                                                false));
+               
+               options.put("policy", new PolicySetting("policy",
+                                                                               
                  options.get("riverHome"),
+                                                                               
                  "src-extra/policy.all",
+                                                                               
                  STRING_FORMAT,
+                                                                               
                  false));
+               options.put("serverExporter", new ServerExporterSetting());
+       }
+       
+       private DefaultOptions(Map<String, Setting> opts) {
+               for(String key : opts.keySet()) {
+                       options.put(key, (Setting)opts.get(key).clone());
+               }
+       }
+       
+       public Setting get(String key) {
+               return options.get(key);
+       }
+       
+       public GroupedSetting getGrouped(String key) {
+               return (GroupedSetting) get(key);
+       }
+       
+       public Collection<Setting> getOptions() {
+               return options.values();
+       }
+       
+       @Override
+       public Object clone() {
+               return new DefaultOptions(this.options);
+       }
+       
+}

Added: 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/settings/GroupedSetting.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/settings/GroupedSetting.java?rev=1325398&view=auto
==============================================================================
--- 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/settings/GroupedSetting.java
 (added)
+++ 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/settings/GroupedSetting.java
 Thu Apr 12 17:39:08 2012
@@ -0,0 +1,72 @@
+package org.apache.river.extra.easystart.config.settings;
+
+import java.util.LinkedList;
+import java.util.List;
+
+public class GroupedSetting extends Setting {
+
+       protected final String elementFormat;
+       protected final List<String> defaults;
+       protected final List<String> overrides = new LinkedList<String>();
+
+       private volatile boolean overriden = false;
+
+       protected GroupedSetting(String name, 
+                                                        List<String> defaults, 
+                                                        String format,
+                                                        String elementFormat,
+                                                        boolean 
serviceDescription) {
+               super(name, "", format, serviceDescription);
+               this.elementFormat = elementFormat;
+               this.defaults = defaults;
+               overrides.addAll(defaults);
+       }
+
+       /**
+        * Not too worried about concurrency issues right now, heavy duty 
locking 
+        * etc for this little used code seems overkill right now.
+        * 
+        * @param s
+        * @return
+        */
+       public GroupedSetting add(String s) {
+               if (!overriden) {
+                       overriden = true;
+                       overrides.clear();
+               }
+               overrides.add(s);
+               return this;
+       }
+
+       @Override
+       public String getDefault() {
+               return formatAsArray(defaults);
+       }
+       
+       @Override
+       public String getOverride() {
+               return formatAsArray(overrides);
+       }
+       
+       protected String formatAsArray(List<String> items) {
+               StringBuilder sb = new StringBuilder();
+               sb.append("new String[] { ");
+               for(String item : items) {
+                       sb
+                               .append(String.format(this.elementFormat, item))
+                               .append(", ");
+               }
+               sb.append(" }");
+               
+               return sb.toString();
+       }
+       
+       @Override
+       public Object clone() {
+               GroupedSetting clone = new GroupedSetting(super.name, 
this.defaults, super.format, this.elementFormat, super.isServiceDescription());
+               for(String override : this.overrides) {
+                       clone.add(override);
+               }
+               return clone;
+       }
+}

Added: 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/settings/Options.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/settings/Options.java?rev=1325398&view=auto
==============================================================================
--- 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/settings/Options.java
 (added)
+++ 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/settings/Options.java
 Thu Apr 12 17:39:08 2012
@@ -0,0 +1,174 @@
+package org.apache.river.extra.easystart.config.settings;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Logger;
+
+public class Options implements Cloneable {
+
+       private static final Logger LOGGER = 
Logger.getLogger(Options.class.getName());
+
+       public static final String NO_FORMAT = "%s";
+       public static final String STRING_FORMAT = "\"%s\"";
+       public static final String ESCAPED_STRING_FORMAT = "\\\"%s\\\"";
+       public static final String INTEGER_FORMAT = "%s";
+       
+       private static final String RIVER_HOME_ENV_NAME = "RIVER_HOME";
+
+       public static final String MEMBER_GROUP = "initialMemberGroups";
+       public static final String LOOKUP_GROUP = "initialLookupGroups";
+       public static final String RIVER_PORT = "initialUnicastDiscoveryPort";
+       public static final String PACKAGE_NAME = "servicePackageName";
+       
+       
+       private static String RIVER_HOME_DIR;
+       static {
+               RIVER_HOME_DIR = (String) 
System.getProperties().get(RIVER_HOME_ENV_NAME);
+               if(null == RIVER_HOME_DIR) {
+                       LOGGER.severe(RIVER_HOME_ENV_NAME+" has not been set");
+                       RIVER_HOME_DIR = ".";
+               } else {
+                       LOGGER.severe("Using 
"+RIVER_HOME_ENV_NAME+"="+RIVER_HOME_DIR);
+               }
+       }
+       
+       private final Setting RIVER_HOME = new Setting("riverHome", 
RIVER_HOME_DIR, STRING_FORMAT, false);
+       private final Setting PACKAGE_NAME_SETTING = new 
Setting("servicePackageName", "org.apache.river", NO_FORMAT, false);
+       
+       private final Setting JINI_PORT = new Setting(RIVER_PORT, "4160", 
INTEGER_FORMAT, true);
+       private final Setting HTTP_PORT = new Setting("httpPort", "8080", 
INTEGER_FORMAT, false);
+       
+       private final GroupedSetting MEMBER_GROUPS = new 
GroupedSetting(MEMBER_GROUP,
+                                                                               
                                        new LinkedList<String>(),
+                                                                               
                                        NO_FORMAT, 
+                                                                               
                                        ESCAPED_STRING_FORMAT, 
+                                                                               
                                        true);
+       
+       private final GroupedSetting LOOKUP_GROUPS = new 
GroupedSetting(LOOKUP_GROUP,
+                                                                               
                                  new LinkedList<String>(),
+                                                                               
                                  NO_FORMAT, 
+                                                                               
                                  ESCAPED_STRING_FORMAT, 
+                                                                               
                                  true);
+       
+       private final Setting SERVICE_IMPL = new Setting("serviceImpl",
+                                                                               
          "",
+                                                                               
          STRING_FORMAT,
+                                                                               
          false);
+       
+       private final Setting HTTP_SERVER = new Setting("httpServer",
+                                                                               
         "ConfigUtil.getHostName()",
+                                                                               
         NO_FORMAT,
+                                                                               
         false);
+       
+       private final CodebaseSetting CODEBASE = new CodebaseSetting("codebase",
+                       HTTP_PORT,
+                       HTTP_SERVER,
+                       Collections.<String>emptyList(), 
+                       NO_FORMAT, 
+                       NO_FORMAT, 
+                       false);
+       
+       private final ClasspathSetting CLASSPATH = new 
ClasspathSetting("classpath",
+                                                                               
                                        Collections.<String>emptyList(), 
+                                                                               
                                        NO_FORMAT, 
+                                                                               
                                        NO_FORMAT, 
+                                                                               
                                        false);
+       
+       private final Setting POLICY = new PolicySetting("policy",
+                                                                               
          RIVER_HOME,
+                                                                               
          "src-extra/policy.all",
+                                                                               
          STRING_FORMAT,
+                                                                               
          false);
+       
+       private final ServerExporterSetting SERVER_EXPORTER = new 
ServerExporterSetting();
+       
+       private final Setting[] OPTIONS = new Setting[] {
+                       RIVER_HOME,
+                       PACKAGE_NAME_SETTING,
+                       JINI_PORT,
+                       HTTP_PORT,
+                       MEMBER_GROUPS,
+                       LOOKUP_GROUPS,
+                       SERVICE_IMPL,
+                       HTTP_SERVER,
+                       CODEBASE,
+                       CLASSPATH,
+                       POLICY,
+                       SERVER_EXPORTER
+       };
+       
+       private final Map<String, Setting> map = new HashMap<String, Setting>();
+       {
+               for(Setting setting : OPTIONS) {
+                       map.put(setting.getName(), setting);
+               }
+       }
+
+       public void applyDefaults(List<Setting> defaults) {
+               for(Setting setting : defaults) {
+                       Setting original = map.get(setting.getName());
+                       if(null != original) {
+                               original.setOverride(setting.getOverride());
+                       } else {
+                               map.put(setting.getName(), setting);
+                       }
+               }
+       }
+
+       public Setting get(String key) {
+               return map.get(key);
+       }
+
+       public Collection<Setting> getOptions() {
+               return map.values();
+       }
+       
+//     private static final String RIVER_HOME = "RIVER_HOME";
+//     private static final String RIVER_HOME_DIR;
+//     static {
+//             RIVER_HOME_DIR = (String) 
System.getProperties().get(RIVER_HOME);
+//             if(null == RIVER_HOME_DIR) {
+//                     LOGGER.severe(RIVER_HOME+" has not been set");
+//             } else {
+//                     LOGGER.severe("Using "+RIVER_HOME+"="+RIVER_HOME_DIR);
+//             }
+//             
+//     }
+//     
+//     private String group = "grp";
+//     private String httpPort = "80";
+//     private int jiniPort = 4160;
+//     private String packageName = "";
+//     
+//     public String getRiverHome() {
+//             return RIVER_HOME_DIR;
+//     }
+//     
+//     public void setGroup(String g) { this.group = g; }
+//     public String getGroup() { return this.group; }
+//
+//     public void setHttpPort(String port) { this.httpPort = port; }
+//     public String getHttpPort() { return this.httpPort; }
+//     
+//     public void setJiniPort(int port) { this.jiniPort = port; }
+//     public int getJiniPort() { return this.jiniPort; }
+//
+//     public String[] getOptionsArray() {
+//             return new String[] {
+//                             getRiverHome()+"src-extra/empty.config",
+//                             "com.sun.jini.reggie.initialMemberGroups = new 
String[] {\""+ group+"\"}",
+//                             
"com.sun.jini.reggie.initialUnicastDiscoveryPort = "+jiniPort
+//             };
+//     }
+//
+//     public void setPackageName(String packageName) {
+//             this.packageName = packageName;
+//     }
+//     public String getPackageName() {
+//             return this.packageName;
+//     }
+}

Added: 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/settings/PolicySetting.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/settings/PolicySetting.java?rev=1325398&view=auto
==============================================================================
--- 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/settings/PolicySetting.java
 (added)
+++ 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/settings/PolicySetting.java
 Thu Apr 12 17:39:08 2012
@@ -0,0 +1,40 @@
+package org.apache.river.extra.easystart.config.settings;
+
+import java.io.File;
+
+public class PolicySetting extends Setting {
+
+       private final Setting riverHome;
+       
+       protected PolicySetting(String name, 
+                                                       Setting riverHome,
+                                                       String defaultValue, 
+                                                       String format,
+                                                       boolean 
serviceDescription) {
+               super(name, defaultValue, format, serviceDescription);
+               this.riverHome = riverHome;
+       }
+
+       @Override
+       public String getDefault() {
+               if(null == riverHome) {
+                       return super.getDefault();
+               } else {
+                       return riverHome.getOverride() + File.separator + 
super.getDefault();
+               }
+       }
+       
+       @Override
+       public String getOverride() {
+               if(null == riverHome) {
+                       return super.getOverride();
+               } else {
+                       return riverHome.getOverride() + File.separator + 
super.getOverride();
+               }
+       }
+       
+       @Override
+       public Object clone() {
+               return new PolicySetting(this.name, this.riverHome, 
this.defaultValue, this.format, this.serviceDescription);
+       }
+}

Added: 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/settings/ServerExporterSetting.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/settings/ServerExporterSetting.java?rev=1325398&view=auto
==============================================================================
--- 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/settings/ServerExporterSetting.java
 (added)
+++ 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/settings/ServerExporterSetting.java
 Thu Apr 12 17:39:08 2012
@@ -0,0 +1,35 @@
+package org.apache.river.extra.easystart.config.settings;
+
+public class ServerExporterSetting extends Setting {
+
+       private static final String JRMP_STRING = "new 
net.jini.jrmp.JrmpExporter()";
+       
+       protected ServerExporterSetting() {
+               super("serverExporter", JRMP_STRING, Options.NO_FORMAT, true);
+       }
+
+       public void asJrmpExporter() {
+               setOverride(JRMP_STRING);
+       }
+       
+       public void asJeriExporter(String registryHost, int registryPort) {
+               String registryEndpoint = 
String.format("net.jini.jeri.tcp.TcpServerEndpoint.getInstance(%s,%d)",stringToLiteral(registryHost),registryPort);
 
+               setOverride("new net.jini.jeri.BasicJeriExporter("
+                                       +registryEndpoint
+                                       +", new 
net.jini.jeri.BasicILFactory())");
+       }
+       
+       @Override
+       public Object clone() {
+               ServerExporterSetting clone = new ServerExporterSetting();
+               clone.setOverride(this.getOverride());
+               return clone;
+       }
+       
+    private String stringToLiteral(String s) {
+        if( s == null ) {
+            return "null" ;
+        }
+        return String.format("\\\"%s\\\"",s);
+    }
+}

Added: 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/settings/Setting.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/settings/Setting.java?rev=1325398&view=auto
==============================================================================
--- 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/settings/Setting.java
 (added)
+++ 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/settings/Setting.java
 Thu Apr 12 17:39:08 2012
@@ -0,0 +1,59 @@
+package org.apache.river.extra.easystart.config.settings;
+
+
+/**
+ * This is an enum-like class which encapsulates some default options when
+ * using River services.
+ * 
+ * It is not an enum, on purpose, in order to allow other users to easily
+ * extend and replace as required.
+ * 
+ * @author Tom Hobbs
+ *
+ */
+public class Setting implements Cloneable {
+
+       protected final String name, defaultValue, format;
+       protected final boolean serviceDescription;
+       protected String override;
+       
+       protected Setting(String name, String defaultValue, String format, 
boolean serviceDescription) {
+               this.name = name;
+               this.defaultValue = defaultValue;
+               this.format = format;
+               this.serviceDescription = serviceDescription;
+               
+               this.override = defaultValue;
+       }
+       
+       public String getName() {
+               return this.name;
+       }
+       
+       public String getDefault() {
+               return defaultValue;
+       }
+       
+       public String getFormatter() {
+               return format;
+       }
+       
+       public boolean isServiceDescription() {
+               return serviceDescription;
+       }
+       
+       public void setOverride(String override) {
+               this.override = override;
+       }
+       
+       public String getOverride() {
+               return this.override;
+       }
+       
+       @Override
+       public Object clone() {
+               Setting clone = new Setting(this.name, this.defaultValue, 
this.format, this.serviceDescription);
+               clone.setOverride(this.override);
+               return clone;
+       }
+}

Added: 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/settings/SettingsFactory.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/settings/SettingsFactory.java?rev=1325398&view=auto
==============================================================================
--- 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/settings/SettingsFactory.java
 (added)
+++ 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/settings/SettingsFactory.java
 Thu Apr 12 17:39:08 2012
@@ -0,0 +1,12 @@
+package org.apache.river.extra.easystart.config.settings;
+
+public class SettingsFactory {
+
+       
+       public void setRiverHome(String r) {}
+       public void setHttpHost(String h) {}
+       public void setHttpPort(String p) {}
+       public void setRiverPort(String p) {}
+       public void setPolicy(String p) {}
+       
+}

Added: 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/settings/start.config
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/settings/start.config?rev=1325398&view=auto
==============================================================================
--- 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/settings/start.config
 (added)
+++ 
river/jtsk/skunk/easystart/src-extra/org/apache/river/extra/easystart/config/settings/start.config
 Thu Apr 12 17:39:08 2012
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import net.jini.jrmp.JrmpExporter;
+
+import com.sun.jini.config.ConfigUtil;
+import com.sun.jini.start.NonActivatableServiceDescriptor;
+import com.sun.jini.start.ServiceDescriptor;
+
+com.sun.jini.start {
+
+    private static codebase = ${codebase};
+        
+    //private static policy = ${riverHome}+"/src-extra/policy.all";
+    private static policy = ${policy};
+    private static classpath = ${classpath};
+    
+    static serviceDescriptors = new ServiceDescriptor[] {
+       new NonActivatableServiceDescriptor(
+           codebase, 
+           policy, 
+           classpath,
+           ${serviceImpl},
+           new String[] { 
+           "-"
+           //overrides
+           ${options}
+           //overrides end
+           }
+           )
+    };
+}
+
+${servicePackageName} {
+
+//defaults
+       ${defaults}
+//defaults end
+
+}


Reply via email to