diff options
Diffstat (limited to 'branches/sca-trunk-20080910/modules/domain-manager/src/main')
32 files changed, 0 insertions, 6023 deletions
diff --git a/branches/sca-trunk-20080910/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/CompositeConfigurationCollectionImpl.java b/branches/sca-trunk-20080910/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-trunk-20080910/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-trunk-20080910/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/CompositeConfigurationServiceImpl.java b/branches/sca-trunk-20080910/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-trunk-20080910/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-trunk-20080910/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/CompositeGeneratorServiceImpl.java b/branches/sca-trunk-20080910/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-trunk-20080910/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-trunk-20080910/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/ContributionCollectionImpl.java b/branches/sca-trunk-20080910/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-trunk-20080910/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-trunk-20080910/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/ContributionServiceImpl.java b/branches/sca-trunk-20080910/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-trunk-20080910/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-trunk-20080910/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/DeployableCompositeCollectionImpl.java b/branches/sca-trunk-20080910/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-trunk-20080910/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-trunk-20080910/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/DeployableCompositeServiceImpl.java b/branches/sca-trunk-20080910/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-trunk-20080910/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-trunk-20080910/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/DeployedCompositeCollectionImpl.java b/branches/sca-trunk-20080910/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-trunk-20080910/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-trunk-20080910/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/DomainManagerConfiguration.java b/branches/sca-trunk-20080910/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-trunk-20080910/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-trunk-20080910/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/DomainManagerConfigurationImpl.java b/branches/sca-trunk-20080910/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-trunk-20080910/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-trunk-20080910/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/DomainManagerUtil.java b/branches/sca-trunk-20080910/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-trunk-20080910/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-trunk-20080910/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/FileCollectionImpl.java b/branches/sca-trunk-20080910/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-trunk-20080910/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-trunk-20080910/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/FileServiceImpl.java b/branches/sca-trunk-20080910/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-trunk-20080910/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-trunk-20080910/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/NodeConfigurationServiceImpl.java b/branches/sca-trunk-20080910/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-trunk-20080910/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-trunk-20080910/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/NodeProcessCollectionFacadeImpl.java b/branches/sca-trunk-20080910/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-trunk-20080910/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-trunk-20080910/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/QuickStartServiceImpl.java b/branches/sca-trunk-20080910/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-trunk-20080910/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-trunk-20080910/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/launcher/DomainManagerLauncherBootstrap.java b/branches/sca-trunk-20080910/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-trunk-20080910/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-trunk-20080910/modules/domain-manager/src/main/resources/DomainManager.composite b/branches/sca-trunk-20080910/modules/domain-manager/src/main/resources/DomainManager.composite deleted file mode 100644 index ba57ea45d1..0000000000 --- a/branches/sca-trunk-20080910/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-trunk-20080910/modules/domain-manager/src/main/resources/cloud-gadget.html b/branches/sca-trunk-20080910/modules/domain-manager/src/main/resources/cloud-gadget.html deleted file mode 100644 index 619df54ede..0000000000 --- a/branches/sca-trunk-20080910/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-trunk-20080910/modules/domain-manager/src/main/resources/cloud.html b/branches/sca-trunk-20080910/modules/domain-manager/src/main/resources/cloud.html deleted file mode 100644 index d661d5d38b..0000000000 --- a/branches/sca-trunk-20080910/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-trunk-20080910/modules/domain-manager/src/main/resources/composite-gadget.html b/branches/sca-trunk-20080910/modules/domain-manager/src/main/resources/composite-gadget.html deleted file mode 100644 index 82855a410a..0000000000 --- a/branches/sca-trunk-20080910/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-trunk-20080910/modules/domain-manager/src/main/resources/composite.html b/branches/sca-trunk-20080910/modules/domain-manager/src/main/resources/composite.html deleted file mode 100644 index b0631e1d66..0000000000 --- a/branches/sca-trunk-20080910/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-trunk-20080910/modules/domain-manager/src/main/resources/files-gadget.html b/branches/sca-trunk-20080910/modules/domain-manager/src/main/resources/files-gadget.html deleted file mode 100644 index 83315a1957..0000000000 --- a/branches/sca-trunk-20080910/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-trunk-20080910/modules/domain-manager/src/main/resources/files.html b/branches/sca-trunk-20080910/modules/domain-manager/src/main/resources/files.html deleted file mode 100644 index 37d89e7665..0000000000 --- a/branches/sca-trunk-20080910/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-trunk-20080910/modules/domain-manager/src/main/resources/home-gadget.html b/branches/sca-trunk-20080910/modules/domain-manager/src/main/resources/home-gadget.html deleted file mode 100644 index 05e262e4df..0000000000 --- a/branches/sca-trunk-20080910/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-trunk-20080910/modules/domain-manager/src/main/resources/home.html b/branches/sca-trunk-20080910/modules/domain-manager/src/main/resources/home.html deleted file mode 100644 index aad1856621..0000000000 --- a/branches/sca-trunk-20080910/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-trunk-20080910/modules/domain-manager/src/main/resources/icons/feed-icon.png b/branches/sca-trunk-20080910/modules/domain-manager/src/main/resources/icons/feed-icon.png Binary files differdeleted file mode 100644 index a59728b2ad..0000000000 --- a/branches/sca-trunk-20080910/modules/domain-manager/src/main/resources/icons/feed-icon.png +++ /dev/null diff --git a/branches/sca-trunk-20080910/modules/domain-manager/src/main/resources/manager.css b/branches/sca-trunk-20080910/modules/domain-manager/src/main/resources/manager.css deleted file mode 100644 index e080ff1d87..0000000000 --- a/branches/sca-trunk-20080910/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-trunk-20080910/modules/domain-manager/src/main/resources/toolbar-gadget.html b/branches/sca-trunk-20080910/modules/domain-manager/src/main/resources/toolbar-gadget.html deleted file mode 100644 index c9389affc3..0000000000 --- a/branches/sca-trunk-20080910/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-trunk-20080910/modules/domain-manager/src/main/resources/utils.js b/branches/sca-trunk-20080910/modules/domain-manager/src/main/resources/utils.js deleted file mode 100644 index 77ed807e85..0000000000 --- a/branches/sca-trunk-20080910/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-trunk-20080910/modules/domain-manager/src/main/resources/workspace-gadget.html b/branches/sca-trunk-20080910/modules/domain-manager/src/main/resources/workspace-gadget.html deleted file mode 100644 index a4589b42e6..0000000000 --- a/branches/sca-trunk-20080910/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-trunk-20080910/modules/domain-manager/src/main/resources/workspace.html b/branches/sca-trunk-20080910/modules/domain-manager/src/main/resources/workspace.html deleted file mode 100644 index 36c02ab1e6..0000000000 --- a/branches/sca-trunk-20080910/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> |