summaryrefslogtreecommitdiff
path: root/java/src/IceInternal/ObjectFactoryManager.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/src/IceInternal/ObjectFactoryManager.java')
-rw-r--r--java/src/IceInternal/ObjectFactoryManager.java79
1 files changed, 79 insertions, 0 deletions
diff --git a/java/src/IceInternal/ObjectFactoryManager.java b/java/src/IceInternal/ObjectFactoryManager.java
new file mode 100644
index 00000000000..61b6ed9801f
--- /dev/null
+++ b/java/src/IceInternal/ObjectFactoryManager.java
@@ -0,0 +1,79 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2011 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+
+package IceInternal;
+
+public final class ObjectFactoryManager
+{
+ public synchronized void
+ add(Ice.ObjectFactory factory, String id)
+ {
+ Object o = _factoryMap.get(id);
+ if(o != null)
+ {
+ Ice.AlreadyRegisteredException ex = new Ice.AlreadyRegisteredException();
+ ex.id = id;
+ ex.kindOfObject = "object factory";
+ throw ex;
+ }
+ _factoryMap.put(id, factory);
+ }
+
+ public void
+ remove(String id)
+ {
+ Ice.ObjectFactory factory = null;
+
+ synchronized(this)
+ {
+ factory = _factoryMap.get(id);
+ if(factory == null)
+ {
+ Ice.NotRegisteredException ex = new Ice.NotRegisteredException();
+ ex.id = id;
+ ex.kindOfObject = "object factory";
+ throw ex;
+ }
+ _factoryMap.remove(id);
+ }
+
+ factory.destroy();
+ }
+
+ public synchronized Ice.ObjectFactory
+ find(String id)
+ {
+ return _factoryMap.get(id);
+ }
+
+ //
+ // Only for use by Instance
+ //
+ ObjectFactoryManager()
+ {
+ }
+
+ void
+ destroy()
+ {
+ java.util.Map<String, Ice.ObjectFactory> oldMap = null;
+ synchronized(this)
+ {
+ oldMap = _factoryMap;
+ _factoryMap = new java.util.HashMap<String, Ice.ObjectFactory>();
+ }
+
+ for(Ice.ObjectFactory factory : oldMap.values())
+ {
+ factory.destroy();
+ }
+ }
+
+ private java.util.Map<String, Ice.ObjectFactory> _factoryMap = new java.util.HashMap<String, Ice.ObjectFactory>();
+}