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, <[EMAIL PROTECTED]> 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: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>

Reply via email to