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/02/26 16:57:34 UTC

svn commit: r631266 - in /incubator/tuscany/java/sca/modules/contribution/src/main: java/org/apache/tuscany/sca/contribution/processor/ resources/META-INF/services/

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: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org


Re: svn commit: r631266 - in /incubator/tuscany/java/sca/modules/contribution/src/main: java/org/apache/tuscany/sca/contribution/processor/ resources/META-INF/services/

Posted by Jean-Sebastien Delfino <js...@apache.org>.
>> Jean-Sebastien Delfino wrote:
...
>> Yes that's where I'm going :), I'm trying to implement discrete
>> functions to:
>> - add/list/remove contributions/composites/nodes
>> - analyze/resolve/validate contributions and their dependencies
>> - read/compile-build/write composites without requiring a runtime
...

> Simon Laws wrote:
> Ok, sounds great.
> 
> I would add another line to the functions list. Something like...
> 
> - associate composites with nodes/apply physical binding defaults/propagate
> physical addresses based on domain level wiring
...

+1 that makes sense to me.

-- 
Jean-Sebastien

---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-dev-help@ws.apache.org


Re: svn commit: r631266 - in /incubator/tuscany/java/sca/modules/contribution/src/main: java/org/apache/tuscany/sca/contribution/processor/ resources/META-INF/services/

Posted by Simon Laws <si...@googlemail.com>.
On Tue, Feb 26, 2008 at 7:02 PM, Jean-Sebastien Delfino <
jsdelfino@apache.org> wrote:

> Simon Laws wrote:
> > Sebastien
> >
> > This looks interesting. Can you say a little about how this will be
> used.
> > I'm interested as I'd like to see us open up the contribution service a
> bit
> > and provide some interfaces that allow us to operate on contributions
> (find
> > artifacts, read artifacts, resolve artifacts etc.) rather than having
> the
> > contribution service as a black box. Is this where you are going?
> >
> > Simon
> >
>
> Yes that's where I'm going :), I'm trying to implement discrete
> functions to:
> - add/list/remove contributions/composites/nodes
> - analyze/resolve/validate contributions and their dependencies
> - read/compile-build/write composites without requiring a runtime
>
> ContributionScanner is similar to PackagingProcessor but without URIs
> (which bloat memory with a big workspace) and without an InputStream
> (which doesn't apply to contribution directories).
>
> For everything else I'm trying to reuse as much of the underlying model,
> for example use artifact processors for turning contributions into
> contribution models, use model resolvers to resolve contribution
> dependencies (see the other changes to contribution-impl in SVN r631293).
>
> I'm planning to commit the analyze/validate/find-dependencies functions
> to module workspace-impl.
>
> --
> Jean-Sebastien
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: tuscany-dev-unsubscribe@ws.apache.org
> For additional commands, e-mail: tuscany-dev-help@ws.apache.org
>
> Ok, sounds great.

I would add another line to the functions list. Something like...

- associate composites with nodes/apply physical binding defaults/propagate
physical addresses based on domain level wiring

I'm collecting these various bits of info here (
http://cwiki.apache.org/confluence/display/TUSCANYWIKI/Contribution+Processing)
as I come across them in the hope that we can build some documentation.

Simon

Re: svn commit: r631266 - in /incubator/tuscany/java/sca/modules/contribution/src/main: java/org/apache/tuscany/sca/contribution/processor/ resources/META-INF/services/

Posted by Jean-Sebastien Delfino <js...@apache.org>.
Simon Laws wrote:
> Sebastien
> 
> This looks interesting. Can you say a little about how this will be used.
> I'm interested as I'd like to see us open up the contribution service a bit
> and provide some interfaces that allow us to operate on contributions (find
> artifacts, read artifacts, resolve artifacts etc.) rather than having the
> contribution service as a black box. Is this where you are going?
> 
> Simon
> 

Yes that's where I'm going :), I'm trying to implement discrete 
functions to:
- add/list/remove contributions/composites/nodes
- analyze/resolve/validate contributions and their dependencies
- read/compile-build/write composites without requiring a runtime

ContributionScanner is similar to PackagingProcessor but without URIs 
(which bloat memory with a big workspace) and without an InputStream 
(which doesn't apply to contribution directories).

For everything else I'm trying to reuse as much of the underlying model, 
for example use artifact processors for turning contributions into 
contribution models, use model resolvers to resolve contribution 
dependencies (see the other changes to contribution-impl in SVN r631293).

I'm planning to commit the analyze/validate/find-dependencies functions 
to module workspace-impl.

-- 
Jean-Sebastien

---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-dev-help@ws.apache.org


Re: svn commit: r631266 - in /incubator/tuscany/java/sca/modules/contribution/src/main: java/org/apache/tuscany/sca/contribution/processor/ resources/META-INF/services/

Posted by Simon Laws <si...@googlemail.com>.
Sebastien

This looks interesting. Can you say a little about how this will be used.
I'm interested as I'd like to see us open up the contribution service a bit
and provide some interfaces that allow us to operate on contributions (find
artifacts, read artifacts, resolve artifacts etc.) rather than having the
contribution service as a black box. Is this where you are going?

Simon

On Tue, Feb 26, 2008 at 3:57 PM, <js...@apache.org> wrote:

> 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: tuscany-commits-unsubscribe@ws.apache.org
> For additional commands, e-mail: tuscany-commits-help@ws.apache.org
>
>