configurationengine/source/plugins/symbian/ConeGenconfmlPlugin/genconfmlplugin/confflattener.py
changeset 0 2e8eeb919028
child 3 e7e0ae78773e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/configurationengine/source/plugins/symbian/ConeGenconfmlPlugin/genconfmlplugin/confflattener.py	Thu Mar 11 17:04:37 2010 +0200
@@ -0,0 +1,103 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+'''
+Configuration flattener
+'''
+
+import re
+import os
+import sys
+import logging
+import xml.parsers.expat
+
+try:
+    from cElementTree import ElementTree
+except ImportError:
+    try:    
+        from elementtree import ElementTree
+    except ImportError:
+        try:
+            from xml.etree import cElementTree as ElementTree
+        except ImportError:
+            from xml.etree import ElementTree
+
+import __init__
+
+from cone.public import exceptions,plugin,utils,api
+import copy
+
+
+
+class ConfigurationFlattener():
+    """
+    Configuration flattener
+    """
+    
+    def _init(self):
+        self.logger = logging.getLogger('cone.gcfml(%s)' % self.ref)
+        pass
+        
+
+    def flat(self, conf_from_org, settings, to_config):
+        """
+        Flats configuration to one element xml element
+        """
+        """ 
+        Get the default view
+        Create the new flat configuration 
+         """
+        dview_from = conf_from_org.get_default_view()
+        
+        """ Go through the required settings """
+        for setting in settings:
+            setting_name = setting.replace('/', '.')
+            try:
+                for fea in dview_from.get_features(setting_name):
+                    """ Add the given feature ref and its children """
+                    newfea = copy.copy(fea._obj)
+                    to_config.add_feature(newfea, fea.namespace)
+                    for subfeaname in fea.list_features():
+                        subfea = fea.get_feature(subfeaname)
+                        newfea = copy.copy(subfea._obj)
+                        to_config.add_feature(newfea, subfea.namespace)
+            except exceptions.NotFound, e:
+                logging.getLogger('cone.gcfml').warning('Failed to get feature: %s , %s %s' % (setting_name, type(e), e) )
+            except Exception, e:
+                logging.getLogger('cone.gcfml').warning('Failed to flat feature: %s , %s %s' % (setting_name, type(e), e) )
+                
+        """ Copy all data values from the existing configuration to the new configuration """
+        toview = to_config.get_default_view()
+        for fea in toview.get_features('**'):
+            fromfea = dview_from.get_feature(fea.fqr)
+            if fromfea.get_value() != None:
+                fea.set_value(fromfea.get_value())
+        return to_config
+
+    def create_configuration(self, conf_from_org, settings, path="tempfile.confml"):
+        """
+        Flats configuration to one feature and data confml
+        """
+        """ 
+        Get the default view
+        Create the new flat configuration 
+         """
+        prj = conf_from_org.get_project()
+        flat = prj.create_configuration(path)
+        (root,ext) = os.path.splitext(path)
+        dataname = "%s_data%s" % (root,ext)
+        flat.create_configuration(dataname)
+        self.flat(conf_from_org, settings, flat)
+        flat.close()