configurationengine/source/cone/carbon/model.py
changeset 0 2e8eeb919028
child 3 e7e0ae78773e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/configurationengine/source/cone/carbon/model.py	Thu Mar 11 17:04:37 2010 +0200
@@ -0,0 +1,182 @@
+#
+# 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:
+#
+## 
+# @author Teemu Rytkonen
+
+
+import posixpath
+import datetime
+
+
+"""
+Base class for Carbon specific elements.
+Attributes:
+"""
+from cone.public import api, exceptions, container, utils
+from cone.confml import model as confmlmodel
+
+class ResourceList(object):
+    def __init__(self):
+        self.resources = {}
+
+    def add_resource(self,resource):
+        self.resources[resource.get_path()] = resource
+
+    def get_resource(self,path):
+        return self.resources[path]
+
+    def remove_resource(self,path):
+        del self.resources[path]
+
+    def list_resources(self):
+        return self.resources.keys()
+
+    def __len__(self):
+        return len(self.resources)
+
+    def __getitem__(self, key):
+        return self.resources[key]
+
+    def __setitem__(self, key, value):
+        self.resources[key] = value
+
+    def __delitem__( self, key):
+        del self.resources[key]
+
+    def __iter__(self):
+        return iter(self.resources.values())
+
+
+class ConfigurationResource(object):
+    FILE_EXTENSION = '/root.confml'
+    def __init__(self, **kwargs):
+        self.name          = kwargs.get('configuration_name', None)
+        self.path          = kwargs.get('path', None)
+        self.parent_config = kwargs.get('parent_config', None)
+        self.version       = kwargs.get('version_identifier', None)
+
+    def get_path(self):
+        path = utils.resourceref.remove_begin_slash(self.path)
+        path = utils.resourceref.remove_end_slash(path)
+        return path + self.FILE_EXTENSION
+
+    def __str__(self):
+        return "%s = %s : %s:%s" % (self.get_path(),self.path,self.name, self.version)
+
+class FeatureListResource(object):
+    CONFML_EXTENSION = '.confml'
+    CARBON_EXTENSION = '.featurelist'
+    def __init__(self, **kwargs):
+        self.path                   = kwargs.get('path', None)
+        self.version_title          = kwargs.get('version_title', None)
+        self.type                   = kwargs.get('type', None)
+        self.list_id                = kwargs.get('list_id', None)
+        self.expanded               = kwargs.get('expanded', None)
+        self.list_version_id        = kwargs.get('list_version_id', None)
+        self.version_identifier     = kwargs.get('version_identifier', None)
+        self.is_latest_version      = kwargs.get('is_latest_version', None)
+        self.can_be_released        = kwargs.get('can_be_released', None)
+        self.has_external_relations = kwargs.get('has_external_relations', None)
+
+    def get_path(self):
+        path = utils.resourceref.remove_begin_slash(self.version_title)
+        path = utils.resourceref.remove_end_slash(path)
+        return path + self.CONFML_EXTENSION
+
+    def get_carbon_path(self):
+        path = utils.resourceref.remove_begin_slash(self.version_title)
+        path = utils.resourceref.remove_end_slash(path)
+        return path + self.CARBON_EXTENSION
+
+    def __str__(self):
+        return "%s = %s : %s" % (self.get_path(),self.path,self.version_title)
+
+class CarbonElement(object):
+    pass
+
+    def _get_mapper(self,modelname):
+        """
+        Return a instance of appropriate mapper for given model.
+        """
+        mapmodule = __import__('cone.carbon.mapping')
+        return mapmodule.carbon.mapping.MAPPERS[modelname]()
+
+
+class CarbonConfiguration(CarbonElement, confmlmodel.ConfmlConfiguration):
+    def __init__(self, ref='', **kwargs):
+        super(CarbonConfiguration, self).__init__(ref, **kwargs)
+        if self.meta == None:
+            self.meta = {}
+        
+        self.name                       = kwargs.get('name') or utils.resourceref.remove_ext(utils.resourceref.psplit_ref(self.path)[-1])
+        self.meta.add('type',kwargs.get('type', 'configurationroot'))
+        self._version_identifier        = kwargs.get('version_identifier', None)
+
+    @property
+    def version_identifier(self):
+        if self._version_identifier == None:
+            dt = datetime.datetime.today()
+            self._version_identifier = "%dwk%02d" % dt.isocalendar()[0:2]
+        return self._version_identifier
+
+    @property
+    def type(self):
+        if self.meta and self.meta.get('type'):
+            return self.meta['type']
+        else:
+            return 'configurationroot'
+    
+class FeatureList(CarbonConfiguration):
+    def __init__(self, ref='', **kwargs):
+        if not kwargs.get('path'):
+            kwargs['path']          = str(kwargs.get('name', '')+'.confml')
+        kwargs['type'] = 'featurelist'
+        super(FeatureList, self).__init__(ref, **kwargs)
+        self.name                = kwargs.get('name', '')
+        self._version_identifier = kwargs.get('version_identifier', 'WORKING')
+
+class CarbonFeature(CarbonElement, confmlmodel.ConfmlSetting):
+    def __init__(self, ref,**kwargs):
+        ref = utils.resourceref.to_dottedref(ref)
+        super(CarbonFeature,self).__init__(ref,**kwargs)
+        
+
+class CarbonSetting(CarbonFeature, confmlmodel.ConfmlSetting):
+    pass
+
+class CarbonIntSetting(CarbonFeature, confmlmodel.ConfmlIntSetting):
+    pass
+
+class CarbonBooleanSetting(CarbonFeature, confmlmodel.ConfmlBooleanSetting):
+    pass
+
+class CarbonSelectionSetting(CarbonFeature, confmlmodel.ConfmlSelectionSetting):
+    pass
+
+class CarbonStringSetting(CarbonFeature, confmlmodel.ConfmlSetting):
+    def __init__(self, ref,**kwargs):
+        super(CarbonStringSetting,self).__init__(ref,**kwargs)
+        self.type = 'string'
+
+    pass
+
+def get_mapper(modelname):
+    """
+    Return a instance of appropriate mapper for given model.
+    """
+    mapmodule = __import__('cone.carbon.mapping')
+    return mapmodule.carbon.mapping.MAPPERS[modelname]()
+