Commit in lcsim-contrib/src/main/java/org/lcsim/contrib/onoprien/util/job on MAIN
Driver.java+3-21.1.1.1 -> 1.2
JobManager.java+13-31.2 -> 1.3
+16-5
2 modified files
Automatic singleton creation

lcsim-contrib/src/main/java/org/lcsim/contrib/onoprien/util/job
Driver.java 1.1.1.1 -> 1.2
diff -u -r1.1.1.1 -r1.2
--- Driver.java	10 Dec 2008 22:03:06 -0000	1.1.1.1
+++ Driver.java	17 Dec 2008 01:21:22 -0000	1.2
@@ -1,7 +1,8 @@
 package org.lcsim.contrib.onoprien.util.job;
 
 import java.util.logging.Level;
-import org.lcsim.contrib.onoprien.util.*;
+
+import org.lcsim.contrib.onoprien.util.NoSuchParameterException;
 
 import org.lcsim.event.EventHeader;
 
@@ -27,7 +28,7 @@
  * 
  * 
  * @author D. Onoprienko
- * @version $Id: Driver.java,v 1.1.1.1 2008/12/10 22:03:06 jeremy Exp $
+ * @version $Id: Driver.java,v 1.2 2008/12/17 01:21:22 onoprien Exp $
  */
 public class Driver extends org.lcsim.util.Driver {
   

lcsim-contrib/src/main/java/org/lcsim/contrib/onoprien/util/job
JobManager.java 1.2 -> 1.3
diff -u -r1.2 -r1.3
--- JobManager.java	12 Dec 2008 20:15:23 -0000	1.2
+++ JobManager.java	17 Dec 2008 01:21:22 -0000	1.3
@@ -27,7 +27,7 @@
  * </ul>
  * 
  * @author D. Onoprienko
- * @version $Id: JobManager.java,v 1.2 2008/12/12 20:15:23 onoprien Exp $
+ * @version $Id: JobManager.java,v 1.3 2008/12/17 01:21:22 onoprien Exp $
  */
 public class JobManager extends org.lcsim.util.Driver implements ConditionsListener {
   
@@ -96,11 +96,21 @@
   /** 
    * Retrieve a singleton of the specified type.
    * If a singleton of the given type has not been registered with this <tt>JobManager</tt>,
-   * <tt>IllegalArgumentException</tt> is thrown.
+   * the specified class's <tt>defaultInstance()</tt> method will be called to create and
+   * register the singleton. If the class does not declare such method or it cannot be called
+   * from this context, <tt>IllegalArgumentException</tt> is thrown.
    */
   public <T> T get(Class<T> singletonType) {
     T singleton = (T) _singletons.get(singletonType);
-    if (singleton == null) throw new IllegalArgumentException("Singleton of this type is not registered");
+    if (singleton == null) {
+     System.out.println("JobManager: Singleton of type "+ singletonType +" was not registered, creating...");
+     try {
+        singleton = (T) singletonType.getDeclaredMethod("defaultInstance").invoke(null);
+      } catch (Exception x) {
+        throw new IllegalArgumentException(x);
+      }
+      put(singleton, singletonType);
+    }
     return singleton;
   }
 
CVSspam 0.2.8