diff -r 87cfa131b535 -r e7e0ae78773e configurationengine/source/plugins/example/ConeExamplePlugin/examplemlplugin/exampleml_validators.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/configurationengine/source/plugins/example/ConeExamplePlugin/examplemlplugin/exampleml_validators.py Tue Aug 10 14:29:28 2010 +0300 @@ -0,0 +1,69 @@ +# +# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +# All rights reserved. +# This component and the accompanying materials are made available +# under the terms of "Eclipse Public License v1.0" +# which accompanies this distribution, and is available +# at the URL "http://www.eclipse.org/legal/epl-v10.html". +# +# Initial Contributors: +# Nokia Corporation - initial contribution. +# +# Contributors: +# +# Description: +# + + +import codecs + +from cone.public import api, exceptions, utils +from cone.validation.implmlvalidation import ImplValidatorBase +from examplemlplugin import exampleml_impl + +class ExamplemlValidatorBase(ImplValidatorBase): + SUPPORTED_IMPL_CLASSES = exampleml_impl.ExamplemlImpl + +class ExamplemlReferenceValidator(ExamplemlValidatorBase): + PROBLEM_TYPES = ['model.implml.exampleml.invalid_ref'] + + def validate(self): + for output in self.impl.output_objects: + # Collect all refs + refs = set() + for ref in utils.extract_delimited_tokens(output.text): refs.add(ref) + for ref in utils.extract_delimited_tokens(output.encoding): refs.add(ref) + for ref in utils.extract_delimited_tokens(output.file): refs.add(ref) + + for ref in refs: + self.check_feature_reference(ref, output.lineno, self.PROBLEM_TYPES[0]) + +class ExamplemlEncodingValidator(ExamplemlValidatorBase): + PROBLEM_TYPES = ['model.implml.exampleml.invalid_encoding'] + + def validate(self): + for output in self.impl.output_objects: + encoding = None + try: + encoding = utils.expand_refs_by_default_view( + output.encoding, + self.context.configuration.get_default_view(), + catch_not_found=False) + except exceptions.NotFound: + # Ignore invalid setting references, they are validated + # in another validator + continue + + if encoding is not None: + # Check the encoding + try: + codecs.lookup(encoding) + except LookupError: + prob = api.Problem( + msg = u"Invalid encoding '%s'" % encoding, + type = self.PROBLEM_TYPES[0], + line = output.lineno, + file = self.impl.ref) + self.context.problems.append(prob) + +VALIDATOR_CLASSES = [ExamplemlReferenceValidator, ExamplemlEncodingValidator]