configurationengine/source/plugins/symbian/ConeImagePlugin/imageplugin/generators.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
Generator classes
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
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    21
import re
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    22
import os
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    23
import logging
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    24
import subprocess
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    25
import shutil
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    26
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    27
ROOT_PATH = os.path.dirname(os.path.abspath(__file__))
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    28
from cone.public import utils
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    29
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    30
class InvalidInputFileException(RuntimeError):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    31
    """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    32
    Exception thrown in case of an invalid input file list.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    33
    """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    34
    pass
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    35
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    36
class OutputGenerator(object):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    37
    def __init__(self,outputpath,**kwargs):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    38
        self._configuration = None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    39
        self._subpath = ''
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    40
        self._contentpath = ''
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    41
        self._command = ''
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    42
        self._inputs = []
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    43
        for arg in kwargs.keys():
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    44
            setattr(self, arg, kwargs[arg])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    45
        self._outputpath = outputpath
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    46
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    47
    def __str__(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    48
        return "Generator for output %s: %s"  % (self.path,self.get_command())
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    49
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    50
    def generate(self, context=None):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    51
        command = self.get_command()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    52
        if command:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    53
            return command.execute()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    54
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    55
            return 0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    56
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    57
    def get_outputpath(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    58
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    59
        Get the confml ref value from configuration if the outputpath is actually a ref
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    60
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    61
        if self._outputpath and ConfmlRefs.is_confml_ref(self._outputpath):
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    62
            oref = ConfmlRefs.get_confml_ref(self._outputpath)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    63
            opath = self.configuration.get_default_view().get_feature(oref).get_value()
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    64
            if opath == None: 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    65
                logging.getLogger('cone.imageml').warning('Output path not set.')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    66
                return self._outputpath 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    67
                #raise exceptions.NotBound("Output path reference has no value %s" % oref)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    68
            (drive,opath) = os.path.splitdrive(opath)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    69
            opath = utils.resourceref.norm(opath)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    70
            opath = utils.resourceref.remove_begin_slash(opath)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    71
            return opath
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    72
        else:
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    73
            return self._outputpath
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    74
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    75
    def set_outputpath(self, value): 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    76
        self._outputpath = value
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    77
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    78
    def del_outputpath(self): 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    79
        self._outputpath = None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    80
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    81
    def get_subpath(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    82
        return self._subpath
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    83
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    84
    def set_subpath(self, value): 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    85
        self._subpath = value
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    86
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    87
    def del_subpath(self): 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    88
        self._subpath = None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    89
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    90
    def get_inputs(self): 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    91
        return self._inputs
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    92
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    93
    def set_inputs(self, value): 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    94
        self._inputs = value
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    95
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    96
    def del_inputs(self): 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    97
        self._inputs = []
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    98
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    99
    def get_configuration(self): 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   100
        return self._configuration
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   101
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   102
    def set_configuration(self, value): 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   103
        self._configuration= value
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   104
        for input in self.inputs:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   105
            input.configuration = self.configuration
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   106
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   107
    def del_configuration(self): 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   108
        self._configuration= None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   109
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   110
    @property
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   111
    def path(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   112
        return utils.resourceref.join_refs([self.subpath, self.outputpath])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   113
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   114
    def get_command(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   115
        (_,ext) = os.path.splitext(self.path)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   116
        if ext == '.mbm':
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   117
            return BmconvCommand(self)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   118
        elif ext == '.mif':
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   119
            return MifconvCommand(self)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   120
        elif ext == '.gif':
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   121
            return CopyCommand(self)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   122
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   123
            return None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   124
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   125
    def get_refs(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   126
        refs = []
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   127
        for input in self.inputs:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   128
            refs.extend(input.get_refs())
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   129
        return refs
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   130
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   131
    configuration = property(get_configuration, set_configuration, del_configuration)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   132
    inputs = property(get_inputs, set_inputs, del_inputs)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   133
    outputpath = property(get_outputpath, set_outputpath, del_outputpath)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   134
    subpath = property(get_subpath, set_subpath, del_subpath)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   135
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   136
class Command(object):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   137
    def __init__(self,generator):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   138
        self._generator = generator
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   139
        self._workdir = 'conversion_workdir'
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   140
        self._extraparams = ""
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   141
        
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   142
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   143
    def execute(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   144
        """ Execute this command """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   145
        pass
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   146
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   147
    def get_command(self, input_files):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   148
        """ return the command as an array """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   149
        return []
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   150
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   151
    def create_workdir(self, input_files):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   152
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   153
        Extract the necessary input files from storage to a working directory
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   154
        @param input_files: The input files (a list of InputFile objects) 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   155
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   156
        if not os.path.exists(self._workdir):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   157
            os.makedirs(self._workdir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   158
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   159
        for file in input_files:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   160
            self.import_to_work(file.filename)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   161
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   162
    def clean_workdir(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   163
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   164
        Clean up working directory 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   165
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   166
        if os.path.exists(self._workdir):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   167
            shutil.rmtree(self._workdir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   168
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   169
    def import_to_work(self,storage_filename):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   170
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   171
        Convert a storage filename to a work filename
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   172
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   173
        workfile = self.workfilename(storage_filename)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   174
        res = self._generator.configuration.get_resource(storage_filename,"rb")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   175
        workfile = open(workfile,"wb")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   176
        workfile.write(res.read())
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   177
        res.close()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   178
        workfile.close()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   179
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   180
    def workfilename(self,filename):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   181
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   182
        Convert a storage filename to a work filename
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   183
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   184
        (_,workname) = os.path.split(filename)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   185
        return os.path.join(self.workdir,workname)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   186
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   187
    def quote_needed(self,str):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   188
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   189
        Add quotes around str if it has spaces
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   190
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   191
        if str.split(' ',1) > 1:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   192
            return '"%s"' % str
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   193
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   194
            return str
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   195
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   196
    @property
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   197
    def tool(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   198
        return ''
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   199
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   200
    @property
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   201
    def generator(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   202
        return self._generator
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   203
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   204
    @property
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   205
    def workdir(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   206
        return self._workdir
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   207
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   208
    @property
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   209
    def extraparams(self):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   210
        if self._generator.extraparams and self._generator.configuration:
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   211
            dview = self._generator.configuration.get_default_view()
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   212
            return utils.expand_refs_by_default_view(self._generator.extraparams, dview)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   213
        else:
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   214
            return self._generator.extraparams or ''
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   215
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   216
    def _get_filtered_input_files(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   217
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   218
        Get the list of InputFile objects and with ignored
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   219
        (optional empty or invalid files) entries filtered out.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   220
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   221
        Raise InvalidInputFileException if the input file list is invalid.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   222
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   223
        # Get all input files
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   224
        input_files = []
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   225
        for input in self.generator.inputs:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   226
            input_files.extend(input.files)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   227
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   228
        # Check if all are empty
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   229
        all_empty = True
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   230
        for file in input_files:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   231
            if not file.is_empty():
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   232
                all_empty = False
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   233
                break
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   234
        if all_empty:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   235
            return []
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   236
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   237
        # Create the filtered list
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   238
        result = []
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   239
        for file in input_files:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   240
            if file.is_empty():
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   241
                if file.is_optional():
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   242
                    # Optional file is empty: no error
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   243
                    pass
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   244
                else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   245
                    raise InvalidInputFileException("Input file empty but not optional")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   246
            else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   247
                if not file.is_valid():
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   248
                    raise InvalidInputFileException("Invalid input file: '%s'" % file.path)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   249
                else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   250
                    result.append(file)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   251
        return result 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   252
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   253
class BmconvCommand(Command):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   254
    def __init__(self,generator):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   255
        super(BmconvCommand, self).__init__(generator)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   256
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   257
    def execute(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   258
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   259
        Execute the command in the current working directory
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   260
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   261
        input_files = self._get_filtered_input_files()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   262
        if len(input_files) == 0: return 0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   263
        self.create_workdir(input_files)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   264
        
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   265
        opath = self.generator.path
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   266
        odir = os.path.dirname(opath)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   267
        if odir and not os.path.exists(odir):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   268
            os.makedirs(odir)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   269
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   270
        command = self.get_command(input_files)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   271
        p = subprocess.Popen(command,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   272
                             stdout=subprocess.PIPE,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   273
                             stderr=subprocess.PIPE)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   274
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   275
        # Wait for the process to return
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   276
        out, err = [ e.splitlines() for e in p.communicate() ]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   277
        for outl in out:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   278
            if outl not in err:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   279
                logging.getLogger('cone.bmconv').info(outl)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   280
        for outl in err:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   281
            logging.getLogger('cone.bmconv').error(outl)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   282
        if p.returncode != 0:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   283
            logging.getLogger('cone.bmconv').error("Command returned with returncode %s: %s" % (p.returncode, ' '.join(command)))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   284
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   285
            logging.getLogger('cone.bmconv').info("Command returned with returncode %s: %s" % (p.returncode, ' '.join(command)))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   286
        if p.returncode == 0:
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   287
            self.clean_workdir()
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   288
        return p.returncode 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   289
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   290
    def get_command(self, input_files):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   291
        command = [self.tool]
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   292
        
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   293
        """ Add extraparams """
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   294
        if hasattr(self._generator,'extraparams'):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   295
            command.append(self.extraparams)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   296
        
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   297
        """ Add palette file """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   298
        if hasattr(self._generator,'palette'):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   299
            command.append('/p%s' % os.path.abspath(self.generator.palette))
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   300
        
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   301
        """ Add output file """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   302
        """ Add output file as compressed if needed """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   303
        if self.rom:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   304
            if self.compress:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   305
                command.append('/s')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   306
            else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   307
                command.append('/r')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   308
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   309
            pass
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   310
        command.append(os.path.normpath(self.generator.path))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   311
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   312
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   313
        for inputfile in input_files:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   314
            depth = ''
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   315
            if inputfile.depth:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   316
                depth = '/%s' % inputfile.depth
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   317
            command.append('%s%s' % (depth,self.workfilename(inputfile.filename)))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   318
        return command
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   319
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   320
    @property
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   321
    def tool(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   322
        if hasattr(self._generator,'tool'):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   323
            return os.path.abspath(self._generator.tool)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   324
        elif hasattr(self._generator, 'tooldir'):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   325
            return os.path.abspath(os.path.join(self._generator.tooldir, 'bmconv'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   326
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   327
            return 'bmconv'
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   328
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   329
    @property
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   330
    def rom(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   331
        if hasattr(self._generator,'rom') and self._generator.rom.lower() == 'true':
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   332
            return True
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   333
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   334
            return False
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   335
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   336
    @property
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   337
    def compress(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   338
        if hasattr(self._generator,'compress') and self._generator.compress.lower() == 'true':
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   339
            return True
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   340
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   341
            return False
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   342
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   343
class MifconvCommand(Command):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   344
    def __init__(self,generator):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   345
        super(MifconvCommand, self).__init__(generator)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   346
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   347
    def execute(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   348
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   349
        Execute the command in the current working directory
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   350
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   351
        input_files = self._get_filtered_input_files()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   352
        if len(input_files) == 0: return 0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   353
        self.create_workdir(input_files)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   354
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   355
        runenv = None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   356
        runshell = True
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   357
        if os.path.dirname(self.tool):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   358
            runenv = {}
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   359
            runenv['path'] = os.path.dirname(self.tool)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   360
            runshell = True
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   361
        if not os.path.exists(os.path.dirname(self.generator.path)):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   362
            os.makedirs(os.path.dirname(self.generator.path))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   363
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   364
        command = self.get_command(input_files)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   365
        p = subprocess.Popen(command,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   366
                             stdout=subprocess.PIPE,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   367
                             stderr=subprocess.PIPE,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   368
                             env=runenv,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   369
                             shell=runshell)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   370
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   371
        # Wait for the process to return
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   372
        out, err = [ e.splitlines() for e in p.communicate() ]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   373
        for outl in out:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   374
            if outl not in err:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   375
                logging.getLogger('cone.mifconv').info(outl)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   376
        for outl in err:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   377
            logging.getLogger('cone.mifconv').error(outl)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   378
        if p.returncode != 0:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   379
            logging.getLogger('cone.mifconv').error("Command returned with returncode %s: %s" % (p.returncode, ' '.join(command)))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   380
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   381
            logging.getLogger('cone.mifconv').info("Command returned with returncode %s: %s" % (p.returncode, ' '.join(command)))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   382
        if p.returncode == 0:
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   383
            self.clean_workdir()
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   384
        return p.returncode 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   385
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   386
    def get_command(self, input_files):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   387
        command = [self.tool]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   388
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   389
        """ Add output file """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   390
        command.append(os.path.normpath(self.generator.path))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   391
        
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   392
        """ Add extraparams """
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   393
        if hasattr(self._generator,'extraparams'):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   394
            command.append(self.extraparams)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   395
        
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   396
        """ Add temp_path """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   397
        command.append("/t%s" % self.temppath)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   398
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   399
        # Add tool directory if given
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   400
        if hasattr(self._generator,'tooldir'):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   401
            command.append('/S%s' % os.path.abspath(self.generator.tooldir))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   402
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   403
        """ Get input files """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   404
        for inputfile in input_files:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   405
            depth = 'c8'
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   406
            if inputfile.depth:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   407
                depth = inputfile.depth
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   408
            command.append('/%s' % depth)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   409
            command.append( '%s' % self.workfilename(inputfile.filename))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   410
        return command
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   411
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   412
    @property
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   413
    def tool(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   414
        if hasattr(self._generator,'tool'):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   415
            return os.path.abspath(self._generator.tool)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   416
        elif hasattr(self._generator, 'tooldir'):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   417
            return os.path.abspath(os.path.join(self._generator.tooldir, 'mifconv'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   418
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   419
            return 'mifconv'
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   420
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   421
    @property
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   422
    def temppath(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   423
        if hasattr(self._generator,'temp'):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   424
            return os.path.abspath(self._generator.temp)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   425
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   426
            return self.workdir
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   427
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   428
class CopyCommand(object):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   429
    def __init__(self,generator):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   430
        self._generator = generator
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   431
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   432
    def execute(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   433
        pass
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   434
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   435
    @property
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   436
    def tool(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   437
        return 'copy'
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   438
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   439
class InputFile(object):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   440
    def __init__(self,path,**kwargs):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   441
        self.configuration = None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   442
        self._depth = None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   443
        for arg in kwargs.keys():
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   444
            if arg == 'depth':
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   445
                # Special handling for depth ('depth' is a property that
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   446
                # expands refs using '_depth' as the base)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   447
                self._depth = kwargs[arg]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   448
            else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   449
                setattr(self, arg, kwargs[arg])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   450
        self._path= path
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   451
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   452
    def get_input(self): 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   453
        """ 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   454
        Get the confml ref value from configuration if the outputpath is actually a ref 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   455
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   456
        if self._path and self.configuration is not None:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   457
            dview = self.configuration.get_default_view()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   458
            def expand(ref, index):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   459
                value = dview.get_feature(ref).get_original_value()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   460
                if value is None:   return ''
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   461
                else:               return value
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   462
            return utils.expand_delimited_tokens(self._path, expand)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   463
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   464
            return self._path
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   465
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   466
    def set_input(self, value): self._path = value
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   467
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   468
    def del_input(self): self._path = None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   469
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   470
    @property 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   471
    def type(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   472
        return 'file'
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   473
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   474
    @property
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   475
    def depth(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   476
        if self._depth and self.configuration:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   477
            dview = self.configuration.get_default_view()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   478
            return utils.expand_refs_by_default_view(self._depth, dview)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   479
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   480
            return self._depth or ''
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   481
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   482
    @property 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   483
    def files(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   484
        """ 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   485
        Return a list of file names 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   486
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   487
        return [self]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   488
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   489
    @property 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   490
    def filename(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   491
        """ 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   492
        Return a the path to the layer specific filename
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   493
        """ 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   494
        if self.configuration and self.path:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   495
            content = self.configuration.layered_content().flatten()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   496
            inputpath = self.path
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   497
            return content.get(inputpath)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   498
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   499
            return self.path
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   500
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   501
    path = property(get_input, set_input, del_input, "The input 'path'.")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   502
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   503
    def is_valid(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   504
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   505
        Return whether the input file is valid (not empty
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   506
        and exists in project content).
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   507
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   508
        return not self.is_empty() and self.filename
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   509
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   510
    def is_empty(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   511
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   512
        Return whether the input file is empty.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   513
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   514
        return self.path in ('', None)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   515
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   516
    def is_optional(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   517
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   518
        Return whether the input file is optional.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   519
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   520
        return hasattr(self, 'optional') \
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   521
            and self.optional.lower() in ('1', 't', 'true', 'yes', 'y')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   522
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   523
    def get_refs(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   524
        return utils.extract_delimited_tokens(self._path)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   525
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   526
    def __repr__(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   527
        return "InputFile(path=%r, optional=%r)" % (self._path, self.is_optional())
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   528
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   529
class InputDir(InputFile):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   530
    def __init__(self,path,**kwargs):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   531
        super(InputDir,self).__init__(path,**kwargs)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   532
        self._files = []
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   533
        self._include = None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   534
        self._exclude = None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   535
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   536
    def get_include(self): 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   537
        return self._include.get('pattern',[])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   538
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   539
    def set_include(self, value): 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   540
        self._include = value
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   541
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   542
    def del_include(self): 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   543
        self._include = None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   544
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   545
    def get_exclude(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   546
        return self._exclude.get('pattern',[])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   547
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   548
    def set_exclude(self, value): 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   549
        self._exclude = value
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   550
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   551
    def del_exclude(self): 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   552
        self._exclude = None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   553
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   554
    @property 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   555
    def type(self): 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   556
        return 'dir'
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   557
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   558
    @property 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   559
    def files(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   560
        """ 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   561
        Return a list of file names under this directory definition
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   562
        """ 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   563
        if self.configuration:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   564
            inputlist = []
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   565
            content = self.configuration.layered_content().flatten()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   566
            contentfiles = content.keys()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   567
            
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   568
            folderfiles = utils.resourceref.filter_resources(contentfiles, "^%s" % self.path)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   569
            for inputfilter in self.include:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   570
                folderfiles = utils.resourceref.filter_resources(folderfiles, inputfilter)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   571
            for excludefilter in self.exclude:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   572
                folderfiles = utils.resourceref.neg_filter_resources(folderfiles, excludefilter)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   573
            folderfiles.sort()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   574
            for filename in folderfiles:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   575
                inputlist.append(InputFile(filename, **self.__dict__))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   576
            return inputlist
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   577
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   578
            return []
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   579
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   580
    include = property(get_include, set_include, del_include)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   581
    exclude = property(get_exclude, set_exclude, del_exclude)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   582
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   583
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   584
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   585
class ConfmlRefs(object):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   586
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   587
    ref_pattern = re.compile('^\$\{(.*)\}$')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   588
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   589
    @classmethod
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   590
    def is_confml_ref(cls, variableref):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   591
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   592
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   593
        Returns true if the given variable ref is a confml reference
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   594
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   595
        return cls.ref_pattern.match(variableref) != None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   596
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   597
    @classmethod
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   598
    def get_confml_ref(cls, variableref):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   599
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   600
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   601
        Returns true if the given variable ref is a confml reference
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   602
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   603
        matchref = cls.ref_pattern.match(variableref)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   604
        if matchref:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   605
            return matchref.group(1)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   606
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   607
            return None