configurationengine/source/plugins/symbian/ConeHCRPlugin/hcrplugin/hcrml_parser.py
author m2lahtel
Tue, 10 Aug 2010 14:29:28 +0300
changeset 3 e7e0ae78773e
parent 0 2e8eeb919028
permissions -rw-r--r--
ConE 1.2.11 release
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
#
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    16
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    17
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    18
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    19
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    20
import re
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    21
import logging
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    22
import pkg_resources
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    23
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    24
from hcrplugin.hcr_exceptions import *
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    25
from hcrplugin.hcrrepository import HcrRecord, HcrRepository
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    26
from hcrplugin.hcr_writer import HcrWriter
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    27
from hcrplugin.header_writer import *
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    28
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    29
from cone.public import plugin
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    30
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    31
class HcrmlImpl(plugin.ImplBase):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    32
    """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    33
    <class description>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    34
    """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    35
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    36
    IMPL_TYPE_ID = "hcrml"
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    37
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    38
    def __init__(self, resource_ref, configuration):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    39
        plugin.ImplBase.__init__(self, resource_ref, configuration)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    40
        self.logger = logging.getLogger('cone.hcrml(%s)' % resource_ref)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    41
        self.configuration = configuration
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    42
        self.hcrml_file = resource_ref
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    43
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    44
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    45
    def generate(self, context=None):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    46
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    47
        Generate the given implementation. 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    48
        @return: 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    49
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    50
        outputfile = self.__get_output_filename()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    51
        # For output type 'hcr', write the binary repository file
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    52
        if self.output_obj.type == 'hcr':
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    53
            self.logger.info("Generating binary repository to '%s'" % outputfile)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    54
            writer = HcrWriter()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    55
            repo = self.output_obj.get_hcr_repository()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    56
            data = writer.get_repository_bindata(repo)
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    57
            f = context.create_file(outputfile, mode='wb')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    58
            #f = open(outputfile,'wb')
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    59
            try:        f.write(data)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    60
            finally:    f.close()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    61
        elif self.output_obj.type == 'header':
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    62
            self.logger.info("Generating header file to '%s'" % outputfile)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    63
            writer = HeaderWriter(outputfile, self.output_obj)
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    64
            writer.write(context)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    65
        elif self.output_obj.type == None:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    66
            # The HCRML file contains no <output> element, so no output should
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    67
            # be generated
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    68
            pass
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    69
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    70
    def get_refs(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    71
        return self.refs
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    72
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    73
    def list_output_files(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    74
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    75
        Return a list of output files as an array. 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    76
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    77
        fname = self.__get_output_filename()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    78
        return [fname] if fname else []
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    79
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    80
    def __get_output_filename(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    81
        if self.output_obj.file != None:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    82
            return os.path.normpath(os.path.join(self.output, self.output_obj.file))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    83
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    84
            return None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    85
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    86
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    87
class HcrmlReader(plugin.ReaderBase):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    88
    NAMESPACE = 'http://www.symbianfoundation.org/xml/hcrml/1'
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    89
    NAMESPACE_ID = 'hcrml'
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    90
    ROOT_ELEMENT_NAME = 'hcr'
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    91
    FILE_EXTENSIONS = ['hcrml']
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    92
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    93
    def __init__(self, resource_ref, configuration):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    94
        self.configuration = configuration
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    95
        self.hcrml_file = resource_ref
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    96
        self.refs = []
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    97
        self.namespaces = [self.NAMESPACE]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    98
        self.doc = None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    99
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   100
    @classmethod
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   101
    def read_impl(cls, resource_ref, configuration, etree):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   102
        reader = HcrmlReader(resource_ref, configuration)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   103
        reader.doc = etree
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   104
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   105
        impl = HcrmlImpl(resource_ref, configuration)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   106
        impl.output_obj = reader.read_hcrml_output()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   107
        impl.refs = reader.refs
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   108
        return impl
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   109
    
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   110
    @classmethod
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   111
    def get_schema_data(cls):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   112
        return pkg_resources.resource_string('hcrplugin', 'xsd/hcrml.xsd')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   113
    
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   114
    def read_hcrml_output(self, ignore_includes=False):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   115
        output = Output()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   116
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   117
        # There should only be one <output> element, so use find()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   118
        out_elem = self.doc.find("{%s}output" % self.namespaces[0])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   119
        if out_elem != None:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   120
            version = out_elem.get('version')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   121
            read_only = out_elem.get('readOnly')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   122
            file = out_elem.get('file')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   123
            type = out_elem.get('type')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   124
            
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   125
            if type == None or type == '':
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   126
                raise NoTypeDefinedInOutPutTagError("Type attribute missing in hcrml file")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   127
            
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   128
            if type not in ('hcr', 'header'): 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   129
               raise InvalidTypeDefinedInOutPutTagError("Type attribute invalid in hcrml file: %s" % type)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   130
           
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   131
            output.version = version
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   132
            output.read_only = read_only
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   133
            output.file = file
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   134
            output.type = type
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   135
         
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   136
            # An <output> element may contain <include> elements for including other
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   137
            # HCRML files, so read and include categories from those
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   138
            if not ignore_includes:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   139
                included_files = self.read_hcrml_includes(out_elem)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   140
                read_categories = self.read_categories_from_hcrml_files(included_files)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   141
                output.categories.extend(read_categories)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   142
            
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   143
         
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   144
        """ output tag is not mandatory, but there should be some categories included """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   145
        for cat_elem in self.doc.getiterator("{%s}category" % self.namespaces[0]):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   146
            category = self.read_hrcml_category(cat_elem)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   147
            output.categories.append(category)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   148
        return output 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   149
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   150
    def read_hcrml_includes(self, output_elem):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   151
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   152
        Read all <include> elements under an <output> element.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   153
        @return: List of other HCRML files to include.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   154
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   155
        result = []
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   156
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   157
        include_refs = []
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   158
        for include_elem in output_elem.findall("{%s}include" % self.namespaces[0]):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   159
            ref = include_elem.get('ref')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   160
            if ref != None: include_refs.append(ref)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   161
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   162
        if include_refs:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   163
            # There are include refs, construct the list of files that should
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   164
            # be included
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   165
            all_files = self.configuration.list_resources()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   166
            included_files = []
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   167
            for ref in include_refs:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   168
                files_by_ref = self.filter_file_list_by_include_ref(all_files, ref)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   169
                result.extend(files_by_ref)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   170
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   171
        # Make sure that no file is in the list more than once
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   172
        result = list(set(result))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   173
        return result
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   174
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   175
    def read_categories_from_hcrml_files(self, files):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   176
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   177
        Read all categories from the list of the given HCRML files.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   178
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   179
        categories = []
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   180
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   181
        for file in files:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   182
            # Skip the current file
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   183
            if os.path.normpath(file) == os.path.normpath(self.hcrml_file):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   184
                continue
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   185
            
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   186
            # Read the <output> element and append its categories to the result list
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   187
            reader = HcrmlReader(file, self.configuration)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   188
            reader.doc = self._read_xml_doc_from_resource(file, self.configuration)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   189
            # Read the output element, but ignore includes, since we are
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   190
            # currently reading from inside an include
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   191
            output_obj = reader.read_hcrml_output(ignore_includes=True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   192
            categories.extend(output_obj.categories)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   193
            
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   194
        return categories
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   195
            
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   196
    def read_hrcml_category(self,cat_elem):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   197
        category_uid = cat_elem.get('uid')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   198
        if category_uid == None or category_uid == '':
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   199
           raise NoCategoryUIDInHcrmlFileError("No category uid attribute implemented in hcrml file!")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   200
        name = cat_elem.get('name')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   201
        if name == None or name == '':
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   202
           raise NoCategoryNameInHcrmlFileError("No category name attribute implemented in hcrml file!")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   203
        category = Category()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   204
        category.name = name
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   205
        try:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   206
            category.category_uid = long(category_uid)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   207
        except ValueError:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   208
            category.category_uid = long(category_uid, 16)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   209
        category.xml_elem = cat_elem  
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   210
        for setting_elem in cat_elem.getiterator("{%s}setting" % self.namespaces[0]):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   211
             setting = self.read_hcrml_setting(setting_elem)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   212
             category.settings.append(setting)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   213
        return category
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   214
            
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   215
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   216
    def read_hcrml_setting(self,setting_elem):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   217
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   218
        ref = setting_elem.get('ref')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   219
        if ref == None or ref == '':
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   220
            raise NoRefInHcrmlFileError("No ref in setting tag attribute implemented in hcrml file!")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   221
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   222
            self.refs.append(ref)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   223
        type = setting_elem.get('type')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   224
        if type == None or type == '':
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   225
            raise NoTypeAttributeInSettingHcrmlFileError("No type in setting tag attribute implemented in hcrml file ref: %s" % ref )
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   226
        name = setting_elem.get('name')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   227
        if name == None or name == '':
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   228
            raise NoNameAttributeInSettingHcrmlFileError("No type in setting tag attribute implemented in hcrml file ref: %s" % ref )
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   229
        id = setting_elem.get('id')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   230
        if id == None or id == '':
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   231
            raise NoIdAttributeInSettingHcrmlFileError("No id in setting tag attribute implemented in hcrml file ref: %s" % ref )
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   232
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   233
        comment = setting_elem.get('comment')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   234
        if comment == None:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   235
            comment = ''
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   236
            
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   237
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   238
        setting = Setting(self.configuration)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   239
        setting.comment = comment
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   240
        setting.name = name
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   241
        setting.ref = ref
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   242
        try:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   243
            setting.id = long(id)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   244
        except ValueError:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   245
            setting.id = long(id, 16)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   246
        setting.type = type
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   247
        setting.xml_elem = setting_elem
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   248
        for flag_elem in setting_elem.getiterator("{%s}flags" % self.namespaces[0]):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   249
             flag = self.read_hrcml_flags(setting_elem)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   250
             setting.flag = flag
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   251
        return setting
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   252
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   253
    def read_hrcml_flags(self,flag_elem):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   254
         Uninitialised = flag_elem.get('Uninitialised') 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   255
         Modifiable = flag_elem.get('Modifiable')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   256
         Persistent = flag_elem.get('Persistent')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   257
         flag = Flag()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   258
         flag.Uninitialised = Uninitialised
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   259
         flag.Modifiable = Modifiable
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   260
         flag.Persistent = Persistent
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   261
         return flag
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   262
     
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   263
    def filter_file_list_by_include_ref(self, files, ref):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   264
        pattern = ref + '$'
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   265
        pattern = pattern.replace('.', r'\.')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   266
        pattern = pattern.replace('*', '.*')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   267
        pattern = '(^|.*/)' + pattern
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   268
        result = []
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   269
        for file in files:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   270
            if re.match(pattern, file.replace('\\', '/')) != None:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   271
                result.append(file)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   272
        return result
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   273
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   274
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   275
class Flag(object):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   276
    def __init__(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   277
        self.Uninitialised = 0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   278
        self.Modifiable    = 0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   279
        self.Persistent    = 0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   280
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   281
class Setting(object):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   282
    def __init__(self,configuration):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   283
        self.name   = None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   284
        self.ref    = None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   285
        self.type   = None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   286
        self.id = None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   287
        self.flag = None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   288
        self.comment = ''
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   289
        self.configuration = configuration
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   290
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   291
    @property
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   292
    def value(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   293
        dview = self.configuration.get_default_view()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   294
        feature = dview.get_feature(self.ref)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   295
        value = feature.get_value()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   296
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   297
        if self.type in (HcrRecord.VALTYPE_ARRAY_INT32, HcrRecord.VALTYPE_ARRAY_UINT32):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   298
            # Convert string values to numbers
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   299
            value = map(lambda x: self.__str_to_long(x), value)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   300
        elif self.type == HcrRecord.VALTYPE_BIN_DATA and feature.get_type() == 'string':
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   301
            value = self.__hex_to_bindata(value)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   302
        return value
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   303
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   304
    def __str_to_long(self, str_value):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   305
        try:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   306
            return long(str_value)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   307
        except ValueError:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   308
            return long(str_value, 16)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   309
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   310
    def __hex_to_bindata(self, hexdata):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   311
        orig_hexdata = hexdata
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   312
        hexdata = hexdata.replace(' ', '').replace('\r', '').replace('\n', '').replace('\t', '')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   313
        if len(hexdata) % 2 != 0:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   314
            raise ValueError("Failed to convert %r into binary data: String length %d (whitespace stripped) is not divisible by 2", orig_hexdata, len(hexdata))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   315
        for c in hexdata:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   316
            if c not in "0123456789abcdefABCDEF":
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   317
                raise ValueError("Failed to convert %r into binary data: Not a valid hex string", hexdata)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   318
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   319
        temp = []
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   320
        for i in xrange(len(hexdata) / 2):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   321
            start = i * 2
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   322
            end   = start + 2 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   323
            temp.append(chr(int(hexdata[start:end], 16)))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   324
        return ''.join(temp)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   325
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   326
class Category(object):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   327
    def __init__(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   328
        self.name   = None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   329
        self.category_uid    = None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   330
        self.settings = []
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   331
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   332
    def get_hcr_records(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   333
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   334
        Return a list of HcrRecord objects created based on this category's settings.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   335
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   336
        result = []
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   337
        for setting in self.settings:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   338
            record = HcrRecord(setting.type, setting.value, self.category_uid, setting.id)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   339
            flag = setting.flag
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   340
            if flag:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   341
                record.flags = 0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   342
                if flag.Uninitialised == '1':   record.flags |= HcrRecord.FLAG_UNINITIALIZED
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   343
                if flag.Modifiable == '1':      record.flags |= HcrRecord.FLAG_MODIFIABLE
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   344
                if flag.Persistent == '1':      record.flags |= HcrRecord.FLAG_PERSISTENT
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   345
            result.append(record)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   346
        return result 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   347
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   348
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   349
class Output(object):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   350
    def __init__(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   351
        self.file = None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   352
        self.type = None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   353
        self.version = None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   354
        self.read_only = None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   355
        self.categories = []
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   356
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   357
    def get_hcr_records(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   358
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   359
        Return a list of HcrRecord objects created based on this output object's categories.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   360
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   361
        result = []
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   362
        for category in self.categories:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   363
            result.extend(category.get_hcr_records())
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   364
        return result
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   365
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   366
    def get_hcr_repository(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   367
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   368
        Return a HcrRepository object created based on this output.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   369
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   370
        The type of this Output object should be 'hcr', otherwise and an exception is raised.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   371
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   372
        if self.type != 'hcr':
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   373
            raise RuntimeError("get_hcr_repository() called on an Output object with type '%s' (should be 'hcr')" % self.type)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   374
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   375
        return HcrRepository(self.get_hcr_records())
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   376