lcsim-contrib/src/main/java/org/lcsim/contrib/onoprien/util/job
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
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;
}