configurationengine/source/cone/confml/persistentconfml.py
author m2lahtel
Thu, 21 Oct 2010 16:36:53 +0300
changeset 5 d2c80f5cab53
parent 3 e7e0ae78773e
permissions -rw-r--r--
Updated to version 1.2.14
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     1
#
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     2
# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     3
# All rights reserved.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     4
# This component and the accompanying materials are made available
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     5
# under the terms of "Eclipse Public License v1.0"
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     6
# which accompanies this distribution, and is available
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     7
# at the URL "http://www.eclipse.org/legal/epl-v10.html".
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     8
#
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     9
# Initial Contributors:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    10
# Nokia Corporation - initial contribution.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    11
#
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    12
# Contributors:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    13
#
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    14
# Description: 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    15
#
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    16
import os
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    17
import re
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    18
import logging
5
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
    19
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    20
try:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    21
    from cElementTree import ElementTree
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    22
except ImportError:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    23
    try:    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    24
        from elementtree import ElementTree
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    25
    except ImportError:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    26
        try:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    27
            from xml.etree import cElementTree as ElementTree
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    28
        except ImportError:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    29
            from xml.etree import ElementTree
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    30
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    31
# cone specific imports
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    32
from cone.public import persistence, exceptions, api, utils, container, parsecontext
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    33
from cone.confml import model
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    34
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    35
CONFIGURATION_NAMESPACES = ["http://www.s60.com/xml/confml/2","http://www.s60.com/xml/confml/1"]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    36
INCLUDE_NAMESPACES       = ["http://www.w3.org/2001/XInclude","http://www.w3.org/2001/xinclude"]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    37
XLINK_NAMESPACES         = ["http://www.w3.org/1999/xlink"]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    38
SCHEMA_NAMESPACES        = ["http://www.w3.org/2001/XMLSchema"]
5
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
    39
RULEML_NAMESPACES        = ["http://www.s60.com/xml/ruleml/3"]
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
    40
RULEML_NAMESPACE         = {"http://www.s60.com/xml/ruleml/3" : "ruleml"}
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    41
CV_NAMESPACE             = {"http://www.nokia.com/xml/cpf-id/1": "cv"}
5
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
    42
KNOWN_NAMESPACES         = []
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
    43
KNOWN_NAMESPACES.extend(CONFIGURATION_NAMESPACES)
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
    44
KNOWN_NAMESPACES.extend(INCLUDE_NAMESPACES)
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
    45
KNOWN_NAMESPACES.extend(XLINK_NAMESPACES)
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
    46
KNOWN_NAMESPACES.extend(SCHEMA_NAMESPACES)
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
    47
