]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/samples/ide/activegrid/util/dependencymgr.py
Added the ActiveGrid IDE as a sample application
[wxWidgets.git] / wxPython / samples / ide / activegrid / util / dependencymgr.py
diff --git a/wxPython/samples/ide/activegrid/util/dependencymgr.py b/wxPython/samples/ide/activegrid/util/dependencymgr.py
new file mode 100644 (file)
index 0000000..272e8eb
--- /dev/null
@@ -0,0 +1,145 @@
+#----------------------------------------------------------------------------
+# Name:         dependencymgr.py
+# Purpose:      Dependency Manager
+#
+# Author:       Jeff Norton
+#
+# Created:      01/28/05
+# CVS-ID:       $Id$
+# Copyright:    (c) 2004-2005 ActiveGrid, Inc.
+#----------------------------------------------------------------------------
+
+DM_NO_ID = 0
+DM_ID_ATTR = "_DependencyMgr__ID"
+
+##class ManageableObject(object):
+##    
+##    def __init__(self):
+##        self.__id = DM_NO_ID
+##        
+##    def __repr__(self):
+##        return "<ManageableObject id = %s>" % self.__id
+##        
+##    def __getID(self):
+##        return self.__id
+##        
+##    def __setID(self, value):
+##        if (self.__id != DM_NO_ID):
+##            raise DependencyMgrException("Cannot set the dependency ID on object %s to \"%s\" because it already has one (\"%s\")." % (repr(self), value, self.__id))
+##        self.__id = value
+##        
+##    _DependencyMgr__ID = property(__getID, __setID)
+        
+class DependencyMgr(object):
+    
+    def __init__(self):
+        self.clear()
+        
+    def clear(self):
+        self.__dependencies = {}
+        self.__lastID = DM_NO_ID
+        
+    def addDependency(self, parent, child):
+        pid = self._initObjectID(parent)
+        try:
+            parentCollection = self.__dependencies[pid]
+        except KeyError:
+            parentCollection = self._newDependencyCollection()
+            self.__dependencies[pid] = parentCollection
+        if (child not in parentCollection):
+            parentCollection.append(child)
+            
+    def removeDependency(self, parent, child):
+        pid = self._getObjectID(parent)
+        if (pid != DM_NO_ID):
+            try:
+                parentCollection = self.__dependencies[pid]
+                parentCollection.remove(child)
+                if (len(parentCollection) == 0):
+                    del self.__dependencies[pid]
+            except KeyError, ValueError:
+                pass
+
+    def clearDependencies(self, parent):
+        "Returns a list of objects or an empty list if no dependencies exist as for getDependencies, and then removes the dependency list."
+        pid = self._getObjectID(parent)
+        try:
+            deps = self.__dependencies[pid]
+            del self.__dependencies[pid]
+            return deps
+        except KeyError:
+            return []
+
+    def hasDependency(self, parent):
+        "Returns a boolean"
+        return (self._getObjectID(parent) in self.__dependencies)
+        
+    def getDependencies(self, parent):
+        "Returns a list of objects or an empty list if no dependencies exist."
+        try:
+            return self.__dependencies[self._getObjectID(parent)]
+        except KeyError:
+            return []
+            
+    def dumpState(self, out):
+        "Writes the state of the dependency manager (as reported by getState) to out"
+        for line in self.getState():
+            print >> out, line
+        
+    def getState(self):
+        "Returns the state of the dependency manager including all managed objects as a list of strings"
+        out = []
+        out.append("DependencyMgr %s has %i parent objects, last id assigned is %i" % (repr(self), len(self.__dependencies), self.__lastID))
+        for key, val in self.__dependencies.iteritems():
+            out.append("Object %s has dependents: %s " % (repr(key), ", ".join([repr(d) for d in val])))
+        return out
+
+    def _initObjectID(self, obj):
+        try:
+            id = getattr(obj, DM_ID_ATTR)
+        except AttributeError:
+            id = DM_NO_ID
+        if (id == DM_NO_ID):
+            id = self._newID()
+            setattr(obj, DM_ID_ATTR, id)
+        return id
+        
+    def _getObjectID(self, obj):
+        try:
+            id = getattr(obj, DM_ID_ATTR)
+        except AttributeError:
+            id = DM_NO_ID
+        return id
+    
+    def _newID(self):
+        self.__lastID += 1
+        return self.__lastID
+        
+    def _newDependencyCollection(self):
+        return []
+        
+globalDM = DependencyMgr()
+
+def addDependency(parent, child):
+    getGlobalDM().addDependency(parent, child)
+
+def removeDependency(parent, child):
+    getGlobalDM().removeDependency(parent, child)
+
+def clearDependencies(parent):
+    return getGlobalDM().clearDependencies(parent)
+    
+def hasDependency(parent):
+    return getGlobalDM().hasDependency(parent)
+    
+def getDependencies(parent):
+    return getGlobalDM().getDependencies(parent)
+    
+def getState():
+    return getGlobalDM().getState()
+    
+def dumpState(out):
+    getGlobalDM().dumpState(out)
+
+def getGlobalDM():
+    return globalDM