<?xml version="1.0" encoding="UTF-8"?>
<gmfgen:GenEditorGenerator
    xmi:version="2.0"
    xmlns:xmi="http://www.omg.org/XMI"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:gmfgen="http://www.eclipse.org/gmf/2009/GenModel"
    copyrightText="">
  <diagram
      visualID="1000"
      editPartClassName="MachineEditPart"
      itemSemanticEditPolicyClassName="MachineItemSemanticEditPolicy"
      canonicalEditPolicyClassName="MachineCanonicalEditPolicy"
      iconProviderPriority="Low"
      validationProviderPriority="Low"
      validationEnabled="true"
      validationDecorators="true"
      liveValidationUIFeedback="true">
    <diagramRunTimeClass
        href="platform:/plugin/org.eclipse.gmf.runtime.notation/model/notation.genmodel#//notation/Diagram"/>
    <elementType
        xsi:type="gmfgen:MetamodelType"
        editHelperClassName="MachineEditHelper"/>
    <viewmap
        xsi:type="gmfgen:FigureViewmap"
        figureQualifiedClassName="org.eclipse.draw2d.FreeformLayer"/>
    <containsShortcutsTo>esm</containsShortcutsTo>
    <shortcutsProvidedFor>esm</shortcutsProvidedFor>
    <domainDiagramElement
        href="esm.genmodel#//esm/Machine"/>
    <topLevelNodes
        visualID="2002"
        editPartClassName="EndStateEditPart"
        itemSemanticEditPolicyClassName="EndStateItemSemanticEditPolicy"
        canonicalEditPolicyClassName="EndStateCanonicalEditPolicy"
        graphicalNodeEditPolicyClassName="EndStateGraphicalNodeEditPolicy"
        createCommandClassName="EndStateCreateCommand">
      <diagramRunTimeClass
          href="platform:/plugin/org.eclipse.gmf.runtime.notation/model/notation.genmodel#//notation/Node"/>
      <elementType
          xsi:type="gmfgen:MetamodelType"
          editHelperClassName="EndStateEditHelper"/>
      <viewmap
          xsi:type="gmfgen:InnerClassViewmap"
          className="EndStateFigure"
          classBody="&#xA;/**&#xA; * @generated&#xA; */&#xA;public class EndStateFigure extends org.eclipse.draw2d.Ellipse {&#xA;&#xA;&#xA;&#xA;&#xA;&#x9;/**&#xA;&#x9; * @generated&#xA;&#x9; */&#xA;&#x9;public EndStateFigure() {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;this.setBackgroundColor(THIS_BACK&#xA;);&#xA;this.setPreferredSize(new org.eclipse.draw2d.geometry.Dimension(getMapMode().DPtoLP(15)&#xA;, getMapMode().DPtoLP(15)&#xA;));&#xA;this.setBorder(new org.eclipse.draw2d.MarginBorder(getMapMode().DPtoLP(5)&#xA;, getMapMode().DPtoLP(5)&#xA;, getMapMode().DPtoLP(5)&#xA;, getMapMode().DPtoLP(5)&#xA;));&#xA;&#x9;}&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;}&#xA;&#xA;/**&#xA; * @generated&#xA; */&#xA;static final org.eclipse.swt.graphics.Color THIS_BACK = new org.eclipse.swt.graphics.Color(null, 0, 0, 0);&#xA;&#xA;">
        <attributes
            xsi:type="gmfgen:StyleAttributes"
            fixedBackground="true"/>
        <attributes
            xsi:type="gmfgen:DefaultSizeAttributes"
            width="15"
            height="15"/>
      </viewmap>
      <modelFacet>
        <metaClass
            href="esm.genmodel#//esm/EndState"/>
        <containmentMetaFeature
            href="esm.genmodel#//esm/Machine/states"/>
        <childMetaFeature
            href="esm.genmodel#//esm/Machine/states"/>
      </modelFacet>
      <labels
          xsi:type="gmfgen:GenExternalNodeLabel"
          visualID="5002"
          editPartClassName="EndStateNameEditPart"
          itemSemanticEditPolicyClassName="EndStateNameItemSemanticEditPolicy">
        <diagramRunTimeClass
            href="platform:/plugin/org.eclipse.gmf.runtime.notation/model/notation.genmodel#//notation/Node"/>
        <viewmap
            xsi:type="gmfgen:InnerClassViewmap"
            className="EndStateLabelFigure"
            classBody="&#xA;/**&#xA; * @generated&#xA; */&#xA;public class EndStateLabelFigure extends org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel {&#xA;&#xA;&#xA;&#xA;&#xA;&#x9;/**&#xA;&#x9; * @generated&#xA;&#x9; */&#xA;&#x9;public EndStateLabelFigure() {&#xA;&#x9;&#x9;&#x9;&#x9;this.setText(&quot;EndState&quot;);&#xA;&#x9;}&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;}&#xA;&#xA;"/>
        <modelFacet
            xsi:type="gmfgen:FeatureLabelModelFacet"
            parser="//@labelParsers/@implementations.0">
          <metaFeatures
              href="esm.genmodel#//esm/State/name"/>
        </modelFacet>
      </labels>
    </topLevelNodes>
    <topLevelNodes
        visualID="2001"
        editPartClassName="StateEditPart"
        itemSemanticEditPolicyClassName="StateItemSemanticEditPolicy"
        canonicalEditPolicyClassName="StateCanonicalEditPolicy"
        graphicalNodeEditPolicyClassName="StateGraphicalNodeEditPolicy"
        createCommandClassName="StateCreateCommand">
      <diagramRunTimeClass
          href="platform:/plugin/org.eclipse.gmf.runtime.notation/model/notation.genmodel#//notation/Node"/>
      <elementType
          xsi:type="gmfgen:MetamodelType"
          editHelperClassName="StateEditHelper"/>
      <viewmap
          xsi:type="gmfgen:InnerClassViewmap"
          className="StateFigure"
          classBody="&#xA;/**&#xA; * @generated&#xA; */&#xA;public class StateFigure extends org.eclipse.draw2d.Ellipse {&#xA;&#xA;&#xA;&#xA;&#xA;&#x9;/**&#xA;&#x9; * @generated&#xA;&#x9; */&#xA;&#x9;public StateFigure() {&#xA;&#x9;&#x9;&#x9;&#x9;this.setBorder(new org.eclipse.draw2d.MarginBorder(getMapMode().DPtoLP(5)&#xA;, getMapMode().DPtoLP(5)&#xA;, getMapMode().DPtoLP(5)&#xA;, getMapMode().DPtoLP(5)&#xA;));&#xA;&#x9;}&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;}&#xA;&#xA;"/>
      <modelFacet>
        <metaClass
            href="esm.genmodel#//esm/State"/>
        <containmentMetaFeature
            href="esm.genmodel#//esm/Machine/states"/>
        <childMetaFeature
            href="esm.genmodel#//esm/Machine/states"/>
      </modelFacet>
      <labels
          xsi:type="gmfgen:GenExternalNodeLabel"
          visualID="5001"
          editPartClassName="StateNameEditPart"
          itemSemanticEditPolicyClassName="StateNameItemSemanticEditPolicy">
        <diagramRunTimeClass
            href="platform:/plugin/org.eclipse.gmf.runtime.notation/model/notation.genmodel#//notation/Node"/>
        <viewmap
            xsi:type="gmfgen:InnerClassViewmap"
            className="StateLabelFigure"
            classBody="&#xA;/**&#xA; * @generated&#xA; */&#xA;public class StateLabelFigure extends org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel {&#xA;&#xA;&#xA;&#xA;&#xA;&#x9;/**&#xA;&#x9; * @generated&#xA;&#x9; */&#xA;&#x9;public StateLabelFigure() {&#xA;&#x9;&#x9;&#x9;&#x9;this.setText(&quot;State&quot;);&#xA;&#x9;}&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;}&#xA;&#xA;"/>
        <modelFacet
            xsi:type="gmfgen:FeatureLabelModelFacet"
            parser="//@labelParsers/@implementations.0">
          <metaFeatures
              href="esm.genmodel#//esm/State/name"/>
        </modelFacet>
      </labels>
    </topLevelNodes>
    <links
        visualID="4001"
        editPartClassName="TransitionEditPart"
        itemSemanticEditPolicyClassName="TransitionItemSemanticEditPolicy"
        createCommandClassName="TransitionCreateCommand"
        reorientCommandClassName="TransitionReorientCommand">
      <diagramRunTimeClass
          href="platform:/plugin/org.eclipse.gmf.runtime.notation/model/notation.genmodel#//notation/Edge"/>
      <elementType
          xsi:type="gmfgen:MetamodelType"
          editHelperClassName="TransitionEditHelper"/>
      <viewmap
          xsi:type="gmfgen:InnerClassViewmap"
          className="TransitionFigure"
          classBody="&#xA;/**&#xA; * @generated&#xA; */&#xA;public class TransitionFigure extends org.eclipse.gmf.runtime.draw2d.ui.figures.PolylineConnectionEx {&#xA;&#xA;&#xA;&#xA;&#xA;&#x9;/**&#xA;&#x9; * @generated&#xA;&#x9; */&#xA;&#x9;public TransitionFigure() {&#xA;&#x9;&#x9;&#xA;&#x9;&#x9;setTargetDecoration(createTargetDecoration());&#xA;&#x9;}&#xA;&#xA;&#x9;/**&#xA;&#x9; * @generated&#xA;&#x9; */&#xA;&#x9;private org.eclipse.draw2d.RotatableDecoration createTargetDecoration() {&#xA;&#x9;&#x9;org.eclipse.draw2d.PolylineDecoration df = new org.eclipse.draw2d.PolylineDecoration();&#xA;&#x9;&#x9;return df;&#xA;&#x9;}&#xA;&#xA;&#xA;&#xA;&#xA;}&#xA;&#xA;"/>
      <modelFacet
          xsi:type="gmfgen:TypeLinkModelFacet">
        <metaClass
            href="esm.genmodel#//esm/Transition"/>
        <containmentMetaFeature
            href="esm.genmodel#//esm/Machine/transitions"/>
        <childMetaFeature
            href="esm.genmodel#//esm/Machine/transitions"/>
        <sourceMetaFeature
            href="esm.genmodel#//esm/Transition/source"/>
        <targetMetaFeature
            href="esm.genmodel#//esm/Transition/target"/>
      </modelFacet>
      <labels
          visualID="6001"
          editPartClassName="TransitionActionEditPart"
          itemSemanticEditPolicyClassName="TransitionActionItemSemanticEditPolicy">
        <diagramRunTimeClass
            href="platform:/plugin/org.eclipse.gmf.runtime.notation/model/notation.genmodel#//notation/Node"/>
        <viewmap
            xsi:type="gmfgen:InnerClassViewmap"
            className="TransitionLabelFigure"
            classBody="&#xA;/**&#xA; * @generated&#xA; */&#xA;public class TransitionLabelFigure extends org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel {&#xA;&#xA;&#xA;&#xA;&#xA;&#x9;/**&#xA;&#x9; * @generated&#xA;&#x9; */&#xA;&#x9;public TransitionLabelFigure() {&#xA;&#x9;&#x9;&#x9;&#x9;this.setText(&quot;Transition&quot;);&#xA;&#x9;}&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;}&#xA;&#xA;">
          <attributes
              xsi:type="gmfgen:LabelOffsetAttributes"
              y="40"/>
        </viewmap>
        <modelFacet
            xsi:type="gmfgen:FeatureLabelModelFacet"
            parser="//@labelParsers/@implementations.1">
          <metaFeatures
              href="esm.genmodel#//esm/Transition/action"/>
        </modelFacet>
      </labels>
    </links>
    <palette>
      <groups
          title="Objects"
          collapse="true">
        <entries
            xsi:type="gmfgen:ToolEntry"
            title="EndState"
            description="Create new EndState"
            genNodes="//@diagram/@topLevelNodes.0"/>
        <entries
            xsi:type="gmfgen:ToolEntry"
            title="State"
            description="Create new State"
            genNodes="//@diagram/@topLevelNodes.1"/>
      </groups>
      <groups
          title="Connections"
          collapse="true">
        <entries
            xsi:type="gmfgen:ToolEntry"
            title="Transition"
            description="Create new Transition"
            genLinks="//@diagram/@links.0"/>
      </groups>
    </palette>
    <preferencePages
        xsi:type="gmfgen:GenStandardPreferencePage"
        iD="org.eclipse.epsilon.eugenia.examples.executablestatemachine.graphical.diagram.general"
        name="Esm Diagram">
      <children
          xsi:type="gmfgen:GenStandardPreferencePage"
          iD="org.eclipse.epsilon.eugenia.examples.executablestatemachine.graphical.diagram.appearance"
          name="Appearance"
          kind="Appearance"/>
      <children
          xsi:type="gmfgen:GenStandardPreferencePage"
          iD="org.eclipse.epsilon.eugenia.examples.executablestatemachine.graphical.diagram.connections"
          name="Connections"
          kind="Connections"/>
      <children
          xsi:type="gmfgen:GenStandardPreferencePage"
          iD="org.eclipse.epsilon.eugenia.examples.executablestatemachine.graphical.diagram.printing"
          name="Printing"
          kind="Printing"/>
      <children
          xsi:type="gmfgen:GenStandardPreferencePage"
          iD="org.eclipse.epsilon.eugenia.examples.executablestatemachine.graphical.diagram.rulersAndGrid"
          name="Rulers And Grid"
          kind="RulersAndGrid"/>
    </preferencePages>
  </diagram>
  <plugin
      printingEnabled="true">
    <requiredPlugins>org.eclipse.gmf.tooling.runtime</requiredPlugins>
    <requiredPlugins>org.eclipse.draw2d</requiredPlugins>
    <requiredPlugins>org.eclipse.gmf.runtime.draw2d.ui</requiredPlugins>
    <requiredPlugins>org.eclipse.epsilon.eugenia.examples.executablestatemachine.glue</requiredPlugins>
  </plugin>
  <editor/>
  <navigator>
    <childReferences
        child="//@diagram"/>
    <childReferences
        parent="//@diagram"
        child="//@diagram/@topLevelNodes.0"/>
    <childReferences
        parent="//@diagram"
        child="//@diagram/@topLevelNodes.1"/>
    <childReferences
        parent="//@diagram"
        child="//@diagram/@links.0"
        groupName="links"
        groupIcon="icons/linksNavigatorGroup.gif"/>
    <childReferences
        parent="//@diagram/@links.0"
        child="//@diagram/@topLevelNodes.0"
        referenceType="out_target"
        groupName="target"
        groupIcon="icons/linkTargetNavigatorGroup.gif"/>
    <childReferences
        parent="//@diagram/@topLevelNodes.0"
        child="//@diagram/@links.0"
        referenceType="in_source"
        groupName="incoming links"
        groupIcon="icons/incomingLinksNavigatorGroup.gif"/>
    <childReferences
        parent="//@diagram/@links.0"
        child="//@diagram/@topLevelNodes.1"
        referenceType="out_target"
        groupName="target"
        groupIcon="icons/linkTargetNavigatorGroup.gif"/>
    <childReferences
        parent="//@diagram/@topLevelNodes.1"
        child="//@diagram/@links.0"
        referenceType="in_source"
        groupName="incoming links"
        groupIcon="icons/incomingLinksNavigatorGroup.gif"/>
    <childReferences
        parent="//@diagram/@links.0"
        child="//@diagram/@topLevelNodes.0"
        referenceType="in_source"
        groupName="source"
        groupIcon="icons/linkSourceNavigatorGroup.gif"/>
    <childReferences
        parent="//@diagram/@topLevelNodes.0"
        child="//@diagram/@links.0"
        referenceType="out_target"
        groupName="outgoing links"
        groupIcon="icons/outgoingLinksNavigatorGroup.gif"/>
    <childReferences
        parent="//@diagram/@links.0"
        child="//@diagram/@topLevelNodes.1"
        referenceType="in_source"
        groupName="source"
        groupIcon="icons/linkSourceNavigatorGroup.gif"/>
    <childReferences
        parent="//@diagram/@topLevelNodes.1"
        child="//@diagram/@links.0"
        referenceType="out_target"
        groupName="outgoing links"
        groupIcon="icons/outgoingLinksNavigatorGroup.gif"/>
  </navigator>
  <diagramUpdater/>
  <propertySheet>
    <tabs
        xsi:type="gmfgen:GenStandardPropertyTab"
        iD="appearance"/>
    <tabs
        xsi:type="gmfgen:GenStandardPropertyTab"
        iD="diagram"/>
    <tabs
        xsi:type="gmfgen:GenCustomPropertyTab"
        iD="domain"
        label="Core">
      <filter
          xsi:type="gmfgen:TypeTabFilter">
        <types>org.eclipse.gmf.runtime.notation.View</types>
        <types>org.eclipse.gef.EditPart</types>
        <generatedTypes>abstractNavigatorItem</generatedTypes>
      </filter>
    </tabs>
  </propertySheet>
  <domainGenModel
      href="esm.genmodel#/"/>
  <labelParsers
      extensibleViaService="true">
    <implementations
        xsi:type="gmfgen:PredefinedParser"
        uses="//@diagram/@topLevelNodes.0/@labels.0/@modelFacet //@diagram/@topLevelNodes.1/@labels.0/@modelFacet"/>
    <implementations
        xsi:type="gmfgen:PredefinedParser"
        uses="//@diagram/@links.0/@labels.0/@modelFacet"
        viewMethod="NATIVE"
        editMethod="NATIVE"
        className="ActionXtext2GmfParser"/>
  </labelParsers>
  <contextMenus
      context="//@diagram">
    <items
        xsi:type="gmfgen:LoadResourceAction"/>
  </contextMenus>
</gmfgen:GenEditorGenerator>
