ipa320$bride
Node container
Collection<RosLinkDescriptor>
Collection<RosLinkDescriptor> getContainedTypeModelFacetLinks_Publisher_4004(Node container)
Node container
Collection<RosLinkDescriptor>
Collection<RosLinkDescriptor> getContainedTypeModelFacetLinks_Publisher_4002(Node container)
ipa320$bride
Node container
Collection<RosLinkDescriptor>
Collection<RosLinkDescriptor> getContainedTypeModelFacetLinks_Subscriber_4002(Node container)
Node container
Collection<RosLinkDescriptor>
Collection<RosLinkDescriptor> getContainedTypeModelFacetLinks_Subscriber_4001(Node container)
ipa320$bride
Topic target,Map<EObject,Collection<EStructuralFeature.Setting>> crossReferences
Collection<RosLinkDescriptor>
Collection<RosLinkDescriptor> getIncomingTypeModelFacetLinks_Publisher_4004(Topic target,Map<EObject,Collection<EStructuralFeature.Setting>> crossReferences)
Topic target,Map<EObject,Collection<EStructuralFeature.Setting>> crossReferences
Collection<RosLinkDescriptor>
Collection<RosLinkDescriptor> getIncomingTypeModelFacetLinks_Publisher_4002(Topic target,Map<EObject,Collection<EStructuralFeature.Setting>> crossReferences)
ipa320$bride
Topic target,Map<EObject,Collection<EStructuralFeature.Setting>> crossReferences
Collection<RosLinkDescriptor>
Collection<RosLinkDescriptor> getIncomingTypeModelFacetLinks_Subscriber_4002(Topic target,Map<EObject,Collection<EStructuralFeature.Setting>> crossReferences)
Topic target,Map<EObject,Collection<EStructuralFeature.Setting>> crossReferences
Collection<RosLinkDescriptor>
Collection<RosLinkDescriptor> getIncomingTypeModelFacetLinks_Subscriber_4001(Topic target,Map<EObject,Collection<EStructuralFeature.Setting>> crossReferences)
ipa320$bride
IParser
IParser getNodeName_5001Parser()
IParser
IParser getNodeName_5002Parser()
ipa320$bride
View view
String
String getNode_2001Text(View view)
View view
String
String getNode_2002Text(View view)
ipa320$bride
IParser
IParser getPublisherName_6004Parser()
IParser
IParser getPublisherName_6002Parser()
ipa320$bride
View view
String
String getPublisher_4004Text(View view)
View view
String
String getPublisher_4002Text(View view)
ipa320$bride
IParser
IParser getSubscriberName_6002Parser()
IParser
IParser getSubscriberName_6001Parser()
ipa320$bride
View view
String
String getSubscriber_4002Text(View view)
View view
String
String getSubscriber_4001Text(View view)
ipa320$bride
if (topicName_5002Parser == null) {
			topicName_5002Parser = parser;
		return topicName_5002Parser;
	private IParser serviceName_5003Parser;
	private IParser getServiceName_5003Parser() {
		if (serviceName_5003Parser == null) {
					.getService_Name()
IParser
IParser getTopicName_5002Parser()
if (topicName_5001Parser == null) {
			topicName_5001Parser = parser;
		return topicName_5001Parser;
	private IParser nodeName_5002Parser;
	private IParser getNodeName_5002Parser() {
		if (nodeName_5002Parser == null) {
					.getNode_Name()
IParser
IParser getTopicName_5001Parser()
ipa320$bride
View view
String
String getTopic_2002Text(View view)
View view
String
String getTopic_2001Text(View view)
ipa320$bride
Node source,Topic target
boolean
boolean canCreatePublisher_4004(Node source,Topic target)
Node source,Topic target
boolean
boolean canCreatePublisher_4002(Node source,Topic target)
ipa320$bride
Node source,Topic target
boolean
boolean canCreateSubscriber_4002(Node source,Topic target)
Node source,Topic target
boolean
boolean canCreateSubscriber_4001(Node source,Topic target)
ipa320$bride
Publisher linkInstance,Node source,Topic target
boolean
boolean canExistPublisher_4004(Publisher linkInstance,Node source,Topic target)
Publisher linkInstance,Node source,Topic target
boolean
boolean canExistPublisher_4002(Publisher linkInstance,Node source,Topic target)
ipa320$bride
Subscriber linkInstance,Node source,Topic target
boolean
boolean canExistSubscriber_4002(Subscriber linkInstance,Node source,Topic target)
Subscriber linkInstance,Node source,Topic target
boolean
boolean canExistSubscriber_4001(Subscriber linkInstance,Node source,Topic target)
ipa320$bride
EObject domainElement,View containerView,int index,boolean persisted,PreferencesHint preferencesHint
Node
Node createNode_2001(EObject domainElement,View containerView,int index,boolean persisted,PreferencesHint preferencesHint)
EObject domainElement,View containerView,int index,boolean persisted,PreferencesHint preferencesHint
Node
Node createNode_2002(EObject domainElement,View containerView,int index,boolean persisted,PreferencesHint preferencesHint)
ipa320$bride
EObject domainElement,View containerView,int index,boolean persisted,PreferencesHint preferencesHint
Edge
Edge createPublisher_4004(EObject domainElement,View containerView,int index,boolean persisted,PreferencesHint preferencesHint)
EObject domainElement,View containerView,int index,boolean persisted,PreferencesHint preferencesHint
Edge
Edge createPublisher_4002(EObject domainElement,View containerView,int index,boolean persisted,PreferencesHint preferencesHint)
ipa320$bride
EObject domainElement,View containerView,int index,boolean persisted,PreferencesHint preferencesHint
Edge
Edge createSubscriber_4002(EObject domainElement,View containerView,int index,boolean persisted,PreferencesHint preferencesHint)
EObject domainElement,View containerView,int index,boolean persisted,PreferencesHint preferencesHint
Edge
Edge createSubscriber_4001(EObject domainElement,View containerView,int index,boolean persisted,PreferencesHint preferencesHint)
ipa320$bride
EObject domainElement,View containerView,int index,boolean persisted,PreferencesHint preferencesHint
Node
Node createTopic_2002(EObject domainElement,View containerView,int index,boolean persisted,PreferencesHint preferencesHint)
EObject domainElement,View containerView,int index,boolean persisted,PreferencesHint preferencesHint
Node
Node createTopic_2001(EObject domainElement,View containerView,int index,boolean persisted,PreferencesHint preferencesHint)
ipa320$bride
View view
List<RosLinkDescriptor>
List<RosLinkDescriptor> getNode_2001ContainedLinks(View view)
View view
List<RosLinkDescriptor>
List<RosLinkDescriptor> getNode_2002ContainedLinks(View view)
ipa320$bride
View view
List<RosLinkDescriptor>
List<RosLinkDescriptor> getNode_2001IncomingLinks(View view)
View view
List<RosLinkDescriptor>
List<RosLinkDescriptor> getNode_2002IncomingLinks(View view)
ipa320$bride
View view
List<RosLinkDescriptor>
List<RosLinkDescriptor> getNode_2001OutgoingLinks(View view)
View view
List<RosLinkDescriptor>
List<RosLinkDescriptor> getNode_2002OutgoingLinks(View view)
ipa320$bride
View view
List<RosLinkDescriptor>
List<RosLinkDescriptor> getPublisher_4004ContainedLinks(View view)
View view
List<RosLinkDescriptor>
List<RosLinkDescriptor> getPublisher_4002ContainedLinks(View view)
ipa320$bride
View view
List<RosLinkDescriptor>
List<RosLinkDescriptor> getPublisher_4004IncomingLinks(View view)
View view
List<RosLinkDescriptor>
List<RosLinkDescriptor> getPublisher_4002IncomingLinks(View view)
ipa320$bride
View view
List<RosLinkDescriptor>
List<RosLinkDescriptor> getPublisher_4004OutgoingLinks(View view)
View view
List<RosLinkDescriptor>
List<RosLinkDescriptor> getPublisher_4002OutgoingLinks(View view)
ipa320$bride
View view
List<RosLinkDescriptor>
List<RosLinkDescriptor> getSubscriber_4002ContainedLinks(View view)
View view
List<RosLinkDescriptor>
List<RosLinkDescriptor> getSubscriber_4001ContainedLinks(View view)
ipa320$bride
View view
List<RosLinkDescriptor>
List<RosLinkDescriptor> getSubscriber_4002IncomingLinks(View view)
View view
List<RosLinkDescriptor>
List<RosLinkDescriptor> getSubscriber_4001IncomingLinks(View view)
ipa320$bride
View view
List<RosLinkDescriptor>
List<RosLinkDescriptor> getSubscriber_4002OutgoingLinks(View view)
View view
List<RosLinkDescriptor>
List<RosLinkDescriptor> getSubscriber_4001OutgoingLinks(View view)
ipa320$bride
View view
List<RosLinkDescriptor>
List<RosLinkDescriptor> getTopic_2002ContainedLinks(View view)
View view
List<RosLinkDescriptor>
List<RosLinkDescriptor> getTopic_2001ContainedLinks(View view)
ipa320$bride
View view
List<RosLinkDescriptor>
List<RosLinkDescriptor> getTopic_2002IncomingLinks(View view)
View view
List<RosLinkDescriptor>
List<RosLinkDescriptor> getTopic_2001IncomingLinks(View view)
ipa320$bride
View view
List<RosLinkDescriptor>
List<RosLinkDescriptor> getTopic_2002OutgoingLinks(View view)
View view
List<RosLinkDescriptor>
List<RosLinkDescriptor> getTopic_2001OutgoingLinks(View view)
https://github.com/ipa320/bride/blob/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fmessages.properties
https://api.github.com/repos/ipa320/bride/contents/org.ros.model.ros.diagram%2Fmessages.properties?ref=01bc5c83c895357f23a345ecec85a3796cf66358
org.ros.model.ros.diagram/messages.properties
Service5CreationTool_title=Service
Service5CreationTool_desc=Create new Service
ServiceServer6CreationTool_title=ServiceServer
ServiceServer6CreationTool_desc=Create new ServiceServer
ServiceClient7CreationTool_title=ServiceClient
ServiceClient7CreationTool_desc=Create new ServiceClient
Parameter8CreationTool_title=Parameter
Parameter8CreationTool_desc=Create new Parameter
NodeParametersEditPart_title=Parameters
NavigatorGroupName_Subscriber_4002_target=target
NavigatorGroupName_Subscriber_4002_source=source
NavigatorGroupName_Topic_2002_incominglinks=incoming links
NavigatorGroupName_Service_2003_incominglinks=incoming links
NavigatorGroupName_Node_2001_outgoinglinks=outgoing links
NavigatorGroupName_ServiceClient_4001_target=target
NavigatorGroupName_ServiceClient_4001_source=source
NavigatorGroupName_Publisher_4004_target=target
NavigatorGroupName_Publisher_4004_source=source
NavigatorGroupName_ServiceServer_4003_target=target
NavigatorGroupName_ServiceServer_4003_source=source
NavigatorGroupName_Subscriber_4001_target=target
NavigatorGroupName_Subscriber_4001_source=source
NavigatorGroupName_Topic_2001_incominglinks=incoming links
NavigatorGroupName_Publisher_4002_target=target
NavigatorGroupName_Publisher_4002_source=source
NavigatorGroupName_Node_2002_outgoinglinks=outgoing links
@@ -53,15 +53,29 @@ Subscriber3CreationTool_title=Subscriber
 Subscriber3CreationTool_desc=Create new Subscriber
 Topic4CreationTool_title=Topic
 Topic4CreationTool_desc=Create new Topic
+Service5CreationTool_title=Service
+Service5CreationTool_desc=Create new Service
+ServiceServer6CreationTool_title=ServiceServer
+ServiceServer6CreationTool_desc=Create new ServiceServer
+ServiceClient7CreationTool_title=ServiceClient
+ServiceClient7CreationTool_desc=Create new ServiceClient
+Parameter8CreationTool_title=Parameter
+Parameter8CreationTool_desc=Create new Parameter
+NodeParametersEditPart_title=Parameters
 
 CommandName_OpenDiagram=Open Diagram
 NavigatorGroupName_Package_1000_links=links
-NavigatorGroupName_Subscriber_4001_target=target
-NavigatorGroupName_Subscriber_4001_source=source
-NavigatorGroupName_Topic_2001_incominglinks=incoming links
-NavigatorGroupName_Publisher_4002_target=target
-NavigatorGroupName_Publisher_4002_source=source
-NavigatorGroupName_Node_2002_outgoinglinks=outgoing links
+NavigatorGroupName_Subscriber_4002_target=target
+NavigatorGroupName_Subscriber_4002_source=source
+NavigatorGroupName_Topic_2002_incominglinks=incoming links
+NavigatorGroupName_Service_2003_incominglinks=incoming links
+NavigatorGroupName_Node_2001_outgoinglinks=outgoing links
+NavigatorGroupName_ServiceClient_4001_target=target
+NavigatorGroupName_ServiceClient_4001_source=source
+NavigatorGroupName_Publisher_4004_target=target
+NavigatorGroupName_Publisher_4004_source=source
+NavigatorGroupName_ServiceServer_4003_target=target
+NavigatorGroupName_ServiceServer_4003_source=source
 NavigatorActionProvider_OpenDiagramActionName=Open Diagram
 AbstractParser_UnexpectedValueType=Value of type {0} is expected
 AbstractParser_WrongStringConversion=String value does not convert to {0} value
https://github.com/ipa320/bride/raw/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fmessages.properties
664f58427ff2d102230459c0c1555b393e3223c4
modified
https://github.com/ipa320/bride/blob/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fmodel%2Fros.gmfgraph
https://api.github.com/repos/ipa320/bride/contents/org.ros.model.ros.diagram%2Fmodel%2Fros.gmfgraph?ref=01bc5c83c895357f23a345ecec85a3796cf66358
org.ros.model.ros.diagram/model/ros.gmfgraph
            xsi:type="gmfgraph:GridLayout"/>
          <layoutData
              xsi:type="gmfgraph:GridLayoutData"
              verticalAlignment="BEGINNING"
              horizontalAlignment="BEGINNING"/>
        </children>
        <children
            xsi:type="gmfgraph:Rectangle"
            name="ParameterCompartmentFigure">
          <layoutData
              xsi:type="gmfgraph:GridLayoutData"
              grabExcessHorizontalSpace="true"
              grabExcessVerticalSpace="true"
              verticalAlignment="FILL"
              horizontalAlignment="FILL"/>
          <layout
              xsi:type="gmfgraph:StackLayout"/>
          figure="//@figures.0/@descriptors.0/@actualFigure/@children.1"/>
          xsi:type="gmfgraph:PolylineConnection"
          xsi:type="gmfgraph:PolylineConnection"
        name="ServiceFigure">
      <actualFigure
          xsi:type="gmfgraph:Rectangle"
          name="ServiceFigure">
        <layout
            xsi:type="gmfgraph:FlowLayout"/>
        <children
            xsi:type="gmfgraph:Label"
            name="ServiceNameFigure"
            text="&lt;...>"/>
      </actualFigure>
      <accessors
          figure="//@figures.0/@descriptors.4/@actualFigure/@children.0"/>
    </descriptors>
    <descriptors
        name="ServiceServerFigure">
          name="ServiceServerFigure">
        <children
            xsi:type="gmfgraph:Label"
            name="ServiceServerNameFigure"
            text="&lt;...>"/>
      </actualFigure>
      <accessors
          figure="//@figures.0/@descriptors.5/@actualFigure/@children.0"/>
        name="ServiceClientFigure">
          name="ServiceClientFigure">
        <children
            xsi:type="gmfgraph:Label"
            name="ServiceClientNameFigure"
            text="&lt;...>"/>
      </actualFigure>
      <accessors
          figure="//@figures.0/@descriptors.6/@actualFigure/@children.0"/>
    </descriptors>
    <descriptors
        name="ParameterFigure">
      <actualFigure
          xsi:type="gmfgraph:Label"
          name="ParameterNameFigure"
          text="&lt;...>"/>
      name="Topic"
      figure="TopicFigure"/>
  <nodes
      name="Service"
      figure="ServiceFigure"/>
  <nodes
      name="Parameter"
      figure="ParameterFigure"/>
  <connections
  <connections
      name="ServiceServer"
      figure="ServiceServerFigure"/>
      name="ServiceClient"
      figure="ServiceClientFigure"/>
      name="Parameters"
  <labels
      name="ServiceName"
      figure="ServiceFigure"
      accessor="//@figures.0/@descriptors.4/@accessors.0"/>
  <labels
      name="ServiceServerName"
      figure="ServiceServerFigure"
      accessor="//@figures.0/@descriptors.5/@accessors.0"/>
  <labels
      name="ServiceClientName"
      figure="ServiceClientFigure"
      accessor="//@figures.0/@descriptors.6/@accessors.0"/>
  <labels
      name="ParameterName"
      figure="ParameterFigure"/>
    <figures
        xsi:type="gmfgraph:PolylineDecoration"
        name="PublisherTopicTargetDecoration"/>
    <figures
        xsi:type="gmfgraph:PolylineDecoration"
        name="SubscriberTopicTargetDecoration"/>
            xsi:type="gmfgraph:FlowLayout"/>
          <children
              xsi:type="gmfgraph:Rectangle"
              name="PublisherCompartmentFigure">
            <layout
                xsi:type="gmfgraph:StackLayout"/>
          </children>
          figure="//@figures.0/@descriptors.0/@actualFigure/@children.0/@children.0"/>
          xsi:type="gmfgraph:Rectangle"
        <layout
            xsi:type="gmfgraph:FlowLayout"/>
          xsi:type="gmfgraph:Rectangle"
        <layout
            xsi:type="gmfgraph:FlowLayout"/>
        name="PublisherTopicFigure">
          name="PublisherTopicConnectionFigure"
          targetDecoration="//@figures.0/@figures.0"/>
        name="SubscriberTopicFigure">
          name="SubscriberTopicConnectionFigure"
          targetDecoration="//@figures.0/@figures.1"/>
  <nodes
  <nodes
      name="Topic"
      figure="TopicFigure"/>
      name="Publisher to Topic"
      figure="PublisherTopicFigure"/>
      name="Subscriber To Topic"
      figure="SubscriberTopicFigure"/>
      name="Publishers"
@@ -5,43 +5,45 @@
     xmlns:gmfgraph="http://www.eclipse.org/gmf/2006/GraphicalDefinition" name="ros">
   <figures
       name="Default">
-    <figures
-        xsi:type="gmfgraph:PolylineDecoration"
-        name="PublisherTopicTargetDecoration"/>
-    <figures
-        xsi:type="gmfgraph:PolylineDecoration"
-        name="SubscriberTopicTargetDecoration"/>
     <descriptors
         name="NodeFigure">
       <actualFigure
           xsi:type="gmfgraph:Rectangle"
           name="NodeFigure">
         <layout
-            xsi:type="gmfgraph:FlowLayout"/>
+            xsi:type="gmfgraph:GridLayout"/>
         <children
             xsi:type="gmfgraph:Label"
             name="NodeNameFigure"
             text="&lt;...>">
-          <children
-              xsi:type="gmfgraph:Rectangle"
-              name="PublisherCompartmentFigure">
-            <layout
-                xsi:type="gmfgraph:StackLayout"/>
-          </children>
+          <layoutData
+              xsi:type="gmfgraph:GridLayoutData"
+              verticalAlignment="BEGINNING"
+              horizontalAlignment="BEGINNING"/>
+        </children>
+        <children
+            xsi:type="gmfgraph:Rectangle"
+            name="ParameterCompartmentFigure">
+          <layoutData
+              xsi:type="gmfgraph:GridLayoutData"
+              grabExcessHorizontalSpace="true"
+              grabExcessVerticalSpace="true"
+              verticalAlignment="FILL"
+              horizontalAlignment="FILL"/>
+          <layout
+              xsi:type="gmfgraph:StackLayout"/>
         </children>
       </actualFigure>
       <accessors
           figure="//@figures.0/@descriptors.0/@actualFigure/@children.0"/>
       <accessors
-          figure="//@figures.0/@descriptors.0/@actualFigure/@children.0/@children.0"/>
+          figure="//@figures.0/@descriptors.0/@actualFigure/@children.1"/>
     </descriptors>
     <descriptors
         name="PublisherFigure">
       <actualFigure
-          xsi:type="gmfgraph:Rectangle"
+          xsi:type="gmfgraph:PolylineConnection"
           name="PublisherFigure">
-        <layout
-            xsi:type="gmfgraph:FlowLayout"/>
         <children
             xsi:type="gmfgraph:Label"
             name="PublisherNameFigure"
@@ -53,10 +55,8 @@
     <descriptors
         name="SubscriberFigure">
       <actualFigure
-          xsi:type="gmfgraph:Rectangle"
+          xsi:type="gmfgraph:PolylineConnection"
           name="SubscriberFigure">
-        <layout
-            xsi:type="gmfgraph:FlowLayout"/>
         <children
             xsi:type="gmfgraph:Label"
             name="SubscriberNameFigure"
@@ -81,40 +81,80 @@
           figure="//@figures.0/@descriptors.3/@actualFigure/@children.0"/>
     </descriptors>
     <descriptors
-        name="PublisherTopicFigure">
+        name="ServiceFigure">
+      <actualFigure
+          xsi:type="gmfgraph:Rectangle"
+          name="ServiceFigure">
+        <layout
+            xsi:type="gmfgraph:FlowLayout"/>
+        <children
+            xsi:type="gmfgraph:Label"
+            name="ServiceNameFigure"
+            text="&lt;...>"/>
+      </actualFigure>
+      <accessors
+          figure="//@figures.0/@descriptors.4/@actualFigure/@children.0"/>
+    </descriptors>
+    <descriptors
+        name="ServiceServerFigure">
       <actualFigure
           xsi:type="gmfgraph:PolylineConnection"
-          name="PublisherTopicConnectionFigure"
-          targetDecoration="//@figures.0/@figures.0"/>
+          name="ServiceServerFigure">
+        <children
+            xsi:type="gmfgraph:Label"
+            name="ServiceServerNameFigure"
+            text="&lt;...>"/>
+      </actualFigure>
+      <accessors
+          figure="//@figures.0/@descriptors.5/@actualFigure/@children.0"/>
     </descriptors>
     <descriptors
-        name="SubscriberTopicFigure">
+        name="ServiceClientFigure">
       <actualFigure
           xsi:type="gmfgraph:PolylineConnection"
-          name="SubscriberTopicConnectionFigure"
-          targetDecoration="//@figures.0/@figures.1"/>
+          name="ServiceClientFigure">
+        <children
+            xsi:type="gmfgraph:Label"
+            name="ServiceClientNameFigure"
+            text="&lt;...>"/>
+      </actualFigure>
+      <accessors
+          figure="//@figures.0/@descriptors.6/@actualFigure/@children.0"/>
+    </descriptors>
+    <descriptors
+        name="ParameterFigure">
+      <actualFigure
+          xsi:type="gmfgraph:Label"
+          name="ParameterNameFigure"
+          text="&lt;...>"/>
     </descriptors>
   </figures>
   <nodes
       name="Node"
       figure="NodeFigure"/>
   <nodes
+      name="Topic"
+      figure="TopicFigure"/>
+  <nodes
+      name="Service"
+      figure="ServiceFigure"/>
+  <nodes
+      name="Parameter"
+      figure="ParameterFigure"/>
+  <connections
       name="Publisher"
       figure="PublisherFigure"/>
-  <nodes
+  <connections
       name="Subscriber"
       figure="SubscriberFigure"/>
-  <nodes
-      name="Topic"
-      figure="TopicFigure"/>
   <connections
-      name="Publisher to Topic"
-      figure="PublisherTopicFigure"/>
+      name="ServiceServer"
+      figure="ServiceServerFigure"/>
   <connections
-      name="Subscriber To Topic"
-      figure="SubscriberTopicFigure"/>
+      name="ServiceClient"
+      figure="ServiceClientFigure"/>
   <compartments
-      name="Publishers"
+      name="Parameters"
       figure="NodeFigure"
       needsTitle="true"
       accessor="//@figures.0/@descriptors.0/@accessors.1"/>
@@ -134,4 +174,19 @@
       name="TopicName"
       figure="TopicFigure"
       accessor="//@figures.0/@descriptors.3/@accessors.0"/>
+  <labels
+      name="ServiceName"
+      figure="ServiceFigure"
+      accessor="//@figures.0/@descriptors.4/@accessors.0"/>
+  <labels
+      name="ServiceServerName"
+      figure="ServiceServerFigure"
+      accessor="//@figures.0/@descriptors.5/@accessors.0"/>
+  <labels
+      name="ServiceClientName"
+      figure="ServiceClientFigure"
+      accessor="//@figures.0/@descriptors.6/@accessors.0"/>
+  <labels
+      name="ParameterName"
+      figure="ParameterFigure"/>
 </gmfgraph:Canvas>
https://github.com/ipa320/bride/raw/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fmodel%2Fros.gmfgraph
6d252c49f8df499d753afa18d5ee50741ba3644e
modified
https://github.com/ipa320/bride/blob/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fmodel%2Fros.gmftool
https://api.github.com/repos/ipa320/bride/contents/org.ros.model.ros.diagram%2Fmodel%2Fros.gmftool?ref=01bc5c83c895357f23a345ecec85a3796cf66358
org.ros.model.ros.diagram/model/ros.gmftool
      <tools
          xsi:type="gmftool:CreationTool"
          title="Service"
          description="Create new Service">
        <smallIcon
            xsi:type="gmftool:DefaultImage"/>
        <largeIcon
            xsi:type="gmftool:DefaultImage"/>
      </tools>
      <tools
          xsi:type="gmftool:CreationTool"
          title="ServiceServer"
          description="Create new ServiceServer">
        <smallIcon
            xsi:type="gmftool:DefaultImage"/>
        <largeIcon
            xsi:type="gmftool:DefaultImage"/>
      </tools>
      <tools
          xsi:type="gmftool:CreationTool"
          title="ServiceClient"
          description="Create new ServiceClient">
        <smallIcon
            xsi:type="gmftool:DefaultImage"/>
        <largeIcon
            xsi:type="gmftool:DefaultImage"/>
      </tools>
      <tools
          xsi:type="gmftool:CreationTool"
          title="Parameter"
          description="Create new Parameter">
        <smallIcon
            xsi:type="gmftool:DefaultImage"/>
        <largeIcon
            xsi:type="gmftool:DefaultImage"/>
      </tools>
@@ -44,6 +44,42 @@
         <largeIcon
             xsi:type="gmftool:DefaultImage"/>
       </tools>
+      <tools
+          xsi:type="gmftool:CreationTool"
+          title="Service"
+          description="Create new Service">
+        <smallIcon
+            xsi:type="gmftool:DefaultImage"/>
+        <largeIcon
+            xsi:type="gmftool:DefaultImage"/>
+      </tools>
+      <tools
+          xsi:type="gmftool:CreationTool"
+          title="ServiceServer"
+          description="Create new ServiceServer">
+        <smallIcon
+            xsi:type="gmftool:DefaultImage"/>
+        <largeIcon
+            xsi:type="gmftool:DefaultImage"/>
+      </tools>
+      <tools
+          xsi:type="gmftool:CreationTool"
+          title="ServiceClient"
+          description="Create new ServiceClient">
+        <smallIcon
+            xsi:type="gmftool:DefaultImage"/>
+        <largeIcon
+            xsi:type="gmftool:DefaultImage"/>
+      </tools>
+      <tools
+          xsi:type="gmftool:CreationTool"
+          title="Parameter"
+          description="Create new Parameter">
+        <smallIcon
+            xsi:type="gmftool:DefaultImage"/>
+        <largeIcon
+            xsi:type="gmftool:DefaultImage"/>
+      </tools>
     </tools>
   </palette>
 </gmftool:ToolRegistry>
https://github.com/ipa320/bride/raw/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fmodel%2Fros.gmftool
b653b73c51ee3dad12c7bf06aeb4b1502e943b68
modified
https://github.com/ipa320/bride/blob/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fplugin.properties
https://api.github.com/repos/ipa320/bride/contents/org.ros.model.ros.diagram%2Fplugin.properties?ref=01bc5c83c895357f23a345ecec85a3796cf66358
org.ros.model.ros.diagram/plugin.properties
metatype.name.Node_2001=Node
metatype.name.Topic_2002=Topic
metatype.name.Service_2003=Service
metatype.name.Parameter_3001=Parameter
metatype.name.ServiceClient_4001=ServiceClient
metatype.name.Subscriber_4002=Subscriber
metatype.name.ServiceServer_4003=ServiceServer
metatype.name.Publisher_4004=Publisher
metatype.name.Topic_2001=Topic
metatype.name.Node_2002=Node
metatype.name.Subscriber_4001=Subscriber
metatype.name.Publisher_4002=Publisher
@@ -31,10 +31,14 @@ prefpage.org.ros.model.ros.diagram.rulersAndGrid=Rulers And Grid
 
 # Providers
 metatype.name.Package_1000=Undefined
-metatype.name.Topic_2001=Topic
-metatype.name.Node_2002=Node
-metatype.name.Subscriber_4001=Subscriber
-metatype.name.Publisher_4002=Publisher
+metatype.name.Node_2001=Node
+metatype.name.Topic_2002=Topic
+metatype.name.Service_2003=Service
+metatype.name.Parameter_3001=Parameter
+metatype.name.ServiceClient_4001=ServiceClient
+metatype.name.Subscriber_4002=Subscriber
+metatype.name.ServiceServer_4003=ServiceServer
+metatype.name.Publisher_4004=Publisher
 
 # Commands and menu actions
 cmdcategory.name=Ros Editor Commands
https://github.com/ipa320/bride/raw/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fplugin.properties
20bd90e452d268133ac75299f6b4c8a4a30d7c75
modified
https://github.com/ipa320/bride/blob/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fplugin.xml
https://api.github.com/repos/ipa320/bride/contents/org.ros.model.ros.diagram%2Fplugin.xml?ref=01bc5c83c895357f23a345ecec85a3796cf66358
org.ros.model.ros.diagram/plugin.xml
         <context viewClass="org.eclipse.gmf.runtime.notation.Node" semanticHints="2001,2002,2003,3001"/>
         <context viewClass="org.eclipse.gmf.runtime.notation.Edge" semanticHints="4001,4002,4003,4004"/>
            <method name="getType()" value="2001,2002,2003,3001"/>
            <method name="getType()" value="4001,4002,4003,4004"/>
            <method name="getType()" value="5001,5002,5003"/>
            <method name="getType()" value="7001"/>
         <object class="org.ros.model.ros.diagram.edit.parts.NodeEditPart" id="Node_2001"/>
         <object class="org.ros.model.ros.diagram.edit.parts.TopicEditPart" id="Topic_2002"/>
         <object class="org.ros.model.ros.diagram.edit.parts.ServiceEditPart" id="Service_2003"/>
         <context elements="Package_1000,Node_2001,Topic_2002,Service_2003"/>
               id="org.ros.model.ros.diagram.Node_2001"
               name="%metatype.name.Node_2001"
               eclass="Node"
               edithelper="org.ros.model.ros.diagram.edit.helpers.NodeEditHelper">
               id="org.ros.model.ros.diagram.Topic_2002"
               name="%metatype.name.Topic_2002"
               eclass="Topic"
               edithelper="org.ros.model.ros.diagram.edit.helpers.TopicEditHelper">
               id="org.ros.model.ros.diagram.Service_2003"
               name="%metatype.name.Service_2003"
               kind="org.eclipse.gmf.runtime.emf.type.core.IHintedType"
               eclass="Service"
               edithelper="org.ros.model.ros.diagram.edit.helpers.ServiceEditHelper">
            <param name="semanticHint" value="2003"/>
         </metamodelType>
      </metamodel>
      <metamodel nsURI="http://ros/1.0">
         <metamodelType
               id="org.ros.model.ros.diagram.Parameter_3001"
               name="%metatype.name.Parameter_3001"
               kind="org.eclipse.gmf.runtime.emf.type.core.IHintedType"
               eclass="Parameter"
               edithelper="org.ros.model.ros.diagram.edit.helpers.ParameterEditHelper">
            <param name="semanticHint" value="3001"/>
         </metamodelType>
      </metamodel>
      <metamodel nsURI="http://ros/1.0">
         <metamodelType
               id="org.ros.model.ros.diagram.ServiceClient_4001"
               name="%metatype.name.ServiceClient_4001"
               kind="org.eclipse.gmf.runtime.emf.type.core.IHintedType"
               eclass="ServiceClient"
               edithelper="org.ros.model.ros.diagram.edit.helpers.ServiceClientEditHelper">
            <param name="semanticHint" value="4001"/>
         </metamodelType>
      </metamodel>
      <metamodel nsURI="http://ros/1.0">
         <metamodelType
               id="org.ros.model.ros.diagram.Subscriber_4002"
               name="%metatype.name.Subscriber_4002"
            <param name="semanticHint" value="4002"/>
         </metamodelType>
      </metamodel>
      <metamodel nsURI="http://ros/1.0">
         <metamodelType
               id="org.ros.model.ros.diagram.ServiceServer_4003"
               name="%metatype.name.ServiceServer_4003"
               kind="org.eclipse.gmf.runtime.emf.type.core.IHintedType"
               eclass="ServiceServer"
               edithelper="org.ros.model.ros.diagram.edit.helpers.ServiceServerEditHelper">
            <param name="semanticHint" value="4003"/>
               id="org.ros.model.ros.diagram.Publisher_4004"
               name="%metatype.name.Publisher_4004"
            <param name="semanticHint" value="4004"/>
         <elementType ref="org.ros.model.ros.diagram.Node_2001"/>
         <elementType ref="org.ros.model.ros.diagram.Topic_2002"/>
         <elementType ref="org.ros.model.ros.diagram.Service_2003"/>
         <elementType ref="org.ros.model.ros.diagram.Parameter_3001"/>
         <elementType ref="org.ros.model.ros.diagram.ServiceClient_4001"/>
         <elementType ref="org.ros.model.ros.diagram.Subscriber_4002"/>
         <elementType ref="org.ros.model.ros.diagram.ServiceServer_4003"/>
         <elementType ref="org.ros.model.ros.diagram.Publisher_4004"/>
         <context viewClass="org.eclipse.gmf.runtime.notation.Node" semanticHints="2001,2002"/>
         <context viewClass="org.eclipse.gmf.runtime.notation.Edge" semanticHints="4001,4002"/>
            <method name="getType()" value="2001,2002"/>
            <method name="getType()" value="4001,4002"/>
            <method name="getType()" value="5001,5002"/>
            <method name="getType()" value=""/>
         <object class="org.ros.model.ros.diagram.edit.parts.TopicEditPart" id="Topic_2001"/>
         <object class="org.ros.model.ros.diagram.edit.parts.NodeEditPart" id="Node_2002"/>
         <context elements="Package_1000,Topic_2001,Node_2002"/>
               id="org.ros.model.ros.diagram.Topic_2001"
               name="%metatype.name.Topic_2001"
               eclass="Topic"
               edithelper="org.ros.model.ros.diagram.edit.helpers.TopicEditHelper">
               id="org.ros.model.ros.diagram.Node_2002"
               name="%metatype.name.Node_2002"
               eclass="Node"
               edithelper="org.ros.model.ros.diagram.edit.helpers.NodeEditHelper">
               id="org.ros.model.ros.diagram.Subscriber_4001"
               name="%metatype.name.Subscriber_4001"
            <param name="semanticHint" value="4001"/>
               id="org.ros.model.ros.diagram.Publisher_4002"
               name="%metatype.name.Publisher_4002"
            <param name="semanticHint" value="4002"/>
         <elementType ref="org.ros.model.ros.diagram.Topic_2001"/>
         <elementType ref="org.ros.model.ros.diagram.Node_2002"/>
         <elementType ref="org.ros.model.ros.diagram.Subscriber_4001"/>
         <elementType ref="org.ros.model.ros.diagram.Publisher_4002"/>
@@ -217,8 +217,8 @@
       <viewProvider class="org.ros.model.ros.diagram.providers.RosViewProvider">
          <Priority name="Lowest"/>
          <context viewClass="org.eclipse.gmf.runtime.notation.Diagram" semanticHints="Ros"/>
-         <context viewClass="org.eclipse.gmf.runtime.notation.Node" semanticHints="2001,2002"/>
-         <context viewClass="org.eclipse.gmf.runtime.notation.Edge" semanticHints="4001,4002"/>
+         <context viewClass="org.eclipse.gmf.runtime.notation.Node" semanticHints="2001,2002,2003,3001"/>
+         <context viewClass="org.eclipse.gmf.runtime.notation.Edge" semanticHints="4001,4002,4003,4004"/>
       </viewProvider>
    </extension>
 
@@ -230,16 +230,16 @@
             <method name="getType()" value="Ros"/>
          </object>
          <object class="org.eclipse.gmf.runtime.notation.Node" id="generated-nodes">
-            <method name="getType()" value="2001,2002"/>
+            <method name="getType()" value="2001,2002,2003,3001"/>
          </object>
          <object class="org.eclipse.gmf.runtime.notation.Edge" id="generated-links">
-            <method name="getType()" value="4001,4002"/>
+            <method name="getType()" value="4001,4002,4003,4004"/>
          </object>
          <object class="org.eclipse.gmf.runtime.notation.Node" id="generated-labels">
-            <method name="getType()" value="5001,5002"/>
+            <method name="getType()" value="5001,5002,5003"/>
          </object>
          <object class="org.eclipse.gmf.runtime.notation.Node" id="generated-compartments">
-            <method name="getType()" value=""/>
+            <method name="getType()" value="7001"/>
          </object>
          <context views="generated-diagram,generated-nodes,generated-links,generated-labels,generated-compartments"/>
       </editpartProvider>
@@ -250,9 +250,10 @@
       <modelingAssistantProvider class="org.ros.model.ros.diagram.providers.RosModelingAssistantProvider">
          <Priority name="Lowest"/>
          <object class="org.ros.model.ros.diagram.edit.parts.PackageEditPart" id="Package_1000"/>
-         <object class="org.ros.model.ros.diagram.edit.parts.TopicEditPart" id="Topic_2001"/>
-         <object class="org.ros.model.ros.diagram.edit.parts.NodeEditPart" id="Node_2002"/>
-         <context elements="Package_1000,Topic_2001,Node_2002"/>
+         <object class="org.ros.model.ros.diagram.edit.parts.NodeEditPart" id="Node_2001"/>
+         <object class="org.ros.model.ros.diagram.edit.parts.TopicEditPart" id="Topic_2002"/>
+         <object class="org.ros.model.ros.diagram.edit.parts.ServiceEditPart" id="Service_2003"/>
+         <context elements="Package_1000,Node_2001,Topic_2002,Service_2003"/>
       </modelingAssistantProvider>
    </extension>
 
@@ -284,42 +285,82 @@
       </metamodel>
       <metamodel nsURI="http://ros/1.0">
          <metamodelType
-               id="org.ros.model.ros.diagram.Topic_2001"
-               name="%metatype.name.Topic_2001"
+               id="org.ros.model.ros.diagram.Node_2001"
+               name="%metatype.name.Node_2001"
                kind="org.eclipse.gmf.runtime.emf.type.core.IHintedType"
-               eclass="Topic"
-               edithelper="org.ros.model.ros.diagram.edit.helpers.TopicEditHelper">
+               eclass="Node"
+               edithelper="org.ros.model.ros.diagram.edit.helpers.NodeEditHelper">
             <param name="semanticHint" value="2001"/>
          </metamodelType>
       </metamodel>
       <metamodel nsURI="http://ros/1.0">
          <metamodelType
-               id="org.ros.model.ros.diagram.Node_2002"
-               name="%metatype.name.Node_2002"
+               id="org.ros.model.ros.diagram.Topic_2002"
+               name="%metatype.name.Topic_2002"
                kind="org.eclipse.gmf.runtime.emf.type.core.IHintedType"
-               eclass="Node"
-               edithelper="org.ros.model.ros.diagram.edit.helpers.NodeEditHelper">
+               eclass="Topic"
+               edithelper="org.ros.model.ros.diagram.edit.helpers.TopicEditHelper">
             <param name="semanticHint" value="2002"/>
          </metamodelType>
       </metamodel>
       <metamodel nsURI="http://ros/1.0">
          <metamodelType
-               id="org.ros.model.ros.diagram.Subscriber_4001"
-               name="%metatype.name.Subscriber_4001"
+               id="org.ros.model.ros.diagram.Service_2003"
+               name="%metatype.name.Service_2003"
+               kind="org.eclipse.gmf.runtime.emf.type.core.IHintedType"
+               eclass="Service"
+               edithelper="org.ros.model.ros.diagram.edit.helpers.ServiceEditHelper">
+            <param name="semanticHint" value="2003"/>
+         </metamodelType>
+      </metamodel>
+      <metamodel nsURI="http://ros/1.0">
+         <metamodelType
+               id="org.ros.model.ros.diagram.Parameter_3001"
+               name="%metatype.name.Parameter_3001"
+               kind="org.eclipse.gmf.runtime.emf.type.core.IHintedType"
+               eclass="Parameter"
+               edithelper="org.ros.model.ros.diagram.edit.helpers.ParameterEditHelper">
+            <param name="semanticHint" value="3001"/>
+         </metamodelType>
+      </metamodel>
+      <metamodel nsURI="http://ros/1.0">
+         <metamodelType
+               id="org.ros.model.ros.diagram.ServiceClient_4001"
+               name="%metatype.name.ServiceClient_4001"
+               kind="org.eclipse.gmf.runtime.emf.type.core.IHintedType"
+               eclass="ServiceClient"
+               edithelper="org.ros.model.ros.diagram.edit.helpers.ServiceClientEditHelper">
+            <param name="semanticHint" value="4001"/>
+         </metamodelType>
+      </metamodel>
+      <metamodel nsURI="http://ros/1.0">
+         <metamodelType
+               id="org.ros.model.ros.diagram.Subscriber_4002"
+               name="%metatype.name.Subscriber_4002"
                kind="org.eclipse.gmf.runtime.emf.type.core.IHintedType"
                eclass="Subscriber"
                edithelper="org.ros.model.ros.diagram.edit.helpers.SubscriberEditHelper">
-            <param name="semanticHint" value="4001"/>
+            <param name="semanticHint" value="4002"/>
+         </metamodelType>
+      </metamodel>
+      <metamodel nsURI="http://ros/1.0">
+         <metamodelType
+               id="org.ros.model.ros.diagram.ServiceServer_4003"
+               name="%metatype.name.ServiceServer_4003"
+               kind="org.eclipse.gmf.runtime.emf.type.core.IHintedType"
+               eclass="ServiceServer"
+               edithelper="org.ros.model.ros.diagram.edit.helpers.ServiceServerEditHelper">
+            <param name="semanticHint" value="4003"/>
          </metamodelType>
       </metamodel>
       <metamodel nsURI="http://ros/1.0">
          <metamodelType
-               id="org.ros.model.ros.diagram.Publisher_4002"
-               name="%metatype.name.Publisher_4002"
+               id="org.ros.model.ros.diagram.Publisher_4004"
+               name="%metatype.name.Publisher_4004"
                kind="org.eclipse.gmf.runtime.emf.type.core.IHintedType"
                eclass="Publisher"
                edithelper="org.ros.model.ros.diagram.edit.helpers.PublisherEditHelper">
-            <param name="semanticHint" value="4002"/>
+            <param name="semanticHint" value="4004"/>
          </metamodelType>
       </metamodel>
    </extension>
@@ -335,10 +376,14 @@
       </clientContext> 
       <binding context="org.ros.model.ros.diagram.TypeContext">
          <elementType ref="org.ros.model.ros.diagram.Package_1000"/>
-         <elementType ref="org.ros.model.ros.diagram.Topic_2001"/>
-         <elementType ref="org.ros.model.ros.diagram.Node_2002"/>
-         <elementType ref="org.ros.model.ros.diagram.Subscriber_4001"/>
-         <elementType ref="org.ros.model.ros.diagram.Publisher_4002"/>
+         <elementType ref="org.ros.model.ros.diagram.Node_2001"/>
+         <elementType ref="org.ros.model.ros.diagram.Topic_2002"/>
+         <elementType ref="org.ros.model.ros.diagram.Service_2003"/>
+         <elementType ref="org.ros.model.ros.diagram.Parameter_3001"/>
+         <elementType ref="org.ros.model.ros.diagram.ServiceClient_4001"/>
+         <elementType ref="org.ros.model.ros.diagram.Subscriber_4002"/>
+         <elementType ref="org.ros.model.ros.diagram.ServiceServer_4003"/>
+         <elementType ref="org.ros.model.ros.diagram.Publisher_4004"/>
          <advice ref="org.eclipse.gmf.runtime.diagram.core.advice.notationDepdendents"/>
       </binding>
    </extension>
https://github.com/ipa320/bride/raw/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fplugin.xml
6eca59f9b4e441c976c8203684a63f86ca89c133
modified
https://github.com/ipa320/bride/blob/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fcommands%2FPublisherCreateCommand.java
https://api.github.com/repos/ipa320/bride/contents/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fcommands%2FPublisherCreateCommand.java?ref=01bc5c83c895357f23a345ecec85a3796cf66358
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/edit/commands/PublisherCreateCommand.java
				.canCreatePublisher_4004(getSource(), getTarget());
				.canCreatePublisher_4002(getSource(), getTarget());
@@ -60,7 +60,7 @@ public boolean canExecute() {
 		}
 		// target may be null here but it's possible to check constraint
 		return RosBaseItemSemanticEditPolicy.getLinkConstraints()
-				.canCreatePublisher_4002(getSource(), getTarget());
+				.canCreatePublisher_4004(getSource(), getTarget());
 	}
 
 	/**
https://github.com/ipa320/bride/raw/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fcommands%2FPublisherCreateCommand.java
e7917e59ed5947199ab5905538536937115e650d
modified
https://github.com/ipa320/bride/blob/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fcommands%2FPublisherReorientCommand.java
https://api.github.com/repos/ipa320/bride/contents/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fcommands%2FPublisherReorientCommand.java?ref=01bc5c83c895357f23a345ecec85a3796cf66358
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/edit/commands/PublisherReorientCommand.java
				.canExistPublisher_4004(getLink(), getNewSource(), target);
				.canExistPublisher_4004(getLink(), source, getNewTarget());
				.canExistPublisher_4002(getLink(), getNewSource(), target);
				.canExistPublisher_4002(getLink(), source, getNewTarget());
@@ -67,7 +67,7 @@ protected boolean canReorientSource() {
 		}
 		Topic target = getLink().getTopic();
 		return RosBaseItemSemanticEditPolicy.getLinkConstraints()
-				.canExistPublisher_4002(getLink(), getNewSource(), target);
+				.canExistPublisher_4004(getLink(), getNewSource(), target);
 	}
 
 	/**
@@ -82,7 +82,7 @@ protected boolean canReorientTarget() {
 		}
 		Node source = (Node) getLink().eContainer();
 		return RosBaseItemSemanticEditPolicy.getLinkConstraints()
-				.canExistPublisher_4002(getLink(), source, getNewTarget());
+				.canExistPublisher_4004(getLink(), source, getNewTarget());
 	}
 
 	/**
https://github.com/ipa320/bride/raw/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fcommands%2FPublisherReorientCommand.java
be2a4fe277d8c785f448e269b999e341d7363477
modified
https://github.com/ipa320/bride/blob/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fcommands%2FSubscriberCreateCommand.java
https://api.github.com/repos/ipa320/bride/contents/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fcommands%2FSubscriberCreateCommand.java?ref=01bc5c83c895357f23a345ecec85a3796cf66358
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/edit/commands/SubscriberCreateCommand.java
				.canCreateSubscriber_4002(getSource(), getTarget());
				.canCreateSubscriber_4001(getSource(), getTarget());
@@ -60,7 +60,7 @@ public boolean canExecute() {
 		}
 		// target may be null here but it's possible to check constraint
 		return RosBaseItemSemanticEditPolicy.getLinkConstraints()
-				.canCreateSubscriber_4001(getSource(), getTarget());
+				.canCreateSubscriber_4002(getSource(), getTarget());
 	}
 
 	/**
https://github.com/ipa320/bride/raw/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fcommands%2FSubscriberCreateCommand.java
a07d32aacdcfb5f97af9cdb924c3a7e81b73a2f6
modified
https://github.com/ipa320/bride/blob/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fcommands%2FSubscriberReorientCommand.java
https://api.github.com/repos/ipa320/bride/contents/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fcommands%2FSubscriberReorientCommand.java?ref=01bc5c83c895357f23a345ecec85a3796cf66358
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/edit/commands/SubscriberReorientCommand.java
				.canExistSubscriber_4002(getLink(), getNewSource(), target);
				.canExistSubscriber_4002(getLink(), source, getNewTarget());
				.canExistSubscriber_4001(getLink(), getNewSource(), target);
				.canExistSubscriber_4001(getLink(), source, getNewTarget());
@@ -67,7 +67,7 @@ protected boolean canReorientSource() {
 		}
 		Topic target = getLink().getTopic();
 		return RosBaseItemSemanticEditPolicy.getLinkConstraints()
-				.canExistSubscriber_4001(getLink(), getNewSource(), target);
+				.canExistSubscriber_4002(getLink(), getNewSource(), target);
 	}
 
 	/**
@@ -82,7 +82,7 @@ protected boolean canReorientTarget() {
 		}
 		Node source = (Node) getLink().eContainer();
 		return RosBaseItemSemanticEditPolicy.getLinkConstraints()
-				.canExistSubscriber_4001(getLink(), source, getNewTarget());
+				.canExistSubscriber_4002(getLink(), source, getNewTarget());
 	}
 
 	/**
https://github.com/ipa320/bride/raw/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fcommands%2FSubscriberReorientCommand.java
f07651d25aed93f116461ab6adbf6c306da9cb1b
modified
https://github.com/ipa320/bride/blob/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fcommands%2FTopicCreateCommand.java
https://api.github.com/repos/ipa320/bride/contents/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fcommands%2FTopicCreateCommand.java?ref=01bc5c83c895357f23a345ecec85a3796cf66358
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/edit/commands/TopicCreateCommand.java
		Package container = (Package) getElementToEdit();
		if (container.getTopic() != null) {
			return false;
		}
		owner.setTopic(newElement);
		owner.getTopic().add(newElement);
@@ -44,6 +44,10 @@ protected EObject getElementToEdit() {
 	 * @generated
 	 */
 	public boolean canExecute() {
+		Package container = (Package) getElementToEdit();
+		if (container.getTopic() != null) {
+			return false;
+		}
 		return true;
 
 	}
@@ -56,7 +60,7 @@ protected CommandResult doExecuteWithResult(IProgressMonitor monitor,
 		Topic newElement = RosFactory.eINSTANCE.createTopic();
 
 		Package owner = (Package) getElementToEdit();
-		owner.getTopic().add(newElement);
+		owner.setTopic(newElement);
 
 		doConfigure(newElement, monitor, info);
 
https://github.com/ipa320/bride/raw/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fcommands%2FTopicCreateCommand.java
d546d5339aba301b6e5f289e60d110e3ac53cd3f
modified
https://github.com/ipa320/bride/blob/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fparts%2FNodeEditPart.java
https://api.github.com/repos/ipa320/bride/contents/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fparts%2FNodeEditPart.java?ref=01bc5c83c895357f23a345ecec85a3796cf66358
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/edit/parts/NodeEditPart.java
import org.eclipse.draw2d.GridData;
import org.eclipse.draw2d.GridLayout;
import org.eclipse.gef.Request;
import org.eclipse.gef.editpolicies.NonResizableEditPolicy;
import org.eclipse.gmf.runtime.diagram.core.edithelpers.CreateElementRequestAdapter;
import org.eclipse.gmf.runtime.diagram.ui.editpolicies.CreationEditPolicy;
import org.eclipse.gmf.runtime.diagram.ui.requests.CreateViewAndElementRequest;
	public static final int VISUAL_ID = 2001;
		installEditPolicy(EditPolicyRoles.CREATION_ROLE,
				new CreationEditPolicy());
		org.eclipse.gmf.runtime.diagram.ui.editpolicies.LayoutEditPolicy lep = new org.eclipse.gmf.runtime.diagram.ui.editpolicies.LayoutEditPolicy() {

			protected EditPolicy createChildEditPolicy(EditPart child) {
				EditPolicy result = child
						.getEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE);
				if (result == null) {
					result = new NonResizableEditPolicy();
				}
				return result;
			protected Command getMoveChildrenCommand(Request request) {
		if (childEditPart instanceof NodeParametersEditPart) {
			IFigure pane = getPrimaryShape()
					.getFigureParameterCompartmentFigure();
			setupContentPane(pane); // FIXME each comparment should handle his content pane in his own way 
			pane.add(((NodeParametersEditPart) childEditPart).getFigure());
			return true;
		}
		if (childEditPart instanceof NodeParametersEditPart) {
			IFigure pane = getPrimaryShape()
					.getFigureParameterCompartmentFigure();
			setupContentPane(pane); // FIXME each comparment should handle his content pane in his own way 
			pane.remove(((NodeParametersEditPart) childEditPart).getFigure());
			return true;
		}
		if (editPart instanceof NodeParametersEditPart) {
			return getPrimaryShape().getFigureParameterCompartmentFigure();
		}
		ArrayList<IElementType> types = new ArrayList<IElementType>(4);
		types.add(RosElementTypes.ServiceClient_4001);
		types.add(RosElementTypes.Subscriber_4002);
		types.add(RosElementTypes.ServiceServer_4003);
		types.add(RosElementTypes.Publisher_4004);
		if (targetEditPart instanceof ServiceEditPart) {
			types.add(RosElementTypes.ServiceClient_4001);
		}
			types.add(RosElementTypes.Subscriber_4002);
		}
		if (targetEditPart instanceof ServiceEditPart) {
			types.add(RosElementTypes.ServiceServer_4003);
			types.add(RosElementTypes.Publisher_4004);
		if (relationshipType == RosElementTypes.ServiceClient_4001) {
			types.add(RosElementTypes.Service_2003);
		} else if (relationshipType == RosElementTypes.Subscriber_4002) {
			types.add(RosElementTypes.Topic_2002);
		} else if (relationshipType == RosElementTypes.ServiceServer_4003) {
			types.add(RosElementTypes.Service_2003);
		} else if (relationshipType == RosElementTypes.Publisher_4004) {
			types.add(RosElementTypes.Topic_2002);
	/**
	 * @generated
	 */
	public EditPart getTargetEditPart(Request request) {
		if (request instanceof CreateViewAndElementRequest) {
			CreateElementRequestAdapter adapter = ((CreateViewAndElementRequest) request)
					.getViewAndElementDescriptor()
					.getCreateElementRequestAdapter();
			IElementType type = (IElementType) adapter
					.getAdapter(IElementType.class);
			if (type == RosElementTypes.Parameter_3001) {
				return getChildBySemanticHint(RosVisualIDRegistry
						.getType(NodeParametersEditPart.VISUAL_ID));
			}
		}
		return super.getTargetEditPart(request);
	}

		/**
		 * @generated
		 */
		private RectangleFigure fFigureParameterCompartmentFigure;
			GridLayout layoutThis = new GridLayout();
			layoutThis.numColumns = 1;
			layoutThis.makeColumnsEqualWidth = true;
			GridData constraintFFigureNodeNameFigure = new GridData();
			constraintFFigureNodeNameFigure.verticalAlignment = GridData.BEGINNING;
			constraintFFigureNodeNameFigure.horizontalAlignment = GridData.BEGINNING;
			constraintFFigureNodeNameFigure.horizontalIndent = 0;
			constraintFFigureNodeNameFigure.horizontalSpan = 1;
			constraintFFigureNodeNameFigure.verticalSpan = 1;
			constraintFFigureNodeNameFigure.grabExcessHorizontalSpace = false;
			constraintFFigureNodeNameFigure.grabExcessVerticalSpace = false;
			this.add(fFigureNodeNameFigure, constraintFFigureNodeNameFigure);

			fFigureParameterCompartmentFigure = new RectangleFigure();

			GridData constraintFFigureParameterCompartmentFigure = new GridData();
			constraintFFigureParameterCompartmentFigure.verticalAlignment = GridData.FILL;
			constraintFFigureParameterCompartmentFigure.horizontalAlignment = GridData.FILL;
			constraintFFigureParameterCompartmentFigure.horizontalIndent = 0;
			constraintFFigureParameterCompartmentFigure.horizontalSpan = 1;
			constraintFFigureParameterCompartmentFigure.verticalSpan = 1;
			constraintFFigureParameterCompartmentFigure.grabExcessHorizontalSpace = true;
			constraintFFigureParameterCompartmentFigure.grabExcessVerticalSpace = true;
			this.add(fFigureParameterCompartmentFigure,
					constraintFFigureParameterCompartmentFigure);

			fFigureParameterCompartmentFigure
					.setLayoutManager(new StackLayout());
		/**
		 * @generated
		 */
		public RectangleFigure getFigureParameterCompartmentFigure() {
			return fFigureParameterCompartmentFigure;
		}

EditPart child
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/edit/parts/NodeEditPart.java
EditPolicy result = child
						.getEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE);
				if (result == null) {
					result = new NonResizableEditPolicy();
EditPolicy createChildEditPolicy(EditPart child)
Request request
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/edit/parts/NodeEditPart.java
if (childEditPart instanceof NodeParametersEditPart) {
			IFigure pane = getPrimaryShape()
					.getFigureParameterCompartmentFigure();
			setupContentPane(pane); // FIXME each comparment should handle his content pane in his own way 
			pane.add(((NodeParametersEditPart) childEditPart).getFigure());
			return true;
Command getMoveChildrenCommand(Request request)
relationshipType == RosElementTypes.Subscriber_4002
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/edit/parts/NodeEditPart.java
types.add(RosElementTypes.Topic_2002);
else if (relationshipType == RosElementTypes.Subscriber_4002)
relationshipType == RosElementTypes.ServiceServer_4003
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/edit/parts/NodeEditPart.java
types.add(RosElementTypes.Service_2003);
else if (relationshipType == RosElementTypes.ServiceServer_4003)
relationshipType == RosElementTypes.Publisher_4004
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/edit/parts/NodeEditPart.java
types.add(RosElementTypes.Topic_2002);
	/**
	 * @generated
	 */
	public EditPart getTargetEditPart(Request request) {
		if (request instanceof CreateViewAndElementRequest) {
			CreateElementRequestAdapter adapter = ((CreateViewAndElementRequest) request)
					.getViewAndElementDescriptor()
					.getCreateElementRequestAdapter();
			IElementType type = (IElementType) adapter
					.getAdapter(IElementType.class);
			if (type == RosElementTypes.Parameter_3001) {
				return getChildBySemanticHint(RosVisualIDRegistry
						.getType(NodeParametersEditPart.VISUAL_ID));
else if (relationshipType == RosElementTypes.Publisher_4004)
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/edit/parts/NodeEditPart.java
return fFigureParameterCompartmentFigure;
RectangleFigure getFigureParameterCompartmentFigure()
import org.eclipse.draw2d.FlowLayout;
import org.eclipse.gmf.runtime.diagram.ui.editpolicies.FlowLayoutEditPolicy;
	public static final int VISUAL_ID = 2002;

		FlowLayoutEditPolicy lep = new FlowLayoutEditPolicy() {

			protected Command createAddCommand(EditPart child, EditPart after) {
				return null;
			protected Command createMoveChildCommand(EditPart child,
					EditPart after) {
		ArrayList<IElementType> types = new ArrayList<IElementType>(2);
		types.add(RosElementTypes.Subscriber_4001);
		types.add(RosElementTypes.Publisher_4002);
			types.add(RosElementTypes.Subscriber_4001);
			types.add(RosElementTypes.Publisher_4002);
		if (relationshipType == RosElementTypes.Subscriber_4001) {
			types.add(RosElementTypes.Topic_2001);
		} else if (relationshipType == RosElementTypes.Publisher_4002) {
			types.add(RosElementTypes.Topic_2001);
			FlowLayout layoutThis = new FlowLayout();
			layoutThis.setStretchMinorAxis(false);
			layoutThis.setMinorAlignment(FlowLayout.ALIGN_LEFTTOP);

			layoutThis.setMajorAlignment(FlowLayout.ALIGN_LEFTTOP);
			layoutThis.setMajorSpacing(5);
			layoutThis.setMinorSpacing(5);
			layoutThis.setHorizontal(true);

			this.add(fFigureNodeNameFigure);
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/edit/parts/NodeEditPart.java
protected Command createAddCommand(EditPart child, EditPart after) {
				return null;
			protected Command createMoveChildCommand(EditPart child,
					EditPart after) {
		ArrayList<IElementType> types = new ArrayList<IElementType>(2);
		types.add(RosElementTypes.Subscriber_4001);
		types.add(RosElementTypes.Publisher_4002);
			types.add(RosElementTypes.Subscriber_4001);
			types.add(RosElementTypes.Publisher_4002);
		if (relationshipType == RosElementTypes.Subscriber_4001) {
			types.add(RosElementTypes.Topic_2001);
new FlowLayoutEditPolicy()
@@ -4,20 +4,25 @@
 import java.util.LinkedList;
 import java.util.List;
 
-import org.eclipse.draw2d.FlowLayout;
+import org.eclipse.draw2d.GridData;
+import org.eclipse.draw2d.GridLayout;
 import org.eclipse.draw2d.IFigure;
 import org.eclipse.draw2d.RectangleFigure;
 import org.eclipse.draw2d.Shape;
 import org.eclipse.draw2d.StackLayout;
 import org.eclipse.gef.EditPart;
 import org.eclipse.gef.EditPolicy;
+import org.eclipse.gef.Request;
 import org.eclipse.gef.commands.Command;
 import org.eclipse.gef.editpolicies.LayoutEditPolicy;
+import org.eclipse.gef.editpolicies.NonResizableEditPolicy;
 import org.eclipse.gef.requests.CreateRequest;
+import org.eclipse.gmf.runtime.diagram.core.edithelpers.CreateElementRequestAdapter;
 import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
 import org.eclipse.gmf.runtime.diagram.ui.editparts.ShapeNodeEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editpolicies.CreationEditPolicy;
 import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles;
-import org.eclipse.gmf.runtime.diagram.ui.editpolicies.FlowLayoutEditPolicy;
+import org.eclipse.gmf.runtime.diagram.ui.requests.CreateViewAndElementRequest;
 import org.eclipse.gmf.runtime.draw2d.ui.figures.ConstrainedToolbarLayout;
 import org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel;
 import org.eclipse.gmf.runtime.emf.type.core.IElementType;
@@ -36,7 +41,7 @@ public class NodeEditPart extends ShapeNodeEditPart {
 	/**
 	 * @generated
 	 */
-	public static final int VISUAL_ID = 2002;
+	public static final int VISUAL_ID = 2001;
 
 	/**
 	 * @generated
@@ -59,6 +64,8 @@ public NodeEditPart(View view) {
 	 * @generated
 	 */
 	protected void createDefaultEditPolicies() {
+		installEditPolicy(EditPolicyRoles.CREATION_ROLE,
+				new CreationEditPolicy());
 		super.createDefaultEditPolicies();
 		installEditPolicy(EditPolicyRoles.SEMANTIC_ROLE,
 				new NodeItemSemanticEditPolicy());
@@ -71,15 +78,18 @@ protected void createDefaultEditPolicies() {
 	 * @generated
 	 */
 	protected LayoutEditPolicy createLayoutEditPolicy() {
-
-		FlowLayoutEditPolicy lep = new FlowLayoutEditPolicy() {
-
-			protected Command createAddCommand(EditPart child, EditPart after) {
-				return null;
+		org.eclipse.gmf.runtime.diagram.ui.editpolicies.LayoutEditPolicy lep = new org.eclipse.gmf.runtime.diagram.ui.editpolicies.LayoutEditPolicy() {
+
+			protected EditPolicy createChildEditPolicy(EditPart child) {
+				EditPolicy result = child
+						.getEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE);
+				if (result == null) {
+					result = new NonResizableEditPolicy();
+				}
+				return result;
 			}
 
-			protected Command createMoveChildCommand(EditPart child,
-					EditPart after) {
+			protected Command getMoveChildrenCommand(Request request) {
 				return null;
 			}
 
@@ -113,6 +123,13 @@ protected boolean addFixedChild(EditPart childEditPart) {
 					.getFigureNodeNameFigure());
 			return true;
 		}
+		if (childEditPart instanceof NodeParametersEditPart) {
+			IFigure pane = getPrimaryShape()
+					.getFigureParameterCompartmentFigure();
+			setupContentPane(pane); // FIXME each comparment should handle his content pane in his own way 
+			pane.add(((NodeParametersEditPart) childEditPart).getFigure());
+			return true;
+		}
 		return false;
 	}
 
@@ -123,6 +140,13 @@ protected boolean removeFixedChild(EditPart childEditPart) {
 		if (childEditPart instanceof NodeNameEditPart) {
 			return true;
 		}
+		if (childEditPart instanceof NodeParametersEditPart) {
+			IFigure pane = getPrimaryShape()
+					.getFigureParameterCompartmentFigure();
+			setupContentPane(pane); // FIXME each comparment should handle his content pane in his own way 
+			pane.remove(((NodeParametersEditPart) childEditPart).getFigure());
+			return true;
+		}
 		return false;
 	}
 
@@ -150,6 +174,9 @@ protected void removeChildVisual(EditPart childEditPart) {
 	 * @generated
 	 */
 	protected IFigure getContentPaneFor(IGraphicalEditPart editPart) {
+		if (editPart instanceof NodeParametersEditPart) {
+			return getPrimaryShape().getFigureParameterCompartmentFigure();
+		}
 		return getContentPane();
 	}
 
@@ -251,9 +278,11 @@ public EditPart getPrimaryChildEditPart() {
 	 * @generated
 	 */
 	public List<IElementType> getMARelTypesOnSource() {
-		ArrayList<IElementType> types = new ArrayList<IElementType>(2);
-		types.add(RosElementTypes.Subscriber_4001);
-		types.add(RosElementTypes.Publisher_4002);
+		ArrayList<IElementType> types = new ArrayList<IElementType>(4);
+		types.add(RosElementTypes.ServiceClient_4001);
+		types.add(RosElementTypes.Subscriber_4002);
+		types.add(RosElementTypes.ServiceServer_4003);
+		types.add(RosElementTypes.Publisher_4004);
 		return types;
 	}
 
@@ -263,11 +292,17 @@ public List<IElementType> getMARelTypesOnSource() {
 	public List<IElementType> getMARelTypesOnSourceAndTarget(
 			IGraphicalEditPart targetEditPart) {
 		LinkedList<IElementType> types = new LinkedList<IElementType>();
+		if (targetEditPart instanceof ServiceEditPart) {
+			types.add(RosElementTypes.ServiceClient_4001);
+		}
 		if (targetEditPart instanceof TopicEditPart) {
-			types.add(RosElementTypes.Subscriber_4001);
+			types.add(RosElementTypes.Subscriber_4002);
+		}
+		if (targetEditPart instanceof ServiceEditPart) {
+			types.add(RosElementTypes.ServiceServer_4003);
 		}
 		if (targetEditPart instanceof TopicEditPart) {
-			types.add(RosElementTypes.Publisher_4002);
+			types.add(RosElementTypes.Publisher_4004);
 		}
 		return types;
 	}
@@ -277,14 +312,36 @@ public List<IElementType> getMARelTypesOnSourceAndTarget(
 	 */
 	public List<IElementType> getMATypesForTarget(IElementType relationshipType) {
 		LinkedList<IElementType> types = new LinkedList<IElementType>();
-		if (relationshipType == RosElementTypes.Subscriber_4001) {
-			types.add(RosElementTypes.Topic_2001);
-		} else if (relationshipType == RosElementTypes.Publisher_4002) {
-			types.add(RosElementTypes.Topic_2001);
+		if (relationshipType == RosElementTypes.ServiceClient_4001) {
+			types.add(RosElementTypes.Service_2003);
+		} else if (relationshipType == RosElementTypes.Subscriber_4002) {
+			types.add(RosElementTypes.Topic_2002);
+		} else if (relationshipType == RosElementTypes.ServiceServer_4003) {
+			types.add(RosElementTypes.Service_2003);
+		} else if (relationshipType == RosElementTypes.Publisher_4004) {
+			types.add(RosElementTypes.Topic_2002);
 		}
 		return types;
 	}
 
+	/**
+	 * @generated
+	 */
+	public EditPart getTargetEditPart(Request request) {
+		if (request instanceof CreateViewAndElementRequest) {
+			CreateElementRequestAdapter adapter = ((CreateViewAndElementRequest) request)
+					.getViewAndElementDescriptor()
+					.getCreateElementRequestAdapter();
+			IElementType type = (IElementType) adapter
+					.getAdapter(IElementType.class);
+			if (type == RosElementTypes.Parameter_3001) {
+				return getChildBySemanticHint(RosVisualIDRegistry
+						.getType(NodeParametersEditPart.VISUAL_ID));
+			}
+		}
+		return super.getTargetEditPart(request);
+	}
+
 	/**
 	 * @generated
 	 */
@@ -294,21 +351,19 @@ public class NodeFigure extends RectangleFigure {
 		 * @generated
 		 */
 		private WrappingLabel fFigureNodeNameFigure;
+		/**
+		 * @generated
+		 */
+		private RectangleFigure fFigureParameterCompartmentFigure;
 
 		/**
 		 * @generated
 		 */
 		public NodeFigure() {
 
-			FlowLayout layoutThis = new FlowLayout();
-			layoutThis.setStretchMinorAxis(false);
-			layoutThis.setMinorAlignment(FlowLayout.ALIGN_LEFTTOP);
-
-			layoutThis.setMajorAlignment(FlowLayout.ALIGN_LEFTTOP);
-			layoutThis.setMajorSpacing(5);
-			layoutThis.setMinorSpacing(5);
-			layoutThis.setHorizontal(true);
-
+			GridLayout layoutThis = new GridLayout();
+			layoutThis.numColumns = 1;
+			layoutThis.makeColumnsEqualWidth = true;
 			this.setLayoutManager(layoutThis);
 
 			createContents();
@@ -322,7 +377,31 @@ private void createContents() {
 			fFigureNodeNameFigure = new WrappingLabel();
 			fFigureNodeNameFigure.setText("<...>");
 
-			this.add(fFigureNodeNameFigure);
+			GridData constraintFFigureNodeNameFigure = new GridData();
+			constraintFFigureNodeNameFigure.verticalAlignment = GridData.BEGINNING;
+			constraintFFigureNodeNameFigure.horizontalAlignment = GridData.BEGINNING;
+			constraintFFigureNodeNameFigure.horizontalIndent = 0;
+			constraintFFigureNodeNameFigure.horizontalSpan = 1;
+			constraintFFigureNodeNameFigure.verticalSpan = 1;
+			constraintFFigureNodeNameFigure.grabExcessHorizontalSpace = false;
+			constraintFFigureNodeNameFigure.grabExcessVerticalSpace = false;
+			this.add(fFigureNodeNameFigure, constraintFFigureNodeNameFigure);
+
+			fFigureParameterCompartmentFigure = new RectangleFigure();
+
+			GridData constraintFFigureParameterCompartmentFigure = new GridData();
+			constraintFFigureParameterCompartmentFigure.verticalAlignment = GridData.FILL;
+			constraintFFigureParameterCompartmentFigure.horizontalAlignment = GridData.FILL;
+			constraintFFigureParameterCompartmentFigure.horizontalIndent = 0;
+			constraintFFigureParameterCompartmentFigure.horizontalSpan = 1;
+			constraintFFigureParameterCompartmentFigure.verticalSpan = 1;
+			constraintFFigureParameterCompartmentFigure.grabExcessHorizontalSpace = true;
+			constraintFFigureParameterCompartmentFigure.grabExcessVerticalSpace = true;
+			this.add(fFigureParameterCompartmentFigure,
+					constraintFFigureParameterCompartmentFigure);
+
+			fFigureParameterCompartmentFigure
+					.setLayoutManager(new StackLayout());
 
 		}
 
@@ -333,6 +412,13 @@ public WrappingLabel getFigureNodeNameFigure() {
 			return fFigureNodeNameFigure;
 		}
 
+		/**
+		 * @generated
+		 */
+		public RectangleFigure getFigureParameterCompartmentFigure() {
+			return fFigureParameterCompartmentFigure;
+		}
+
 	}
 
 }
https://github.com/ipa320/bride/raw/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fparts%2FNodeEditPart.java
435c79aea640fde2dfca524aafa670fdc01a4d9b
modified
https://github.com/ipa320/bride/blob/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fparts%2FNodeNameEditPart.java
https://api.github.com/repos/ipa320/bride/contents/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fparts%2FNodeNameEditPart.java?ref=01bc5c83c895357f23a345ecec85a3796cf66358
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/edit/parts/NodeNameEditPart.java
	public static final int VISUAL_ID = 5001;
							RosElementTypes.Node_2001,
	public static final int VISUAL_ID = 5002;
							RosElementTypes.Node_2002,
@@ -52,7 +52,7 @@ public class NodeNameEditPart extends CompartmentEditPart implements
 	/**
 	 * @generated
 	 */
-	public static final int VISUAL_ID = 5002;
+	public static final int VISUAL_ID = 5001;
 
 	/**
 	 * @generated
@@ -294,7 +294,7 @@ public IParser getParser() {
 		if (parser == null) {
 			parser = RosParserProvider
 					.getParser(
-							RosElementTypes.Node_2002,
+							RosElementTypes.Node_2001,
 							getParserElement(),
 							RosVisualIDRegistry
 									.getType(org.ros.model.ros.diagram.edit.parts.NodeNameEditPart.VISUAL_ID));
https://github.com/ipa320/bride/raw/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fparts%2FNodeNameEditPart.java
6cd8ef21c826c02819adfd96ccf5c0cf32b2bfc5
modified
https://github.com/ipa320/bride/blob/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fparts%2FPublisherEditPart.java
https://api.github.com/repos/ipa320/bride/contents/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fparts%2FPublisherEditPart.java?ref=01bc5c83c895357f23a345ecec85a3796cf66358
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/edit/parts/PublisherEditPart.java
	public static final int VISUAL_ID = 4004;
	public static final int VISUAL_ID = 4002;
@@ -19,7 +19,7 @@ public class PublisherEditPart extends ConnectionNodeEditPart implements
 	/**
 	 * @generated
 	 */
-	public static final int VISUAL_ID = 4002;
+	public static final int VISUAL_ID = 4004;
 
 	/**
 	 * @generated
https://github.com/ipa320/bride/raw/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fparts%2FPublisherEditPart.java
df0c2574a3cd972f2bdc89d6edf11632e9696325
modified
https://github.com/ipa320/bride/blob/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fparts%2FPublisherNameEditPart.java
https://api.github.com/repos/ipa320/bride/contents/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fparts%2FPublisherNameEditPart.java?ref=01bc5c83c895357f23a345ecec85a3796cf66358
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/edit/parts/PublisherNameEditPart.java
	public static final int VISUAL_ID = 6004;
							RosElementTypes.Publisher_4004,
	public static final int VISUAL_ID = 6002;
							RosElementTypes.Publisher_4002,
@@ -53,7 +53,7 @@ public class PublisherNameEditPart extends LabelEditPart implements
 	/**
 	 * @generated
 	 */
-	public static final int VISUAL_ID = 6002;
+	public static final int VISUAL_ID = 6004;
 
 	/**
 	 * @generated
@@ -312,7 +312,7 @@ public IParser getParser() {
 		if (parser == null) {
 			parser = RosParserProvider
 					.getParser(
-							RosElementTypes.Publisher_4002,
+							RosElementTypes.Publisher_4004,
 							getParserElement(),
 							RosVisualIDRegistry
 									.getType(org.ros.model.ros.diagram.edit.parts.PublisherNameEditPart.VISUAL_ID));
https://github.com/ipa320/bride/raw/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fparts%2FPublisherNameEditPart.java
8a25fa1bd1e65c34de437a76b624b56329b44978
modified
https://github.com/ipa320/bride/blob/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fparts%2FRosEditPartFactory.java
https://api.github.com/repos/ipa320/bride/contents/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fparts%2FRosEditPartFactory.java?ref=01bc5c83c895357f23a345ecec85a3796cf66358
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/edit/parts/RosEditPartFactory.java
			case NodeEditPart.VISUAL_ID:
				return new NodeEditPart(view);

			case NodeNameEditPart.VISUAL_ID:
				return new NodeNameEditPart(view);

			case ServiceEditPart.VISUAL_ID:
				return new ServiceEditPart(view);
			case ServiceNameEditPart.VISUAL_ID:
				return new ServiceNameEditPart(view);

			case ParameterEditPart.VISUAL_ID:
				return new ParameterEditPart(view);

			case NodeParametersEditPart.VISUAL_ID:
				return new NodeParametersEditPart(view);

			case ServiceClientEditPart.VISUAL_ID:
				return new ServiceClientEditPart(view);

			case ServiceClientNameEditPart.VISUAL_ID:
				return new ServiceClientNameEditPart(view);
			case ServiceServerEditPart.VISUAL_ID:
				return new ServiceServerEditPart(view);

			case ServiceServerNameEditPart.VISUAL_ID:
				return new ServiceServerNameEditPart(view);

			case NodeEditPart.VISUAL_ID:
				return new NodeEditPart(view);
			case NodeNameEditPart.VISUAL_ID:
				return new NodeNameEditPart(view);
@@ -31,24 +31,48 @@ public EditPart createEditPart(EditPart context, Object model) {
 			case PackageEditPart.VISUAL_ID:
 				return new PackageEditPart(view);
 
+			case NodeEditPart.VISUAL_ID:
+				return new NodeEditPart(view);
+
+			case NodeNameEditPart.VISUAL_ID:
+				return new NodeNameEditPart(view);
+
 			case TopicEditPart.VISUAL_ID:
 				return new TopicEditPart(view);
 
 			case TopicNameEditPart.VISUAL_ID:
 				return new TopicNameEditPart(view);
 
-			case NodeEditPart.VISUAL_ID:
-				return new NodeEditPart(view);
+			case ServiceEditPart.VISUAL_ID:
+				return new ServiceEditPart(view);
 
-			case NodeNameEditPart.VISUAL_ID:
-				return new NodeNameEditPart(view);
+			case ServiceNameEditPart.VISUAL_ID:
+				return new ServiceNameEditPart(view);
+
+			case ParameterEditPart.VISUAL_ID:
+				return new ParameterEditPart(view);
+
+			case NodeParametersEditPart.VISUAL_ID:
+				return new NodeParametersEditPart(view);
+
+			case ServiceClientEditPart.VISUAL_ID:
+				return new ServiceClientEditPart(view);
+
+			case ServiceClientNameEditPart.VISUAL_ID:
+				return new ServiceClientNameEditPart(view);
 
 			case SubscriberEditPart.VISUAL_ID:
 				return new SubscriberEditPart(view);
 
 			case SubscriberNameEditPart.VISUAL_ID:
 				return new SubscriberNameEditPart(view);
 
+			case ServiceServerEditPart.VISUAL_ID:
+				return new ServiceServerEditPart(view);
+
+			case ServiceServerNameEditPart.VISUAL_ID:
+				return new ServiceServerNameEditPart(view);
+
 			case PublisherEditPart.VISUAL_ID:
 				return new PublisherEditPart(view);
 
https://github.com/ipa320/bride/raw/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fparts%2FRosEditPartFactory.java
e35f857baabf16b99651dca51ae22ea75799eee7
modified
https://github.com/ipa320/bride/blob/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fparts%2FSubscriberEditPart.java
https://api.github.com/repos/ipa320/bride/contents/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fparts%2FSubscriberEditPart.java?ref=01bc5c83c895357f23a345ecec85a3796cf66358
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/edit/parts/SubscriberEditPart.java
	public static final int VISUAL_ID = 4002;
	public static final int VISUAL_ID = 4001;
@@ -19,7 +19,7 @@ public class SubscriberEditPart extends ConnectionNodeEditPart implements
 	/**
 	 * @generated
 	 */
-	public static final int VISUAL_ID = 4001;
+	public static final int VISUAL_ID = 4002;
 
 	/**
 	 * @generated
https://github.com/ipa320/bride/raw/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fparts%2FSubscriberEditPart.java
03e029256922243690d74d83389602d767fd5bc0
modified
https://github.com/ipa320/bride/blob/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fparts%2FSubscriberNameEditPart.java
https://api.github.com/repos/ipa320/bride/contents/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fparts%2FSubscriberNameEditPart.java?ref=01bc5c83c895357f23a345ecec85a3796cf66358
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/edit/parts/SubscriberNameEditPart.java
	public static final int VISUAL_ID = 6002;
							RosElementTypes.Subscriber_4002,
	public static final int VISUAL_ID = 6001;
							RosElementTypes.Subscriber_4001,
@@ -53,7 +53,7 @@ public class SubscriberNameEditPart extends LabelEditPart implements
 	/**
 	 * @generated
 	 */
-	public static final int VISUAL_ID = 6001;
+	public static final int VISUAL_ID = 6002;
 
 	/**
 	 * @generated
@@ -312,7 +312,7 @@ public IParser getParser() {
 		if (parser == null) {
 			parser = RosParserProvider
 					.getParser(
-							RosElementTypes.Subscriber_4001,
+							RosElementTypes.Subscriber_4002,
 							getParserElement(),
 							RosVisualIDRegistry
 									.getType(org.ros.model.ros.diagram.edit.parts.SubscriberNameEditPart.VISUAL_ID));
https://github.com/ipa320/bride/raw/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fparts%2FSubscriberNameEditPart.java
1667237b3add9b90fa1194617a0be0375d719249
modified
https://github.com/ipa320/bride/blob/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fparts%2FTopicEditPart.java
https://api.github.com/repos/ipa320/bride/contents/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fparts%2FTopicEditPart.java?ref=01bc5c83c895357f23a345ecec85a3796cf66358
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/edit/parts/TopicEditPart.java
	public static final int VISUAL_ID = 2002;
		types.add(RosElementTypes.Subscriber_4002);
		types.add(RosElementTypes.Publisher_4004);
		if (relationshipType == RosElementTypes.Subscriber_4002) {
			types.add(RosElementTypes.Node_2001);
		} else if (relationshipType == RosElementTypes.Publisher_4004) {
			types.add(RosElementTypes.Node_2001);
	public static final int VISUAL_ID = 2001;
		types.add(RosElementTypes.Subscriber_4001);
		types.add(RosElementTypes.Publisher_4002);
		if (relationshipType == RosElementTypes.Subscriber_4001) {
			types.add(RosElementTypes.Node_2002);
		} else if (relationshipType == RosElementTypes.Publisher_4002) {
			types.add(RosElementTypes.Node_2002);
@@ -37,7 +37,7 @@ public class TopicEditPart extends ShapeNodeEditPart {
 	/**
 	 * @generated
 	 */
-	public static final int VISUAL_ID = 2001;
+	public static final int VISUAL_ID = 2002;
 
 	/**
 	 * @generated
@@ -253,8 +253,8 @@ public EditPart getPrimaryChildEditPart() {
 	 */
 	public List<IElementType> getMARelTypesOnTarget() {
 		ArrayList<IElementType> types = new ArrayList<IElementType>(2);
-		types.add(RosElementTypes.Subscriber_4001);
-		types.add(RosElementTypes.Publisher_4002);
+		types.add(RosElementTypes.Subscriber_4002);
+		types.add(RosElementTypes.Publisher_4004);
 		return types;
 	}
 
@@ -263,10 +263,10 @@ public List<IElementType> getMARelTypesOnTarget() {
 	 */
 	public List<IElementType> getMATypesForSource(IElementType relationshipType) {
 		LinkedList<IElementType> types = new LinkedList<IElementType>();
-		if (relationshipType == RosElementTypes.Subscriber_4001) {
-			types.add(RosElementTypes.Node_2002);
-		} else if (relationshipType == RosElementTypes.Publisher_4002) {
-			types.add(RosElementTypes.Node_2002);
+		if (relationshipType == RosElementTypes.Subscriber_4002) {
+			types.add(RosElementTypes.Node_2001);
+		} else if (relationshipType == RosElementTypes.Publisher_4004) {
+			types.add(RosElementTypes.Node_2001);
 		}
 		return types;
 	}
https://github.com/ipa320/bride/raw/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fparts%2FTopicEditPart.java
0de7c7b1f813c9ef30a4f2a354e4b79ed195ea85
modified
https://github.com/ipa320/bride/blob/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fparts%2FTopicNameEditPart.java
https://api.github.com/repos/ipa320/bride/contents/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fparts%2FTopicNameEditPart.java?ref=01bc5c83c895357f23a345ecec85a3796cf66358
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/edit/parts/TopicNameEditPart.java
	public static final int VISUAL_ID = 5002;
							RosElementTypes.Topic_2002,
	public static final int VISUAL_ID = 5001;
							RosElementTypes.Topic_2001,
@@ -52,7 +52,7 @@ public class TopicNameEditPart extends CompartmentEditPart implements
 	/**
 	 * @generated
 	 */
-	public static final int VISUAL_ID = 5001;
+	public static final int VISUAL_ID = 5002;
 
 	/**
 	 * @generated
@@ -294,7 +294,7 @@ public IParser getParser() {
 		if (parser == null) {
 			parser = RosParserProvider
 					.getParser(
-							RosElementTypes.Topic_2001,
+							RosElementTypes.Topic_2002,
 							getParserElement(),
 							RosVisualIDRegistry
 									.getType(org.ros.model.ros.diagram.edit.parts.TopicNameEditPart.VISUAL_ID));
https://github.com/ipa320/bride/raw/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fparts%2FTopicNameEditPart.java
860e218a3aecf408b553deadea47a3dc99066590
modified
https://github.com/ipa320/bride/blob/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fpolicies%2FNodeItemSemanticEditPolicy.java
https://api.github.com/repos/ipa320/bride/contents/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fpolicies%2FNodeItemSemanticEditPolicy.java?ref=01bc5c83c895357f23a345ecec85a3796cf66358
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/edit/policies/NodeItemSemanticEditPolicy.java
import org.eclipse.gmf.runtime.common.core.command.ICompositeCommand;
import org.eclipse.gmf.runtime.notation.Node;
import org.ros.model.ros.diagram.edit.commands.ServiceClientCreateCommand;
import org.ros.model.ros.diagram.edit.commands.ServiceClientReorientCommand;
import org.ros.model.ros.diagram.edit.commands.ServiceServerCreateCommand;
import org.ros.model.ros.diagram.edit.commands.ServiceServerReorientCommand;
import org.ros.model.ros.diagram.edit.parts.NodeParametersEditPart;
import org.ros.model.ros.diagram.edit.parts.ParameterEditPart;
import org.ros.model.ros.diagram.edit.parts.ServiceClientEditPart;
import org.ros.model.ros.diagram.edit.parts.ServiceServerEditPart;
		super(RosElementTypes.Node_2001);
			if (RosVisualIDRegistry.getVisualID(outgoingLink) == ServiceClientEditPart.VISUAL_ID) {
				DestroyElementRequest r = new DestroyElementRequest(
						outgoingLink.getElement(), false);
				cmd.add(new DestroyElementCommand(r));
				cmd.add(new DeleteCommand(getEditingDomain(), outgoingLink));
				continue;
			}
			if (RosVisualIDRegistry.getVisualID(outgoingLink) == ServiceServerEditPart.VISUAL_ID) {
				DestroyElementRequest r = new DestroyElementRequest(
						outgoingLink.getElement(), false);
				cmd.add(new DestroyElementCommand(r));
				cmd.add(new DeleteCommand(getEditingDomain(), outgoingLink));
				continue;
			}
			addDestroyChildNodesCommand(cmd);
	/**
	 * @generated
	 */
	private void addDestroyChildNodesCommand(ICompositeCommand cmd) {
		View view = (View) getHost().getModel();
		for (Iterator<?> nit = view.getChildren().iterator(); nit.hasNext();) {
			Node node = (Node) nit.next();
			switch (RosVisualIDRegistry.getVisualID(node)) {
			case NodeParametersEditPart.VISUAL_ID:
				for (Iterator<?> cit = node.getChildren().iterator(); cit
						.hasNext();) {
					Node cnode = (Node) cit.next();
					switch (RosVisualIDRegistry.getVisualID(cnode)) {
					case ParameterEditPart.VISUAL_ID:
						cmd.add(new DestroyElementCommand(
								new DestroyElementRequest(getEditingDomain(),
										cnode.getElement(), false))); // directlyOwned: true
						// don't need explicit deletion of cnode as parent's view deletion would clean child views as well 
						// cmd.add(new org.eclipse.gmf.runtime.diagram.core.commands.DeleteCommand(getEditingDomain(), cnode));
						break;
					}
				}
				break;
			}
		}
	}

		if (RosElementTypes.ServiceClient_4001 == req.getElementType()) {
			return getGEFWrapper(new ServiceClientCreateCommand(req,
					req.getSource(), req.getTarget()));
		}
		if (RosElementTypes.Subscriber_4002 == req.getElementType()) {
		if (RosElementTypes.ServiceServer_4003 == req.getElementType()) {
			return getGEFWrapper(new ServiceServerCreateCommand(req,
					req.getSource(), req.getTarget()));
		}
		if (RosElementTypes.Publisher_4004 == req.getElementType()) {
		if (RosElementTypes.ServiceClient_4001 == req.getElementType()) {
			return null;
		}
		if (RosElementTypes.Subscriber_4002 == req.getElementType()) {
			return null;
		}
		if (RosElementTypes.ServiceServer_4003 == req.getElementType()) {
		if (RosElementTypes.Publisher_4004 == req.getElementType()) {
		case ServiceClientEditPart.VISUAL_ID:
			return getGEFWrapper(new ServiceClientReorientCommand(req));
		case ServiceServerEditPart.VISUAL_ID:
			return getGEFWrapper(new ServiceServerReorientCommand(req));
ICompositeCommand cmd
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/edit/policies/NodeItemSemanticEditPolicy.java
View view = (View) getHost().getModel();
		for (Iterator<?> nit = view.getChildren().iterator(); nit.hasNext();) {
			Node node = (Node) nit.next();
			switch (RosVisualIDRegistry.getVisualID(node)) {
			case NodeParametersEditPart.VISUAL_ID:
				for (Iterator<?> cit = node.getChildren().iterator(); cit
						.hasNext();) {
					Node cnode = (Node) cit.next();
					switch (RosVisualIDRegistry.getVisualID(cnode)) {
					case ParameterEditPart.VISUAL_ID:
						cmd.add(new DestroyElementCommand(
								new DestroyElementRequest(getEditingDomain(),
										cnode.getElement(), false))); // directlyOwned: true
						// don't need explicit deletion of cnode as parent's view deletion would clean child views as well 
						// cmd.add(new org.eclipse.gmf.runtime.diagram.core.commands.DeleteCommand(getEditingDomain(), cnode));
						break;
void addDestroyChildNodesCommand(ICompositeCommand cmd)
		super(RosElementTypes.Node_2002);
		if (RosElementTypes.Subscriber_4001 == req.getElementType()) {
		if (RosElementTypes.Publisher_4002 == req.getElementType()) {
		if (RosElementTypes.Subscriber_4001 == req.getElementType()) {
		if (RosElementTypes.Publisher_4002 == req.getElementType()) {
@@ -4,19 +4,29 @@
 
 import org.eclipse.emf.ecore.EAnnotation;
 import org.eclipse.gef.commands.Command;
+import org.eclipse.gmf.runtime.common.core.command.ICompositeCommand;
 import org.eclipse.gmf.runtime.diagram.core.commands.DeleteCommand;
 import org.eclipse.gmf.runtime.emf.commands.core.command.CompositeTransactionalCommand;
 import org.eclipse.gmf.runtime.emf.type.core.commands.DestroyElementCommand;
 import org.eclipse.gmf.runtime.emf.type.core.requests.CreateRelationshipRequest;
 import org.eclipse.gmf.runtime.emf.type.core.requests.DestroyElementRequest;
 import org.eclipse.gmf.runtime.emf.type.core.requests.ReorientRelationshipRequest;
 import org.eclipse.gmf.runtime.notation.Edge;
+import org.eclipse.gmf.runtime.notation.Node;
 import org.eclipse.gmf.runtime.notation.View;
 import org.ros.model.ros.diagram.edit.commands.PublisherCreateCommand;
 import org.ros.model.ros.diagram.edit.commands.PublisherReorientCommand;
+import org.ros.model.ros.diagram.edit.commands.ServiceClientCreateCommand;
+import org.ros.model.ros.diagram.edit.commands.ServiceClientReorientCommand;
+import org.ros.model.ros.diagram.edit.commands.ServiceServerCreateCommand;
+import org.ros.model.ros.diagram.edit.commands.ServiceServerReorientCommand;
 import org.ros.model.ros.diagram.edit.commands.SubscriberCreateCommand;
 import org.ros.model.ros.diagram.edit.commands.SubscriberReorientCommand;
+import org.ros.model.ros.diagram.edit.parts.NodeParametersEditPart;
+import org.ros.model.ros.diagram.edit.parts.ParameterEditPart;
 import org.ros.model.ros.diagram.edit.parts.PublisherEditPart;
+import org.ros.model.ros.diagram.edit.parts.ServiceClientEditPart;
+import org.ros.model.ros.diagram.edit.parts.ServiceServerEditPart;
 import org.ros.model.ros.diagram.edit.parts.SubscriberEditPart;
 import org.ros.model.ros.diagram.part.RosVisualIDRegistry;
 import org.ros.model.ros.diagram.providers.RosElementTypes;
@@ -30,7 +40,7 @@ public class NodeItemSemanticEditPolicy extends RosBaseItemSemanticEditPolicy {
 	 * @generated
 	 */
 	public NodeItemSemanticEditPolicy() {
-		super(RosElementTypes.Node_2002);
+		super(RosElementTypes.Node_2001);
 	}
 
 	/**
@@ -43,13 +53,27 @@ protected Command getDestroyElementCommand(DestroyElementRequest req) {
 		cmd.setTransactionNestingEnabled(false);
 		for (Iterator<?> it = view.getSourceEdges().iterator(); it.hasNext();) {
 			Edge outgoingLink = (Edge) it.next();
+			if (RosVisualIDRegistry.getVisualID(outgoingLink) == ServiceClientEditPart.VISUAL_ID) {
+				DestroyElementRequest r = new DestroyElementRequest(
+						outgoingLink.getElement(), false);
+				cmd.add(new DestroyElementCommand(r));
+				cmd.add(new DeleteCommand(getEditingDomain(), outgoingLink));
+				continue;
+			}
 			if (RosVisualIDRegistry.getVisualID(outgoingLink) == SubscriberEditPart.VISUAL_ID) {
 				DestroyElementRequest r = new DestroyElementRequest(
 						outgoingLink.getElement(), false);
 				cmd.add(new DestroyElementCommand(r));
 				cmd.add(new DeleteCommand(getEditingDomain(), outgoingLink));
 				continue;
 			}
+			if (RosVisualIDRegistry.getVisualID(outgoingLink) == ServiceServerEditPart.VISUAL_ID) {
+				DestroyElementRequest r = new DestroyElementRequest(
+						outgoingLink.getElement(), false);
+				cmd.add(new DestroyElementCommand(r));
+				cmd.add(new DeleteCommand(getEditingDomain(), outgoingLink));
+				continue;
+			}
 			if (RosVisualIDRegistry.getVisualID(outgoingLink) == PublisherEditPart.VISUAL_ID) {
 				DestroyElementRequest r = new DestroyElementRequest(
 						outgoingLink.getElement(), false);
@@ -61,6 +85,7 @@ protected Command getDestroyElementCommand(DestroyElementRequest req) {
 		EAnnotation annotation = view.getEAnnotation("Shortcut"); //$NON-NLS-1$
 		if (annotation == null) {
 			// there are indirectly referenced children, need extra commands: false
+			addDestroyChildNodesCommand(cmd);
 			addDestroyShortcutsCommand(cmd, view);
 			// delete host element
 			cmd.add(new DestroyElementCommand(req));
@@ -70,6 +95,33 @@ protected Command getDestroyElementCommand(DestroyElementRequest req) {
 		return getGEFWrapper(cmd.reduce());
 	}
 
+	/**
+	 * @generated
+	 */
+	private void addDestroyChildNodesCommand(ICompositeCommand cmd) {
+		View view = (View) getHost().getModel();
+		for (Iterator<?> nit = view.getChildren().iterator(); nit.hasNext();) {
+			Node node = (Node) nit.next();
+			switch (RosVisualIDRegistry.getVisualID(node)) {
+			case NodeParametersEditPart.VISUAL_ID:
+				for (Iterator<?> cit = node.getChildren().iterator(); cit
+						.hasNext();) {
+					Node cnode = (Node) cit.next();
+					switch (RosVisualIDRegistry.getVisualID(cnode)) {
+					case ParameterEditPart.VISUAL_ID:
+						cmd.add(new DestroyElementCommand(
+								new DestroyElementRequest(getEditingDomain(),
+										cnode.getElement(), false))); // directlyOwned: true
+						// don't need explicit deletion of cnode as parent's view deletion would clean child views as well 
+						// cmd.add(new org.eclipse.gmf.runtime.diagram.core.commands.DeleteCommand(getEditingDomain(), cnode));
+						break;
+					}
+				}
+				break;
+			}
+		}
+	}
+
 	/**
 	 * @generated
 	 */
@@ -85,11 +137,19 @@ protected Command getCreateRelationshipCommand(CreateRelationshipRequest req) {
 	 */
 	protected Command getStartCreateRelationshipCommand(
 			CreateRelationshipRequest req) {
-		if (RosElementTypes.Subscriber_4001 == req.getElementType()) {
+		if (RosElementTypes.ServiceClient_4001 == req.getElementType()) {
+			return getGEFWrapper(new ServiceClientCreateCommand(req,
+					req.getSource(), req.getTarget()));
+		}
+		if (RosElementTypes.Subscriber_4002 == req.getElementType()) {
 			return getGEFWrapper(new SubscriberCreateCommand(req,
 					req.getSource(), req.getTarget()));
 		}
-		if (RosElementTypes.Publisher_4002 == req.getElementType()) {
+		if (RosElementTypes.ServiceServer_4003 == req.getElementType()) {
+			return getGEFWrapper(new ServiceServerCreateCommand(req,
+					req.getSource(), req.getTarget()));
+		}
+		if (RosElementTypes.Publisher_4004 == req.getElementType()) {
 			return getGEFWrapper(new PublisherCreateCommand(req,
 					req.getSource(), req.getTarget()));
 		}
@@ -101,10 +161,16 @@ protected Command getStartCreateRelationshipCommand(
 	 */
 	protected Command getCompleteCreateRelationshipCommand(
 			CreateRelationshipRequest req) {
-		if (RosElementTypes.Subscriber_4001 == req.getElementType()) {
+		if (RosElementTypes.ServiceClient_4001 == req.getElementType()) {
+			return null;
+		}
+		if (RosElementTypes.Subscriber_4002 == req.getElementType()) {
+			return null;
+		}
+		if (RosElementTypes.ServiceServer_4003 == req.getElementType()) {
 			return null;
 		}
-		if (RosElementTypes.Publisher_4002 == req.getElementType()) {
+		if (RosElementTypes.Publisher_4004 == req.getElementType()) {
 			return null;
 		}
 		return null;
@@ -119,8 +185,12 @@ protected Command getCompleteCreateRelationshipCommand(
 	protected Command getReorientRelationshipCommand(
 			ReorientRelationshipRequest req) {
 		switch (getVisualID(req)) {
+		case ServiceClientEditPart.VISUAL_ID:
+			return getGEFWrapper(new ServiceClientReorientCommand(req));
 		case SubscriberEditPart.VISUAL_ID:
 			return getGEFWrapper(new SubscriberReorientCommand(req));
+		case ServiceServerEditPart.VISUAL_ID:
+			return getGEFWrapper(new ServiceServerReorientCommand(req));
 		case PublisherEditPart.VISUAL_ID:
 			return getGEFWrapper(new PublisherReorientCommand(req));
 		}
https://github.com/ipa320/bride/raw/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fpolicies%2FNodeItemSemanticEditPolicy.java
a2570581d899d90b3bb6784d83271799d56f7be3
modified
https://github.com/ipa320/bride/blob/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fpolicies%2FPackageCanonicalEditPolicy.java
https://api.github.com/repos/ipa320/bride/contents/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fpolicies%2FPackageCanonicalEditPolicy.java?ref=01bc5c83c895357f23a345ecec85a3796cf66358
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/edit/policies/PackageCanonicalEditPolicy.java
import org.ros.model.ros.diagram.edit.parts.ServiceClientEditPart;
import org.ros.model.ros.diagram.edit.parts.ServiceEditPart;
import org.ros.model.ros.diagram.edit.parts.ServiceServerEditPart;
			myFeaturesToSynchronize.add(RosPackage.eINSTANCE.getPackage_Node());
			myFeaturesToSynchronize.add(RosPackage.eINSTANCE
					.getPackage_Service());
		return visualID == NodeEditPart.VISUAL_ID
				|| visualID == TopicEditPart.VISUAL_ID
				|| visualID == ServiceEditPart.VISUAL_ID;
		case NodeEditPart.VISUAL_ID: {
			if (!domain2NotationMap.containsKey(view.getElement())) {
				result.addAll(RosDiagramUpdater
						.getNode_2001ContainedLinks(view));
			}
			if (!domain2NotationMap.containsKey(view.getElement())
					|| view.getEAnnotation("Shortcut") == null) { //$NON-NLS-1$
				domain2NotationMap.put(view.getElement(), view);
			}
			break;
		}
						.getTopic_2002ContainedLinks(view));
		case ServiceEditPart.VISUAL_ID: {
						.getService_2003ContainedLinks(view));
			}
			if (!domain2NotationMap.containsKey(view.getElement())
					|| view.getEAnnotation("Shortcut") == null) { //$NON-NLS-1$
				domain2NotationMap.put(view.getElement(), view);
			}
			break;
		}
		case ServiceClientEditPart.VISUAL_ID: {
			if (!domain2NotationMap.containsKey(view.getElement())) {
				result.addAll(RosDiagramUpdater
						.getServiceClient_4001ContainedLinks(view));
						.getSubscriber_4002ContainedLinks(view));
			}
			if (!domain2NotationMap.containsKey(view.getElement())
					|| view.getEAnnotation("Shortcut") == null) { //$NON-NLS-1$
				domain2NotationMap.put(view.getElement(), view);
			}
			break;
		}
		case ServiceServerEditPart.VISUAL_ID: {
			if (!domain2NotationMap.containsKey(view.getElement())) {
				result.addAll(RosDiagramUpdater
						.getServiceServer_4003ContainedLinks(view));
						.getPublisher_4004ContainedLinks(view));
			myFeaturesToSynchronize.add(RosPackage.eINSTANCE.getPackage_Node());
		return visualID == TopicEditPart.VISUAL_ID
				|| visualID == NodeEditPart.VISUAL_ID;
						.getTopic_2001ContainedLinks(view));
		case NodeEditPart.VISUAL_ID: {
						.getNode_2002ContainedLinks(view));
						.getSubscriber_4001ContainedLinks(view));
						.getPublisher_4002ContainedLinks(view));
@@ -34,6 +34,9 @@
 import org.ros.model.ros.diagram.edit.parts.NodeEditPart;
 import org.ros.model.ros.diagram.edit.parts.PackageEditPart;
 import org.ros.model.ros.diagram.edit.parts.PublisherEditPart;
+import org.ros.model.ros.diagram.edit.parts.ServiceClientEditPart;
+import org.ros.model.ros.diagram.edit.parts.ServiceEditPart;
+import org.ros.model.ros.diagram.edit.parts.ServiceServerEditPart;
 import org.ros.model.ros.diagram.edit.parts.SubscriberEditPart;
 import org.ros.model.ros.diagram.edit.parts.TopicEditPart;
 import org.ros.model.ros.diagram.part.RosDiagramUpdater;
@@ -69,9 +72,11 @@ protected void refreshOnActivate() {
 	protected Set getFeaturesToSynchronize() {
 		if (myFeaturesToSynchronize == null) {
 			myFeaturesToSynchronize = new HashSet<EStructuralFeature>();
+			myFeaturesToSynchronize.add(RosPackage.eINSTANCE.getPackage_Node());
 			myFeaturesToSynchronize
 					.add(RosPackage.eINSTANCE.getPackage_Topic());
-			myFeaturesToSynchronize.add(RosPackage.eINSTANCE.getPackage_Node());
+			myFeaturesToSynchronize.add(RosPackage.eINSTANCE
+					.getPackage_Service());
 		}
 		return myFeaturesToSynchronize;
 	}
@@ -105,8 +110,9 @@ protected boolean isOrphaned(Collection<EObject> semanticChildren,
 	 */
 	private boolean isMyDiagramElement(View view) {
 		int visualID = RosVisualIDRegistry.getVisualID(view);
-		return visualID == TopicEditPart.VISUAL_ID
-				|| visualID == NodeEditPart.VISUAL_ID;
+		return visualID == NodeEditPart.VISUAL_ID
+				|| visualID == TopicEditPart.VISUAL_ID
+				|| visualID == ServiceEditPart.VISUAL_ID;
 	}
 
 	/**
@@ -265,21 +271,43 @@ private Collection<RosLinkDescriptor> collectAllLinks(View view,
 			}
 			break;
 		}
+		case NodeEditPart.VISUAL_ID: {
+			if (!domain2NotationMap.containsKey(view.getElement())) {
+				result.addAll(RosDiagramUpdater
+						.getNode_2001ContainedLinks(view));
+			}
+			if (!domain2NotationMap.containsKey(view.getElement())
+					|| view.getEAnnotation("Shortcut") == null) { //$NON-NLS-1$
+				domain2NotationMap.put(view.getElement(), view);
+			}
+			break;
+		}
 		case TopicEditPart.VISUAL_ID: {
 			if (!domain2NotationMap.containsKey(view.getElement())) {
 				result.addAll(RosDiagramUpdater
-						.getTopic_2001ContainedLinks(view));
+						.getTopic_2002ContainedLinks(view));
 			}
 			if (!domain2NotationMap.containsKey(view.getElement())
 					|| view.getEAnnotation("Shortcut") == null) { //$NON-NLS-1$
 				domain2NotationMap.put(view.getElement(), view);
 			}
 			break;
 		}
-		case NodeEditPart.VISUAL_ID: {
+		case ServiceEditPart.VISUAL_ID: {
 			if (!domain2NotationMap.containsKey(view.getElement())) {
 				result.addAll(RosDiagramUpdater
-						.getNode_2002ContainedLinks(view));
+						.getService_2003ContainedLinks(view));
+			}
+			if (!domain2NotationMap.containsKey(view.getElement())
+					|| view.getEAnnotation("Shortcut") == null) { //$NON-NLS-1$
+				domain2NotationMap.put(view.getElement(), view);
+			}
+			break;
+		}
+		case ServiceClientEditPart.VISUAL_ID: {
+			if (!domain2NotationMap.containsKey(view.getElement())) {
+				result.addAll(RosDiagramUpdater
+						.getServiceClient_4001ContainedLinks(view));
 			}
 			if (!domain2NotationMap.containsKey(view.getElement())
 					|| view.getEAnnotation("Shortcut") == null) { //$NON-NLS-1$
@@ -290,7 +318,18 @@ private Collection<RosLinkDescriptor> collectAllLinks(View view,
 		case SubscriberEditPart.VISUAL_ID: {
 			if (!domain2NotationMap.containsKey(view.getElement())) {
 				result.addAll(RosDiagramUpdater
-						.getSubscriber_4001ContainedLinks(view));
+						.getSubscriber_4002ContainedLinks(view));
+			}
+			if (!domain2NotationMap.containsKey(view.getElement())
+					|| view.getEAnnotation("Shortcut") == null) { //$NON-NLS-1$
+				domain2NotationMap.put(view.getElement(), view);
+			}
+			break;
+		}
+		case ServiceServerEditPart.VISUAL_ID: {
+			if (!domain2NotationMap.containsKey(view.getElement())) {
+				result.addAll(RosDiagramUpdater
+						.getServiceServer_4003ContainedLinks(view));
 			}
 			if (!domain2NotationMap.containsKey(view.getElement())
 					|| view.getEAnnotation("Shortcut") == null) { //$NON-NLS-1$
@@ -301,7 +340,7 @@ private Collection<RosLinkDescriptor> collectAllLinks(View view,
 		case PublisherEditPart.VISUAL_ID: {
 			if (!domain2NotationMap.containsKey(view.getElement())) {
 				result.addAll(RosDiagramUpdater
-						.getPublisher_4002ContainedLinks(view));
+						.getPublisher_4004ContainedLinks(view));
 			}
 			if (!domain2NotationMap.containsKey(view.getElement())
 					|| view.getEAnnotation("Shortcut") == null) { //$NON-NLS-1$
https://github.com/ipa320/bride/raw/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fpolicies%2FPackageCanonicalEditPolicy.java
614443e8856856c99e58dce0c99427c15c9dbfec
modified
https://github.com/ipa320/bride/blob/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fpolicies%2FPackageItemSemanticEditPolicy.java
https://api.github.com/repos/ipa320/bride/contents/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fpolicies%2FPackageItemSemanticEditPolicy.java?ref=01bc5c83c895357f23a345ecec85a3796cf66358
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/edit/policies/PackageItemSemanticEditPolicy.java
import org.ros.model.ros.diagram.edit.commands.ServiceCreateCommand;
		if (RosElementTypes.Node_2001 == req.getElementType()) {
			return getGEFWrapper(new NodeCreateCommand(req));
		}
		if (RosElementTypes.Topic_2002 == req.getElementType()) {
		if (RosElementTypes.Service_2003 == req.getElementType()) {
			return getGEFWrapper(new ServiceCreateCommand(req));
		if (RosElementTypes.Topic_2001 == req.getElementType()) {
		if (RosElementTypes.Node_2002 == req.getElementType()) {
			return getGEFWrapper(new NodeCreateCommand(req));
@@ -7,6 +7,7 @@
 import org.eclipse.gmf.runtime.emf.type.core.requests.CreateElementRequest;
 import org.eclipse.gmf.runtime.emf.type.core.requests.DuplicateElementsRequest;
 import org.ros.model.ros.diagram.edit.commands.NodeCreateCommand;
+import org.ros.model.ros.diagram.edit.commands.ServiceCreateCommand;
 import org.ros.model.ros.diagram.edit.commands.TopicCreateCommand;
 import org.ros.model.ros.diagram.providers.RosElementTypes;
 
@@ -27,11 +28,14 @@ public PackageItemSemanticEditPolicy() {
 	 * @generated
 	 */
 	protected Command getCreateCommand(CreateElementRequest req) {
-		if (RosElementTypes.Topic_2001 == req.getElementType()) {
+		if (RosElementTypes.Node_2001 == req.getElementType()) {
+			return getGEFWrapper(new NodeCreateCommand(req));
+		}
+		if (RosElementTypes.Topic_2002 == req.getElementType()) {
 			return getGEFWrapper(new TopicCreateCommand(req));
 		}
-		if (RosElementTypes.Node_2002 == req.getElementType()) {
-			return getGEFWrapper(new NodeCreateCommand(req));
+		if (RosElementTypes.Service_2003 == req.getElementType()) {
+			return getGEFWrapper(new ServiceCreateCommand(req));
 		}
 		return super.getCreateCommand(req);
 	}
https://github.com/ipa320/bride/raw/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fpolicies%2FPackageItemSemanticEditPolicy.java
aafd0c3c68c386a3440c5c897486936916daadb2
modified
https://github.com/ipa320/bride/blob/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fpolicies%2FPublisherItemSemanticEditPolicy.java
https://api.github.com/repos/ipa320/bride/contents/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fpolicies%2FPublisherItemSemanticEditPolicy.java?ref=01bc5c83c895357f23a345ecec85a3796cf66358
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/edit/policies/PublisherItemSemanticEditPolicy.java
		super(RosElementTypes.Publisher_4004);
		super(RosElementTypes.Publisher_4002);
@@ -15,7 +15,7 @@ public class PublisherItemSemanticEditPolicy extends
 	 * @generated
 	 */
 	public PublisherItemSemanticEditPolicy() {
-		super(RosElementTypes.Publisher_4002);
+		super(RosElementTypes.Publisher_4004);
 	}
 
 	/**
https://github.com/ipa320/bride/raw/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fpolicies%2FPublisherItemSemanticEditPolicy.java
a8b6e3d3854c9c072cee50225ac06629b1ad2f97
modified
https://github.com/ipa320/bride/blob/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fpolicies%2FRosBaseItemSemanticEditPolicy.java
https://api.github.com/repos/ipa320/bride/contents/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fpolicies%2FRosBaseItemSemanticEditPolicy.java?ref=01bc5c83c895357f23a345ecec85a3796cf66358
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/edit/policies/RosBaseItemSemanticEditPolicy.java
import org.ros.model.ros.Service;
import org.ros.model.ros.ServiceClient;
import org.ros.model.ros.ServiceServer;
		public boolean canCreateServiceClient_4001(Node source, Service target) {
			return canExistServiceClient_4001(null, source, target);
		public boolean canCreateSubscriber_4002(Node source, Topic target) {
			return canExistSubscriber_4002(null, source, target);
		public boolean canCreateServiceServer_4003(Node source, Service target) {
			return canExistServiceServer_4003(null, source, target);
		}

		/**
		 * @generated
		 */
		public boolean canCreatePublisher_4004(Node source, Topic target) {
			return canExistPublisher_4004(null, source, target);
		}

		/**
		 * @generated
		 */
		public boolean canExistServiceClient_4001(ServiceClient linkInstance,
				Node source, Service target) {
			return true;
		}

		/**
		 * @generated
		 */
		public boolean canExistSubscriber_4002(Subscriber linkInstance,
		public boolean canExistServiceServer_4003(ServiceServer linkInstance,
				Node source, Service target) {
			return true;
		}

		/**
		 * @generated
		 */
		public boolean canExistPublisher_4004(Publisher linkInstance,
Node source  Service target
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/edit/policies/RosBaseItemSemanticEditPolicy.java
return canExistServiceClient_4001(null, source, target);
		public boolean canCreateSubscriber_4002(Node source, Topic target) {
			return canExistSubscriber_4002(null, source, target);
		public boolean canCreateServiceServer_4003(Node source, Service target) {
			return canExistServiceServer_4003(null, source, target);
boolean canCreateServiceClient_4001(Node source, Service target)
Node source  Topic target
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/edit/policies/RosBaseItemSemanticEditPolicy.java
return canExistPublisher_4004(null, source, target);
boolean canCreatePublisher_4004(Node source, Topic target)
ServiceClient linkInstance 
				Node source  Service target
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/edit/policies/RosBaseItemSemanticEditPolicy.java
return true;
boolean canExistServiceClient_4001(ServiceClient linkInstance,
				Node source, Service target)
Subscriber linkInstance 
		public boolean canExistServiceServer_4003
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/edit/policies/RosBaseItemSemanticEditPolicy.java
return true;
boolean canExistSubscriber_4002(Subscriber linkInstance,
		public boolean canExistServiceServer_4003(ServiceServer linkInstance,
				Node source, Service target)
		public boolean canCreateSubscriber_4001(Node source, Topic target) {
			return canExistSubscriber_4001(null, source, target);
		public boolean canCreatePublisher_4002(Node source, Topic target) {
			return canExistPublisher_4002(null, source, target);
		public boolean canExistSubscriber_4001(Subscriber linkInstance,
		public boolean canExistPublisher_4002(Publisher linkInstance,
@@ -32,6 +32,9 @@
 import org.eclipse.gmf.runtime.notation.View;
 import org.ros.model.ros.Node;
 import org.ros.model.ros.Publisher;
+import org.ros.model.ros.Service;
+import org.ros.model.ros.ServiceClient;
+import org.ros.model.ros.ServiceServer;
 import org.ros.model.ros.Subscriber;
 import org.ros.model.ros.Topic;
 import org.ros.model.ros.diagram.edit.helpers.RosBaseEditHelper;
@@ -324,29 +327,59 @@ public static class LinkConstraints {
 		/**
 		 * @generated
 		 */
-		public boolean canCreateSubscriber_4001(Node source, Topic target) {
-			return canExistSubscriber_4001(null, source, target);
+		public boolean canCreateServiceClient_4001(Node source, Service target) {
+			return canExistServiceClient_4001(null, source, target);
 		}
 
 		/**
 		 * @generated
 		 */
-		public boolean canCreatePublisher_4002(Node source, Topic target) {
-			return canExistPublisher_4002(null, source, target);
+		public boolean canCreateSubscriber_4002(Node source, Topic target) {
+			return canExistSubscriber_4002(null, source, target);
 		}
 
 		/**
 		 * @generated
 		 */
-		public boolean canExistSubscriber_4001(Subscriber linkInstance,
+		public boolean canCreateServiceServer_4003(Node source, Service target) {
+			return canExistServiceServer_4003(null, source, target);
+		}
+
+		/**
+		 * @generated
+		 */
+		public boolean canCreatePublisher_4004(Node source, Topic target) {
+			return canExistPublisher_4004(null, source, target);
+		}
+
+		/**
+		 * @generated
+		 */
+		public boolean canExistServiceClient_4001(ServiceClient linkInstance,
+				Node source, Service target) {
+			return true;
+		}
+
+		/**
+		 * @generated
+		 */
+		public boolean canExistSubscriber_4002(Subscriber linkInstance,
 				Node source, Topic target) {
 			return true;
 		}
 
 		/**
 		 * @generated
 		 */
-		public boolean canExistPublisher_4002(Publisher linkInstance,
+		public boolean canExistServiceServer_4003(ServiceServer linkInstance,
+				Node source, Service target) {
+			return true;
+		}
+
+		/**
+		 * @generated
+		 */
+		public boolean canExistPublisher_4004(Publisher linkInstance,
 				Node source, Topic target) {
 			return true;
 		}
https://github.com/ipa320/bride/raw/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fpolicies%2FRosBaseItemSemanticEditPolicy.java
ec6c0b0bfed23dabcdfaeab7bf554acadf0df82c
modified
https://github.com/ipa320/bride/blob/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fpolicies%2FSubscriberItemSemanticEditPolicy.java
https://api.github.com/repos/ipa320/bride/contents/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fpolicies%2FSubscriberItemSemanticEditPolicy.java?ref=01bc5c83c895357f23a345ecec85a3796cf66358
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/edit/policies/SubscriberItemSemanticEditPolicy.java
		super(RosElementTypes.Subscriber_4002);
		super(RosElementTypes.Subscriber_4001);
@@ -15,7 +15,7 @@ public class SubscriberItemSemanticEditPolicy extends
 	 * @generated
 	 */
 	public SubscriberItemSemanticEditPolicy() {
-		super(RosElementTypes.Subscriber_4001);
+		super(RosElementTypes.Subscriber_4002);
 	}
 
 	/**
https://github.com/ipa320/bride/raw/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fpolicies%2FSubscriberItemSemanticEditPolicy.java
2d4a514600b02bd0275117d6bb02824ef24f7ecf
modified
https://github.com/ipa320/bride/blob/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fpolicies%2FTopicItemSemanticEditPolicy.java
https://api.github.com/repos/ipa320/bride/contents/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fpolicies%2FTopicItemSemanticEditPolicy.java?ref=01bc5c83c895357f23a345ecec85a3796cf66358
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/edit/policies/TopicItemSemanticEditPolicy.java
		super(RosElementTypes.Topic_2002);
		if (RosElementTypes.Subscriber_4002 == req.getElementType()) {
		if (RosElementTypes.Publisher_4004 == req.getElementType()) {
		if (RosElementTypes.Subscriber_4002 == req.getElementType()) {
		if (RosElementTypes.Publisher_4004 == req.getElementType()) {
		super(RosElementTypes.Topic_2001);
		if (RosElementTypes.Subscriber_4001 == req.getElementType()) {
		if (RosElementTypes.Publisher_4002 == req.getElementType()) {
		if (RosElementTypes.Subscriber_4001 == req.getElementType()) {
		if (RosElementTypes.Publisher_4002 == req.getElementType()) {
@@ -30,7 +30,7 @@ public class TopicItemSemanticEditPolicy extends RosBaseItemSemanticEditPolicy {
 	 * @generated
 	 */
 	public TopicItemSemanticEditPolicy() {
-		super(RosElementTypes.Topic_2001);
+		super(RosElementTypes.Topic_2002);
 	}
 
 	/**
@@ -85,10 +85,10 @@ protected Command getCreateRelationshipCommand(CreateRelationshipRequest req) {
 	 */
 	protected Command getStartCreateRelationshipCommand(
 			CreateRelationshipRequest req) {
-		if (RosElementTypes.Subscriber_4001 == req.getElementType()) {
+		if (RosElementTypes.Subscriber_4002 == req.getElementType()) {
 			return null;
 		}
-		if (RosElementTypes.Publisher_4002 == req.getElementType()) {
+		if (RosElementTypes.Publisher_4004 == req.getElementType()) {
 			return null;
 		}
 		return null;
@@ -99,11 +99,11 @@ protected Command getStartCreateRelationshipCommand(
 	 */
 	protected Command getCompleteCreateRelationshipCommand(
 			CreateRelationshipRequest req) {
-		if (RosElementTypes.Subscriber_4001 == req.getElementType()) {
+		if (RosElementTypes.Subscriber_4002 == req.getElementType()) {
 			return getGEFWrapper(new SubscriberCreateCommand(req,
 					req.getSource(), req.getTarget()));
 		}
-		if (RosElementTypes.Publisher_4002 == req.getElementType()) {
+		if (RosElementTypes.Publisher_4004 == req.getElementType()) {
 			return getGEFWrapper(new PublisherCreateCommand(req,
 					req.getSource(), req.getTarget()));
 		}
https://github.com/ipa320/bride/raw/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fedit%2Fpolicies%2FTopicItemSemanticEditPolicy.java
412441a8c93312061f8f378dc13a9ce02f3a948b
modified
https://github.com/ipa320/bride/blob/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fnavigator%2FRosNavigatorContentProvider.java
https://api.github.com/repos/ipa320/bride/contents/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fnavigator%2FRosNavigatorContentProvider.java?ref=01bc5c83c895357f23a345ecec85a3796cf66358
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/navigator/RosNavigatorContentProvider.java
import org.ros.model.ros.diagram.edit.parts.NodeParametersEditPart;
import org.ros.model.ros.diagram.edit.parts.ParameterEditPart;
import org.ros.model.ros.diagram.edit.parts.ServiceClientEditPart;
import org.ros.model.ros.diagram.edit.parts.ServiceEditPart;
import org.ros.model.ros.diagram.edit.parts.ServiceServerEditPart;
			connectedViews = getChildrenByType(Collections.singleton(sv),
					RosVisualIDRegistry.getType(NodeEditPart.VISUAL_ID));
			result.addAll(createNavigatorItems(connectedViews, parentElement,
					false));
					RosVisualIDRegistry.getType(ServiceEditPart.VISUAL_ID));
			connectedViews = getDiagramLinksByType(Collections.singleton(sv),
					RosVisualIDRegistry
							.getType(ServiceClientEditPart.VISUAL_ID));
			links.addChildren(createNavigatorItems(connectedViews, links, false));
			connectedViews = getDiagramLinksByType(Collections.singleton(sv),
					RosVisualIDRegistry
							.getType(ServiceServerEditPart.VISUAL_ID));
			links.addChildren(createNavigatorItems(connectedViews, links, false));
					Messages.NavigatorGroupName_Subscriber_4002_target,
					Messages.NavigatorGroupName_Subscriber_4002_source,
					Messages.NavigatorGroupName_Topic_2002_incominglinks,
		case ServiceEditPart.VISUAL_ID: {
			LinkedList<RosAbstractNavigatorItem> result = new LinkedList<RosAbstractNavigatorItem>();
			Node sv = (Node) view;
			RosNavigatorGroup incominglinks = new RosNavigatorGroup(
					Messages.NavigatorGroupName_Service_2003_incominglinks,
					"icons/incomingLinksNavigatorGroup.gif", parentElement); //$NON-NLS-1$
			Collection<View> connectedViews;
			connectedViews = getIncomingLinksByType(Collections.singleton(sv),
					RosVisualIDRegistry
							.getType(ServiceClientEditPart.VISUAL_ID));
			incominglinks.addChildren(createNavigatorItems(connectedViews,
					incominglinks, true));
			connectedViews = getIncomingLinksByType(Collections.singleton(sv),
					RosVisualIDRegistry
							.getType(ServiceServerEditPart.VISUAL_ID));
			incominglinks.addChildren(createNavigatorItems(connectedViews,
					incominglinks, true));
			if (!incominglinks.isEmpty()) {
				result.add(incominglinks);
			}
			return result.toArray();
		}

		case NodeEditPart.VISUAL_ID: {
			LinkedList<RosAbstractNavigatorItem> result = new LinkedList<RosAbstractNavigatorItem>();
			Node sv = (Node) view;
			RosNavigatorGroup outgoinglinks = new RosNavigatorGroup(
					Messages.NavigatorGroupName_Node_2001_outgoinglinks,
					"icons/outgoingLinksNavigatorGroup.gif", parentElement); //$NON-NLS-1$
			Collection<View> connectedViews;
			connectedViews = getChildrenByType(Collections.singleton(sv),
					RosVisualIDRegistry
							.getType(NodeParametersEditPart.VISUAL_ID));
			connectedViews = getChildrenByType(connectedViews,
					RosVisualIDRegistry.getType(ParameterEditPart.VISUAL_ID));
			result.addAll(createNavigatorItems(connectedViews, parentElement,
					false));
			connectedViews = getOutgoingLinksByType(Collections.singleton(sv),
					RosVisualIDRegistry
							.getType(ServiceClientEditPart.VISUAL_ID));
			outgoinglinks.addChildren(createNavigatorItems(connectedViews,
					outgoinglinks, true));
			connectedViews = getOutgoingLinksByType(Collections.singleton(sv),
					RosVisualIDRegistry.getType(SubscriberEditPart.VISUAL_ID));
			outgoinglinks.addChildren(createNavigatorItems(connectedViews,
					outgoinglinks, true));
			connectedViews = getOutgoingLinksByType(Collections.singleton(sv),
					RosVisualIDRegistry
							.getType(ServiceServerEditPart.VISUAL_ID));
			outgoinglinks.addChildren(createNavigatorItems(connectedViews,
					outgoinglinks, true));
			connectedViews = getOutgoingLinksByType(Collections.singleton(sv),
					RosVisualIDRegistry.getType(PublisherEditPart.VISUAL_ID));
			outgoinglinks.addChildren(createNavigatorItems(connectedViews,
					outgoinglinks, true));
			if (!outgoinglinks.isEmpty()) {
				result.add(outgoinglinks);
			}
			return result.toArray();
		}

		case ServiceClientEditPart.VISUAL_ID: {
			LinkedList<RosAbstractNavigatorItem> result = new LinkedList<RosAbstractNavigatorItem>();
			Edge sv = (Edge) view;
			RosNavigatorGroup target = new RosNavigatorGroup(
					Messages.NavigatorGroupName_ServiceClient_4001_target,
					"icons/linkTargetNavigatorGroup.gif", parentElement); //$NON-NLS-1$
			RosNavigatorGroup source = new RosNavigatorGroup(
					Messages.NavigatorGroupName_ServiceClient_4001_source,
					"icons/linkSourceNavigatorGroup.gif", parentElement); //$NON-NLS-1$
			Collection<View> connectedViews;
			connectedViews = getLinksTargetByType(Collections.singleton(sv),
					RosVisualIDRegistry.getType(ServiceEditPart.VISUAL_ID));
			target.addChildren(createNavigatorItems(connectedViews, target,
					true));
			connectedViews = getLinksSourceByType(Collections.singleton(sv),
					RosVisualIDRegistry.getType(NodeEditPart.VISUAL_ID));
			source.addChildren(createNavigatorItems(connectedViews, source,
					true));
			if (!target.isEmpty()) {
				result.add(target);
			}
			if (!source.isEmpty()) {
				result.add(source);
			}
			return result.toArray();
		}

					Messages.NavigatorGroupName_Publisher_4004_target,
					Messages.NavigatorGroupName_Publisher_4004_source,
		case ServiceServerEditPart.VISUAL_ID: {
			Edge sv = (Edge) view;
			RosNavigatorGroup target = new RosNavigatorGroup(
					Messages.NavigatorGroupName_ServiceServer_4003_target,
					"icons/linkTargetNavigatorGroup.gif", parentElement); //$NON-NLS-1$
			RosNavigatorGroup source = new RosNavigatorGroup(
					Messages.NavigatorGroupName_ServiceServer_4003_source,
					"icons/linkSourceNavigatorGroup.gif", parentElement); //$NON-NLS-1$
			connectedViews = getLinksTargetByType(Collections.singleton(sv),
					RosVisualIDRegistry.getType(ServiceEditPart.VISUAL_ID));
			target.addChildren(createNavigatorItems(connectedViews, target,
					true));
			connectedViews = getLinksSourceByType(Collections.singleton(sv),
					RosVisualIDRegistry.getType(NodeEditPart.VISUAL_ID));
			source.addChildren(createNavigatorItems(connectedViews, source,
					true));
			if (!target.isEmpty()) {
				result.add(target);
			}
			if (!source.isEmpty()) {
				result.add(source);
					RosVisualIDRegistry.getType(NodeEditPart.VISUAL_ID));
					Messages.NavigatorGroupName_Subscriber_4001_target,
					Messages.NavigatorGroupName_Subscriber_4001_source,
					Messages.NavigatorGroupName_Topic_2001_incominglinks,
					Messages.NavigatorGroupName_Publisher_4002_target,
					Messages.NavigatorGroupName_Publisher_4002_source,
		case NodeEditPart.VISUAL_ID: {
			Node sv = (Node) view;
			RosNavigatorGroup outgoinglinks = new RosNavigatorGroup(
					Messages.NavigatorGroupName_Node_2002_outgoinglinks,
					"icons/outgoingLinksNavigatorGroup.gif", parentElement); //$NON-NLS-1$
			connectedViews = getOutgoingLinksByType(Collections.singleton(sv),
					RosVisualIDRegistry.getType(SubscriberEditPart.VISUAL_ID));
			outgoinglinks.addChildren(createNavigatorItems(connectedViews,
					outgoinglinks, true));
			connectedViews = getOutgoingLinksByType(Collections.singleton(sv),
					RosVisualIDRegistry.getType(PublisherEditPart.VISUAL_ID));
			outgoinglinks.addChildren(createNavigatorItems(connectedViews,
					outgoinglinks, true));
			if (!outgoinglinks.isEmpty()) {
				result.add(outgoinglinks);
@@ -23,8 +23,13 @@
 import org.eclipse.ui.navigator.ICommonContentExtensionSite;
 import org.eclipse.ui.navigator.ICommonContentProvider;
 import org.ros.model.ros.diagram.edit.parts.NodeEditPart;
+import org.ros.model.ros.diagram.edit.parts.NodeParametersEditPart;
 import org.ros.model.ros.diagram.edit.parts.PackageEditPart;
+import org.ros.model.ros.diagram.edit.parts.ParameterEditPart;
 import org.ros.model.ros.diagram.edit.parts.PublisherEditPart;
+import org.ros.model.ros.diagram.edit.parts.ServiceClientEditPart;
+import org.ros.model.ros.diagram.edit.parts.ServiceEditPart;
+import org.ros.model.ros.diagram.edit.parts.ServiceServerEditPart;
 import org.ros.model.ros.diagram.edit.parts.SubscriberEditPart;
 import org.ros.model.ros.diagram.edit.parts.TopicEditPart;
 import org.ros.model.ros.diagram.part.Messages;
@@ -224,17 +229,29 @@ private Object[] getViewChildren(View view, Object parentElement) {
 					Messages.NavigatorGroupName_Package_1000_links,
 					"icons/linksNavigatorGroup.gif", parentElement); //$NON-NLS-1$
 			Collection<View> connectedViews;
+			connectedViews = getChildrenByType(Collections.singleton(sv),
+					RosVisualIDRegistry.getType(NodeEditPart.VISUAL_ID));
+			result.addAll(createNavigatorItems(connectedViews, parentElement,
+					false));
 			connectedViews = getChildrenByType(Collections.singleton(sv),
 					RosVisualIDRegistry.getType(TopicEditPart.VISUAL_ID));
 			result.addAll(createNavigatorItems(connectedViews, parentElement,
 					false));
 			connectedViews = getChildrenByType(Collections.singleton(sv),
-					RosVisualIDRegistry.getType(NodeEditPart.VISUAL_ID));
+					RosVisualIDRegistry.getType(ServiceEditPart.VISUAL_ID));
 			result.addAll(createNavigatorItems(connectedViews, parentElement,
 					false));
+			connectedViews = getDiagramLinksByType(Collections.singleton(sv),
+					RosVisualIDRegistry
+							.getType(ServiceClientEditPart.VISUAL_ID));
+			links.addChildren(createNavigatorItems(connectedViews, links, false));
 			connectedViews = getDiagramLinksByType(Collections.singleton(sv),
 					RosVisualIDRegistry.getType(SubscriberEditPart.VISUAL_ID));
 			links.addChildren(createNavigatorItems(connectedViews, links, false));
+			connectedViews = getDiagramLinksByType(Collections.singleton(sv),
+					RosVisualIDRegistry
+							.getType(ServiceServerEditPart.VISUAL_ID));
+			links.addChildren(createNavigatorItems(connectedViews, links, false));
 			connectedViews = getDiagramLinksByType(Collections.singleton(sv),
 					RosVisualIDRegistry.getType(PublisherEditPart.VISUAL_ID));
 			links.addChildren(createNavigatorItems(connectedViews, links, false));
@@ -248,10 +265,10 @@ private Object[] getViewChildren(View view, Object parentElement) {
 			LinkedList<RosAbstractNavigatorItem> result = new LinkedList<RosAbstractNavigatorItem>();
 			Edge sv = (Edge) view;
 			RosNavigatorGroup target = new RosNavigatorGroup(
-					Messages.NavigatorGroupName_Subscriber_4001_target,
+					Messages.NavigatorGroupName_Subscriber_4002_target,
 					"icons/linkTargetNavigatorGroup.gif", parentElement); //$NON-NLS-1$
 			RosNavigatorGroup source = new RosNavigatorGroup(
-					Messages.NavigatorGroupName_Subscriber_4001_source,
+					Messages.NavigatorGroupName_Subscriber_4002_source,
 					"icons/linkSourceNavigatorGroup.gif", parentElement); //$NON-NLS-1$
 			Collection<View> connectedViews;
 			connectedViews = getLinksTargetByType(Collections.singleton(sv),
@@ -275,7 +292,7 @@ private Object[] getViewChildren(View view, Object parentElement) {
 			LinkedList<RosAbstractNavigatorItem> result = new LinkedList<RosAbstractNavigatorItem>();
 			Node sv = (Node) view;
 			RosNavigatorGroup incominglinks = new RosNavigatorGroup(
-					Messages.NavigatorGroupName_Topic_2001_incominglinks,
+					Messages.NavigatorGroupName_Topic_2002_incominglinks,
 					"icons/incomingLinksNavigatorGroup.gif", parentElement); //$NON-NLS-1$
 			Collection<View> connectedViews;
 			connectedViews = getIncomingLinksByType(Collections.singleton(sv),
@@ -292,14 +309,102 @@ private Object[] getViewChildren(View view, Object parentElement) {
 			return result.toArray();
 		}
 
+		case ServiceEditPart.VISUAL_ID: {
+			LinkedList<RosAbstractNavigatorItem> result = new LinkedList<RosAbstractNavigatorItem>();
+			Node sv = (Node) view;
+			RosNavigatorGroup incominglinks = new RosNavigatorGroup(
+					Messages.NavigatorGroupName_Service_2003_incominglinks,
+					"icons/incomingLinksNavigatorGroup.gif", parentElement); //$NON-NLS-1$
+			Collection<View> connectedViews;
+			connectedViews = getIncomingLinksByType(Collections.singleton(sv),
+					RosVisualIDRegistry
+							.getType(ServiceClientEditPart.VISUAL_ID));
+			incominglinks.addChildren(createNavigatorItems(connectedViews,
+					incominglinks, true));
+			connectedViews = getIncomingLinksByType(Collections.singleton(sv),
+					RosVisualIDRegistry
+							.getType(ServiceServerEditPart.VISUAL_ID));
+			incominglinks.addChildren(createNavigatorItems(connectedViews,
+					incominglinks, true));
+			if (!incominglinks.isEmpty()) {
+				result.add(incominglinks);
+			}
+			return result.toArray();
+		}
+
+		case NodeEditPart.VISUAL_ID: {
+			LinkedList<RosAbstractNavigatorItem> result = new LinkedList<RosAbstractNavigatorItem>();
+			Node sv = (Node) view;
+			RosNavigatorGroup outgoinglinks = new RosNavigatorGroup(
+					Messages.NavigatorGroupName_Node_2001_outgoinglinks,
+					"icons/outgoingLinksNavigatorGroup.gif", parentElement); //$NON-NLS-1$
+			Collection<View> connectedViews;
+			connectedViews = getChildrenByType(Collections.singleton(sv),
+					RosVisualIDRegistry
+							.getType(NodeParametersEditPart.VISUAL_ID));
+			connectedViews = getChildrenByType(connectedViews,
+					RosVisualIDRegistry.getType(ParameterEditPart.VISUAL_ID));
+			result.addAll(createNavigatorItems(connectedViews, parentElement,
+					false));
+			connectedViews = getOutgoingLinksByType(Collections.singleton(sv),
+					RosVisualIDRegistry
+							.getType(ServiceClientEditPart.VISUAL_ID));
+			outgoinglinks.addChildren(createNavigatorItems(connectedViews,
+					outgoinglinks, true));
+			connectedViews = getOutgoingLinksByType(Collections.singleton(sv),
+					RosVisualIDRegistry.getType(SubscriberEditPart.VISUAL_ID));
+			outgoinglinks.addChildren(createNavigatorItems(connectedViews,
+					outgoinglinks, true));
+			connectedViews = getOutgoingLinksByType(Collections.singleton(sv),
+					RosVisualIDRegistry
+							.getType(ServiceServerEditPart.VISUAL_ID));
+			outgoinglinks.addChildren(createNavigatorItems(connectedViews,
+					outgoinglinks, true));
+			connectedViews = getOutgoingLinksByType(Collections.singleton(sv),
+					RosVisualIDRegistry.getType(PublisherEditPart.VISUAL_ID));
+			outgoinglinks.addChildren(createNavigatorItems(connectedViews,
+					outgoinglinks, true));
+			if (!outgoinglinks.isEmpty()) {
+				result.add(outgoinglinks);
+			}
+			return result.toArray();
+		}
+
+		case ServiceClientEditPart.VISUAL_ID: {
+			LinkedList<RosAbstractNavigatorItem> result = new LinkedList<RosAbstractNavigatorItem>();
+			Edge sv = (Edge) view;
+			RosNavigatorGroup target = new RosNavigatorGroup(
+					Messages.NavigatorGroupName_ServiceClient_4001_target,
+					"icons/linkTargetNavigatorGroup.gif", parentElement); //$NON-NLS-1$
+			RosNavigatorGroup source = new RosNavigatorGroup(
+					Messages.NavigatorGroupName_ServiceClient_4001_source,
+					"icons/linkSourceNavigatorGroup.gif", parentElement); //$NON-NLS-1$
+			Collection<View> connectedViews;
+			connectedViews = getLinksTargetByType(Collections.singleton(sv),
+					RosVisualIDRegistry.getType(ServiceEditPart.VISUAL_ID));
+			target.addChildren(createNavigatorItems(connectedViews, target,
+					true));
+			connectedViews = getLinksSourceByType(Collections.singleton(sv),
+					RosVisualIDRegistry.getType(NodeEditPart.VISUAL_ID));
+			source.addChildren(createNavigatorItems(connectedViews, source,
+					true));
+			if (!target.isEmpty()) {
+				result.add(target);
+			}
+			if (!source.isEmpty()) {
+				result.add(source);
+			}
+			return result.toArray();
+		}
+
 		case PublisherEditPart.VISUAL_ID: {
 			LinkedList<RosAbstractNavigatorItem> result = new LinkedList<RosAbstractNavigatorItem>();
 			Edge sv = (Edge) view;
 			RosNavigatorGroup target = new RosNavigatorGroup(
-					Messages.NavigatorGroupName_Publisher_4002_target,
+					Messages.NavigatorGroupName_Publisher_4004_target,
 					"icons/linkTargetNavigatorGroup.gif", parentElement); //$NON-NLS-1$
 			RosNavigatorGroup source = new RosNavigatorGroup(
-					Messages.NavigatorGroupName_Publisher_4002_source,
+					Messages.NavigatorGroupName_Publisher_4004_source,
 					"icons/linkSourceNavigatorGroup.gif", parentElement); //$NON-NLS-1$
 			Collection<View> connectedViews;
 			connectedViews = getLinksTargetByType(Collections.singleton(sv),
@@ -319,23 +424,29 @@ private Object[] getViewChildren(View view, Object parentElement) {
 			return result.toArray();
 		}
 
-		case NodeEditPart.VISUAL_ID: {
+		case ServiceServerEditPart.VISUAL_ID: {
 			LinkedList<RosAbstractNavigatorItem> result = new LinkedList<RosAbstractNavigatorItem>();
-			Node sv = (Node) view;
-			RosNavigatorGroup outgoinglinks = new RosNavigatorGroup(
-					Messages.NavigatorGroupName_Node_2002_outgoinglinks,
-					"icons/outgoingLinksNavigatorGroup.gif", parentElement); //$NON-NLS-1$
+			Edge sv = (Edge) view;
+			RosNavigatorGroup target = new RosNavigatorGroup(
+					Messages.NavigatorGroupName_ServiceServer_4003_target,
+					"icons/linkTargetNavigatorGroup.gif", parentElement); //$NON-NLS-1$
+			RosNavigatorGroup source = new RosNavigatorGroup(
+					Messages.NavigatorGroupName_ServiceServer_4003_source,
+					"icons/linkSourceNavigatorGroup.gif", parentElement); //$NON-NLS-1$
 			Collection<View> connectedViews;
-			connectedViews = getOutgoingLinksByType(Collections.singleton(sv),
-					RosVisualIDRegistry.getType(SubscriberEditPart.VISUAL_ID));
-			outgoinglinks.addChildren(createNavigatorItems(connectedViews,
-					outgoinglinks, true));
-			connectedViews = getOutgoingLinksByType(Collections.singleton(sv),
-					RosVisualIDRegistry.getType(PublisherEditPart.VISUAL_ID));
-			outgoinglinks.addChildren(createNavigatorItems(connectedViews,
-					outgoinglinks, true));
-			if (!outgoinglinks.isEmpty()) {
-				result.add(outgoinglinks);
+			connectedViews = getLinksTargetByType(Collections.singleton(sv),
+					RosVisualIDRegistry.getType(ServiceEditPart.VISUAL_ID));
+			target.addChildren(createNavigatorItems(connectedViews, target,
+					true));
+			connectedViews = getLinksSourceByType(Collections.singleton(sv),
+					RosVisualIDRegistry.getType(NodeEditPart.VISUAL_ID));
+			source.addChildren(createNavigatorItems(connectedViews, source,
+					true));
+			if (!target.isEmpty()) {
+				result.add(target);
+			}
+			if (!source.isEmpty()) {
+				result.add(source);
 			}
 			return result.toArray();
 		}
https://github.com/ipa320/bride/raw/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fnavigator%2FRosNavigatorContentProvider.java
0edf2280905d826a4fc0ed853d7a992e25316b61
modified
https://github.com/ipa320/bride/blob/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fnavigator%2FRosNavigatorLabelProvider.java
https://api.github.com/repos/ipa320/bride/contents/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fnavigator%2FRosNavigatorLabelProvider.java?ref=01bc5c83c895357f23a345ecec85a3796cf66358
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/navigator/RosNavigatorLabelProvider.java
import org.ros.model.ros.diagram.edit.parts.ParameterEditPart;
import org.ros.model.ros.diagram.edit.parts.ServiceClientEditPart;
import org.ros.model.ros.diagram.edit.parts.ServiceClientNameEditPart;
import org.ros.model.ros.diagram.edit.parts.ServiceEditPart;
import org.ros.model.ros.diagram.edit.parts.ServiceNameEditPart;
import org.ros.model.ros.diagram.edit.parts.ServiceServerEditPart;
import org.ros.model.ros.diagram.edit.parts.ServiceServerNameEditPart;
					"Navigator?Link?http://ros/1.0?Subscriber", RosElementTypes.Subscriber_4002); //$NON-NLS-1$
					"Navigator?TopLevelNode?http://ros/1.0?Topic", RosElementTypes.Topic_2002); //$NON-NLS-1$
		case ServiceEditPart.VISUAL_ID:
					"Navigator?TopLevelNode?http://ros/1.0?Service", RosElementTypes.Service_2003); //$NON-NLS-1$
					"Navigator?TopLevelNode?http://ros/1.0?Node", RosElementTypes.Node_2001); //$NON-NLS-1$
		case ServiceClientEditPart.VISUAL_ID:
			return getImage(
					"Navigator?Link?http://ros/1.0?ServiceClient", RosElementTypes.ServiceClient_4001); //$NON-NLS-1$
		case PublisherEditPart.VISUAL_ID:
			return getImage(
					"Navigator?Link?http://ros/1.0?Publisher", RosElementTypes.Publisher_4004); //$NON-NLS-1$
		case ServiceServerEditPart.VISUAL_ID:
			return getImage(
					"Navigator?Link?http://ros/1.0?ServiceServer", RosElementTypes.ServiceServer_4003); //$NON-NLS-1$
		case ParameterEditPart.VISUAL_ID:
			return getImage(
					"Navigator?Node?http://ros/1.0?Parameter", RosElementTypes.Parameter_3001); //$NON-NLS-1$
			return getSubscriber_4002Text(view);
			return getTopic_2002Text(view);
		case ServiceEditPart.VISUAL_ID:
			return getService_2003Text(view);
			return getNode_2001Text(view);
		case ServiceClientEditPart.VISUAL_ID:
			return getServiceClient_4001Text(view);
		case PublisherEditPart.VISUAL_ID:
			return getPublisher_4004Text(view);
		case ServiceServerEditPart.VISUAL_ID:
			return getServiceServer_4003Text(view);
		case ParameterEditPart.VISUAL_ID:
			return getParameter_3001Text(view);
	private String getSubscriber_4002Text(View view) {
				RosElementTypes.Subscriber_4002,
					"Parser was not found for label " + 6002); //$NON-NLS-1$
	private String getTopic_2002Text(View view) {
				RosElementTypes.Topic_2002,
		} else {
			RosDiagramEditorPlugin.getInstance().logError(
					"Parser was not found for label " + 5002); //$NON-NLS-1$
			return ""; //$NON-NLS-1$
		}
	}

	/**
	 * @generated
	 */
	private String getService_2003Text(View view) {
		IParser parser = RosParserProvider.getParser(
				RosElementTypes.Service_2003,
				view.getElement() != null ? view.getElement() : view,
				RosVisualIDRegistry.getType(ServiceNameEditPart.VISUAL_ID));
		if (parser != null) {
			return parser.getPrintString(new EObjectAdapter(
					view.getElement() != null ? view.getElement() : view),
					ParserOptions.NONE.intValue());
		} else {
			RosDiagramEditorPlugin.getInstance().logError(
					"Parser was not found for label " + 5003); //$NON-NLS-1$
			return ""; //$NON-NLS-1$
		}
	}

	/**
	 * @generated
	 */
	private String getNode_2001Text(View view) {
		IParser parser = RosParserProvider.getParser(RosElementTypes.Node_2001,
				view.getElement() != null ? view.getElement() : view,
				RosVisualIDRegistry.getType(NodeNameEditPart.VISUAL_ID));
		if (parser != null) {
			return parser.getPrintString(new EObjectAdapter(
					view.getElement() != null ? view.getElement() : view),
					ParserOptions.NONE.intValue());
	private String getServiceClient_4001Text(View view) {
		IParser parser = RosParserProvider.getParser(
				RosElementTypes.ServiceClient_4001,
				view.getElement() != null ? view.getElement() : view,
				RosVisualIDRegistry
						.getType(ServiceClientNameEditPart.VISUAL_ID));
		if (parser != null) {
			return parser.getPrintString(new EObjectAdapter(
					view.getElement() != null ? view.getElement() : view),
					ParserOptions.NONE.intValue());
		} else {
			RosDiagramEditorPlugin.getInstance().logError(
					"Parser was not found for label " + 6001); //$NON-NLS-1$
			return ""; //$NON-NLS-1$
		}
	}

	/**
	 * @generated
	 */
	private String getPublisher_4004Text(View view) {
				RosElementTypes.Publisher_4004,
					"Parser was not found for label " + 6004); //$NON-NLS-1$
	private String getServiceServer_4003Text(View view) {
		IParser parser = RosParserProvider.getParser(
				RosElementTypes.ServiceServer_4003,
				RosVisualIDRegistry
						.getType(ServiceServerNameEditPart.VISUAL_ID));
					"Parser was not found for label " + 6003); //$NON-NLS-1$
			return ""; //$NON-NLS-1$
		}
	}

	/**
	 * @generated
	 */
	private String getParameter_3001Text(View view) {
		IParser parser = RosParserProvider.getParser(
				RosElementTypes.Parameter_3001,
				view.getElement() != null ? view.getElement() : view,
				RosVisualIDRegistry.getType(ParameterEditPart.VISUAL_ID));
		if (parser != null) {
			return parser.getPrintString(new EObjectAdapter(
					view.getElement() != null ? view.getElement() : view),
					ParserOptions.NONE.intValue());
		} else {
			RosDiagramEditorPlugin.getInstance().logError(
					"Parser was not found for label " + 3001); //$NON-NLS-1$
View view
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/navigator/RosNavigatorLabelProvider.java
RosElementTypes.Subscriber_4002,
					"Parser was not found for label " + 6002); //$NON-NLS-1$
	private String getTopic_2002Text(View view) {
				RosElementTypes.Topic_2002,
String getSubscriber_4002Text(View view)
View view
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/navigator/RosNavigatorLabelProvider.java
IParser parser = RosParserProvider.getParser(
				RosElementTypes.Service_2003,
				view.getElement() != null ? view.getElement() : view,
				RosVisualIDRegistry.getType(ServiceNameEditPart.VISUAL_ID));
		if (parser != null) {
			return parser.getPrintString(new EObjectAdapter(
					view.getElement() != null ? view.getElement() : view),
					ParserOptions.NONE.intValue());
String getService_2003Text(View view)
View view
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/navigator/RosNavigatorLabelProvider.java
IParser parser = RosParserProvider.getParser(RosElementTypes.Node_2001,
				view.getElement() != null ? view.getElement() : view,
				RosVisualIDRegistry.getType(NodeNameEditPart.VISUAL_ID));
		if (parser != null) {
			return parser.getPrintString(new EObjectAdapter(
					view.getElement() != null ? view.getElement() : view),
					ParserOptions.NONE.intValue());
	private String getServiceClient_4001Text(View view) {
		IParser parser = RosParserProvider.getParser(
				RosElementTypes.ServiceClient_4001,
				view.getElement() != null ? view.getElement() : view,
				RosVisualIDRegistry
						.getType(ServiceClientNameEditPart.VISUAL_ID));
		if (parser != null) {
			return parser.getPrintString(new EObjectAdapter(
					view.getElement() != null ? view.getElement() : view),
					ParserOptions.NONE.intValue());
String getNode_2001Text(View view)
View view
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/navigator/RosNavigatorLabelProvider.java
RosElementTypes.Publisher_4004,
					"Parser was not found for label " + 6004); //$NON-NLS-1$
	private String getServiceServer_4003Text(View view) {
		IParser parser = RosParserProvider.getParser(
				RosElementTypes.ServiceServer_4003,
				RosVisualIDRegistry
						.getType(ServiceServerNameEditPart.VISUAL_ID));
					"Parser was not found for label " + 6003); //$NON-NLS-1$
			return ""; //$NON-NLS-1$
String getPublisher_4004Text(View view)
View view
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/navigator/RosNavigatorLabelProvider.java
IParser parser = RosParserProvider.getParser(
				RosElementTypes.Parameter_3001,
				view.getElement() != null ? view.getElement() : view,
				RosVisualIDRegistry.getType(ParameterEditPart.VISUAL_ID));
		if (parser != null) {
			return parser.getPrintString(new EObjectAdapter(
					view.getElement() != null ? view.getElement() : view),
					ParserOptions.NONE.intValue());
String getParameter_3001Text(View view)
					"Navigator?Link?http://ros/1.0?Subscriber", RosElementTypes.Subscriber_4001); //$NON-NLS-1$
					"Navigator?TopLevelNode?http://ros/1.0?Topic", RosElementTypes.Topic_2001); //$NON-NLS-1$
		case PublisherEditPart.VISUAL_ID:
					"Navigator?Link?http://ros/1.0?Publisher", RosElementTypes.Publisher_4002); //$NON-NLS-1$
					"Navigator?TopLevelNode?http://ros/1.0?Node", RosElementTypes.Node_2002); //$NON-NLS-1$
			return getSubscriber_4001Text(view);
			return getTopic_2001Text(view);
		case PublisherEditPart.VISUAL_ID:
			return getPublisher_4002Text(view);
			return getNode_2002Text(view);
	private String getSubscriber_4001Text(View view) {
				RosElementTypes.Subscriber_4001,
					"Parser was not found for label " + 6001); //$NON-NLS-1$
	private String getTopic_2001Text(View view) {
				RosElementTypes.Topic_2001,
	private String getPublisher_4002Text(View view) {
				RosElementTypes.Publisher_4002,
					"Parser was not found for label " + 6002); //$NON-NLS-1$
	private String getNode_2002Text(View view) {
		IParser parser = RosParserProvider.getParser(RosElementTypes.Node_2002,
				RosVisualIDRegistry.getType(NodeNameEditPart.VISUAL_ID));
					"Parser was not found for label " + 5002); //$NON-NLS-1$
@@ -19,8 +19,15 @@
 import org.ros.model.ros.diagram.edit.parts.NodeEditPart;
 import org.ros.model.ros.diagram.edit.parts.NodeNameEditPart;
 import org.ros.model.ros.diagram.edit.parts.PackageEditPart;
+import org.ros.model.ros.diagram.edit.parts.ParameterEditPart;
 import org.ros.model.ros.diagram.edit.parts.PublisherEditPart;
 import org.ros.model.ros.diagram.edit.parts.PublisherNameEditPart;
+import org.ros.model.ros.diagram.edit.parts.ServiceClientEditPart;
+import org.ros.model.ros.diagram.edit.parts.ServiceClientNameEditPart;
+import org.ros.model.ros.diagram.edit.parts.ServiceEditPart;
+import org.ros.model.ros.diagram.edit.parts.ServiceNameEditPart;
+import org.ros.model.ros.diagram.edit.parts.ServiceServerEditPart;
+import org.ros.model.ros.diagram.edit.parts.ServiceServerNameEditPart;
 import org.ros.model.ros.diagram.edit.parts.SubscriberEditPart;
 import org.ros.model.ros.diagram.edit.parts.SubscriberNameEditPart;
 import org.ros.model.ros.diagram.edit.parts.TopicEditPart;
@@ -94,16 +101,28 @@ public Image getImage(View view) {
 					"Navigator?Diagram?http://ros/1.0?Package", RosElementTypes.Package_1000); //$NON-NLS-1$
 		case SubscriberEditPart.VISUAL_ID:
 			return getImage(
-					"Navigator?Link?http://ros/1.0?Subscriber", RosElementTypes.Subscriber_4001); //$NON-NLS-1$
+					"Navigator?Link?http://ros/1.0?Subscriber", RosElementTypes.Subscriber_4002); //$NON-NLS-1$
 		case TopicEditPart.VISUAL_ID:
 			return getImage(
-					"Navigator?TopLevelNode?http://ros/1.0?Topic", RosElementTypes.Topic_2001); //$NON-NLS-1$
-		case PublisherEditPart.VISUAL_ID:
+					"Navigator?TopLevelNode?http://ros/1.0?Topic", RosElementTypes.Topic_2002); //$NON-NLS-1$
+		case ServiceEditPart.VISUAL_ID:
 			return getImage(
-					"Navigator?Link?http://ros/1.0?Publisher", RosElementTypes.Publisher_4002); //$NON-NLS-1$
+					"Navigator?TopLevelNode?http://ros/1.0?Service", RosElementTypes.Service_2003); //$NON-NLS-1$
 		case NodeEditPart.VISUAL_ID:
 			return getImage(
-					"Navigator?TopLevelNode?http://ros/1.0?Node", RosElementTypes.Node_2002); //$NON-NLS-1$
+					"Navigator?TopLevelNode?http://ros/1.0?Node", RosElementTypes.Node_2001); //$NON-NLS-1$
+		case ServiceClientEditPart.VISUAL_ID:
+			return getImage(
+					"Navigator?Link?http://ros/1.0?ServiceClient", RosElementTypes.ServiceClient_4001); //$NON-NLS-1$
+		case PublisherEditPart.VISUAL_ID:
+			return getImage(
+					"Navigator?Link?http://ros/1.0?Publisher", RosElementTypes.Publisher_4004); //$NON-NLS-1$
+		case ServiceServerEditPart.VISUAL_ID:
+			return getImage(
+					"Navigator?Link?http://ros/1.0?ServiceServer", RosElementTypes.ServiceServer_4003); //$NON-NLS-1$
+		case ParameterEditPart.VISUAL_ID:
+			return getImage(
+					"Navigator?Node?http://ros/1.0?Parameter", RosElementTypes.Parameter_3001); //$NON-NLS-1$
 		}
 		return getImage("Navigator?UnknownElement", null); //$NON-NLS-1$
 	}
@@ -159,13 +178,21 @@ public String getText(View view) {
 		case PackageEditPart.VISUAL_ID:
 			return getPackage_1000Text(view);
 		case SubscriberEditPart.VISUAL_ID:
-			return getSubscriber_4001Text(view);
+			return getSubscriber_4002Text(view);
 		case TopicEditPart.VISUAL_ID:
-			return getTopic_2001Text(view);
-		case PublisherEditPart.VISUAL_ID:
-			return getPublisher_4002Text(view);
+			return getTopic_2002Text(view);
+		case ServiceEditPart.VISUAL_ID:
+			return getService_2003Text(view);
 		case NodeEditPart.VISUAL_ID:
-			return getNode_2002Text(view);
+			return getNode_2001Text(view);
+		case ServiceClientEditPart.VISUAL_ID:
+			return getServiceClient_4001Text(view);
+		case PublisherEditPart.VISUAL_ID:
+			return getPublisher_4004Text(view);
+		case ServiceServerEditPart.VISUAL_ID:
+			return getServiceServer_4003Text(view);
+		case ParameterEditPart.VISUAL_ID:
+			return getParameter_3001Text(view);
 		}
 		return getUnknownElementText(view);
 	}
@@ -187,9 +214,9 @@ private String getPackage_1000Text(View view) {
 	/**
 	 * @generated
 	 */
-	private String getSubscriber_4001Text(View view) {
+	private String getSubscriber_4002Text(View view) {
 		IParser parser = RosParserProvider.getParser(
-				RosElementTypes.Subscriber_4001,
+				RosElementTypes.Subscriber_4002,
 				view.getElement() != null ? view.getElement() : view,
 				RosVisualIDRegistry.getType(SubscriberNameEditPart.VISUAL_ID));
 		if (parser != null) {
@@ -198,23 +225,60 @@ private String getSubscriber_4001Text(View view) {
 					ParserOptions.NONE.intValue());
 		} else {
 			RosDiagramEditorPlugin.getInstance().logError(
-					"Parser was not found for label " + 6001); //$NON-NLS-1$
+					"Parser was not found for label " + 6002); //$NON-NLS-1$
 			return ""; //$NON-NLS-1$
 		}
 	}
 
 	/**
 	 * @generated
 	 */
-	private String getTopic_2001Text(View view) {
+	private String getTopic_2002Text(View view) {
 		IParser parser = RosParserProvider.getParser(
-				RosElementTypes.Topic_2001,
+				RosElementTypes.Topic_2002,
 				view.getElement() != null ? view.getElement() : view,
 				RosVisualIDRegistry.getType(TopicNameEditPart.VISUAL_ID));
 		if (parser != null) {
 			return parser.getPrintString(new EObjectAdapter(
 					view.getElement() != null ? view.getElement() : view),
 					ParserOptions.NONE.intValue());
+		} else {
+			RosDiagramEditorPlugin.getInstance().logError(
+					"Parser was not found for label " + 5002); //$NON-NLS-1$
+			return ""; //$NON-NLS-1$
+		}
+	}
+
+	/**
+	 * @generated
+	 */
+	private String getService_2003Text(View view) {
+		IParser parser = RosParserProvider.getParser(
+				RosElementTypes.Service_2003,
+				view.getElement() != null ? view.getElement() : view,
+				RosVisualIDRegistry.getType(ServiceNameEditPart.VISUAL_ID));
+		if (parser != null) {
+			return parser.getPrintString(new EObjectAdapter(
+					view.getElement() != null ? view.getElement() : view),
+					ParserOptions.NONE.intValue());
+		} else {
+			RosDiagramEditorPlugin.getInstance().logError(
+					"Parser was not found for label " + 5003); //$NON-NLS-1$
+			return ""; //$NON-NLS-1$
+		}
+	}
+
+	/**
+	 * @generated
+	 */
+	private String getNode_2001Text(View view) {
+		IParser parser = RosParserProvider.getParser(RosElementTypes.Node_2001,
+				view.getElement() != null ? view.getElement() : view,
+				RosVisualIDRegistry.getType(NodeNameEditPart.VISUAL_ID));
+		if (parser != null) {
+			return parser.getPrintString(new EObjectAdapter(
+					view.getElement() != null ? view.getElement() : view),
+					ParserOptions.NONE.intValue());
 		} else {
 			RosDiagramEditorPlugin.getInstance().logError(
 					"Parser was not found for label " + 5001); //$NON-NLS-1$
@@ -225,9 +289,29 @@ private String getTopic_2001Text(View view) {
 	/**
 	 * @generated
 	 */
-	private String getPublisher_4002Text(View view) {
+	private String getServiceClient_4001Text(View view) {
+		IParser parser = RosParserProvider.getParser(
+				RosElementTypes.ServiceClient_4001,
+				view.getElement() != null ? view.getElement() : view,
+				RosVisualIDRegistry
+						.getType(ServiceClientNameEditPart.VISUAL_ID));
+		if (parser != null) {
+			return parser.getPrintString(new EObjectAdapter(
+					view.getElement() != null ? view.getElement() : view),
+					ParserOptions.NONE.intValue());
+		} else {
+			RosDiagramEditorPlugin.getInstance().logError(
+					"Parser was not found for label " + 6001); //$NON-NLS-1$
+			return ""; //$NON-NLS-1$
+		}
+	}
+
+	/**
+	 * @generated
+	 */
+	private String getPublisher_4004Text(View view) {
 		IParser parser = RosParserProvider.getParser(
-				RosElementTypes.Publisher_4002,
+				RosElementTypes.Publisher_4004,
 				view.getElement() != null ? view.getElement() : view,
 				RosVisualIDRegistry.getType(PublisherNameEditPart.VISUAL_ID));
 		if (parser != null) {
@@ -236,25 +320,46 @@ private String getPublisher_4002Text(View view) {
 					ParserOptions.NONE.intValue());
 		} else {
 			RosDiagramEditorPlugin.getInstance().logError(
-					"Parser was not found for label " + 6002); //$NON-NLS-1$
+					"Parser was not found for label " + 6004); //$NON-NLS-1$
 			return ""; //$NON-NLS-1$
 		}
 	}
 
 	/**
 	 * @generated
 	 */
-	private String getNode_2002Text(View view) {
-		IParser parser = RosParserProvider.getParser(RosElementTypes.Node_2002,
+	private String getServiceServer_4003Text(View view) {
+		IParser parser = RosParserProvider.getParser(
+				RosElementTypes.ServiceServer_4003,
 				view.getElement() != null ? view.getElement() : view,
-				RosVisualIDRegistry.getType(NodeNameEditPart.VISUAL_ID));
+				RosVisualIDRegistry
+						.getType(ServiceServerNameEditPart.VISUAL_ID));
 		if (parser != null) {
 			return parser.getPrintString(new EObjectAdapter(
 					view.getElement() != null ? view.getElement() : view),
 					ParserOptions.NONE.intValue());
 		} else {
 			RosDiagramEditorPlugin.getInstance().logError(
-					"Parser was not found for label " + 5002); //$NON-NLS-1$
+					"Parser was not found for label " + 6003); //$NON-NLS-1$
+			return ""; //$NON-NLS-1$
+		}
+	}
+
+	/**
+	 * @generated
+	 */
+	private String getParameter_3001Text(View view) {
+		IParser parser = RosParserProvider.getParser(
+				RosElementTypes.Parameter_3001,
+				view.getElement() != null ? view.getElement() : view,
+				RosVisualIDRegistry.getType(ParameterEditPart.VISUAL_ID));
+		if (parser != null) {
+			return parser.getPrintString(new EObjectAdapter(
+					view.getElement() != null ? view.getElement() : view),
+					ParserOptions.NONE.intValue());
+		} else {
+			RosDiagramEditorPlugin.getInstance().logError(
+					"Parser was not found for label " + 3001); //$NON-NLS-1$
 			return ""; //$NON-NLS-1$
 		}
 	}
https://github.com/ipa320/bride/raw/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fnavigator%2FRosNavigatorLabelProvider.java
514ad906917f579fefd0ce8eda4474a7c956cbb3
modified
https://github.com/ipa320/bride/blob/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fnavigator%2FRosNavigatorSorter.java
https://api.github.com/repos/ipa320/bride/contents/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fnavigator%2FRosNavigatorSorter.java?ref=01bc5c83c895357f23a345ecec85a3796cf66358
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/navigator/RosNavigatorSorter.java
	private static final int GROUP_CATEGORY = 7003;
	private static final int GROUP_CATEGORY = 4004;
@@ -11,7 +11,7 @@ public class RosNavigatorSorter extends ViewerSorter {
 	/**
 	 * @generated
 	 */
-	private static final int GROUP_CATEGORY = 4004;
+	private static final int GROUP_CATEGORY = 7003;
 
 	/**
 	 * @generated
https://github.com/ipa320/bride/raw/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fnavigator%2FRosNavigatorSorter.java
e44ccb18641ccd6d244bf960a140268a32d4047c
modified
https://github.com/ipa320/bride/blob/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fpart%2FMessages.java
https://api.github.com/repos/ipa320/bride/contents/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fpart%2FMessages.java?ref=01bc5c83c895357f23a345ecec85a3796cf66358
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/part/Messages.java
	/**
	 * @generated
	 */
	public static String Service5CreationTool_title;

	/**
	 * @generated
	 */
	public static String Service5CreationTool_desc;

	/**
	 * @generated
	 */
	public static String ServiceServer6CreationTool_title;

	/**
	 * @generated
	 */
	public static String ServiceServer6CreationTool_desc;

	/**
	 * @generated
	 */
	public static String ServiceClient7CreationTool_title;

	/**
	 * @generated
	 */
	public static String ServiceClient7CreationTool_desc;

	/**
	 * @generated
	 */
	public static String Parameter8CreationTool_title;

	/**
	 * @generated
	 */
	public static String Parameter8CreationTool_desc;

	/**
	 * @generated
	 */
	public static String NodeParametersEditPart_title;

	public static String NavigatorGroupName_Subscriber_4002_target;

	/**
	 * @generated
	 */
	public static String NavigatorGroupName_Subscriber_4002_source;

	/**
	 * @generated
	 */
	public static String NavigatorGroupName_Topic_2002_incominglinks;

	/**
	 * @generated
	 */
	public static String NavigatorGroupName_Service_2003_incominglinks;

	/**
	 * @generated
	 */
	public static String NavigatorGroupName_Node_2001_outgoinglinks;

	/**
	 * @generated
	 */
	public static String NavigatorGroupName_ServiceClient_4001_target;
	public static String NavigatorGroupName_ServiceClient_4001_source;
	public static String NavigatorGroupName_Publisher_4004_target;
	public static String NavigatorGroupName_Publisher_4004_source;
	public static String NavigatorGroupName_ServiceServer_4003_target;
	public static String NavigatorGroupName_ServiceServer_4003_source;
	public static String NavigatorGroupName_Subscriber_4001_target;
	public static String NavigatorGroupName_Subscriber_4001_source;
	public static String NavigatorGroupName_Topic_2001_incominglinks;
	public static String NavigatorGroupName_Publisher_4002_target;
	public static String NavigatorGroupName_Publisher_4002_source;
	public static String NavigatorGroupName_Node_2002_outgoinglinks;
@@ -285,6 +285,51 @@ private Messages() {
 	 */
 	public static String Topic4CreationTool_desc;
 
+	/**
+	 * @generated
+	 */
+	public static String Service5CreationTool_title;
+
+	/**
+	 * @generated
+	 */
+	public static String Service5CreationTool_desc;
+
+	/**
+	 * @generated
+	 */
+	public static String ServiceServer6CreationTool_title;
+
+	/**
+	 * @generated
+	 */
+	public static String ServiceServer6CreationTool_desc;
+
+	/**
+	 * @generated
+	 */
+	public static String ServiceClient7CreationTool_title;
+
+	/**
+	 * @generated
+	 */
+	public static String ServiceClient7CreationTool_desc;
+
+	/**
+	 * @generated
+	 */
+	public static String Parameter8CreationTool_title;
+
+	/**
+	 * @generated
+	 */
+	public static String Parameter8CreationTool_desc;
+
+	/**
+	 * @generated
+	 */
+	public static String NodeParametersEditPart_title;
+
 	/**
 	 * @generated
 	 */
@@ -298,32 +343,57 @@ private Messages() {
 	/**
 	 * @generated
 	 */
-	public static String NavigatorGroupName_Subscriber_4001_target;
+	public static String NavigatorGroupName_Subscriber_4002_target;
+
+	/**
+	 * @generated
+	 */
+	public static String NavigatorGroupName_Subscriber_4002_source;
+
+	/**
+	 * @generated
+	 */
+	public static String NavigatorGroupName_Topic_2002_incominglinks;
+
+	/**
+	 * @generated
+	 */
+	public static String NavigatorGroupName_Service_2003_incominglinks;
+
+	/**
+	 * @generated
+	 */
+	public static String NavigatorGroupName_Node_2001_outgoinglinks;
+
+	/**
+	 * @generated
+	 */
+	public static String NavigatorGroupName_ServiceClient_4001_target;
 
 	/**
 	 * @generated
 	 */
-	public static String NavigatorGroupName_Subscriber_4001_source;
+	public static String NavigatorGroupName_ServiceClient_4001_source;
 
 	/**
 	 * @generated
 	 */
-	public static String NavigatorGroupName_Topic_2001_incominglinks;
+	public static String NavigatorGroupName_Publisher_4004_target;
 
 	/**
 	 * @generated
 	 */
-	public static String NavigatorGroupName_Publisher_4002_target;
+	public static String NavigatorGroupName_Publisher_4004_source;
 
 	/**
 	 * @generated
 	 */
-	public static String NavigatorGroupName_Publisher_4002_source;
+	public static String NavigatorGroupName_ServiceServer_4003_target;
 
 	/**
 	 * @generated
 	 */
-	public static String NavigatorGroupName_Node_2002_outgoinglinks;
+	public static String NavigatorGroupName_ServiceServer_4003_source;
 
 	/**
 	 * @generated
https://github.com/ipa320/bride/raw/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fpart%2FMessages.java
c4bb4cc511e1ba5d262eab2aa705caebe4b24099
modified
https://github.com/ipa320/bride/blob/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fpart%2FRosDiagramUpdater.java
https://api.github.com/repos/ipa320/bride/contents/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fpart%2FRosDiagramUpdater.java?ref=01bc5c83c895357f23a345ecec85a3796cf66358
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/part/RosDiagramUpdater.java
import org.ros.model.ros.Parameter;
import org.ros.model.ros.Service;
import org.ros.model.ros.ServiceClient;
import org.ros.model.ros.ServiceServer;
import org.ros.model.ros.diagram.edit.parts.NodeParametersEditPart;
import org.ros.model.ros.diagram.edit.parts.ParameterEditPart;
import org.ros.model.ros.diagram.edit.parts.ServiceClientEditPart;
import org.ros.model.ros.diagram.edit.parts.ServiceEditPart;
import org.ros.model.ros.diagram.edit.parts.ServiceServerEditPart;
		case NodeParametersEditPart.VISUAL_ID:
			return getNodeParameters_7001SemanticChildren(view);
		for (Iterator<?> it = modelElement.getNode().iterator(); it.hasNext();) {
			Node childElement = (Node) it.next();
			int visualID = RosVisualIDRegistry.getNodeVisualID(view,
					childElement);
			if (visualID == NodeEditPart.VISUAL_ID) {
				result.add(new RosNodeDescriptor(childElement, visualID));
				continue;
			}
		}
		{
			Topic childElement = modelElement.getTopic();
			}
		}
		for (Iterator<?> it = modelElement.getService().iterator(); it
				.hasNext();) {
			Service childElement = (Service) it.next();
			int visualID = RosVisualIDRegistry.getNodeVisualID(view,
					childElement);
			if (visualID == ServiceEditPart.VISUAL_ID) {
				result.add(new RosNodeDescriptor(childElement, visualID));
		return result;
	}

	/**
	 * @generated
	 */
	public static List<RosNodeDescriptor> getNodeParameters_7001SemanticChildren(
			View view) {
		if (false == view.eContainer() instanceof View) {
			return Collections.emptyList();
		}
		View containerView = (View) view.eContainer();
		if (!containerView.isSetElement()) {
			return Collections.emptyList();
		}
		Node modelElement = (Node) containerView.getElement();
		LinkedList<RosNodeDescriptor> result = new LinkedList<RosNodeDescriptor>();
		for (Iterator<?> it = modelElement.getParameter().iterator(); it
				.hasNext();) {
			Parameter childElement = (Parameter) it.next();
			if (visualID == ParameterEditPart.VISUAL_ID) {
			return getNode_2001ContainedLinks(view);
		case TopicEditPart.VISUAL_ID:
			return getTopic_2002ContainedLinks(view);
		case ServiceEditPart.VISUAL_ID:
			return getService_2003ContainedLinks(view);
		case ParameterEditPart.VISUAL_ID:
			return getParameter_3001ContainedLinks(view);
		case ServiceClientEditPart.VISUAL_ID:
			return getServiceClient_4001ContainedLinks(view);
			return getSubscriber_4002ContainedLinks(view);
		case ServiceServerEditPart.VISUAL_ID:
			return getServiceServer_4003ContainedLinks(view);
			return getPublisher_4004ContainedLinks(view);
			return getNode_2001IncomingLinks(view);
		case TopicEditPart.VISUAL_ID:
			return getTopic_2002IncomingLinks(view);
		case ServiceEditPart.VISUAL_ID:
			return getService_2003IncomingLinks(view);
		case ParameterEditPart.VISUAL_ID:
			return getParameter_3001IncomingLinks(view);
		case ServiceClientEditPart.VISUAL_ID:
			return getServiceClient_4001IncomingLinks(view);
			return getSubscriber_4002IncomingLinks(view);
		case ServiceServerEditPart.VISUAL_ID:
			return getServiceServer_4003IncomingLinks(view);
			return getPublisher_4004IncomingLinks(view);
			return getNode_2001OutgoingLinks(view);
		case TopicEditPart.VISUAL_ID:
			return getTopic_2002OutgoingLinks(view);
		case ServiceEditPart.VISUAL_ID:
			return getService_2003OutgoingLinks(view);
		case ParameterEditPart.VISUAL_ID:
			return getParameter_3001OutgoingLinks(view);
		case ServiceClientEditPart.VISUAL_ID:
			return getServiceClient_4001OutgoingLinks(view);
			return getSubscriber_4002OutgoingLinks(view);
		case ServiceServerEditPart.VISUAL_ID:
			return getServiceServer_4003OutgoingLinks(view);
			return getPublisher_4004OutgoingLinks(view);
	public static List<RosLinkDescriptor> getNode_2001ContainedLinks(View view) {
		Node modelElement = (Node) view.getElement();
		LinkedList<RosLinkDescriptor> result = new LinkedList<RosLinkDescriptor>();
		result.addAll(getContainedTypeModelFacetLinks_ServiceClient_4001(modelElement));
		result.addAll(getContainedTypeModelFacetLinks_Subscriber_4002(modelElement));
		result.addAll(getContainedTypeModelFacetLinks_ServiceServer_4003(modelElement));
		result.addAll(getContainedTypeModelFacetLinks_Publisher_4004(modelElement));
		return result;
	}

	/**
	 * @generated
	 */
	public static List<RosLinkDescriptor> getTopic_2002ContainedLinks(View view) {
	public static List<RosLinkDescriptor> getService_2003ContainedLinks(
			View view) {
		return Collections.emptyList();
	}

	/**
	 * @generated
	 */
	public static List<RosLinkDescriptor> getParameter_3001ContainedLinks(
			View view) {
		return Collections.emptyList();
	}

	/**
	 * @generated
	 */
	public static List<RosLinkDescriptor> getServiceClient_4001ContainedLinks(
			View view) {
		return Collections.emptyList();
	public static List<RosLinkDescriptor> getSubscriber_4002ContainedLinks(
	public static List<RosLinkDescriptor> getServiceServer_4003ContainedLinks(
	public static List<RosLinkDescriptor> getPublisher_4004ContainedLinks(
			View view) {
		return Collections.emptyList();
	}

	/**
	 * @generated
	 */
	public static List<RosLinkDescriptor> getNode_2001IncomingLinks(View view) {
		return Collections.emptyList();
	}

	/**
	 * @generated
	 */
	public static List<RosLinkDescriptor> getTopic_2002IncomingLinks(View view) {
		result.addAll(getIncomingTypeModelFacetLinks_Subscriber_4002(
		result.addAll(getIncomingTypeModelFacetLinks_Publisher_4004(
	public static List<RosLinkDescriptor> getService_2003IncomingLinks(View view) {
		Service modelElement = (Service) view.getElement();
		Map<EObject, Collection<EStructuralFeature.Setting>> crossReferences = EcoreUtil.CrossReferencer
				.find(view.eResource().getResourceSet().getResources());
		LinkedList<RosLinkDescriptor> result = new LinkedList<RosLinkDescriptor>();
		result.addAll(getIncomingTypeModelFacetLinks_ServiceClient_4001(
				modelElement, crossReferences));
		result.addAll(getIncomingTypeModelFacetLinks_ServiceServer_4003(
				modelElement, crossReferences));
		return result;
	}

	/**
	 * @generated
	 */
	public static List<RosLinkDescriptor> getParameter_3001IncomingLinks(
			View view) {
		return Collections.emptyList();
	}

	/**
	 * @generated
	 */
	public static List<RosLinkDescriptor> getServiceClient_4001IncomingLinks(
			View view) {
	public static List<RosLinkDescriptor> getSubscriber_4002IncomingLinks(
	public static List<RosLinkDescriptor> getServiceServer_4003IncomingLinks(
	public static List<RosLinkDescriptor> getPublisher_4004IncomingLinks(
			View view) {
	public static List<RosLinkDescriptor> getNode_2001OutgoingLinks(View view) {
		result.addAll(getContainedTypeModelFacetLinks_ServiceClient_4001(modelElement));
		result.addAll(getContainedTypeModelFacetLinks_Subscriber_4002(modelElement));
		result.addAll(getContainedTypeModelFacetLinks_ServiceServer_4003(modelElement));
		result.addAll(getContainedTypeModelFacetLinks_Publisher_4004(modelElement));
	public static List<RosLinkDescriptor> getTopic_2002OutgoingLinks(View view) {
		return Collections.emptyList();
	}

	/**
	 * @generated
	 */
	public static List<RosLinkDescriptor> getService_2003OutgoingLinks(View view) {
		return Collections.emptyList();
	}

	/**
	 * @generated
	 */
	public static List<RosLinkDescriptor> getParameter_3001OutgoingLinks(
			View view) {
		return Collections.emptyList();
	}

	/**
	 * @generated
	 */
	public static List<RosLinkDescriptor> getServiceClient_4001OutgoingLinks(
	public static List<RosLinkDescriptor> getSubscriber_4002OutgoingLinks(
	public static List<RosLinkDescriptor> getServiceServer_4003OutgoingLinks(
			View view) {
		return Collections.emptyList();
	}

	/**
	 * @generated
	 */
	public static List<RosLinkDescriptor> getPublisher_4004OutgoingLinks(
			View view) {
		return Collections.emptyList();
	}

	/**
	 * @generated
	 */
	private static Collection<RosLinkDescriptor> getContainedTypeModelFacetLinks_ServiceClient_4001(
			Node container) {
		LinkedList<RosLinkDescriptor> result = new LinkedList<RosLinkDescriptor>();
		for (Iterator<?> links = container.getServiceClient().iterator(); links
				.hasNext();) {
			EObject linkObject = (EObject) links.next();
			if (false == linkObject instanceof ServiceClient) {
				continue;
			}
			ServiceClient link = (ServiceClient) linkObject;
			if (ServiceClientEditPart.VISUAL_ID != RosVisualIDRegistry
					.getLinkWithClassVisualID(link)) {
				continue;
			}
			Service dst = link.getService();
			result.add(new RosLinkDescriptor(container, dst, link,
					RosElementTypes.ServiceClient_4001,
					ServiceClientEditPart.VISUAL_ID));
		}
		return result;
	}

	/**
	 * @generated
	 */
	private static Collection<RosLinkDescriptor> getContainedTypeModelFacetLinks_Subscriber_4002(
					RosElementTypes.Subscriber_4002,
	private static Collection<RosLinkDescriptor> getContainedTypeModelFacetLinks_ServiceServer_4003(
			Node container) {
		LinkedList<RosLinkDescriptor> result = new LinkedList<RosLinkDescriptor>();
		for (Iterator<?> links = container.getServiceServer().iterator(); links
				.hasNext();) {
			EObject linkObject = (EObject) links.next();
			if (false == linkObject instanceof ServiceServer) {
				continue;
			}
			ServiceServer link = (ServiceServer) linkObject;
			if (ServiceServerEditPart.VISUAL_ID != RosVisualIDRegistry
					.getLinkWithClassVisualID(link)) {
				continue;
			}
			Service dst = link.getService();
			result.add(new RosLinkDescriptor(container, dst, link,
					RosElementTypes.ServiceServer_4003,
					ServiceServerEditPart.VISUAL_ID));
		}
		return result;
	}

	/**
	 * @generated
	 */
	private static Collection<RosLinkDescriptor> getContainedTypeModelFacetLinks_Publisher_4004(
					RosElementTypes.Publisher_4004, PublisherEditPart.VISUAL_ID));
	private static Collection<RosLinkDescriptor> getIncomingTypeModelFacetLinks_ServiceClient_4001(
			Service target,
			Map<EObject, Collection<EStructuralFeature.Setting>> crossReferences) {
		LinkedList<RosLinkDescriptor> result = new LinkedList<RosLinkDescriptor>();
		Collection<EStructuralFeature.Setting> settings = crossReferences
				.get(target);
		for (EStructuralFeature.Setting setting : settings) {
			if (setting.getEStructuralFeature() != RosPackage.eINSTANCE
					.getServiceClient_Service()
					|| false == setting.getEObject() instanceof ServiceClient) {
				continue;
			}
			ServiceClient link = (ServiceClient) setting.getEObject();
			if (ServiceClientEditPart.VISUAL_ID != RosVisualIDRegistry
					.getLinkWithClassVisualID(link)) {
				continue;
			}
			if (false == link.eContainer() instanceof Node) {
				continue;
			}
			Node container = (Node) link.eContainer();
			result.add(new RosLinkDescriptor(container, target, link,
					RosElementTypes.ServiceClient_4001,
					ServiceClientEditPart.VISUAL_ID));

		}
		return result;
	}

	/**
	 * @generated
	 */
	private static Collection<RosLinkDescriptor> getIncomingTypeModelFacetLinks_Subscriber_4002(
					RosElementTypes.Subscriber_4002,
	private static Collection<RosLinkDescriptor> getIncomingTypeModelFacetLinks_ServiceServer_4003(
			Service target,
			Map<EObject, Collection<EStructuralFeature.Setting>> crossReferences) {
		LinkedList<RosLinkDescriptor> result = new LinkedList<RosLinkDescriptor>();
		Collection<EStructuralFeature.Setting> settings = crossReferences
				.get(target);
		for (EStructuralFeature.Setting setting : settings) {
			if (setting.getEStructuralFeature() != RosPackage.eINSTANCE
					.getServiceServer_Service()
					|| false == setting.getEObject() instanceof ServiceServer) {
				continue;
			}
			ServiceServer link = (ServiceServer) setting.getEObject();
			if (ServiceServerEditPart.VISUAL_ID != RosVisualIDRegistry
					.getLinkWithClassVisualID(link)) {
				continue;
			}
			if (false == link.eContainer() instanceof Node) {
				continue;
			}
			Node container = (Node) link.eContainer();
			result.add(new RosLinkDescriptor(container, target, link,
					RosElementTypes.ServiceServer_4003,
					ServiceServerEditPart.VISUAL_ID));

		}
		return result;
	}

	/**
	 * @generated
	 */
	private static Collection<RosLinkDescriptor> getIncomingTypeModelFacetLinks_Publisher_4004(
					RosElementTypes.Publisher_4004, PublisherEditPart.VISUAL_ID));
		for (Iterator<?> it = modelElement.getTopic().iterator(); it.hasNext();) {
			Topic childElement = (Topic) it.next();
		for (Iterator<?> it = modelElement.getNode().iterator(); it.hasNext();) {
			Node childElement = (Node) it.next();
			if (visualID == NodeEditPart.VISUAL_ID) {
		case TopicEditPart.VISUAL_ID:
			return getTopic_2001ContainedLinks(view);
			return getNode_2002ContainedLinks(view);
			return getSubscriber_4001ContainedLinks(view);
			return getPublisher_4002ContainedLinks(view);
		case TopicEditPart.VISUAL_ID:
			return getTopic_2001IncomingLinks(view);
			return getNode_2002IncomingLinks(view);
			return getSubscriber_4001IncomingLinks(view);
			return getPublisher_4002IncomingLinks(view);
		case TopicEditPart.VISUAL_ID:
			return getTopic_2001OutgoingLinks(view);
			return getNode_2002OutgoingLinks(view);
			return getSubscriber_4001OutgoingLinks(view);
			return getPublisher_4002OutgoingLinks(view);
	public static List<RosLinkDescriptor> getTopic_2001ContainedLinks(View view) {
	public static List<RosLinkDescriptor> getNode_2002ContainedLinks(View view) {
		Node modelElement = (Node) view.getElement();
		LinkedList<RosLinkDescriptor> result = new LinkedList<RosLinkDescriptor>();
		result.addAll(getContainedTypeModelFacetLinks_Subscriber_4001(modelElement));
		result.addAll(getContainedTypeModelFacetLinks_Publisher_4002(modelElement));
		return result;
	public static List<RosLinkDescriptor> getSubscriber_4001ContainedLinks(
	public static List<RosLinkDescriptor> getPublisher_4002ContainedLinks(
	public static List<RosLinkDescriptor> getTopic_2001IncomingLinks(View view) {
		result.addAll(getIncomingTypeModelFacetLinks_Subscriber_4001(
		result.addAll(getIncomingTypeModelFacetLinks_Publisher_4002(
	public static List<RosLinkDescriptor> getNode_2002IncomingLinks(View view) {
	public static List<RosLinkDescriptor> getSubscriber_4001IncomingLinks(
	public static List<RosLinkDescriptor> getPublisher_4002IncomingLinks(
	public static List<RosLinkDescriptor> getTopic_2001OutgoingLinks(View view) {
	public static List<RosLinkDescriptor> getNode_2002OutgoingLinks(View view) {
		result.addAll(getContainedTypeModelFacetLinks_Subscriber_4001(modelElement));
		result.addAll(getContainedTypeModelFacetLinks_Publisher_4002(modelElement));
	public static List<RosLinkDescriptor> getSubscriber_4001OutgoingLinks(
	public static List<RosLinkDescriptor> getPublisher_4002OutgoingLinks(
	private static Collection<RosLinkDescriptor> getContainedTypeModelFacetLinks_Subscriber_4001(
					RosElementTypes.Subscriber_4001,
	private static Collection<RosLinkDescriptor> getContainedTypeModelFacetLinks_Publisher_4002(
					RosElementTypes.Publisher_4002, PublisherEditPart.VISUAL_ID));
	private static Collection<RosLinkDescriptor> getIncomingTypeModelFacetLinks_Subscriber_4001(
					RosElementTypes.Subscriber_4001,
	private static Collection<RosLinkDescriptor> getIncomingTypeModelFacetLinks_Publisher_4002(
					RosElementTypes.Publisher_4002, PublisherEditPart.VISUAL_ID));
@@ -13,13 +13,22 @@
 import org.eclipse.gmf.runtime.notation.View;
 import org.ros.model.ros.Node;
 import org.ros.model.ros.Package;
+import org.ros.model.ros.Parameter;
 import org.ros.model.ros.Publisher;
 import org.ros.model.ros.RosPackage;
+import org.ros.model.ros.Service;
+import org.ros.model.ros.ServiceClient;
+import org.ros.model.ros.ServiceServer;
 import org.ros.model.ros.Subscriber;
 import org.ros.model.ros.Topic;
 import org.ros.model.ros.diagram.edit.parts.NodeEditPart;
+import org.ros.model.ros.diagram.edit.parts.NodeParametersEditPart;
 import org.ros.model.ros.diagram.edit.parts.PackageEditPart;
+import org.ros.model.ros.diagram.edit.parts.ParameterEditPart;
 import org.ros.model.ros.diagram.edit.parts.PublisherEditPart;
+import org.ros.model.ros.diagram.edit.parts.ServiceClientEditPart;
+import org.ros.model.ros.diagram.edit.parts.ServiceEditPart;
+import org.ros.model.ros.diagram.edit.parts.ServiceServerEditPart;
 import org.ros.model.ros.diagram.edit.parts.SubscriberEditPart;
 import org.ros.model.ros.diagram.edit.parts.TopicEditPart;
 import org.ros.model.ros.diagram.providers.RosElementTypes;
@@ -36,6 +45,8 @@ public static List<RosNodeDescriptor> getSemanticChildren(View view) {
 		switch (RosVisualIDRegistry.getVisualID(view)) {
 		case PackageEditPart.VISUAL_ID:
 			return getPackage_1000SemanticChildren(view);
+		case NodeParametersEditPart.VISUAL_ID:
+			return getNodeParameters_7001SemanticChildren(view);
 		}
 		return Collections.emptyList();
 	}
@@ -50,20 +61,56 @@ public static List<RosNodeDescriptor> getPackage_1000SemanticChildren(
 		}
 		Package modelElement = (Package) view.getElement();
 		LinkedList<RosNodeDescriptor> result = new LinkedList<RosNodeDescriptor>();
-		for (Iterator<?> it = modelElement.getTopic().iterator(); it.hasNext();) {
-			Topic childElement = (Topic) it.next();
+		for (Iterator<?> it = modelElement.getNode().iterator(); it.hasNext();) {
+			Node childElement = (Node) it.next();
+			int visualID = RosVisualIDRegistry.getNodeVisualID(view,
+					childElement);
+			if (visualID == NodeEditPart.VISUAL_ID) {
+				result.add(new RosNodeDescriptor(childElement, visualID));
+				continue;
+			}
+		}
+		{
+			Topic childElement = modelElement.getTopic();
 			int visualID = RosVisualIDRegistry.getNodeVisualID(view,
 					childElement);
 			if (visualID == TopicEditPart.VISUAL_ID) {
 				result.add(new RosNodeDescriptor(childElement, visualID));
+			}
+		}
+		for (Iterator<?> it = modelElement.getService().iterator(); it
+				.hasNext();) {
+			Service childElement = (Service) it.next();
+			int visualID = RosVisualIDRegistry.getNodeVisualID(view,
+					childElement);
+			if (visualID == ServiceEditPart.VISUAL_ID) {
+				result.add(new RosNodeDescriptor(childElement, visualID));
 				continue;
 			}
 		}
-		for (Iterator<?> it = modelElement.getNode().iterator(); it.hasNext();) {
-			Node childElement = (Node) it.next();
+		return result;
+	}
+
+	/**
+	 * @generated
+	 */
+	public static List<RosNodeDescriptor> getNodeParameters_7001SemanticChildren(
+			View view) {
+		if (false == view.eContainer() instanceof View) {
+			return Collections.emptyList();
+		}
+		View containerView = (View) view.eContainer();
+		if (!containerView.isSetElement()) {
+			return Collections.emptyList();
+		}
+		Node modelElement = (Node) containerView.getElement();
+		LinkedList<RosNodeDescriptor> result = new LinkedList<RosNodeDescriptor>();
+		for (Iterator<?> it = modelElement.getParameter().iterator(); it
+				.hasNext();) {
+			Parameter childElement = (Parameter) it.next();
 			int visualID = RosVisualIDRegistry.getNodeVisualID(view,
 					childElement);
-			if (visualID == NodeEditPart.VISUAL_ID) {
+			if (visualID == ParameterEditPart.VISUAL_ID) {
 				result.add(new RosNodeDescriptor(childElement, visualID));
 				continue;
 			}
@@ -78,14 +125,22 @@ public static List<RosLinkDescriptor> getContainedLinks(View view) {
 		switch (RosVisualIDRegistry.getVisualID(view)) {
 		case PackageEditPart.VISUAL_ID:
 			return getPackage_1000ContainedLinks(view);
-		case TopicEditPart.VISUAL_ID:
-			return getTopic_2001ContainedLinks(view);
 		case NodeEditPart.VISUAL_ID:
-			return getNode_2002ContainedLinks(view);
+			return getNode_2001ContainedLinks(view);
+		case TopicEditPart.VISUAL_ID:
+			return getTopic_2002ContainedLinks(view);
+		case ServiceEditPart.VISUAL_ID:
+			return getService_2003ContainedLinks(view);
+		case ParameterEditPart.VISUAL_ID:
+			return getParameter_3001ContainedLinks(view);
+		case ServiceClientEditPart.VISUAL_ID:
+			return getServiceClient_4001ContainedLinks(view);
 		case SubscriberEditPart.VISUAL_ID:
-			return getSubscriber_4001ContainedLinks(view);
+			return getSubscriber_4002ContainedLinks(view);
+		case ServiceServerEditPart.VISUAL_ID:
+			return getServiceServer_4003ContainedLinks(view);
 		case PublisherEditPart.VISUAL_ID:
-			return getPublisher_4002ContainedLinks(view);
+			return getPublisher_4004ContainedLinks(view);
 		}
 		return Collections.emptyList();
 	}
@@ -95,14 +150,22 @@ public static List<RosLinkDescriptor> getContainedLinks(View view) {
 	 */
 	public static List<RosLinkDescriptor> getIncomingLinks(View view) {
 		switch (RosVisualIDRegistry.getVisualID(view)) {
-		case TopicEditPart.VISUAL_ID:
-			return getTopic_2001IncomingLinks(view);
 		case NodeEditPart.VISUAL_ID:
-			return getNode_2002IncomingLinks(view);
+			return getNode_2001IncomingLinks(view);
+		case TopicEditPart.VISUAL_ID:
+			return getTopic_2002IncomingLinks(view);
+		case ServiceEditPart.VISUAL_ID:
+			return getService_2003IncomingLinks(view);
+		case ParameterEditPart.VISUAL_ID:
+			return getParameter_3001IncomingLinks(view);
+		case ServiceClientEditPart.VISUAL_ID:
+			return getServiceClient_4001IncomingLinks(view);
 		case SubscriberEditPart.VISUAL_ID:
-			return getSubscriber_4001IncomingLinks(view);
+			return getSubscriber_4002IncomingLinks(view);
+		case ServiceServerEditPart.VISUAL_ID:
+			return getServiceServer_4003IncomingLinks(view);
 		case PublisherEditPart.VISUAL_ID:
-			return getPublisher_4002IncomingLinks(view);
+			return getPublisher_4004IncomingLinks(view);
 		}
 		return Collections.emptyList();
 	}
@@ -112,14 +175,22 @@ public static List<RosLinkDescriptor> getIncomingLinks(View view) {
 	 */
 	public static List<RosLinkDescriptor> getOutgoingLinks(View view) {
 		switch (RosVisualIDRegistry.getVisualID(view)) {
-		case TopicEditPart.VISUAL_ID:
-			return getTopic_2001OutgoingLinks(view);
 		case NodeEditPart.VISUAL_ID:
-			return getNode_2002OutgoingLinks(view);
+			return getNode_2001OutgoingLinks(view);
+		case TopicEditPart.VISUAL_ID:
+			return getTopic_2002OutgoingLinks(view);
+		case ServiceEditPart.VISUAL_ID:
+			return getService_2003OutgoingLinks(view);
+		case ParameterEditPart.VISUAL_ID:
+			return getParameter_3001OutgoingLinks(view);
+		case ServiceClientEditPart.VISUAL_ID:
+			return getServiceClient_4001OutgoingLinks(view);
 		case SubscriberEditPart.VISUAL_ID:
-			return getSubscriber_4001OutgoingLinks(view);
+			return getSubscriber_4002OutgoingLinks(view);
+		case ServiceServerEditPart.VISUAL_ID:
+			return getServiceServer_4003OutgoingLinks(view);
 		case PublisherEditPart.VISUAL_ID:
-			return getPublisher_4002OutgoingLinks(view);
+			return getPublisher_4004OutgoingLinks(view);
 		}
 		return Collections.emptyList();
 	}
@@ -135,113 +206,244 @@ public static List<RosLinkDescriptor> getPackage_1000ContainedLinks(
 	/**
 	 * @generated
 	 */
-	public static List<RosLinkDescriptor> getTopic_2001ContainedLinks(View view) {
+	public static List<RosLinkDescriptor> getNode_2001ContainedLinks(View view) {
+		Node modelElement = (Node) view.getElement();
+		LinkedList<RosLinkDescriptor> result = new LinkedList<RosLinkDescriptor>();
+		result.addAll(getContainedTypeModelFacetLinks_ServiceClient_4001(modelElement));
+		result.addAll(getContainedTypeModelFacetLinks_Subscriber_4002(modelElement));
+		result.addAll(getContainedTypeModelFacetLinks_ServiceServer_4003(modelElement));
+		result.addAll(getContainedTypeModelFacetLinks_Publisher_4004(modelElement));
+		return result;
+	}
+
+	/**
+	 * @generated
+	 */
+	public static List<RosLinkDescriptor> getTopic_2002ContainedLinks(View view) {
 		return Collections.emptyList();
 	}
 
 	/**
 	 * @generated
 	 */
-	public static List<RosLinkDescriptor> getNode_2002ContainedLinks(View view) {
-		Node modelElement = (Node) view.getElement();
-		LinkedList<RosLinkDescriptor> result = new LinkedList<RosLinkDescriptor>();
-		result.addAll(getContainedTypeModelFacetLinks_Subscriber_4001(modelElement));
-		result.addAll(getContainedTypeModelFacetLinks_Publisher_4002(modelElement));
-		return result;
+	public static List<RosLinkDescriptor> getService_2003ContainedLinks(
+			View view) {
+		return Collections.emptyList();
+	}
+
+	/**
+	 * @generated
+	 */
+	public static List<RosLinkDescriptor> getParameter_3001ContainedLinks(
+			View view) {
+		return Collections.emptyList();
+	}
+
+	/**
+	 * @generated
+	 */
+	public static List<RosLinkDescriptor> getServiceClient_4001ContainedLinks(
+			View view) {
+		return Collections.emptyList();
 	}
 
 	/**
 	 * @generated
 	 */
-	public static List<RosLinkDescriptor> getSubscriber_4001ContainedLinks(
+	public static List<RosLinkDescriptor> getSubscriber_4002ContainedLinks(
 			View view) {
 		return Collections.emptyList();
 	}
 
 	/**
 	 * @generated
 	 */
-	public static List<RosLinkDescriptor> getPublisher_4002ContainedLinks(
+	public static List<RosLinkDescriptor> getServiceServer_4003ContainedLinks(
 			View view) {
 		return Collections.emptyList();
 	}
 
 	/**
 	 * @generated
 	 */
-	public static List<RosLinkDescriptor> getTopic_2001IncomingLinks(View view) {
+	public static List<RosLinkDescriptor> getPublisher_4004ContainedLinks(
+			View view) {
+		return Collections.emptyList();
+	}
+
+	/**
+	 * @generated
+	 */
+	public static List<RosLinkDescriptor> getNode_2001IncomingLinks(View view) {
+		return Collections.emptyList();
+	}
+
+	/**
+	 * @generated
+	 */
+	public static List<RosLinkDescriptor> getTopic_2002IncomingLinks(View view) {
 		Topic modelElement = (Topic) view.getElement();
 		Map<EObject, Collection<EStructuralFeature.Setting>> crossReferences = EcoreUtil.CrossReferencer
 				.find(view.eResource().getResourceSet().getResources());
 		LinkedList<RosLinkDescriptor> result = new LinkedList<RosLinkDescriptor>();
-		result.addAll(getIncomingTypeModelFacetLinks_Subscriber_4001(
+		result.addAll(getIncomingTypeModelFacetLinks_Subscriber_4002(
 				modelElement, crossReferences));
-		result.addAll(getIncomingTypeModelFacetLinks_Publisher_4002(
+		result.addAll(getIncomingTypeModelFacetLinks_Publisher_4004(
 				modelElement, crossReferences));
 		return result;
 	}
 
 	/**
 	 * @generated
 	 */
-	public static List<RosLinkDescriptor> getNode_2002IncomingLinks(View view) {
+	public static List<RosLinkDescriptor> getService_2003IncomingLinks(View view) {
+		Service modelElement = (Service) view.getElement();
+		Map<EObject, Collection<EStructuralFeature.Setting>> crossReferences = EcoreUtil.CrossReferencer
+				.find(view.eResource().getResourceSet().getResources());
+		LinkedList<RosLinkDescriptor> result = new LinkedList<RosLinkDescriptor>();
+		result.addAll(getIncomingTypeModelFacetLinks_ServiceClient_4001(
+				modelElement, crossReferences));
+		result.addAll(getIncomingTypeModelFacetLinks_ServiceServer_4003(
+				modelElement, crossReferences));
+		return result;
+	}
+
+	/**
+	 * @generated
+	 */
+	public static List<RosLinkDescriptor> getParameter_3001IncomingLinks(
+			View view) {
+		return Collections.emptyList();
+	}
+
+	/**
+	 * @generated
+	 */
+	public static List<RosLinkDescriptor> getServiceClient_4001IncomingLinks(
+			View view) {
 		return Collections.emptyList();
 	}
 
 	/**
 	 * @generated
 	 */
-	public static List<RosLinkDescriptor> getSubscriber_4001IncomingLinks(
+	public static List<RosLinkDescriptor> getSubscriber_4002IncomingLinks(
 			View view) {
 		return Collections.emptyList();
 	}
 
 	/**
 	 * @generated
 	 */
-	public static List<RosLinkDescriptor> getPublisher_4002IncomingLinks(
+	public static List<RosLinkDescriptor> getServiceServer_4003IncomingLinks(
 			View view) {
 		return Collections.emptyList();
 	}
 
 	/**
 	 * @generated
 	 */
-	public static List<RosLinkDescriptor> getTopic_2001OutgoingLinks(View view) {
+	public static List<RosLinkDescriptor> getPublisher_4004IncomingLinks(
+			View view) {
 		return Collections.emptyList();
 	}
 
 	/**
 	 * @generated
 	 */
-	public static List<RosLinkDescriptor> getNode_2002OutgoingLinks(View view) {
+	public static List<RosLinkDescriptor> getNode_2001OutgoingLinks(View view) {
 		Node modelElement = (Node) view.getElement();
 		LinkedList<RosLinkDescriptor> result = new LinkedList<RosLinkDescriptor>();
-		result.addAll(getContainedTypeModelFacetLinks_Subscriber_4001(modelElement));
-		result.addAll(getContainedTypeModelFacetLinks_Publisher_4002(modelElement));
+		result.addAll(getContainedTypeModelFacetLinks_ServiceClient_4001(modelElement));
+		result.addAll(getContainedTypeModelFacetLinks_Subscriber_4002(modelElement));
+		result.addAll(getContainedTypeModelFacetLinks_ServiceServer_4003(modelElement));
+		result.addAll(getContainedTypeModelFacetLinks_Publisher_4004(modelElement));
 		return result;
 	}
 
 	/**
 	 * @generated
 	 */
-	public static List<RosLinkDescriptor> getSubscriber_4001OutgoingLinks(
+	public static List<RosLinkDescriptor> getTopic_2002OutgoingLinks(View view) {
+		return Collections.emptyList();
+	}
+
+	/**
+	 * @generated
+	 */
+	public static List<RosLinkDescriptor> getService_2003OutgoingLinks(View view) {
+		return Collections.emptyList();
+	}
+
+	/**
+	 * @generated
+	 */
+	public static List<RosLinkDescriptor> getParameter_3001OutgoingLinks(
+			View view) {
+		return Collections.emptyList();
+	}
+
+	/**
+	 * @generated
+	 */
+	public static List<RosLinkDescriptor> getServiceClient_4001OutgoingLinks(
 			View view) {
 		return Collections.emptyList();
 	}
 
 	/**
 	 * @generated
 	 */
-	public static List<RosLinkDescriptor> getPublisher_4002OutgoingLinks(
+	public static List<RosLinkDescriptor> getSubscriber_4002OutgoingLinks(
 			View view) {
 		return Collections.emptyList();
 	}
 
 	/**
 	 * @generated
 	 */
-	private static Collection<RosLinkDescriptor> getContainedTypeModelFacetLinks_Subscriber_4001(
+	public static List<RosLinkDescriptor> getServiceServer_4003OutgoingLinks(
+			View view) {
+		return Collections.emptyList();
+	}
+
+	/**
+	 * @generated
+	 */
+	public static List<RosLinkDescriptor> getPublisher_4004OutgoingLinks(
+			View view) {
+		return Collections.emptyList();
+	}
+
+	/**
+	 * @generated
+	 */
+	private static Collection<RosLinkDescriptor> getContainedTypeModelFacetLinks_ServiceClient_4001(
+			Node container) {
+		LinkedList<RosLinkDescriptor> result = new LinkedList<RosLinkDescriptor>();
+		for (Iterator<?> links = container.getServiceClient().iterator(); links
+				.hasNext();) {
+			EObject linkObject = (EObject) links.next();
+			if (false == linkObject instanceof ServiceClient) {
+				continue;
+			}
+			ServiceClient link = (ServiceClient) linkObject;
+			if (ServiceClientEditPart.VISUAL_ID != RosVisualIDRegistry
+					.getLinkWithClassVisualID(link)) {
+				continue;
+			}
+			Service dst = link.getService();
+			result.add(new RosLinkDescriptor(container, dst, link,
+					RosElementTypes.ServiceClient_4001,
+					ServiceClientEditPart.VISUAL_ID));
+		}
+		return result;
+	}
+
+	/**
+	 * @generated
+	 */
+	private static Collection<RosLinkDescriptor> getContainedTypeModelFacetLinks_Subscriber_4002(
 			Node container) {
 		LinkedList<RosLinkDescriptor> result = new LinkedList<RosLinkDescriptor>();
 		for (Iterator<?> links = container.getSubscriber().iterator(); links
@@ -257,7 +459,7 @@ private static Collection<RosLinkDescriptor> getContainedTypeModelFacetLinks_Sub
 			}
 			Topic dst = link.getTopic();
 			result.add(new RosLinkDescriptor(container, dst, link,
-					RosElementTypes.Subscriber_4001,
+					RosElementTypes.Subscriber_4002,
 					SubscriberEditPart.VISUAL_ID));
 		}
 		return result;
@@ -266,7 +468,32 @@ private static Collection<RosLinkDescriptor> getContainedTypeModelFacetLinks_Sub
 	/**
 	 * @generated
 	 */
-	private static Collection<RosLinkDescriptor> getContainedTypeModelFacetLinks_Publisher_4002(
+	private static Collection<RosLinkDescriptor> getContainedTypeModelFacetLinks_ServiceServer_4003(
+			Node container) {
+		LinkedList<RosLinkDescriptor> result = new LinkedList<RosLinkDescriptor>();
+		for (Iterator<?> links = container.getServiceServer().iterator(); links
+				.hasNext();) {
+			EObject linkObject = (EObject) links.next();
+			if (false == linkObject instanceof ServiceServer) {
+				continue;
+			}
+			ServiceServer link = (ServiceServer) linkObject;
+			if (ServiceServerEditPart.VISUAL_ID != RosVisualIDRegistry
+					.getLinkWithClassVisualID(link)) {
+				continue;
+			}
+			Service dst = link.getService();
+			result.add(new RosLinkDescriptor(container, dst, link,
+					RosElementTypes.ServiceServer_4003,
+					ServiceServerEditPart.VISUAL_ID));
+		}
+		return result;
+	}
+
+	/**
+	 * @generated
+	 */
+	private static Collection<RosLinkDescriptor> getContainedTypeModelFacetLinks_Publisher_4004(
 			Node container) {
 		LinkedList<RosLinkDescriptor> result = new LinkedList<RosLinkDescriptor>();
 		for (Iterator<?> links = container.getPublisher().iterator(); links
@@ -282,15 +509,47 @@ private static Collection<RosLinkDescriptor> getContainedTypeModelFacetLinks_Pub
 			}
 			Topic dst = link.getTopic();
 			result.add(new RosLinkDescriptor(container, dst, link,
-					RosElementTypes.Publisher_4002, PublisherEditPart.VISUAL_ID));
+					RosElementTypes.Publisher_4004, PublisherEditPart.VISUAL_ID));
 		}
 		return result;
 	}
 
 	/**
 	 * @generated
 	 */
-	private static Collection<RosLinkDescriptor> getIncomingTypeModelFacetLinks_Subscriber_4001(
+	private static Collection<RosLinkDescriptor> getIncomingTypeModelFacetLinks_ServiceClient_4001(
+			Service target,
+			Map<EObject, Collection<EStructuralFeature.Setting>> crossReferences) {
+		LinkedList<RosLinkDescriptor> result = new LinkedList<RosLinkDescriptor>();
+		Collection<EStructuralFeature.Setting> settings = crossReferences
+				.get(target);
+		for (EStructuralFeature.Setting setting : settings) {
+			if (setting.getEStructuralFeature() != RosPackage.eINSTANCE
+					.getServiceClient_Service()
+					|| false == setting.getEObject() instanceof ServiceClient) {
+				continue;
+			}
+			ServiceClient link = (ServiceClient) setting.getEObject();
+			if (ServiceClientEditPart.VISUAL_ID != RosVisualIDRegistry
+					.getLinkWithClassVisualID(link)) {
+				continue;
+			}
+			if (false == link.eContainer() instanceof Node) {
+				continue;
+			}
+			Node container = (Node) link.eContainer();
+			result.add(new RosLinkDescriptor(container, target, link,
+					RosElementTypes.ServiceClient_4001,
+					ServiceClientEditPart.VISUAL_ID));
+
+		}
+		return result;
+	}
+
+	/**
+	 * @generated
+	 */
+	private static Collection<RosLinkDescriptor> getIncomingTypeModelFacetLinks_Subscriber_4002(
 			Topic target,
 			Map<EObject, Collection<EStructuralFeature.Setting>> crossReferences) {
 		LinkedList<RosLinkDescriptor> result = new LinkedList<RosLinkDescriptor>();
@@ -312,7 +571,7 @@ private static Collection<RosLinkDescriptor> getIncomingTypeModelFacetLinks_Subs
 			}
 			Node container = (Node) link.eContainer();
 			result.add(new RosLinkDescriptor(container, target, link,
-					RosElementTypes.Subscriber_4001,
+					RosElementTypes.Subscriber_4002,
 					SubscriberEditPart.VISUAL_ID));
 
 		}
@@ -322,7 +581,39 @@ private static Collection<RosLinkDescriptor> getIncomingTypeModelFacetLinks_Subs
 	/**
 	 * @generated
 	 */
-	private static Collection<RosLinkDescriptor> getIncomingTypeModelFacetLinks_Publisher_4002(
+	private static Collection<RosLinkDescriptor> getIncomingTypeModelFacetLinks_ServiceServer_4003(
+			Service target,
+			Map<EObject, Collection<EStructuralFeature.Setting>> crossReferences) {
+		LinkedList<RosLinkDescriptor> result = new LinkedList<RosLinkDescriptor>();
+		Collection<EStructuralFeature.Setting> settings = crossReferences
+				.get(target);
+		for (EStructuralFeature.Setting setting : settings) {
+			if (setting.getEStructuralFeature() != RosPackage.eINSTANCE
+					.getServiceServer_Service()
+					|| false == setting.getEObject() instanceof ServiceServer) {
+				continue;
+			}
+			ServiceServer link = (ServiceServer) setting.getEObject();
+			if (ServiceServerEditPart.VISUAL_ID != RosVisualIDRegistry
+					.getLinkWithClassVisualID(link)) {
+				continue;
+			}
+			if (false == link.eContainer() instanceof Node) {
+				continue;
+			}
+			Node container = (Node) link.eContainer();
+			result.add(new RosLinkDescriptor(container, target, link,
+					RosElementTypes.ServiceServer_4003,
+					ServiceServerEditPart.VISUAL_ID));
+
+		}
+		return result;
+	}
+
+	/**
+	 * @generated
+	 */
+	private static Collection<RosLinkDescriptor> getIncomingTypeModelFacetLinks_Publisher_4004(
 			Topic target,
 			Map<EObject, Collection<EStructuralFeature.Setting>> crossReferences) {
 		LinkedList<RosLinkDescriptor> result = new LinkedList<RosLinkDescriptor>();
@@ -344,7 +635,7 @@ private static Collection<RosLinkDescriptor> getIncomingTypeModelFacetLinks_Publ
 			}
 			Node container = (Node) link.eContainer();
 			result.add(new RosLinkDescriptor(container, target, link,
-					RosElementTypes.Publisher_4002, PublisherEditPart.VISUAL_ID));
+					RosElementTypes.Publisher_4004, PublisherEditPart.VISUAL_ID));
 
 		}
 		return result;
https://github.com/ipa320/bride/raw/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fpart%2FRosDiagramUpdater.java
bbfea100d4ea95261c037117780df92c9f0344ad
modified
https://github.com/ipa320/bride/blob/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fpart%2FRosPaletteFactory.java
https://api.github.com/repos/ipa320/bride/contents/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fpart%2FRosPaletteFactory.java?ref=01bc5c83c895357f23a345ecec85a3796cf66358
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/part/RosPaletteFactory.java
		paletteContainer.add(createService5CreationTool());
		paletteContainer.add(createServiceServer6CreationTool());
		paletteContainer.add(createServiceClient7CreationTool());
		paletteContainer.add(createParameter8CreationTool());
				Collections.singletonList(RosElementTypes.Node_2001));
				.getImageDescriptor(RosElementTypes.Node_2001));
				Collections.singletonList(RosElementTypes.Publisher_4004));
				.getImageDescriptor(RosElementTypes.Publisher_4004));
				Collections.singletonList(RosElementTypes.Subscriber_4002));
				.getImageDescriptor(RosElementTypes.Subscriber_4002));
				Collections.singletonList(RosElementTypes.Topic_2002));
				.getImageDescriptor(RosElementTypes.Topic_2002));
		entry.setLargeIcon(entry.getSmallIcon());
		return entry;
	}

	/**
	 * @generated
	 */
	private ToolEntry createService5CreationTool() {
		NodeToolEntry entry = new NodeToolEntry(
				Messages.Service5CreationTool_title,
				Messages.Service5CreationTool_desc,
				Collections.singletonList(RosElementTypes.Service_2003));
		entry.setId("createService5CreationTool"); //$NON-NLS-1$
		entry.setSmallIcon(RosElementTypes
				.getImageDescriptor(RosElementTypes.Service_2003));
		entry.setLargeIcon(entry.getSmallIcon());
		return entry;
	}

	/**
	 * @generated
	 */
	private ToolEntry createServiceServer6CreationTool() {
		LinkToolEntry entry = new LinkToolEntry(
				Messages.ServiceServer6CreationTool_title,
				Messages.ServiceServer6CreationTool_desc,
				Collections.singletonList(RosElementTypes.ServiceServer_4003));
		entry.setId("createServiceServer6CreationTool"); //$NON-NLS-1$
		entry.setSmallIcon(RosElementTypes
				.getImageDescriptor(RosElementTypes.ServiceServer_4003));
		entry.setLargeIcon(entry.getSmallIcon());
		return entry;
	}

	/**
	 * @generated
	 */
	private ToolEntry createServiceClient7CreationTool() {
		LinkToolEntry entry = new LinkToolEntry(
				Messages.ServiceClient7CreationTool_title,
				Messages.ServiceClient7CreationTool_desc,
				Collections.singletonList(RosElementTypes.ServiceClient_4001));
		entry.setId("createServiceClient7CreationTool"); //$NON-NLS-1$
		entry.setSmallIcon(RosElementTypes
				.getImageDescriptor(RosElementTypes.ServiceClient_4001));
		entry.setLargeIcon(entry.getSmallIcon());
		return entry;
	}

	/**
	 * @generated
	 */
	private ToolEntry createParameter8CreationTool() {
		NodeToolEntry entry = new NodeToolEntry(
				Messages.Parameter8CreationTool_title,
				Messages.Parameter8CreationTool_desc,
				Collections.singletonList(RosElementTypes.Parameter_3001));
		entry.setId("createParameter8CreationTool"); //$NON-NLS-1$
		entry.setSmallIcon(RosElementTypes
				.getImageDescriptor(RosElementTypes.Parameter_3001));
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/part/RosPaletteFactory.java
NodeToolEntry entry = new NodeToolEntry(
				Messages.Service5CreationTool_title,
				Messages.Service5CreationTool_desc,
				Collections.singletonList(RosElementTypes.Service_2003));
		entry.setId("createService5CreationTool"); //$NON-NLS-1$
		entry.setSmallIcon(RosElementTypes
				.getImageDescriptor(RosElementTypes.Service_2003));
		entry.setLargeIcon(entry.getSmallIcon());
		return entry;
ToolEntry createService5CreationTool()
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/part/RosPaletteFactory.java
LinkToolEntry entry = new LinkToolEntry(
				Messages.ServiceServer6CreationTool_title,
				Messages.ServiceServer6CreationTool_desc,
				Collections.singletonList(RosElementTypes.ServiceServer_4003));
		entry.setId("createServiceServer6CreationTool"); //$NON-NLS-1$
		entry.setSmallIcon(RosElementTypes
				.getImageDescriptor(RosElementTypes.ServiceServer_4003));
		entry.setLargeIcon(entry.getSmallIcon());
		return entry;
ToolEntry createServiceServer6CreationTool()
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/part/RosPaletteFactory.java
LinkToolEntry entry = new LinkToolEntry(
				Messages.ServiceClient7CreationTool_title,
				Messages.ServiceClient7CreationTool_desc,
				Collections.singletonList(RosElementTypes.ServiceClient_4001));
		entry.setId("createServiceClient7CreationTool"); //$NON-NLS-1$
		entry.setSmallIcon(RosElementTypes
				.getImageDescriptor(RosElementTypes.ServiceClient_4001));
		entry.setLargeIcon(entry.getSmallIcon());
		return entry;
ToolEntry createServiceClient7CreationTool()
				Collections.singletonList(RosElementTypes.Node_2002));
				.getImageDescriptor(RosElementTypes.Node_2002));
				Collections.singletonList(RosElementTypes.Publisher_4002));
				.getImageDescriptor(RosElementTypes.Publisher_4002));
				Collections.singletonList(RosElementTypes.Subscriber_4001));
				.getImageDescriptor(RosElementTypes.Subscriber_4001));
				Collections.singletonList(RosElementTypes.Topic_2001));
				.getImageDescriptor(RosElementTypes.Topic_2001));
@@ -37,6 +37,10 @@ private PaletteContainer createRos1Group() {
 		paletteContainer.add(createPublisher2CreationTool());
 		paletteContainer.add(createSubscriber3CreationTool());
 		paletteContainer.add(createTopic4CreationTool());
+		paletteContainer.add(createService5CreationTool());
+		paletteContainer.add(createServiceServer6CreationTool());
+		paletteContainer.add(createServiceClient7CreationTool());
+		paletteContainer.add(createParameter8CreationTool());
 		return paletteContainer;
 	}
 
@@ -47,10 +51,10 @@ private ToolEntry createNode1CreationTool() {
 		NodeToolEntry entry = new NodeToolEntry(
 				Messages.Node1CreationTool_title,
 				Messages.Node1CreationTool_desc,
-				Collections.singletonList(RosElementTypes.Node_2002));
+				Collections.singletonList(RosElementTypes.Node_2001));
 		entry.setId("createNode1CreationTool"); //$NON-NLS-1$
 		entry.setSmallIcon(RosElementTypes
-				.getImageDescriptor(RosElementTypes.Node_2002));
+				.getImageDescriptor(RosElementTypes.Node_2001));
 		entry.setLargeIcon(entry.getSmallIcon());
 		return entry;
 	}
@@ -62,10 +66,10 @@ private ToolEntry createPublisher2CreationTool() {
 		LinkToolEntry entry = new LinkToolEntry(
 				Messages.Publisher2CreationTool_title,
 				Messages.Publisher2CreationTool_desc,
-				Collections.singletonList(RosElementTypes.Publisher_4002));
+				Collections.singletonList(RosElementTypes.Publisher_4004));
 		entry.setId("createPublisher2CreationTool"); //$NON-NLS-1$
 		entry.setSmallIcon(RosElementTypes
-				.getImageDescriptor(RosElementTypes.Publisher_4002));
+				.getImageDescriptor(RosElementTypes.Publisher_4004));
 		entry.setLargeIcon(entry.getSmallIcon());
 		return entry;
 	}
@@ -77,10 +81,10 @@ private ToolEntry createSubscriber3CreationTool() {
 		LinkToolEntry entry = new LinkToolEntry(
 				Messages.Subscriber3CreationTool_title,
 				Messages.Subscriber3CreationTool_desc,
-				Collections.singletonList(RosElementTypes.Subscriber_4001));
+				Collections.singletonList(RosElementTypes.Subscriber_4002));
 		entry.setId("createSubscriber3CreationTool"); //$NON-NLS-1$
 		entry.setSmallIcon(RosElementTypes
-				.getImageDescriptor(RosElementTypes.Subscriber_4001));
+				.getImageDescriptor(RosElementTypes.Subscriber_4002));
 		entry.setLargeIcon(entry.getSmallIcon());
 		return entry;
 	}
@@ -92,10 +96,70 @@ private ToolEntry createTopic4CreationTool() {
 		NodeToolEntry entry = new NodeToolEntry(
 				Messages.Topic4CreationTool_title,
 				Messages.Topic4CreationTool_desc,
-				Collections.singletonList(RosElementTypes.Topic_2001));
+				Collections.singletonList(RosElementTypes.Topic_2002));
 		entry.setId("createTopic4CreationTool"); //$NON-NLS-1$
 		entry.setSmallIcon(RosElementTypes
-				.getImageDescriptor(RosElementTypes.Topic_2001));
+				.getImageDescriptor(RosElementTypes.Topic_2002));
+		entry.setLargeIcon(entry.getSmallIcon());
+		return entry;
+	}
+
+	/**
+	 * @generated
+	 */
+	private ToolEntry createService5CreationTool() {
+		NodeToolEntry entry = new NodeToolEntry(
+				Messages.Service5CreationTool_title,
+				Messages.Service5CreationTool_desc,
+				Collections.singletonList(RosElementTypes.Service_2003));
+		entry.setId("createService5CreationTool"); //$NON-NLS-1$
+		entry.setSmallIcon(RosElementTypes
+				.getImageDescriptor(RosElementTypes.Service_2003));
+		entry.setLargeIcon(entry.getSmallIcon());
+		return entry;
+	}
+
+	/**
+	 * @generated
+	 */
+	private ToolEntry createServiceServer6CreationTool() {
+		LinkToolEntry entry = new LinkToolEntry(
+				Messages.ServiceServer6CreationTool_title,
+				Messages.ServiceServer6CreationTool_desc,
+				Collections.singletonList(RosElementTypes.ServiceServer_4003));
+		entry.setId("createServiceServer6CreationTool"); //$NON-NLS-1$
+		entry.setSmallIcon(RosElementTypes
+				.getImageDescriptor(RosElementTypes.ServiceServer_4003));
+		entry.setLargeIcon(entry.getSmallIcon());
+		return entry;
+	}
+
+	/**
+	 * @generated
+	 */
+	private ToolEntry createServiceClient7CreationTool() {
+		LinkToolEntry entry = new LinkToolEntry(
+				Messages.ServiceClient7CreationTool_title,
+				Messages.ServiceClient7CreationTool_desc,
+				Collections.singletonList(RosElementTypes.ServiceClient_4001));
+		entry.setId("createServiceClient7CreationTool"); //$NON-NLS-1$
+		entry.setSmallIcon(RosElementTypes
+				.getImageDescriptor(RosElementTypes.ServiceClient_4001));
+		entry.setLargeIcon(entry.getSmallIcon());
+		return entry;
+	}
+
+	/**
+	 * @generated
+	 */
+	private ToolEntry createParameter8CreationTool() {
+		NodeToolEntry entry = new NodeToolEntry(
+				Messages.Parameter8CreationTool_title,
+				Messages.Parameter8CreationTool_desc,
+				Collections.singletonList(RosElementTypes.Parameter_3001));
+		entry.setId("createParameter8CreationTool"); //$NON-NLS-1$
+		entry.setSmallIcon(RosElementTypes
+				.getImageDescriptor(RosElementTypes.Parameter_3001));
 		entry.setLargeIcon(entry.getSmallIcon());
 		return entry;
 	}
https://github.com/ipa320/bride/raw/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fpart%2FRosPaletteFactory.java
530c80ec4f8d8ea92bd24f522af0248cba90c930
modified
https://github.com/ipa320/bride/blob/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fpart%2FRosVisualIDRegistry.java
https://api.github.com/repos/ipa320/bride/contents/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fpart%2FRosVisualIDRegistry.java?ref=01bc5c83c895357f23a345ecec85a3796cf66358
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/part/RosVisualIDRegistry.java
import org.ros.model.ros.diagram.edit.parts.NodeParametersEditPart;
import org.ros.model.ros.diagram.edit.parts.ParameterEditPart;
import org.ros.model.ros.diagram.edit.parts.ServiceClientEditPart;
import org.ros.model.ros.diagram.edit.parts.ServiceClientNameEditPart;
import org.ros.model.ros.diagram.edit.parts.ServiceEditPart;
import org.ros.model.ros.diagram.edit.parts.ServiceNameEditPart;
import org.ros.model.ros.diagram.edit.parts.ServiceServerEditPart;
import org.ros.model.ros.diagram.edit.parts.ServiceServerNameEditPart;
			if (RosPackage.eINSTANCE.getNode().isSuperTypeOf(
					domainElement.eClass())) {
				return NodeEditPart.VISUAL_ID;
			}
			if (RosPackage.eINSTANCE.getService().isSuperTypeOf(
				return ServiceEditPart.VISUAL_ID;
			}
			break;
		case NodeParametersEditPart.VISUAL_ID:
			if (RosPackage.eINSTANCE.getParameter().isSuperTypeOf(
					domainElement.eClass())) {
				return ParameterEditPart.VISUAL_ID;
			if (NodeEditPart.VISUAL_ID == nodeVisualID) {
				return true;
			}
			if (ServiceEditPart.VISUAL_ID == nodeVisualID) {
				return true;
			}
			break;
		case NodeEditPart.VISUAL_ID:
			if (NodeNameEditPart.VISUAL_ID == nodeVisualID) {
				return true;
			}
			if (NodeParametersEditPart.VISUAL_ID == nodeVisualID) {
		case ServiceEditPart.VISUAL_ID:
			if (ServiceNameEditPart.VISUAL_ID == nodeVisualID) {
				return true;
			}
			break;
		case NodeParametersEditPart.VISUAL_ID:
			if (ParameterEditPart.VISUAL_ID == nodeVisualID) {
				return true;
			}
			break;
		case ServiceClientEditPart.VISUAL_ID:
			if (ServiceClientNameEditPart.VISUAL_ID == nodeVisualID) {
		case ServiceServerEditPart.VISUAL_ID:
			if (ServiceServerNameEditPart.VISUAL_ID == nodeVisualID) {
				return true;
			}
			break;
		if (RosPackage.eINSTANCE.getServiceClient().isSuperTypeOf(
				domainElement.eClass())) {
			return ServiceClientEditPart.VISUAL_ID;
		}
		if (RosPackage.eINSTANCE.getServiceServer().isSuperTypeOf(
				domainElement.eClass())) {
			return ServiceServerEditPart.VISUAL_ID;
		}
			if (RosPackage.eINSTANCE.getNode().isSuperTypeOf(
				return NodeEditPart.VISUAL_ID;
			if (NodeEditPart.VISUAL_ID == nodeVisualID) {
		case NodeEditPart.VISUAL_ID:
			if (NodeNameEditPart.VISUAL_ID == nodeVisualID) {
@@ -9,9 +9,17 @@
 import org.ros.model.ros.RosPackage;
 import org.ros.model.ros.diagram.edit.parts.NodeEditPart;
 import org.ros.model.ros.diagram.edit.parts.NodeNameEditPart;
+import org.ros.model.ros.diagram.edit.parts.NodeParametersEditPart;
 import org.ros.model.ros.diagram.edit.parts.PackageEditPart;
+import org.ros.model.ros.diagram.edit.parts.ParameterEditPart;
 import org.ros.model.ros.diagram.edit.parts.PublisherEditPart;
 import org.ros.model.ros.diagram.edit.parts.PublisherNameEditPart;
+import org.ros.model.ros.diagram.edit.parts.ServiceClientEditPart;
+import org.ros.model.ros.diagram.edit.parts.ServiceClientNameEditPart;
+import org.ros.model.ros.diagram.edit.parts.ServiceEditPart;
+import org.ros.model.ros.diagram.edit.parts.ServiceNameEditPart;
+import org.ros.model.ros.diagram.edit.parts.ServiceServerEditPart;
+import org.ros.model.ros.diagram.edit.parts.ServiceServerNameEditPart;
 import org.ros.model.ros.diagram.edit.parts.SubscriberEditPart;
 import org.ros.model.ros.diagram.edit.parts.SubscriberNameEditPart;
 import org.ros.model.ros.diagram.edit.parts.TopicEditPart;
@@ -125,13 +133,23 @@ public static int getNodeVisualID(View containerView, EObject domainElement) {
 		}
 		switch (containerVisualID) {
 		case PackageEditPart.VISUAL_ID:
+			if (RosPackage.eINSTANCE.getNode().isSuperTypeOf(
+					domainElement.eClass())) {
+				return NodeEditPart.VISUAL_ID;
+			}
 			if (RosPackage.eINSTANCE.getTopic().isSuperTypeOf(
 					domainElement.eClass())) {
 				return TopicEditPart.VISUAL_ID;
 			}
-			if (RosPackage.eINSTANCE.getNode().isSuperTypeOf(
+			if (RosPackage.eINSTANCE.getService().isSuperTypeOf(
 					domainElement.eClass())) {
-				return NodeEditPart.VISUAL_ID;
+				return ServiceEditPart.VISUAL_ID;
+			}
+			break;
+		case NodeParametersEditPart.VISUAL_ID:
+			if (RosPackage.eINSTANCE.getParameter().isSuperTypeOf(
+					domainElement.eClass())) {
+				return ParameterEditPart.VISUAL_ID;
 			}
 			break;
 		}
@@ -160,10 +178,21 @@ public static boolean canCreateNode(View containerView, int nodeVisualID) {
 		}
 		switch (containerVisualID) {
 		case PackageEditPart.VISUAL_ID:
+			if (NodeEditPart.VISUAL_ID == nodeVisualID) {
+				return true;
+			}
 			if (TopicEditPart.VISUAL_ID == nodeVisualID) {
 				return true;
 			}
-			if (NodeEditPart.VISUAL_ID == nodeVisualID) {
+			if (ServiceEditPart.VISUAL_ID == nodeVisualID) {
+				return true;
+			}
+			break;
+		case NodeEditPart.VISUAL_ID:
+			if (NodeNameEditPart.VISUAL_ID == nodeVisualID) {
+				return true;
+			}
+			if (NodeParametersEditPart.VISUAL_ID == nodeVisualID) {
 				return true;
 			}
 			break;
@@ -172,8 +201,18 @@ public static boolean canCreateNode(View containerView, int nodeVisualID) {
 				return true;
 			}
 			break;
-		case NodeEditPart.VISUAL_ID:
-			if (NodeNameEditPart.VISUAL_ID == nodeVisualID) {
+		case ServiceEditPart.VISUAL_ID:
+			if (ServiceNameEditPart.VISUAL_ID == nodeVisualID) {
+				return true;
+			}
+			break;
+		case NodeParametersEditPart.VISUAL_ID:
+			if (ParameterEditPart.VISUAL_ID == nodeVisualID) {
+				return true;
+			}
+			break;
+		case ServiceClientEditPart.VISUAL_ID:
+			if (ServiceClientNameEditPart.VISUAL_ID == nodeVisualID) {
 				return true;
 			}
 			break;
@@ -182,6 +221,11 @@ public static boolean canCreateNode(View containerView, int nodeVisualID) {
 				return true;
 			}
 			break;
+		case ServiceServerEditPart.VISUAL_ID:
+			if (ServiceServerNameEditPart.VISUAL_ID == nodeVisualID) {
+				return true;
+			}
+			break;
 		case PublisherEditPart.VISUAL_ID:
 			if (PublisherNameEditPart.VISUAL_ID == nodeVisualID) {
 				return true;
@@ -198,10 +242,18 @@ public static int getLinkWithClassVisualID(EObject domainElement) {
 		if (domainElement == null) {
 			return -1;
 		}
+		if (RosPackage.eINSTANCE.getServiceClient().isSuperTypeOf(
+				domainElement.eClass())) {
+			return ServiceClientEditPart.VISUAL_ID;
+		}
 		if (RosPackage.eINSTANCE.getSubscriber().isSuperTypeOf(
 				domainElement.eClass())) {
 			return SubscriberEditPart.VISUAL_ID;
 		}
+		if (RosPackage.eINSTANCE.getServiceServer().isSuperTypeOf(
+				domainElement.eClass())) {
+			return ServiceServerEditPart.VISUAL_ID;
+		}
 		if (RosPackage.eINSTANCE.getPublisher().isSuperTypeOf(
 				domainElement.eClass())) {
 			return PublisherEditPart.VISUAL_ID;
https://github.com/ipa320/bride/raw/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fpart%2FRosVisualIDRegistry.java
c7fdaa0dcba4794ca6fb5759c49f438203e396a0
modified
https://github.com/ipa320/bride/blob/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fproviders%2FRosElementTypes.java
https://api.github.com/repos/ipa320/bride/contents/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fproviders%2FRosElementTypes.java?ref=01bc5c83c895357f23a345ecec85a3796cf66358
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/providers/RosElementTypes.java
import org.ros.model.ros.diagram.edit.parts.ParameterEditPart;
import org.ros.model.ros.diagram.edit.parts.ServiceClientEditPart;
import org.ros.model.ros.diagram.edit.parts.ServiceEditPart;
import org.ros.model.ros.diagram.edit.parts.ServiceServerEditPart;
	public static final IElementType Node_2001 = getElementType("org.ros.model.ros.diagram.Node_2001"); //$NON-NLS-1$
	public static final IElementType Topic_2002 = getElementType("org.ros.model.ros.diagram.Topic_2002"); //$NON-NLS-1$
	public static final IElementType Service_2003 = getElementType("org.ros.model.ros.diagram.Service_2003"); //$NON-NLS-1$
	public static final IElementType Parameter_3001 = getElementType("org.ros.model.ros.diagram.Parameter_3001"); //$NON-NLS-1$
	/**
	 * @generated
	 */
	public static final IElementType ServiceClient_4001 = getElementType("org.ros.model.ros.diagram.ServiceClient_4001"); //$NON-NLS-1$
	/**
	 * @generated
	 */
	public static final IElementType Subscriber_4002 = getElementType("org.ros.model.ros.diagram.Subscriber_4002"); //$NON-NLS-1$
	/**
	 * @generated
	 */
	public static final IElementType ServiceServer_4003 = getElementType("org.ros.model.ros.diagram.ServiceServer_4003"); //$NON-NLS-1$
	/**
	 * @generated
	 */
	public static final IElementType Publisher_4004 = getElementType("org.ros.model.ros.diagram.Publisher_4004"); //$NON-NLS-1$
			elements.put(Node_2001, RosPackage.eINSTANCE.getNode());

			elements.put(Topic_2002, RosPackage.eINSTANCE.getTopic());

			elements.put(Service_2003, RosPackage.eINSTANCE.getService());
			elements.put(Parameter_3001, RosPackage.eINSTANCE.getParameter());
			elements.put(ServiceClient_4001,
					RosPackage.eINSTANCE.getServiceClient());
			elements.put(Subscriber_4002, RosPackage.eINSTANCE.getSubscriber());

			elements.put(ServiceServer_4003,
					RosPackage.eINSTANCE.getServiceServer());

			elements.put(Publisher_4004, RosPackage.eINSTANCE.getPublisher());
			KNOWN_ELEMENT_TYPES.add(Node_2001);
			KNOWN_ELEMENT_TYPES.add(Topic_2002);
			KNOWN_ELEMENT_TYPES.add(Service_2003);
			KNOWN_ELEMENT_TYPES.add(Parameter_3001);
			KNOWN_ELEMENT_TYPES.add(ServiceClient_4001);
			KNOWN_ELEMENT_TYPES.add(Subscriber_4002);
			KNOWN_ELEMENT_TYPES.add(ServiceServer_4003);
			KNOWN_ELEMENT_TYPES.add(Publisher_4004);
			return Node_2001;
		case TopicEditPart.VISUAL_ID:
			return Topic_2002;
		case ServiceEditPart.VISUAL_ID:
			return Service_2003;
		case ParameterEditPart.VISUAL_ID:
			return Parameter_3001;
		case ServiceClientEditPart.VISUAL_ID:
			return ServiceClient_4001;
			return Subscriber_4002;
		case ServiceServerEditPart.VISUAL_ID:
			return ServiceServer_4003;
			return Publisher_4004;
	public static final IElementType Topic_2001 = getElementType("org.ros.model.ros.diagram.Topic_2001"); //$NON-NLS-1$
	public static final IElementType Node_2002 = getElementType("org.ros.model.ros.diagram.Node_2002"); //$NON-NLS-1$
	public static final IElementType Subscriber_4001 = getElementType("org.ros.model.ros.diagram.Subscriber_4001"); //$NON-NLS-1$
	public static final IElementType Publisher_4002 = getElementType("org.ros.model.ros.diagram.Publisher_4002"); //$NON-NLS-1$
			elements.put(Topic_2001, RosPackage.eINSTANCE.getTopic());
			elements.put(Node_2002, RosPackage.eINSTANCE.getNode());
			elements.put(Subscriber_4001, RosPackage.eINSTANCE.getSubscriber());
			elements.put(Publisher_4002, RosPackage.eINSTANCE.getPublisher());
			KNOWN_ELEMENT_TYPES.add(Topic_2001);
			KNOWN_ELEMENT_TYPES.add(Node_2002);
			KNOWN_ELEMENT_TYPES.add(Subscriber_4001);
			KNOWN_ELEMENT_TYPES.add(Publisher_4002);
		case TopicEditPart.VISUAL_ID:
			return Topic_2001;
			return Node_2002;
			return Subscriber_4001;
			return Publisher_4002;
@@ -18,7 +18,11 @@
 import org.ros.model.ros.RosPackage;
 import org.ros.model.ros.diagram.edit.parts.NodeEditPart;
 import org.ros.model.ros.diagram.edit.parts.PackageEditPart;
+import org.ros.model.ros.diagram.edit.parts.ParameterEditPart;
 import org.ros.model.ros.diagram.edit.parts.PublisherEditPart;
+import org.ros.model.ros.diagram.edit.parts.ServiceClientEditPart;
+import org.ros.model.ros.diagram.edit.parts.ServiceEditPart;
+import org.ros.model.ros.diagram.edit.parts.ServiceServerEditPart;
 import org.ros.model.ros.diagram.edit.parts.SubscriberEditPart;
 import org.ros.model.ros.diagram.edit.parts.TopicEditPart;
 import org.ros.model.ros.diagram.part.RosDiagramEditorPlugin;
@@ -56,19 +60,35 @@ private RosElementTypes() {
 	/**
 	 * @generated
 	 */
-	public static final IElementType Topic_2001 = getElementType("org.ros.model.ros.diagram.Topic_2001"); //$NON-NLS-1$
+	public static final IElementType Node_2001 = getElementType("org.ros.model.ros.diagram.Node_2001"); //$NON-NLS-1$
 	/**
 	 * @generated
 	 */
-	public static final IElementType Node_2002 = getElementType("org.ros.model.ros.diagram.Node_2002"); //$NON-NLS-1$
+	public static final IElementType Topic_2002 = getElementType("org.ros.model.ros.diagram.Topic_2002"); //$NON-NLS-1$
 	/**
 	 * @generated
 	 */
-	public static final IElementType Subscriber_4001 = getElementType("org.ros.model.ros.diagram.Subscriber_4001"); //$NON-NLS-1$
+	public static final IElementType Service_2003 = getElementType("org.ros.model.ros.diagram.Service_2003"); //$NON-NLS-1$
 	/**
 	 * @generated
 	 */
-	public static final IElementType Publisher_4002 = getElementType("org.ros.model.ros.diagram.Publisher_4002"); //$NON-NLS-1$
+	public static final IElementType Parameter_3001 = getElementType("org.ros.model.ros.diagram.Parameter_3001"); //$NON-NLS-1$
+	/**
+	 * @generated
+	 */
+	public static final IElementType ServiceClient_4001 = getElementType("org.ros.model.ros.diagram.ServiceClient_4001"); //$NON-NLS-1$
+	/**
+	 * @generated
+	 */
+	public static final IElementType Subscriber_4002 = getElementType("org.ros.model.ros.diagram.Subscriber_4002"); //$NON-NLS-1$
+	/**
+	 * @generated
+	 */
+	public static final IElementType ServiceServer_4003 = getElementType("org.ros.model.ros.diagram.ServiceServer_4003"); //$NON-NLS-1$
+	/**
+	 * @generated
+	 */
+	public static final IElementType Publisher_4004 = getElementType("org.ros.model.ros.diagram.Publisher_4004"); //$NON-NLS-1$
 
 	/**
 	 * @generated
@@ -183,13 +203,23 @@ public static ENamedElement getElement(IAdaptable hint) {
 
 			elements.put(Package_1000, RosPackage.eINSTANCE.getPackage());
 
-			elements.put(Topic_2001, RosPackage.eINSTANCE.getTopic());
+			elements.put(Node_2001, RosPackage.eINSTANCE.getNode());
+
+			elements.put(Topic_2002, RosPackage.eINSTANCE.getTopic());
+
+			elements.put(Service_2003, RosPackage.eINSTANCE.getService());
 
-			elements.put(Node_2002, RosPackage.eINSTANCE.getNode());
+			elements.put(Parameter_3001, RosPackage.eINSTANCE.getParameter());
 
-			elements.put(Subscriber_4001, RosPackage.eINSTANCE.getSubscriber());
+			elements.put(ServiceClient_4001,
+					RosPackage.eINSTANCE.getServiceClient());
 
-			elements.put(Publisher_4002, RosPackage.eINSTANCE.getPublisher());
+			elements.put(Subscriber_4002, RosPackage.eINSTANCE.getSubscriber());
+
+			elements.put(ServiceServer_4003,
+					RosPackage.eINSTANCE.getServiceServer());
+
+			elements.put(Publisher_4004, RosPackage.eINSTANCE.getPublisher());
 		}
 		return (ENamedElement) elements.get(type);
 	}
@@ -208,10 +238,14 @@ public static boolean isKnownElementType(IElementType elementType) {
 		if (KNOWN_ELEMENT_TYPES == null) {
 			KNOWN_ELEMENT_TYPES = new HashSet<IElementType>();
 			KNOWN_ELEMENT_TYPES.add(Package_1000);
-			KNOWN_ELEMENT_TYPES.add(Topic_2001);
-			KNOWN_ELEMENT_TYPES.add(Node_2002);
-			KNOWN_ELEMENT_TYPES.add(Subscriber_4001);
-			KNOWN_ELEMENT_TYPES.add(Publisher_4002);
+			KNOWN_ELEMENT_TYPES.add(Node_2001);
+			KNOWN_ELEMENT_TYPES.add(Topic_2002);
+			KNOWN_ELEMENT_TYPES.add(Service_2003);
+			KNOWN_ELEMENT_TYPES.add(Parameter_3001);
+			KNOWN_ELEMENT_TYPES.add(ServiceClient_4001);
+			KNOWN_ELEMENT_TYPES.add(Subscriber_4002);
+			KNOWN_ELEMENT_TYPES.add(ServiceServer_4003);
+			KNOWN_ELEMENT_TYPES.add(Publisher_4004);
 		}
 		return KNOWN_ELEMENT_TYPES.contains(elementType);
 	}
@@ -223,14 +257,22 @@ public static IElementType getElementType(int visualID) {
 		switch (visualID) {
 		case PackageEditPart.VISUAL_ID:
 			return Package_1000;
-		case TopicEditPart.VISUAL_ID:
-			return Topic_2001;
 		case NodeEditPart.VISUAL_ID:
-			return Node_2002;
+			return Node_2001;
+		case TopicEditPart.VISUAL_ID:
+			return Topic_2002;
+		case ServiceEditPart.VISUAL_ID:
+			return Service_2003;
+		case ParameterEditPart.VISUAL_ID:
+			return Parameter_3001;
+		case ServiceClientEditPart.VISUAL_ID:
+			return ServiceClient_4001;
 		case SubscriberEditPart.VISUAL_ID:
-			return Subscriber_4001;
+			return Subscriber_4002;
+		case ServiceServerEditPart.VISUAL_ID:
+			return ServiceServer_4003;
 		case PublisherEditPart.VISUAL_ID:
-			return Publisher_4002;
+			return Publisher_4004;
 		}
 		return null;
 	}
https://github.com/ipa320/bride/raw/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fproviders%2FRosElementTypes.java
9009d41d6b53e04acf7fecb76203230b721d78d3
modified
https://github.com/ipa320/bride/blob/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fproviders%2FRosModelingAssistantProvider.java
https://api.github.com/repos/ipa320/bride/contents/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fproviders%2FRosModelingAssistantProvider.java?ref=01bc5c83c895357f23a345ecec85a3796cf66358
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/providers/RosModelingAssistantProvider.java
import org.ros.model.ros.diagram.edit.parts.ServiceEditPart;
			ArrayList<IElementType> types = new ArrayList<IElementType>(3);
			types.add(RosElementTypes.Node_2001);
			types.add(RosElementTypes.Topic_2002);
			types.add(RosElementTypes.Service_2003);
			return types;
		}
		if (editPart instanceof NodeEditPart) {
			ArrayList<IElementType> types = new ArrayList<IElementType>(1);
			types.add(RosElementTypes.Parameter_3001);
		if (targetEditPart instanceof ServiceEditPart) {
			return ((ServiceEditPart) targetEditPart).getMARelTypesOnTarget();
		}
		if (targetEditPart instanceof ServiceEditPart) {
			return ((ServiceEditPart) targetEditPart)
					.getMATypesForSource(relationshipType);
		}
			ArrayList<IElementType> types = new ArrayList<IElementType>(2);
			types.add(RosElementTypes.Topic_2001);
			types.add(RosElementTypes.Node_2002);
@@ -22,6 +22,7 @@
 import org.eclipse.ui.dialogs.ElementListSelectionDialog;
 import org.ros.model.ros.diagram.edit.parts.NodeEditPart;
 import org.ros.model.ros.diagram.edit.parts.PackageEditPart;
+import org.ros.model.ros.diagram.edit.parts.ServiceEditPart;
 import org.ros.model.ros.diagram.edit.parts.TopicEditPart;
 import org.ros.model.ros.diagram.part.Messages;
 import org.ros.model.ros.diagram.part.RosDiagramEditorPlugin;
@@ -38,9 +39,15 @@ public List getTypesForPopupBar(IAdaptable host) {
 		IGraphicalEditPart editPart = (IGraphicalEditPart) host
 				.getAdapter(IGraphicalEditPart.class);
 		if (editPart instanceof PackageEditPart) {
-			ArrayList<IElementType> types = new ArrayList<IElementType>(2);
-			types.add(RosElementTypes.Topic_2001);
-			types.add(RosElementTypes.Node_2002);
+			ArrayList<IElementType> types = new ArrayList<IElementType>(3);
+			types.add(RosElementTypes.Node_2001);
+			types.add(RosElementTypes.Topic_2002);
+			types.add(RosElementTypes.Service_2003);
+			return types;
+		}
+		if (editPart instanceof NodeEditPart) {
+			ArrayList<IElementType> types = new ArrayList<IElementType>(1);
+			types.add(RosElementTypes.Parameter_3001);
 			return types;
 		}
 		return Collections.EMPTY_LIST;
@@ -67,6 +74,9 @@ public List getRelTypesOnTarget(IAdaptable target) {
 		if (targetEditPart instanceof TopicEditPart) {
 			return ((TopicEditPart) targetEditPart).getMARelTypesOnTarget();
 		}
+		if (targetEditPart instanceof ServiceEditPart) {
+			return ((ServiceEditPart) targetEditPart).getMARelTypesOnTarget();
+		}
 		return Collections.EMPTY_LIST;
 	}
 
@@ -97,6 +107,10 @@ public List getTypesForSource(IAdaptable target,
 			return ((TopicEditPart) targetEditPart)
 					.getMATypesForSource(relationshipType);
 		}
+		if (targetEditPart instanceof ServiceEditPart) {
+			return ((ServiceEditPart) targetEditPart)
+					.getMATypesForSource(relationshipType);
+		}
 		return Collections.EMPTY_LIST;
 	}
 
https://github.com/ipa320/bride/raw/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fproviders%2FRosModelingAssistantProvider.java
4c7287333031d92ad419f64ddd495b62861b3fd6
modified
https://github.com/ipa320/bride/blob/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fproviders%2FRosParserProvider.java
https://api.github.com/repos/ipa320/bride/contents/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fproviders%2FRosParserProvider.java?ref=01bc5c83c895357f23a345ecec85a3796cf66358
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/providers/RosParserProvider.java
import org.ros.model.ros.diagram.edit.parts.ParameterEditPart;
import org.ros.model.ros.diagram.edit.parts.ServiceClientNameEditPart;
import org.ros.model.ros.diagram.edit.parts.ServiceNameEditPart;
import org.ros.model.ros.diagram.edit.parts.ServiceServerNameEditPart;
	private IParser nodeName_5001Parser;
	private IParser getNodeName_5001Parser() {
		if (nodeName_5001Parser == null) {
			EAttribute[] features = new EAttribute[] { RosPackage.eINSTANCE
					.getNode_Name() };
			MessageFormatParser parser = new MessageFormatParser(features);
			nodeName_5001Parser = parser;
		}
		return nodeName_5001Parser;
	}

	/**
	 * @generated
	 */
	private IParser topicName_5002Parser;

	/**
	 * @generated
	 */
	private IParser getTopicName_5002Parser() {
		if (topicName_5002Parser == null) {
			topicName_5002Parser = parser;
		return topicName_5002Parser;
	private IParser serviceName_5003Parser;
	private IParser getServiceName_5003Parser() {
		if (serviceName_5003Parser == null) {
					.getService_Name() };
			MessageFormatParser parser = new MessageFormatParser(features);
			serviceName_5003Parser = parser;
		}
		return serviceName_5003Parser;
	}

	/**
	 * @generated
	 */
	private IParser parameter_3001Parser;

	/**
	 * @generated
	 */
	private IParser getParameter_3001Parser() {
		if (parameter_3001Parser == null) {
			EAttribute[] features = new EAttribute[] { RosPackage.eINSTANCE
					.getParameter_Name() };
			parameter_3001Parser = parser;
		return parameter_3001Parser;
	private IParser serviceClientName_6001Parser;
	private IParser getServiceClientName_6001Parser() {
		if (serviceClientName_6001Parser == null) {
			EAttribute[] features = new EAttribute[] { RosPackage.eINSTANCE
					.getServiceClient_Name() };
			MessageFormatParser parser = new MessageFormatParser(features);
			serviceClientName_6001Parser = parser;
		}
		return serviceClientName_6001Parser;
	}

	/**
	 * @generated
	 */
	private IParser subscriberName_6002Parser;

	/**
	 * @generated
	 */
	private IParser getSubscriberName_6002Parser() {
		if (subscriberName_6002Parser == null) {
			subscriberName_6002Parser = parser;
		}
		return subscriberName_6002Parser;
	}

	/**
	 * @generated
	 */
	private IParser serviceServerName_6003Parser;

	/**
	 * @generated
	 */
	private IParser getServiceServerName_6003Parser() {
		if (serviceServerName_6003Parser == null) {
			EAttribute[] features = new EAttribute[] { RosPackage.eINSTANCE
					.getServiceServer_Name() };
			MessageFormatParser parser = new MessageFormatParser(features);
			serviceServerName_6003Parser = parser;
		return serviceServerName_6003Parser;
	private IParser publisherName_6004Parser;
	private IParser getPublisherName_6004Parser() {
		if (publisherName_6004Parser == null) {
			publisherName_6004Parser = parser;
		return publisherName_6004Parser;
			return getNodeName_5001Parser();
		case TopicNameEditPart.VISUAL_ID:
			return getTopicName_5002Parser();
		case ServiceNameEditPart.VISUAL_ID:
			return getServiceName_5003Parser();
		case ParameterEditPart.VISUAL_ID:
			return getParameter_3001Parser();
		case ServiceClientNameEditPart.VISUAL_ID:
			return getServiceClientName_6001Parser();
			return getSubscriberName_6002Parser();
		case ServiceServerNameEditPart.VISUAL_ID:
			return getServiceServerName_6003Parser();
			return getPublisherName_6004Parser();
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/providers/RosParserProvider.java
if (nodeName_5001Parser == null) {
			EAttribute[] features = new EAttribute[] { RosPackage.eINSTANCE
					.getNode_Name()
IParser getNodeName_5001Parser()
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/providers/RosParserProvider.java
if (topicName_5002Parser == null) {
			topicName_5002Parser = parser;
		return topicName_5002Parser;
	private IParser serviceName_5003Parser;
	private IParser getServiceName_5003Parser() {
		if (serviceName_5003Parser == null) {
					.getService_Name()
IParser getTopicName_5002Parser()
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/providers/RosParserProvider.java
if (parameter_3001Parser == null) {
			EAttribute[] features = new EAttribute[] { RosPackage.eINSTANCE
					.getParameter_Name()
IParser getParameter_3001Parser()
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/providers/RosParserProvider.java
if (serviceClientName_6001Parser == null) {
			EAttribute[] features = new EAttribute[] { RosPackage.eINSTANCE
					.getServiceClient_Name()
IParser getServiceClientName_6001Parser()
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/providers/RosParserProvider.java
if (subscriberName_6002Parser == null) {
			subscriberName_6002Parser = parser;
IParser getSubscriberName_6002Parser()
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/providers/RosParserProvider.java
if (serviceServerName_6003Parser == null) {
			EAttribute[] features = new EAttribute[] { RosPackage.eINSTANCE
					.getServiceServer_Name()
IParser getServiceServerName_6003Parser()
	private IParser topicName_5001Parser;
	private IParser getTopicName_5001Parser() {
		if (topicName_5001Parser == null) {
			topicName_5001Parser = parser;
		return topicName_5001Parser;
	private IParser nodeName_5002Parser;
	private IParser getNodeName_5002Parser() {
		if (nodeName_5002Parser == null) {
					.getNode_Name() };
			nodeName_5002Parser = parser;
		return nodeName_5002Parser;
	private IParser subscriberName_6001Parser;
	private IParser getSubscriberName_6001Parser() {
		if (subscriberName_6001Parser == null) {
			subscriberName_6001Parser = parser;
		return subscriberName_6001Parser;
	private IParser publisherName_6002Parser;
	private IParser getPublisherName_6002Parser() {
		if (publisherName_6002Parser == null) {
			publisherName_6002Parser = parser;
		return publisherName_6002Parser;
		case TopicNameEditPart.VISUAL_ID:
			return getTopicName_5001Parser();
			return getNodeName_5002Parser();
			return getSubscriberName_6001Parser();
			return getPublisherName_6002Parser();
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/providers/RosParserProvider.java
if (topicName_5001Parser == null) {
			topicName_5001Parser = parser;
		return topicName_5001Parser;
	private IParser nodeName_5002Parser;
	private IParser getNodeName_5002Parser() {
		if (nodeName_5002Parser == null) {
					.getNode_Name()
IParser getTopicName_5001Parser()
@@ -14,7 +14,11 @@
 import org.eclipse.gmf.runtime.notation.View;
 import org.ros.model.ros.RosPackage;
 import org.ros.model.ros.diagram.edit.parts.NodeNameEditPart;
+import org.ros.model.ros.diagram.edit.parts.ParameterEditPart;
 import org.ros.model.ros.diagram.edit.parts.PublisherNameEditPart;
+import org.ros.model.ros.diagram.edit.parts.ServiceClientNameEditPart;
+import org.ros.model.ros.diagram.edit.parts.ServiceNameEditPart;
+import org.ros.model.ros.diagram.edit.parts.ServiceServerNameEditPart;
 import org.ros.model.ros.diagram.edit.parts.SubscriberNameEditPart;
 import org.ros.model.ros.diagram.edit.parts.TopicNameEditPart;
 import org.ros.model.ros.diagram.parsers.MessageFormatParser;
@@ -29,88 +33,168 @@ public class RosParserProvider extends AbstractProvider implements
 	/**
 	 * @generated
 	 */
-	private IParser topicName_5001Parser;
+	private IParser nodeName_5001Parser;
 
 	/**
 	 * @generated
 	 */
-	private IParser getTopicName_5001Parser() {
-		if (topicName_5001Parser == null) {
+	private IParser getNodeName_5001Parser() {
+		if (nodeName_5001Parser == null) {
+			EAttribute[] features = new EAttribute[] { RosPackage.eINSTANCE
+					.getNode_Name() };
+			MessageFormatParser parser = new MessageFormatParser(features);
+			nodeName_5001Parser = parser;
+		}
+		return nodeName_5001Parser;
+	}
+
+	/**
+	 * @generated
+	 */
+	private IParser topicName_5002Parser;
+
+	/**
+	 * @generated
+	 */
+	private IParser getTopicName_5002Parser() {
+		if (topicName_5002Parser == null) {
 			EAttribute[] features = new EAttribute[] { RosPackage.eINSTANCE
 					.getTopic_Name() };
 			MessageFormatParser parser = new MessageFormatParser(features);
-			topicName_5001Parser = parser;
+			topicName_5002Parser = parser;
 		}
-		return topicName_5001Parser;
+		return topicName_5002Parser;
 	}
 
 	/**
 	 * @generated
 	 */
-	private IParser nodeName_5002Parser;
+	private IParser serviceName_5003Parser;
 
 	/**
 	 * @generated
 	 */
-	private IParser getNodeName_5002Parser() {
-		if (nodeName_5002Parser == null) {
+	private IParser getServiceName_5003Parser() {
+		if (serviceName_5003Parser == null) {
 			EAttribute[] features = new EAttribute[] { RosPackage.eINSTANCE
-					.getNode_Name() };
+					.getService_Name() };
+			MessageFormatParser parser = new MessageFormatParser(features);
+			serviceName_5003Parser = parser;
+		}
+		return serviceName_5003Parser;
+	}
+
+	/**
+	 * @generated
+	 */
+	private IParser parameter_3001Parser;
+
+	/**
+	 * @generated
+	 */
+	private IParser getParameter_3001Parser() {
+		if (parameter_3001Parser == null) {
+			EAttribute[] features = new EAttribute[] { RosPackage.eINSTANCE
+					.getParameter_Name() };
 			MessageFormatParser parser = new MessageFormatParser(features);
-			nodeName_5002Parser = parser;
+			parameter_3001Parser = parser;
 		}
-		return nodeName_5002Parser;
+		return parameter_3001Parser;
 	}
 
 	/**
 	 * @generated
 	 */
-	private IParser subscriberName_6001Parser;
+	private IParser serviceClientName_6001Parser;
 
 	/**
 	 * @generated
 	 */
-	private IParser getSubscriberName_6001Parser() {
-		if (subscriberName_6001Parser == null) {
+	private IParser getServiceClientName_6001Parser() {
+		if (serviceClientName_6001Parser == null) {
+			EAttribute[] features = new EAttribute[] { RosPackage.eINSTANCE
+					.getServiceClient_Name() };
+			MessageFormatParser parser = new MessageFormatParser(features);
+			serviceClientName_6001Parser = parser;
+		}
+		return serviceClientName_6001Parser;
+	}
+
+	/**
+	 * @generated
+	 */
+	private IParser subscriberName_6002Parser;
+
+	/**
+	 * @generated
+	 */
+	private IParser getSubscriberName_6002Parser() {
+		if (subscriberName_6002Parser == null) {
 			EAttribute[] features = new EAttribute[] { RosPackage.eINSTANCE
 					.getSubscriber_Name() };
 			MessageFormatParser parser = new MessageFormatParser(features);
-			subscriberName_6001Parser = parser;
+			subscriberName_6002Parser = parser;
+		}
+		return subscriberName_6002Parser;
+	}
+
+	/**
+	 * @generated
+	 */
+	private IParser serviceServerName_6003Parser;
+
+	/**
+	 * @generated
+	 */
+	private IParser getServiceServerName_6003Parser() {
+		if (serviceServerName_6003Parser == null) {
+			EAttribute[] features = new EAttribute[] { RosPackage.eINSTANCE
+					.getServiceServer_Name() };
+			MessageFormatParser parser = new MessageFormatParser(features);
+			serviceServerName_6003Parser = parser;
 		}
-		return subscriberName_6001Parser;
+		return serviceServerName_6003Parser;
 	}
 
 	/**
 	 * @generated
 	 */
-	private IParser publisherName_6002Parser;
+	private IParser publisherName_6004Parser;
 
 	/**
 	 * @generated
 	 */
-	private IParser getPublisherName_6002Parser() {
-		if (publisherName_6002Parser == null) {
+	private IParser getPublisherName_6004Parser() {
+		if (publisherName_6004Parser == null) {
 			EAttribute[] features = new EAttribute[] { RosPackage.eINSTANCE
 					.getPublisher_Name() };
 			MessageFormatParser parser = new MessageFormatParser(features);
-			publisherName_6002Parser = parser;
+			publisherName_6004Parser = parser;
 		}
-		return publisherName_6002Parser;
+		return publisherName_6004Parser;
 	}
 
 	/**
 	 * @generated
 	 */
 	protected IParser getParser(int visualID) {
 		switch (visualID) {
-		case TopicNameEditPart.VISUAL_ID:
-			return getTopicName_5001Parser();
 		case NodeNameEditPart.VISUAL_ID:
-			return getNodeName_5002Parser();
+			return getNodeName_5001Parser();
+		case TopicNameEditPart.VISUAL_ID:
+			return getTopicName_5002Parser();
+		case ServiceNameEditPart.VISUAL_ID:
+			return getServiceName_5003Parser();
+		case ParameterEditPart.VISUAL_ID:
+			return getParameter_3001Parser();
+		case ServiceClientNameEditPart.VISUAL_ID:
+			return getServiceClientName_6001Parser();
 		case SubscriberNameEditPart.VISUAL_ID:
-			return getSubscriberName_6001Parser();
+			return getSubscriberName_6002Parser();
+		case ServiceServerNameEditPart.VISUAL_ID:
+			return getServiceServerName_6003Parser();
 		case PublisherNameEditPart.VISUAL_ID:
-			return getPublisherName_6002Parser();
+			return getPublisherName_6004Parser();
 		}
 		return null;
 	}
https://github.com/ipa320/bride/raw/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fproviders%2FRosParserProvider.java
63725b61e61fe2df39ac9bf9ed6fdc33a81dec69
modified
https://github.com/ipa320/bride/blob/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fproviders%2FRosViewProvider.java
https://api.github.com/repos/ipa320/bride/contents/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fproviders%2FRosViewProvider.java?ref=01bc5c83c895357f23a345ecec85a3796cf66358
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/providers/RosViewProvider.java
import org.eclipse.gmf.runtime.notation.TitleStyle;
import org.ros.model.ros.diagram.edit.parts.NodeParametersEditPart;
import org.ros.model.ros.diagram.edit.parts.ParameterEditPart;
import org.ros.model.ros.diagram.edit.parts.ServiceClientEditPart;
import org.ros.model.ros.diagram.edit.parts.ServiceClientNameEditPart;
import org.ros.model.ros.diagram.edit.parts.ServiceEditPart;
import org.ros.model.ros.diagram.edit.parts.ServiceNameEditPart;
import org.ros.model.ros.diagram.edit.parts.ServiceServerEditPart;
import org.ros.model.ros.diagram.edit.parts.ServiceServerNameEditPart;
				case TopicEditPart.VISUAL_ID:
				case ServiceEditPart.VISUAL_ID:
				case ParameterEditPart.VISUAL_ID:
		return NodeEditPart.VISUAL_ID == visualID
				|| TopicEditPart.VISUAL_ID == visualID
				|| ServiceEditPart.VISUAL_ID == visualID
				|| ParameterEditPart.VISUAL_ID == visualID;
		case NodeEditPart.VISUAL_ID:
			return createNode_2001(domainElement, containerView, index,
					persisted, preferencesHint);
			return createTopic_2002(domainElement, containerView, index,
		case ServiceEditPart.VISUAL_ID:
			return createService_2003(domainElement, containerView, index,
					persisted, preferencesHint);
		case ParameterEditPart.VISUAL_ID:
			return createParameter_3001(domainElement, containerView, index,
		case ServiceClientEditPart.VISUAL_ID:
			return createServiceClient_4001(
					getSemanticElement(semanticAdapter), containerView, index,
					persisted, preferencesHint);
			return createSubscriber_4002(getSemanticElement(semanticAdapter),
		case ServiceServerEditPart.VISUAL_ID:
			return createServiceServer_4003(
					getSemanticElement(semanticAdapter), containerView, index,
					persisted, preferencesHint);
			return createPublisher_4004(getSemanticElement(semanticAdapter),
	public Node createNode_2001(EObject domainElement, View containerView,
		node.setType(RosVisualIDRegistry.getType(NodeEditPart.VISUAL_ID));
				RosVisualIDRegistry.getType(NodeNameEditPart.VISUAL_ID));
		createCompartment(node,
				RosVisualIDRegistry.getType(NodeParametersEditPart.VISUAL_ID),
				false, true, true, true);
	public Node createTopic_2002(EObject domainElement, View containerView,
		node.setType(RosVisualIDRegistry.getType(TopicEditPart.VISUAL_ID));
				RosVisualIDRegistry.getType(TopicNameEditPart.VISUAL_ID));
	public Node createService_2003(EObject domainElement, View containerView,
			int index, boolean persisted, PreferencesHint preferencesHint) {
		Shape node = NotationFactory.eINSTANCE.createShape();
		node.setLayoutConstraint(NotationFactory.eINSTANCE.createBounds());
		node.setType(RosVisualIDRegistry.getType(ServiceEditPart.VISUAL_ID));
		ViewUtil.insertChildView(containerView, node, index, persisted);
		node.setElement(domainElement);
		stampShortcut(containerView, node);
		// initializeFromPreferences 
		final IPreferenceStore prefStore = (IPreferenceStore) preferencesHint
				.getPreferenceStore();

		org.eclipse.swt.graphics.RGB lineRGB = PreferenceConverter.getColor(
				prefStore, IPreferenceConstants.PREF_LINE_COLOR);
		ViewUtil.setStructuralFeatureValue(node,
				NotationPackage.eINSTANCE.getLineStyle_LineColor(),
				FigureUtilities.RGBToInteger(lineRGB));
		FontStyle nodeFontStyle = (FontStyle) node
				.getStyle(NotationPackage.Literals.FONT_STYLE);
		if (nodeFontStyle != null) {
			FontData fontData = PreferenceConverter.getFontData(prefStore,
					IPreferenceConstants.PREF_DEFAULT_FONT);
			nodeFontStyle.setFontName(fontData.getName());
			nodeFontStyle.setFontHeight(fontData.getHeight());
			nodeFontStyle.setBold((fontData.getStyle() & SWT.BOLD) != 0);
			nodeFontStyle.setItalic((fontData.getStyle() & SWT.ITALIC) != 0);
			org.eclipse.swt.graphics.RGB fontRGB = PreferenceConverter
					.getColor(prefStore, IPreferenceConstants.PREF_FONT_COLOR);
			nodeFontStyle.setFontColor(FigureUtilities.RGBToInteger(fontRGB)
					.intValue());
		}
		org.eclipse.swt.graphics.RGB fillRGB = PreferenceConverter.getColor(
				prefStore, IPreferenceConstants.PREF_FILL_COLOR);
		ViewUtil.setStructuralFeatureValue(node,
				NotationPackage.eINSTANCE.getFillStyle_FillColor(),
				FigureUtilities.RGBToInteger(fillRGB));
		Node label5003 = createLabel(node,
				RosVisualIDRegistry.getType(ServiceNameEditPart.VISUAL_ID));
		return node;
	}

	/**
	 * @generated
	 */
	public Node createParameter_3001(EObject domainElement, View containerView,
			int index, boolean persisted, PreferencesHint preferencesHint) {
		Node node = NotationFactory.eINSTANCE.createNode();
		node.setLayoutConstraint(NotationFactory.eINSTANCE.createLocation());
		node.setType(RosVisualIDRegistry.getType(ParameterEditPart.VISUAL_ID));
		ViewUtil.insertChildView(containerView, node, index, persisted);
		node.setElement(domainElement);
		return node;
	}

	/**
	 * @generated
	 */
	public Edge createServiceClient_4001(EObject domainElement,
		edge.setType(RosVisualIDRegistry
				.getType(ServiceClientEditPart.VISUAL_ID));
				RosVisualIDRegistry
						.getType(ServiceClientNameEditPart.VISUAL_ID));
	public Edge createSubscriber_4002(EObject domainElement,
			View containerView, int index, boolean persisted,
			PreferencesHint preferencesHint) {
		edge.setType(RosVisualIDRegistry.getType(SubscriberEditPart.VISUAL_ID));
				RosVisualIDRegistry.getType(SubscriberNameEditPart.VISUAL_ID));
	/**
	 * @generated
	 */
	public Edge createServiceServer_4003(EObject domainElement,
			View containerView, int index, boolean persisted,
			PreferencesHint preferencesHint) {
		Connector edge = NotationFactory.eINSTANCE.createConnector();
		edge.getStyles().add(NotationFactory.eINSTANCE.createFontStyle());
		RelativeBendpoints bendpoints = NotationFactory.eINSTANCE
				.createRelativeBendpoints();
		ArrayList<RelativeBendpoint> points = new ArrayList<RelativeBendpoint>(
				2);
		points.add(new RelativeBendpoint());
		points.add(new RelativeBendpoint());
		bendpoints.setPoints(points);
		edge.setBendpoints(bendpoints);
		ViewUtil.insertChildView(containerView, edge, index, persisted);
		edge.setType(RosVisualIDRegistry
				.getType(ServiceServerEditPart.VISUAL_ID));
		edge.setElement(domainElement);
		// initializePreferences
		final IPreferenceStore prefStore = (IPreferenceStore) preferencesHint
				.getPreferenceStore();

		org.eclipse.swt.graphics.RGB lineRGB = PreferenceConverter.getColor(
				prefStore, IPreferenceConstants.PREF_LINE_COLOR);
		ViewUtil.setStructuralFeatureValue(edge,
				NotationPackage.eINSTANCE.getLineStyle_LineColor(),
				FigureUtilities.RGBToInteger(lineRGB));
		FontStyle edgeFontStyle = (FontStyle) edge
				.getStyle(NotationPackage.Literals.FONT_STYLE);
		if (edgeFontStyle != null) {
			FontData fontData = PreferenceConverter.getFontData(prefStore,
					IPreferenceConstants.PREF_DEFAULT_FONT);
			edgeFontStyle.setFontName(fontData.getName());
			edgeFontStyle.setFontHeight(fontData.getHeight());
			edgeFontStyle.setBold((fontData.getStyle() & SWT.BOLD) != 0);
			edgeFontStyle.setItalic((fontData.getStyle() & SWT.ITALIC) != 0);
			org.eclipse.swt.graphics.RGB fontRGB = PreferenceConverter
					.getColor(prefStore, IPreferenceConstants.PREF_FONT_COLOR);
			edgeFontStyle.setFontColor(FigureUtilities.RGBToInteger(fontRGB)
					.intValue());
		}
		Routing routing = Routing.get(prefStore
				.getInt(IPreferenceConstants.PREF_LINE_STYLE));
		if (routing != null) {
			ViewUtil.setStructuralFeatureValue(edge,
					NotationPackage.eINSTANCE.getRoutingStyle_Routing(),
					routing);
		}
		Node label6003 = createLabel(edge,
				RosVisualIDRegistry
						.getType(ServiceServerNameEditPart.VISUAL_ID));
		label6003.setLayoutConstraint(NotationFactory.eINSTANCE
				.createLocation());
		Location location6003 = (Location) label6003.getLayoutConstraint();
		location6003.setX(0);
		location6003.setY(40);
		return edge;
	}

	/**
	 * @generated
	 */
	public Edge createPublisher_4004(EObject domainElement, View containerView,
			int index, boolean persisted, PreferencesHint preferencesHint) {
		Connector edge = NotationFactory.eINSTANCE.createConnector();
		edge.getStyles().add(NotationFactory.eINSTANCE.createFontStyle());
		RelativeBendpoints bendpoints = NotationFactory.eINSTANCE
				.createRelativeBendpoints();
		ArrayList<RelativeBendpoint> points = new ArrayList<RelativeBendpoint>(
				2);
		points.add(new RelativeBendpoint());
		points.add(new RelativeBendpoint());
		bendpoints.setPoints(points);
		edge.setBendpoints(bendpoints);
		ViewUtil.insertChildView(containerView, edge, index, persisted);
		edge.setType(RosVisualIDRegistry.getType(PublisherEditPart.VISUAL_ID));
		edge.setElement(domainElement);
		// initializePreferences
		final IPreferenceStore prefStore = (IPreferenceStore) preferencesHint
				.getPreferenceStore();

		org.eclipse.swt.graphics.RGB lineRGB = PreferenceConverter.getColor(
				prefStore, IPreferenceConstants.PREF_LINE_COLOR);
		ViewUtil.setStructuralFeatureValue(edge,
				NotationPackage.eINSTANCE.getLineStyle_LineColor(),
				FigureUtilities.RGBToInteger(lineRGB));
		FontStyle edgeFontStyle = (FontStyle) edge
				.getStyle(NotationPackage.Literals.FONT_STYLE);
		if (edgeFontStyle != null) {
			FontData fontData = PreferenceConverter.getFontData(prefStore,
					IPreferenceConstants.PREF_DEFAULT_FONT);
			edgeFontStyle.setFontName(fontData.getName());
			edgeFontStyle.setFontHeight(fontData.getHeight());
			edgeFontStyle.setBold((fontData.getStyle() & SWT.BOLD) != 0);
			edgeFontStyle.setItalic((fontData.getStyle() & SWT.ITALIC) != 0);
			org.eclipse.swt.graphics.RGB fontRGB = PreferenceConverter
					.getColor(prefStore, IPreferenceConstants.PREF_FONT_COLOR);
			edgeFontStyle.setFontColor(FigureUtilities.RGBToInteger(fontRGB)
					.intValue());
		}
		Routing routing = Routing.get(prefStore
				.getInt(IPreferenceConstants.PREF_LINE_STYLE));
		if (routing != null) {
			ViewUtil.setStructuralFeatureValue(edge,
					NotationPackage.eINSTANCE.getRoutingStyle_Routing(),
					routing);
		}
		Node label6004 = createLabel(edge,
				RosVisualIDRegistry.getType(PublisherNameEditPart.VISUAL_ID));
		label6004.setLayoutConstraint(NotationFactory.eINSTANCE
				.createLocation());
		Location location6004 = (Location) label6004.getLayoutConstraint();
		location6004.setX(0);
		location6004.setY(40);
		return edge;
	}

	/**
	 * @generated
	 */
	private Node createCompartment(View owner, String hint,
			boolean canCollapse, boolean hasTitle, boolean canSort,
			boolean canFilter) {
		//SemanticListCompartment rv = NotationFactory.eINSTANCE.createSemanticListCompartment();
		//rv.setShowTitle(showTitle);
		//rv.setCollapsed(isCollapsed);
		Node rv;
		if (canCollapse) {
			rv = NotationFactory.eINSTANCE.createBasicCompartment();
		} else {
			rv = NotationFactory.eINSTANCE.createDecorationNode();
		}
		if (hasTitle) {
			TitleStyle ts = NotationFactory.eINSTANCE.createTitleStyle();
			ts.setShowTitle(true);
			rv.getStyles().add(ts);
		}
		if (canSort) {
			rv.getStyles().add(NotationFactory.eINSTANCE.createSortingStyle());
		}
		if (canFilter) {
			rv.getStyles()
					.add(NotationFactory.eINSTANCE.createFilteringStyle());
		}
		rv.setType(hint);
		ViewUtil.insertChildView(owner, rv, ViewUtil.APPEND, true);
		return rv;
	}

EObject domainElement  View containerView 
			int index  boolean persisted  PreferencesHint preferencesHint
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/providers/RosViewProvider.java
Shape node = NotationFactory.eINSTANCE.createShape();
		node.setLayoutConstraint(NotationFactory.eINSTANCE.createBounds());
		node.setType(RosVisualIDRegistry.getType(ServiceEditPart.VISUAL_ID));
		ViewUtil.insertChildView(containerView, node, index, persisted);
		node.setElement(domainElement);
		stampShortcut(containerView, node);
		// initializeFromPreferences 
		final IPreferenceStore prefStore = (IPreferenceStore) preferencesHint
				.getPreferenceStore();

		org.eclipse.swt.graphics.RGB lineRGB = PreferenceConverter.getColor(
				prefStore, IPreferenceConstants.PREF_LINE_COLOR);
		ViewUtil.setStructuralFeatureValue(node,
				NotationPackage.eINSTANCE.getLineStyle_LineColor(),
				FigureUtilities.RGBToInteger(lineRGB));
		FontStyle nodeFontStyle = (FontStyle) node
				.getStyle(NotationPackage.Literals.FONT_STYLE);
		if (nodeFontStyle != null) {
			FontData fontData = PreferenceConverter.getFontData(prefStore,
					IPreferenceConstants.PREF_DEFAULT_FONT);
			nodeFontStyle.setFontName(fontData.getName());
			nodeFontStyle.setFontHeight(fontData.getHeight());
			nodeFontStyle.setBold((fontData.getStyle() & SWT.BOLD) != 0);
			nodeFontStyle.setItalic((fontData.getStyle() & SWT.ITALIC) != 0);
			org.eclipse.swt.graphics.RGB fontRGB = PreferenceConverter
					.getColor(prefStore, IPreferenceConstants.PREF_FONT_COLOR);
			nodeFontStyle.setFontColor(FigureUtilities.RGBToInteger(fontRGB)
					.intValue());
Node createService_2003(EObject domainElement, View containerView,
			int index, boolean persisted, PreferencesHint preferencesHint)
EObject domainElement  View containerView 
			int index  boolean persisted  PreferencesHint preferencesHint
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/providers/RosViewProvider.java
Node node = NotationFactory.eINSTANCE.createNode();
		node.setLayoutConstraint(NotationFactory.eINSTANCE.createLocation());
		node.setType(RosVisualIDRegistry.getType(ParameterEditPart.VISUAL_ID));
		ViewUtil.insertChildView(containerView, node, index, persisted);
		node.setElement(domainElement);
		return node;
Node createParameter_3001(EObject domainElement, View containerView,
			int index, boolean persisted, PreferencesHint preferencesHint)
EObject domainElement 
			View containerView  int index  boolean persisted 
			PreferencesHint preferencesHint
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/providers/RosViewProvider.java
edge.setType(RosVisualIDRegistry.getType(SubscriberEditPart.VISUAL_ID));
				RosVisualIDRegistry.getType(SubscriberNameEditPart.VISUAL_ID));
	/**
	 * @generated
	 */
	public Edge createServiceServer_4003(EObject domainElement,
			View containerView, int index, boolean persisted,
			PreferencesHint preferencesHint) {
		Connector edge = NotationFactory.eINSTANCE.createConnector();
		edge.getStyles().add(NotationFactory.eINSTANCE.createFontStyle());
		RelativeBendpoints bendpoints = NotationFactory.eINSTANCE
				.createRelativeBendpoints();
		ArrayList<RelativeBendpoint> points = new ArrayList<RelativeBendpoint>(
				2);
		points.add(new RelativeBendpoint());
		points.add(new RelativeBendpoint());
		bendpoints.setPoints(points);
		edge.setBendpoints(bendpoints);
		ViewUtil.insertChildView(containerView, edge, index, persisted);
		edge.setType(RosVisualIDRegistry
				.getType(ServiceServerEditPart.VISUAL_ID));
		edge.setElement(domainElement);
		// initializePreferences
		final IPreferenceStore prefStore = (IPreferenceStore) preferencesHint
				.getPreferenceStore();

		org.eclipse.swt.graphics.RGB lineRGB = PreferenceConverter.getColor(
				prefStore, IPreferenceConstants.PREF_LINE_COLOR);
		ViewUtil.setStructuralFeatureValue(edge,
				NotationPackage.eINSTANCE.getLineStyle_LineColor(),
				FigureUtilities.RGBToInteger(lineRGB));
		FontStyle edgeFontStyle = (FontStyle) edge
				.getStyle(NotationPackage.Literals.FONT_STYLE);
		if (edgeFontStyle != null) {
			FontData fontData = PreferenceConverter.getFontData(prefStore,
					IPreferenceConstants.PREF_DEFAULT_FONT);
			edgeFontStyle.setFontName(fontData.getName());
			edgeFontStyle.setFontHeight(fontData.getHeight());
			edgeFontStyle.setBold((fontData.getStyle() & SWT.BOLD) != 0);
			edgeFontStyle.setItalic((fontData.getStyle() & SWT.ITALIC) != 0);
			org.eclipse.swt.graphics.RGB fontRGB = PreferenceConverter
					.getColor(prefStore, IPreferenceConstants.PREF_FONT_COLOR);
			edgeFontStyle.setFontColor(FigureUtilities.RGBToInteger(fontRGB)
					.intValue());
Edge createSubscriber_4002(EObject domainElement,
			View containerView, int index, boolean persisted,
			PreferencesHint preferencesHint)
EObject domainElement  View containerView 
			int index  boolean persisted  PreferencesHint preferencesHint
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/providers/RosViewProvider.java
Connector edge = NotationFactory.eINSTANCE.createConnector();
		edge.getStyles().add(NotationFactory.eINSTANCE.createFontStyle());
		RelativeBendpoints bendpoints = NotationFactory.eINSTANCE
				.createRelativeBendpoints();
		ArrayList<RelativeBendpoint> points = new ArrayList<RelativeBendpoint>(
				2);
		points.add(new RelativeBendpoint());
		points.add(new RelativeBendpoint());
		bendpoints.setPoints(points);
		edge.setBendpoints(bendpoints);
		ViewUtil.insertChildView(containerView, edge, index, persisted);
		edge.setType(RosVisualIDRegistry.getType(PublisherEditPart.VISUAL_ID));
		edge.setElement(domainElement);
		// initializePreferences
		final IPreferenceStore prefStore = (IPreferenceStore) preferencesHint
				.getPreferenceStore();

		org.eclipse.swt.graphics.RGB lineRGB = PreferenceConverter.getColor(
				prefStore, IPreferenceConstants.PREF_LINE_COLOR);
		ViewUtil.setStructuralFeatureValue(edge,
				NotationPackage.eINSTANCE.getLineStyle_LineColor(),
				FigureUtilities.RGBToInteger(lineRGB));
		FontStyle edgeFontStyle = (FontStyle) edge
				.getStyle(NotationPackage.Literals.FONT_STYLE);
		if (edgeFontStyle != null) {
			FontData fontData = PreferenceConverter.getFontData(prefStore,
					IPreferenceConstants.PREF_DEFAULT_FONT);
			edgeFontStyle.setFontName(fontData.getName());
			edgeFontStyle.setFontHeight(fontData.getHeight());
			edgeFontStyle.setBold((fontData.getStyle() & SWT.BOLD) != 0);
			edgeFontStyle.setItalic((fontData.getStyle() & SWT.ITALIC) != 0);
			org.eclipse.swt.graphics.RGB fontRGB = PreferenceConverter
					.getColor(prefStore, IPreferenceConstants.PREF_FONT_COLOR);
			edgeFontStyle.setFontColor(FigureUtilities.RGBToInteger(fontRGB)
					.intValue());
Edge createPublisher_4004(EObject domainElement, View containerView,
			int index, boolean persisted, PreferencesHint preferencesHint)
View owner  String hint 
			boolean canCollapse  boolean hasTitle  boolean canSort 
			boolean canFilter
org.ros.model.ros.diagram/src/org/ros/model/ros/diagram/providers/RosViewProvider.java
//SemanticListCompartment rv = NotationFactory.eINSTANCE.createSemanticListCompartment();
		//rv.setShowTitle(showTitle);
		//rv.setCollapsed(isCollapsed);
		Node rv;
		if (canCollapse) {
			rv = NotationFactory.eINSTANCE.createBasicCompartment();
Node createCompartment(View owner, String hint,
			boolean canCollapse, boolean hasTitle, boolean canSort,
			boolean canFilter)
				case TopicEditPart.VISUAL_ID:
		return TopicEditPart.VISUAL_ID == visualID
				|| NodeEditPart.VISUAL_ID == visualID;
			return createTopic_2001(domainElement, containerView, index,
		case NodeEditPart.VISUAL_ID:
			return createNode_2002(domainElement, containerView, index,
			return createSubscriber_4001(getSemanticElement(semanticAdapter),
			return createPublisher_4002(getSemanticElement(semanticAdapter),
	public Node createTopic_2001(EObject domainElement, View containerView,
		node.setType(RosVisualIDRegistry.getType(TopicEditPart.VISUAL_ID));
				RosVisualIDRegistry.getType(TopicNameEditPart.VISUAL_ID));
	public Node createNode_2002(EObject domainElement, View containerView,
		node.setType(RosVisualIDRegistry.getType(NodeEditPart.VISUAL_ID));
				RosVisualIDRegistry.getType(NodeNameEditPart.VISUAL_ID));
	public Edge createSubscriber_4001(EObject domainElement,
		edge.setType(RosVisualIDRegistry.getType(SubscriberEditPart.VISUAL_ID));
				RosVisualIDRegistry.getType(SubscriberNameEditPart.VISUAL_ID));
	public Edge createPublisher_4002(EObject domainElement, View containerView,
			int index, boolean persisted, PreferencesHint preferencesHint) {
		edge.setType(RosVisualIDRegistry.getType(PublisherEditPart.VISUAL_ID));
				RosVisualIDRegistry.getType(PublisherNameEditPart.VISUAL_ID));
@@ -35,6 +35,7 @@
 import org.eclipse.gmf.runtime.notation.RelativeBendpoints;
 import org.eclipse.gmf.runtime.notation.Routing;
 import org.eclipse.gmf.runtime.notation.Shape;
+import org.eclipse.gmf.runtime.notation.TitleStyle;
 import org.eclipse.gmf.runtime.notation.View;
 import org.eclipse.gmf.runtime.notation.datatype.RelativeBendpoint;
 import org.eclipse.jface.preference.IPreferenceStore;
@@ -43,9 +44,17 @@
 import org.eclipse.swt.graphics.FontData;
 import org.ros.model.ros.diagram.edit.parts.NodeEditPart;
 import org.ros.model.ros.diagram.edit.parts.NodeNameEditPart;
+import org.ros.model.ros.diagram.edit.parts.NodeParametersEditPart;
 import org.ros.model.ros.diagram.edit.parts.PackageEditPart;
+import org.ros.model.ros.diagram.edit.parts.ParameterEditPart;
 import org.ros.model.ros.diagram.edit.parts.PublisherEditPart;
 import org.ros.model.ros.diagram.edit.parts.PublisherNameEditPart;
+import org.ros.model.ros.diagram.edit.parts.ServiceClientEditPart;
+import org.ros.model.ros.diagram.edit.parts.ServiceClientNameEditPart;
+import org.ros.model.ros.diagram.edit.parts.ServiceEditPart;
+import org.ros.model.ros.diagram.edit.parts.ServiceNameEditPart;
+import org.ros.model.ros.diagram.edit.parts.ServiceServerEditPart;
+import org.ros.model.ros.diagram.edit.parts.ServiceServerNameEditPart;
 import org.ros.model.ros.diagram.edit.parts.SubscriberEditPart;
 import org.ros.model.ros.diagram.edit.parts.SubscriberNameEditPart;
 import org.ros.model.ros.diagram.edit.parts.TopicEditPart;
@@ -140,8 +149,10 @@ protected boolean provides(CreateNodeViewOperation op) {
 					return false; // foreign diagram
 				}
 				switch (visualID) {
-				case TopicEditPart.VISUAL_ID:
 				case NodeEditPart.VISUAL_ID:
+				case TopicEditPart.VISUAL_ID:
+				case ServiceEditPart.VISUAL_ID:
+				case ParameterEditPart.VISUAL_ID:
 					if (domainElement == null
 							|| visualID != RosVisualIDRegistry.getNodeVisualID(
 									op.getContainerView(), domainElement)) {
@@ -153,8 +164,10 @@ protected boolean provides(CreateNodeViewOperation op) {
 				}
 			}
 		}
-		return TopicEditPart.VISUAL_ID == visualID
-				|| NodeEditPart.VISUAL_ID == visualID;
+		return NodeEditPart.VISUAL_ID == visualID
+				|| TopicEditPart.VISUAL_ID == visualID
+				|| ServiceEditPart.VISUAL_ID == visualID
+				|| ParameterEditPart.VISUAL_ID == visualID;
 	}
 
 	/**
@@ -211,11 +224,17 @@ public Node createNode(IAdaptable semanticAdapter, View containerView,
 			visualID = RosVisualIDRegistry.getVisualID(semanticHint);
 		}
 		switch (visualID) {
+		case NodeEditPart.VISUAL_ID:
+			return createNode_2001(domainElement, containerView, index,
+					persisted, preferencesHint);
 		case TopicEditPart.VISUAL_ID:
-			return createTopic_2001(domainElement, containerView, index,
+			return createTopic_2002(domainElement, containerView, index,
 					persisted, preferencesHint);
-		case NodeEditPart.VISUAL_ID:
-			return createNode_2002(domainElement, containerView, index,
+		case ServiceEditPart.VISUAL_ID:
+			return createService_2003(domainElement, containerView, index,
+					persisted, preferencesHint);
+		case ParameterEditPart.VISUAL_ID:
+			return createParameter_3001(domainElement, containerView, index,
 					persisted, preferencesHint);
 		}
 		// can't happen, provided #provides(CreateNodeViewOperation) is correct
@@ -231,11 +250,19 @@ public Edge createEdge(IAdaptable semanticAdapter, View containerView,
 		IElementType elementType = getSemanticElementType(semanticAdapter);
 		String elementTypeHint = ((IHintedType) elementType).getSemanticHint();
 		switch (RosVisualIDRegistry.getVisualID(elementTypeHint)) {
+		case ServiceClientEditPart.VISUAL_ID:
+			return createServiceClient_4001(
+					getSemanticElement(semanticAdapter), containerView, index,
+					persisted, preferencesHint);
 		case SubscriberEditPart.VISUAL_ID:
-			return createSubscriber_4001(getSemanticElement(semanticAdapter),
+			return createSubscriber_4002(getSemanticElement(semanticAdapter),
 					containerView, index, persisted, preferencesHint);
+		case ServiceServerEditPart.VISUAL_ID:
+			return createServiceServer_4003(
+					getSemanticElement(semanticAdapter), containerView, index,
+					persisted, preferencesHint);
 		case PublisherEditPart.VISUAL_ID:
-			return createPublisher_4002(getSemanticElement(semanticAdapter),
+			return createPublisher_4004(getSemanticElement(semanticAdapter),
 					containerView, index, persisted, preferencesHint);
 		}
 		// can never happen, provided #provides(CreateEdgeViewOperation) is correct
@@ -245,11 +272,11 @@ public Edge createEdge(IAdaptable semanticAdapter, View containerView,
 	/**
 	 * @generated
 	 */
-	public Node createTopic_2001(EObject domainElement, View containerView,
+	public Node createNode_2001(EObject domainElement, View containerView,
 			int index, boolean persisted, PreferencesHint preferencesHint) {
 		Shape node = NotationFactory.eINSTANCE.createShape();
 		node.setLayoutConstraint(NotationFactory.eINSTANCE.createBounds());
-		node.setType(RosVisualIDRegistry.getType(TopicEditPart.VISUAL_ID));
+		node.setType(RosVisualIDRegistry.getType(NodeEditPart.VISUAL_ID));
 		ViewUtil.insertChildView(containerView, node, index, persisted);
 		node.setElement(domainElement);
 		stampShortcut(containerView, node);
@@ -282,18 +309,21 @@ public Node createTopic_2001(EObject domainElement, View containerView,
 				NotationPackage.eINSTANCE.getFillStyle_FillColor(),
 				FigureUtilities.RGBToInteger(fillRGB));
 		Node label5001 = createLabel(node,
-				RosVisualIDRegistry.getType(TopicNameEditPart.VISUAL_ID));
+				RosVisualIDRegistry.getType(NodeNameEditPart.VISUAL_ID));
+		createCompartment(node,
+				RosVisualIDRegistry.getType(NodeParametersEditPart.VISUAL_ID),
+				false, true, true, true);
 		return node;
 	}
 
 	/**
 	 * @generated
 	 */
-	public Node createNode_2002(EObject domainElement, View containerView,
+	public Node createTopic_2002(EObject domainElement, View containerView,
 			int index, boolean persisted, PreferencesHint preferencesHint) {
 		Shape node = NotationFactory.eINSTANCE.createShape();
 		node.setLayoutConstraint(NotationFactory.eINSTANCE.createBounds());
-		node.setType(RosVisualIDRegistry.getType(NodeEditPart.VISUAL_ID));
+		node.setType(RosVisualIDRegistry.getType(TopicEditPart.VISUAL_ID));
 		ViewUtil.insertChildView(containerView, node, index, persisted);
 		node.setElement(domainElement);
 		stampShortcut(containerView, node);
@@ -326,14 +356,71 @@ public Node createNode_2002(EObject domainElement, View containerView,
 				NotationPackage.eINSTANCE.getFillStyle_FillColor(),
 				FigureUtilities.RGBToInteger(fillRGB));
 		Node label5002 = createLabel(node,
-				RosVisualIDRegistry.getType(NodeNameEditPart.VISUAL_ID));
+				RosVisualIDRegistry.getType(TopicNameEditPart.VISUAL_ID));
 		return node;
 	}
 
 	/**
 	 * @generated
 	 */
-	public Edge createSubscriber_4001(EObject domainElement,
+	public Node createService_2003(EObject domainElement, View containerView,
+			int index, boolean persisted, PreferencesHint preferencesHint) {
+		Shape node = NotationFactory.eINSTANCE.createShape();
+		node.setLayoutConstraint(NotationFactory.eINSTANCE.createBounds());
+		node.setType(RosVisualIDRegistry.getType(ServiceEditPart.VISUAL_ID));
+		ViewUtil.insertChildView(containerView, node, index, persisted);
+		node.setElement(domainElement);
+		stampShortcut(containerView, node);
+		// initializeFromPreferences 
+		final IPreferenceStore prefStore = (IPreferenceStore) preferencesHint
+				.getPreferenceStore();
+
+		org.eclipse.swt.graphics.RGB lineRGB = PreferenceConverter.getColor(
+				prefStore, IPreferenceConstants.PREF_LINE_COLOR);
+		ViewUtil.setStructuralFeatureValue(node,
+				NotationPackage.eINSTANCE.getLineStyle_LineColor(),
+				FigureUtilities.RGBToInteger(lineRGB));
+		FontStyle nodeFontStyle = (FontStyle) node
+				.getStyle(NotationPackage.Literals.FONT_STYLE);
+		if (nodeFontStyle != null) {
+			FontData fontData = PreferenceConverter.getFontData(prefStore,
+					IPreferenceConstants.PREF_DEFAULT_FONT);
+			nodeFontStyle.setFontName(fontData.getName());
+			nodeFontStyle.setFontHeight(fontData.getHeight());
+			nodeFontStyle.setBold((fontData.getStyle() & SWT.BOLD) != 0);
+			nodeFontStyle.setItalic((fontData.getStyle() & SWT.ITALIC) != 0);
+			org.eclipse.swt.graphics.RGB fontRGB = PreferenceConverter
+					.getColor(prefStore, IPreferenceConstants.PREF_FONT_COLOR);
+			nodeFontStyle.setFontColor(FigureUtilities.RGBToInteger(fontRGB)
+					.intValue());
+		}
+		org.eclipse.swt.graphics.RGB fillRGB = PreferenceConverter.getColor(
+				prefStore, IPreferenceConstants.PREF_FILL_COLOR);
+		ViewUtil.setStructuralFeatureValue(node,
+				NotationPackage.eINSTANCE.getFillStyle_FillColor(),
+				FigureUtilities.RGBToInteger(fillRGB));
+		Node label5003 = createLabel(node,
+				RosVisualIDRegistry.getType(ServiceNameEditPart.VISUAL_ID));
+		return node;
+	}
+
+	/**
+	 * @generated
+	 */
+	public Node createParameter_3001(EObject domainElement, View containerView,
+			int index, boolean persisted, PreferencesHint preferencesHint) {
+		Node node = NotationFactory.eINSTANCE.createNode();
+		node.setLayoutConstraint(NotationFactory.eINSTANCE.createLocation());
+		node.setType(RosVisualIDRegistry.getType(ParameterEditPart.VISUAL_ID));
+		ViewUtil.insertChildView(containerView, node, index, persisted);
+		node.setElement(domainElement);
+		return node;
+	}
+
+	/**
+	 * @generated
+	 */
+	public Edge createServiceClient_4001(EObject domainElement,
 			View containerView, int index, boolean persisted,
 			PreferencesHint preferencesHint) {
 		Connector edge = NotationFactory.eINSTANCE.createConnector();
@@ -347,7 +434,8 @@ public Edge createSubscriber_4001(EObject domainElement,
 		bendpoints.setPoints(points);
 		edge.setBendpoints(bendpoints);
 		ViewUtil.insertChildView(containerView, edge, index, persisted);
-		edge.setType(RosVisualIDRegistry.getType(SubscriberEditPart.VISUAL_ID));
+		edge.setType(RosVisualIDRegistry
+				.getType(ServiceClientEditPart.VISUAL_ID));
 		edge.setElement(domainElement);
 		// initializePreferences
 		final IPreferenceStore prefStore = (IPreferenceStore) preferencesHint
@@ -380,7 +468,8 @@ public Edge createSubscriber_4001(EObject domainElement,
 					routing);
 		}
 		Node label6001 = createLabel(edge,
-				RosVisualIDRegistry.getType(SubscriberNameEditPart.VISUAL_ID));
+				RosVisualIDRegistry
+						.getType(ServiceClientNameEditPart.VISUAL_ID));
 		label6001.setLayoutConstraint(NotationFactory.eINSTANCE
 				.createLocation());
 		Location location6001 = (Location) label6001.getLayoutConstraint();
@@ -392,8 +481,9 @@ public Edge createSubscriber_4001(EObject domainElement,
 	/**
 	 * @generated
 	 */
-	public Edge createPublisher_4002(EObject domainElement, View containerView,
-			int index, boolean persisted, PreferencesHint preferencesHint) {
+	public Edge createSubscriber_4002(EObject domainElement,
+			View containerView, int index, boolean persisted,
+			PreferencesHint preferencesHint) {
 		Connector edge = NotationFactory.eINSTANCE.createConnector();
 		edge.getStyles().add(NotationFactory.eINSTANCE.createFontStyle());
 		RelativeBendpoints bendpoints = NotationFactory.eINSTANCE
@@ -405,7 +495,7 @@ public Edge createPublisher_4002(EObject domainElement, View containerView,
 		bendpoints.setPoints(points);
 		edge.setBendpoints(bendpoints);
 		ViewUtil.insertChildView(containerView, edge, index, persisted);
-		edge.setType(RosVisualIDRegistry.getType(PublisherEditPart.VISUAL_ID));
+		edge.setType(RosVisualIDRegistry.getType(SubscriberEditPart.VISUAL_ID));
 		edge.setElement(domainElement);
 		// initializePreferences
 		final IPreferenceStore prefStore = (IPreferenceStore) preferencesHint
@@ -438,7 +528,7 @@ public Edge createPublisher_4002(EObject domainElement, View containerView,
 					routing);
 		}
 		Node label6002 = createLabel(edge,
-				RosVisualIDRegistry.getType(PublisherNameEditPart.VISUAL_ID));
+				RosVisualIDRegistry.getType(SubscriberNameEditPart.VISUAL_ID));
 		label6002.setLayoutConstraint(NotationFactory.eINSTANCE
 				.createLocation());
 		Location location6002 = (Location) label6002.getLayoutConstraint();
@@ -447,6 +537,125 @@ public Edge createPublisher_4002(EObject domainElement, View containerView,
 		return edge;
 	}
 
+	/**
+	 * @generated
+	 */
+	public Edge createServiceServer_4003(EObject domainElement,
+			View containerView, int index, boolean persisted,
+			PreferencesHint preferencesHint) {
+		Connector edge = NotationFactory.eINSTANCE.createConnector();
+		edge.getStyles().add(NotationFactory.eINSTANCE.createFontStyle());
+		RelativeBendpoints bendpoints = NotationFactory.eINSTANCE
+				.createRelativeBendpoints();
+		ArrayList<RelativeBendpoint> points = new ArrayList<RelativeBendpoint>(
+				2);
+		points.add(new RelativeBendpoint());
+		points.add(new RelativeBendpoint());
+		bendpoints.setPoints(points);
+		edge.setBendpoints(bendpoints);
+		ViewUtil.insertChildView(containerView, edge, index, persisted);
+		edge.setType(RosVisualIDRegistry
+				.getType(ServiceServerEditPart.VISUAL_ID));
+		edge.setElement(domainElement);
+		// initializePreferences
+		final IPreferenceStore prefStore = (IPreferenceStore) preferencesHint
+				.getPreferenceStore();
+
+		org.eclipse.swt.graphics.RGB lineRGB = PreferenceConverter.getColor(
+				prefStore, IPreferenceConstants.PREF_LINE_COLOR);
+		ViewUtil.setStructuralFeatureValue(edge,
+				NotationPackage.eINSTANCE.getLineStyle_LineColor(),
+				FigureUtilities.RGBToInteger(lineRGB));
+		FontStyle edgeFontStyle = (FontStyle) edge
+				.getStyle(NotationPackage.Literals.FONT_STYLE);
+		if (edgeFontStyle != null) {
+			FontData fontData = PreferenceConverter.getFontData(prefStore,
+					IPreferenceConstants.PREF_DEFAULT_FONT);
+			edgeFontStyle.setFontName(fontData.getName());
+			edgeFontStyle.setFontHeight(fontData.getHeight());
+			edgeFontStyle.setBold((fontData.getStyle() & SWT.BOLD) != 0);
+			edgeFontStyle.setItalic((fontData.getStyle() & SWT.ITALIC) != 0);
+			org.eclipse.swt.graphics.RGB fontRGB = PreferenceConverter
+					.getColor(prefStore, IPreferenceConstants.PREF_FONT_COLOR);
+			edgeFontStyle.setFontColor(FigureUtilities.RGBToInteger(fontRGB)
+					.intValue());
+		}
+		Routing routing = Routing.get(prefStore
+				.getInt(IPreferenceConstants.PREF_LINE_STYLE));
+		if (routing != null) {
+			ViewUtil.setStructuralFeatureValue(edge,
+					NotationPackage.eINSTANCE.getRoutingStyle_Routing(),
+					routing);
+		}
+		Node label6003 = createLabel(edge,
+				RosVisualIDRegistry
+						.getType(ServiceServerNameEditPart.VISUAL_ID));
+		label6003.setLayoutConstraint(NotationFactory.eINSTANCE
+				.createLocation());
+		Location location6003 = (Location) label6003.getLayoutConstraint();
+		location6003.setX(0);
+		location6003.setY(40);
+		return edge;
+	}
+
+	/**
+	 * @generated
+	 */
+	public Edge createPublisher_4004(EObject domainElement, View containerView,
+			int index, boolean persisted, PreferencesHint preferencesHint) {
+		Connector edge = NotationFactory.eINSTANCE.createConnector();
+		edge.getStyles().add(NotationFactory.eINSTANCE.createFontStyle());
+		RelativeBendpoints bendpoints = NotationFactory.eINSTANCE
+				.createRelativeBendpoints();
+		ArrayList<RelativeBendpoint> points = new ArrayList<RelativeBendpoint>(
+				2);
+		points.add(new RelativeBendpoint());
+		points.add(new RelativeBendpoint());
+		bendpoints.setPoints(points);
+		edge.setBendpoints(bendpoints);
+		ViewUtil.insertChildView(containerView, edge, index, persisted);
+		edge.setType(RosVisualIDRegistry.getType(PublisherEditPart.VISUAL_ID));
+		edge.setElement(domainElement);
+		// initializePreferences
+		final IPreferenceStore prefStore = (IPreferenceStore) preferencesHint
+				.getPreferenceStore();
+
+		org.eclipse.swt.graphics.RGB lineRGB = PreferenceConverter.getColor(
+				prefStore, IPreferenceConstants.PREF_LINE_COLOR);
+		ViewUtil.setStructuralFeatureValue(edge,
+				NotationPackage.eINSTANCE.getLineStyle_LineColor(),
+				FigureUtilities.RGBToInteger(lineRGB));
+		FontStyle edgeFontStyle = (FontStyle) edge
+				.getStyle(NotationPackage.Literals.FONT_STYLE);
+		if (edgeFontStyle != null) {
+			FontData fontData = PreferenceConverter.getFontData(prefStore,
+					IPreferenceConstants.PREF_DEFAULT_FONT);
+			edgeFontStyle.setFontName(fontData.getName());
+			edgeFontStyle.setFontHeight(fontData.getHeight());
+			edgeFontStyle.setBold((fontData.getStyle() & SWT.BOLD) != 0);
+			edgeFontStyle.setItalic((fontData.getStyle() & SWT.ITALIC) != 0);
+			org.eclipse.swt.graphics.RGB fontRGB = PreferenceConverter
+					.getColor(prefStore, IPreferenceConstants.PREF_FONT_COLOR);
+			edgeFontStyle.setFontColor(FigureUtilities.RGBToInteger(fontRGB)
+					.intValue());
+		}
+		Routing routing = Routing.get(prefStore
+				.getInt(IPreferenceConstants.PREF_LINE_STYLE));
+		if (routing != null) {
+			ViewUtil.setStructuralFeatureValue(edge,
+					NotationPackage.eINSTANCE.getRoutingStyle_Routing(),
+					routing);
+		}
+		Node label6004 = createLabel(edge,
+				RosVisualIDRegistry.getType(PublisherNameEditPart.VISUAL_ID));
+		label6004.setLayoutConstraint(NotationFactory.eINSTANCE
+				.createLocation());
+		Location location6004 = (Location) label6004.getLayoutConstraint();
+		location6004.setX(0);
+		location6004.setY(40);
+		return edge;
+	}
+
 	/**
 	 * @generated
 	 */
@@ -472,6 +681,38 @@ private Node createLabel(View owner, String hint) {
 		return rv;
 	}
 
+	/**
+	 * @generated
+	 */
+	private Node createCompartment(View owner, String hint,
+			boolean canCollapse, boolean hasTitle, boolean canSort,
+			boolean canFilter) {
+		//SemanticListCompartment rv = NotationFactory.eINSTANCE.createSemanticListCompartment();
+		//rv.setShowTitle(showTitle);
+		//rv.setCollapsed(isCollapsed);
+		Node rv;
+		if (canCollapse) {
+			rv = NotationFactory.eINSTANCE.createBasicCompartment();
+		} else {
+			rv = NotationFactory.eINSTANCE.createDecorationNode();
+		}
+		if (hasTitle) {
+			TitleStyle ts = NotationFactory.eINSTANCE.createTitleStyle();
+			ts.setShowTitle(true);
+			rv.getStyles().add(ts);
+		}
+		if (canSort) {
+			rv.getStyles().add(NotationFactory.eINSTANCE.createSortingStyle());
+		}
+		if (canFilter) {
+			rv.getStyles()
+					.add(NotationFactory.eINSTANCE.createFilteringStyle());
+		}
+		rv.setType(hint);
+		ViewUtil.insertChildView(owner, rv, ViewUtil.APPEND, true);
+		return rv;
+	}
+
 	/**
 	 * @generated
 	 */
https://github.com/ipa320/bride/raw/01bc5c83c895357f23a345ecec85a3796cf66358/org.ros.model.ros.diagram%2Fsrc%2Forg%2Fros%2Fmodel%2Fros%2Fdiagram%2Fproviders%2FRosViewProvider.java
9b9bef6de5d33036345bf83b2562e1df4b06b78e
modified
ipa320$bride
if (topicName_5002Parser == null) {
			topicName_5002Parser = parser;
		return topicName_5002Parser;
	private IParser serviceName_5003Parser;
	private IParser getServiceName_5003Parser() {
		if (serviceName_5003Parser == null) {
					.getService_Name()
IParser
IParser getTopicName_5002Parser()
if (topicName_5001Parser == null) {
			topicName_5001Parser = parser;
		return topicName_5001Parser;
	private IParser nodeName_5002Parser;
	private IParser getNodeName_5002Parser() {
		if (nodeName_5002Parser == null) {
					.getNode_Name()
IParser
IParser getTopicName_5001Parser()