You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by gn...@apache.org on 2006/10/26 15:47:22 UTC

svn commit: r468001 - in /incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi: framework/EndpointRegistry.java servicedesc/EndpointSupport.java view/DotViewEndpointListener.java view/DotViewFlowListener.java

Author: gnodet
Date: Thu Oct 26 06:47:21 2006
New Revision: 468001

URL: http://svn.apache.org/viewvc?view=rev&rev=468001
Log:
Ensure that external / internal endpoints can be separated on the flow graph

Modified:
    incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/framework/EndpointRegistry.java
    incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/servicedesc/EndpointSupport.java
    incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/view/DotViewEndpointListener.java
    incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/view/DotViewFlowListener.java

Modified: incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/framework/EndpointRegistry.java
URL: http://svn.apache.org/viewvc/incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/framework/EndpointRegistry.java?view=diff&rev=468001&r1=468000&r2=468001
==============================================================================
--- incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/framework/EndpointRegistry.java (original)
+++ incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/framework/EndpointRegistry.java Thu Oct 26 06:47:21 2006
@@ -98,6 +98,23 @@
         return asEndpointArray(endpoints);
     }
     
+    public ServiceEndpoint[] getAllEndpointsForComponent(ComponentNameSpace cns) {
+        Collection endpoints = new ArrayList();
+        for (Iterator iter = getInternalEndpoints().iterator(); iter.hasNext();) {
+            InternalEndpoint endpoint = (InternalEndpoint) iter.next();
+            if (cns.equals(endpoint.getComponentNameSpace())) {
+                endpoints.add(endpoint);
+            }
+        }
+        for (Iterator iter = getExternalEndpoints().iterator(); iter.hasNext();) {
+            ExternalEndpoint endpoint = (ExternalEndpoint) iter.next();
+            if (cns.equals(endpoint.getComponentNameSpace())) {
+                endpoints.add(endpoint);
+            }
+        }
+        return asEndpointArray(endpoints);
+    }
+    
     /**
      * Returns a collection of Endpoint objects
      */

Modified: incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/servicedesc/EndpointSupport.java
URL: http://svn.apache.org/viewvc/incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/servicedesc/EndpointSupport.java?view=diff&rev=468001&r1=468000&r2=468001
==============================================================================
--- incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/servicedesc/EndpointSupport.java (original)
+++ incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/servicedesc/EndpointSupport.java Thu Oct 26 06:47:21 2006
@@ -37,4 +37,18 @@
         return getKey(endpoint.getServiceName(), endpoint.getEndpointName());
     }
     
+    public static String getUniqueKey(ServiceEndpoint endpoint) {
+        if (endpoint instanceof InternalEndpoint) {
+            return "internal:" + getKey(endpoint);
+        } else if (endpoint instanceof ExternalEndpoint) {
+            return "external:" + getKey(endpoint);
+        } else if (endpoint instanceof DynamicEndpoint) {
+            return "dynamic:" + getKey(endpoint);
+        } else if (endpoint instanceof LinkedEndpoint) {
+            return "linked:" + getKey(endpoint);
+        } else {
+            return endpoint.getClass().getName() + ":" + getKey(endpoint);
+        }
+    }
+    
 }

