configurationengine/source/plugins/symbian/ConeGenconfmlPlugin/genconfmlplugin/confflattener.py
--- /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()