<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>

<!--
<copyright>

Copyright (c) 2012 itemis and others.
All rights reserved. This program and the accompanying materials
are made available under the terms of the Eclipse Public License v1.0
which accompanies this distribution, and is available at
http://www.eclipse.org/legal/epl-v10.html

Contributors:
    itemis - Initial API and implementation

</copyright>
-->

<plugin>

   <!-- Constraint category definition -->

   <extension point="org.eclipse.emf.validation.constraintProviders">
      <category
            name="Hummingbird 2.0 Constraints"
            id="org.eclipse.sphinx.examples.hummingbird20.validation.constraints.category">
         Constraints for Hummingbird 2.0 metamodel
      </category>
   </extension>

   <!-- The constraints themselves -->

   <extension point="org.eclipse.emf.validation.constraintProviders">
      <constraintProvider cache="true">

       <package namespaceUri="http://www.eclipse.org/sphinx/examples/hummingbird/2.0.1/common"/>
       <package namespaceUri="http://www.eclipse.org/sphinx/examples/hummingbird/2.0.1/typemodel"/>
       <package namespaceUri="http://www.eclipse.org/sphinx/examples/hummingbird/2.0.1/instancemodel"/>

        <constraints categories="org.eclipse.sphinx.examples.hummingbird20.validation.constraints.category">
            <constraint
                  id="org.eclipse.sphinx.examples.hummingbird20.validation.constraints.identifiableNamesMustNotContainIllegalCharactersConstraint"
                  name="Identifiable names must not contain illegal characters"
                  lang="Java"
                  class="org.eclipse.sphinx.examples.hummingbird20.validation.constraints.IdentifiableNamesMustNotContainIllegalCharactersConstraint"
                  severity="WARNING"
                  mode="Live"
                  statusCode="101">
               <description>Checks if the name of identifiable elements does not contain any illegal character.</description>
               <message>The name of identifiable "{0}" must only contain alphanumeric characters.</message>
               <target class="Identifiable">
                  <event name="Set">
                     <feature name="name" />
                  </event>
                  <event name="Unset">
                    <feature name="name" />
                  </event>
               </target>
            </constraint>

            <constraint
                  id="org.eclipse.sphinx.examples.hummingbird20.validation.constraints.identifiableNamesMustNotBeBlank"
                  name="Identifiable names must not be blank"
                  lang="OCL"
                  severity="ERROR"
                  mode="Live"
                  statusCode="102">
               <description>Checks if the name of identifiable elements is not blank.</description>
               <message>The identifiable "{0}" has no name or a name that is empty.</message>
               <target class="Identifiable">
                  <event name="Set">
                     <feature name="name"/>
                  </event>
                  <event name="Unset">
                    <feature name="name" />
                  </event>
               </target>

               <![CDATA[
                  not name.oclIsUndefined() and name.size() > 0
               ]]>

            </constraint>

            <!-- TODO Switch back to OCL implementation when OCL supports oclContainer() operation or EMF Validation supports one of the below
                 mentioned workarounds to be implemented:
                 http://wiki.eclipse.org/MDT/OCL/FAQ#How_do_I_invoke_methods_such_as_eContainer.28.29.2C_eContents.28.29.2C_eGet.28.29.3F -->
            <!--constraint
                  id="org.eclipse.sphinx.examples.hummingbird20.validation.constraints.interfaceNamesMustBeUnique"
                  name="Interface names must be unique"
                  lang="OCL"
                  severity="ERROR"
                  mode="Live"
                  statusCode="103">
               <description>Checks if the names of all interfaces within the same platform are unique.</description>
               <message>The interface "{0}" has the same name as another interface within same platform.</message>
               <target class="Interface">
                  <event name="Set">
                     <feature name="name"/>
                  </event>
                  <event name="Unset">
                    <feature name="name" />
                  </event>
               </target>

               <![CDATA[
                  self.oclContainer().oclAsType(Platform).interfaces->select(i | i <> self and i.name = self.name)->isEmpty()
               ]]>

            </constraint-->
            <constraint
                  id="org.eclipse.sphinx.examples.hummingbird20.validation.constraints.interfaceNamesMustBeUnique"
                  name="Interface names must be unique"
                  lang="Java"
                  class="org.eclipse.sphinx.examples.hummingbird20.validation.constraints.InterfaceNamesMustBeUniqueConstraint"
                  severity="ERROR"
                  mode="Live"
                  statusCode="103">
               <description>Checks if the names of all interfaces within the same platform are unique.</description>
               <message>The interface "{0}" has the same name as another interface within same platform.</message>
               <target class="Interface">
                  <event name="Set">
                     <feature name="name"/>
                  </event>
                  <event name="Unset">
                    <feature name="name" />
                  </event>
               </target>
            </constraint>

            <constraint
                  id="org.eclipse.sphinx.examples.hummingbird20.validation.constraints.targetComponentOfConnectionsMustProvideInterfaceRequiredByTheirSourcePort"
                  name="Target component of connections must provide interface required by their source port"
                  lang="OCL"
                  severity="ERROR"
                  mode="Live"
                  statusCode="104">
               <description>Checks if the target component of connections provides the interface that is required by their source port.</description>
               <message>The target component of connection "{0}" does not provide the interface that is required by its source port.</message>
               <target class="Connection">
                  <event name="Set">
                     <feature name="targetComponent"/>
                  </event>
                  <event name="Unset">
                    <feature name="targetComponent" />
                  </event>
               </target>

               <![CDATA[
                  targetComponent.type.providedInterfaces->includes(sourcePort.requiredInterface)
               ]]>

            </constraint>
         </constraints>
      </constraintProvider>
    </extension>

   <!-- Client context definition -->

   <extension point="org.eclipse.emf.validation.constraintBindings">
      <clientContext id="hummingbird20.identifiable.context">
         <enablement>
            <instanceof value="org.eclipse.sphinx.examples.hummingbird20.common.Identifiable"/>
         </enablement>
      </clientContext>
   </extension>

   <!-- Binding of constraint category to client context -->

   <extension point="org.eclipse.emf.validation.constraintBindings">
      <binding
            context="hummingbird20.identifiable.context"
            category="org.eclipse.sphinx.examples.hummingbird20.validation.constraints.category"/>
   </extension>

</plugin>
