Author: jsdelfino
Date: Fri Mar 7 12:29:45 2008
New Revision: 634806
URL: http://svn.apache.org/viewvc?rev=634806&view=rev
Log:
Load all contributions required by a contribution to allow models in the
contribution to resolve properly. Implemented a dummy contribution repository
object to make the contribution listeners happy. Added calls to invoke the
contribution listeners to let them connect imports to exports. Simplified the
bootstrap of the component by getting a populated extension point registry from
a dummy runtime instance.
Modified:
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/DeployableCompositeCollectionImpl.java
Modified:
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/DeployableCompositeCollectionImpl.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/DeployableCompositeCollectionImpl.java?rev=634806&r1=634805&r2=634806&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/DeployableCompositeCollectionImpl.java
(original)
+++
incubator/tuscany/java/sca/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/DeployableCompositeCollectionImpl.java
Fri Mar 7 12:29:45 2008
@@ -23,6 +23,7 @@
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
+import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URL;
@@ -58,55 +59,37 @@
import org.apache.tuscany.sca.assembly.builder.Problem.Severity;
import org.apache.tuscany.sca.assembly.builder.impl.CompositeBuilderImpl;
import
org.apache.tuscany.sca.assembly.builder.impl.CompositeConfigurationBuilderImpl;
-import org.apache.tuscany.sca.assembly.xml.CompositeDocumentProcessor;
-import org.apache.tuscany.sca.assembly.xml.CompositeProcessor;
import org.apache.tuscany.sca.contribution.Artifact;
import org.apache.tuscany.sca.contribution.Contribution;
import org.apache.tuscany.sca.contribution.ContributionFactory;
-import org.apache.tuscany.sca.contribution.DefaultModelFactoryExtensionPoint;
+import org.apache.tuscany.sca.contribution.Import;
import org.apache.tuscany.sca.contribution.ModelFactoryExtensionPoint;
-import
org.apache.tuscany.sca.contribution.processor.DefaultStAXArtifactProcessorExtensionPoint;
-import
org.apache.tuscany.sca.contribution.processor.DefaultURLArtifactProcessorExtensionPoint;
import
org.apache.tuscany.sca.contribution.processor.ExtensibleStAXArtifactProcessor;
import
org.apache.tuscany.sca.contribution.processor.ExtensibleURLArtifactProcessor;
import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor;
import
org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessorExtensionPoint;
import org.apache.tuscany.sca.contribution.processor.URLArtifactProcessor;
import
org.apache.tuscany.sca.contribution.processor.URLArtifactProcessorExtensionPoint;
-import
org.apache.tuscany.sca.contribution.resolver.DefaultModelResolverExtensionPoint;
+import org.apache.tuscany.sca.contribution.resolver.DefaultModelResolver;
import org.apache.tuscany.sca.contribution.resolver.ExtensibleModelResolver;
import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
import
org.apache.tuscany.sca.contribution.resolver.ModelResolverExtensionPoint;
+import org.apache.tuscany.sca.contribution.service.ContributionListener;
+import
org.apache.tuscany.sca.contribution.service.ContributionListenerExtensionPoint;
import org.apache.tuscany.sca.contribution.service.ContributionReadException;
+import org.apache.tuscany.sca.contribution.service.ContributionRepository;
import
org.apache.tuscany.sca.contribution.xml.ContributionGeneratedMetadataDocumentProcessor;
import
org.apache.tuscany.sca.contribution.xml.ContributionMetadataDocumentProcessor;
import org.apache.tuscany.sca.contribution.xml.ContributionMetadataProcessor;
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+import org.apache.tuscany.sca.core.assembly.ActivationException;
+import org.apache.tuscany.sca.host.embedded.impl.ReallySmallRuntime;
import org.apache.tuscany.sca.implementation.data.collection.Entry;
import org.apache.tuscany.sca.implementation.data.collection.Item;
import org.apache.tuscany.sca.implementation.data.collection.NotFoundException;
-import org.apache.tuscany.sca.implementation.java.JavaImplementationFactory;
-import org.apache.tuscany.sca.implementation.java.introspect.JavaClassVisitor;
-import
org.apache.tuscany.sca.implementation.java.introspect.impl.AllowsPassByReferenceProcessor;
-import
org.apache.tuscany.sca.implementation.java.introspect.impl.BaseJavaClassVisitor;
-import
org.apache.tuscany.sca.implementation.java.introspect.impl.ComponentNameProcessor;
-import
org.apache.tuscany.sca.implementation.java.introspect.impl.ConstructorProcessor;
-import
org.apache.tuscany.sca.implementation.java.introspect.impl.ContextProcessor;
-import
org.apache.tuscany.sca.implementation.java.introspect.impl.ConversationIDProcessor;
-import
org.apache.tuscany.sca.implementation.java.introspect.impl.ConversationProcessor;
-import
org.apache.tuscany.sca.implementation.java.introspect.impl.DestroyProcessor;
-import
org.apache.tuscany.sca.implementation.java.introspect.impl.EagerInitProcessor;
-import
org.apache.tuscany.sca.implementation.java.introspect.impl.HeuristicPojoProcessor;
-import
org.apache.tuscany.sca.implementation.java.introspect.impl.InitProcessor;
-import
org.apache.tuscany.sca.implementation.java.introspect.impl.PolicyProcessor;
-import
org.apache.tuscany.sca.implementation.java.introspect.impl.PropertyProcessor;
-import
org.apache.tuscany.sca.implementation.java.introspect.impl.ReferenceProcessor;
-import
org.apache.tuscany.sca.implementation.java.introspect.impl.ResourceProcessor;
-import
org.apache.tuscany.sca.implementation.java.introspect.impl.ScopeProcessor;
-import
org.apache.tuscany.sca.implementation.java.introspect.impl.ServiceProcessor;
import org.apache.tuscany.sca.implementation.node.NodeImplementation;
import org.apache.tuscany.sca.interfacedef.InterfaceContractMapper;
import org.apache.tuscany.sca.interfacedef.impl.InterfaceContractMapperImpl;
-import org.apache.tuscany.sca.interfacedef.java.JavaInterfaceFactory;
import org.apache.tuscany.sca.policy.IntentAttachPointTypeFactory;
import org.apache.tuscany.sca.policy.PolicyFactory;
import org.apache.tuscany.sca.policy.PolicySet;
@@ -138,10 +121,10 @@
public LocalContributionCollection contributionCollection;
@Reference
- public LocalContributionCollection domainCompositeCollection;
+ public LocalCompositeCollection domainCompositeCollection;
@Reference
- public LocalContributionCollection cloudCollection;
+ public LocalCompositeCollection cloudCollection;
private ModelFactoryExtensionPoint modelFactories;
private ModelResolverExtensionPoint modelResolvers;
@@ -151,6 +134,7 @@
private XMLOutputFactory outputFactory;
private CompositeBuilder compositeBuilder;
private CompositeConfigurationBuilderImpl compositeConfiguationBuilder;
+ private List<ContributionListener> contributionListeners;
/**
* Initialize the component.
@@ -158,91 +142,73 @@
@Init
public void initialize() throws IOException, ContributionReadException,
XMLStreamException, ParserConfigurationException {
- // Create factories
- modelFactories = new DefaultModelFactoryExtensionPoint();
- assemblyFactory = modelFactories.getFactory(AssemblyFactory.class);
- XMLInputFactory inputFactory =
modelFactories.getFactory(XMLInputFactory.class);
- outputFactory = modelFactories.getFactory(XMLOutputFactory.class);
- outputFactory.setProperty(XMLOutputFactory.IS_REPAIRING_NAMESPACES,
true);
- ContributionFactory contributionFactory =
modelFactories.getFactory(ContributionFactory.class);
- PolicyFactory policyFactory =
modelFactories.getFactory(PolicyFactory.class);
-
- // TODO - This doesn't really belong here but this method seems to be
building another
- // runtime in parallel to the one runing this component and the
composite
- // needs to resolve implementation types so that it can be
built.
- // If we want to do this parallel thing we should create a new
extension
- // registry so that existing initialization methods can be
called.
- JavaInterfaceFactory javaFactory =
modelFactories.getFactory(JavaInterfaceFactory.class);
- JavaImplementationFactory javaImplementationFactory =
modelFactories.getFactory(JavaImplementationFactory.class);
-
- BaseJavaClassVisitor[] extensions =
- new BaseJavaClassVisitor[] {new
ConstructorProcessor(assemblyFactory),
- new
AllowsPassByReferenceProcessor(assemblyFactory),
- new
ComponentNameProcessor(assemblyFactory),
- new ContextProcessor(assemblyFactory),
- new
ConversationIDProcessor(assemblyFactory),
- new
ConversationProcessor(assemblyFactory),
- new DestroyProcessor(assemblyFactory),
new EagerInitProcessor(assemblyFactory),
- new InitProcessor(assemblyFactory),
new PropertyProcessor(assemblyFactory),
- new
ReferenceProcessor(assemblyFactory, javaFactory),
- new
ResourceProcessor(assemblyFactory), new ScopeProcessor(assemblyFactory),
- new ServiceProcessor(assemblyFactory,
javaFactory),
- new
HeuristicPojoProcessor(assemblyFactory, javaFactory),
- new PolicyProcessor(assemblyFactory,
policyFactory)};
- for (JavaClassVisitor extension : extensions) {
- javaImplementationFactory.addClassVisitor(extension);
- }
+ try {
- // Create artifact processors
- StAXArtifactProcessorExtensionPoint staxProcessors = new
DefaultStAXArtifactProcessorExtensionPoint(modelFactories);
- StAXArtifactProcessor<Object> staxProcessor = new
ExtensibleStAXArtifactProcessor(staxProcessors, inputFactory, outputFactory);
- staxProcessors.addArtifactProcessor(new
ContributionMetadataProcessor(assemblyFactory, contributionFactory,
staxProcessor));
- compositeProcessor = new CompositeProcessor(contributionFactory,
assemblyFactory, policyFactory, staxProcessor);
- staxProcessors.addArtifactProcessor(compositeProcessor);
-
- URLArtifactProcessorExtensionPoint urlProcessors = new
DefaultURLArtifactProcessorExtensionPoint(modelFactories);
- URLArtifactProcessor<Object> urlProcessor = new
ExtensibleURLArtifactProcessor(urlProcessors);
- urlProcessors.addArtifactProcessor(new
ContributionMetadataDocumentProcessor(staxProcessor, inputFactory));
- urlProcessors.addArtifactProcessor(new
ContributionGeneratedMetadataDocumentProcessor(staxProcessor, inputFactory));
- urlProcessors.addArtifactProcessor(new
CompositeDocumentProcessor(staxProcessor, inputFactory));
-
- // Create contribution processor
- modelResolvers = new DefaultModelResolverExtensionPoint();
- contributionContentProcessor = new
ContributionContentProcessor(modelFactories, modelResolvers, urlProcessor);
-
- // Create composite builder
- SCABindingFactory scaBindingFactory =
modelFactories.getFactory(SCABindingFactory.class);
- IntentAttachPointTypeFactory intentAttachPointTypeFactory =
modelFactories.getFactory(IntentAttachPointTypeFactory.class);
- InterfaceContractMapper contractMapper = new
InterfaceContractMapperImpl();
- List<PolicySet> domainPolicySets = new ArrayList<PolicySet>();
-
- // TODO need to get these messages back to the browser
- CompositeBuilderMonitor monitor = new CompositeBuilderMonitor() {
- public void problem(Problem problem) {
- if (problem.getSeverity() == Severity.INFO) {
- logger.info(problem.toString());
- } else if (problem.getSeverity() == Severity.WARNING) {
- logger.warning(problem.toString());
- } else if (problem.getSeverity() == Severity.ERROR) {
- if (problem.getCause() != null) {
- logger.log(Level.SEVERE, problem.toString(),
problem.getCause());
- } else {
- logger.severe(problem.toString());
+ // FIXME Remove this later
+ // Bootstrap a registry
+ ExtensionPointRegistry registry = registry();
+
+ // Get model factories
+ modelFactories =
registry.getExtensionPoint(ModelFactoryExtensionPoint.class);
+ assemblyFactory = modelFactories.getFactory(AssemblyFactory.class);
+ XMLInputFactory inputFactory =
modelFactories.getFactory(XMLInputFactory.class);
+ outputFactory = modelFactories.getFactory(XMLOutputFactory.class);
+
outputFactory.setProperty(XMLOutputFactory.IS_REPAIRING_NAMESPACES, true);
+ ContributionFactory contributionFactory =
modelFactories.getFactory(ContributionFactory.class);
+ PolicyFactory policyFactory =
modelFactories.getFactory(PolicyFactory.class);
+
+ // Get and initialize artifact processors
+ StAXArtifactProcessorExtensionPoint staxProcessors =
registry.getExtensionPoint(StAXArtifactProcessorExtensionPoint.class);
+ StAXArtifactProcessor<Object> staxProcessor = new
ExtensibleStAXArtifactProcessor(staxProcessors, inputFactory, outputFactory);
+ staxProcessors.addArtifactProcessor(new
ContributionMetadataProcessor(assemblyFactory, contributionFactory,
staxProcessor));
+ compositeProcessor =
(StAXArtifactProcessor<Composite>)staxProcessors.getProcessor(Composite.class);
+
+ URLArtifactProcessorExtensionPoint urlProcessors =
registry.getExtensionPoint(URLArtifactProcessorExtensionPoint.class);
+ URLArtifactProcessor<Object> urlProcessor = new
ExtensibleURLArtifactProcessor(urlProcessors);
+ urlProcessors.addArtifactProcessor(new
ContributionMetadataDocumentProcessor(staxProcessor, inputFactory));
+ urlProcessors.addArtifactProcessor(new
ContributionGeneratedMetadataDocumentProcessor(staxProcessor, inputFactory));
+
+ // Create contribution processor
+ modelResolvers =
registry.getExtensionPoint(ModelResolverExtensionPoint.class);
+ contributionContentProcessor = new
ContributionContentProcessor(modelFactories, modelResolvers, urlProcessor);
+ contributionListeners =
registry.getExtensionPoint(ContributionListenerExtensionPoint.class).getContributionListeners();
+
+ // Create composite builder
+ SCABindingFactory scaBindingFactory =
modelFactories.getFactory(SCABindingFactory.class);
+ IntentAttachPointTypeFactory intentAttachPointTypeFactory =
modelFactories.getFactory(IntentAttachPointTypeFactory.class);
+ InterfaceContractMapper contractMapper = new
InterfaceContractMapperImpl();
+ List<PolicySet> domainPolicySets = new ArrayList<PolicySet>();
+
+ // TODO need to get these messages back to the browser
+ CompositeBuilderMonitor monitor = new CompositeBuilderMonitor() {
+ public void problem(Problem problem) {
+ if (problem.getSeverity() == Severity.INFO) {
+ logger.info(problem.toString());
+ } else if (problem.getSeverity() == Severity.WARNING) {
+ logger.warning(problem.toString());
+ } else if (problem.getSeverity() == Severity.ERROR) {
+ if (problem.getCause() != null) {
+ logger.log(Level.SEVERE, problem.toString(),
problem.getCause());
+ } else {
+ logger.severe(problem.toString());
+ }
}
}
- }
- };
-
- compositeBuilder = new CompositeBuilderImpl(assemblyFactory,
scaBindingFactory, intentAttachPointTypeFactory,
- contractMapper,
domainPolicySets, monitor);
-
- compositeConfiguationBuilder = new
CompositeConfigurationBuilderImpl(assemblyFactory,
-
scaBindingFactory,
-
intentAttachPointTypeFactory,
-
contractMapper,
-
monitor);
-
-
+ };
+
+ compositeBuilder = new CompositeBuilderImpl(assemblyFactory,
scaBindingFactory, intentAttachPointTypeFactory,
+ contractMapper,
domainPolicySets, monitor);
+
+ compositeConfiguationBuilder = new
CompositeConfigurationBuilderImpl(assemblyFactory,
+
scaBindingFactory,
+
intentAttachPointTypeFactory,
+
contractMapper,
+
monitor);
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new ContributionReadException(e);
+ }
}
public Entry<String, Item>[] getAll() {
@@ -365,30 +331,38 @@
// composite:contributionURI;namespace;localName
QName keyQName = qname(key);
- // somewhere to store the composite we expect to write out at the end
+ // Somewhere to store the composite we expect to write out at the end
Composite deployableComposite = null;
- // create a local domain composite
+ // Create a local domain composite
Composite domainComposite = assemblyFactory.createComposite();
// Get the domain composite items
Entry<String, Item>[] domainComposites =
domainCompositeCollection.getAll();
- // create the domain composite
- for (int i=0; i < domainComposites.length; i++){
- // load the contribution
+ // Create the domain composite
+ for (int i=0; i < domainComposites.length; i++) {
+
+ // Load the required contributions
+ List<Contribution> loadedContributions = new
ArrayList<Contribution>();
String contributionURI = uri(domainComposites[i].getKey());
- Item contributionItem;
- try {
- contributionItem = contributionCollection.get(contributionURI);
- } catch (NotFoundException e) {
+ Contribution contribution = null;
+ for (Entry<String, Item> entry:
contributionCollection.query("alldependencies=" + contributionURI)) {
+ Item contributionItem = entry.getData();
+
+ // Read the contribution
+ Contribution c = contribution(loadedContributions,
entry.getKey(), contributionItem.getLink());
+ loadedContributions.add(c);
+ if (contributionURI.equals(entry.getKey())) {
+ contribution = c;
+ }
+ }
+
+ if (contribution == null) {
response.sendError(HttpServletResponse.SC_NOT_FOUND);
return;
}
- // Read the contribution
- Contribution contribution = contribution(contributionURI,
contributionItem.getLink());
-
// Find the specified deployable composite in the contribution
Composite deployable = null;
QName qname = qname(domainComposites[i].getKey());
@@ -514,11 +488,19 @@
* @return
* @throws NotFoundException
*/
- private Contribution contribution(String contributionURI, String
contributionURL) {
+ private Contribution contribution(List<Contribution> contributions, String
contributionURI, String contributionURL) {
try {
URI uri = URI.create(contributionURI);
URL url = url(contributionURL);
Contribution contribution =
(Contribution)contributionContentProcessor.read(null, uri, url);
+
+ // FIXME simplify this later
+ // Fix up contribution imports
+ ContributionRepository dummyRepository = new
DummyContributionRepository(contributions);
+ for (ContributionListener listener: contributionListeners) {
+ listener.contributionAdded(dummyRepository, contribution);
+ }
+
ModelResolver modelResolver = new
ExtensibleModelResolver(contribution, modelResolvers, modelFactories);
contributionContentProcessor.resolve(contribution, modelResolver);
return contribution;
@@ -528,6 +510,10 @@
}
}
+ private Contribution contribution(String contributionURI, String
contributionURL) {
+ return contribution(new ArrayList<Contribution>(), contributionURI,
contributionURL);
+ }
+
/**
* Returns a link to a deployable composite.
*
@@ -633,4 +619,44 @@
}
}
+ /**
+ * Temporary instantiation of a dummy runtime to get a registry populated
+ * with all the right things.
+ *
+ * @return the registry
+ */
+ private ExtensionPointRegistry registry() {
+ try {
+ ReallySmallRuntime runtime = new
ReallySmallRuntime(Thread.currentThread().getContextClassLoader());
+ runtime.start();
+ return runtime.getExtensionPointRegistry();
+ } catch (ActivationException e) {
+ throw new ServiceRuntimeException(e);
+ }
+ }
+
+ /**
+ * FIXME Remove this later
+ * DummyContributionRepository
+ */
+ private class DummyContributionRepository implements
ContributionRepository {
+
+ private List<Contribution> contributions;
+
+ public DummyContributionRepository(List<Contribution> contributions) {
+ this.contributions = contributions;
+ }
+
+ public void addContribution(Contribution contribution) {}
+ public URL find(String contribution) { return null; }
+ public Contribution getContribution(String uri) { return null; }
+ public List<Contribution> getContributions() { return contributions; }
+ public URI getDomain() { return null; }
+ public List<String> list() { return null; }
+ public void remove(String contribution) {}
+ public void removeContribution(Contribution contribution) {}
+ public URL store(String contribution, URL sourceURL, InputStream
contributionStream) throws IOException { return null; }
+ public URL store(String contribution, URL sourceURL) throws
IOException { return null;}
+ public void updateContribution(Contribution contribution) {}
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]