configurationengine/source/plugins/example/ConeExamplePlugin/examplemlplugin/exampleml_validators.py
changeset 3 e7e0ae78773e
--- /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]