You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by js...@apache.org on 2008/06/03 23:31:38 UTC

svn commit: r662898 - in /incubator/tuscany/java/sca/modules/domain-manager/src/main: java/org/apache/tuscany/sca/domain/manager/impl/ContributionCollectionImpl.java resources/workspace.html

Author: jsdelfino
Date: Tue Jun  3 14:31:37 2008
New Revision: 662898

URL: http://svn.apache.org/viewvc?rev=662898&view=rev
Log:
List available contribution directories in the Add Contribution field.

Modified:
    incubator/tuscany/java/sca/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/ContributionCollectionImpl.java
    incubator/tuscany/java/sca/modules/domain-manager/src/main/resources/workspace.html

Modified: incubator/tuscany/java/sca/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/ContributionCollectionImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/ContributionCollectionImpl.java?rev=662898&r1=662897&r2=662898&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/ContributionCollectionImpl.java (original)
+++ incubator/tuscany/java/sca/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/ContributionCollectionImpl.java Tue Jun  3 14:31:37 2008
@@ -19,6 +19,7 @@
 
 package org.apache.tuscany.sca.domain.manager.impl;
 
+import static javax.xml.stream.XMLStreamConstants.START_ELEMENT;
 import static org.apache.tuscany.sca.domain.manager.impl.DomainManagerUtil.DEPLOYMENT_CONTRIBUTION_URI;
 import static org.apache.tuscany.sca.domain.manager.impl.DomainManagerUtil.compositeSimpleTitle;
 import static org.apache.tuscany.sca.domain.manager.impl.DomainManagerUtil.compositeSourceLink;
@@ -29,6 +30,7 @@
 import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.FileInputStream;
+import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.net.MalformedURLException;
 import java.net.URI;
@@ -45,6 +47,7 @@
 import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.stream.XMLInputFactory;
 import javax.xml.stream.XMLOutputFactory;
+import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
 import javax.xml.stream.XMLStreamWriter;
 
@@ -292,6 +295,61 @@
 
             return entries.toArray(new Entry[entries.size()]);
             
+        } if (queryString.startsWith("suggestions=true")) {
+            
+            // Returns a list of contribution suggestions, by scanning the parent of the workspace
+            // directory for potential contribution directories, for example project directories
+            Workspace suggestionWorkspace = workspaceFactory.createWorkspace();
+            List<Entry> entries = new ArrayList<Entry>();
+            String rootDirectory = domainManagerConfiguration.getRootDirectory();
+            File rootLocation = new File(new File(rootDirectory).toURI().normalize());
+            for (File project: rootLocation.getParentFile().listFiles()) {
+                File dotProject = new File(project, ".project");
+                if (!dotProject.exists()) {
+                    continue;
+                }
+                
+                // We have a potential contribution
+                String uri = project.getName();
+                File location = project;
+                
+                // If this is a Java project, find it's output location
+                File dotClasspath = new File(project, ".classpath");
+                if (dotClasspath.exists()) {
+                    try {
+                        XMLStreamReader reader = inputFactory.createXMLStreamReader(new FileInputStream(dotClasspath));
+                        reader.nextTag();
+                        while (reader.hasNext()) {
+                            int event = reader.getEventType();
+                            if (event == START_ELEMENT) {
+                                if ("classpathentry".equals(reader.getName().getLocalPart())) {
+                                    if ("output".equals(reader.getAttributeValue("", "kind"))) {
+                                        location = new File(project, reader.getAttributeValue("", "path"));
+                                        break;
+                                    }
+                                }
+                            }
+                            if (reader.hasNext()) {
+                                reader.next();
+                            }
+                        }
+                    } catch (FileNotFoundException e) {
+                    } catch (XMLStreamException e) {
+                    }
+                    
+                }
+                
+                // Create a contribution entry
+                if (!location.getPath().startsWith(rootLocation.getPath())) {
+                    Contribution contribution = contributionFactory.createContribution();
+                    contribution.setURI(uri);
+                    contribution.setLocation(location.getPath());
+                    entries.add(entry(suggestionWorkspace, contribution));
+                }
+            }
+            
+            return entries.toArray(new Entry[entries.size()]);
+            
         } else {
             throw new UnsupportedOperationException();
         }

Modified: incubator/tuscany/java/sca/modules/domain-manager/src/main/resources/workspace.html
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/domain-manager/src/main/resources/workspace.html?rev=662898&r1=662897&r2=662898&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/domain-manager/src/main/resources/workspace.html (original)
+++ incubator/tuscany/java/sca/modules/domain-manager/src/main/resources/workspace.html Tue Jun  3 14:31:37 2008
@@ -83,6 +83,24 @@
 		}
 	}				
 
+	var suggestedContributions = new Array();
+	
+	function getSuggestedContributions() {
+		workspace.get("?suggestions=true", getSuggestedContributionsResponse);
+	}
+	
+	function getSuggestedContributionsResponse(feed) {
+		suggestedContributions = new Array();
+		if (feed != null) {
+			var entries = feed.getElementsByTagName("entry");              
+			for (var i=0; i<entries.length; i++) {
+				var id = entries[i].getElementsByTagName("id")[0].firstChild.nodeValue;
+				var location = entries[i].getElementsByTagName("link")[1].getAttribute("href");
+				suggestedContributions[i] = id + ':' + location;	
+			}
+		}
+	}				
+
 	function deleteContribution() {
 		var contributions  = array(document.workspaceForm.contributions);
 		for (var i=0; i < contributions.length; i++) {
@@ -113,10 +131,36 @@
 		document.newContributionForm.contributionLocation.value = "";
 	    getContributions();
 	}
-	
+
+	function suggestContributionIDs() {
+		var ids = new Array();
+		for (var i=0; i<suggestedContributions.length; i++) {
+			var uri = suggestedContributions[i];
+			var id = uri.substring(0, uri.indexOf(':'));
+			ids[id] = id;
+		}
+		return array(ids);
+	}
+
+	function suggestContributionLocations() {
+		var locations = new Array();
+		for (var i=0; i<suggestedContributions.length; i++) {
+			var uri = suggestedContributions[i];
+			var id = uri.substring(0, uri.indexOf(':'));
+			if (id == document.newContributionForm.contributionID.value) {
+				var location = uri.substring(uri.indexOf(':') +1);
+				locations[location] = location;
+			}
+		}
+		return array(locations);
+	}
+
 	function init() {
 		toolbar();
 		getContributions();
+		getSuggestedContributions();
+		suggest(document.newContributionForm.contributionID, suggestContributionIDs);
+		suggest(document.newContributionForm.contributionLocation, suggestContributionLocations);
 	}
 	
 </script>