diff options
author | jsdelfino <jsdelfino@13f79535-47bb-0310-9956-ffa450edef68> | 2008-09-15 06:50:04 +0000 |
---|---|---|
committer | jsdelfino <jsdelfino@13f79535-47bb-0310-9956-ffa450edef68> | 2008-09-15 06:50:04 +0000 |
commit | 147ed48e86bb4a13e42df35f1d1d800a7b564f4b (patch) | |
tree | 2412db1dcc7b46a214d2b7b46d21349ac08aa9b8 /branches/sca-android/modules/domain-manager/src | |
parent | 512771c8a42d2cde253f6df55ef552f7a0b4f792 (diff) |
Removed more modules as in Oscar's TUSCANY-2440 reduced-set patch. Also removed newer modules added since r643746 and are not required to run the minimum set that we are porting to android. Set svn ignore properties to ignore Manifest files produced by the build.
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@695356 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'branches/sca-android/modules/domain-manager/src')
36 files changed, 0 insertions, 6213 deletions
diff --git a/branches/sca-android/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/CompositeConfigurationCollectionImpl.java b/branches/sca-android/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/CompositeConfigurationCollectionImpl.java deleted file mode 100644 index 0e25068f5f..0000000000 --- a/branches/sca-android/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/CompositeConfigurationCollectionImpl.java +++ /dev/null @@ -1,127 +0,0 @@ -/* - * 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.domain.manager.impl; - -import static org.apache.tuscany.sca.domain.manager.impl.DomainManagerUtil.compositeQName; -import static org.apache.tuscany.sca.domain.manager.impl.DomainManagerUtil.compositeTitle; -import static org.apache.tuscany.sca.domain.manager.impl.DomainManagerUtil.contributionURI; - -import java.util.ArrayList; -import java.util.List; -import java.util.logging.Logger; - -import javax.xml.namespace.QName; - -import org.apache.tuscany.sca.data.collection.Entry; -import org.apache.tuscany.sca.data.collection.Item; -import org.apache.tuscany.sca.data.collection.ItemCollection; -import org.apache.tuscany.sca.data.collection.LocalItemCollection; -import org.apache.tuscany.sca.data.collection.NotFoundException; -import org.osoa.sca.annotations.Init; -import org.osoa.sca.annotations.Reference; -import org.osoa.sca.annotations.Scope; -import org.osoa.sca.annotations.Service; - -/** - * Implementation of a component that returns composite configuration collections. - * - * @version $Rev$ $Date$ - */ -@Scope("COMPOSITE") -@Service(interfaces={ItemCollection.class, LocalItemCollection.class}) -public class CompositeConfigurationCollectionImpl implements ItemCollection, LocalItemCollection { - - private static final Logger logger = Logger.getLogger(CompositeConfigurationCollectionImpl.class.getName()); - - @Reference - public LocalItemCollection contributionCollection; - - @Reference - public LocalItemCollection cloudCollection; - - /** - * Initialize the component. - */ - @Init - public void initialize() { - } - - public Entry<String, Item>[] getAll() { - throw new UnsupportedOperationException(); - } - - public Item get(String key) throws NotFoundException { - throw new UnsupportedOperationException(); - } - - public String post(String key, Item item) { - throw new UnsupportedOperationException(); - } - - public void put(String key, Item item) throws NotFoundException { - throw new UnsupportedOperationException(); - } - - public void delete(String key) throws NotFoundException { - throw new UnsupportedOperationException(); - } - - public Entry<String, Item>[] query(String queryString) { - logger.fine("query " + queryString); - - if (queryString.startsWith("composite=")) { - - // Expecting a key in the form: - // composite:contributionURI;namespace;localName - int e = queryString.indexOf('='); - String key = queryString.substring(e + 1); - String contributionURI = contributionURI(key); - QName qname = compositeQName(key); - - // Return a collection containing the following entries: - // the resolved version of the specified composite - // the required contributions - List<Entry<String, Item>> entries = new ArrayList<Entry<String, Item>>(); - - // Add the resolved composite entry - Entry<String, Item> compositeEntry = new Entry<String, Item>(); - Item compositeItem = new Item(); - compositeItem.setTitle(compositeTitle(contributionURI, qname)); - compositeItem.setLink("/composite-resolved/" + key); - compositeEntry.setKey(key); - compositeEntry.setData(compositeItem); - entries.add(compositeEntry); - - // Get the collection of required contributions - Entry<String, Item>[] contributionEntries = contributionCollection.query("alldependencies=" + contributionURI); - for (Entry<String, Item> entry: contributionEntries) { - Item item = entry.getData(); - item.setContents(null); - entries.add(entry); - } - - return entries.toArray(new Entry[entries.size()]); - - } else { - throw new UnsupportedOperationException(); - } - } - -} diff --git a/branches/sca-android/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/CompositeConfigurationServiceImpl.java b/branches/sca-android/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/CompositeConfigurationServiceImpl.java deleted file mode 100644 index 09bb05cf87..0000000000 --- a/branches/sca-android/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/CompositeConfigurationServiceImpl.java +++ /dev/null @@ -1,518 +0,0 @@ -/* - * 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.domain.manager.impl; - -import static org.apache.tuscany.sca.domain.manager.impl.DomainManagerUtil.compositeQName; -import static org.apache.tuscany.sca.domain.manager.impl.DomainManagerUtil.contributionURI; -import static org.apache.tuscany.sca.domain.manager.impl.DomainManagerUtil.locationURL; - -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URI; -import java.net.URL; -import java.net.URLDecoder; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.logging.Logger; - -import javax.servlet.Servlet; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.xml.namespace.QName; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.stream.XMLInputFactory; -import javax.xml.stream.XMLOutputFactory; -import javax.xml.stream.XMLStreamWriter; -import javax.xml.transform.TransformerFactory; - -import org.apache.tuscany.sca.assembly.AssemblyFactory; -import org.apache.tuscany.sca.assembly.Component; -import org.apache.tuscany.sca.assembly.Composite; -import org.apache.tuscany.sca.assembly.SCABindingFactory; -import org.apache.tuscany.sca.assembly.builder.CompositeBuilder; -import org.apache.tuscany.sca.assembly.builder.CompositeBuilderException; -import org.apache.tuscany.sca.assembly.builder.impl.CompositeBuilderImpl; -import org.apache.tuscany.sca.assembly.builder.impl.CompositeIncludeBuilderImpl; -import org.apache.tuscany.sca.assembly.xml.Constants; -import org.apache.tuscany.sca.contribution.Artifact; -import org.apache.tuscany.sca.contribution.Contribution; -import org.apache.tuscany.sca.contribution.ModelFactoryExtensionPoint; -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.ExtensibleModelResolver; -import org.apache.tuscany.sca.contribution.resolver.ModelResolverExtensionPoint; -import org.apache.tuscany.sca.contribution.service.ContributionReadException; -import org.apache.tuscany.sca.contribution.service.ContributionResolveException; -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.core.UtilityExtensionPoint; -import org.apache.tuscany.sca.data.collection.Entry; -import org.apache.tuscany.sca.data.collection.Item; -import org.apache.tuscany.sca.data.collection.LocalItemCollection; -import org.apache.tuscany.sca.data.collection.NotFoundException; -import org.apache.tuscany.sca.implementation.node.NodeImplementation; -import org.apache.tuscany.sca.implementation.node.builder.impl.NodeCompositeBuilderImpl; -import org.apache.tuscany.sca.interfacedef.InterfaceContractMapper; -import org.apache.tuscany.sca.monitor.Monitor; -import org.apache.tuscany.sca.monitor.MonitorFactory; -import org.apache.tuscany.sca.policy.IntentAttachPointTypeFactory; -import org.apache.tuscany.sca.workspace.Workspace; -import org.apache.tuscany.sca.workspace.WorkspaceFactory; -import org.apache.tuscany.sca.workspace.builder.ContributionDependencyBuilder; -import org.apache.tuscany.sca.workspace.builder.impl.ContributionDependencyBuilderImpl; -import org.apache.tuscany.sca.workspace.processor.impl.ContributionContentProcessor; -import org.osoa.sca.annotations.Init; -import org.osoa.sca.annotations.Reference; -import org.osoa.sca.annotations.Scope; -import org.osoa.sca.annotations.Service; - -/** - * Implementation of a service that returns a fully configured composite. - * - * @version $Rev$ $Date$ - */ -@Scope("COMPOSITE") -@Service(Servlet.class) -public class CompositeConfigurationServiceImpl extends HttpServlet implements Servlet { - private static final long serialVersionUID = -8809641932774129152L; - - private static final Logger logger = Logger.getLogger(CompositeConfigurationServiceImpl.class.getName()); - - @Reference - public LocalItemCollection contributionCollection; - - @Reference - public LocalItemCollection domainCompositeCollection; - - @Reference - public DomainManagerConfiguration domainManagerConfiguration; - - @Reference - public LocalItemCollection cloudCollection; - - private ModelFactoryExtensionPoint modelFactories; - private ModelResolverExtensionPoint modelResolvers; - private AssemblyFactory assemblyFactory; - private WorkspaceFactory workspaceFactory; - private URLArtifactProcessor<Contribution> contributionProcessor; - private StAXArtifactProcessorExtensionPoint staxProcessors; - private StAXArtifactProcessor<Composite> compositeProcessor; - private XMLOutputFactory outputFactory; - private ContributionDependencyBuilder contributionDependencyBuilder; - private CompositeBuilder compositeBuilder; - private CompositeBuilder compositeIncludeBuilder; - private CompositeBuilder nodeConfigurationBuilder; - private Monitor monitor; - - /** - * Initialize the component. - */ - @Init - public void initialize() throws ParserConfigurationException { - - ExtensionPointRegistry extensionPoints = domainManagerConfiguration.getExtensionPoints(); - - // Create a monitor - UtilityExtensionPoint utilities = extensionPoints.getExtensionPoint(UtilityExtensionPoint.class); - MonitorFactory monitorFactory = utilities.getUtility(MonitorFactory.class); - monitor = monitorFactory.createMonitor(); - - // Get model factories - modelFactories = extensionPoints.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); - workspaceFactory = modelFactories.getFactory(WorkspaceFactory.class); - - // Get and initialize artifact processors - staxProcessors = extensionPoints.getExtensionPoint(StAXArtifactProcessorExtensionPoint.class); - compositeProcessor = (StAXArtifactProcessor<Composite>)staxProcessors.getProcessor(Composite.class); - StAXArtifactProcessor<Object> staxProcessor = new ExtensibleStAXArtifactProcessor(staxProcessors, inputFactory, outputFactory, monitor); - - URLArtifactProcessorExtensionPoint urlProcessors = extensionPoints.getExtensionPoint(URLArtifactProcessorExtensionPoint.class); - URLArtifactProcessor<Object> urlProcessor = new ExtensibleURLArtifactProcessor(urlProcessors, monitor); - - // Create contribution processor - modelResolvers = extensionPoints.getExtensionPoint(ModelResolverExtensionPoint.class); - contributionProcessor = new ContributionContentProcessor(modelFactories, modelResolvers, urlProcessor, staxProcessor, monitor); - - // Create contribution and composite builders - DocumentBuilderFactory documentBuilderFactory = modelFactories.getFactory(DocumentBuilderFactory.class); - TransformerFactory transformerFactory = modelFactories.getFactory(TransformerFactory.class); - contributionDependencyBuilder = new ContributionDependencyBuilderImpl(monitor); - SCABindingFactory scaBindingFactory = modelFactories.getFactory(SCABindingFactory.class); - IntentAttachPointTypeFactory intentAttachPointTypeFactory = modelFactories.getFactory(IntentAttachPointTypeFactory.class); - InterfaceContractMapper contractMapper = utilities.getUtility(InterfaceContractMapper.class); - compositeBuilder = new CompositeBuilderImpl(assemblyFactory, scaBindingFactory, intentAttachPointTypeFactory, documentBuilderFactory, transformerFactory, contractMapper, monitor); - compositeIncludeBuilder = new CompositeIncludeBuilderImpl(monitor); - nodeConfigurationBuilder = new NodeCompositeBuilderImpl(assemblyFactory, scaBindingFactory, documentBuilderFactory, transformerFactory, contractMapper, null, monitor); - } - - @Override - protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - - // Get the request path - String path = URLDecoder.decode(request.getRequestURI().substring(request.getServletPath().length()), "UTF-8"); - String key; - if (path.startsWith("/")) { - if (path.length() > 1) { - key = path.substring(1); - } else { - key =""; - } - } else { - key =path; - } - logger.fine("get " + key); - - // Expect a key in the form composite:contributionURI;namespace;localName or - // a path in the form componentName/componentName/... - // and return the corresponding resolved composite - String requestedContributionURI = null; - QName requestedCompositeName = null; - String[] requestedComponentPath = null; - if (key.startsWith("composite:")) { - - // Extract the composite qname from the key - requestedContributionURI = contributionURI(key); - requestedCompositeName = compositeQName(key); - - } else if (key.length() != 0) { - - // Extract the path to the requested component from the key - requestedComponentPath = key.split("/"); - } - - // Somewhere to store the composite we expect to write out at the end - Composite requestedComposite = null; - - // Create a domain composite model - Composite domainComposite = assemblyFactory.createComposite(); - domainComposite.setName(new QName(Constants.SCA10_TUSCANY_NS, "domain")); - - // Get the domain composite items - Entry<String, Item>[] domainEntries = domainCompositeCollection.getAll(); - - // Populate the domain composite - Workspace workspace = workspaceFactory.createWorkspace(); - workspace.setModelResolver(new ExtensibleModelResolver(workspace, modelResolvers, modelFactories)); - - Map<String, Contribution> contributionMap = new HashMap<String, Contribution>(); - for (Entry<String, Item> domainEntry: domainEntries) { - - // Load the required contributions - String contributionURI = contributionURI(domainEntry.getKey()); - Contribution contribution = contributionMap.get(contributionURI); - if (contribution == null) { - - // The contribution has not been loaded yet, load it with all its dependencies - Entry<String, Item>[] entries = contributionCollection.query("alldependencies=" + contributionURI); - for (Entry<String, Item> entry: entries) { - Item dependencyItem = entry.getData(); - String dependencyURI = entry.getKey(); - - if (!contributionMap.containsKey(dependencyURI)) { - - // Read the contribution - Contribution dependency; - try { - String dependencyLocation = dependencyItem.getAlternate(); - dependency = contribution(workspace, dependencyURI, dependencyLocation); - } catch (ContributionReadException e) { - continue; - } - workspace.getContributions().add(dependency); - contributionMap.put(dependencyURI, dependency); - - if (contributionURI.equals(entry.getKey())) { - contribution = dependency; - } - } - } - } - - if (contribution == null) { - response.sendError(HttpServletResponse.SC_NOT_FOUND, contributionURI); - return; - } - - // Find the specified deployable composite in the contribution - Composite deployable = null; - QName qn = compositeQName(domainEntry.getKey()); - for (Composite d: contribution.getDeployables()) { - if (qn.equals(d.getName())) { - deployable = d; - break; - } - } - if (deployable == null) { - response.sendError(HttpServletResponse.SC_NOT_FOUND, qn.toString()); - return; - } - - // add the deployable composite to the domain composite - domainComposite.getIncludes().add(deployable); - - // Fuse includes into the deployable composite - try { - compositeIncludeBuilder.build(deployable); - } catch (CompositeBuilderException e) { - response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.toString()); - } - - // Store away the requested composite - if (requestedCompositeName != null) { - if (requestedContributionURI.equals(contributionURI) && requestedCompositeName.equals(deployable.getName())){ - requestedComposite = deployable; - } - } - } - - // The requested composite was not found - if (requestedCompositeName != null && requestedComposite == null) { - response.sendError(HttpServletResponse.SC_NOT_FOUND, key); - return; - } - - // Get the clouds composite - Composite cloudsComposite; - try { - cloudsComposite = cloud(); - } catch (NotFoundException e) { - response.sendError(HttpServletResponse.SC_NOT_FOUND, e.getMessage()); - return; - } - - // configure the endpoints for each composite in the domain - List<Composite> domainIncludes = domainComposite.getIncludes(); - for (int i = 0, n =domainIncludes.size(); i < n; i++) { - Composite composite = domainIncludes.get(i); - QName compositeName = composite.getName(); - String contributionURI = contributionURI(domainEntries[i].getKey()); - - // find the node that will run this composite and the default - // bindings that it configures - Component nodeComponent = null; - QName nodeCompositeName = null; - for (Composite cloudComposite : cloudsComposite.getIncludes()) { - for (Component nc : cloudComposite.getComponents()) { - NodeImplementation nodeImplementation = (NodeImplementation)nc.getImplementation(); - if (nodeImplementation.getComposite().getName().equals(compositeName) && - nodeImplementation.getComposite().getURI().equals(contributionURI)) { - nodeImplementation.setComposite(composite); - nodeComponent = nc; - nodeCompositeName = cloudComposite.getName(); - break; - } - } - } - - if (nodeComponent != null) { - try { - Composite nodeComposite = assemblyFactory.createComposite(); - nodeComposite.setName(nodeCompositeName); - nodeComposite.getComponents().add(nodeComponent); - nodeConfigurationBuilder.build(nodeComposite); - } catch (CompositeBuilderException e) { - throw new ServletException(e); - } - } - } - - // Build the domain composite - try { - compositeBuilder.build(domainComposite); - } catch (CompositeBuilderException e) { - response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.toString()); - return; - } - - // Return the requested composite - if (requestedComposite != null) { - - // Rebuild the requested composite from the domain composite - // we have to reverse the flattening that went on when the domain - // composite was built - List<Component> tempComponentList = new ArrayList<Component>(); - tempComponentList.addAll(requestedComposite.getComponents()); - requestedComposite.getComponents().clear(); - for (Component inputComponent : tempComponentList){ - for (Component deployComponent : domainComposite.getComponents()){ - if (deployComponent.getName().equals(inputComponent.getName())){ - requestedComposite.getComponents().add(deployComponent); - } - } - } - - } else if (requestedComponentPath != null) { - - // If a component path was specified, walk the path to get to the requested - // component and the composite that implements it - Composite nestedComposite = domainComposite; - for (String componentName: requestedComponentPath) { - Component component = null; - for (Component c: nestedComposite.getComponents()) { - if (componentName.equals(c.getName())) { - component = c; - break; - } - } - if (component == null) { - response.sendError(HttpServletResponse.SC_NOT_FOUND, key); - return; - } else { - if (component.getImplementation() instanceof Composite) { - nestedComposite = (Composite)component.getImplementation(); - } else { - response.sendError(HttpServletResponse.SC_NOT_FOUND, key); - return; - } - } - } - - // Return the nested composite - requestedComposite = nestedComposite; - - } else { - - - // Return the whole domain composite - requestedComposite = domainComposite; - } - - // Write the composite in the requested format - StAXArtifactProcessor<Composite> processor; - String queryString = request.getQueryString(); - if (queryString != null && queryString.startsWith("format=")) { - String format = queryString.substring(7); - int s = format.indexOf(';'); - QName formatName = new QName(format.substring(0, s), format.substring(s +1)); - processor = (StAXArtifactProcessor<Composite>)staxProcessors.getProcessor(formatName); - if (processor == null) { - response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, new IllegalArgumentException(queryString).toString()); - return; - } - } else { - processor = compositeProcessor; - } - try { - response.setContentType("text/xml"); - XMLStreamWriter writer = outputFactory.createXMLStreamWriter(response.getOutputStream()); - processor.write(requestedComposite, writer); - } catch (Exception e) { - response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.toString()); - return; - } - - - } - - /** - * Returns the cloud composite. - * - * @return the cloud composite - */ - private Composite cloud() throws NotFoundException { - - // Create a new composite for the clouds - Composite cloudComposite = assemblyFactory.createComposite(); - cloudComposite.setName(new QName(Constants.SCA10_TUSCANY_NS, "cloud")); - - // Get the collection of cloud composites - Entry<String, Item>[] cloudEntries = cloudCollection.getAll(); - - // Load the cloud contributions - Workspace workspace = workspaceFactory.createWorkspace(); - Map<String, Contribution> contributionMap = new HashMap<String, Contribution>(); - for (Entry<String, Item> cloudEntry: cloudEntries) { - String key = cloudEntry.getKey(); - String contributionURI = contributionURI(key); - - // Load the contribution - Contribution contribution = contributionMap.get(contributionURI); - if (contribution == null) { - Item contributionItem = contributionCollection.get(contributionURI); - - // Read the contribution - try { - contribution = contribution(workspace, contributionURI, contributionItem.getAlternate()); - } catch (ContributionReadException e) { - continue; - } - workspace.getContributions().add(contribution); - contributionMap.put(contributionURI, contribution); - - } - - // Include the cloud composite in the clouds composite - QName qname = compositeQName(key); - for (Artifact artifact : contribution.getArtifacts()) { - if (artifact.getModel() instanceof Composite) { - Composite composite = (Composite)artifact.getModel(); - if (composite.getName().equals(qname)) { - cloudComposite.getIncludes().add(composite); - } - } - } - } - - return cloudComposite; - } - - /** - * Returns the contribution with the given URI. - * - * @param workspace - * @param contributionURI - * @param contributionLocation - * @return - * @throws NotFoundException - */ - private Contribution contribution(Workspace workspace, String contributionURI, String contributionLocation) throws ContributionReadException { - try { - URI uri = URI.create(contributionURI); - URL location = locationURL(contributionLocation); - Contribution contribution = (Contribution)contributionProcessor.read(null, uri, location); - - // Resolve the contribution dependencies - contributionDependencyBuilder.buildContributionDependencies(contribution, workspace); - - contributionProcessor.resolve(contribution, workspace.getModelResolver()); - return contribution; - - } catch (ContributionReadException e) { - throw e; - } catch (ContributionResolveException e) { - throw new ContributionReadException(e); - } catch (MalformedURLException e) { - throw new ContributionReadException(e); - } - } - -} diff --git a/branches/sca-android/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/CompositeGeneratorServiceImpl.java b/branches/sca-android/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/CompositeGeneratorServiceImpl.java deleted file mode 100644 index 9e024d2d6b..0000000000 --- a/branches/sca-android/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/CompositeGeneratorServiceImpl.java +++ /dev/null @@ -1,255 +0,0 @@ -/* - * 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.domain.manager.impl; - -import static org.apache.tuscany.sca.domain.manager.impl.DomainManagerUtil.compositeQName; -import static org.apache.tuscany.sca.domain.manager.impl.DomainManagerUtil.contributionURI; -import static org.apache.tuscany.sca.domain.manager.impl.DomainManagerUtil.lastModified; -import static org.apache.tuscany.sca.domain.manager.impl.DomainManagerUtil.locationURL; - -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URI; -import java.net.URL; -import java.net.URLDecoder; -import java.util.HashMap; -import java.util.Map; -import java.util.logging.Logger; - -import javax.servlet.Servlet; -import javax.servlet.ServletException; -import javax.servlet.ServletOutputStream; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.xml.namespace.QName; -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.stream.XMLInputFactory; -import javax.xml.stream.XMLOutputFactory; -import javax.xml.stream.XMLStreamException; - -import org.apache.tuscany.sca.assembly.Composite; -import org.apache.tuscany.sca.contribution.Contribution; -import org.apache.tuscany.sca.contribution.ModelFactoryExtensionPoint; -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.DefaultModelResolver; -import org.apache.tuscany.sca.contribution.resolver.ModelResolverExtensionPoint; -import org.apache.tuscany.sca.contribution.service.ContributionReadException; -import org.apache.tuscany.sca.contribution.service.ContributionResolveException; -import org.apache.tuscany.sca.contribution.service.ContributionWriteException; -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.core.UtilityExtensionPoint; -import org.apache.tuscany.sca.data.collection.Item; -import org.apache.tuscany.sca.data.collection.LocalItemCollection; -import org.apache.tuscany.sca.data.collection.NotFoundException; -import org.apache.tuscany.sca.domain.manager.impl.CompositeGeneratorServiceImpl.Cache.ContributionCache; -import org.apache.tuscany.sca.monitor.Monitor; -import org.apache.tuscany.sca.monitor.MonitorFactory; -import org.apache.tuscany.sca.workspace.processor.impl.ContributionContentProcessor; -import org.osoa.sca.annotations.Init; -import org.osoa.sca.annotations.Reference; -import org.osoa.sca.annotations.Scope; -import org.osoa.sca.annotations.Service; - -/** - * Implementation of a service that generates a composite from a composite model. - * - * @version $Rev$ $Date$ - */ -@Scope("COMPOSITE") -@Service(interfaces={Servlet.class}) -public class CompositeGeneratorServiceImpl extends HttpServlet implements Servlet { - private static final long serialVersionUID = -6531448326726908269L; - - private static final Logger logger = Logger.getLogger(CompositeGeneratorServiceImpl.class.getName()); - - @Reference - public LocalItemCollection contributionCollection; - - @Reference - public DomainManagerConfiguration domainManagerConfiguration; - - private ModelFactoryExtensionPoint modelFactories; - private ModelResolverExtensionPoint modelResolvers; - private URLArtifactProcessor<Contribution> contributionProcessor; - private StAXArtifactProcessor<Composite> compositeProcessor; - private XMLOutputFactory outputFactory; - - /** - * Cache contribution models. - */ - static class Cache { - static class ContributionCache { - private Contribution contribution; - private long contributionLastModified; - } - private Map<URL, ContributionCache> contributions = new HashMap<URL, ContributionCache>(); - } - - private Cache cache = new Cache(); - - /** - * Initialize the component. - */ - @Init - public void initialize() throws ParserConfigurationException { - - ExtensionPointRegistry extensionPoints = domainManagerConfiguration.getExtensionPoints(); - - // Create a monitor - UtilityExtensionPoint services = extensionPoints.getExtensionPoint(UtilityExtensionPoint.class); - MonitorFactory monitorFactory = services.getUtility(MonitorFactory.class); - Monitor monitor = monitorFactory.createMonitor(); - - // Get model factories - modelFactories = extensionPoints.getExtensionPoint(ModelFactoryExtensionPoint.class); - XMLInputFactory inputFactory = modelFactories.getFactory(XMLInputFactory.class); - outputFactory = modelFactories.getFactory(XMLOutputFactory.class); - outputFactory.setProperty(XMLOutputFactory.IS_REPAIRING_NAMESPACES, true); - - // Get and initialize artifact processors - StAXArtifactProcessorExtensionPoint staxProcessors = extensionPoints.getExtensionPoint(StAXArtifactProcessorExtensionPoint.class); - compositeProcessor = (StAXArtifactProcessor<Composite>)staxProcessors.getProcessor(Composite.class); - StAXArtifactProcessor<Object> staxProcessor = new ExtensibleStAXArtifactProcessor(staxProcessors, inputFactory, outputFactory, monitor); - - URLArtifactProcessorExtensionPoint urlProcessors = extensionPoints.getExtensionPoint(URLArtifactProcessorExtensionPoint.class); - URLArtifactProcessor<Object> urlProcessor = new ExtensibleURLArtifactProcessor(urlProcessors, monitor); - - // Create contribution processor - modelResolvers = extensionPoints.getExtensionPoint(ModelResolverExtensionPoint.class); - contributionProcessor = new ContributionContentProcessor(modelFactories, modelResolvers, urlProcessor, staxProcessor, monitor); - } - - @Override - protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - - // Expect a key in the form - // composite:contributionURI;namespace;localName - // and return the corresponding source file - - // Get the request path - String path = URLDecoder.decode(request.getRequestURI().substring(request.getServletPath().length()), "UTF-8"); - String key = path.startsWith("/")? path.substring(1) : path; - logger.fine("get " + key); - - // Get the specified contribution info - String contributionURI = contributionURI(key); - Item contributionItem; - try { - contributionItem = contributionCollection.get(contributionURI); - } catch (NotFoundException e) { - response.sendError(HttpServletResponse.SC_NOT_FOUND, key); - return; - } - - // Read the contribution - Contribution contribution; - try { - contribution = contribution(contributionURI, contributionItem.getAlternate()); - } catch (ContributionReadException e) { - response.sendError(HttpServletResponse.SC_NOT_FOUND, key); - return; - } - - // Find the specified deployable composite - QName qname = compositeQName(key); - Composite composite = null; - for (Composite deployable: contribution.getDeployables()) { - if (qname.equals(deployable.getName())) { - if (!deployable.isUnresolved()) { - composite = deployable; - } - break; - } - } - if (composite == null) { - response.sendError(HttpServletResponse.SC_NOT_FOUND, key); - return; - } - - // Write the composite - response.setContentType("text/xml"); - ServletOutputStream os = response.getOutputStream(); - try { - compositeProcessor.write(composite, outputFactory.createXMLStreamWriter(os)); - } catch (ContributionWriteException e) { - response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.toString()); - return; - } catch (XMLStreamException e) { - response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.toString()); - return; - } - os.flush(); - } - - /** - * Returns the contribution with the given URI. - * - * @param contributionURI - * @param contributionLocation - * @return - * @throws NotFoundException - */ - private Contribution contribution(String contributionURI, String contributionLocation) throws ContributionReadException { - try { - URI uri = URI.create(contributionURI); - URL location = locationURL(contributionLocation); - - // Get contribution from cache - ContributionCache contributionCache = cache.contributions.get(location); - long lastModified = lastModified(location); - if (contributionCache != null) { - if (contributionCache.contributionLastModified == lastModified) { - return contributionCache.contribution; - } - - // Reset contribution cache - cache.contributions.remove(location); - } - - Contribution contribution = (Contribution)contributionProcessor.read(null, uri, location); - - contributionProcessor.resolve(contribution, new DefaultModelResolver()); - - // Cache contribution - contributionCache = new ContributionCache(); - contributionCache.contribution = contribution; - contributionCache.contributionLastModified = lastModified; - cache.contributions.put(location, contributionCache); - - return contribution; - - } catch (ContributionReadException e) { - throw e; - } catch (MalformedURLException e) { - throw new ContributionReadException(e); - } catch (IOException e) { - throw new ContributionReadException(e); - } catch (ContributionResolveException e) { - throw new ContributionReadException(e); - } - } - -} diff --git a/branches/sca-android/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/ContributionCollectionImpl.java b/branches/sca-android/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/ContributionCollectionImpl.java deleted file mode 100644 index 0b304a0854..0000000000 --- a/branches/sca-android/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/ContributionCollectionImpl.java +++ /dev/null @@ -1,656 +0,0 @@ -/* - * 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.domain.manager.impl; - -import static javax.xml.stream.XMLStreamConstants.START_ELEMENT; -import static org.apache.tuscany.sca.domain.manager.impl.DomainManagerUtil.DEPLOYMENT_CONTRIBUTION_URI; -import static org.apache.tuscany.sca.domain.manager.impl.DomainManagerUtil.compositeSimpleTitle; -import static org.apache.tuscany.sca.domain.manager.impl.DomainManagerUtil.compositeSourceLink; -import static org.apache.tuscany.sca.domain.manager.impl.DomainManagerUtil.lastModified; -import static org.apache.tuscany.sca.domain.manager.impl.DomainManagerUtil.locationURL; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.net.MalformedURLException; -import java.net.URI; -import java.net.URL; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.logging.Logger; - -import javax.xml.namespace.QName; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.stream.XMLInputFactory; -import javax.xml.stream.XMLOutputFactory; -import javax.xml.stream.XMLStreamException; -import javax.xml.stream.XMLStreamReader; -import javax.xml.stream.XMLStreamWriter; - -import org.apache.tuscany.sca.assembly.Composite; -import org.apache.tuscany.sca.contribution.Contribution; -import org.apache.tuscany.sca.contribution.ContributionFactory; -import org.apache.tuscany.sca.contribution.DefaultExport; -import org.apache.tuscany.sca.contribution.DefaultImport; -import org.apache.tuscany.sca.contribution.Export; -import org.apache.tuscany.sca.contribution.Import; -import org.apache.tuscany.sca.contribution.ModelFactoryExtensionPoint; -import org.apache.tuscany.sca.contribution.processor.ExtensibleStAXArtifactProcessor; -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.service.ContributionReadException; -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.core.UtilityExtensionPoint; -import org.apache.tuscany.sca.data.collection.Entry; -import org.apache.tuscany.sca.data.collection.Item; -import org.apache.tuscany.sca.data.collection.ItemCollection; -import org.apache.tuscany.sca.data.collection.LocalItemCollection; -import org.apache.tuscany.sca.data.collection.NotFoundException; -import org.apache.tuscany.sca.domain.manager.impl.ContributionCollectionImpl.Cache.ContributionCache; -import org.apache.tuscany.sca.monitor.Monitor; -import org.apache.tuscany.sca.monitor.MonitorFactory; -import org.apache.tuscany.sca.monitor.Problem; -import org.apache.tuscany.sca.workspace.Workspace; -import org.apache.tuscany.sca.workspace.WorkspaceFactory; -import org.apache.tuscany.sca.workspace.builder.ContributionDependencyBuilder; -import org.apache.tuscany.sca.workspace.builder.impl.ContributionDependencyBuilderImpl; -import org.apache.xml.serialize.OutputFormat; -import org.apache.xml.serialize.XMLSerializer; -import org.osoa.sca.ServiceRuntimeException; -import org.osoa.sca.annotations.Init; -import org.osoa.sca.annotations.Property; -import org.osoa.sca.annotations.Reference; -import org.osoa.sca.annotations.Scope; -import org.osoa.sca.annotations.Service; -import org.w3c.dom.Document; - -/** - * Implementation of a contribution collection service component. - * - * @version $Rev$ $Date$ - */ -@Scope("COMPOSITE") -@Service(interfaces={ItemCollection.class, LocalItemCollection.class}) -public class ContributionCollectionImpl implements ItemCollection, LocalItemCollection { - - private static final Logger logger = Logger.getLogger(ContributionCollectionImpl.class.getName()); - - @Property - public String workspaceFile; - - @Property - public String deploymentContributionDirectory; - - @Reference - public DomainManagerConfiguration domainManagerConfiguration; - - private Monitor monitor; - private ContributionFactory contributionFactory; - private WorkspaceFactory workspaceFactory; - private StAXArtifactProcessor<Object> staxProcessor; - private URLArtifactProcessor<Contribution> contributionProcessor; - private XMLInputFactory inputFactory; - private XMLOutputFactory outputFactory; - private DocumentBuilder documentBuilder; - - /** - * Cache workspace and contribution models. - */ - static class Cache { - private Workspace workspace; - private long workspaceLastModified; - - static class ContributionCache { - private Contribution contribution; - private long contributionLastModified; - } - private Map<URL, ContributionCache> contributions = new HashMap<URL, ContributionCache>(); - } - - private Cache cache = new Cache(); - - /** - * Initialize the component. - */ - @Init - public void initialize() throws ParserConfigurationException { - - ExtensionPointRegistry extensionPoints = domainManagerConfiguration.getExtensionPoints(); - - // Create a validation monitor - UtilityExtensionPoint utilities = extensionPoints.getExtensionPoint(UtilityExtensionPoint.class); - MonitorFactory monitorFactory = utilities.getUtility(MonitorFactory.class); - monitor = monitorFactory.createMonitor(); - - // Create model factories - ModelFactoryExtensionPoint modelFactories = extensionPoints.getExtensionPoint(ModelFactoryExtensionPoint.class); - outputFactory = modelFactories.getFactory(XMLOutputFactory.class); - outputFactory.setProperty(XMLOutputFactory.IS_REPAIRING_NAMESPACES, true); - contributionFactory = modelFactories.getFactory(ContributionFactory.class); - workspaceFactory = modelFactories.getFactory(WorkspaceFactory.class); - - // Create artifact processors - inputFactory = modelFactories.getFactory(XMLInputFactory.class); - StAXArtifactProcessorExtensionPoint staxProcessors = extensionPoints.getExtensionPoint(StAXArtifactProcessorExtensionPoint.class); - staxProcessor = new ExtensibleStAXArtifactProcessor(staxProcessors, inputFactory, outputFactory, monitor); - - URLArtifactProcessorExtensionPoint urlProcessors = extensionPoints.getExtensionPoint(URLArtifactProcessorExtensionPoint.class); - - // Create contribution info processor - contributionProcessor = urlProcessors.getProcessor(".contribution/info"); - - // Create a document builder (used to pretty print XML) - documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); - } - - public Entry<String, Item>[] getAll() { - logger.fine("getAll"); - - // Return all the contributions - List<Entry<String, Item>> entries = new ArrayList<Entry<String, Item>>(); - Workspace workspace = readContributions(readWorkspace()); - - for (Contribution contribution: workspace.getContributions()) { - if (contribution.getURI().equals(DEPLOYMENT_CONTRIBUTION_URI)) { - continue; - } - entries.add(entry(workspace, contribution)); - } - return entries.toArray(new Entry[entries.size()]); - } - - public Item get(String key) throws NotFoundException { - logger.fine("get " + key); - - // Returns the contribution with the given URI key - Workspace workspace = readContributions(readWorkspace()); - for (Contribution contribution: workspace.getContributions()) { - if (key.equals(contribution.getURI())) { - return item(workspace, contribution); - } - } - throw new NotFoundException(key); - } - - public String post(String key, Item item) { - logger.fine("post " + key); - - // Adds a new contribution to the workspace - Workspace workspace = readWorkspace(); - Contribution contribution = contributionFactory.createContribution(); - contribution.setURI(key); - try { - contribution.setLocation(locationURL(item.getLink()).toString()); - } catch (MalformedURLException e) { - throw new ServiceRuntimeException(e); - } - workspace.getContributions().add(contribution); - - // Write the workspace - writeWorkspace(workspace); - - return key; - } - - public void put(String key, Item item) throws NotFoundException { - - // Update a contribution already in the workspace - Workspace workspace = readWorkspace(); - Contribution newContribution = contributionFactory.createContribution(); - newContribution.setURI(key); - try { - newContribution.setLocation(locationURL(item.getLink()).toString()); - } catch (MalformedURLException e) { - throw new ServiceRuntimeException(e); - } - List<Contribution> contributions = workspace.getContributions(); - for (int i = 0, n = contributions.size(); i < n; i++) { - if (contributions.get(i).getURI().equals(key)) { - contributions.set(i, newContribution); - - // Write the workspace - writeWorkspace(workspace); - return; - } - } - throw new NotFoundException(key); - } - - public void delete(String key) throws NotFoundException { - logger.fine("delete " + key); - - // Delete a contribution from the workspace - Workspace workspace = readWorkspace(); - List<Contribution> contributions = workspace.getContributions(); - for (int i = 0, n = contributions.size(); i < n; i++) { - if (contributions.get(i).getURI().equals(key)) { - contributions.remove(i); - - // Write the workspace - writeWorkspace(workspace); - return; - } - } - throw new NotFoundException(key); - } - - public Entry<String, Item>[] query(String queryString) { - logger.fine("query " + queryString); - - if (queryString.startsWith("dependencies=") || queryString.startsWith("alldependencies=")) { - - // Return the collection of dependencies of the specified contribution - List<Entry<String, Item>> entries = new ArrayList<Entry<String,Item>>(); - - // Extract the contribution URI - int eq = queryString.indexOf('='); - String key = queryString.substring(eq+1); - - // Read the metadata for all the contributions - Workspace workspace = readContributions(readWorkspace()); - - // Look for the specified contribution - for (Contribution contribution: workspace.getContributions()) { - if (key.equals(contribution.getURI())) { - - // Compute the contribution dependencies - ContributionDependencyBuilder analyzer = new ContributionDependencyBuilderImpl(monitor); - List<Contribution> dependencies = analyzer.buildContributionDependencies(contribution, workspace); - - // Returns entries for the dependencies - // optionally skip the specified contribution - boolean allDependencies = queryString.startsWith("alldependencies="); - for (Contribution dependency: dependencies) { - if (!allDependencies && dependency == contribution) { - // Skip the specified contribution - continue; - } - entries.add(entry(workspace, dependency)); - } - break; - } - } - - return entries.toArray(new Entry[entries.size()]); - - } if (queryString.startsWith("suggestions=true")) { - - // Returns a list of contribution suggestions, scan the parent of the workspace - // directory for potential contribution directories - - // For now, recognize project directories that contain .project files - // Directories containing .classpath files are likely to be Java projects, we parse - // the .classpath file to determine the Java project output location - Workspace suggestionWorkspace = workspaceFactory.createWorkspace(); - List<Entry> entries = new ArrayList<Entry>(); - String rootDirectory = domainManagerConfiguration.getRootDirectory(); - File rootLocation = new File(new File(rootDirectory).toURI().normalize()); - for (File project: rootLocation.getParentFile().listFiles()) { - File dotProject = new File(project, ".project"); - if (!dotProject.exists()) { - continue; - } - - // We have a potential contribution - String uri = project.getName(); - File location = project; - - // If this is a Java project, parse its .classpath file to determine it's output location - File dotClasspath = new File(project, ".classpath"); - if (dotClasspath.exists()) { - try { - XMLStreamReader reader = inputFactory.createXMLStreamReader(new FileInputStream(dotClasspath)); - reader.nextTag(); - while (reader.hasNext()) { - int event = reader.getEventType(); - if (event == START_ELEMENT) { - if ("classpathentry".equals(reader.getName().getLocalPart())) { - if ("output".equals(reader.getAttributeValue("", "kind"))) { - location = new File(project, reader.getAttributeValue("", "path")); - break; - } - } - } - if (reader.hasNext()) { - reader.next(); - } - } - } catch (FileNotFoundException e) { - } catch (XMLStreamException e) { - } - - } - - // Create a contribution entry, skip the domain root directory and childrens of the - // domain root directory - String rootLocationPath = rootLocation.getPath(); - if (rootLocationPath.indexOf('\\') != -1 || rootLocationPath.indexOf(' ') != -1) { - rootLocationPath = new File(rootLocationPath.replace('\\', '/')).toURI().toString(); - } - String locationPath = location.getPath(); - if (locationPath.indexOf('\\') != -1 || locationPath.indexOf(' ') != -1) { - locationPath = new File(locationPath.replace('\\', '/')).toURI().toString(); - } - if (!locationPath.startsWith(rootLocationPath + "/") && !locationPath.equals(rootLocationPath)) { - Contribution contribution = contributionFactory.createContribution(); - contribution.setURI(uri); - contribution.setLocation(locationPath); - entries.add(entry(suggestionWorkspace, contribution)); - } - } - - return entries.toArray(new Entry[entries.size()]); - - } else { - throw new UnsupportedOperationException(); - } - } - - /** - * Returns an entry representing a contribution - * @param contribution - * @return - */ - private static Entry<String, Item> entry(Workspace workspace, Contribution contribution) { - Entry<String, Item> entry = new Entry<String, Item>(); - entry.setKey(contribution.getURI()); - entry.setData(item(workspace, contribution)); - return entry; - } - - /** - * Returns an item representing a contribution. - * - * @param contribution - * @return - */ - private static Item item(Workspace workspace, Contribution contribution) { - String contributionURI = contribution.getURI(); - Item item = new Item(); - item.setTitle(title(contributionURI)); - item.setLink(link(contributionURI)); - item.setAlternate(contribution.getLocation()); - - // List the contribution dependencies in the item contents - final List<String> problems = new ArrayList<String>(); - Monitor monitor = new Monitor() { - public void problem(Problem problem) { - problems.add(problem.getMessageId() + " " + problem.getProblemObject().toString()); - } - - public List<Problem> getProblems() { - return null; - } - }; - - StringBuffer sb = new StringBuffer(); - ContributionDependencyBuilderImpl analyzer = new ContributionDependencyBuilderImpl(monitor); - List<Contribution> dependencies = analyzer.buildContributionDependencies(contribution, workspace); - if (dependencies.size() > 1) { - sb.append("Dependencies: <span id=\"dependencies\">"); - for (int i = 0, n = dependencies.size(); i < n ; i++) { - if (i > 0) { - sb.append(" "); - } - Contribution dependency = dependencies.get(i); - if (dependency != contribution) { - String dependencyURI = dependency.getURI(); - sb.append("<a href=\""+ link(dependencyURI) +"\">" + title(dependencyURI) + "</a>"); - } - } - sb.append("</span><br>"); - } - - // List the deployables - List<Composite> deployables = contribution.getDeployables(); - if (!deployables.isEmpty()) { - sb.append("Deployables: <span id=\"deployables\">"); - for (int i = 0, n = deployables.size(); i < n ; i++) { - if (i > 0) { - sb.append(" "); - } - Composite deployable = deployables.get(i); - QName qname = deployable.getName(); - sb.append("<a href=\""+ compositeSourceLink(contributionURI, qname) +"\">" + compositeSimpleTitle(contributionURI, qname) + "</a>"); - } - sb.append("</span><br>"); - } - - // List the dependency problems - if (contribution.isUnresolved()) { - problems.add("Contribution not found"); - } - if (problems.size() > 0) { - sb.append("<span id=\"problems\" style=\"color: red\">"); - for (int i = 0, n = problems.size(); i < n ; i++) { - sb.append("Problem: "+ problems.get(i) + "<br>"); - } - sb.append("</span>"); - } - - // Store in the item contents - item.setContents(sb.toString()); - - return item; - } - - /** - * Returns a link to a contribution. - * @param contributionURI - * @return - */ - private static String link(String contributionURI) { - return "/contribution/" + contributionURI; - } - - /** - * Returns a title for the given contribution - * - * @param contributionURI - * @return - */ - private static String title(String contributionURI) { - return contributionURI; - } - - - /** - * Read the workspace. - * - * @return - */ - private Workspace readWorkspace() { - String rootDirectory = domainManagerConfiguration.getRootDirectory(); - - Workspace workspace; - File file = new File(rootDirectory + "/" + workspaceFile); - if (file.exists()) { - - // Get workspace from cache - if (cache.workspace != null && file.lastModified() == cache.workspaceLastModified) { - workspace = cache.workspace; - - } else { - - try { - FileInputStream is = new FileInputStream(file); - XMLStreamReader reader = inputFactory.createXMLStreamReader(is); - reader.nextTag(); - workspace = (Workspace)staxProcessor.read(reader); - } catch (Exception e) { - throw new ServiceRuntimeException(e); - } - - // Cache workspace - cache.workspaceLastModified = file.lastModified(); - cache.workspace = workspace; - } - - } else { - - // Create new workspace - workspace = workspaceFactory.createWorkspace(); - - // Cache workspace - cache.workspaceLastModified = 0; - cache.workspace = workspace; - } - - // Make sure that the workspace contains the cloud contribution - // The cloud contribution contains the composites describing the - // SCA nodes declared in the cloud - Contribution cloudContribution = null; - for (Contribution contribution: workspace.getContributions()) { - if (contribution.getURI().equals(DEPLOYMENT_CONTRIBUTION_URI)) { - cloudContribution = contribution; - } - } - if (cloudContribution == null) { - Contribution contribution = contributionFactory.createContribution(); - contribution.setURI(DEPLOYMENT_CONTRIBUTION_URI); - File cloudDirectory = new File(rootDirectory + "/" + deploymentContributionDirectory); - contribution.setLocation(cloudDirectory.toURI().toString()); - workspace.getContributions().add(contribution); - } - - return workspace; - } - - /** - * Write the workspace back to disk - * - * @param workspace - */ - private void writeWorkspace(Workspace workspace) { - try { - String rootDirectory = domainManagerConfiguration.getRootDirectory(); - - // First write to a byte stream - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - XMLStreamWriter writer = outputFactory.createXMLStreamWriter(bos); - staxProcessor.write(workspace, writer); - - // Parse again to pretty format the document - Document document = documentBuilder.parse(new ByteArrayInputStream(bos.toByteArray())); - OutputFormat format = new OutputFormat(); - format.setIndenting(true); - format.setIndent(2); - - // Write to workspace.xml - File file = new File(rootDirectory + "/" + workspaceFile); - FileOutputStream os = new FileOutputStream(file); - XMLSerializer serializer = new XMLSerializer(os, format); - serializer.serialize(document); - os.close(); - - // Cache workspace - cache.workspace = workspace; - cache.workspaceLastModified = file.lastModified(); - - } catch (Exception e) { - throw new ServiceRuntimeException(e); - } - } - - /** - * Returns a workspace populated with the contribution info read from - * the contributions. - * - * @param workspace - * @return - */ - private Workspace readContributions(Workspace workspace) { - - Workspace contributions = workspaceFactory.createWorkspace(); - try { - for (Contribution c: workspace.getContributions()) { - URI uri = URI.create(c.getURI()); - URL location = locationURL(c.getLocation()); - - // Get contribution from cache - ContributionCache contributionCache = cache.contributions.get(location); - long lastModified = lastModified(location); - if (contributionCache != null) { - if (contributionCache.contributionLastModified == lastModified) { - Contribution contribution = contributionCache.contribution; - contribution.setUnresolved(false); - contributions.getContributions().add(contribution); - continue; - } - - // Reset contribution cache - cache.contributions.remove(location); - } - - try { - Contribution contribution = (Contribution)contributionProcessor.read(null, uri, location); - contribution.setUnresolved(false); - contributions.getContributions().add(contribution); - - // Cache contribution - contributionCache = new ContributionCache(); - contributionCache.contribution = contribution; - contributionCache.contributionLastModified = lastModified; - cache.contributions.put(location, contributionCache); - - - // Make sure that the cloud contribution does not contain - // default imports/exports as we want to isolate it from application - // provided contributions - if (contribution.getURI().equals(DEPLOYMENT_CONTRIBUTION_URI)) { - for (Iterator<Import> i = contribution.getImports().iterator(); i.hasNext(); ) { - Import import_ = i.next(); - if (import_ instanceof DefaultImport) { - i.remove(); - } - } - for (Iterator<Export> i = contribution.getExports().iterator(); i.hasNext(); ) { - Export export = i.next(); - if (export instanceof DefaultExport) { - i.remove(); - } - } - } - - } catch (ContributionReadException e) { - Contribution contribution = contributionFactory.createContribution(); - contribution.setURI(c.getURI()); - contribution.setLocation(c.getLocation()); - contribution.setUnresolved(true); - contributions.getContributions().add(contribution); - } - } - } catch (Exception e) { - throw new ServiceRuntimeException(e); - } - return contributions; - } - -} diff --git a/branches/sca-android/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/ContributionServiceImpl.java b/branches/sca-android/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/ContributionServiceImpl.java deleted file mode 100644 index a4d7680cb0..0000000000 --- a/branches/sca-android/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/ContributionServiceImpl.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * 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.domain.manager.impl; - -import java.io.IOException; -import java.net.URLDecoder; -import java.util.logging.Logger; - -import javax.servlet.Servlet; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.tuscany.sca.data.collection.Item; -import org.apache.tuscany.sca.data.collection.LocalItemCollection; -import org.apache.tuscany.sca.data.collection.NotFoundException; -import org.osoa.sca.annotations.Reference; -import org.osoa.sca.annotations.Scope; -import org.osoa.sca.annotations.Service; - -/** - * Implementation of a contribution collection service component. - * - * @version $Rev$ $Date$ - */ -@Scope("COMPOSITE") -@Service(interfaces={Servlet.class}) -public class ContributionServiceImpl extends HttpServlet implements Servlet { - private static final long serialVersionUID = -4759297945439322773L; - - private static final Logger logger = Logger.getLogger(ContributionServiceImpl.class.getName()); - - @Reference - public LocalItemCollection contributionCollection; - - @Override - protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - - // Get the request path - String path = URLDecoder.decode(request.getRequestURI().substring(request.getServletPath().length()), "UTF-8"); - - // The key is the contribution URI - String key = path.startsWith("/")? path.substring(1) : path; - logger.fine("get " + key); - - // Get the item describing the composite - Item item; - try { - item = contributionCollection.get(key); - } catch (NotFoundException e) { - response.sendError(HttpServletResponse.SC_NOT_FOUND, key); - return; - } - - // Redirect to the actual contribution location - response.sendRedirect("/files/" + item.getAlternate()); - } - -} diff --git a/branches/sca-android/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/DeployableCompositeCollectionImpl.java b/branches/sca-android/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/DeployableCompositeCollectionImpl.java deleted file mode 100644 index e66a8b6684..0000000000 --- a/branches/sca-android/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/DeployableCompositeCollectionImpl.java +++ /dev/null @@ -1,403 +0,0 @@ -/* - * 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.domain.manager.impl; - -import static org.apache.tuscany.sca.domain.manager.impl.DomainManagerUtil.compositeAlternateLink; -import static org.apache.tuscany.sca.domain.manager.impl.DomainManagerUtil.compositeKey; -import static org.apache.tuscany.sca.domain.manager.impl.DomainManagerUtil.compositeQName; -import static org.apache.tuscany.sca.domain.manager.impl.DomainManagerUtil.compositeSourceLink; -import static org.apache.tuscany.sca.domain.manager.impl.DomainManagerUtil.compositeTitle; -import static org.apache.tuscany.sca.domain.manager.impl.DomainManagerUtil.contributionURI; -import static org.apache.tuscany.sca.domain.manager.impl.DomainManagerUtil.lastModified; -import static org.apache.tuscany.sca.domain.manager.impl.DomainManagerUtil.locationURL; - -import java.net.MalformedURLException; -import java.net.URI; -import java.net.URL; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.logging.Logger; - -import javax.xml.namespace.QName; -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.stream.XMLInputFactory; -import javax.xml.stream.XMLOutputFactory; - -import org.apache.tuscany.sca.assembly.Binding; -import org.apache.tuscany.sca.assembly.Component; -import org.apache.tuscany.sca.assembly.ComponentService; -import org.apache.tuscany.sca.assembly.Composite; -import org.apache.tuscany.sca.contribution.Contribution; -import org.apache.tuscany.sca.contribution.ModelFactoryExtensionPoint; -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.DefaultModelResolver; -import org.apache.tuscany.sca.contribution.resolver.ModelResolverExtensionPoint; -import org.apache.tuscany.sca.contribution.service.ContributionReadException; -import org.apache.tuscany.sca.contribution.service.ContributionResolveException; -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.core.UtilityExtensionPoint; -import org.apache.tuscany.sca.data.collection.Entry; -import org.apache.tuscany.sca.data.collection.Item; -import org.apache.tuscany.sca.data.collection.ItemCollection; -import org.apache.tuscany.sca.data.collection.LocalItemCollection; -import org.apache.tuscany.sca.data.collection.NotFoundException; -import org.apache.tuscany.sca.domain.manager.impl.DeployableCompositeCollectionImpl.Cache.ContributionCache; -import org.apache.tuscany.sca.implementation.node.NodeImplementation; -import org.apache.tuscany.sca.monitor.Monitor; -import org.apache.tuscany.sca.monitor.MonitorFactory; -import org.apache.tuscany.sca.workspace.builder.ContributionDependencyBuilder; -import org.apache.tuscany.sca.workspace.builder.impl.ContributionDependencyBuilderImpl; -import org.apache.tuscany.sca.workspace.processor.impl.ContributionContentProcessor; -import org.osoa.sca.annotations.Init; -import org.osoa.sca.annotations.Reference; -import org.osoa.sca.annotations.Scope; -import org.osoa.sca.annotations.Service; - -/** - * Implementation of a deployable composite collection service. - * - * @version $Rev$ $Date$ - */ -@Scope("COMPOSITE") -@Service(interfaces={ItemCollection.class, LocalItemCollection.class}) -public class DeployableCompositeCollectionImpl implements ItemCollection, LocalItemCollection { - - private static final Logger logger = Logger.getLogger(DeployableCompositeCollectionImpl.class.getName()); - - @Reference - public LocalItemCollection contributionCollection; - - @Reference - public DomainManagerConfiguration domainManagerConfiguration; - - private ModelFactoryExtensionPoint modelFactories; - private ModelResolverExtensionPoint modelResolvers; - private URLArtifactProcessor<Contribution> contributionProcessor; - private XMLOutputFactory outputFactory; - private ContributionDependencyBuilder contributionDependencyBuilder; - private Monitor monitor; - - /** - * Cache contribution models. - */ - static class Cache { - static class ContributionCache { - private Contribution contribution; - private long contributionLastModified; - } - private Map<URL, ContributionCache> contributions = new HashMap<URL, ContributionCache>(); - } - - private Cache cache = new Cache(); - - /** - * Initialize the component. - */ - @Init - public void initialize() throws ParserConfigurationException { - - ExtensionPointRegistry extensionPoints = domainManagerConfiguration.getExtensionPoints(); - - // Create a monitor - UtilityExtensionPoint utilities = extensionPoints.getExtensionPoint(UtilityExtensionPoint.class); - MonitorFactory monitorFactory = utilities.getUtility(MonitorFactory.class); - monitor = monitorFactory.createMonitor(); - - // Get model factories - modelFactories = extensionPoints.getExtensionPoint(ModelFactoryExtensionPoint.class); - XMLInputFactory inputFactory = modelFactories.getFactory(XMLInputFactory.class); - outputFactory = modelFactories.getFactory(XMLOutputFactory.class); - outputFactory.setProperty(XMLOutputFactory.IS_REPAIRING_NAMESPACES, true); - - // Get and initialize artifact processors - StAXArtifactProcessorExtensionPoint staxProcessors = extensionPoints.getExtensionPoint(StAXArtifactProcessorExtensionPoint.class); - StAXArtifactProcessor<Object> staxProcessor = new ExtensibleStAXArtifactProcessor(staxProcessors, inputFactory, outputFactory, monitor); - - URLArtifactProcessorExtensionPoint urlProcessors = extensionPoints.getExtensionPoint(URLArtifactProcessorExtensionPoint.class); - URLArtifactProcessor<Object> urlProcessor = new ExtensibleURLArtifactProcessor(urlProcessors, monitor); - - // Create contribution processor - modelResolvers = extensionPoints.getExtensionPoint(ModelResolverExtensionPoint.class); - contributionProcessor = new ContributionContentProcessor(modelFactories, modelResolvers, urlProcessor, staxProcessor, monitor); - - // Create contribution and composite builders - contributionDependencyBuilder = new ContributionDependencyBuilderImpl(monitor); - } - - public Entry<String, Item>[] getAll() { - logger.fine("getAll"); - - // Return all the deployable composites in the contributions - List<Entry<String, Item>> entries = new ArrayList<Entry<String, Item>>(); - - // Get the list of contributions in the workspace - Entry<String, Item>[] contributionEntries = contributionCollection.getAll(); - - // Read contribution metadata - for (Entry<String, Item> contributionEntry: contributionEntries) { - Item contributionItem = contributionEntry.getData(); - Contribution contribution; - try { - contribution = contribution(contributionEntry.getKey(), contributionItem.getAlternate()); - } catch (ContributionReadException e) { - continue; - } - - // Create entries for the deployable composites - for (Composite deployable: contribution.getDeployables()) { - entries.add(entry(contribution, deployable)); - } - - } - return entries.toArray(new Entry[entries.size()]); - } - - public Item get(String key) throws NotFoundException { - logger.fine("get " + key); - - // Get the specified contribution info - String contributionURI = contributionURI(key); - Item contributionItem = contributionCollection.get(contributionURI); - - // Read the contribution - Contribution contribution; - try { - contribution = contribution(contributionURI, contributionItem.getAlternate()); - } catch (ContributionReadException e) { - throw new NotFoundException(key); - } - - // Find the specified deployable composite - QName qname = compositeQName(key); - for (Composite deployable: contribution.getDeployables()) { - if (qname.equals(deployable.getName())) { - if (deployable.isUnresolved()) { - throw new NotFoundException(key); - } - - // Return an item describing the deployable composite - return item(contribution, deployable); - } - } - - throw new NotFoundException(key); - } - - public String post(String key, Item item) { - throw new UnsupportedOperationException(); - } - - public void put(String key, Item item) throws NotFoundException { - throw new UnsupportedOperationException(); - } - - public void delete(String key) throws NotFoundException { - throw new UnsupportedOperationException(); - } - - public Entry<String, Item>[] query(String queryString) { - logger.fine("query " + queryString); - - if (queryString.startsWith("contribution=")) { - - // Return all the deployable composites in the specified - // contribution - List<Entry<String, Item>> entries = new ArrayList<Entry<String, Item>>(); - - // Get the specified contribution info - String contributionURI = queryString.substring(queryString.indexOf('=') + 1); - Item contributionItem; - try { - contributionItem = contributionCollection.get(contributionURI); - } catch (NotFoundException e) { - return entries.toArray(new Entry[entries.size()]); - } - - // Read the contribution - Contribution contribution; - try { - contribution = contribution(contributionURI, contributionItem.getAlternate()); - } catch (ContributionReadException e) { - return entries.toArray(new Entry[entries.size()]); - } - - // Create entries for the deployable composites - for (Composite deployable: contribution.getDeployables()) { - entries.add(entry(contribution, deployable)); - } - - return entries.toArray(new Entry[entries.size()]); - - } else { - throw new UnsupportedOperationException(); - } - } - - /** - * Returns the contribution with the given URI. - * - * @param contributionURI - * @param contributionLocation - * @return - * @throws NotFoundException - */ - private Contribution contribution(String contributionURI, String contributionLocation) throws ContributionReadException { - try { - URI uri = URI.create(contributionURI); - URL location = locationURL(contributionLocation); - - // Get contribution from cache - ContributionCache contributionCache = cache.contributions.get(location); - long lastModified = lastModified(location); - if (contributionCache != null) { - if (contributionCache.contributionLastModified == lastModified) { - return contributionCache.contribution; - } - - // Reset contribution cache - cache.contributions.remove(location); - } - - Contribution contribution = (Contribution)contributionProcessor.read(null, uri, location); - - contributionProcessor.resolve(contribution, new DefaultModelResolver()); - - // Cache contribution - contributionCache = new ContributionCache(); - contributionCache.contribution = contribution; - contributionCache.contributionLastModified = lastModified; - cache.contributions.put(location, contributionCache); - - return contribution; - - } catch (ContributionReadException e) { - throw e; - } catch (MalformedURLException e) { - throw new ContributionReadException(e); - } catch (ContributionResolveException e) { - throw new ContributionReadException(e); - } catch (Throwable e) { - throw new ContributionReadException(e); - } - } - - /** - * Returns the entry contents describing a composite. - * - * @param composite - * @return - */ - private static String content(Composite composite) { - StringBuffer sb = new StringBuffer(); - List<Component> components = composite.getComponents(); - for (int i = 0, n = components.size(); i < n; i++) { - Component component = components.get(i); - if (component.getImplementation() instanceof NodeImplementation) { - List<ComponentService> services = component.getServices(); - if (!services.isEmpty()) { - List<Binding> bindings = services.get(0).getBindings(); - if (!bindings.isEmpty()) { - - // List node URIs - sb.append("Node URI: <span id=\"nodeURI\">"); - sb.append(component.getServices().get(0).getBindings().get(0).getURI()); - break; - } - } - } else { - - // List component names - if (sb.length() == 0) { - sb.append("Components: <span id=\"components\">"); - } else { - sb.append(" "); - } - sb.append(component.getName()); - } - } - if (sb.length() != 0) { - sb.append("</span>"); - } - return sb.toString(); - } - - /** - * Returns the link to the resource related to a composite. - * - * @param composite - * @return - */ - private static String relatedLink(Composite composite) { - for (Component component: composite.getComponents()) { - if (component.getImplementation() instanceof NodeImplementation) { - NodeImplementation nodeImplementation = (NodeImplementation)component.getImplementation(); - Composite deployable = nodeImplementation.getComposite(); - String contributionURI = deployable.getURI(); - QName qname = deployable.getName(); - String key = compositeKey(contributionURI, qname); - return "/composite-source/" + key; - } - } - return null; - } - - /** - * Returns an entry describing the given deployable. - * - * @param contribution - * @param deployable - * @return - */ - private static Entry<String, Item> entry(Contribution contribution, Composite deployable) { - Entry<String, Item> entry = new Entry<String, Item>(); - entry.setKey(DomainManagerUtil.compositeKey(contribution.getURI(), deployable.getName())); - entry.setData(item(contribution, deployable)); - return entry; - } - - /** - * Returns an item describing the given deployable. - * - * @param contribution - * @param deployable - * @return - */ - private static Item item(Contribution contribution, Composite deployable) { - String contributionURI = contribution.getURI(); - String contributionLocation = contribution.getLocation(); - QName qname = deployable.getName(); - String deployableURI = deployable.getURI(); - Item item = new Item(); - item.setTitle(compositeTitle(contributionURI, qname)); - item.setContents(content(deployable)); - item.setLink(compositeSourceLink(contributionURI, qname)); - item.setAlternate(compositeAlternateLink(contributionLocation, deployableURI)); - item.setRelated(relatedLink(deployable)); - return item; - } - -} diff --git a/branches/sca-android/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/DeployableCompositeServiceImpl.java b/branches/sca-android/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/DeployableCompositeServiceImpl.java deleted file mode 100644 index 14ab9579f4..0000000000 --- a/branches/sca-android/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/DeployableCompositeServiceImpl.java +++ /dev/null @@ -1,128 +0,0 @@ -/* - * 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.domain.manager.impl; - -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.net.URL; -import java.net.URLConnection; -import java.net.URLDecoder; -import java.util.logging.Logger; - -import javax.servlet.Servlet; -import javax.servlet.ServletException; -import javax.servlet.ServletOutputStream; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.xml.parsers.ParserConfigurationException; - -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.data.collection.Item; -import org.apache.tuscany.sca.data.collection.LocalItemCollection; -import org.apache.tuscany.sca.data.collection.NotFoundException; -import org.osoa.sca.annotations.Init; -import org.osoa.sca.annotations.Reference; -import org.osoa.sca.annotations.Scope; -import org.osoa.sca.annotations.Service; - -/** - * Implementation of a service that returns the source of a deployable composite. - * - * @version $Rev$ $Date$ - */ -@Scope("COMPOSITE") -@Service(Servlet.class) -public class DeployableCompositeServiceImpl extends HttpServlet implements Servlet { - private static final long serialVersionUID = -3477992129462720902L; - - private static final Logger logger = Logger.getLogger(DeployableCompositeServiceImpl.class.getName()); - - @Reference - public DomainManagerConfiguration domainManagerConfiguration; - - @Reference - public LocalItemCollection deployableCollection; - - /** - * Initialize the component. - */ - @Init - public void initialize() throws ParserConfigurationException { - - ExtensionPointRegistry extensionPoints = domainManagerConfiguration.getExtensionPoints(); - } - - @Override - protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - - // Expect a key in the form - // composite:contributionURI;namespace;localName - // and return the corresponding source file - - // Get the request path - String path = URLDecoder.decode(request.getRequestURI().substring(request.getServletPath().length()), "UTF-8"); - String key = path.startsWith("/")? path.substring(1) : path; - logger.fine("get " + key); - - // Get the item describing the composite - Item item; - try { - item = deployableCollection.get(key); - } catch (NotFoundException e) { - response.sendError(HttpServletResponse.SC_NOT_FOUND, key); - return; - } - - // Redirect if there is no composite file - String uri = item.getAlternate(); - if (uri == null) { - response.sendRedirect("/composite-generated/" + key); - return; - } - - // Read the composite file and write to response - InputStream is; - try { - URLConnection connection = new URL(uri).openConnection(); - connection.setUseCaches(false); - connection.connect(); - is = connection.getInputStream(); - } catch (FileNotFoundException ex) { - response.sendError(HttpServletResponse.SC_NOT_FOUND, key); - return; - } - - response.setContentType("text/xml"); - ServletOutputStream os = response.getOutputStream(); - byte[] buffer = new byte[4096]; - for (;;) { - int n = is.read(buffer); - if (n < 0) { - break; - } - os.write(buffer, 0, n); - } - is.close(); - os.flush(); - } - -} diff --git a/branches/sca-android/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/DeployedCompositeCollectionImpl.java b/branches/sca-android/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/DeployedCompositeCollectionImpl.java deleted file mode 100644 index e95a0cc585..0000000000 --- a/branches/sca-android/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/DeployedCompositeCollectionImpl.java +++ /dev/null @@ -1,378 +0,0 @@ -/* - * 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.domain.manager.impl; - -import static org.apache.tuscany.sca.domain.manager.impl.DomainManagerUtil.DEPLOYMENT_CONTRIBUTION_URI; -import static org.apache.tuscany.sca.domain.manager.impl.DomainManagerUtil.compositeKey; -import static org.apache.tuscany.sca.domain.manager.impl.DomainManagerUtil.compositeQName; -import static org.apache.tuscany.sca.domain.manager.impl.DomainManagerUtil.compositeSourceLink; -import static org.apache.tuscany.sca.domain.manager.impl.DomainManagerUtil.compositeTitle; -import static org.apache.tuscany.sca.domain.manager.impl.DomainManagerUtil.contributionURI; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStreamWriter; -import java.io.Writer; -import java.util.ArrayList; -import java.util.List; -import java.util.logging.Logger; - -import javax.xml.namespace.QName; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.stream.XMLInputFactory; -import javax.xml.stream.XMLOutputFactory; -import javax.xml.stream.XMLStreamReader; -import javax.xml.stream.XMLStreamWriter; - -import org.apache.tuscany.sca.assembly.AssemblyFactory; -import org.apache.tuscany.sca.assembly.Composite; -import org.apache.tuscany.sca.assembly.xml.Constants; -import org.apache.tuscany.sca.contribution.ModelFactoryExtensionPoint; -import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor; -import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessorExtensionPoint; -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.data.collection.Entry; -import org.apache.tuscany.sca.data.collection.Item; -import org.apache.tuscany.sca.data.collection.ItemCollection; -import org.apache.tuscany.sca.data.collection.LocalItemCollection; -import org.apache.tuscany.sca.data.collection.NotFoundException; -import org.apache.xml.serialize.OutputFormat; -import org.apache.xml.serialize.XMLSerializer; -import org.osoa.sca.ServiceRuntimeException; -import org.osoa.sca.annotations.Init; -import org.osoa.sca.annotations.Property; -import org.osoa.sca.annotations.Reference; -import org.osoa.sca.annotations.Scope; -import org.osoa.sca.annotations.Service; -import org.w3c.dom.Document; - -/** - * Implementation of a composite collection service. - * - * @version $Rev$ $Date$ - */ -@Scope("COMPOSITE") -@Service(interfaces={ItemCollection.class,LocalItemCollection.class}) -public class DeployedCompositeCollectionImpl implements ItemCollection, LocalItemCollection { - private static final Logger logger = Logger.getLogger(DeployedCompositeCollectionImpl.class.getName()); - - @Property - public String compositeFile; - - @Property - public String deploymentContributionDirectory; - - @Reference - public LocalItemCollection deployableCollection; - - @Reference(required=false) - public LocalItemCollection processCollection; - - @Reference - public DomainManagerConfiguration domainManagerConfiguration; - - private ModelFactoryExtensionPoint modelFactories; - private AssemblyFactory assemblyFactory; - private StAXArtifactProcessor<Composite> compositeProcessor; - private XMLOutputFactory outputFactory; - private DocumentBuilder documentBuilder; - - /** - * Cache domain composite model. - */ - static class Cache { - private Composite compositeCollection; - private long compositeCollectionLastModified; - } - - private Cache cache = new Cache(); - - /** - * Initialize the component. - */ - @Init - public void initialize() throws ParserConfigurationException { - - // Create factories - ExtensionPointRegistry extensionPoints = domainManagerConfiguration.getExtensionPoints(); - modelFactories = extensionPoints.getExtensionPoint(ModelFactoryExtensionPoint.class); - assemblyFactory = modelFactories.getFactory(AssemblyFactory.class); - outputFactory = modelFactories.getFactory(XMLOutputFactory.class); - outputFactory.setProperty(XMLOutputFactory.IS_REPAIRING_NAMESPACES, true); - - // Create composite processor - StAXArtifactProcessorExtensionPoint staxProcessors = extensionPoints.getExtensionPoint(StAXArtifactProcessorExtensionPoint.class); - compositeProcessor = staxProcessors.getProcessor(Composite.class); - - // Create a document builder (used to pretty print XML) - documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); - } - - public Entry<String, Item>[] getAll() { - logger.fine("getAll"); - - // Return all the composites in the domain composite - List<Entry<String, Item>> entries = new ArrayList<Entry<String, Item>>(); - Composite compositeCollection = readCompositeCollection(); - for (Composite composite: compositeCollection.getIncludes()) { - String contributionURI = composite.getURI(); - QName qname = composite.getName(); - String key = compositeKey(contributionURI, qname); - Item item; - try { - item = deployableCollection.get(key); - } catch (NotFoundException e) { - item = new Item(); - item.setTitle(compositeTitle(contributionURI, qname)); - item.setLink(compositeSourceLink(contributionURI, qname)); - item.setContents("<span id=\"problem\" style=\"color: red\">Problem: Composite not found</span>"); - } - Entry<String, Item> entry = new Entry<String, Item>(); - entry.setKey(key); - entry.setData(item); - entries.add(entry); - } - return entries.toArray(new Entry[entries.size()]); - } - - public Item get(String key) throws NotFoundException { - logger.fine("get " + key); - - String contributionURI = contributionURI(key); - QName qname = compositeQName(key); - - // Look for the specified composite in the domain composite - List<Entry<String, Item>> entries = new ArrayList<Entry<String, Item>>(); - Composite compositeCollection = readCompositeCollection(); - for (Composite composite: compositeCollection.getIncludes()) { - if (contributionURI.equals(composite.getURI()) && qname.equals(composite.getName())) { - return deployableCollection.get(key); - } - } - throw new NotFoundException(key); - } - - public String post(String key, Item item) { - logger.fine("post " + key); - - String contributionURI = contributionURI(key); - QName qname = compositeQName(key); - - // Adds a new composite to the domain composite - Composite compositeCollection = readCompositeCollection(); - Composite composite = assemblyFactory.createComposite(); - composite.setName(qname); - composite.setURI(contributionURI); - composite.setUnresolved(true); - compositeCollection.getIncludes().add(composite); - - // Optionally, write the composite contents in a new composite file - // under the deployment composites directory, if that directory is - // configured on this component - if (deploymentContributionDirectory != null && item.getContents() != null) { - String rootDirectory = domainManagerConfiguration.getRootDirectory(); - - File directory = new File(rootDirectory + "/" + deploymentContributionDirectory); - if (!directory.exists()) { - directory.mkdirs(); - } - File file = new File(directory, qname.getLocalPart() + ".composite"); - try { - Writer w = new OutputStreamWriter(new FileOutputStream(file)); - w.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"); - w.write(item.getContents()); - w.close(); - } catch (IOException e) { - throw new ServiceRuntimeException(e); - } - } - - // Write the composite collection - writeCompositeCollection(compositeCollection); - - return key; - } - - public void put(String key, Item item) throws NotFoundException { - logger.fine("put " + key); - - String contributionURI = contributionURI(key); - QName qname = compositeQName(key); - - // Update a composite already in the domain composite - Composite compositeCollection = readCompositeCollection(); - Composite newComposite = assemblyFactory.createComposite(); - newComposite.setName(qname); - newComposite.setURI(contributionURI); - newComposite.setUnresolved(true); - List<Composite> composites = compositeCollection.getIncludes(); - for (int i = 0, n = composites.size(); i < n; i++) { - Composite composite = composites.get(i); - if (contributionURI.equals(composite.getURI()) && qname.equals(composite.getName())) { - composites.set(i, newComposite); - - // Write the domain composite - writeCompositeCollection(compositeCollection); - - return; - } - } - throw new NotFoundException(key); - } - - public void delete(String key) throws NotFoundException { - logger.fine("delete " + key); - - String contributionURI = contributionURI(key); - QName qname = compositeQName(key); - - // Delete/stop the corresponding process, if any - try { - processCollection.delete(qname.getLocalPart()); - } catch (Exception e) {} - - // Delete a composite from the composite collection - Composite compositeCollection = readCompositeCollection(); - List<Composite> composites = compositeCollection.getIncludes(); - Composite deleted = null; - for (int i = 0, n = composites.size(); i < n; i++) { - Composite composite = composites.get(i); - if (contributionURI.equals(composite.getURI()) && qname.equals(composite.getName())) { - composites.remove(i); - deleted = composite; - - // Write the domain composite - writeCompositeCollection(compositeCollection); - break; - } - } - - // Delete the file too if it is in the deployment contribution directory - if (deploymentContributionDirectory != null && contributionURI.equals(DEPLOYMENT_CONTRIBUTION_URI)) { - String rootDirectory = domainManagerConfiguration.getRootDirectory(); - - File file = new File(rootDirectory + "/" + deploymentContributionDirectory, qname.getLocalPart() + ".composite"); - if (file.exists()) { - file.delete(); - } - } - - if (deleted == null) { - throw new NotFoundException(key); - } - } - - public Entry<String, Item>[] query(String queryString) { - throw new UnsupportedOperationException(); - } - - /** - * Reads the domain composite. - * - * @return the domain composite - * @throws ServiceRuntimeException - */ - private Composite readCompositeCollection() throws ServiceRuntimeException { - String rootDirectory = domainManagerConfiguration.getRootDirectory(); - - Composite compositeCollection; - File file = new File(rootDirectory + "/" + compositeFile); - if (file.exists()) { - - // Get composite collection from cache - if (cache.compositeCollection != null && file.lastModified() == cache.compositeCollectionLastModified) { - compositeCollection = cache.compositeCollection; - - } else { - - XMLInputFactory inputFactory = modelFactories.getFactory(XMLInputFactory.class); - try { - FileInputStream is = new FileInputStream(file); - XMLStreamReader reader = inputFactory.createXMLStreamReader(is); - compositeCollection = compositeProcessor.read(reader); - } catch (Exception e) { - throw new ServiceRuntimeException(e); - } - - // Cache composite collection - cache.compositeCollectionLastModified = file.lastModified(); - cache.compositeCollection = compositeCollection; - } - - } else { - compositeCollection = assemblyFactory.createComposite(); - String name; - int d = compositeFile.lastIndexOf('.'); - if (d != -1) { - name = compositeFile.substring(0, d); - } else { - name = compositeFile; - } - compositeCollection.setName(new QName(Constants.SCA10_TUSCANY_NS, name)); - - // Cache composite collection - cache.compositeCollectionLastModified = 0; - cache.compositeCollection = compositeCollection; - } - return compositeCollection; - } - - /** - * Write the domain composite back to disk. - * - * @param compositeCollection - */ - private void writeCompositeCollection(Composite compositeCollection) { - try { - String rootDirectory = domainManagerConfiguration.getRootDirectory(); - - // First write to a byte stream - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - XMLStreamWriter writer = outputFactory.createXMLStreamWriter(bos); - compositeProcessor.write(compositeCollection, writer); - - // Parse again to pretty format the document - Document document = documentBuilder.parse(new ByteArrayInputStream(bos.toByteArray())); - OutputFormat format = new OutputFormat(); - format.setIndenting(true); - format.setIndent(2); - - // Write to domain.composite - File file = new File(rootDirectory + "/" + compositeFile); - FileOutputStream os = new FileOutputStream(file); - XMLSerializer serializer = new XMLSerializer(os, format); - serializer.serialize(document); - - // Cache composite collection - cache.compositeCollection = compositeCollection; - cache.compositeCollectionLastModified = file.lastModified(); - - } catch (Exception e) { - throw new ServiceRuntimeException(e); - } - } - -} diff --git a/branches/sca-android/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/DomainManagerConfiguration.java b/branches/sca-android/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/DomainManagerConfiguration.java deleted file mode 100644 index 1831728f07..0000000000 --- a/branches/sca-android/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/DomainManagerConfiguration.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * 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.domain.manager.impl; - -import org.apache.tuscany.sca.core.ExtensionPointRegistry; - -/** - * Domain manager configuration service interface. - * - * @version $Rev$ $Date$ - */ -public interface DomainManagerConfiguration { - - /** - * Sets the domain manager root directory. - * - * @param rootDirectory - */ - void setRootDirectory(String rootDirectory); - - /** - * Returns the domain manager root directory. - * - * @return the domain manager root directory - */ - String getRootDirectory(); - - /** - * Returns the extension point registry used in the - * domain manager. - * - * @return - */ - ExtensionPointRegistry getExtensionPoints(); - -} diff --git a/branches/sca-android/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/DomainManagerConfigurationImpl.java b/branches/sca-android/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/DomainManagerConfigurationImpl.java deleted file mode 100644 index a5ce6e12d6..0000000000 --- a/branches/sca-android/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/DomainManagerConfigurationImpl.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * 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.domain.manager.impl; - -import org.apache.tuscany.sca.core.DefaultExtensionPointRegistry; -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.core.ModuleActivator; -import org.apache.tuscany.sca.core.ModuleActivatorExtensionPoint; -import org.osoa.sca.annotations.Destroy; -import org.osoa.sca.annotations.Init; -import org.osoa.sca.annotations.Scope; -import org.osoa.sca.annotations.Service; - -/** - * Implementation of a domain manager configuration component. - * - * @version $Rev$ $Date$ - */ -@Scope("COMPOSITE") -@Service(DomainManagerConfiguration.class) -public class DomainManagerConfigurationImpl implements DomainManagerConfiguration { - - private String rootDirectory = "."; - private ExtensionPointRegistry extensionPoints; - - @Init - public void initialize() { - - // Create extension point registry - extensionPoints = new DefaultExtensionPointRegistry(); - - // Initialize module activators - ModuleActivatorExtensionPoint moduleActivators = extensionPoints.getExtensionPoint(ModuleActivatorExtensionPoint.class); - for (ModuleActivator activator: moduleActivators.getModuleActivators()) { - try { - activator.start(extensionPoints); - } catch (Exception e) { - //FIXME fix the module activators that have cross module dependencies - // and currently fail when the whole runtime is not present - } - } - } - - @Destroy - public void destroy() { - ModuleActivatorExtensionPoint moduleActivators = extensionPoints.getExtensionPoint(ModuleActivatorExtensionPoint.class); - for (ModuleActivator activator: moduleActivators.getModuleActivators()) { - try { - activator.stop(extensionPoints); - } catch (Exception e) { - //FIXME fix the module activators that have cross module dependencies - // and currently fail when the whole runtime is not present - } - } - } - - public String getRootDirectory() { - return rootDirectory; - } - - public void setRootDirectory(String rootDirectory) { - this.rootDirectory = rootDirectory; - } - - public ExtensionPointRegistry getExtensionPoints() { - return extensionPoints; - } -} diff --git a/branches/sca-android/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/DomainManagerUtil.java b/branches/sca-android/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/DomainManagerUtil.java deleted file mode 100644 index bd330322e5..0000000000 --- a/branches/sca-android/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/DomainManagerUtil.java +++ /dev/null @@ -1,284 +0,0 @@ -/* - * 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.domain.manager.impl; - -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URI; -import java.net.URL; -import java.net.URLConnection; - -import javax.xml.namespace.QName; - -import org.apache.tuscany.sca.assembly.AssemblyFactory; -import org.apache.tuscany.sca.assembly.Binding; -import org.apache.tuscany.sca.assembly.Composite; -import org.apache.tuscany.sca.core.assembly.CompositeActivator; -import org.apache.tuscany.sca.core.context.ServiceReferenceImpl; -import org.apache.tuscany.sca.core.invocation.ProxyFactory; -import org.apache.tuscany.sca.interfacedef.InterfaceContract; -import org.apache.tuscany.sca.interfacedef.java.JavaInterfaceFactory; -import org.apache.tuscany.sca.runtime.RuntimeComponent; -import org.apache.tuscany.sca.runtime.RuntimeComponentReference; -import org.osoa.sca.ServiceReference; -import org.osoa.sca.ServiceRuntimeException; - -/** - * Common functions and constants used by the admin components. - * - * @version $Rev$ $Date$ - */ -public final class DomainManagerUtil { - - static final String DEPLOYMENT_CONTRIBUTION_URI = "http://tuscany.apache.org/cloud"; - - /** - * Extracts a qname from a key expressed as contributionURI;namespace;localpart. - * @param key - * @return - */ - static QName compositeQName(String key) { - int i = key.indexOf(';'); - key = key.substring(i + 1); - i = key.indexOf(';'); - return new QName(key.substring(0, i), key.substring(i + 1)); - } - - /** - * Returns a composite title expressed as contributionURI - namespace;localpart. - * @param qname - * @return - */ - static String compositeTitle(String uri, QName qname) { - if (uri.equals(DEPLOYMENT_CONTRIBUTION_URI)) { - return qname.getLocalPart(); - } else { - return uri + " - " + qname.getNamespaceURI() + ";" + qname.getLocalPart(); - } - } - - /** - * Extracts a contribution uri from a key expressed as contributionURI;namespace;localpart. - * @param key - * @return - */ - static String contributionURI(String key) { - int i = key.indexOf(';'); - return key.substring("composite:".length(), i); - } - - /** - * Returns a composite key expressed as contributionURI;namespace;localpart. - * @param qname - * @return - */ - static String compositeKey(String uri, QName qname) { - return "composite:" + uri + ';' + qname.getNamespaceURI() + ';' + qname.getLocalPart(); - } - - /** - * Returns a link to the source of a composite - * @param contributionURI - * @param qname - * @return - */ - static String compositeSourceLink(String contributionURI, QName qname) { - return "/composite-source/" + compositeKey(contributionURI, qname); - } - - /** - * Returns a composite title expressed as contributionURI - namespace;localpart. - * @param qname - * @return - */ - static String compositeSimpleTitle(String uri, QName qname) { - if (uri.equals(DomainManagerUtil.DEPLOYMENT_CONTRIBUTION_URI)) { - return qname.getLocalPart(); - } else { - return qname.getNamespaceURI() + ";" + qname.getLocalPart(); - } - } - - /** - * Returns a URL from a location string. - * @param location - * @return - * @throws MalformedURLException - */ - static URL locationURL(String location) throws MalformedURLException { - URI uri = URI.create(location); - String scheme = uri.getScheme(); - if (scheme == null) { - File file = new File(location); - return file.toURI().toURL(); - } else if (scheme.equals("file")) { - File file = new File(location.substring(5)); - return file.toURI().toURL(); - } else { - return uri.toURL(); - } - } - - /** - * Returns a link to a deployable composite. - * - * If the containing contribution is a local directory, return the URI of the local composite file - * inside the contribution. - * - * If the containing contribution is a local or remote file, return a URI of the form: - * jar: contribution URI !/ composite URI. - * - * @param contributionLocation - * @param deployableURI - * @return - */ - static String compositeAlternateLink(String contributionLocation, String deployableURI) { - if (deployableURI == null) { - return null; - } - URI u = URI.create(contributionLocation); - String uri; - if ("file".equals(u.getScheme())) { - String path = u.toString().substring(5); - File file = new File(path); - if (file.isDirectory()) { - if (contributionLocation.endsWith("/")) { - uri = contributionLocation + deployableURI; - } else { - uri = contributionLocation + "/" + deployableURI; - } - } else { - uri = contributionLocation + "!/" + deployableURI; - } - } else { - uri = contributionLocation + "!/" + deployableURI; - } - int e = uri.indexOf("!/"); - if (e != -1) { - int s = uri.lastIndexOf('/', e - 2) +1; - if (uri.substring(s, e).contains(".")) { - uri = "jar:" + uri; - } else { - uri = uri.substring(0, e) + uri.substring(e + 1); - } - } - return uri; - } - - /** - * Extract a node URI from an ATOM entry content. - * - * @param content - * @return - */ - static String nodeURI(String content) { - if (content != null) { - int bs = content.indexOf("<span id=\"nodeURI\">"); - if (bs != -1) { - content = content.substring(bs + 19); - int es = content.indexOf("</span>"); - if (es != -1) { - return content.substring(0, es); - } - } - } - return null; - } - - /** - * Create a new service reference dynamically. - * - * @param <B> - * @param businessInterface - * @param binding - * @param assemblyFactory - * @param compositeActivator - * @return - */ - static <B> ServiceReference<B> dynamicReference(Class<B> businessInterface, Binding binding, AssemblyFactory assemblyFactory, CompositeActivator compositeActivator) { - try { - - Composite composite = assemblyFactory.createComposite(); - composite.setName(new QName("http://tempuri.org", "default")); - RuntimeComponent component = (RuntimeComponent)assemblyFactory.createComponent(); - component.setName("default"); - component.setURI("default"); - compositeActivator.configureComponentContext(component); - composite.getComponents().add(component); - RuntimeComponentReference reference = (RuntimeComponentReference)assemblyFactory.createComponentReference(); - reference.setName("default"); - JavaInterfaceFactory javaInterfaceFactory = compositeActivator.getJavaInterfaceFactory(); - InterfaceContract interfaceContract = javaInterfaceFactory.createJavaInterfaceContract(); - interfaceContract.setInterface(javaInterfaceFactory.createJavaInterface(businessInterface)); - reference.setInterfaceContract(interfaceContract); - component.getReferences().add(reference); - reference.setComponent(component); - reference.getBindings().add(binding); - - ProxyFactory proxyFactory = compositeActivator.getProxyFactory(); - return new ServiceReferenceImpl<B>(businessInterface, component, reference, binding, proxyFactory, compositeActivator); - - } catch (Exception e) { - throw new ServiceRuntimeException(e); - } - } - - /** - * Returns the last modified time of the content at the given URL. - * - * @param url - * @return - * @throws IOException - */ - static long lastModified(URL url) throws IOException { - - if (url.getProtocol() == null || "file".equals(url.getProtocol())) { - return lastModified(new File(url.getPath())); - } else { - URLConnection connection = url.openConnection(); - long lastModified = connection.getLastModified(); - return lastModified; - } - } - - /** - * Returns the last modified time of the given file or directory. - * - * @param file - * @return - */ - static long lastModified(File file) { - if (file.isDirectory()) { - long lastModified = file.lastModified(); - - for (File child: file.listFiles()) { - long m = lastModified(child); - if (m > lastModified) { - lastModified = m; - } - } - return lastModified; - - } else { - return file.lastModified(); - } - } -} diff --git a/branches/sca-android/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/FileCollectionImpl.java b/branches/sca-android/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/FileCollectionImpl.java deleted file mode 100644 index a53250515a..0000000000 --- a/branches/sca-android/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/FileCollectionImpl.java +++ /dev/null @@ -1,136 +0,0 @@ -/* - * 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.domain.manager.impl; - -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.logging.Logger; - -import org.apache.tuscany.sca.data.collection.Entry; -import org.apache.tuscany.sca.data.collection.Item; -import org.apache.tuscany.sca.data.collection.ItemCollection; -import org.apache.tuscany.sca.data.collection.NotFoundException; -import org.osoa.sca.annotations.Init; -import org.osoa.sca.annotations.Property; -import org.osoa.sca.annotations.Reference; -import org.osoa.sca.annotations.Scope; -import org.osoa.sca.annotations.Service; - -/** - * Implementation of a file collection service component. - * - * @version $Rev$ $Date$ - */ -@Scope("COMPOSITE") -@Service(ItemCollection.class) -public class FileCollectionImpl implements ItemCollection { - - private static final Logger logger = Logger.getLogger(FileCollectionImpl.class.getName()); - - @Property - public String directoryName; - - @Reference - public DomainManagerConfiguration domainManagerConfiguration; - - /** - * Initialize the component. - */ - @Init - public void initialize() throws IOException { - } - - public Entry<String, Item>[] getAll() { - logger.fine("getAll"); - - String rootDirectory = domainManagerConfiguration.getRootDirectory(); - - // Return all the files - List<Entry<String, Item>> entries = new ArrayList<Entry<String, Item>>(); - File directory = new File(rootDirectory + "/" + directoryName); - if (directory.exists()) { - for (File file: directory.listFiles()) { - if (file.getName().startsWith(".")) { - continue; - } - entries.add(entry(file.getName())); - } - } - return entries.toArray(new Entry[entries.size()]); - } - - public Item get(String key) throws NotFoundException { - logger.fine("get " + key); - return item(key); - } - - public String post(String key, Item item) { - throw new UnsupportedOperationException(); - } - - public void put(String key, Item item) throws NotFoundException { - throw new UnsupportedOperationException(); - } - - public void delete(String key) throws NotFoundException { - logger.fine("delete " + key); - - String rootDirectory = domainManagerConfiguration.getRootDirectory(); - File directory = new File(rootDirectory + "/" + directoryName); - File file = new File(directory, key); - if (file.exists()) { - file.delete(); - } else { - throw new NotFoundException(key); - } - } - - public Entry<String, Item>[] query(String queryString) { - throw new UnsupportedOperationException(); - } - - /** - * Returns an entry representing a file. - * - * @param fileName - * @return - */ - private static Entry<String, Item> entry(String fileName) { - Entry<String, Item> entry = new Entry<String, Item>(); - entry.setKey(fileName); - entry.setData(item(fileName)); - return entry; - } - - /** - * Returns an item representing a file. - * - * @param fileName - * @return - */ - private static Item item(String fileName) { - Item item = new Item(); - item.setTitle(fileName); - item.setLink("/files/" + fileName); - return item; - } -} diff --git a/branches/sca-android/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/FileServiceImpl.java b/branches/sca-android/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/FileServiceImpl.java deleted file mode 100644 index 2adb623876..0000000000 --- a/branches/sca-android/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/FileServiceImpl.java +++ /dev/null @@ -1,153 +0,0 @@ -/* - * 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.domain.manager.impl; - -import java.io.File; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.net.URI; -import java.net.URLConnection; -import java.net.URLDecoder; -import java.util.List; -import java.util.logging.Logger; - -import javax.servlet.Servlet; -import javax.servlet.ServletException; -import javax.servlet.ServletOutputStream; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.commons.fileupload.FileItem; -import org.apache.commons.fileupload.disk.DiskFileItemFactory; -import org.apache.commons.fileupload.servlet.ServletFileUpload; -import org.osoa.sca.annotations.Init; -import org.osoa.sca.annotations.Property; -import org.osoa.sca.annotations.Reference; -import org.osoa.sca.annotations.Scope; -import org.osoa.sca.annotations.Service; - -/** - * Implementation of a servlet component supporting file upload/download. - * - * @version $Rev$ $Date$ - */ -@Scope("COMPOSITE") -@Service(Servlet.class) -public class FileServiceImpl extends HttpServlet { - private static final long serialVersionUID = -4560385595481971616L; - - private static final Logger logger = Logger.getLogger(FileServiceImpl.class.getName()); - - @Property - public String directoryName; - - @Reference - public DomainManagerConfiguration domainManagerConfiguration; - - private ServletFileUpload upload; - - /** - * Initialize the component. - */ - @Init - public void initialize() throws IOException { - upload = new ServletFileUpload(new DiskFileItemFactory()); - } - - @Override - public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { - - // Upload files - String rootDirectory = domainManagerConfiguration.getRootDirectory(); - try { - for (FileItem item: (List<FileItem>)upload.parseRequest(request)) { - if (!item.isFormField()) { - File directory = new File(rootDirectory + "/" + directoryName); - if (!directory.exists()) { - directory.mkdirs(); - } - logger.fine("post " + item.getName()); - item.write(new File(directory, item.getName())); - } - } - - // Redirect to the admin page - response.sendRedirect("/ui/files"); - } - catch (Exception e) { - throw new IOException(e.toString()); - } - } - - @Override - protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - - // Download a file - String requestURI = URLDecoder.decode(request.getRequestURI(), "UTF-8"); - String path = requestURI.substring(request.getServletPath().length()); - if (path.startsWith("/")) { - path = path.substring(1); - } - logger.fine("get " + path); - - try { - - // Analyze the given path - URI uri = URI.create(path); - String scheme = uri.getScheme(); - if (scheme == null) { - - // If no scheme is specified then the path identifies file - // inside our directory - String rootDirectory = domainManagerConfiguration.getRootDirectory(); - uri = new File(rootDirectory + "/" + directoryName, path).toURI(); - - } else if (!scheme.equals("file")) { - - // If the scheme does not identify a local file, just redirect to the server - // hosting the file - response.sendRedirect(path); - } - - // Read the file and write to response - URLConnection connection = uri.toURL().openConnection(); - connection.setUseCaches(false); - connection.connect(); - InputStream is = connection.getInputStream(); - ServletOutputStream os = response.getOutputStream(); - byte[] buffer = new byte[4096]; - for (;;) { - int n = is.read(buffer); - if (n < 0) { - break; - } - os.write(buffer, 0, n); - } - is.close(); - os.flush(); - - } catch (FileNotFoundException e) { - response.sendError(HttpServletResponse.SC_NOT_FOUND); - } - } - -} diff --git a/branches/sca-android/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/NodeConfigurationServiceImpl.java b/branches/sca-android/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/NodeConfigurationServiceImpl.java deleted file mode 100644 index 06d28b0502..0000000000 --- a/branches/sca-android/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/NodeConfigurationServiceImpl.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * 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.domain.manager.impl; - -import static org.apache.tuscany.sca.domain.manager.impl.DomainManagerUtil.compositeQName; - -import java.io.IOException; -import java.net.URLDecoder; -import java.util.logging.Logger; - -import javax.servlet.Servlet; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.xml.namespace.QName; - -import org.apache.tuscany.sca.data.collection.Entry; -import org.apache.tuscany.sca.data.collection.Item; -import org.apache.tuscany.sca.data.collection.LocalItemCollection; -import org.osoa.sca.annotations.Reference; -import org.osoa.sca.annotations.Scope; -import org.osoa.sca.annotations.Service; - -/** - * Implementation of a service that returns a node configuration. - * - * @version $Rev$ $Date$ - */ -@Scope("COMPOSITE") -@Service(Servlet.class) -public class NodeConfigurationServiceImpl extends HttpServlet implements Servlet { - private static final long serialVersionUID = 6913769467386954463L; - - private static final Logger logger = Logger.getLogger(NodeConfigurationServiceImpl.class.getName()); - - @Reference - public LocalItemCollection contributionCollection; - - @Reference - public LocalItemCollection cloudCollection; - - @Override - protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - - // Get the request path - String path = URLDecoder.decode(request.getRequestURI().substring(request.getServletPath().length()), "UTF-8"); - String key = path.startsWith("/")? path.substring(1) : path; - logger.fine("get " + key); - - // The key contains a node name, redirect - // to the corresponding composite config - - // Get the collection of cloud composites - Entry<String, Item>[] cloudEntries = cloudCollection.getAll(); - - // Find the specified node - for (Entry<String, Item> cloudEntry: cloudEntries) { - QName qname = compositeQName(cloudEntry.getKey()); - if (qname.getLocalPart().equals(key)) { - - // Found the specified node - String related = cloudEntry.getData().getRelated(); - int i = related.indexOf("composite:"); - if (i != -1) { - - // Redirect to its composite config - String compositeConfiguration = "/composite-config/?composite=" + related.substring(i); - response.sendRedirect(compositeConfiguration); - return; - } - } - } - - // Node not found - response.sendError(HttpServletResponse.SC_NOT_FOUND, key); - return; - } -} diff --git a/branches/sca-android/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/NodeProcessCollectionFacadeImpl.java b/branches/sca-android/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/NodeProcessCollectionFacadeImpl.java deleted file mode 100644 index d68cfa3786..0000000000 --- a/branches/sca-android/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/NodeProcessCollectionFacadeImpl.java +++ /dev/null @@ -1,251 +0,0 @@ -/* - * 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.domain.manager.impl; - -import static org.apache.tuscany.sca.domain.manager.impl.DomainManagerUtil.compositeQName; -import static org.apache.tuscany.sca.domain.manager.impl.DomainManagerUtil.nodeURI; - -import java.net.URI; -import java.util.ArrayList; -import java.util.List; -import java.util.logging.Logger; - -import javax.xml.namespace.QName; - -import org.apache.tuscany.sca.assembly.AssemblyFactory; -import org.apache.tuscany.sca.binding.atom.AtomBindingFactory; -import org.apache.tuscany.sca.contribution.ModelFactoryExtensionPoint; -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.core.assembly.CompositeActivator; -import org.apache.tuscany.sca.data.collection.Entry; -import org.apache.tuscany.sca.data.collection.Item; -import org.apache.tuscany.sca.data.collection.ItemCollection; -import org.apache.tuscany.sca.data.collection.LocalItemCollection; -import org.apache.tuscany.sca.data.collection.NotFoundException; -import org.osoa.sca.ServiceRuntimeException; -import org.osoa.sca.annotations.Init; -import org.osoa.sca.annotations.Reference; -import org.osoa.sca.annotations.Scope; -import org.osoa.sca.annotations.Service; - -/** - * Implementation of a node process collection service. - * - * @version $Rev$ $Date$ - */ -@Scope("COMPOSITE") -@Service(interfaces={ItemCollection.class, LocalItemCollection.class}) -public class NodeProcessCollectionFacadeImpl implements ItemCollection, LocalItemCollection { - - private static final Logger logger = Logger.getLogger(NodeProcessCollectionFacadeImpl.class.getName()); - - @Reference - public LocalItemCollection cloudCollection; - - @Reference - public ItemCollection processCollection; - - @Reference - public DomainManagerConfiguration domainManagerConfiguration; - - private AssemblyFactory assemblyFactory; - private AtomBindingFactory atomBindingFactory; - private CompositeActivator compositeActivator; - - /** - * Initialize the component. - */ - @Init - public void initialize() { - - // Get its composite activator - //FIXME - //compositeActivator = runtime.getCompositeActivator(); - - // Get the model factories - ExtensionPointRegistry extensionPoints = domainManagerConfiguration.getExtensionPoints(); - ModelFactoryExtensionPoint modelFactories = extensionPoints.getExtensionPoint(ModelFactoryExtensionPoint.class); - assemblyFactory = modelFactories.getFactory(AssemblyFactory.class); - atomBindingFactory = modelFactories.getFactory(AtomBindingFactory.class); - } - - public Entry<String, Item>[] getAll() { - logger.fine("getAll"); - - // Get the collection of nodes - Entry<String, Item>[] nodeEntries = cloudCollection.getAll(); - - // Dispatch to the hosts hosting these nodes - List<Entry<String, Item>> entries = new ArrayList<Entry<String,Item>>(); - for (String host: hosts(nodeEntries)) { - ItemCollection processCollection = processCollection(host); - for (Entry<String, Item> remoteEntry: processCollection.getAll()) { - entries.add(remoteEntry); - } - break; - } - - return entries.toArray(new Entry[entries.size()]); - } - - public Item get(String key) throws NotFoundException { - logger.fine("get " + key); - - // Get the host hosting the given node - String host = host(key); - - // Dispatch the request to that host - ItemCollection processCollection = processCollection(host); - return processCollection.get(key); - } - - public String post(String key, Item item) { - logger.fine("post " + key); - - // Get the host hosting the given node - String host; - try { - host = host(key); - } catch (NotFoundException e) { - throw new ServiceRuntimeException(e); - } - - // Dispatch the request to that host - ItemCollection processCollection = processCollection(host); - return processCollection.post(key, item); - } - - public void put(String key, Item item) throws NotFoundException { - throw new UnsupportedOperationException(); - } - - public void delete(String key) throws NotFoundException { - logger.fine("delete " + key); - - // Get the host hosting the given node - String host = host(key); - - // Dispatch the request to that host - ItemCollection processCollection = processCollection(host); - processCollection.delete(key); - } - - public Entry<String, Item>[] query(String queryString) { - logger.fine("query " + queryString); - - if (queryString.startsWith("node=")) { - String key = queryString.substring(queryString.indexOf('=') + 1); - - // Get the host hosting the given node - String host; - try { - host = host(key); - } catch (NotFoundException e) { - return new Entry[0]; - } - - // Dispatch the request to that host - ItemCollection processCollection = processCollection(host); - return processCollection.query(queryString); - - } else { - throw new UnsupportedOperationException(); - } - } - - private String host(String nodeName) throws NotFoundException { - - // Get the entry representing the given node - Entry<String, Item> nodeEntry = nodeEntry(cloudCollection.getAll(), nodeName); - if (nodeEntry == null) { - throw new NotFoundException(nodeName); - } - - // Get the host hosting it - return host(nodeEntry.getData()); - } - - /** - * Returns the entry representing the given node. - * - * @param entries - * @param name - * @return - */ - private static Entry<String, Item> nodeEntry(Entry<String, Item>[] entries, String name) { - for (Entry<String, Item> entry: entries) { - QName qname = compositeQName(entry.getKey()); - if (qname.getLocalPart().equals(name)) { - return entry; - } - } - return null; - } - - /** - * Returns the lists of hosts hosting the nodes in the given entries. - * - * @param entries - * @return - */ - private static List<String> hosts(Entry<String, Item>[] entries) { - List<String> hosts = new ArrayList<String>(); - for (Entry<String, Item> entry: entries) { - String host = host(entry.getData()); - if (!hosts.contains(host)) { - hosts.add(host); - } - } - return hosts; - } - - /** - * Returns the host of the node represented by the given item. - * - * @param item - * @return - */ - private static String host(Item item) { - String uri = nodeURI(item.getContents()); - if (uri != null) { - return URI.create(uri).getHost(); - } else { - return null; - } - } - - /** - * Returns a proxy to the process collection service on the specified - * host. - * - * @param host - * @return - */ - private ItemCollection processCollection(String host) { - return processCollection; - -//FIXME -// AtomBinding binding = atomBindingFactory.createAtomBinding(); -// binding.setURI("http://" + host + ":9990/node/processes"); -// ServiceReference<ItemCollection> reference = dynamicReference(ItemCollection.class, binding, assemblyFactory, compositeActivator); -// return reference.getService(); - } - -} diff --git a/branches/sca-android/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/QuickStartServiceImpl.java b/branches/sca-android/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/QuickStartServiceImpl.java deleted file mode 100644 index 23c506446f..0000000000 --- a/branches/sca-android/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/QuickStartServiceImpl.java +++ /dev/null @@ -1,236 +0,0 @@ -/* - * 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.domain.manager.impl; - -import static org.apache.tuscany.sca.domain.manager.impl.DomainManagerUtil.compositeKey; -import static org.apache.tuscany.sca.domain.manager.impl.DomainManagerUtil.compositeQName; -import static org.apache.tuscany.sca.domain.manager.impl.DomainManagerUtil.contributionURI; -import static org.apache.tuscany.sca.domain.manager.impl.DomainManagerUtil.nodeURI; - -import java.io.IOException; -import java.net.URI; -import java.net.URLDecoder; -import java.util.HashSet; -import java.util.Set; -import java.util.logging.Level; -import java.util.logging.Logger; - -import javax.servlet.Servlet; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.xml.namespace.QName; -import javax.xml.parsers.ParserConfigurationException; - -import org.apache.tuscany.sca.data.collection.Entry; -import org.apache.tuscany.sca.data.collection.Item; -import org.apache.tuscany.sca.data.collection.LocalItemCollection; -import org.apache.tuscany.sca.data.collection.NotFoundException; -import org.osoa.sca.annotations.Init; -import org.osoa.sca.annotations.Reference; -import org.osoa.sca.annotations.Scope; -import org.osoa.sca.annotations.Service; - -/** - * Implementation of a component that provides a quick start path for a - * composite in a contribution. - * - * @version $Rev$ $Date$ - */ -@Scope("COMPOSITE") -@Service(interfaces={Servlet.class}) -public class QuickStartServiceImpl extends HttpServlet { - private static final long serialVersionUID = -3477992129462720901L; - - private static final Logger logger = Logger.getLogger(QuickStartServiceImpl.class.getName()); - - @Reference - public LocalItemCollection contributionCollection; - - @Reference - public LocalItemCollection deployableCollection; - - @Reference - public LocalItemCollection domainCompositeCollection; - - @Reference - public LocalItemCollection cloudCollection; - - @Reference - public LocalItemCollection processCollection; - - /** - * Initialize the component. - */ - @Init - public void initialize() throws ParserConfigurationException { - } - - @Override - protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - try { - - // Get the request path - String path = URLDecoder.decode(request.getRequestURI().substring(request.getServletPath().length()), "UTF-8"); - if (path.startsWith("/")) { - path = path.substring(1); - } - - // Get the request parameters - String contributionURI = request.getParameter("contribution"); - String contributionLocation = request.getParameter("location"); - String compositeURI = request.getParameter("composite"); - String start = request.getParameter("start"); - - logger.fine("Composite Quick Start."); - logger.fine("Contribution URI: " + contributionURI); - logger.fine("Contribution location: " + contributionLocation); - logger.fine("Composite URI: " + compositeURI); - - // Look for the contribution in the workspace - Entry<String, Item>[] contributionEntries = contributionCollection.getAll(); - Entry<String, Item> contributionEntry = null; - for (Entry<String, Item> entry: contributionEntries) { - if (contributionURI.equals(entry.getKey())) { - contributionEntry = entry; - break; - } - } - - // Add the contribution if necessary - if (contributionEntry == null) { - Item item = new Item(); - item.setLink(contributionLocation); - contributionCollection.post(contributionURI, item); - } - - // Look for the specified deployable composite in the contribution - String compositeKey = null; - Entry<String, Item>[] deployableEntries = deployableCollection.query("contribution=" + contributionURI); - for (Entry<String, Item> entry: deployableEntries) { - Item item = entry.getData(); - if (contributionURI.equals(contributionURI(entry.getKey())) && item.getAlternate().endsWith(compositeURI)) { - compositeKey = entry.getKey(); - break; - } - } - - if (compositeKey == null) { - response.sendError(HttpServletResponse.SC_NOT_FOUND, compositeURI); - return; - } - - // Look for the deployable composite in the domain composite - try { - domainCompositeCollection.get(compositeKey); - } catch (NotFoundException e) { - - // Add the deployable composite to the domain composite - Item item = new Item(); - domainCompositeCollection.post(compositeKey, item); - } - - // Check if the deployable composite is already assigned a node - Entry<String, Item>[] nodeEntries = cloudCollection.getAll(); - String nodeName = null; - for (Entry<String, Item> entry: nodeEntries) { - Item item = entry.getData(); - String related = item.getRelated(); - if (related != null) { - int c = related.indexOf("composite:"); - related = related.substring(c); - if (compositeKey.equals(related)) { - nodeName = compositeQName(entry.getKey()).getLocalPart(); - } - } - } - - // Create a new node for the composite if necessary - if (nodeName == null) { - - // Construct node name and key - QName compositeName = compositeQName(compositeKey); - nodeName = compositeName.getLocalPart() + "Node"; - String nodeKey = compositeKey("http://tuscany.apache.org/cloud", new QName("http://tuscany.apache.org/cloud", nodeName)); - - // Find a free node port - Set<Integer> nodePorts = new HashSet<Integer>(); - for (Entry<String, Item> entry: nodeEntries) { - Item item = entry.getData(); - String uri = nodeURI(item.getContents()); - if (uri != null) { - URI u = URI.create(uri); - int port = u.getPort(); - if (port != -1) { - nodePorts.add(port); - } - } - } - String nodeURI = null; - for (int port = 8100; port<8200; port++) { - if (!nodePorts.contains(port)) { - nodeURI = "http://localhost:" + port; - break; - } - } - if (nodeURI == null) { - throw new RuntimeException("Couldn't find a free port for new node: " + nodeName); - } - - // Build the entry describing the node - Item item = new Item(); - String content = - "<composite xmlns=\"http://www.osoa.org/xmlns/sca/1.0\"\n" + - " xmlns:t=\"http://tuscany.apache.org/xmlns/sca/1.0\"\n" + - " targetNamespace=\"http://tuscany.apache.org/cloud\"\n" + - " xmlns:c=\"" + compositeName.getNamespaceURI() + "\"\n" + - " name=\"" + nodeName + "\">\n" + - "\n" + - " <component name=\"" + nodeName + "\">\n" + - " <t:implementation.node uri=\"" + contributionURI + "\" composite=\"c:" + compositeName.getLocalPart() + "\"/>\n" + - " <service name=\"Node\">\n" + - " <binding.ws uri=\"" + nodeURI + "\"/>\n" + - " <t:binding.http uri=\"" + nodeURI + "\"/>\n" + - " <t:binding.jsonrpc uri=\"" + nodeURI + "\"/>\n" + - " <t:binding.atom uri=\"" + nodeURI + "\"/>\n" + - " </service>\n" + - " </component>\n" + - "</composite>"; - item.setContents(content); - - // Create the new node - cloudCollection.post(nodeKey, item); - } - - // Finally, start the node - if ("true".equals(start)) { - processCollection.post(nodeName, new Item()); - } - - response.getWriter().print("<html><body>Node <span id=\"node\">" + nodeName + "</span> OK.</body></html>"); - - } catch (Exception e) { - logger.log(Level.SEVERE, "Could not start composite", e); - response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.toString()); - } - } - -} diff --git a/branches/sca-android/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/launcher/DomainManagerLauncherBootstrap.java b/branches/sca-android/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/launcher/DomainManagerLauncherBootstrap.java deleted file mode 100644 index f96e19ed72..0000000000 --- a/branches/sca-android/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/launcher/DomainManagerLauncherBootstrap.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * 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.domain.manager.launcher; - -import org.apache.tuscany.sca.domain.manager.impl.DomainManagerConfiguration; -import org.apache.tuscany.sca.node.SCAClient; -import org.apache.tuscany.sca.node.SCANode; -import org.apache.tuscany.sca.node.SCANodeFactory; - -/** - * Bootstrap class for the SCA domain manager. - * - * @version $Rev$ $Date$ - */ -public class DomainManagerLauncherBootstrap { - private SCANode node; - - /** - * A node wrappering an instance of a domain manager. - */ - public static class NodeFacade implements SCANode { - private ClassLoader threadContextClassLoader; - private ClassLoader runtimeClassLoader; - private SCANode node; - private String rootDirectory; - - private NodeFacade(String rootDirectory) { - this.rootDirectory = rootDirectory; - runtimeClassLoader = Thread.currentThread().getContextClassLoader(); - } - - public void start() { - threadContextClassLoader = Thread.currentThread().getContextClassLoader(); - boolean started = false; - try { - Thread.currentThread().setContextClassLoader(runtimeClassLoader); - SCANodeFactory factory = SCANodeFactory.newInstance(); - node = factory.createSCANodeFromClassLoader("DomainManager.composite", getClass().getClassLoader()); - node.start(); - - // Set the domain manager's root directory - DomainManagerConfiguration domainManagerConfiguration = ((SCAClient) node).getService(DomainManagerConfiguration.class, "DomainManagerConfigurationComponent"); - domainManagerConfiguration.setRootDirectory(rootDirectory); - - started = true; - } finally { - if (!started) { - Thread.currentThread().setContextClassLoader(threadContextClassLoader); - } - } - } - - public void stop() { - try { - Thread.currentThread().setContextClassLoader(runtimeClassLoader); - node.stop(); - } finally { - Thread.currentThread().setContextClassLoader(threadContextClassLoader); - } - } - } - - /** - * Constructs a new domain manager bootstrap. - */ - public DomainManagerLauncherBootstrap(String rootDirectory) throws Exception { - node = new NodeFacade(rootDirectory); - } - - /** - * Returns the node representing the domain manager. - * @return - */ - public SCANode getNode() { - return node; - } - -} diff --git a/branches/sca-android/modules/domain-manager/src/main/resources/DomainManager.composite b/branches/sca-android/modules/domain-manager/src/main/resources/DomainManager.composite deleted file mode 100644 index ba57ea45d1..0000000000 --- a/branches/sca-android/modules/domain-manager/src/main/resources/DomainManager.composite +++ /dev/null @@ -1,281 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - * 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. ---> -<composite xmlns="http://www.osoa.org/xmlns/sca/1.0" - xmlns:t="http://tuscany.apache.org/xmlns/sca/1.0" - targetNamespace="http://tuscany.apache.org/xmlns/sca/1.0" - name="DomainManager"> - - <component name="HomePage"> - <t:implementation.widget location="home.html"/> - <service name="Widget"> - <t:binding.http uri="http://localhost:9990/ui/home"/> - </service> - </component> - - <component name="HomeGadget"> - <t:implementation.widget location="home-gadget.html"/> - <service name="Widget"> - <t:binding.http uri="http://localhost:9990/ui/home-gadget"/> - </service> - </component> - - <component name="WorkspacePage"> - <t:implementation.widget location="workspace.html"/> - <service name="Widget"> - <t:binding.http uri="http://localhost:9990/ui/workspace"/> - </service> - </component> - - <component name="WorkspaceGadget"> - <t:implementation.widget location="workspace-gadget.html"/> - <service name="Widget"> - <t:binding.http uri="http://localhost:9990/ui/workspace-gadget"/> - </service> - <reference name="workspace" target="ContributionCollectionComponent/ItemCollection"> - <t:binding.atom/> - </reference> - </component> - - <component name="FilesPage"> - <t:implementation.widget location="files.html"/> - <service name="Widget"> - <t:binding.http uri="http://localhost:9990/ui/files"/> - </service> - </component> - - <component name="FilesGadget"> - <t:implementation.widget location="files-gadget.html"/> - <service name="Widget"> - <t:binding.http uri="http://localhost:9990/ui/files-gadget"/> - </service> - <reference name="files" target="FileCollectionComponent"> - <t:binding.atom/> - </reference> - </component> - - <component name="DomainCompositePage"> - <t:implementation.widget location="composite.html"/> - <service name="Widget"> - <t:binding.http uri="http://localhost:9990/ui/composite"/> - </service> - </component> - - <component name="DomainCompositeGadget"> - <t:implementation.widget location="composite-gadget.html"/> - <service name="Widget"> - <t:binding.http uri="http://localhost:9990/ui/composite-gadget"/> - </service> - <reference name="domainComposite" target="DomainCompositeCollectionComponent/ItemCollection"> - <t:binding.atom/> - </reference> - <reference name="workspace" target="ContributionCollectionComponent/ItemCollection"> - <t:binding.atom/> - </reference> - </component> - - <component name="CloudPage"> - <t:implementation.widget location="cloud.html"/> - <service name="Widget"> - <t:binding.http uri="http://localhost:9990/ui/cloud"/> - </service> - </component> - - <component name="CloudGadget"> - <t:implementation.widget location="cloud-gadget.html"/> - <service name="Widget"> - <t:binding.http uri="http://localhost:9990/ui/cloud-gadget"/> - </service> - <reference name="cloudComposite" target="CloudCollectionComponent/ItemCollection"> - <t:binding.atom/> - </reference> - <reference name="domainComposite" target="DomainCompositeCollectionComponent/ItemCollection"> - <t:binding.atom/> - </reference> - <reference name="processCollection" target="NodeProcessCollectionFacadeComponent/ItemCollection"> - <t:binding.atom/> - </reference> - </component> - - <component name="ContributionCollectionComponent"> - <implementation.java class="org.apache.tuscany.sca.domain.manager.impl.ContributionCollectionImpl"/> - <property name="workspaceFile">workspace.xml</property> - <property name="deploymentContributionDirectory">cloud</property> - <service name="ItemCollection"> - <t:binding.atom uri="http://localhost:9990/workspace" title="Contributions"/> - </service> - <reference name="domainManagerConfiguration" target="DomainManagerConfigurationComponent"/> - </component> - - <component name="ContributionServiceComponent"> - <implementation.java class="org.apache.tuscany.sca.domain.manager.impl.ContributionServiceImpl"/> - <service name="Servlet"> - <t:binding.http uri="http://localhost:9990/contribution"/> - </service> - <reference name="contributionCollection" target="ContributionCollectionComponent/LocalItemCollection"/> - </component> - - <component name="FileCollectionComponent"> - <implementation.java class="org.apache.tuscany.sca.domain.manager.impl.FileCollectionImpl"/> - <property name="directoryName">files</property> - <service name="ItemCollection"> - <t:binding.atom uri="http://localhost:9990/feed/files" title="Files"/> - </service> - <reference name="domainManagerConfiguration" target="DomainManagerConfigurationComponent"/> - </component> - - <component name="FileServiceComponent"> - <implementation.java class="org.apache.tuscany.sca.domain.manager.impl.FileServiceImpl"/> - <property name="directoryName">files</property> - <service name="Servlet"> - <t:binding.http uri="http://localhost:9990/files"/> - </service> - <reference name="domainManagerConfiguration" target="DomainManagerConfigurationComponent"/> - </component> - - <component name="DomainCompositeCollectionComponent"> - <implementation.java class="org.apache.tuscany.sca.domain.manager.impl.DeployedCompositeCollectionImpl"/> - <property name="compositeFile">domain.composite</property> - <service name="ItemCollection"> - <t:binding.atom uri="http://localhost:9990/composite" title="Domain Composite"/> - </service> - <reference name="deployableCollection" target="DeployableCompositeCollectionComponent/LocalItemCollection"/> - <reference name="domainManagerConfiguration" target="DomainManagerConfigurationComponent"/> - </component> - - <component name="DeployableCompositeServiceComponent"> - <implementation.java class="org.apache.tuscany.sca.domain.manager.impl.DeployableCompositeServiceImpl"/> - <service name="Servlet"> - <t:binding.http uri="http://localhost:9990/composite-source"/> - </service> - <reference name="deployableCollection" target="DeployableCompositeCollectionComponent/LocalItemCollection"/> - <reference name="domainManagerConfiguration" target="DomainManagerConfigurationComponent"/> - </component> - - <component name="DeployableCompositeCollectionComponent"> - <implementation.java class="org.apache.tuscany.sca.domain.manager.impl.DeployableCompositeCollectionImpl"/> - <service name="ItemCollection"> - <t:binding.atom uri="http://localhost:9990/deployable" title="Deployable Composites"/> - </service> - <reference name="domainManagerConfiguration" target="DomainManagerConfigurationComponent"/> - <reference name="contributionCollection" target="ContributionCollectionComponent/LocalItemCollection"/> - </component> - - <component name="CompositeGeneratorServiceComponent"> - <implementation.java class="org.apache.tuscany.sca.domain.manager.impl.CompositeGeneratorServiceImpl"/> - <service name="Servlet"> - <t:binding.http uri="http://localhost:9990/composite-generated"/> - </service> - <reference name="domainManagerConfiguration" target="DomainManagerConfigurationComponent"/> - <reference name="contributionCollection" target="ContributionCollectionComponent/LocalItemCollection"/> - </component> - - <component name="CompositeConfigurationServiceComponent"> - <implementation.java class="org.apache.tuscany.sca.domain.manager.impl.CompositeConfigurationServiceImpl"/> - <service name="Servlet"> - <t:binding.http uri="http://localhost:9990/composite-resolved"/> - </service> - <reference name="domainManagerConfiguration" target="DomainManagerConfigurationComponent"/> - <reference name="contributionCollection" target="ContributionCollectionComponent/LocalItemCollection"/> - <reference name="domainCompositeCollection" target="DomainCompositeCollectionComponent/LocalItemCollection"/> - <reference name="cloudCollection" target="CloudCollectionComponent/LocalItemCollection"/> - </component> - - <component name="CloudCollectionComponent"> - <implementation.java class="org.apache.tuscany.sca.domain.manager.impl.DeployedCompositeCollectionImpl"/> - <property name="compositeFile">cloud.composite</property> - <property name="deploymentContributionDirectory">cloud</property> - <service name="ItemCollection"> - <t:binding.atom uri="http://localhost:9990/cloud" title="Cloud"/> - </service> - <reference name="deployableCollection" target="DeployableCompositeCollectionComponent/LocalItemCollection"/> - <reference name="processCollection" target="NodeProcessCollectionFacadeComponent/LocalItemCollection"/> - <reference name="domainManagerConfiguration" target="DomainManagerConfigurationComponent"/> - </component> - - <component name="CloudCompositeServiceComponent"> - <implementation.java class="org.apache.tuscany.sca.domain.manager.impl.DeployableCompositeServiceImpl"/> - <service name="Servlet"> - <t:binding.http uri="http://localhost:9990/cloud-source"/> - </service> - <reference name="deployableCollection" target="DeployableCompositeCollectionComponent/LocalItemCollection"/> - <reference name="domainManagerConfiguration" target="DomainManagerConfigurationComponent"/> - </component> - - <component name="CompositeConfigurationCollectionComponent"> - <implementation.java class="org.apache.tuscany.sca.domain.manager.impl.CompositeConfigurationCollectionImpl"/> - <service name="ItemCollection"> - <t:binding.atom uri="http://localhost:9990/composite-config" title="Node Configuration"/> - </service> - <reference name="contributionCollection" target="ContributionCollectionComponent/LocalItemCollection"/> - <reference name="cloudCollection" target="CloudCollectionComponent/LocalItemCollection"/> - </component> - - <component name="NodeConfigurationServiceComponent"> - <implementation.java class="org.apache.tuscany.sca.domain.manager.impl.NodeConfigurationServiceImpl"/> - <service name="Servlet"> - <t:binding.http uri="http://localhost:9990/node-config"/> - </service> - <reference name="contributionCollection" target="ContributionCollectionComponent/LocalItemCollection"/> - <reference name="cloudCollection" target="CloudCollectionComponent/LocalItemCollection"/> - </component> - - <component name="QuickStartServiceComponent"> - <implementation.java class="org.apache.tuscany.sca.domain.manager.impl.QuickStartServiceImpl"/> - <service name="Servlet"> - <t:binding.http uri="http://localhost:9990/quickstart"/> - </service> - <reference name="contributionCollection" target="ContributionCollectionComponent/LocalItemCollection"/> - <reference name="deployableCollection" target="DeployableCompositeCollectionComponent/LocalItemCollection"/> - <reference name="domainCompositeCollection" target="DomainCompositeCollectionComponent/LocalItemCollection"/> - <reference name="cloudCollection" target="CloudCollectionComponent/LocalItemCollection"/> - <reference name="processCollection" target="NodeProcessCollectionComponent/LocalItemCollection"/> - </component> - - <component name="NodeProcessCollectionFacadeComponent"> - <implementation.java class="org.apache.tuscany.sca.domain.manager.impl.NodeProcessCollectionFacadeImpl"/> - <service name="ItemCollection"> - <t:binding.atom uri="http://localhost:9990/processes" title="Log"/> - </service> - <reference name="domainManagerConfiguration" target="DomainManagerConfigurationComponent"/> - <reference name="cloudCollection" target="CloudCollectionComponent/LocalItemCollection"/> - <reference name="processCollection" target="NodeProcessCollectionComponent/ItemCollection"> - <t:binding.atom/> - </reference> - </component> - - <component name="NodeProcessCollectionComponent"> - <implementation.java class="org.apache.tuscany.sca.implementation.node.manager.NodeProcessCollectionImpl"/> - <service name="ItemCollection"> - <t:binding.atom uri="http://localhost:9990/node/processes" title="Log"/> - </service> - </component> - - <component name="PingServiceComponent"> - <implementation.java class="org.apache.tuscany.sca.implementation.node.manager.PingServiceImpl"/> - <service name="Servlet"> - <t:binding.http uri="http://localhost:9990/ping"/> - </service> - </component> - - <component name="DomainManagerConfigurationComponent"> - <implementation.java class="org.apache.tuscany.sca.domain.manager.impl.DomainManagerConfigurationImpl"/> - </component> - -</composite> diff --git a/branches/sca-android/modules/domain-manager/src/main/resources/cloud-gadget.html b/branches/sca-android/modules/domain-manager/src/main/resources/cloud-gadget.html deleted file mode 100644 index 619df54ede..0000000000 --- a/branches/sca-android/modules/domain-manager/src/main/resources/cloud-gadget.html +++ /dev/null @@ -1,408 +0,0 @@ -<!-- - * 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. ---> -<html> -<head> -<title>SCA Domain - Cloud</title> - -<script type="text/javascript" src="../cloud-gadget/cloud-gadget.js"></script> -<script type="text/javascript" src="utils.js"></script> - -<link rel="stylesheet" type="text/css" href="manager.css"> -</head> - -<body> - <div id="cloudComposite"> - - <form id="cloudCompositeForm"> - <div id="composites" ></div> - <br> - ><a href="" id="addNodeLink">Add</a> - <a href="" id="deleteNodeLink">Delete</a> - - <a href="" id="startNodeLink">Start</a> - <a href="" id="stopNodeLink">Stop</a> - </form> - - <div id="newNode" style="visibility: hidden;"> - <form id="newNodeForm"> - <table width="100%"> - <tr><th>Add a Node</th></tr> - <tr><td>Add a node to the cloud. The node will run the SCA components declared in the specified composite.</td></tr> - </table> - <br> - <table> - <tr><td>Node name:</td><td><input type="text" name="nodeName" size="50"/></td><td>e.g. YourNode</td></tr> - <tr><td>Node URI:</td><td><input type="text" name="nodeURI" size="50"/></td></td><td>e.g. http://yourhost:8080</td></tr> - <tr><td>Composite namespace:</td><td><input type="text" name="compositeNamespace" size="50"/></td></td><td>e.g. http://your/namespace</td></tr> - <tr><td>Composite name:</td><td><input type="text" name="compositeName" size="50"/></td></td><td>e.g. yourcomposite</td></tr> - <tr><td>Contribution URI:</td><td><input type="text" name="contributionURI" size="50"/></td></td><td>e.g. yourcontrib, http://yourcontrib</td></tr> - </table> - <input id="addNodeButton" type="button" value="Add" /> - </form> - </div> - - </div> -</body> - -<script type="text/javascript"> - - //@Reference - var cloudComposite = new Reference("cloudComposite"); - - //@Reference - var domainComposite = new Reference("domainComposite"); - - //@Reference - var processCollection = new Reference("processCollection"); - - var gadget = gadget(window, document); - if (gadget.showStatus == null) { - gadget.showStatus = true; - } - if (gadget.showConfigurations == null) { - gadget.showConfigurations = true; - } - - var cloudCompositeForm = elementByID(gadget, 'cloudCompositeForm'); - var compositesElement = elementByID(gadget, 'composites'); - var newNodeElement = elementByID(gadget, 'newNode'); - var newNodeForm = elementByID(gadget, 'newNodeForm'); - - var nodeNames; - var deployedComposites = new Array(); - - function getNodes() { - cloudComposite.get("", getNodesResponse); - } - - function contributionURI(id) { - var i = id.indexOf(';'); - return id.substring(10, i); - } - - function compositeName(id) { - var i = id.indexOf(';'); - return id.substring(i + 1); - } - - function compositeLocalName(id) { - name = compositeName(id); - var i = name.indexOf(';'); - return name.substring(i + 1); - } - - function getNodesResponse(feed) { - nodeNames = new Array(); - if (feed != null) { - var entries = feed.getElementsByTagName("entry"); - var composites = ""; - composites += '<table width="100%">'; - composites += '<tr><th>Node</th>'; - if (gadget.showStatus) { - composites += '<th>Status</th>'; - } - if (gadget.showComposites) { - composites += '<th>Composite</th>'; - } - if (gadget.showContributions) { - composites += '<th>Contribution</th>'; - } - if (gadget.showConfigurations) { - composites += '<th>Node Config</th>'; - } - composites += '</tr>'; - - for (var i=0; i<entries.length; i++) { - var nodeId = entries[i].getElementsByTagName("id")[0].firstChild.nodeValue; - var links = entries[i].getElementsByTagName("link"); - var nodeLink = undefined; - var compositeLink = undefined; - var compositeId = "composite:undefined;undefined;undefined"; - var uri = '<span style="color: red">unknown</span>'; - var qname = undefined; - for (var l = 0; l < links.length; l++) { - var a = links[l].getAttribute('rel'); - if (a == undefined) { - nodeLink = links[l].getAttribute('href'); - } else if (a == 'related') { - compositeLink = links[l].getAttribute('href'); - var c = compositeLink.indexOf('composite:'); - compositeId = compositeLink.substring(c); - uri = contributionURI(compositeId); - qname = compositeName(compositeId); - } - } - - var nodeName = compositeLocalName(nodeId); - nodeNames[i] = nodeName; - - var content = ""; - if (entries[i].getElementsByTagName("content")[0].firstChild != null) { - content = entries[i].getElementsByTagName("content")[0].firstChild.nodeValue; - } - - composites += '<tr>' - if (content.indexOf('<span id="problem"') != -1) { - composites += '<td><input name="composites" type="checkbox" value="' + nodeId + '">' + - '<a href=\"' + nodeLink + '\">' + nodeName + '</a></td>'; - if (gadget.showStatus) { - composites += '<td><span id="status_' + nodeName + '">unknown</span></td>'; - } - if (gadget.showComposites) { - composites += '<td>' + content + '</td>'; - } - if (gadget.showContributions) { - composites += '<td>' + uri + '</td>'; - } - } else { - composites += '<td><input name="composites" type="checkbox" value="' + nodeId + '">' + - '<a href=\"' + nodeLink + '\">' + nodeName + '</a></td>'; - if (gadget.showStatus) { - composites += '<td><span id="status_' + nodeName + '">unknown</span></td>'; - } - if (gadget.showComposites) { - composites += '<td><a href=\"' + compositeLink + '\">' + qname + '</a></td>'; - } - if (gadget.showContributions) { - composites += '<td><a href="/contribution/' + uri + '">' + uri + '</a></td>'; - } - } - if (gadget.showConfigurations) { - composites += '<td><a href="/node-config/' + nodeName + '"><img src="icons/feed-icon.png" border="0"></a></td>'; - } - composites += '</tr>'; - } - composites += '</table>'; - compositesElement.innerHTML = composites; - - processCollection.get("", getProcessesResponse); - } - } - - function getProcessesResponse(feed) { - if (feed != null) { - var nodeStatus = new Array(); - - var entries = feed.getElementsByTagName("entry"); - for (var i=0; i<entries.length; i++) { - var nodeName = entries[i].getElementsByTagName("id")[0].firstChild.nodeValue; - nodeStatus[nodeName] = 'started'; - } - - if (gadget.showStatus) { - for (var i = 0; i < nodeNames.length; i++) { - var element = elementByID(gadget, 'status_' + nodeNames[i]); - var nodeName = nodeNames[i]; - if (nodeStatus[nodeName] == null) { - element.innerHTML = '<span>stopped</span>'; - } else { - element.innerHTML = '<span><a style="color: green" href="/processes/?node=' + nodeName + '">started</a></span>'; - } - } - } - } - } - - function deleteNode() { - var composites = array(cloudCompositeForm.composites); - for (var i = 0; i < composites.length; i++) { - if (composites[i].checked) { - var id = composites[i].value; - cloudComposite.del(id, deleteNodeResponse); - } - } - return false; - } - - function deleteNodeResponse() { - getNodes(); - } - - function addNode() { - var nodeName = newNodeForm.nodeName.value; - var nodeURI = newNodeForm.nodeURI.value; - var compositeNamespace = newNodeForm.compositeNamespace.value; - var compositeName = newNodeForm.compositeName.value; - var contributionURI = newNodeForm.contributionURI.value; - var id = 'composite:' + - 'http://tuscany.apache.org/cloud' + ';' + - 'http://tuscany.apache.org/cloud' + ';' + - nodeName; - - var entry = '<entry xmlns="http://www.w3.org/2005/Atom">\n' + - '<id>' + id + '</id>\n' + - '<content type="text/xml">\n' + - '<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"\n' + - ' xmlns:t="http://tuscany.apache.org/xmlns/sca/1.0"\n' + - ' targetNamespace="http://tuscany.apache.org/cloud"\n' + - ' xmlns:c="' + compositeNamespace + '"\n' + - ' name="' + nodeName + '">\n' + - '\n' + - ' <component name="' + nodeName + '">\n' + - ' <t:implementation.node uri="' + contributionURI + '" composite="c:' + compositeName + '"/>\n' + - ' <service name="Node">\n' + - ' <binding.ws uri="' + nodeURI + '"/>\n' + - ' <t:binding.http uri="' + nodeURI + '"/>\n' + - ' <t:binding.jsonrpc uri="' + nodeURI + '"/>\n' + - ' <t:binding.atom uri="' + nodeURI + '"/>\n' + - ' </service>\n' + - ' </component>\n' + - '</composite>' + - '</content>' + - '</entry>'; - cloudComposite.post(entry, addNodeResponse); - } - - function addNodeResponse() { - newNodeForm.nodeName.value = ""; - newNodeForm.nodeURI.value = ""; - newNodeForm.compositeNamespace.value = ""; - newNodeForm.compositeName.value = ""; - newNodeForm.contributionURI.value = ""; - getNodes(); - } - - function startNode() { - var composites = array(cloudCompositeForm.composites); - for (var i = 0; i < composites.length; i++) { - if (composites[i].checked) { - var id = nodeNames[i]; - - var entry = '<entry xmlns="http://www.w3.org/2005/Atom">' + - '<id>' + id + '</id>' + - '</entry>'; - processCollection.post(entry, startNodeResponse); - } - } - return false; - } - - function startNodeResponse() { - processCollection.get("", getProcessesResponse); - - var composites = array(cloudCompositeForm.composites); - for (var i = 0; i < composites.length; i++) { - if (composites[i].checked) { - composites[i].checked = false; - } - } - } - - function stopNode() { - var composites = array(cloudCompositeForm.composites); - for (var i = 0; i < composites.length; i++) { - if (composites[i].checked) { - var id = nodeNames[i]; - processCollection.del(id, stopNodeResponse); - } - } - return false; - } - - function stopNodeResponse() { - processCollection.get("", getProcessesResponse); - - var composites = array(cloudCompositeForm.composites); - for (var i = 0; i < composites.length; i++) { - if (composites[i].checked) { - composites[i].checked = false; - } - } - } - - function getComposites() { - domainComposite.get("", getCompositesResponse); - } - - function getCompositesResponse(feed) { - if (feed != null) { - var entries = feed.getElementsByTagName("entry"); - for (var i=0; i<entries.length; i++) { - var id = entries[i].getElementsByTagName("id")[0].firstChild.nodeValue; - deployedComposites[id] = id; - } - } - } - - function suggestCompositeNamespaces() { - var namespaces = new Array(); - for (var uri in deployedComposites) { - var qname = compositeName(uri); - var ns = qname.substring(0, qname.indexOf(';')); - namespaces[ns] = ns; - } - return array(namespaces); - } - - function suggestCompositeNames() { - var inputns = newNodeForm.compositeNamespace.value; - var names = new Array(); - for (var uri in deployedComposites) { - var qname = compositeName(uri); - var sc = qname.indexOf(';'); - var ns = qname.substring(0, sc); - var name = qname.substring(sc + 1); - if (ns == inputns || inputns == "") { - names[name] = name; - } - } - return array(names); - } - - function suggestContributionURIs() { - var inputns = newNodeForm.compositeNamespace.value; - var inputname = newNodeForm.compositeName.value; - var uris = new Array(); - for (var uri in deployedComposites) { - var qname = compositeName(uri); - var sc = qname.indexOf(';'); - var ns = qname.substring(0, sc); - var name = qname.substring(sc + 1); - if ((ns == inputns || inputns == "") && (name == inputname || inputname == "")) { - var curi = contributionURI(uri); - uris[curi] = curi; - } - } - return array(uris); - } - - function toggleNewNode() { - var visibility = newNodeElement.style.visibility; - if (visibility == 'hidden') { - newNodeElement.style.visibility = 'visible'; - } else { - newNodeElement.style.visibility = 'hidden'; - } - return false; - } - - elementByID(gadget, 'deleteNodeLink').onclick = deleteNode; - elementByID(gadget, 'addNodeLink').onclick = toggleNewNode; - elementByID(gadget, 'startNodeLink').onclick = startNode; - elementByID(gadget, 'stopNodeLink').onclick = stopNode; - elementByID(gadget, 'addNodeButton').onclick = addNode; - - getNodes(); - getComposites(); - suggest(newNodeForm.compositeNamespace, suggestCompositeNamespaces); - suggest(newNodeForm.compositeName, suggestCompositeNames); - suggest(newNodeForm.contributionURI, suggestContributionURIs); - -</script> -</html> diff --git a/branches/sca-android/modules/domain-manager/src/main/resources/cloud.html b/branches/sca-android/modules/domain-manager/src/main/resources/cloud.html deleted file mode 100644 index d661d5d38b..0000000000 --- a/branches/sca-android/modules/domain-manager/src/main/resources/cloud.html +++ /dev/null @@ -1,68 +0,0 @@ -<!-- - * 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. ---> -<html> -<head> -<title>SCA Domain - Cloud</title> - -<script type="text/javascript" src="utils.js"></script> - -<link rel="stylesheet" type="text/css" href="manager.css"> -</head> - -<body> - <div id="toolbarGadgetDiv"></div> - <br> - - <span class=hd1> - SCA Domain<br><br> - Cloud</b> <a href="/cloud/"><img src="icons/feed-icon.png" border="0"></a> - </span> - <br> - Here is the list of SCA nodes configured in your SCA domain cloud. - <br><br> - - <div id="cloudGadgetDiv"></div> - - <iframe id="toolbarGadget" src="toolbar-gadget.html"></iframe> - <iframe id="cloudGadget" src="cloud-gadget.html"></iframe> -</body> - -<script type="text/javascript"> - var toolbarGadgetDiv = elementByID(document, 'toolbarGadgetDiv'); - var cloudGadgetDiv = elementByID(document, 'cloudGadgetDiv'); - - var toolbarGadget = elementByID(document, 'toolbarGadget'); - var cloudGadget = elementByID(document, 'cloudGadget'); - - function ongadget(win, doc) { - if (doc == content(toolbarGadget)) { - toolbarGadgetDiv.innerHTML = doc.body.innerHTML; - return toolbarGadgetDiv; - } else if (doc == content(cloudGadget)) { - cloudGadgetDiv.innerHTML = doc.body.innerHTML; - cloudGadgetDiv.showStatus = true; - cloudGadgetDiv.showComposites = true; - cloudGadgetDiv.showContributions = true; - cloudGadgetDiv.showConfigurations = true; - return cloudGadgetDiv; - } - return document; - } -</script> -</html> diff --git a/branches/sca-android/modules/domain-manager/src/main/resources/composite-gadget.html b/branches/sca-android/modules/domain-manager/src/main/resources/composite-gadget.html deleted file mode 100644 index 82855a410a..0000000000 --- a/branches/sca-android/modules/domain-manager/src/main/resources/composite-gadget.html +++ /dev/null @@ -1,277 +0,0 @@ -<!-- - * 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. ---> -<html> -<head> -<title>SCA Domain - Domain Composite</title> - -<script type="text/javascript" src="../composite-gadget/composite-gadget.js"></script> -<script type="text/javascript" src="utils.js"></script> - -<link rel="stylesheet" type="text/css" href="manager.css"> -</head> - -<body> - <div id="domainComposite"> - - <form id="domainCompositeForm"> - <div id="composites" ></div> - <br> - ><a href="" id="addCompositeLink">Add</a> - <a href="" id="deleteCompositeLink">Delete</a> - </form> - - <div id="newComposite" style="visibility: hidden;"> - <form id="newCompositeForm"> - <table width="100%"> - <tr><th>Add Composite</th></tr> - <tr><td>Add an SCA composite describing your SCA service components.</td></tr> - </table> - <br> - <table> - <tr><td>Composite namespace:</td><td><input type="text" name="compositeNamespace" size="50"/></td><td>e.g. http://your/namespace</td></tr> - <tr><td>Composite name:</td><td><input type="text" name="compositeName" size="50"/></td><td>e.g. yourcomposite</td></tr> - <tr><td>Contribution URI:</td><td><input type="text" name="contributionURI" size="50"/></td><td>e.g. yourcontrib, http://yourcontrib</td></tr> - </table> - <input id="addCompositeButton" type="button" value="Add" /> - </form> - </div> - - </div> -</body> - -<script type="text/javascript"> - //@Reference - var domainComposite = new Reference("domainComposite"); - - //@Reference - var workspace = new Reference("workspace"); - - var gadget = gadget(window, document); - if (gadget.showContributions == null) { - gadget.showContributions = true; - } - - var domainCompositeForm = elementByID(gadget, 'domainCompositeForm'); - var compositesElement = elementByID(gadget, 'composites'); - var newCompositeElement = elementByID(gadget, 'newComposite'); - var newCompositeForm = elementByID(gadget, 'newCompositeForm'); - - var contributedComposites = new Array(); - - function getComposites() { - domainComposite.get("", getCompositesResponse); - } - - function contributionURI(id) { - var i = id.indexOf(';'); - return id.substring(10, i); - } - - function compositeName(id) { - var i = id.indexOf(';'); - return id.substring(i + 1); - } - - function getCompositesResponse(feed) { - if (feed != null) { - var entries = feed.getElementsByTagName("entry"); - var composites = ""; - composites += '<table width="100%">'; - composites += '<tr><th>Composite</th>'; - if (gadget.showContributions) { - composites += '<th>Contribution</th>'; - } - if (gadget.showComponents) { - composites += '<th>Components</th>'; - } - composites += '</tr>'; - //'<th>Composite Configuration</th>' + - - for (var i=0; i<entries.length; i++) { - var id = entries[i].getElementsByTagName("id")[0].firstChild.nodeValue; - var link = entries[i].getElementsByTagName("link")[0].getAttribute("href"); - var uri = contributionURI(id); - var qname = compositeName(id); - - var content = ""; - if (entries[i].getElementsByTagName("content")[0].firstChild != null) { - content = entries[i].getElementsByTagName("content")[0].firstChild.nodeValue; - } - var components = ''; - var bs = content.indexOf('<span id="components">'); - if (bs != -1) { - var es = content.indexOf('</span>', bs); - components = content.substring(bs, es + 7); - } else { - bs = content.indexOf('<span id="problem"'); - if (bs != -1) { - var es = content.indexOf('</span>', bs); - components = content.substring(bs, es + 7); - } - } - - composites += '<tr>' - composites += '<td><input name="composites" type="checkbox" value="' + id + '">'; - composites += '<a href=\"' + link + '\">' + qname + '</a></td>'; - if (gadget.showContributions) { - composites += '<td><a href="/contribution/' + uri + '">' + uri + '</a></td>'; - } - if (gadget.showComponents) { - composites += '<td class=tdw>' + components + '</td>'; - } - //composites += '<td><a href="/composite-config/?composite=' + id + '"><img src="icons/feed-icon.png" border="0"></a></td>'; - composites += '</tr>'; - } - composites += '</table>'; - compositesElement.innerHTML = composites; - } - } - - function deleteComposite() { - var composites = array(domainCompositeForm.composites); - for (var i = 0; i < composites.length; i++) { - if (composites[i].checked) { - var id = composites[i].value; - domainComposite.del(id, deleteCompositeResponse); - } - } - return false; - } - - function deleteCompositeResponse() { - getComposites(); - } - - function addComposite() { - var id = 'composite:' + - newCompositeForm.contributionURI.value + ';' + - newCompositeForm.compositeNamespace.value + ';' + - newCompositeForm.compositeName.value; - var entry = '<entry xmlns="http://www.w3.org/2005/Atom">' + - '<title>' + id +'</title>' + - '<id>' + id + '</id>' + - '</entry>'; - domainComposite.post(entry, addCompositeResponse); - } - - function addCompositeResponse() { - newCompositeForm.compositeNamespace.value = ""; - newCompositeForm.compositeName.value = ""; - newCompositeForm.contributionURI.value = ""; - getComposites(); - } - - function getContributions() { - workspace.get("", getContributionsResponse); - } - - function getContributionsResponse(feed) { - if (feed != null) { - contributedComposites = new Array(); - var entries = feed.getElementsByTagName("entry"); - for (var i=0; i<entries.length; i++) { - if (entries[i].getElementsByTagName("content")[0].firstChild != null) { - var content = entries[i].getElementsByTagName("content")[0].firstChild.nodeValue; - var bs = content.indexOf('<span id="deployables">'); - if (bs != -1) { - var es = content.indexOf('</span>', bs); - content = content.substring(bs, es + 7); - for (;;) { - var bc = content.indexOf('composite:'); - if (bc == -1) { - break; - } - var ec = content.indexOf('">', bc); - if (ec == -1) { - break; - } - var uri = content.substring(bc, ec); - contributedComposites[uri] = uri; - content = content.substring(ec +1); - } - } - } - } - } - } - - function suggestCompositeNamespaces() { - var namespaces = new Array(); - for (var uri in contributedComposites) { - var qname = compositeName(uri); - var ns = qname.substring(0, qname.indexOf(';')); - namespaces[ns] = ns; - } - return array(namespaces); - } - - function suggestCompositeNames() { - var inputns = newCompositeForm.compositeNamespace.value; - var names = new Array(); - for (var uri in contributedComposites) { - var qname = compositeName(uri); - var sc = qname.indexOf(';'); - var ns = qname.substring(0, sc); - var name = qname.substring(sc + 1); - if (ns == inputns || inputns == "") { - names[name] = name; - } - } - return array(names); - } - - function suggestContributionURIs() { - var inputns = newCompositeForm.compositeNamespace.value; - var inputname = newCompositeForm.compositeName.value; - var uris = new Array(); - for (var uri in contributedComposites) { - var qname = compositeName(uri); - var sc = qname.indexOf(';'); - var ns = qname.substring(0, sc); - var name = qname.substring(sc + 1); - if ((ns == inputns || inputns == "") && (name == inputname || inputname == "")) { - var curi = contributionURI(uri); - uris[curi] = curi; - } - } - return array(uris); - } - - function toggleNewComposite() { - var visibility = newCompositeElement.style.visibility; - if (visibility == 'hidden') { - newCompositeElement.style.visibility = 'visible'; - } else { - newCompositeElement.style.visibility = 'hidden'; - } - return false; - } - - elementByID(gadget, 'deleteCompositeLink').onclick = deleteComposite; - elementByID(gadget, 'addCompositeLink').onclick = toggleNewComposite; - elementByID(gadget, 'addCompositeButton').onclick = addComposite; - - getComposites(); - getContributions(); - suggest(newCompositeForm.compositeNamespace, suggestCompositeNamespaces); - suggest(newCompositeForm.compositeName, suggestCompositeNames); - suggest(newCompositeForm.contributionURI, suggestContributionURIs); - -</script> -</html> diff --git a/branches/sca-android/modules/domain-manager/src/main/resources/composite.html b/branches/sca-android/modules/domain-manager/src/main/resources/composite.html deleted file mode 100644 index b0631e1d66..0000000000 --- a/branches/sca-android/modules/domain-manager/src/main/resources/composite.html +++ /dev/null @@ -1,66 +0,0 @@ -<!-- - * 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. ---> -<html> -<head> -<title>SCA Domain - Domain Composite</title> - -<script type="text/javascript" src="utils.js"></script> - -<link rel="stylesheet" type="text/css" href="manager.css"> -</head> - -<body> - <div id="toolbarGadgetDiv"></div> - <br> - - <span class=hd1> - SCA Domain<br><br> - Domain Composite <a href="/composite/"><img src="icons/feed-icon.png" border="0"></a> - </span> - <br> - Here is the list of SCA composites currently included as top-level composites in your SCA domain. - <br><br> - - <div id="compositeGadgetDiv"></div> - - <iframe id="toolbarGadget" src="toolbar-gadget.html"></iframe> - <iframe id="compositeGadget" src="composite-gadget.html"></iframe> -</body> - -<script type="text/javascript"> - var toolbarGadgetDiv = elementByID(document, 'toolbarGadgetDiv'); - var compositeGadgetDiv = elementByID(document, 'compositeGadgetDiv'); - - var toolbarGadget = elementByID(document, 'toolbarGadget'); - var compositeGadget = elementByID(document, 'compositeGadget'); - - function ongadget(win, doc) { - if (doc == content(toolbarGadget)) { - toolbarGadgetDiv.innerHTML = doc.body.innerHTML; - return toolbarGadgetDiv; - } else if (doc == content(compositeGadget)) { - compositeGadgetDiv.innerHTML = doc.body.innerHTML; - compositeGadgetDiv.showContributions = true; - compositeGadgetDiv.showComponents = true; - return compositeGadgetDiv; - } - return document; - } -</script> -</html> diff --git a/branches/sca-android/modules/domain-manager/src/main/resources/files-gadget.html b/branches/sca-android/modules/domain-manager/src/main/resources/files-gadget.html deleted file mode 100644 index 83315a1957..0000000000 --- a/branches/sca-android/modules/domain-manager/src/main/resources/files-gadget.html +++ /dev/null @@ -1,124 +0,0 @@ -<!-- - * 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. ---> -<html> -<head> -<title>SCA Domain - Contribution File Server</title> - -<script type="text/javascript" src="../files-gadget/files-gadget.js"></script> -<script type="text/javascript" src="utils.js"></script> - -<link rel="stylesheet" type="text/css" href="manager.css"> -</head> - -<body> - <div id="fileServer"> - - <form id="filesForm"> - <div id="files" ></div> - <br> - ><a href="" id="uploadFileLink">Upload</a> - <a href="" id="deleteFileLink">Delete</a> - </form> - - <div id="uploadFile" style="visibility: hidden;"> - <form method="post" id="uploadFileForm" enctype='multipart/form-data' action='/files'> - <table width="100%"> - <tr><th>Upload File</th></tr> - <tr><td>Upload a file to the server.</td></tr> - </table> - <br> - <table border="0"> - <tr><td>File:</td><td><input type="file" name="file" size="50"/></td></tr> - </table> - <br/> - <input id="uploadFileButton" type="button" value="Upload" /> - </form> - </div> - - </div> -</body> - -<script type="text/javascript"> - //@Reference - var files = new Reference("files"); - - var gadget = gadget(window, document); - - var filesForm = elementByID(gadget, "filesForm"); - var filesElement = elementByID(gadget, 'files'); - var uploadFileElement = elementByID(gadget, 'uploadFile'); - var uploadFileForm = elementByID(gadget, 'uploadFileForm'); - - function getFiles() { - files.get("", getFilesResponse); - } - - function getFilesResponse(feed) { - if (feed != null) { - var entries = feed.getElementsByTagName("entry"); - var list = '<table width="100%"><tr><th>Files</th></tr>'; - for (var i=0; i<entries.length; i++) { - var id = entries[i].getElementsByTagName("id")[0].firstChild.nodeValue; - var location = entries[i].getElementsByTagName("link")[0].getAttribute("href"); - list += '<tr><td><input name="files" type="checkbox" value="' + id + '">' + - '<a href=\"' + location + '\">' + id + '</a></td></tr>'; - } - list += "</table>"; - filesElement.innerHTML = list; - } - } - - function deleteFile() { - var list = array(filesForm.files); - for (var i=0; i < list.length; i++) { - if (list[i].checked) { - var id = list[i].value; - files.del(id, deleteFileResponse); - } - } - return false; - } - - function deleteFileResponse() { - getFiles(); - } - - function uploadFile() { - uploadFileForm.submit(); - return false; - } - - function toggleUploadFile() { - var visibility = uploadFileElement.style.visibility; - if (visibility == 'hidden') { - uploadFileElement.style.visibility = 'visible'; - } else { - uploadFileElement.style.visibility = 'hidden'; - } - return false; - } - - elementByID(gadget, 'deleteFileLink').onclick = deleteFile; - elementByID(gadget, 'uploadFileLink').onclick = toggleUploadFile; - elementByID(gadget, 'uploadFileButton').onclick = uploadFile; - - getFiles(); - -</script> -</html> diff --git a/branches/sca-android/modules/domain-manager/src/main/resources/files.html b/branches/sca-android/modules/domain-manager/src/main/resources/files.html deleted file mode 100644 index 37d89e7665..0000000000 --- a/branches/sca-android/modules/domain-manager/src/main/resources/files.html +++ /dev/null @@ -1,64 +0,0 @@ -<!-- - * 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. ---> -<html> -<head> -<title>SCA Domain - Contribution File Server</title> - -<script type="text/javascript" src="utils.js"></script> - -<link rel="stylesheet" type="text/css" href="manager.css"> -</head> - -<body> - <div id="toolbarGadgetDiv"></div> - <br> - - <span class=hd1> - SCA Domain<br><br> - File Server <a href="/feed/files/"><img src="icons/feed-icon.png" border="0"></a> - </span> - <br> - This is a simple ATOM-based file server useful to share files if you don't have an FTP, SVN or Maven repository. - <br><br> - - <div id="filesGadgetDiv"></div> - - <iframe id="toolbarGadget" src="toolbar-gadget.html"></iframe> - <iframe id="filesGadget" src="files-gadget.html"></iframe> -</body> - -<script type="text/javascript"> - var toolbarGadgetDiv = elementByID(document, 'toolbarGadgetDiv'); - var filesGadgetDiv = elementByID(document, 'filesGadgetDiv'); - - var toolbarGadget = elementByID(document, 'toolbarGadget'); - var filesGadget = elementByID(document, 'filesGadget'); - - function ongadget(win, doc) { - if (doc == content(toolbarGadget)) { - toolbarGadgetDiv.innerHTML = doc.body.innerHTML; - return toolbarGadgetDiv; - } else if (doc == content(filesGadget)) { - filesGadgetDiv.innerHTML = doc.body.innerHTML; - return filesGadgetDiv; - } - return document; - } -</script> -</html> diff --git a/branches/sca-android/modules/domain-manager/src/main/resources/home-gadget.html b/branches/sca-android/modules/domain-manager/src/main/resources/home-gadget.html deleted file mode 100644 index 05e262e4df..0000000000 --- a/branches/sca-android/modules/domain-manager/src/main/resources/home-gadget.html +++ /dev/null @@ -1,45 +0,0 @@ -<!-- - * 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. ---> -<html> -<head> -<title>SCA Domain - Home</title> - -<script type="text/javascript" src="../home-gadget/home-gadget.js"></script> -<script type="text/javascript" src="utils.js"></script> - -<link rel="stylesheet" type="text/css" href="manager.css"> -</head> - -<body> - <div id="home"> - - <form> - <table border="0" align="center"> - <tr><td valign="top"><span style="font-size:150%; color: blue">Search:</span></td><td><input type="text" name="search" size="50"/></td></tr> - <tr><td></td><td align="center"><input type="button" name="search" value="Search" /></td></tr> - </table> - </form> - - </div> -</body> - -<script type="text/javascript"> - var gadget = gadget(window, document); -</script> -</html> diff --git a/branches/sca-android/modules/domain-manager/src/main/resources/home.html b/branches/sca-android/modules/domain-manager/src/main/resources/home.html deleted file mode 100644 index aad1856621..0000000000 --- a/branches/sca-android/modules/domain-manager/src/main/resources/home.html +++ /dev/null @@ -1,65 +0,0 @@ -<!-- - * 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. ---> -<html> -<head> -<title>SCA Domain - Home</title> - -<script type="text/javascript" src="utils.js"></script> - -<link rel="stylesheet" type="text/css" href="manager.css"> -</head> - -<body> - <div id="toolbarGadgetDiv"></div> - <br> - - <span class=hd1> - SCA Domain - </span> - <br><br><br><br><br><br> - - <div id="homeGadgetDiv"></div> - - <br><br><br><br><br><br><br> - <center>This page is under construction, searching the domain is not implemented yet.</center> - - <iframe id="toolbarGadget" src="toolbar-gadget.html" style="visibility: hidden;"></iframe> - <iframe id="homeGadget" src="home-gadget.html" style="visibility: hidden;"></iframe> -</body> - -<script type="text/javascript"> - var toolbarGadgetDiv = elementByID(document, 'toolbarGadgetDiv'); - var homeGadgetDiv = elementByID(document, 'homeGadgetDiv'); - - var toolbarGadget = elementByID(document, 'toolbarGadget'); - var homeGadget = elementByID(document, 'homeGadget'); - - function ongadget(win, doc) { - if (doc == content(toolbarGadget)) { - toolbarGadgetDiv.innerHTML = doc.body.innerHTML; - return toolbarGadgetDiv; - } else if (doc == content(homeGadget)) { - homeGadgetDiv.innerHTML = doc.body.innerHTML; - return homeGadgetDiv; - } - return document; - } -</script> - -</html> diff --git a/branches/sca-android/modules/domain-manager/src/main/resources/icons/feed-icon.png b/branches/sca-android/modules/domain-manager/src/main/resources/icons/feed-icon.png Binary files differdeleted file mode 100644 index a59728b2ad..0000000000 --- a/branches/sca-android/modules/domain-manager/src/main/resources/icons/feed-icon.png +++ /dev/null diff --git a/branches/sca-android/modules/domain-manager/src/main/resources/manager.css b/branches/sca-android/modules/domain-manager/src/main/resources/manager.css deleted file mode 100644 index e080ff1d87..0000000000 --- a/branches/sca-android/modules/domain-manager/src/main/resources/manager.css +++ /dev/null @@ -1,104 +0,0 @@ -/* - * 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. - */ - -body { - white-space: nowrap; margin: 2px; -} - -table { - border: 1px; border-collapse: separate -} - -th { - font-weight: bold; white-space: nowrap; background-color: #e5ecf9; color: #598edd; - text-align: left; padding-left: 2px; padding-right: 20px; padding-top: 2px; padding-bottom: 2px; vertical-align: text-top; - border-top: 1px; border-bottom: 1px; border-left: 0px; border-right: 0px; - border-style: solid; border-top-color: #a2bae7; border-bottom-color: #d1d3d4 -} - -td { - padding-left: 2px; padding-top: 2px; padding-right: 20px; white-space: nowrap; vertical-align: text-top -} - -iframe { - visibility: hidden; -} - -input { - vertical-align: middle -} - -a:link { - color: blue -} - -a:visited { - color: blue -} - -.tdw { - padding-left: 2px; padding-top: 2px; padding-right: 20px; white-space: normal; vertical-align: text-top -} - -.hd1 { - font-size:150%; font-weight: bold -} - -.tbar { - margin: 0px; - padding-top: 0px; padding-left: 0px; padding-right: 0px; padding-bottom: 3px; - border-bottom: 1px solid #a2bae7 -} - -.ltbar { - padding-left: 0px; padding-top: 0px; padding-right: 20px; white-space: nowrap; vertical-align: top -} - -.rtbar { - padding-left: 0px; padding-right: 0px; padding-top: 0px; white-space: nowrap; vertical-align: top; - text-align: right -} - -.suggest { - background-color: #e5ecf9; color: #598edd; - border-top: 1px; border-bottom: 1px; border-left: 1px; border-right: 1px; - border-style: solid; border-top-color: #a2bae7; border-bottom-color: #d1d3d4; - border-left-color: #d1d3d4; border-right-color: #d1d3d4; - position: absolute; - overflow: auto; overflow-x: hidden; - cursor: default; - padding: 0px; margin: 0px; -} - -suggestTable { - border: 0px; border-collapse: separate; - padding-left: 5px; padding-right: 5px; padding-top: 2px; padding-bottom: 2px; - margin: 0px; -} - -.suggestItem { - padding-left: 2px; padding-top: 0px; padding-bottom: 0px; padding-right: 2px; white-space: nowrap; vertical-align: text-top; - background-color: #e5ecf9; color: #598edd; -} - -.suggestHilighted { - padding-left: 2px; padding-top: 0px; padding-bottom: 0px; padding-right: 2px; white-space: nowrap; vertical-align: text-top; - background-color: #598edd; color: #e5ecf9; -} - diff --git a/branches/sca-android/modules/domain-manager/src/main/resources/toolbar-gadget.html b/branches/sca-android/modules/domain-manager/src/main/resources/toolbar-gadget.html deleted file mode 100644 index c9389affc3..0000000000 --- a/branches/sca-android/modules/domain-manager/src/main/resources/toolbar-gadget.html +++ /dev/null @@ -1,47 +0,0 @@ -<!-- - * 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. ---> -<html> -<head> -<title>SCA Domain - Toolbar</title> - -<script type="text/javascript" src="utils.js"></script> - -<link rel="stylesheet" type="text/css" href="manager.css"> -</head> - -<body> - <div id="toolbar"></div> -</body> - -<script type="text/javascript"> - var gadget = gadget(window, document); - - var tools = new Array(); - tools[0] = new Tool("Contributions", "../workspace"); - tools[1] = new Tool("Composites", "../composite"); - tools[2] = new Tool("Cloud", "../cloud"); - tools[3] = new Tool("Files", "../files"); - - var home = new Tool("Home", "../home"); - - var toolbarDiv = elementByID(gadget, 'toolbar'); - toolbarDiv.innerHTML = toolbar(home, tools); - -</script> -</html> diff --git a/branches/sca-android/modules/domain-manager/src/main/resources/utils.js b/branches/sca-android/modules/domain-manager/src/main/resources/utils.js deleted file mode 100644 index 77ed807e85..0000000000 --- a/branches/sca-android/modules/domain-manager/src/main/resources/utils.js +++ /dev/null @@ -1,246 +0,0 @@ -/* - * 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. - */ - -/** - * Autocomplete / suggest support for input fields - * - * To use it declare a 'suggest' function as follows: - * function suggestItems() { - * return new Array('abc', 'def', 'ghi'); - * } - * - * then hook it to an input field as follows: - * suggest(document.yourForm.yourInputField, suggestItems); - */ -function selectSuggestion(node, value) { - for (;;) { - node = node.parentNode; - if (node.tagName.toLowerCase() == 'div') { - break; - } - } - node.selectSuggestion(value); -} - -function hilightSuggestion(node, over) { - if (over) { - node.className = 'suggestHilighted'; - } else { - node.className = 'suggestItem'; - } -} - -function suggest(input, suggestFunction) { - - input.suggest = suggestFunction; - - input.selectSuggestion = function(value) { - this.hideSuggestDiv(); - this.value = value; - } - - input.hideSuggestDiv = function() { - if (this.suggestDiv != null) { - this.suggestDiv.style.visibility = 'hidden'; - } - } - - input.showSuggestDiv = function() { - if (this.suggestDiv == null) { - this.suggestDiv = document.createElement('div'); - this.suggestDiv.input = this; - this.suggestDiv.className = 'suggest'; - input.parentNode.insertBefore(this.suggestDiv, input); - this.suggestDiv.style.visibility = 'hidden'; - this.suggestDiv.style.zIndex = '99'; - - this.suggestDiv.selectSuggestion = function(value) { - this.input.selectSuggestion(value); - } - } - - var values = this.suggest(); - var items = ""; - for (var i = 0; i < values.length; i++) { - if (values[i].indexOf(this.value) == -1) { - continue; - } - if (items.length == 0) { - items += '<table class=suggestTable>'; - } - items += '<tr><td class="suggestItem" ' + - 'onmouseover="hilightSuggestion(this, true)" onmouseout="hilightSuggestion(this, false)" ' + - 'onmousedown="selectSuggestion(this, \'' + values[i] + '\')">' + values[i] + '</td></tr>'; - } - if (items.length != 0) { - items += '</table>'; - } - this.suggestDiv.innerHTML = items; - - if (items.length != 0) { - var node = input; - var left = 0; - var top = 0; - for (;;) { - left += node.offsetLeft; - top += node.offsetTop; - node = node.offsetParent; - if (node.tagName.toLowerCase() == 'body') { - break; - } - } - this.suggestDiv.style.left = left; - this.suggestDiv.style.top = top + input.offsetHeight; - this.suggestDiv.style.visibility = 'visible'; - } else { - this.suggestDiv.style.visibility = 'hidden'; - } - } - - input.onkeydown = function(event) { - this.showSuggestDiv(); - }; - - input.onkeyup = function(event) { - this.showSuggestDiv(); - }; - - input.onmousedown = function(event) { - this.showSuggestDiv(); - }; - - input.onblur = function(event) { - setTimeout(function() { input.hideSuggestDiv(); }, 50); - }; -} - -/** - * A Toolbar class - */ -function Tool(name, href) { - this.name = name; - this.href = href; -} - -Tool.prototype.print = function() { - var loc = '' + location; - if (loc.match(this.href) == null) { - return '<a href="' + this.href + '" target="_parent">' + this.name + '</a>'; - } else { - return '<span>' + this.name + '</span>'; - } -} - -/** - * Initialize the toolbar - */ -function toolbar(home, tools) { - var toolbar = '<table width="100%" cellpadding="0" cellspacing="0" class=tbar><tr>' + - '<td class=ltbar><table border="0" cellspacing="0" cellpadding="0"><tr>'; - - for (var i = 0; i < tools.length; i++) { - toolbar = toolbar + '<td class=ltbar>' +tools[i].print() + '</td>' - } - - toolbar = toolbar + '</tr></table></td>' + - '<td class=rtbar><table border="0" cellpadding="0" cellspacing="0" align="right"><tr>' + - '<td class=rtbar>' + home.print() + '</td></tr></table></td>' + - '</tr></table>'; - - return toolbar; -} - -/** - * Return an non-sparse array from an array or an object. - */ -function array(obj) { - if (obj.length == undefined) { - var a = new Array(); - a[0] = obj; - return a; - } - else { - var a = new Array(); - var n = 0; - for (var i in obj) { - a[n++] = obj[i]; - } - return a; - } -} - -/** - * Dump a Javascript object to the console - */ -function dump(o) { - for (f in o) { - try { - console.log(f + '=' + o[f]); - } catch (e) {} - } -} - -/** - * Return the content document of the given window. - */ -function content(win) { - if (win.document != 'undefined' && win.document != null) { - return win.document; - } else if (win.contentDocument != 'undefined' && win.contentDocument != null) { - return win.contentDocument; - } else { - return null; - } -} - -/** - * Returns a child element with the given id. - */ -function elementByID(node, id) { - for (var i in node.childNodes) { - var child = node.childNodes[i]; - if (child.id == id) { - return child; - } else { - child = elementByID(child, id); - if (child != null) { - return child; - } - } - } - return null; -} - -/** - * Install a gadget. - */ -function gadget(win, doc) { - var ongadget = null; - try { - if (win.parent.ongadget != null && win.parent.ongadget != 'undefined') { - ongadget = win.parent.ongadget; - } - } catch (e) { - } - if (ongadget != null) { - return ongadget(win, doc); - } else { - return doc; - } -} diff --git a/branches/sca-android/modules/domain-manager/src/main/resources/workspace-gadget.html b/branches/sca-android/modules/domain-manager/src/main/resources/workspace-gadget.html deleted file mode 100644 index a4589b42e6..0000000000 --- a/branches/sca-android/modules/domain-manager/src/main/resources/workspace-gadget.html +++ /dev/null @@ -1,232 +0,0 @@ -<!-- - * 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. ---> -<html> -<head> -<title>SCA Domain - Contributions</title> - -<script type="text/javascript" src="../workspace-gadget/workspace-gadget.js"></script> -<script type="text/javascript" src="utils.js"></script> - -<link rel="stylesheet" type="text/css" href="manager.css"> -</head> - -<body> - <div id="workspace"> - - <form id="workspaceForm"> - <div id="contributions" ></div> - <br> - ><a href="" id="addContributionLink">Add</a> - <a href="" id="deleteContributionLink">Delete</a> - </form> - - <div id="newContribution" style="visibility: hidden;"> - <form id="newContributionForm"> - <table width="100%"> - <tr><th>Add Contribution</th></tr> - <tr><td>Add an SCA contribution containing your application artifacts to the SCA domain.</td></tr> - </table> - <br> - <table> - <tr><td>Contribution URI:</td><td><input type="text" name="contributionID" size="50"/></td></td><td>e.g. yourcontrib, http://yourcontrib</td></tr> - <tr><td>Location:</td><td><input type="text" name="contributionLocation" size="50"/></td></td><td>e.g. http://host/yourjar.jar, file:/yourdir, file:/yourjar.jar</td></tr> - </table> - <input id="addContributionButton" type="button" value="Add" /> - </form> - </div> - - </div> -</body> - -<script type="text/javascript"> - - //@Reference - var workspace = new Reference("workspace"); - - var gadget = gadget(window, document); - if (gadget.showDependencies == null) { - gadget.showDependencies = true; - } - - var workspaceForm = elementByID(gadget, 'workspaceForm'); - var contributionsElement = elementByID(gadget, 'contributions'); - var newContributionElement = elementByID(gadget, 'newContribution'); - var newContributionForm = elementByID(gadget, 'newContributionForm'); - - var suggestedContributions = new Array(); - - function getContributions() { - workspace.get("", getContributionsResponse); - } - - function getContributionsResponse(feed) { - if (feed != null) { - var entries = feed.getElementsByTagName("entry"); - var contributions = ""; - contributions += '<table width="100%">'; - contributions += '<tr><th>Contribution</th>'; - if (gadget.showDependencies) { - contributions += '<th>Dependencies</td>'; - } - if (gadget.showDeployables) { - contributions += '<th>Deployable Composites</th>'; - } - contributions += '</tr>'; - for (var i=0; i<entries.length; i++) { - var id = entries[i].getElementsByTagName("id")[0].firstChild.nodeValue; - var location = entries[i].getElementsByTagName("link")[0].getAttribute("href"); - var content = ''; - if (entries[i].getElementsByTagName("content")[0].firstChild != null) { - content = entries[i].getElementsByTagName("content")[0].firstChild.nodeValue; - } - - contributions += '<tr>'; - contributions += '<td><input name="contributions" type="checkbox" value="' + id + '">' + - '<a href=\"' + location + '\">' + id + '</a></td>'; - - var dependencies = ''; - var bs = content.indexOf('<span id="dependencies">'); - if (bs != -1) { - var es = content.indexOf('</span>', bs); - dependencies = content.substring(bs, es + 7); - } - - var deployables = ''; - var bs = content.indexOf('<span id="deployables">'); - if (bs != -1) { - var es = content.indexOf('</span>', bs); - deployables = content.substring(bs, es + 7); - } - - var problems = ""; - var bs = content.indexOf('<span id="problems" '); - if (bs != -1) { - var es = content.indexOf('</span>', bs); - if (dependencies.length != 0) { - problems = '<br>'; - } - problems += content.substring(bs, es + 7); - } - - if (gadget.showDependencies) { - contributions += '<td class=tdw>' + dependencies + problems + ' </td>'; - } - if (gadget.showDeployables) { - contributions += '<td class=tdw>' + deployables + '</td>'; - } - contributions += '</tr>'; - } - contributions += '</table>'; - contributionsElement.innerHTML = contributions; - } - } - - function getSuggestedContributions() { - workspace.get("?suggestions=true", getSuggestedContributionsResponse); - } - - function getSuggestedContributionsResponse(feed) { - suggestedContributions = new Array(); - if (feed != null) { - var entries = feed.getElementsByTagName("entry"); - for (var i=0; i<entries.length; i++) { - var id = entries[i].getElementsByTagName("id")[0].firstChild.nodeValue; - var location = entries[i].getElementsByTagName("link")[1].getAttribute("href"); - suggestedContributions[i] = id + ':' + location; - } - } - } - - function deleteContribution() { - var contributions = array(workspaceForm.contributions); - for (var i=0; i < contributions.length; i++) { - if (contributions[i].checked) { - var id = contributions[i].value; - alert("hey " + id); - workspace.del(id, deleteContributionResponse); - } - } - return false; - } - - function deleteContributionResponse() { - getContributions(); - } - - function addContribution() { - var id = newContributionForm.contributionID.value; - var location = newContributionForm.contributionLocation.value; - var entry = '<entry xmlns="http://www.w3.org/2005/Atom">' + - '<title>Contribution - ' + id +'</title>' + - '<id>' + id + '</id>' + - '<link href="' + location + '" />' + - '</entry>'; - workspace.post(entry, addContributionResponse); - } - - function addContributionResponse() { - newContributionForm.contributionID.value = ""; - newContributionForm.contributionLocation.value = ""; - getContributions(); - } - - function suggestContributionIDs() { - var ids = new Array(); - for (var i=0; i<suggestedContributions.length; i++) { - var uri = suggestedContributions[i]; - var id = uri.substring(0, uri.indexOf(':')); - ids[id] = id; - } - return array(ids); - } - - function suggestContributionLocations() { - var locations = new Array(); - for (var i=0; i<suggestedContributions.length; i++) { - var uri = suggestedContributions[i]; - var id = uri.substring(0, uri.indexOf(':')); - if (id == newContributionForm.contributionID.value) { - var location = uri.substring(uri.indexOf(':') +1); - locations[location] = location; - } - } - return array(locations); - } - - function toggleNewContribution() { - var visibility = newContributionElement.style.visibility; - if (visibility == 'hidden') { - newContributionElement.style.visibility = 'visible'; - } else { - newContributionElement.style.visibility = 'hidden'; - } - return false; - } - - elementByID(gadget, 'deleteContributionLink').onclick = deleteContribution; - elementByID(gadget, 'addContributionLink').onclick = toggleNewContribution; - elementByID(gadget, 'addContributionButton').onclick = addContribution; - - getContributions(); - getSuggestedContributions(); - suggest(newContributionForm.contributionID, suggestContributionIDs); - suggest(newContributionForm.contributionLocation, suggestContributionLocations); - -</script> -</html> diff --git a/branches/sca-android/modules/domain-manager/src/main/resources/workspace.html b/branches/sca-android/modules/domain-manager/src/main/resources/workspace.html deleted file mode 100644 index 36c02ab1e6..0000000000 --- a/branches/sca-android/modules/domain-manager/src/main/resources/workspace.html +++ /dev/null @@ -1,65 +0,0 @@ -<!-- - * 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. ---> -<html> -<head> -<title>SCA Domain - Contributions</title> - -<script type="text/javascript" src="utils.js"></script> - -<link rel="stylesheet" type="text/css" href="manager.css"> -</head> - -<body> - <div id="toolbarGadgetDiv"></div> - <br> - - <span class=hd1> - SCA Domain<br><br> - Contributions</b> <a href="/workspace/"><img src="icons/feed-icon.png" border="0"></a> </span> - <br> - Here is the list of SCA contributions currently available in your SCA domain. - <br><br> - - <div id="workspaceGadgetDiv"></div> - - <iframe id="toolbarGadget" src="toolbar-gadget.html"></iframe> - <iframe id="workspaceGadget" src="workspace-gadget.html"></iframe> -</body> - -<script type="text/javascript"> - var toolbarGadgetDiv = elementByID(document, 'toolbarGadgetDiv'); - var workspaceGadgetDiv = elementByID(document, 'workspaceGadgetDiv'); - - var toolbarGadget = elementByID(document, 'toolbarGadget'); - var workspaceGadget = elementByID(document, 'workspaceGadget'); - - function ongadget(win, doc) { - if (doc == content(toolbarGadget)) { - toolbarGadgetDiv.innerHTML = doc.body.innerHTML; - return toolbarGadgetDiv; - } else if (doc == content(workspaceGadget)) { - workspaceGadgetDiv.innerHTML = doc.body.innerHTML; - workspaceGadgetDiv.showDependencies = true; - workspaceGadgetDiv.showDeployables = true; - return workspaceGadgetDiv; - } - return document; - } -</script> -</html> diff --git a/branches/sca-android/modules/domain-manager/src/test/java/org/apache/tuscany/sca/domain/manager/impl/DomainManagerTestCase.java b/branches/sca-android/modules/domain-manager/src/test/java/org/apache/tuscany/sca/domain/manager/impl/DomainManagerTestCase.java deleted file mode 100644 index 5e76556a14..0000000000 --- a/branches/sca-android/modules/domain-manager/src/test/java/org/apache/tuscany/sca/domain/manager/impl/DomainManagerTestCase.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * 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.domain.manager.impl; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.OutputStreamWriter; -import java.io.Writer; -import java.net.URL; - -import junit.framework.TestCase; - -import org.apache.tuscany.sca.data.collection.Entry; -import org.apache.tuscany.sca.data.collection.Item; -import org.apache.tuscany.sca.data.collection.NotFoundException; - -/** - * Test case for the workspace admin services. - * - * @version $Rev$ $Date$ - */ -public class DomainManagerTestCase extends TestCase { - - private ContributionCollectionImpl contributionCollection; - private DeployableCompositeCollectionImpl deployableCollection; - private DomainManagerConfigurationImpl domainManagerConfiguration; - - private static final String WORKSPACE_XML = - "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + - "<workspace xmlns=\"http://tuscany.apache.org/xmlns/sca/1.0\" " + - "xmlns:ns1=\"http://tuscany.apache.org/xmlns/sca/1.0\">\n" + - "</workspace>"; - - @Override - protected void setUp() throws Exception { - ClassLoader cl = getClass().getClassLoader(); - - // Make sure we start with a clean workspace.xml file - URL url = cl.getResource("workspace.xml"); - FileOutputStream os = new FileOutputStream(new File(url.toURI())); - Writer writer = new OutputStreamWriter(os); - writer.write(WORKSPACE_XML); - writer.flush(); - writer.close(); - - // Create a workspace collection component - domainManagerConfiguration = new DomainManagerConfigurationImpl(); - domainManagerConfiguration.initialize(); - String root = url.getFile(); - root = root.substring(0, root.lastIndexOf('/')); - domainManagerConfiguration.setRootDirectory(root); - - contributionCollection = new ContributionCollectionImpl(); - contributionCollection.domainManagerConfiguration = domainManagerConfiguration; - contributionCollection.workspaceFile = "workspace.xml"; - contributionCollection.deploymentContributionDirectory = "cloud"; - contributionCollection.domainManagerConfiguration = domainManagerConfiguration; - deployableCollection = new DeployableCompositeCollectionImpl(); - deployableCollection.domainManagerConfiguration = domainManagerConfiguration; - deployableCollection.contributionCollection = contributionCollection; - contributionCollection.initialize(); - deployableCollection.initialize(); - - // Populate the workspace with test data - Item item = new Item(); - item.setLink(cl.getResource("contributions/store").toString()); - contributionCollection.post("store", item); - item.setLink(cl.getResource("contributions/assets").toString()); - contributionCollection.post("assets", item); - } - - public void testGetAll() { - Entry<String, Item>[] entries = contributionCollection.getAll(); - assertEquals(2, entries.length); - assertEquals(entries[0].getKey(), "store"); - } - - public void testGet() throws NotFoundException { - Item item = contributionCollection.get("assets"); - assertTrue(item.getAlternate().endsWith("contributions/assets/")); - } - - public void testDependencies1() { - Entry<String, Item>[] entries = contributionCollection.query("alldependencies=store"); - assertEquals(2, entries.length); - } - - public void testDependencies2() { - Entry<String, Item>[] entries = contributionCollection.query("alldependencies=assets"); - assertEquals(1, entries.length); - assertEquals("assets", entries[0].getKey()); - } - - public void testDeployables() throws NotFoundException { - Entry<String, Item>[] entries = deployableCollection.getAll(); - assertEquals(1, entries.length); - assertEquals("composite:store;http://store;store", entries[0].getKey()); - } - -} diff --git a/branches/sca-android/modules/domain-manager/src/test/resources/contributions/assets/META-INF/sca-contribution.xml b/branches/sca-android/modules/domain-manager/src/test/resources/contributions/assets/META-INF/sca-contribution.xml deleted file mode 100644 index 4eab6dd5e7..0000000000 --- a/branches/sca-android/modules/domain-manager/src/test/resources/contributions/assets/META-INF/sca-contribution.xml +++ /dev/null @@ -1,27 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - * 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. ---> -<contribution xmlns="http://www.osoa.org/xmlns/sca/1.0" - targetNamespace="http://assets"> - <export.java package="services"/> - <export.java package="services.merger"/> - <export.java package="services.db"/> - <import.java package="org.apache.tuscany.sca.data.collection"/> - <import.java package="org.apache.derby.*"/> -</contribution>
\ No newline at end of file diff --git a/branches/sca-android/modules/domain-manager/src/test/resources/contributions/store/META-INF/sca-contribution.xml b/branches/sca-android/modules/domain-manager/src/test/resources/contributions/store/META-INF/sca-contribution.xml deleted file mode 100644 index 48d4be2d6e..0000000000 --- a/branches/sca-android/modules/domain-manager/src/test/resources/contributions/store/META-INF/sca-contribution.xml +++ /dev/null @@ -1,25 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - * 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. ---> -<contribution xmlns="http://www.osoa.org/xmlns/sca/1.0" - targetNamespace="http://store" - xmlns:s="http://store"> - <deployable composite="s:store"/> - <import.java package="services"/> -</contribution>
\ No newline at end of file diff --git a/branches/sca-android/modules/domain-manager/src/test/resources/workspace.xml b/branches/sca-android/modules/domain-manager/src/test/resources/workspace.xml deleted file mode 100644 index e6ac7d7701..0000000000 --- a/branches/sca-android/modules/domain-manager/src/test/resources/workspace.xml +++ /dev/null @@ -1,21 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - * 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. ---> -<workspace xmlns="http://tuscany.apache.org/xmlns/sca/1.0" xmlns:ns1="http://tuscany.apache.org/xmlns/sca/1.0"> -</workspace> |