configurationengine/source/cone/public/api.py
changeset 5 d2c80f5cab53
parent 4 0951727b8815
--- a/configurationengine/source/cone/public/api.py	Wed Sep 08 12:20:56 2010 +0300
+++ b/configurationengine/source/cone/public/api.py	Thu Oct 21 16:36:53 2010 +0300
@@ -614,12 +614,44 @@
         for child in configuration._traverse(type=Configuration):
             export_storage.unload(child.get_full_path(),child)
         
+        ruleml_eval_globals_files = []
+        for child in configuration._traverse(type=RulemlEvalGlobals):
+            if child.file != None:
+                ruleml_eval_globals_files.append(RulemlEvalGlobals.get_script_file_full_path(child))
+        
         #If the configuration is not in the root of the project adding the path 
         #to final exporting source path.
         #l = []
+        empty_folders = kwargs.get('empty_folders',False)
+        layer = configuration.get_layer()
+        all_resources = []
+        layer_content = layer.list_content(empty_folders)
+        layer_doc = layer.list_doc(empty_folders)
+        layer_implml = layer.list_implml(empty_folders)
+
+        include_filters = kwargs.get('include_filters',{})
+        exclude_filters = kwargs.get('exclude_filters',{})
+        
+        include_content_filter = include_filters.get('content')
+        exclude_content_filter = exclude_filters.get('content')
+        
+        # perform filtering of content files
+        if exclude_content_filter:
+            f = lambda x: not re.search(exclude_content_filter, x, re.IGNORECASE)
+            layer_content = filter(f,layer_content)
+
+        if include_content_filter:
+            f = lambda x: re.search(include_content_filter, x, re.IGNORECASE)
+            layer_content = filter(f,layer_content)
+        
+        all_resources.extend(layer_content) 
+        all_resources.extend(layer_doc)
+        all_resources.extend(layer_implml)
+        
         cpath = utils.resourceref.get_path(configuration.get_path()) 
         resr = [utils.resourceref.join_refs([cpath,related]) \
-                for related in configuration.get_layer().list_all_related(**kwargs)]
+                for related in all_resources]
+        resr.extend(ruleml_eval_globals_files)
         
         self.storage.export_resources(resr ,export_storage, kwargs.get("empty_folders", False))
         return
@@ -909,6 +941,15 @@
         super(Configuration, self).__init__(utils.resourceref.to_objref(self.path), **kwargs)
         self.container = True
 
+    def __getstate__(self):
+        state = self.__dict__.copy()
+        if state.has_key('_children'):
+            childs = state.get('_children')
+            if childs.has_key('?default_view'):
+                childs.pop('?default_view')
+                state['_children'] = childs
+        return state
+
     def _default_object(self, name):
         return self._default_class()(name)
 
@@ -1645,6 +1686,7 @@
         self.relevant = kwargs.get('relevant', None)
         self.constraint = kwargs.get('constraint', None)
         self._dataproxy = None
+        self.extensionAttributes = []
 
     def __copy__(self):
         dict = {}
@@ -2185,6 +2227,14 @@
         else:           value_list = value_subsetting.get_original_value()
         return value_list[key_list.index(mapping_key)]
 
+    def set_extension_attributes(self, attributes):
+        self.extensionAttributes = attributes
+        
+    def get_extension_attributes(self):
+        return self.extensionAttributes
+    
+    def add_extension_attribute(self, attribute):
+        self.extensionAttributes.append(attribute)
 
 class FeatureSequence(Feature):
     POLICY_REPLACE = 0
@@ -3274,6 +3324,7 @@
         self.relevant = kwargs.get('relevant', None)
         self.map_value = kwargs.get('map_value', None)
         self.display_name = kwargs.get('display_name', None)
+        self.extensionAttributes = []
 
     @classmethod
     def to_optref(cls, value, map):
@@ -3306,6 +3357,14 @@
         else:
             return 1
 
