Author: jsdelfino
Date: Tue Feb 26 07:57:32 2008
New Revision: 631266

URL: http://svn.apache.org/viewvc?rev=631266&view=rev
Log:
Adding an interface for scanners used to scan contributions and find artifacts 
in them.

Added:
    
incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/ContributionScanner.java
   (with props)
    
incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/ContributionScannerExtensionPoint.java
   (with props)
    
incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/DefaultContributionScannerExtensionPoint.java
   (with props)
    
incubator/tuscany/java/sca/modules/contribution/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.ContributionScannerExtensionPoint

Added: 
incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/ContributionScanner.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/ContributionScanner.java?rev=631266&view=auto
==============================================================================
--- 
incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/ContributionScanner.java
 (added)
+++ 
incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/ContributionScanner.java
 Tue Feb 26 07:57:32 2008
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.    
+ */
+package org.apache.tuscany.sca.contribution.processor;
+
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.List;
+
+import org.apache.tuscany.sca.contribution.service.ContributionException;
+
+/**
+ * Interface for contribution package scanners
+ * 
+ * Contribution scanners understand the format of the contribution and how to 
get the
+ * artifacts in the contribution.
+ * 
+ * @version $Rev$ $Date$
+ */
+public interface ContributionScanner {
+    
+    /**
+     * Returns the type of package supported by this package scanner.
+     * 
+     * @return the package type
+     */
+    String getContributionType();
+
+    /**
+     * Returns a list of artifacts in the contribution.
+     * 
+     * @param contributionURL Contribution URL
+     * @return List of artifact URIs
+     * @throws ContributionException
+     * @throws IOException
+     */
+    List<String> getArtifacts(URL contributionURL) throws 
ContributionException, IOException;
+
+    /**
+     * Return the URL for an artifact in the contribution.
+     * 
+     * This is needed for archives such as jar files that have specific URL 
schemes
+     * for the artifacts they contain.
+     * 
+     * @param contributionURL Contribution URL
+     * @param artifact The relative URI for the artifact
+     * @return The artifact URL
+     */
+    URL getArtifactURL(URL packageSourceURL, String artifact) throws 
MalformedURLException;
+
+}

Propchange: 
incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/ContributionScanner.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/ContributionScanner.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: 
incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/ContributionScannerExtensionPoint.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/ContributionScannerExtensionPoint.java?rev=631266&view=auto
==============================================================================
--- 
incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/ContributionScannerExtensionPoint.java
 (added)
+++ 
incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/ContributionScannerExtensionPoint.java
 Tue Feb 26 07:57:32 2008
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.    
+ */
+package org.apache.tuscany.sca.contribution.processor;
+
+/**
+ * An extension point for contribution scanners
+ * 
+ * @version $Rev$ $Date$
+ */
+public interface ContributionScannerExtensionPoint {
+    
+    /**
+     * Add a ContributionScanner using the contribution type as the key.
+     * 
+     * @param scanner The contribution scanner
+     */
+    void addContributionScanner(ContributionScanner scanner);
+    
+    /**
+     * Remove a ContributionScanner.
+     * 
+     * @param scanner The contribution scanner
+     */
+    void removeContributionScanner(ContributionScanner scanner);
+    
+    /**
+     * Returns the ContributionScanner for the given contribution type.
+     * 
+     * @param contributionType The contribution type
+     * @return The contribution scanner
+     */
+    ContributionScanner getContributionScanner(String contributionType);
+    
+}
\ No newline at end of file

Propchange: 
incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/ContributionScannerExtensionPoint.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/ContributionScannerExtensionPoint.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: 
incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/DefaultContributionScannerExtensionPoint.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/DefaultContributionScannerExtensionPoint.java?rev=631266&view=auto
==============================================================================
--- 
incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/DefaultContributionScannerExtensionPoint.java
 (added)
+++ 
incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/DefaultContributionScannerExtensionPoint.java
 Tue Feb 26 07:57:32 2008