Modified: incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/view/DotViewEndpointListener.java
URL: http://svn.apache.org/viewvc/incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/view/DotViewEndpointListener.java?view=diff&rev=468001&r1=468000&r2=468001
==============================================================================
--- incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/view/DotViewEndpointListener.java (original)
+++ incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/view/DotViewEndpointListener.java Thu Oct 26 06:47:21 2006
@@ -115,12 +115,15 @@
         Collection endpointMBeans = registry.getEndpointRegistry().getEndpointMBeans();
         for (Iterator iter = endpointMBeans.iterator(); iter.hasNext();) {
             Endpoint endpoint = (Endpoint) iter.next();
-            String name = endpoint.getEndpointName();
+            String key = endpoint.getSubType().toLowerCase() + ":{" + 
+                                endpoint.getServiceName().getNamespaceURI() + "}" + 
+                                endpoint.getServiceName().getLocalPart() + ":" + 
+                                endpoint.getEndpointName(); 
             String componentName = encode(endpoint.getComponentName());
-            String id = encode(name);
+            String id = encode(key);
             writer.print(id);
             writer.print(" [ label=\"");
-            writer.print(name);
+            writer.print(formatEndpoint(key));
             writer.println("\" ];");
             
             componentEndpointLinks.add(componentName + " -> " + id);
@@ -128,6 +131,21 @@
         generateLinks(writer, componentEndpointLinks);
         
         writer.println("}");
+    }
+
+    protected String formatEndpoint(String key) {
+        int i1 = key.indexOf('{');
+        int i2 = key.indexOf('}');
+        int i3 = key.indexOf(':', i2);
+        String type = key.charAt(i1 - 1) == ':' ? key.substring(0, i1 - 1) : null;
+        String uri = key.substring(i1 + 1, i2);
+        String svc = key.substring(i2 + 1, i3);
+        String ep = key.substring(i3 + 1);
+        if (type != null) {
+            return type + "\\n" + uri + "\\n" + svc + "\\n" + ep;
+        } else {
+            return uri + "\\n" + svc + "\\n" + ep;
+        }
     }
 
     protected void generateLinks(PrintWriter writer, Collection lines, String style) {

Modified: incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/view/DotViewFlowListener.java
URL: http://svn.apache.org/viewvc/incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/view/DotViewFlowListener.java?view=diff&rev=468001&r1=468000&r2=468001
==============================================================================
--- incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/view/DotViewFlowListener.java (original)
+++ incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/view/DotViewFlowListener.java Thu Oct 26 06:47:21 2006
@@ -55,6 +55,7 @@
 
     private Map flow;
     private Set flowLinks;
+    private boolean displayComponents;
     
     public DotViewFlowListener() {
         setFile("ServiceMixFlow.dot");
@@ -77,24 +78,31 @@
         Collection components = registry.getComponents();
         for (Iterator iter = components.iterator(); iter.hasNext();) {
             ComponentMBeanImpl component = (ComponentMBeanImpl) iter.next();
-            ServiceEndpoint[] ses = registry.getEndpointsForComponent(component.getComponentNameSpace());
-
+            ServiceEndpoint[] ses = registry.getEndpointRegistry().getAllEndpointsForComponent(component.getComponentNameSpace());
             String name = component.getName();
-            String id = encode(name);
-
-            writer.println("subgraph cluster_" + id + " {");
-            writer.println("  label=\"" + name + "\";");
-            writer.println("  node [fillcolor = green];");
-            writer.println("  " + id + " [label=\"" + name + "\"];");
-            writer.println("  node [fillcolor = red];");
-            
+            // If we want to display components, create
+            // a sub graph, grouping all the components
+            // endpoints
+            if (isDisplayComponents()) {
+                String id = encode(name);
+                writer.println("subgraph cluster_" + id + " {");
+                writer.println("  label=\"" + name + "\";");
+                writer.println("  node [fillcolor = green];");
+                writer.println("  " + id + " [label=\"" + name + "\"];");
+                writer.println("  node [fillcolor = red];");
+            }
             for (int i = 0; i < ses.length; i++) {
-                String epname = EndpointSupport.getKey(ses[i]);
-                String epid = encode(epname);
+                String key = EndpointSupport.getUniqueKey(ses[i]);
+                String epname = formatEndpoint(key);
+                if (!isDisplayComponents()) {
+                    epname += "\\n" + name;
+                }
+                String epid = encode(key);
                 writer.println("  " + epid + " [label=\"" + epname + "\"];");
             }
-            
-            writer.println("}");
+            if (isDisplayComponents()) {
+                writer.println("}");
+            }
         }
         writer.println();
         generateLinks(writer, brokerLinks);
@@ -104,9 +112,8 @@
         generateLinks(writer, flowLinks);
         
         writer.println("}");
-        
     }
-
+    
     public void exchangeSent(ExchangeEvent event) {
         MessageExchange me = event.getExchange();
         if (me.getEndpoint() != null &&
@@ -115,41 +122,49 @@
             String source = (String) me.getProperty(JbiConstants.SENDER_ENDPOINT);
             if (source == null) {
                 source = mei.getSourceId().getName();
+            } else {
+                ServiceEndpoint[] ses = getContainer().getRegistry().getEndpointRegistry().getAllEndpointsForComponent(mei.getSourceId());
+                for (int i = 0; i < ses.length; i++) {
+                    if (EndpointSupport.getKey(ses[i]).equals(source)) {
+                        source = EndpointSupport.getUniqueKey(ses[i]);
+                        break;
+                    }
+                }
             }
-            String dest = EndpointSupport.getKey(mei.getEndpoint());
-            Map componentFlow = (Map) flow.get(source);
+            String dest = EndpointSupport.getUniqueKey(mei.getEndpoint());
+            Map componentFlow = createSource(source);
             if (componentFlow.put(dest, Boolean.TRUE) == null) {
                 flowLinks.add(encode(source) + " -> " + encode(dest));
                 viewIsDirty(mei.getEndpoint());
             }
         }
-        
     }
     
-    protected void createSource(String name) {
+    protected Map createSource(String name) {
         synchronized (flow) {
             Map componentFlow = (Map) flow.get(name);
             if (componentFlow == null) {
                 componentFlow = new ConcurrentHashMap();
                 flow.put(name, componentFlow);
             }
+            return componentFlow;
         }
     }
 
     public void internalEndpointRegistered(EndpointEvent event) {
-        String key = EndpointSupport.getKey(event.getEndpoint());
+        String key = EndpointSupport.getUniqueKey(event.getEndpoint());
         createSource(key);
         super.internalEndpointRegistered(event);
     }
     
     public void externalEndpointRegistered(EndpointEvent event) {
-        String key = EndpointSupport.getKey(event.getEndpoint());
+        String key = EndpointSupport.getUniqueKey(event.getEndpoint());
         createSource(key);
         super.externalEndpointRegistered(event);
     }
     
     public void linkedEndpointRegistered(EndpointEvent event) {
-        String key = EndpointSupport.getKey(event.getEndpoint());
+        String key = EndpointSupport.getUniqueKey(event.getEndpoint());
         createSource(key);
         super.linkedEndpointRegistered(event);
     }
@@ -169,6 +184,14 @@
     }
 
     public void componentUninstalled(ComponentEvent event) {
+    }
+
+    public boolean isDisplayComponents() {
+        return displayComponents;
+    }
+
+    public void setDisplayComponents(boolean displayComponents) {
+        this.displayComponents = displayComponents;
     }
 
 }