You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by rf...@apache.org on 2009/11/10 07:08:06 UTC

svn commit: r834360 - in /tuscany/sandbox/rfeng/tuscany-provisioning/src: main/java/org/apache/tuscany/sca/provision/ExtensionIntrospector.java test/java/META-INF/ test/java/META-INF/MANIFEST.MF

Author: rfeng
Date: Tue Nov 10 06:08:05 2009
New Revision: 834360

URL: http://svn.apache.org/viewvc?rev=834360&view=rev
Log:
Add support to produce json data for dojo tree

Added:
    tuscany/sandbox/rfeng/tuscany-provisioning/src/test/java/META-INF/
    tuscany/sandbox/rfeng/tuscany-provisioning/src/test/java/META-INF/MANIFEST.MF
Modified:
    tuscany/sandbox/rfeng/tuscany-provisioning/src/main/java/org/apache/tuscany/sca/provision/ExtensionIntrospector.java

Modified: tuscany/sandbox/rfeng/tuscany-provisioning/src/main/java/org/apache/tuscany/sca/provision/ExtensionIntrospector.java
URL: http://svn.apache.org/viewvc/tuscany/sandbox/rfeng/tuscany-provisioning/src/main/java/org/apache/tuscany/sca/provision/ExtensionIntrospector.java?rev=834360&r1=834359&r2=834360&view=diff
==============================================================================
--- tuscany/sandbox/rfeng/tuscany-provisioning/src/main/java/org/apache/tuscany/sca/provision/ExtensionIntrospector.java (original)
+++ tuscany/sandbox/rfeng/tuscany-provisioning/src/main/java/org/apache/tuscany/sca/provision/ExtensionIntrospector.java Tue Nov 10 06:08:05 2009
@@ -20,13 +20,13 @@
 package org.apache.tuscany.sca.provision;
 
 import java.lang.reflect.Field;
-import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
-import java.util.List;
+import java.util.HashSet;
 import java.util.Map;
+import java.util.Set;
 
 import javax.xml.namespace.QName;
 
