<?xml version='1.0' encoding='UTF-8'?>
<!-- Schema file written by PDE -->
<schema targetNamespace="org.eclipse.gmf.runtime.diagram.ui">
<annotation>
      <appInfo>
         <meta.schema plugin="org.eclipse.gmf.runtime.diagram.ui" id="decoratorProviders" name="Presentation Decorator Providers"/>
      </appInfo>
      <documentation>
         This extension point is used to define decorator providers for the decorator service       (&lt;tt&gt;org.eclipse.gmf.runtime.diagram.ui.services.decorator&lt;/tt&gt;).

The Decoration Service gives clients the ability to decorate diagram elements with an image or figure.
&lt;p&gt;
&lt;p&gt;
More specifically, the provider service allows implementors to do the following:
&lt;p&gt;
-A provider of the decoration service will be able to add an adornment to any diagram element.
&lt;p&gt;
   -The decoration is typically an image, but can be any sort of graphics object or figure.  A provider of the decoration service is not restricted to any specific graphic type.
&lt;p&gt;
   -The provider can specify any of the following enumerated locations for a decoration on a shape, label, or list compartment item: center, north, northeast, northwest, south, southeast, southwest, east, west.  For a connector, the percentage of the distance from the source end of the connector is used to provide a location for the decoration.
&lt;p&gt;
   -The decoration can be any size that fits within the shape or connector boundary.
&lt;p&gt;
   -The decoration would be justified accordingly to its position on the shape, i.e. northwest would be left justified with an offset from the top left hand side of the shape and northeast would be right justified with an offset from the top right hand side of the shape.
&lt;p&gt;
   -Each decoration can either be included in the printed output of the diagram or not.
&lt;p&gt;
   -If more than one provider adds a decoration to the same location, the decoration from the highest priority provider will appear on top of the other decoration(s).
      </documentation>
   </annotation>

   <element name="extension">
      <annotation>
         <documentation>
            Describes the extension point.
         </documentation>
      </annotation>
      <complexType>
         <sequence>
            <element ref="decoratorProvider"/>
         </sequence>
         <attribute name="point" type="string" use="required">
            <annotation>
               <documentation>
                  The identifier of the extension point, i.e. &lt;tt&gt;org.eclipse.gmf.runtime.diagram.ui.decoratorProviders&lt;/tt&gt;
               </documentation>
            </annotation>
         </attribute>
         <attribute name="id" type="string">
            <annotation>
               <documentation>
                  The identifier of the extension, e.g. myDecoratorProvider.
               </documentation>
            </annotation>
         </attribute>
         <attribute name="name" type="string">
            <annotation>
               <documentation>
                  The name of the extension, e.g. %ext.myDecoratorProvider.
               </documentation>
            </annotation>
         </attribute>
      </complexType>
   </element>

   <element name="decoratorProvider">
      <annotation>
         <documentation>
            The decorator provider description tag.
         </documentation>
      </annotation>
      <complexType>
         <sequence>
            <element ref="Priority"/>
            <element ref="object" minOccurs="0" maxOccurs="unbounded"/>
            <element ref="context" minOccurs="0" maxOccurs="unbounded"/>
         </sequence>
         <attribute name="class" type="string" use="required">
            <annotation>
               <documentation>
                  The fully qualified name of the decorator provider class, e.g. org.eclipse.gmf.runtime.diagram.ui.providers.MyDecoratorProvider.  

This decoration provider class should implement the org.eclipse.gmf.runtime.diagram.ui.services.decorator.IDecoratorProvider 
interface.
               </documentation>
               <appInfo>
                  <meta.attribute kind="java" basedOn="org.eclipse.gmf.runtime.diagram.ui.services.decorator.IDecoratorProvider"/>
               </appInfo>
            </annotation>
         </attribute>
      </complexType>
   </element>

   <element name="Priority">
      <annotation>
         <documentation>
            The description for the priority of the decorator provider
         </documentation>
      </annotation>
      <complexType>
         <attribute name="name" use="required">
            <annotation>
               <documentation>
                  The priority of the provider. It can be one of the following values:
