configurationengine/source/plugins/symbian/ConeGenconfmlPlugin/genconfmlplugin/confflattener.py
changeset 0 2e8eeb919028
child 3 e7e0ae78773e
equal deleted inserted replaced
-1:000000000000 0:2e8eeb919028
       
     1 #
       
     2 # Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
       
     3 # All rights reserved.
       
     4 # This component and the accompanying materials are made available
       
     5 # under the terms of "Eclipse Public License v1.0"
       
     6 # which accompanies this distribution, and is available
       
     7 # at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 #
       
     9 # Initial Contributors:
       
    10 # Nokia Corporation - initial contribution.
       
    11 #
       
    12 # Contributors:
       
    13 #
       
    14 # Description: 
       
    15 #
       
    16 '''
       
    17 Configuration flattener
       
    18 '''
       
    19 
       
    20 import re
       
    21 import os
       
    22 import sys
       
    23 import logging
       
    24 import xml.parsers.expat
       
    25 
       
    26 try:
       
    27     from cElementTree import ElementTree
       
    28 except ImportError:
       
    29     try:    
       
    30         from elementtree import ElementTree
       
    31     except ImportError:
       
    32         try:
       
    33             from xml.etree import cElementTree as ElementTree
       
    34         except ImportError:
       
    35             from xml.etree import ElementTree
       
    36 
       
    37 import __init__
       
    38 
       
    39 from cone.public import exceptions,plugin,utils,api
       
    40 import copy
       
    41 
       
    42 
       
    43 
       
    44 class ConfigurationFlattener():
       
    45     """
       
    46     Configuration flattener
       
    47     """
       
    48     
       
    49     def _init(self):
       
    50         self.logger = logging.getLogger('cone.gcfml(%s)' % self.ref)
       
    51         pass
       
    52         
       
    53 
       
    54     def flat(self, conf_from_org, settings, to_config):
       
    55         """
       
    56         Flats configuration to one element xml element
       
    57         """
       
    58         """ 
       
    59         Get the default view
       
    60         Create the new flat configuration 
       
    61          """
       
    62         dview_from = conf_from_org.get_default_view()
       
    63         
       
    64         """ Go through the required settings """
       
    65         for setting in settings:
       
    66             setting_name = setting.replace('/', '.')
       
    67             try:
       
    68                 for fea in dview_from.get_features(setting_name):
       
    69                     """ Add the given feature ref and its children """
       
    70                     newfea = copy.copy(fea._obj)
       
    71                     to_config.add_feature(newfea, fea.namespace)
       
    72                     for subfeaname in fea.list_features():
       
    73                         subfea = fea.get_feature(subfeaname)
       
    74                         newfea = copy.copy(subfea._obj)
       
    75                         to_config.add_feature(newfea, subfea.namespace)
       
    76             except exceptions.NotFound, e:
       
    77                 logging.getLogger('cone.gcfml').warning('Failed to get feature: %s , %s %s' % (setting_name, type(e), e) )
       
    78             except Exception, e:
       
    79                 logging.getLogger('cone.gcfml').warning('Failed to flat feature: %s , %s %s' % (setting_name, type(e), e) )
       
    80                 
       
    81         """ Copy all data values from the existing configuration to the new configuration """
       
    82         toview = to_config.get_default_view()
       
    83         for fea in toview.get_features('**'):
       
    84             fromfea = dview_from.get_feature(fea.fqr)
       
    85             if fromfea.get_value() != None:
       
    86                 fea.set_value(fromfea.get_value())
       
    87         return to_config
       
    88 
       
    89     def create_configuration(self, conf_from_org, settings, path="tempfile.confml"):
       
    90         """
       
    91         Flats configuration to one feature and data confml
       
    92         """
       
    93         """ 
       
    94         Get the default view
       
    95         Create the new flat configuration 
       
    96          """
       
    97         prj = conf_from_org.get_project()
       
    98         flat = prj.create_configuration(path)
       
    99         (root,ext) = os.path.splitext(path)
       
   100         dataname = "%s_data%s" % (root,ext)
       
   101         flat.create_configuration(dataname)
       
   102         self.flat(conf_from_org, settings, flat)
       
   103         flat.close()