KNOWN_NAMESPACES.extend(CV_NAMESPACE)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    48
MODEL                    = model
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    49
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    50
def dumps(obj, indent=True):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    51
    etree = ConfmlWriter().dumps(obj)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    52
    if indent:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    53
        persistence.indent(etree)
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    54
    result = ElementTree.tostring(etree)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    55
    
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    56
    # To make the output the same in linux and windows
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    57
    # (needed to make testing easier)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    58
    if os.linesep != '\r\n':
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    59
        result = result.replace(os.linesep, '\r\n')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    60
    
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    61
    return result
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    62
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    63
def loads(xml):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    64
    return ConfmlReader().loads(xml)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    65
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    66
def add_parse_warning(msg, line, type='model.confml'):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    67
    parsecontext.get_confml_context().handle_problem(
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    68
        api.Problem(msg,
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    69
                    severity = api.Problem.SEVERITY_WARNING,
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    70
                    type     = type,
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    71
                    line     = line))
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    72
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    73
def add_unknown_element_warning(elem):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    74
    add_parse_warning("Unknown element '%s'" % elem.tag,
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    75
                      utils.etree.get_lineno(elem),
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    76
                      type='model.confml.unknown_element')
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    77
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    78
class ConfmlWriter(persistence.ConeWriter):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    79
    """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    80
    """ 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    81
    def dumps(self, obj):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    82
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    83
        @param obj: The object 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    84
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    85
        """ Make sure that the object is mapped to an object in this model """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    86
        mobj = obj._get_mapper('confml').map_object(obj)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    87
        writer = get_writer_for_class(mobj.__class__.__name__)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    88
        return writer.dumps(obj)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    89
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    90
class ConfmlReader(persistence.ConeReader):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    91
    """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    92
    """ 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    93
    def loads(self, xmlstr):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    94
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    95
        @param xml: The xml which to read. reads only the first object. 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    96
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    97
        reader = get_reader_for_elem("configuration")
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    98
        try:
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    99
            etree = utils.etree.fromstring(xmlstr)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   100
        except exceptions.XmlParseError, e:
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   101
            e.problem_type = 'xml.confml'
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   102
            raise e
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   103
        return reader.loads(etree)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   104
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   105
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   106
class ConfigurationWriter(ConfmlWriter):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   107
    """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   108
    Writes a single Configuration project confml file.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   109
    """ 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   110
    @classmethod
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   111
    def supported_class(cls, classname):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   112
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   113
        Class method to determine if this ConfmlWriter supports writing
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   114
        of the given class name
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   115
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   116
        if classname=="Configuration" or \
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   117
           classname=="ConfmlConfiguration" :
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   118
            return True
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   119
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   120
            return False
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   121
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   122
    def __init__(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   123
        self.configuration_namespace = CONFIGURATION_NAMESPACES[0]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   124
        self.include_namespace       = INCLUDE_NAMESPACES[0]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   125
        self.xlink_namespace         = XLINK_NAMESPACES[0]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   126
        self.schema_namespace        = SCHEMA_NAMESPACES[0]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   127
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   128
    def dumps(self,obj,indent=True):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   129
        elem = ElementTree.Element("configuration")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   130
        if self.configuration_namespace:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   131
            elem.set("xmlns",self.configuration_namespace)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   132
        if self.include_namespace:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   133
            elem.set("xmlns:xi",self.include_namespace)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   134
        if self.include_namespace:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   135
            elem.set("xmlns:xlink",self.xlink_namespace)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   136
        if self.schema_namespace:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   137
            elem.set("xmlns:xs",self.schema_namespace)
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   138
        if obj.get_name():
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   139
            elem.set("name", obj.get_name()) 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   140
        if obj.version != None:
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   141
            elem.set("version", obj.version) 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   142
        if obj.get_id():
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   143
            elem.set('id', obj.get_id())
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   144
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   145
        for child in obj._objects():
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   146
            """ Make sure that the object is mapped to an object in this model """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   147
            mobj = child._get_mapper('confml').map_object(child)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   148
            writer = get_writer_for_class(mobj.__class__.__name__)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   149
            childelem = writer.dumps(child)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   150
            elem.append(childelem)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   151
        return elem
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   152
 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   153
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   154
class ConfigurationReader(ConfmlReader):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   155
    """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   156
    Parses a single CPF configuration project root confml file. Parses the XInclude statements to 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   157
    find out the layers inside the project
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   158
    """ 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   159
    @classmethod
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   160
    def supported_elem(cls, elemname, parent=None):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   161
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   162
        Class method to determine if this ConfmlWriter supports writing
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   163
        of the given elem name
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   164
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   165
        if elemname=="configuration":
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   166
            return True
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   167
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   168
            return False
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   169
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   170
    def __init__(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   171
        self.configuration_namespaces  = CONFIGURATION_NAMESPACES
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   172
        self.include_namespaces        = INCLUDE_NAMESPACES
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   173
        self.schema_namespaces         = SCHEMA_NAMESPACES
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   174
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   175
    def loads(self, etree):
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   176
        configuration = model.ConfmlConfiguration(name=etree.get("name"),
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   177
                                                  id=etree.get("id"),
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   178
                                                  version=etree.get("version"))
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   179
        configuration.lineno = utils.etree.get_lineno(etree)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   180
        # configuration.set_name(etree.get("name") or 'unknown') 
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   181
        configuration.set_ref(etree.get("name") or 'unknown')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   182
        for elem in etree.getchildren():
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   183
            # At the moment we ignore the namespace of elements
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   184
            (namespace,elemname) = get_elemname(elem.tag)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   185
            try:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   186
                reader = get_reader_for_elem(elemname)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   187
                obj = reader.loads(elem)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   188
                if obj:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   189
                    configuration.add(obj)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   190
            except exceptions.ConePersistenceError,e:
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   191
                add_unknown_element_warning(elem)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   192
                continue
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   193
        return configuration
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   194
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   195
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   196
class MetaWriter(ConfmlWriter):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   197
    @classmethod
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   198
    def supported_class(cls, classname):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   199
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   200
        Class method to determine if this ConfmlWriter supports writing
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   201
        of the given class name
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   202
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   203
        if classname=="ConfmlMeta":
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   204
            return True
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   205
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   206
            return False
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   207
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   208
    def dumps(self, obj):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   209
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   210
        @param obj: The Configuration object 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   211
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   212
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   213
        elem = ElementTree.Element("meta")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   214
        for metaproperty in obj:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   215
            prefix = CV_NAMESPACE.get(metaproperty.ns, "")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   216
            if prefix != "":
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   217
                #Including namespace to metadata element as well            
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   218
                elem.set(("xmlns:%s" % prefix), metaproperty.ns)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   219
                childelem = ElementTree.Element(prefix + ":" + metaproperty.tag)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   220
            else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   221
                childelem = ElementTree.Element(metaproperty.tag)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   222
            if metaproperty.value != None:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   223
                childelem.text = metaproperty.value
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   224
            for attr in metaproperty.attrs:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   225
                childelem.set(attr, metaproperty.attrs[attr])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   226
            elem.append(childelem)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   227
        return elem
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   228
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   229
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   230
class MetaReader(ConfmlReader):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   231
    @classmethod
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   232
    def supported_elem(cls, elemname, parent=None):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   233
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   234
        Class method to determine if this ConfmlWriter supports reading
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   235
        of the given elem name
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   236
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   237
        if elemname=="meta":
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   238
            return True
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   239
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   240
            return False
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   241
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   242
    def loads(self,etree):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   243
        metaelem = model.ConfmlMeta()
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   244
        metaelem.lineno = utils.etree.get_lineno(etree)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   245
        for elem in etree.getchildren():            
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   246
            (namespace,elemname) = get_elemname(elem.tag)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   247
            attributes = {}
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   248
            for key in elem.keys():
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   249
                attributes[key] = elem.get(key)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   250
            
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   251
            metaprop = model.ConfmlMetaProperty(elemname, elem.text, namespace, attrs=attributes)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   252
            metaelem.append(metaprop)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   253
        return metaelem
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   254
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   255
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   256
class DescWriter(ConfmlWriter):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   257
    """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   258
    """ 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   259
    @classmethod
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   260
    def supported_class(cls, classname):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   261
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   262
        Class method to determine if this ConfmlWriter supports writing
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   263
        of the given class name
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   264
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   265
        if classname=="ConfmlDescription":
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   266
            return True
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   267
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   268
            return False
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   269
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   270
    def dumps(self, obj):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   271
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   272
        @param obj: The Configuration object 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   273
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   274
        elem = ElementTree.Element('desc')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   275
        elem.text = obj.text
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   276
        return elem
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   277
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   278
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   279
class DescReader(ConfmlReader):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   280
    @classmethod
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   281
    def supported_elem(cls, elemname, parent=None):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   282
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   283
        Class method to determine if this ConfmlReader supports reading
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   284
        of the given elem name
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   285
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   286
        if elemname=="desc":
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   287
            return True
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   288
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   289
            return False
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   290
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   291
    def loads(self,elem):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   292
        desc = model.ConfmlDescription(elem.text)
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   293
        desc.lineno = utils.etree.get_lineno(elem)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   294
        return desc
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   295
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   296
class ConfigurationProxyWriter(ConfmlWriter):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   297
    """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   298
    """ 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   299
    @classmethod
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   300
    def supported_class(cls, classname):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   301
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   302
        Class method to determine if this ConfmlWriter supports writing
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   303
        of the given class name
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   304
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   305
        if classname=="ConfigurationProxy":
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   306
            return True
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   307
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   308
            return False
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   309
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   310
    def dumps(self, obj):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   311
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   312
        @param obj: The Configuration object 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   313
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   314
        elem = self.to_include(obj.path)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   315
        return elem
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   316
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   317
    def to_include(self,include):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   318
        elem = ElementTree.Element("xi:include",{"href":include})
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   319
        return elem 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   320
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   321
class ConfigurationProxyReader(ConfmlReader):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   322
    """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   323
    """ 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   324
    @classmethod
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   325
    def supported_elem(cls, elemname, parent=None):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   326
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   327
        Class method to determine if this ConfmlWriter supports reading
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   328
        of the given elem name
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   329
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   330
        if elemname=="include":
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   331
            return True
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   332
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   333
            return False
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   334
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   335
    def loads(self, elem):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   336
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   337
        @param elem: The xml include elem
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   338
        """
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   339
        proxy = api.ConfigurationProxy(self.parse_include(elem))
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   340
        # proxy.lineno = utils.etree.get_lineno(elem)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   341
        return proxy
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   342
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   343
    def parse_include(self,include):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   344
        #print "Found include %s" % include.get('href').replace('#/','')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   345
        return include.get('href').replace('#/','')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   346
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   347
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   348
class FeatureWriter(ConfmlWriter):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   349
    @classmethod
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   350
    def supported_class(cls, classname):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   351
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   352
        Class method to determine if this ConfmlWriter supports writing
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   353
        of the given class name
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   354
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   355
        if classname=="ConfmlFeature" or \
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   356
           classname=="Feature":
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   357
            return True
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   358
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   359
            return False
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   360
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   361
    def dumps(self, obj):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   362
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   363
        @param obj: The Configuration object 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   364
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   365
        elem = ElementTree.Element('feature', 
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   366
                                   {'ref' : obj.get_ref()})
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   367
        if obj.get_name():
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   368
            elem.set('name', obj.get_name())
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   369
        if obj.get_type():
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   370
            elem.set('type', obj.get_type())
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   371
        if obj.get_id() != None:
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   372
            elem.set('id', obj.get_id())
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   373
        if obj.get_relevant() != None:
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   374
            elem.set('relevant', obj.get_relevant())
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   375
        if obj.get_constraint() != None:
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   376
            elem.set('constraint', obj.get_constraint())
5
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   377
        
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   378
        dump_extension_attributes(obj, elem)
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   379
        
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   380
        for child in obj._objects():
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   381
            """ Make sure that the object is mapped to an object in this model """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   382
            mobj = child._get_mapper('confml').map_object(child)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   383
            writer = get_writer_for_class(mobj.__class__.__name__)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   384
            childelem = writer.dumps(child)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   385
            if childelem != None:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   386
                elem.append(childelem)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   387
        return elem
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   388
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   389
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   390
class FeatureReader(ConfmlReader):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   391
    """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   392
    """ 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   393
    @classmethod
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   394
    def supported_elem(cls, elemname, parent=None):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   395
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   396
        Class method to determine if this ConfmlWriter supports reading
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   397
        of the given elem name
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   398
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   399
        if elemname=="feature":
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   400
            return True
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   401
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   402
            return False
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   403
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   404
    def loads(self, elem):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   405
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   406
        @param elem: The xml include elem
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   407
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   408
        type = elem.get('type')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   409
        if type == 'sequence':
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   410
            feature = api.FeatureSequence(elem.get('ref'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   411
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   412
            feature = model.ConfmlFeature(elem.get('ref'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   413
        if elem.get('name'):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   414
            feature.set_name(elem.get('name'))
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   415
        if elem.get('id') != None:
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   416
            feature.set_id(elem.get('id'))
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   417
        if elem.get('relevant') != None:
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   418
            feature.set_relevant(elem.get('relevant'))
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   419
        if elem.get('constraint') != None:
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   420
            feature.set_constraint(elem.get('constraint'))
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   421
        feature.set_type(type)
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   422
        feature.lineno = utils.etree.get_lineno(elem)
5
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   423
        
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   424
        load_extension_attributes(elem, feature)
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   425
        
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   426
        for elem in elem.getchildren():
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   427
            # At the moment we ignore the namespace of elements
5
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   428
            (_,elemname) = get_elemname(elem.tag)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   429
            try:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   430
                reader = get_reader_for_elem(elemname)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   431
                obj = reader.loads(elem)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   432
                feature.add(obj)
5
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   433
            except exceptions.ConePersistenceError:
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   434
                add_unknown_element_warning(elem)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   435
                continue
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   436
        return feature
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   437
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   438
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   439
class OptionWriter(ConfmlWriter):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   440
    @classmethod
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   441
    def supported_class(cls, classname):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   442
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   443
        Class method to determine if this ConfmlWriter supports writing
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   444
        of the given class name
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   445
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   446
        if classname=="Option":
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   447
            return True
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   448
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   449
            return False
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   450
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   451
    def dumps(self, obj):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   452
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   453
        @param obj: The Option object 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   454
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   455
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   456
        objdict = {}
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   457
        if obj.get_name() is not None: objdict['name'] = obj.get_name()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   458
        if obj.get_value() is not None: objdict['value'] = obj.get_value()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   459
        if obj.map is not None: objdict['map'] = obj.map
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   460
        if obj.relevant is not None: objdict['relevant'] = obj.relevant
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   461
        if obj.display_name is not None: objdict['displayName'] = obj.display_name
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   462
        if obj.map_value is not None: objdict['mapValue'] = obj.map_value
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   463
5
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   464
        if hasattr(obj,'extensionAttributes') and obj.extensionAttributes is not None and obj.extensionAttributes != []:
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   465
            for ext_attribute in obj.extensionAttributes:
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   466
                if ext_attribute.ns != None and ext_attribute.ns != "":
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   467
                    objdict["{%s}%s" % (ext_attribute.ns, ext_attribute.name)] = str(ext_attribute.value)
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   468
                else:
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   469
                    objdict[ext_attribute.name] = str(ext_attribute.value)    
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   470
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   471
        elem = ElementTree.Element('option', objdict)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   472
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   473
        return elem
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   474
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   475
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   476
class OptionReader(ConfmlReader):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   477
    """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   478
    """ 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   479
    @classmethod
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   480
    def supported_elem(cls, elemname, parent=None):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   481
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   482
        Class method to determine if this ConfmlWriter supports reading
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   483
        of the given elem name
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   484
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   485
        if elemname=="option":
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   486
            return True
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   487
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   488
            return False
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   489
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   490
    def loads(self, elem):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   491
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   492
        @param elem: The xml include elem
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   493
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   494
        name = elem.get('name')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   495
        value = elem.get('value')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   496
        optmap = elem.get('map')
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   497
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   498
        if value == None and optmap == None:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   499
            logging.getLogger('cone').warning("Encountered option with no value")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   500
            option = None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   501
        else:
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   502
            option = api.Option(name, value, map=optmap, 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   503
                                relevant=elem.get('relevant'),
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   504
                                map_value=elem.get('mapValue'), 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   505
                                display_name=elem.get('displayName'))
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   506
            option.lineno = utils.etree.get_lineno(elem) 
5
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   507
            
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   508
        #Add extension attributes
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   509
        for attribute in elem.attrib:
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   510
            (ns,attname) = get_elemname(attribute)
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   511
            if ns != None and ns != "":
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   512
                if not ns in KNOWN_NAMESPACES:
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   513
                    option.add_extension_attribute(model.ConfmlExtensionAttribute(attname, elem.attrib[attribute], ns))
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   514
        
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   515
        return option
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   516
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   517
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   518
class IconWriter(ConfmlWriter):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   519
    @classmethod
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   520
    def supported_class(cls, classname):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   521
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   522
        Class method to determine if this ConfmlWriter supports writing
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   523
        of the given class name
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   524
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   525
        if classname=="ConfmlIcon":
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   526
            return True
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   527
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   528
            return False
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   529
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   530
    def dumps(self, obj):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   531
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   532
        @param obj: The Option object 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   533
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   534
        elem = ElementTree.Element('icon', 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   535
                                   {'xlink:href' : obj.href})
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   536
        return elem
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   537
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   538
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   539
class IconReader(ConfmlReader):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   540
    """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   541
    """ 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   542
    @classmethod
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   543
    def supported_elem(cls, elemname, parent=None):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   544
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   545
        Class method to determine if this ConfmlWriter supports reading
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   546
        of the given elem name
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   547
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   548
        if elemname=="icon":
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   549
            return True
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   550
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   551
            return False
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   552
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   553
    def loads(self, elem):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   554
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   555
        @param elem: The xml include elem
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   556
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   557
        href = elem.get('{%s}href' % XLINK_NAMESPACES[0])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   558
        obj = model.ConfmlIcon(href)
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   559
        obj.lineno = utils.etree.get_lineno(elem)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   560
        return obj
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   561
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   562
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   563
class PropertyWriter(ConfmlWriter):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   564
    @classmethod
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   565
    def supported_class(cls, classname):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   566
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   567
        Class method to determine if this ConfmlWriter supports writing
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   568
        of the given class name
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   569
        """
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   570
        if classname=="Property":
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   571
            return True
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   572
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   573
            return False
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   574
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   575
    def dumps(self, obj):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   576
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   577
        @param obj: The Option object 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   578
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   579
        elem = ElementTree.Element('property')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   580
        if obj.name != None:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   581
            elem.set('name', obj.name)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   582
        if obj.value != None:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   583
            elem.set('value', obj.value)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   584
        if obj.unit != None:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   585
            elem.set('unit', obj.unit)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   586
        return elem
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   587
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   588
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   589
class PropertyReader(ConfmlReader):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   590
    """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   591
    """ 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   592
    @classmethod
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   593
    def supported_elem(cls, elemname, parent=None):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   594
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   595
        Class method to determine if this ConfmlWriter supports reading
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   596
        of the given elem name
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   597
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   598
        if elemname=="property":
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   599
            return True
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   600
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   601
            return False
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   602
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   603
    def loads(self, elem):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   604
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   605
        @param elem: The xml include elem
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   606
        """
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   607
        option = api.Property(name=elem.get('name'),value=elem.get('value'), unit=elem.get('unit'))
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   608
        option.lineno = utils.etree.get_lineno(elem)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   609
        return option
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   610
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   611
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   612
class XmlSchemaFacetWriter(ConfmlWriter):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   613
    MAPPING = {'ConfmlLength'       : 'xs:length',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   614
               'ConfmlMinLength'    : 'xs:minLength',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   615
               'ConfmlMaxLength'    : 'xs:maxLength',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   616
               'ConfmlMinInclusive' : 'xs:minInclusive',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   617
               'ConfmlMaxInclusive' : 'xs:maxInclusive',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   618
               'ConfmlMinExclusive' : 'xs:minExclusive',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   619
               'ConfmlMaxExclusive' : 'xs:maxExclusive',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   620
               'ConfmlPattern'      : 'xs:pattern',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   621
               'ConfmlTotalDigits'  : 'xs:totalDigits'}
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   622
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   623
    @classmethod
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   624
    def supported_class(cls, classname):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   625
        return classname in cls.MAPPING
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   626
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   627
    def dumps(self, obj):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   628
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   629
        @param obj: The facet object 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   630
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   631
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   632
        classname = obj.__class__.__name__
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   633
        elem = ElementTree.Element(self.MAPPING[classname])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   634
        if obj.value != None:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   635
            elem.set('value', str(obj.value))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   636
        return elem
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   637
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   638
class XmlSchemaFacetReader(ConfmlReader):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   639
    MAPPING = {'length'       : model.ConfmlLength,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   640
               'minLength'    : model.ConfmlMinLength,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   641
               'maxLength'    : model.ConfmlMaxLength,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   642
               'minInclusive' : model.ConfmlMinInclusive,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   643
               'maxInclusive' : model.ConfmlMaxInclusive,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   644
               'minExclusive' : model.ConfmlMinExclusive,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   645
               'maxExclusive' : model.ConfmlMaxExclusive,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   646
               'pattern'      : model.ConfmlPattern,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   647
               'totalDigits'  : model.ConfmlTotalDigits}
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   648
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   649
    @classmethod
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   650
    def supported_elem(cls, elemname, parent=None):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   651
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   652
        Class method to determine if this ConfmlWriter supports reading
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   653
        of the given elem name
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   654
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   655
        return elemname in cls.MAPPING
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   656
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   657
    def loads(self, elem):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   658
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   659
        @param elem: The XML schema facet element
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   660
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   661
        elem_name = utils.xml.split_tag_namespace(elem.tag)[1]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   662
        facet_class = self.MAPPING[elem_name]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   663
        obj = facet_class(elem.get('value'))
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   664
        obj.lineno = utils.etree.get_lineno(elem)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   665
        return obj
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   666
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   667
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   668
class DataWriter(ConfmlWriter):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   669
    @classmethod
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   670
    def supported_class(cls, classname):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   671
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   672
        Class method to determine if this ConfmlWriter supports writing
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   673
        of the given class name
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   674
        """
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   675
        if classname=="Data" or \
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   676
           classname=="DataContainer":
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   677
            return True
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   678
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   679
            return False
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   680
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   681
    def dumps(self, obj):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   682
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   683
        @param obj: The Data object 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   684
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   685
        # Create a data hierarchy of the 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   686
        elem = ElementTree.Element(obj.get_ref())
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   687
        if hasattr(obj,'get_map') and obj.get_map() is not None:
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   688
            elem.set('map', obj.get_map())
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   689
        elif hasattr(obj,'get_value') and obj.get_value() is not None:
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   690
            elem.text = obj.get_value()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   691
        if hasattr(obj,'template') and obj.template == True:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   692
            elem.set('template','true')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   693
        if hasattr(obj,'policy') and obj.policy != '':
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   694
            elem.set('extensionPolicy',obj.policy)
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   695
        if hasattr(obj,'empty') and obj.empty == True:
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   696
            elem.set('empty','true')
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   697
        for child in obj._objects():
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   698
            writer = DataWriter()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   699
            childelem = writer.dumps(child)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   700
            if childelem != None:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   701
                elem.append(childelem)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   702
        return elem
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   703
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   704
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   705
class DataReader(ConfmlReader):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   706
    """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   707
    """ 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   708
    @classmethod
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   709
    def supported_elem(cls, elemname, parent=None):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   710
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   711
        Class method to determine if this ConfmlWriter supports reading
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   712
        of the given elem name
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   713
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   714
        if elemname=="data":
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   715
            return True
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   716
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   717
            return False
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   718
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   719
    def loads(self, elem):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   720
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   721
        @param elem: The xml include elem
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   722
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   723
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   724
        (namespace,elemname) = get_elemname(elem.tag)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   725
        obj = api.DataContainer(elemname, container=True)
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   726
        obj.lineno = utils.etree.get_lineno(elem)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   727
        for elem in elem.getchildren():
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   728
            try:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   729
                reader = ElemReader(attr='data')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   730
                childobj = reader.loads(elem)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   731
                obj.add(childobj)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   732
            except exceptions.ConePersistenceError,e:
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   733
                add_unknown_element_warning(elem)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   734
                continue
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   735
        return obj
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   736
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   737
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   738
class ViewWriter(ConfmlWriter):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   739
    @classmethod
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   740
    def supported_class(cls, classname):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   741
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   742
        Class method to determine if this ConfmlWriter supports writing
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   743
        of the given class name
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   744
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   745
        if classname=="View" or \
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   746
           classname=="ConfmlView":
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   747
            return True
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   748
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   749
            return False
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   750
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   751
    def dumps(self, obj):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   752
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   753
        @param obj: The Configuration object 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   754
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   755
        elem = ElementTree.Element('view', 
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   756
                                   {'name' : obj.get_name()})
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   757
        if obj.id != None:  
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   758
            elem.set('id', obj.id)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   759
        for child in obj._objects():
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   760
            """ Make sure that the object is mapped to an object in this model """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   761
            mobj = child._get_mapper('confml').map_object(child)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   762
            writer = get_writer_for_class(mobj.__class__.__name__)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   763
            childelem = writer.dumps(child)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   764
            if childelem != None:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   765
                elem.append(childelem)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   766
        return elem
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   767
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   768
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   769
class ViewReader(ConfmlReader):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   770
    """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   771
    """ 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   772
    @classmethod
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   773
    def supported_elem(cls, elemname, parent=None):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   774
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   775
        Class method to determine if this ConfmlWriter supports reading
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   776
        of the given elem name
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   777
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   778
        if elemname=="view":
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   779
            return True
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   780
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   781
            return False
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   782
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   783
    def loads(self, elem):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   784
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   785
        @param elem: The xml include elem
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   786
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   787
        vid = elem.get('id')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   788
        name = elem.get('name')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   789
        view = model.ConfmlView(name, id=vid)
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   790
        view.lineno = utils.etree.get_lineno(elem)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   791
        for elem in elem.getchildren():
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   792
            # At the moment we ignore the namespace of elements
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   793
            (namespace,elemname) = get_elemname(elem.tag)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   794
            try:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   795
                reader = get_reader_for_elem(elemname)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   796
                obj = reader.loads(elem)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   797
                view.add(obj)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   798
            except exceptions.ConePersistenceError,e:
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   799
                add_unknown_element_warning(elem)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   800
                continue
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   801
        return view
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   802
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   803
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   804
class GroupWriter(ConfmlWriter):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   805
    @classmethod
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   806
    def supported_class(cls, classname):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   807
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   808
        Class method to determine if this ConfmlWriter supports writing
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   809
        of the given class name
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   810
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   811
        if classname=="Group" or classname=="ConfmlGroup":
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   812
            return True
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   813
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   814
            return False
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   815
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   816
    def dumps(self, obj):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   817
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   818
        @param obj: The Configuration object 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   819
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   820
        elem = ElementTree.Element('group', 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   821
                                   {'name' : obj.get_name()})
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   822
        if obj.get_id():
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   823
            elem.set('id', obj.get_id())
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   824
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   825
        for child in obj._objects():
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   826
            """ Make sure that the object is mapped to an object in this model """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   827
            mobj = child._get_mapper('confml').map_object(child)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   828
            writer = get_writer_for_class(mobj.__class__.__name__)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   829
            childelem = writer.dumps(child)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   830
            if childelem != None:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   831
                elem.append(childelem)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   832
        return elem
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   833
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   834
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   835
class GroupReader(ConfmlReader):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   836
    """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   837
    """ 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   838
    @classmethod
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   839
    def supported_elem(cls, elemname, parent=None):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   840
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   841
        Class method to determine if this ConfmlWriter supports reading
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   842
        of the given elem name
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   843
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   844
        if elemname=='group':
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   845
            return True
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   846
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   847
            return False
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   848
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   849
    def loads(self, elem):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   850
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   851
        @param elem: The xml include elem
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   852
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   853
        gname = elem.get('name')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   854
        gref = utils.resourceref.to_dref(gname).replace('.','_')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   855
        group = model.ConfmlGroup(gref, name=gname)
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   856
        group.lineno = utils.etree.get_lineno(elem)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   857
        if elem.get('id'):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   858
            group.set_id(elem.get('id'))
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   859
        for elem in elem.getchildren():
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   860
            # At the moment we ignore the namespace of elements
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   861
            (namespace,elemname) = get_elemname(elem.tag)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   862
            try:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   863
                reader = get_reader_for_elem(elemname, 'group')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   864
                obj = reader.loads(elem)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   865
                if obj != None:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   866
                    group.add(obj)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   867
            except exceptions.ConePersistenceError,e:
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   868
                add_unknown_element_warning(elem)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   869
                continue
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   870
        return group
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   871
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   872
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   873
class ConfmlSettingWriter(ConfmlWriter):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   874
    @classmethod
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   875
    def supported_class(cls, classname):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   876
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   877
        Class method to determine if this ConfmlWriter supports writing
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   878
        of the given class name
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   879
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   880
        if classname=="ConfmlSetting" or \
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   881
           classname=="ConfmlStringSetting" or \
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   882
           classname=="ConfmlIntSetting" or \
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   883
           classname=="ConfmlRealSetting" or \
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   884
           classname=="ConfmlBooleanSetting" or \
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   885
           classname=="ConfmlSelectionSetting" or \
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   886
           classname=="ConfmlMultiSelectionSetting" or \
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   887
           classname=="ConfmlDateSetting" or \
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   888
           classname=="ConfmlTimeSetting" or \
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   889
           classname=="ConfmlDateTimeSetting" or \
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   890
           classname=="ConfmlDurationSetting" or \
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   891
           classname=="ConfmlHexBinarySetting" or \
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   892
           classname=="ConfmlFileSetting" or \
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   893
           classname=="ConfmlFolderSetting" or \
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   894
           classname=="FeatureSequence" or \
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   895
           classname=="ConfmlSequenceSetting":
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   896
            return True
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   897
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   898
            return False
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   899
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   900
    def dumps(self, obj):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   901
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   902
        @param obj: The Configuration object 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   903
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   904
        elem = ElementTree.Element('setting', 
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   905
                                   {'ref' : obj.get_ref()})
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   906
        self._set_setting_properties(elem, obj)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   907
        return elem
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   908
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   909
    def _set_setting_properties(self, elem, obj):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   910
        """
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   911
        Set the setting properties for the given elm from the given feature object
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   912
        """
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   913
        if obj.get_name():
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   914
            elem.set('name', obj.get_name())
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   915
        if obj.type:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   916
            elem.set('type', obj.get_type())
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   917
        if obj.get_id():
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   918
            elem.set('id', obj.get_id())
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   919
        if hasattr(obj,'minOccurs'):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   920
            elem.set('minOccurs', str(obj.minOccurs))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   921
        if hasattr(obj,'maxOccurs'):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   922
            elem.set('maxOccurs', str(obj.maxOccurs))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   923
        if hasattr(obj,'readOnly') and obj.readOnly != None:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   924
            elem.set('readOnly', str(obj.readOnly).lower())
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   925
        if hasattr(obj,'required') and obj.required != None:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   926
            elem.set('required', str(obj.required).lower())
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   927
        if hasattr(obj,'constraint') and obj.constraint != None:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   928
            elem.set('constraint', obj.constraint)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   929
        if hasattr(obj,'relevant') and obj.relevant != None:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   930
            elem.set('relevant', obj.relevant)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   931
        if hasattr(obj,'mapKey') and obj.mapKey is not None:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   932
            elem.set('mapKey', str(obj.mapKey))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   933
        if hasattr(obj,'mapValue') and obj.mapValue is not None:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   934
            elem.set('mapValue', str(obj.mapValue))
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   935
        if hasattr(obj,'displayName') and obj.displayName is not None:
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   936
            elem.set('displayName', str(obj.displayName))
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   937
            
5
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   938
        if getattr(obj, 'extensionAttributes', None):
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   939
            for ext_attribute in obj.extensionAttributes:
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   940
                if ext_attribute.ns:
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   941
                    elem.set(("{%s}%s" % (ext_attribute.ns, ext_attribute.name)), str(ext_attribute.value))
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   942
                else:
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   943
                    elem.set(ext_attribute.name, str(ext_attribute.value))
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
   944
            
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   945
        for child in obj._objects():
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   946
            """ Make sure that the object is mapped to an object in this model """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   947
            mobj = child._get_mapper('confml').map_object(child)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   948
            writer = get_writer_for_class(mobj.__class__.__name__)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   949
            childelem = writer.dumps(child)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   950
            if childelem != None:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   951
                elem.append(childelem)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   952
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   953
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   954
class ConfmlSettingReader(ConfmlReader):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   955
    """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   956
    """ 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   957
    @classmethod
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   958
    def supported_elem(cls, elemname, parent=None):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   959
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   960
        Class method to determine if this ConfmlWriter supports reading
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   961
        of the given elem name
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   962
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   963
        if parent and not (parent=='feature' or parent=='setting'):
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   964
            return False
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   965
        if elemname=='setting':
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   966
            return True
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   967
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   968
            return False
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   969
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   970
    def loads(self, elem):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   971
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   972
        @param elem: The xml include elem
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   973
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   974
        typedef = elem.get('type')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   975
        if typedef == 'sequence':
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   976
            map_key = elem.get('mapKey')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   977
            map_value = elem.get('mapValue')
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   978
            display_name = elem.get('displayName')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   979
            feature = model.ConfmlSequenceSetting(elem.get('ref'), mapKey=map_key, mapValue=map_value, displayName=display_name)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   980
        elif typedef == 'int':
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   981
            feature = model.ConfmlIntSetting(elem.get('ref'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   982
        elif typedef == 'boolean':
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   983
            feature = model.ConfmlBooleanSetting(elem.get('ref'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   984
        elif typedef == 'selection':
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   985
            feature = model.ConfmlSelectionSetting(elem.get('ref'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   986
        elif typedef == 'multiSelection':
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   987
            feature = model.ConfmlMultiSelectionSetting(elem.get('ref'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   988
        elif typedef == 'string':
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   989
            feature = model.ConfmlStringSetting(elem.get('ref'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   990
        elif typedef == 'real':
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   991
            feature = model.ConfmlRealSetting(elem.get('ref'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   992
        elif typedef == 'file':
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   993
            feature = model.ConfmlFileSetting(elem.get('ref'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   994
        elif typedef == 'folder':
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   995
            feature = model.ConfmlFolderSetting(elem.get('ref'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   996
        elif typedef == 'date':
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   997
            feature = model.ConfmlDateSetting(elem.get('ref'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   998
        elif typedef == 'time':
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   999
            feature = model.ConfmlTimeSetting(elem.get('ref'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1000
        elif typedef == 'dateTime':
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1001
            feature = model.ConfmlDateTimeSetting(elem.get('ref'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1002
        elif typedef == 'duration':
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1003
            feature = model.ConfmlDurationSetting(elem.get('ref'))
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1004
        elif typedef == 'hexBinary':
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1005
            feature = model.ConfmlHexBinarySetting(elem.get('ref'))
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1006
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1007
            # Handle the default setting as int type
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1008
            feature = model.ConfmlSetting(elem.get('ref'), type=typedef)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1009
        feature.lineno = utils.etree.get_lineno(elem)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1010
        self._get_setting_properties(elem, feature)
5
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1011
        
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1012
        return feature
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1013
        
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1014
    def _get_setting_properties(self, elem, feature):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1015
        """
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1016
        Get the setting properties for the given feature from the given xml elem
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1017
        """
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1018
        if elem.get('name'):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1019
            feature.set_name(elem.get('name'))
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1020
        if elem.get('id'):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1021
            feature.set_id(elem.get('id'))
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1022
        if elem.get('minOccurs'):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1023
            feature.minOccurs = int(elem.get('minOccurs'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1024
        if elem.get('maxOccurs'):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1025
            feature.maxOccurs = int(elem.get('maxOccurs'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1026
        if elem.get('readOnly'):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1027
            feature.readOnly = elem.get('readOnly') == 'true' or False
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1028
        if elem.get('required'):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1029
            feature.required = elem.get('required') == 'true' or False
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1030
        if elem.get('constraint'):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1031
            feature.constraint = elem.get('constraint')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1032
        if elem.get('relevant'):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1033
            feature.relevant = elem.get('relevant')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1034
        
5
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1035
        #Add extension attributes
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1036
        for attribute in elem.attrib:
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1037
            (ns,attname) = get_elemname(attribute)
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1038
            if ns != None and ns != "":
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1039
                if not ns in KNOWN_NAMESPACES:
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1040
                    feature.add_extension_attribute(model.ConfmlExtensionAttribute(attname, elem.attrib[attribute], ns))
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1041
        
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1042
        for elem in elem.getchildren():
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1043
            # At the moment we ignore the namespace of elements
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1044
            (namespace,elemname) = get_elemname(elem.tag)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1045
            try:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1046
                reader = get_reader_for_elem(elemname)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1047
                obj = reader.loads(elem)
5
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1048
                    
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1049
                if obj != None:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1050
                    feature.add(obj,container.APPEND)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1051
                else:
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1052
                    add_parse_warning("Invalid child %s in %s" % (elem, feature.name),
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1053
                                      utils.etree.get_lineno(elem))
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1054
            except exceptions.ConePersistenceError,e:
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1055
                add_unknown_element_warning(elem)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1056
                continue
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1057
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1058
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1059
class GroupSettingWriter(ConfmlSettingWriter):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1060
    """
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1061
    """ 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1062
    @classmethod
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1063
    def supported_class(cls, classname):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1064
        """
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1065
        Class method to determine if this ConfmlWriter supports writing
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1066
        of the given class name
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1067
        """
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1068
        if classname=="FeatureLink" or \
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1069
           classname=="ConfmlFeatureLink":
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1070
            return True
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1071
        else:
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1072
            return False
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1073
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1074
    def dumps(self, obj):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1075
        """
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1076
        @param obj: The Configuration object 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1077
        """
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1078
        ref = obj.fqr.replace('.','/')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1079
        elem = ElementTree.Element('setting', 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1080
                                   {'ref' : ref})
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1081
        self._set_setting_properties(elem, obj)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1082
        return elem
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1083
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1084
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1085
class GroupSettingReader(ConfmlSettingReader):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1086
    """
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1087
    """ 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1088
    @classmethod
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1089
    def supported_elem(cls, elemname, parent=None):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1090
        """
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1091
        Class method to determine if this ConfmlWriter supports reading
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1092
        of the given elem name
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1093
        """
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1094
        if elemname=='setting' and parent=='group':
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1095
            return True
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1096
        else:
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1097
            return False
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1098
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1099
    def loads(self, elem):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1100
        """
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1101
        @param elem: The xml include elem
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1102
        """
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1103
        ref = elem.get('ref') or ''
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1104
        ref = ref.replace('/','.')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1105
        feature_link = model.ConfmlFeatureLink(ref)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1106
        feature_link.lineno = utils.etree.get_lineno(elem)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1107
        self._get_setting_properties(elem, feature_link)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1108
        return feature_link
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1109
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1110
class ConfmlLocalPathWriter(ConfmlWriter):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1111
    @classmethod
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1112
    def supported_class(cls, classname):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1113
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1114
        Class method to determine if this ConfmlWriter supports writing
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1115
        of the given class name
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1116
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1117
        if classname=="ConfmlLocalPath":
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1118
            return True
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1119
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1120
            return False
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1121
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1122
    def dumps(self, obj):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1123
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1124
        @param obj: The ConfmlLocalPath object 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1125
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1126
        elem = ElementTree.Element('localPath')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1127
        if obj.readOnly:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1128
            elem.set('readOnly', unicode(obj.readOnly))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1129
        return elem
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1130
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1131
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1132
class ConfmlLocalPathReader(ConfmlReader):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1133
    """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1134
    """ 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1135
    @classmethod
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1136
    def supported_elem(cls, elemname, parent=None):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1137
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1138
        Class method to determine if this ConfmlWriter supports reading
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1139
        of the given elem name
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1140
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1141
        if elemname=="localPath":
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1142
            return True
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1143
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1144
            return False
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1145
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1146
    def loads(self, elem):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1147
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1148
        @param elem: The xml include elem
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1149
        """
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1150
        obj = model.ConfmlLocalPath(readOnly=elem.get('readOnly'))
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1151
        obj.lineno = utils.etree.get_lineno(elem)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1152
        return obj
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1153
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1154
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1155
class ConfmlTargetPathWriter(ConfmlWriter):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1156
    @classmethod
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1157
    def supported_class(cls, classname):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1158
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1159
        Class method to determine if this ConfmlWriter supports writing
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1160
        of the given class name
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1161
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1162
        if classname=="ConfmlTargetPath":
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1163
            return True
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1164
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1165
            return False
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1166
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1167
    def dumps(self, obj):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1168
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1169
        @param obj: The ConfmlLocalPath object 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1170
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1171
        elem = ElementTree.Element('targetPath')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1172
        if obj.readOnly:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1173
            elem.set('readOnly', unicode(obj.readOnly))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1174
        return elem
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1175
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1176
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1177
class ConfmlTargetPathReader(ConfmlReader):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1178
    """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1179
    """ 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1180
    @classmethod
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1181
    def supported_elem(cls, elemname, parent=None):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1182
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1183
        Class method to determine if this ConfmlWriter supports reading
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1184
        of the given elem name
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1185
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1186
        if elemname=="targetPath":
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1187
            return True
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1188
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1189
            return False
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1190
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1191
    def loads(self, elem):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1192
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1193
        @param elem: The xml include elem
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1194
        """
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1195
        obj = model.ConfmlTargetPath(readOnly=elem.get('readOnly'))
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1196
        obj.lineno = utils.etree.get_lineno(elem)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1197
        return obj
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1198
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1199
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1200
class DummyWriter(ConfmlWriter):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1201
    """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1202
    Dummy writer is executed on ConE model elements that are not supposed to go to the confml file
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1203
    """ 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1204
    @classmethod
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1205
    def supported_class(cls, classname):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1206
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1207
        Class method to determine if this ConfmlWriter supports writing
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1208
        of the given class name
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1209
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1210
        if classname=="_FeatureProxy":
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1211
            return True
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1212
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1213
            return False
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1214
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1215
    def dumps(self, obj):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1216
        return None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1217
5
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1218
class ExtensionsWriter(ConfmlWriter):
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1219
    @classmethod
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1220
    def supported_class(cls, classname):
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1221
        """
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1222
        Class method to determine if this ConfmlWriter supports writing
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1223
        of the given class name
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1224
        """
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1225
        if classname=="ConfmlExtensions":
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1226
            return True
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1227
        else:
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1228
            return False
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1229
5
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1230
    def dumps(self, obj):
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1231
        """
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1232
        @param obj: The Configuration object 
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1233
        """
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1234
        
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1235
        elem = ElementTree.Element("extensions")
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1236
        for extension in obj._objects():
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1237
            if isinstance(extension, api.RulemlEvalGlobals):
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1238
                writer = EvalGlobalsWriter()
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1239
                childelem = writer.dumps(extension)
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1240
                if childelem != None:
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1241
                    elem.append(childelem)
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1242
            else:
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1243
                if extension.ns != None and extension.ns != "":
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1244
                    childelem = ElementTree.Element("{%s}%s" % (extension.ns, extension.tag))
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1245
                else:
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1246
                    childelem = ElementTree.Element(extension.tag)
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1247
                if extension.value != None:
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1248
                    childelem.text = extension.value
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1249
                for attr in extension.attrs:
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1250
                    childelem.set(attr, extension.attrs[attr])
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1251
                
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1252
                childs = self._dump_childen(extension._objects())
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1253
                for ch in childs:
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1254
                    childelem.append(ch)
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1255
                
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1256
                elem.append(childelem)
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1257
        return elem
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1258
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1259
    def _dump_childen(self, obj):
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1260
        childs = []
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1261
        
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1262
        for child in obj:
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1263
            if child.ns != None and child.ns != "":
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1264
                childelem = ElementTree.Element("{%s}%s" % (child.ns, child.tag))
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1265
            else:
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1266
                childelem = ElementTree.Element(child.tag)
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1267
            if child.value != None:
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1268
                childelem.text = child.value
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1269
            for attr in child.attrs:
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1270
                childelem.set(attr, child.attrs[attr])
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1271
                
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1272
                
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1273
            chds = self._dump_childen(child._objects())
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1274
            for ch in chds:
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1275
                childelem.append(ch)
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1276
                
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1277
            childs.append(childelem)
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1278
            
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1279
        return childs
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1280
#import xml.sax.expatreader 
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1281
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1282
class ExtensionsReader(ConfmlReader):
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1283
    
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1284
    @classmethod
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1285
    def supported_elem(cls, elemname, parent=None):
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1286
        """
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1287
        Class method to determine if this ConfmlWriter supports reading
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1288
        of the given elem name
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1289
        """
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1290
        if elemname=="extensions":
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1291
            return True
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1292
        else:
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1293
            return False
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1294
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1295
    def loads(self,etree):
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1296
        extensionselem = model.ConfmlExtensions()
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1297
        extensionselem.lineno = utils.etree.get_lineno(etree)
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1298
        for elem in etree.getchildren():
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1299
            try:
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1300
                (_,elemname) = utils.xml.split_tag_namespace(elem.tag)
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1301
                reader = get_reader_for_elem(elemname, 'extensions')
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1302
            except exceptions.ConePersistenceError:
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1303
                extensionselem._add(self._load_children(elem, etree), policy=container.APPEND)
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1304
            else:
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1305
                obj = reader.loads(elem)
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1306
                if obj != None:
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1307
                    extensionselem._add(obj, policy=container.APPEND)
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1308
        return extensionselem
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1309
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1310
    def _load_children(self, elem, etree):
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1311
        (namespace,elemname) = get_elemname(elem.tag)
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1312
        attributes = {}
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1313
        for key in elem.keys():
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1314
            attributes[key] = elem.get(key)
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1315
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1316
        extension = model.ConfmlExtension(elemname, elem.text, namespace, attrs=attributes)
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1317
        
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1318
        for childelem in elem.getchildren():
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1319
            extension._add(self._load_children(childelem, etree), policy=container.APPEND)
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1320
        
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1321
        return extension
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1322
        
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1323
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1324
class EvalGlobalsWriter(ConfmlWriter):
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1325
    @classmethod
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1326
    def supported_class(cls, classname):
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1327
        """
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1328
        Class method to determine if this ConfmlWriter supports writing
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1329
        of the given class name
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1330
        """
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1331
        if classname=="RulemlEvalGlobals":
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1332
            return True
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1333
        else:
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1334
            return False
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1335
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1336
    def dumps(self, obj):
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1337
        """
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1338
        @param obj: The Configuration object 
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1339
        """
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1340
        
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1341
        elem = ElementTree.Element("{%s}eval_globals" % (RULEML_NAMESPACES[0]))
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1342
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1343
        if obj.value != None:
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1344
            elem.text = obj.value
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1345
        if obj.file != None:
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1346
            elem.set('file', obj.file)
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1347
        
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1348
        return elem
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1349
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1350
class EvalGlobalsReader(ConfmlReader):
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1351
    
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1352
    @classmethod
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1353
    def supported_elem(cls, elemname, parent=None):
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1354
        """
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1355
        Class method to determine if this ConfmlWriter supports reading
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1356
        of the given elem name
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1357
        """
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1358
        if elemname=="eval_globals":
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1359
            return True
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1360
        else:
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1361
            return False
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1362
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1363
    def loads(self,etree):
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1364
        eval_globals = api.RulemlEvalGlobals(etree.text, etree.get("file", None))
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1365
        
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1366
        return eval_globals
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1367
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1368
class RfsReader(ConfmlReader):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1369
    """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1370
    """ 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1371
    @classmethod
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1372
    def supported_elem(cls, elemname, parent=None):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1373
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1374
        Class method to determine if this ConfmlWriter supports reading
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1375
        of the given elem name
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1376
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1377
        if elemname=="rfs":
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1378
            return True
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1379
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1380
            return False
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1381
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1382
    def loads(self, elem):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1383
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1384
        @param elem: The xml include elem
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1385
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1386
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1387
        (namespace,elemname) = get_elemname(elem.tag)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1388
        obj = api.DataContainer(elemname, container=True)
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1389
        obj.lineno = utils.etree.get_lineno(elem)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1390
        for elem in elem.getchildren():
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1391
            try:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1392
                reader = ElemReader(attr='rfs')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1393
                childobj = reader.loads(elem)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1394
                obj.add(childobj)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1395
            except exceptions.ConePersistenceError,e:
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1396
                add_unknown_element_warning(elem)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1397
                continue
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1398
        return obj
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1399
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1400
class ElemReader(ConfmlReader):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1401
    def __init__(self, **kwargs):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1402
        self.template = kwargs.get('template',False)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1403
        self.attr = kwargs.get('attr',None)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1404
        self.args = kwargs
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1405
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1406
    def loads(self, elem):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1407
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1408
        @param elem: The xml include elem
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1409
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1410
        (namespace,elemname) = get_elemname(elem.tag)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1411
        datavalue = None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1412
        if len(list(elem)) == 0:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1413
            datavalue = elem.text
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1414
        obj = model.ConfmlData(
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1415
            ref      = elemname,
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1416
            value    = datavalue,
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1417
            template = elem.get('template') == 'true' or self.template,
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1418
            attr     = self.attr,
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1419
            policy   = elem.get('extensionPolicy') or '',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1420
            map      = elem.get('map'),
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1421
            empty    = elem.get('empty') == 'true')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1422
        obj.lineno = utils.etree.get_lineno(elem)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1423
        for elem in elem.getchildren():
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1424
            try:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1425
                reader = ElemReader(**self.args)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1426
                childobj = reader.loads(elem)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1427
                obj.add(childobj)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1428
            except exceptions.ConePersistenceError,e:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1429
                logging.getLogger('cone').warning("Could not parse element %s. Exception: %s" % (elem,e))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1430
                continue
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1431
        return obj
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1432
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1433
namespace_pattern = re.compile("{(.*)}(.*)")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1434
nonamespace_pattern = re.compile("(.*)")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1435
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1436
def get_elemname(tag):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1437
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1438
    ns = namespace_pattern.match(tag)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1439
    nn = nonamespace_pattern.match(tag)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1440
    if ns:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1441
        namespace = ns.group(1)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1442
        elemname = ns.group(2)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1443
        return (namespace,elemname)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1444
    elif nn:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1445
        namespace = ""
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1446
        elemname = nn.group(1)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1447
        return (namespace,elemname)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1448
    else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1449
        raise exceptions.ParseError("Could not parse tag %s" % tag)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1450
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1451
def get_reader_for_elem(elemname, parent=None):
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1452
    for reader in utils.all_subclasses(ConfmlReader):
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1453
        if reader.supported_elem(elemname,parent):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1454
            return reader()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1455
    raise exceptions.ConePersistenceError("No reader for given elem %s under %s found!" % (elemname, parent))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1456
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1457
def get_writer_for_class(classname):
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1458
    for writer in utils.all_subclasses(ConfmlWriter):
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1459
        if writer.supported_class(classname):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1460
            return writer ()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1461
    raise exceptions.ConePersistenceError("No writer for given class found! %s" % classname)
5
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1462
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1463
def dump_extension_attributes(obj, elem):
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1464
    if hasattr(obj,'extensionAttributes') and obj.extensionAttributes is not None and obj.extensionAttributes != []:
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1465
        for ext_attribute in obj.extensionAttributes:
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1466
            if ext_attribute.ns != None and ext_attribute.ns != "":
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1467
                elem.set(("{%s}%s" % (ext_attribute.ns, ext_attribute.name)), unicode(ext_attribute.value))
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1468
            else:
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1469
                elem.set(ext_attribute.name, unicode(ext_attribute.value))    
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1470
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1471
def load_extension_attributes(elem, obj):
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1472
    for attribute in elem.attrib:
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1473
        (ns,attname) = get_elemname(attribute)
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1474
        if ns != None and ns != "":
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1475
            if not ns in KNOWN_NAMESPACES:
d2c80f5cab53 Updated to version 1.2.14
m2lahtel
parents: 3
diff changeset
  1476
                obj.add_extension_attribute(model.ConfmlExtensionAttribute(attname, elem.attrib[attribute], ns))