@@ -0,0 +1,126 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.    
+ */
+
+package org.apache.tuscany.sca.contribution.processor;
+
+import java.io.IOException;
+import java.lang.reflect.Constructor;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.tuscany.sca.contribution.service.ContributionException;
+import org.apache.tuscany.sca.contribution.util.ServiceDeclaration;
+import org.apache.tuscany.sca.contribution.util.ServiceDiscovery;
+
+/**
+ * Default implementation of a contribution scanner extension point.
+ * 
+ * @version $Rev$ $Date$
+ */
+public class DefaultContributionScannerExtensionPoint implements 
ContributionScannerExtensionPoint {
+
+    private Map<String, ContributionScanner> scanners = new HashMap<String, 
ContributionScanner>();
+    private boolean loaded;
+
+    public DefaultContributionScannerExtensionPoint() {
+    }
+
+    public void addContributionScanner(ContributionScanner scanner) {
+        scanners.put(scanner.getContributionType(), scanner);
+    }
+
+    public void removeContributionScanner(ContributionScanner scanner) {
+        scanners.remove(scanner.getContributionType());
+    }
+
+    public ContributionScanner getContributionScanner(String contentType) {
+        loadScanners();
+        return scanners.get(contentType);
+    }
+
+    private void loadScanners() {
+        if (loaded)
+            return;
+
+        // Get the scanner service declarations
+        Set<ServiceDeclaration> scannerDeclarations; 
+        try {
+            scannerDeclarations = 
ServiceDiscovery.getInstance().getServiceDeclarations(ContributionScanner.class);
+        } catch (IOException e) {
+            throw new IllegalStateException(e);
+        }
+        
+        for (ServiceDeclaration scannerDeclaration: scannerDeclarations) {
+            Map<String, String> attributes = 
scannerDeclaration.getAttributes();
+            
+            // Load a URL artifact scanner
+            String contributionType = attributes.get("type");
+            
+            // Create a scanner wrapper and register it
+            ContributionScanner scanner = new 
LazyContributionScanner(contributionType, scannerDeclaration);
+            addContributionScanner(scanner);
+        }
+        
+        loaded = true;
+    }
+
+    /**
+     * A facade for contribution scanners.
+     */
+    private static class LazyContributionScanner implements 
ContributionScanner {
+        
+        private ServiceDeclaration scannerDeclaration;
+        private String contributionType;
+        private ContributionScanner scanner;
+        
+        private LazyContributionScanner(String contributionType, 
ServiceDeclaration scannerDeclaration) {
+            this.scannerDeclaration = scannerDeclaration;
+            this.contributionType = contributionType;
+        }
+
+        public URL getArtifactURL(URL contributionSourceURL, String artifact) 
throws MalformedURLException {
+            return getScanner().getArtifactURL(contributionSourceURL, 
artifact);
+        }
+
+        public List<String> getArtifacts(URL contributionSourceURL) throws 
ContributionException, IOException {
+            return getScanner().getArtifacts(contributionSourceURL);
+        }
+
+        public String getContributionType() {
+            return contributionType;
+        }
+        
+        private ContributionScanner getScanner() {
+            if (scanner == null) {
+                try {
+                    Class<ContributionScanner> scannerClass = 
(Class<ContributionScanner>)scannerDeclaration.loadClass();
+                    Constructor<ContributionScanner> constructor = 
scannerClass.getConstructor();
+                    scanner = constructor.newInstance();
+                } catch (Exception e) {
+                    throw new IllegalStateException(e);
+                }
+            }
+            return scanner;
+        }
+    }
+}

Propchange: 
incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/DefaultContributionScannerExtensionPoint.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/DefaultContributionScannerExtensionPoint.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: 
incubator/tuscany/java/sca/modules/contribution/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.ContributionScannerExtensionPoint
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/contribution/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.ContributionScannerExtensionPoint?rev=631266&view=auto
==============================================================================
--- 
incubator/tuscany/java/sca/modules/contribution/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.ContributionScannerExtensionPoint
 (added)
+++ 
incubator/tuscany/java/sca/modules/contribution/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.ContributionScannerExtensionPoint
 Tue Feb 26 07:57:32 2008
@@ -0,0 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+# 
+#   http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License. 
+
+org.apache.tuscany.sca.contribution.processor.DefaultContributionScannerExtensionPoint



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to