+    def set_extension_attributes(self, attributes):
+        self.extensionAttributes = attributes
+        
+    def get_extension_attributes(self):
+        return self.extensionAttributes
+    
+    def add_extension_attribute(self, attribute):
+        self.extensionAttributes.append(attribute)
 
 class Storage(object):
     """
@@ -3950,33 +4009,33 @@
                 lres.append(utils.resourceref.join_refs([layerpath, respath]))
         return lres
 
-    def list_implml(self):
+    def list_implml(self,empty_folders=False):
         """
         @return: array of implml file references.
         """
         lres = []
         for layerpath in self.list_layers():
-            for respath in self.get_layer(layerpath).list_implml():
+            for respath in self.get_layer(layerpath).list_implml(empty_folders):
                 lres.append(utils.resourceref.join_refs([layerpath, respath]))
         return lres
 
-    def list_content(self):
+    def list_content(self,empty_folders=False):
         """
         @return: array of content file references.
         """
         lres = []
         for layerpath in self.list_layers():
-            for respath in self.get_layer(layerpath).list_content():
+            for respath in self.get_layer(layerpath).list_content(empty_folders):
                 lres.append(utils.resourceref.join_refs([layerpath, respath]))
         return lres
 
-    def list_doc(self):
+    def list_doc(self,empty_folders=False):
         """
         @return: array of document file references.
         """
         lres = []
         for layerpath in self.list_layers():
-            for respath in self.get_layer(layerpath).list_doc():
+            for respath in self.get_layer(layerpath).list_doc(empty_folders):
                 lres.append(utils.resourceref.join_refs([layerpath, respath]))
         return lres
 
@@ -4056,28 +4115,28 @@
         res += super(Layer, self).list_confml()
         return res 
 
-    def list_implml(self):
+    def list_implml(self,empty_folders=False):
         """
         @return: array of implml file references.
         """
-        res = self.list_resources(self.predefined['implml_path'], recurse=True)
-        res += super(Layer, self).list_implml()
+        res = self.list_resources(self.predefined['implml_path'], recurse=True,empty_folders=empty_folders)
+        res += super(Layer, self).list_implml(empty_folders)
         return res 
 
-    def list_content(self):
+    def list_content(self,empty_folders=False):
         """
         @return: array of content file references.
         """
-        res = self.list_resources(self.predefined['content_path'], recurse=True)
-        res += super(Layer, self).list_content()
+        res = self.list_resources(self.predefined['content_path'], recurse=True,empty_folders=empty_folders)
+        res += super(Layer, self).list_content(empty_folders)
         return res
 
-    def list_doc(self):
+    def list_doc(self,empty_folders=False):
         """
         @return: array of document file references.
         """
-        res = self.list_resources(self.predefined['doc_path'], recurse=True)
-        res += super(Layer, self).list_doc()
+        res = self.list_resources(self.predefined['doc_path'], recurse=True,empty_folders=empty_folders)
+        res += super(Layer, self).list_doc(empty_folders)
         return res
 
     def confml_folder(self):
@@ -4186,6 +4245,25 @@
     mapmodule = __import__('cone.public.mapping')
     return mapmodule.public.mapping.BaseMapper()
 
+class RulemlEvalGlobals(Base):
+    """
+    Ruleml subelement of extensions element
+    """
+    refname = "_extension"
+    def __init__(self, value = None, file = None, **kwargs):
+        """
+        """
+        super(RulemlEvalGlobals,self).__init__(self.refname)
+        self.value = value
+        self.file = file
+    
+    @classmethod
+    def get_script_file_full_path(self, child): 
+        parent_config = child._find_parent(type=Configuration)
+        cpath = parent_config.get_full_path()
+        cpath = utils.resourceref.psplit_ref(cpath)[0]
+        path = utils.resourceref.join_refs([cpath, child.file])
+        return path
 
 class Problem(object):
     SEVERITY_ERROR      = "error"