@@ -55,8 +55,22 @@
 public class ExtensionIntrospector {
     private ExtensionPointRegistry registry;
     private boolean loaded;
+    private boolean offline;
     private MavenRuntime mavenRuntime = new DefaultMavenRuntime();
+
+    private MavenEmbedder embedder;
+    private ArtifactResolver resolver;
+    private Embedder internalEmbedder;
+    ArtifactMetadataSource artifactMetadataSource;
+    private ArtifactRepository remoteRepo;
+
+    // Key: java model type
     private Map<String, MavenProject> modules = new HashMap<String, MavenProject>();
+
+    // Key: extension categories
+    private Map<String, Collection<String>> types = new HashMap<String, Collection<String>>();
+
+    // Key: java model type
     private Map<String, QName> qnames = new HashMap<String, QName>();
 
     /**
@@ -90,14 +104,18 @@
 
         this.qnames.putAll(mapJavaTypeToQName());
 
-        List<ServiceDeclaration> factories = new ArrayList<ServiceDeclaration>();
-        factories.addAll(discover("org.apache.tuscany.sca.provider.BindingProviderFactory"));
-        factories.addAll(discover("org.apache.tuscany.sca.provider.ImplementationProviderFactory"));
-        factories.addAll(discover("org.apache.tuscany.sca.provider.PolicyProviderFactory"));
-        factories.addAll(discover("org.apache.tuscany.sca.provider.WireFormatProviderFactory"));
-        factories.addAll(discover("org.apache.tuscany.sca.provider.OperationSelectorProviderFactory"));
+        addExtensions("Bindings", "org.apache.tuscany.sca.provider.BindingProviderFactory");
+        addExtensions("Implementations", "org.apache.tuscany.sca.provider.ImplementationProviderFactory");
+        addExtensions("Policies", "org.apache.tuscany.sca.provider.PolicyProviderFactory");
+        addExtensions("Wire Formats", "org.apache.tuscany.sca.provider.WireFormatProviderFactory");
+        addExtensions("Operation Selectors", "org.apache.tuscany.sca.provider.OperationSelectorProviderFactory");
+
+        loaded = true;
+    }
 
-        for (ServiceDeclaration sd : factories) {
+    private void addExtensions(String label, String name) {
+        Set<String> models = new HashSet<String>();
+        for (ServiceDeclaration sd : discover(name)) {
             MavenProject project = null;
             try {
                 project = mavenRuntime.getProject(sd.getLocation());
@@ -106,11 +124,11 @@
             }
             if (project != null) {
                 String model = sd.getAttributes().get("model");
+                models.add(model);
                 modules.put(model, project);
             }
         }
-
-        loaded = true;
+        types.put(label, models);
     }
 
     public Map<String, QName> mapJavaTypeToQName() {
@@ -145,15 +163,10 @@
         return factoryDeclarations;
     }
 
-    private MavenEmbedder embedder;
-    private ArtifactResolver resolver;
-    private Embedder internalEmbedder;
-    ArtifactMetadataSource artifactMetadataSource;
-    private ArtifactRepository remoteRepo;
-
     public void start() {
         try {
             embedder = new MavenEmbedder();
+            embedder.setOffline(offline);
             embedder.setClassLoader(Thread.currentThread().getContextClassLoader());
             embedder.start();
 
@@ -192,10 +205,7 @@
 
         for (Map.Entry<String, MavenProject> e : getModules().entrySet()) {
             String type = e.getKey();
-            QName qname = qnames.get(e.getKey());
-            if (qname != null) {
-                type = qname.toString();
-            }
+            type = getType(type);
             boolean matched = (args.length == 0);
             for (String arg : args) {
                 if (type.contains(arg)) {
@@ -226,16 +236,94 @@
         return artifacts;
     }
 
+    private String getType(String type) {
+        QName qname = qnames.get(type);
+        if (qname != null) {
+            type = qname.toString();
+        }
+        return type;
+    }
+
     private static <T> T getField(Object object, String name) throws Exception {
         Field field = object.getClass().getDeclaredField(name);
         field.setAccessible(true);
         return (T)field.get(object);
     }
 
+    public String toJSON(Map<String, Collection<Artifact>> map) {
+        StringBuffer json = new StringBuffer("{\n");
+        json.append("  label: \"name\",\n");
+        json.append("  items: [\n");
+        int i = 0;
+        for (Map.Entry<String, Collection<String>> category : types.entrySet()) {
+            json.append("{"); // {
+            json.append("name: ").append("\"").append(category.getKey()).append("\", \n"); // name: "category",
+
+            json.append("  types: [\n");
+            int j = 0;
+            for (String model : category.getValue()) {
+                String key = getType(model);
+                Collection<Artifact> artifacts = map.get(key);
+                json.append("    {"); // {
+                json.append("name: ").append("\"").append(key).append("\", \n"); // type: "type",
+                json.append("     artifacts: [\n");
+                int k = 0;
+                for (Artifact a : artifacts) {
+                    json.append("      {");
+                    json.append("name: \"").append(a.toString()).append("\", ");
+                    json.append("groupId: \"").append(a.getGroupId()).append("\", ");
+                    json.append("artifactId: \"").append(a.getArtifactId()).append("\", ");
+                    json.append("version: \"").append(a.getVersion()).append("\", ");
+                    json.append("scope: \"").append(a.getScope()).append("\"");
+                    if (k == artifacts.size() - 1) {
+                        json.append("}\n");
+                    } else {
+                        json.append("}, \n");
+                    }
+                    k++;
+                }
+                json.append("    ]\n"); // ]
+
+                if (j == map.size() - 1) {
+                    json.append("  }\n");
+                } else {
+                    json.append("  }, \n"); // },
+                }
+                j++;
+            }
+            json.append("]\n");
+            if (i == types.size() - 1) {
+                json.append("}");
+            } else {
+                json.append("},");
+            }
+            i++;
+        }
+        json.append("]\n");
+        json.append("}\n");
+        return json.toString();
+    }
+
+    public boolean isOffline() {
+        return offline;
+    }
+
+    public void setOffline(boolean offline) {
+        this.offline = offline;
+    }
+
     public static void main(String args[]) throws Exception {
+        String json = generateDojoData(args);
+        System.out.println(json);
+    }
+
+    public static String generateDojoData(String[] args) throws Exception {
         ExtensionIntrospector introspector = new ExtensionIntrospector(null);
+        introspector.setOffline("true".equalsIgnoreCase(System.getProperty("offline")));
         introspector.start();
-        for (Map.Entry<String, Collection<Artifact>> entry : introspector.getDependencies(args).entrySet()) {
+        Map<String, Collection<Artifact>> map = introspector.getDependencies(args);
+        /*
+        for (Map.Entry<String, Collection<Artifact>> entry : map.entrySet()) {
             System.out.println("\n------------------------------------------------------------------------");
             System.out.println(entry.getKey());
             System.out.println("------------------------------------------------------------------------");
@@ -244,6 +332,10 @@
             }
             System.out.println("------------------------------------------------------------------------");
         }
+        */
+        String json = introspector.toJSON(map);
         introspector.stop();
+        return json;
     }
+
 }

Added: tuscany/sandbox/rfeng/tuscany-provisioning/src/test/java/META-INF/MANIFEST.MF
URL: http://svn.apache.org/viewvc/tuscany/sandbox/rfeng/tuscany-provisioning/src/test/java/META-INF/MANIFEST.MF?rev=834360&view=auto
==============================================================================
--- tuscany/sandbox/rfeng/tuscany-provisioning/src/test/java/META-INF/MANIFEST.MF (added)
+++ tuscany/sandbox/rfeng/tuscany-provisioning/src/test/java/META-INF/MANIFEST.MF Tue Nov 10 06:08:05 2009
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+Class-Path: 
+