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] > >