Lowest, Low, Medium, High, Highest. Consideration of dependencies has to be done when choosing the priority. A provider at a higher priority will take a chance first at deciding provision.

&lt;p&gt;
If more than one provider adds a decoration to the same location, the decoration(s) from the highest priority provider will appear on top of decoration(s) supplied by lower priority provider(s).
&lt;/p&gt;
               </documentation>
            </annotation>
            <simpleType>
               <restriction base="string">
                  <enumeration value="Lowest">
                  </enumeration>
                  <enumeration value="Low">
                  </enumeration>
                  <enumeration value="Medium">
                  </enumeration>
                  <enumeration value="High">
                  </enumeration>
                  <enumeration value="Highest">
                  </enumeration>
               </restriction>
            </simpleType>
         </attribute>
      </complexType>
   </element>

   <element name="object">
      <annotation>
         <documentation>
            A descriptor of an object that is examined by this provider. The object can have an optional set of methods to call upon.
         </documentation>
      </annotation>
      <complexType>
         <sequence>
            <element ref="method" minOccurs="0" maxOccurs="unbounded"/>
            <element ref="staticMethod" minOccurs="0" maxOccurs="unbounded"/>
         </sequence>
         <attribute name="id" type="string" use="required">
            <annotation>
               <documentation>
                  A unique (within the context of this provider XML definition) identifier for the object
               </documentation>
            </annotation>
         </attribute>
         <attribute name="class" type="string">
            <annotation>
               <documentation>
                  The fully qualified name of a class/interface who is assignable from or adaptable to the object. The name could be followed (between parenthesis &quot;()&quot;) by the id of a plugin whose classloader is able to load that class. The finaly syntax is:
className&lt;(plugin id)&gt;?
               </documentation>
               <appInfo>
                  <meta.attribute kind="java"/>
               </appInfo>
            </annotation>
         </attribute>
      </complexType>
   </element>

   <element name="method">
      <annotation>
         <documentation>
            A method to call by reflection on the object. The method has a name and a value. The value could be described by its string representation (value &amp; notValue), or as an object &quot;value&quot; or &quot;notValue&quot;. 

The rules of evaluation are as follows:

1- The return value string has to be in the &quot;value&quot; string set.
2- The return value string has to be not in the &quot;notValue&quot; string set.
3- The return value object has to be in the &quot;value&quot; object set.
4- The return value object has to be not in the &quot;notValue&quot; object set.
         </documentation>
      </annotation>
      <complexType>
         <sequence>
            <element ref="value" minOccurs="0" maxOccurs="unbounded"/>
            <element ref="notValue" minOccurs="0" maxOccurs="unbounded"/>
         </sequence>
         <attribute name="name" type="string" use="required">
            <annotation>
               <documentation>
                  The name of the method followed by an optional paramter set between paranthesis &quot;()&quot;. The parameter set can contain any number of string parameters (literals). other param types are not supported. The method name could contain nested calling separated by &quot;.&quot; The general format for this method name is : 
&lt;pre&gt;&lt;func(&lt;param&lt;,param&gt;*&gt;?)&lt;.func(&lt;param&lt;,param&gt;*&gt;?)&gt;* &gt;?&lt;/pre&gt;
               </documentation>
            </annotation>
         </attribute>
         <attribute name="value" type="string">
            <annotation>
               <documentation>
                  A comma-separated (&quot;,&quot;) list of string representations of the method return value. The string representation of the value is expected to be &quot;one&quot; of those in the list. The syntax to use is the following: &lt;string&gt;&lt;,&lt;string&gt;&gt;*
If (&quot;,&quot;) is expected to be in one of the strings, it has to be escaped by a forward slash (&quot;\&quot;). &quot;null&quot; is accepted as a string and it means (a null object).
               </documentation>
            </annotation>
         </attribute>
         <attribute name="notValue" type="string">
            <annotation>
               <documentation>
                  A comma-separated (&quot;,&quot;) list of string representations of the method return value that is not expected (the execulsion set). The string representation of the value is expected &quot;not&quot; to be &quot;one&quot; of those in the list. The syntax to use is the following: &lt;string&gt;&lt;,&lt;string&gt;&gt;*
If (&quot;,&quot;) is expected to be in one of the strings, it has to be escaped by a forward slash (&quot;\&quot;). &quot;null&quot; is accepted as a string and it means (a null object).
               </documentation>
            </annotation>
         </attribute>
      </complexType>
   </element>

   <element name="value">
      <annotation>
         <documentation>
            A descriptor of an object that represents a method&apos;s returned value. The descriptor can include an optional set of methods to call on the &quot;value&quot; object.
         </documentation>
      </annotation>
      <complexType>
         <sequence>
            <element ref="method" minOccurs="0" maxOccurs="unbounded"/>
         </sequence>
         <attribute name="class" type="string">
            <annotation>
               <documentation>
                  The fully qualified name of a class/interface that is assignable from or adaptable to the &quot;value&quot; object. The name could be followed (between paranthesis &quot;()&quot;) by the id of a plugin whose classloader is able to load that class. The finaly syntax is:
className&lt;(plugin id)&gt;?
               </documentation>
            </annotation>
         </attribute>
      </complexType>
   </element>

   <element name="notValue">
      <annotation>
         <documentation>
            A descriptor of an object that represents a method&apos;s returned value that is not required. The descriptor can include an optional set of methods to call on the &quot;notValue&quot; object.
         </documentation>
      </annotation>
      <complexType>
         <sequence>
            <element ref="method" minOccurs="0" maxOccurs="unbounded"/>
         </sequence>
         <attribute name="class" type="string">
            <annotation>
               <documentation>
                  The fully qualified name of a class/interface that is assignable from or adaptable to the &quot;value&quot; object. The name could be followed (between paranthesis &quot;()&quot;) by the id of a plugin whose classloader is able to load that class. The finaly syntax is:
className&lt;(plugin id)&gt;?
               </documentation>
            </annotation>
         </attribute>
      </complexType>
   </element>

   <element name="context">
      <annotation>
         <documentation>
            The context contains a list of objects to be decorated using this provider.  

The list defined in decoratorTargets is comprised of items previously defined in the XML using the object element.
         </documentation>
      </annotation>
      <complexType>
         <sequence>
         </sequence>
         <attribute name="decoratorTargets" type="string">
            <annotation>
               <documentation>
                  The decoratorTargets is a comma-separated list of objects that are supported by this provider.

The xml defined object is specified using its id.
               </documentation>
            </annotation>
         </attribute>
      </complexType>
   </element>

   <element name="staticMethod">
      <annotation>
         <documentation>
            A static method to call by reflection on the class.
The static method has a name and a value. The value could be described by its string representation (value &amp; notValue), or as an object &quot;value&quot; or &quot;notValue&quot;. 

The rules of evaluation are as follows:
1- The return value string has to be in the &quot;value&quot; string set.
2- The return value string has to be not in the &quot;notValue&quot; string set.
3- The return value object has to be in the &quot;value&quot; object set.
4- The return value object has to be not in the &quot;notValue&quot; object set.
         </documentation>
      </annotation>
      <complexType>
         <sequence>
            <element ref="value" minOccurs="0" maxOccurs="unbounded"/>
            <element ref="notValue" minOccurs="0" maxOccurs="unbounded"/>
         </sequence>
         <attribute name="name" type="string" use="required">
            <annotation>
               <documentation>
                  The name of the Static Method, the format should be PluginID\ClassName.method followed by an optional paramter set between paranthesis &quot;()&quot;. The parameter set can contain any number of primitive parameters or %Context(pluginID/className) to use the context object as a parameter . other param types are not supported. The method name could contain nested calling separated by &quot;.&quot; The general format for this method name is : &lt;pluginID/ClassName.func(&lt;param&lt;,param&gt;*&gt;?).&lt;&lt;func(&lt;param&lt;,param&gt;*&gt;?)&gt;*
               </documentation>
            </annotation>
         </attribute>
         <attribute name="value" type="string">
            <annotation>
               <documentation>
                  A comma-separated (&quot;,&quot;) list of string representations of the method return value. The string representation of the value is expected to be &quot;one&quot; of those in the list. The syntax to use is the following: &lt;string&gt;&lt;,&lt;string&gt;&gt;*
If (&quot;,&quot;) is expected to be in one of the strings, it has to be escaped by a forward slash (&quot;\&quot;). &quot;null&quot; is accepted as a string and it means (a null object).
               </documentation>
            </annotation>
         </attribute>
         <attribute name="notValue" type="string">
            <annotation>
               <documentation>
                  A comma-separated (&quot;,&quot;) list of string representations of the method return value that is not expected (the execulsion set). The string representation of the value is expected &quot;not&quot; to be &quot;one&quot; of those in the list. The syntax to use is the following: &lt;string&gt;&lt;,&lt;string&gt;&gt;*
If (&quot;,&quot;) is expected to be in one of the strings, it has to be escaped by a forward slash (&quot;\&quot;). &quot;null&quot; is accepted as a string and it means (a null object).
               </documentation>
            </annotation>
         </attribute>
      </complexType>
   </element>

   <annotation>
      <appInfo>
         <meta.section type="examples"/>
      </appInfo>
      <documentation>
         An extension to the decorator service would require the implementation of the IDecorator and IDecoratorProvider interfaces.    

The following is an example plugin.xml entry for a decorator service provider extension:

&lt;pre&gt;
   &lt;extension
         id=&quot;myDecoratorProvider&quot;
         name=&quot;%ext.myDecoratorProvider&quot;
         point=&quot;org.eclipse.gmf.runtime.diagram.ui.decoratorProviders&quot;&gt;
      &lt;decoratorProvider              class=&quot;org.eclipse.gmf.runtime.diagram.ui.providers.MyDecoratorProvider&quot;&gt;
         &lt;Priority
               name=&quot;Lowest&quot;&gt;
         &lt;/Priority&gt;
         &lt;object class=&quot;org.eclipse.gmf.runtime.notation.Node(org.eclipse.gmf.runtime.notation)&quot; 
              id=&quot;NODE&quot;&gt;
              &lt;method
                  name=&quot;getType()&quot;
                  value=&quot;MyNodeType&quot;&gt;
              &lt;/method&gt;
         &lt;/object&gt;
         &lt;context
               decoratorTargets=&quot;NODE&quot;&gt;
         &lt;/context&gt;
      &lt;/decoratorProvider&gt;
   &lt;/extension&gt;
&lt;/pre&gt;
      </documentation>
   </annotation>

   <annotation>
      <appInfo>
         <meta.section type="apiInfo"/>
      </appInfo>
      <documentation>
         For API information, see the classes and interfaces defined in the &lt;tt&gt;org.eclipse.gmf.runtime.diagram.ui.services.decorator&lt;/tt&gt; package.

&lt;p&gt;
Clients providing an extension to the decorator service need to create classes 
that implement the following interfaces:
&lt;/p&gt;
&lt;p&gt;
&lt;tt&gt;org.eclipse.gmf.runtime.diagram.ui.services.decorator.IDecorator&lt;/tt&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;tt&gt;org.eclipse.gmf.runtime.diagram.ui.services.decorator.IDecoratorProvider&lt;/tt&gt;
&lt;/p&gt;
      </documentation>
   </annotation>

   <annotation>
      <appInfo>
         <meta.section type="implementation"/>
      </appInfo>
      <documentation>
         
      </documentation>
   </annotation>

   <annotation>
      <appInfo>
         <meta.section type="copyright"/>
      </appInfo>
      <documentation>
         Copyright (c) 2003, 2004  IBM Corporation and others.&lt;br&gt;
 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 
 &lt;a href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;
      </documentation>
   </annotation>

</schema>
