diff options
Diffstat (limited to 'branches/sca-java-1.2/modules/workspace-admin/src/main/java/org/apache/tuscany')
10 files changed, 0 insertions, 2882 deletions
diff --git a/branches/sca-java-1.2/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/CompositeImageCollectionImpl.java b/branches/sca-java-1.2/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/CompositeImageCollectionImpl.java deleted file mode 100644 index 787b7aca08..0000000000 --- a/branches/sca-java-1.2/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/CompositeImageCollectionImpl.java +++ /dev/null @@ -1,175 +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.workspace.admin.impl; - -import static org.apache.tuscany.sca.workspace.admin.impl.DomainAdminUtil.compositeKey; -import static org.apache.tuscany.sca.workspace.admin.impl.DomainAdminUtil.compositeQName; -import static org.apache.tuscany.sca.workspace.admin.impl.DomainAdminUtil.compositeTitle; -import static org.apache.tuscany.sca.workspace.admin.impl.DomainAdminUtil.contributionURI; - -import java.io.IOException; -import java.net.URLDecoder; -import java.util.ArrayList; -import java.util.List; -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.assembly.Component; -import org.apache.tuscany.sca.assembly.Composite; -import org.apache.tuscany.sca.implementation.data.collection.Entry; -import org.apache.tuscany.sca.implementation.data.collection.Item; -import org.apache.tuscany.sca.implementation.data.collection.ItemCollection; -import org.apache.tuscany.sca.implementation.data.collection.LocalItemCollection; -import org.apache.tuscany.sca.implementation.data.collection.NotFoundException; -import org.apache.tuscany.sca.implementation.node.NodeImplementation; -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 composite install image collection service. - * - * @version $Rev$ $Date$ - */ -@Scope("COMPOSITE") -@Service(interfaces={ItemCollection.class, LocalItemCollection.class, Servlet.class}) -public class CompositeImageCollectionImpl extends HttpServlet implements ItemCollection, LocalItemCollection, Servlet { - private static final long serialVersionUID = 1L; - - private final static Logger logger = Logger.getLogger(CompositeImageCollectionImpl.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.info("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(); - } - } - - @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.info("get " + key); - - // The key contains a node name, redirect - // to the corresponding composite image - - // 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 image - String compositeImage = "/composite-image/?composite=" + related.substring(i); - response.sendRedirect(compositeImage); - return; - } - } - } - - // Node not found - response.sendError(HttpServletResponse.SC_NOT_FOUND, key); - return; - } -} diff --git a/branches/sca-java-1.2/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/ContributionCollectionImpl.java b/branches/sca-java-1.2/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/ContributionCollectionImpl.java deleted file mode 100644 index 6b8541b279..0000000000 --- a/branches/sca-java-1.2/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/ContributionCollectionImpl.java +++ /dev/null @@ -1,515 +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.workspace.admin.impl; - -import static org.apache.tuscany.sca.workspace.admin.impl.DomainAdminUtil.DEPLOYMENT_CONTRIBUTION_URI; -import static org.apache.tuscany.sca.workspace.admin.impl.DomainAdminUtil.compositeSimpleTitle; -import static org.apache.tuscany.sca.workspace.admin.impl.DomainAdminUtil.compositeSourceLink; -import static org.apache.tuscany.sca.workspace.admin.impl.DomainAdminUtil.locationURL; - -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.net.MalformedURLException; -import java.net.URI; -import java.net.URL; -import java.net.URLDecoder; -import java.util.ArrayList; -import java.util.List; -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.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.builder.Problem; -import org.apache.tuscany.sca.assembly.xml.CompositeDocumentProcessor; -import org.apache.tuscany.sca.assembly.xml.CompositeProcessor; -import org.apache.tuscany.sca.contribution.Contribution; -import org.apache.tuscany.sca.contribution.ContributionFactory; -import org.apache.tuscany.sca.contribution.DefaultModelFactoryExtensionPoint; -import org.apache.tuscany.sca.contribution.ModelFactoryExtensionPoint; -import org.apache.tuscany.sca.contribution.processor.DefaultStAXArtifactProcessorExtensionPoint; -import org.apache.tuscany.sca.contribution.processor.DefaultURLArtifactProcessorExtensionPoint; -import org.apache.tuscany.sca.contribution.processor.ExtensibleStAXArtifactProcessor; -import org.apache.tuscany.sca.contribution.processor.ExtensibleURLArtifactProcessor; -import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor; -import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessorExtensionPoint; -import org.apache.tuscany.sca.contribution.processor.URLArtifactProcessor; -import org.apache.tuscany.sca.contribution.processor.URLArtifactProcessorExtensionPoint; -import org.apache.tuscany.sca.contribution.resolver.DefaultModelResolverExtensionPoint; -import org.apache.tuscany.sca.contribution.resolver.ModelResolverExtensionPoint; -import org.apache.tuscany.sca.contribution.xml.ContributionGeneratedMetadataDocumentProcessor; -import org.apache.tuscany.sca.contribution.xml.ContributionMetadataDocumentProcessor; -import org.apache.tuscany.sca.contribution.xml.ContributionMetadataProcessor; -import org.apache.tuscany.sca.implementation.data.collection.Entry; -import org.apache.tuscany.sca.implementation.data.collection.Item; -import org.apache.tuscany.sca.implementation.data.collection.ItemCollection; -import org.apache.tuscany.sca.implementation.data.collection.LocalItemCollection; -import org.apache.tuscany.sca.implementation.data.collection.NotFoundException; -import org.apache.tuscany.sca.policy.PolicyFactory; -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.ContributionDependencyBuilderMonitor; -import org.apache.tuscany.sca.workspace.builder.impl.ContributionDependencyBuilderImpl; -import org.apache.tuscany.sca.workspace.processor.impl.ContributionInfoProcessor; -import org.apache.tuscany.sca.workspace.xml.WorkspaceProcessor; -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.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, Servlet.class}) -public class ContributionCollectionImpl extends HttpServlet implements ItemCollection, LocalItemCollection { - private static final long serialVersionUID = -4759297945439322773L; - - private final static Logger logger = Logger.getLogger(ContributionCollectionImpl.class.getName()); - - @Property - public String workspaceFile; - - @Property - public String deploymentContributionDirectory; - - private ContributionFactory contributionFactory; - private AssemblyFactory assemblyFactory; - private WorkspaceFactory workspaceFactory; - private StAXArtifactProcessor<Object> staxProcessor; - private URLArtifactProcessor<Object> urlProcessor; - private URLArtifactProcessor<Contribution> contributionInfoProcessor; - private XMLInputFactory inputFactory; - private XMLOutputFactory outputFactory; - private DocumentBuilder documentBuilder; - - /** - * Initialize the component. - */ - @Init - public void initialize() throws ParserConfigurationException { - - // Create model factories - ModelFactoryExtensionPoint modelFactories = new DefaultModelFactoryExtensionPoint(); - outputFactory = modelFactories.getFactory(XMLOutputFactory.class); - outputFactory.setProperty(XMLOutputFactory.IS_REPAIRING_NAMESPACES, true); - contributionFactory = modelFactories.getFactory(ContributionFactory.class); - assemblyFactory = modelFactories.getFactory(AssemblyFactory.class); - workspaceFactory = modelFactories.getFactory(WorkspaceFactory.class); - PolicyFactory policyFactory = modelFactories.getFactory(PolicyFactory.class); - - // Create model resolvers - ModelResolverExtensionPoint modelResolvers = new DefaultModelResolverExtensionPoint(); - - // Create artifact processors - inputFactory = modelFactories.getFactory(XMLInputFactory.class); - StAXArtifactProcessorExtensionPoint staxProcessors = new DefaultStAXArtifactProcessorExtensionPoint(modelFactories); - staxProcessor = new ExtensibleStAXArtifactProcessor(staxProcessors, inputFactory, outputFactory); - staxProcessors.addArtifactProcessor(new ContributionMetadataProcessor(assemblyFactory, contributionFactory, staxProcessor)); - staxProcessors.addArtifactProcessor(new WorkspaceProcessor(workspaceFactory, contributionFactory, staxProcessor)); - staxProcessors.addArtifactProcessor(new CompositeProcessor(contributionFactory, assemblyFactory, policyFactory, staxProcessor)); - - URLArtifactProcessorExtensionPoint urlProcessors = new DefaultURLArtifactProcessorExtensionPoint(modelFactories); - urlProcessor = new ExtensibleURLArtifactProcessor(urlProcessors); - urlProcessors.addArtifactProcessor(new ContributionMetadataDocumentProcessor(staxProcessor, inputFactory)); - urlProcessors.addArtifactProcessor(new ContributionGeneratedMetadataDocumentProcessor(staxProcessor, inputFactory)); - urlProcessors.addArtifactProcessor(new CompositeDocumentProcessor(staxProcessor, inputFactory, null)); - - // Create contribution info processor - contributionInfoProcessor = new ContributionInfoProcessor(modelFactories, modelResolvers, urlProcessor); - - // Create a document builder (used to pretty print XML) - documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); - } - - public Entry<String, Item>[] getAll() { - logger.info("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.info("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); - } - - @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.info("get " + key); - - // Get the item describing the composite - Item item; - try { - item = get(key); - } catch (NotFoundException e) { - response.sendError(HttpServletResponse.SC_NOT_FOUND, key); - return; - } - - // Redirect to the actual contribution location - response.sendRedirect("/files/" + item.getAlternate()); - } - - public String post(String key, Item item) { - logger.info("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.info("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.info("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(null); - List<Contribution> dependencies = analyzer.buildContributionDependencies(workspace, contribution); - - // 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()]); - - } 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>(); - ContributionDependencyBuilderMonitor monitor = new ContributionDependencyBuilderMonitor() { - public void problem(Problem problem) { - problems.add(problem.getMessage() + " " + problem.getModel()); - } - }; - - StringBuffer sb = new StringBuffer(); - ContributionDependencyBuilderImpl analyzer = new ContributionDependencyBuilderImpl(monitor); - List<Contribution> dependencies = analyzer.buildContributionDependencies(workspace, contribution); - 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 (problems.size() > 1) { - 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() { - Workspace workspace; - File file = new File(workspaceFile); - if (file.exists()) { - 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); - } - } else { - workspace = workspaceFactory.createWorkspace(); - } - - // 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(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 { - // 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 - FileOutputStream os = new FileOutputStream(new File(workspaceFile)); - XMLSerializer serializer = new XMLSerializer(os, format); - serializer.serialize(document); - os.close(); - } 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 dependencyWorkspace = workspaceFactory.createWorkspace(); - try { - for (Contribution c: workspace.getContributions()) { - URI uri = URI.create(c.getURI()); - URL url = locationURL(c.getLocation()); - Contribution contribution = (Contribution)contributionInfoProcessor.read(null, uri, url); - dependencyWorkspace.getContributions().add(contribution); - } - } catch (Exception e) { - throw new ServiceRuntimeException(e); - } - return dependencyWorkspace; - } - -} diff --git a/branches/sca-java-1.2/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/DeployableCompositeCollectionImpl.java b/branches/sca-java-1.2/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/DeployableCompositeCollectionImpl.java deleted file mode 100644 index 2aeeb14727..0000000000 --- a/branches/sca-java-1.2/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/DeployableCompositeCollectionImpl.java +++ /dev/null @@ -1,699 +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.workspace.admin.impl; - -import static org.apache.tuscany.sca.workspace.admin.impl.DomainAdminUtil.compositeAlternateLink; -import static org.apache.tuscany.sca.workspace.admin.impl.DomainAdminUtil.compositeKey; -import static org.apache.tuscany.sca.workspace.admin.impl.DomainAdminUtil.compositeQName; -import static org.apache.tuscany.sca.workspace.admin.impl.DomainAdminUtil.compositeSourceLink; -import static org.apache.tuscany.sca.workspace.admin.impl.DomainAdminUtil.compositeTitle; -import static org.apache.tuscany.sca.workspace.admin.impl.DomainAdminUtil.contributionURI; -import static org.apache.tuscany.sca.workspace.admin.impl.DomainAdminUtil.locationURL; -import static org.apache.tuscany.sca.workspace.admin.impl.DomainAdminUtil.newRuntime; - -import java.io.IOException; -import java.io.InputStream; -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.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 javax.xml.stream.XMLInputFactory; -import javax.xml.stream.XMLOutputFactory; -import javax.xml.stream.XMLStreamWriter; - -import org.apache.tuscany.sca.assembly.AssemblyFactory; -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.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.CompositeBuilderMonitor; -import org.apache.tuscany.sca.assembly.builder.Problem; -import org.apache.tuscany.sca.assembly.builder.Problem.Severity; -import org.apache.tuscany.sca.assembly.builder.impl.CompositeBuilderImpl; -import org.apache.tuscany.sca.assembly.builder.impl.CompositeConfigurationBuilderImpl; -import org.apache.tuscany.sca.assembly.xml.Constants; -import org.apache.tuscany.sca.contribution.Artifact; -import org.apache.tuscany.sca.contribution.Contribution; -import org.apache.tuscany.sca.contribution.ContributionFactory; -import org.apache.tuscany.sca.contribution.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.ModelResolver; -import org.apache.tuscany.sca.contribution.resolver.ModelResolverExtensionPoint; -import org.apache.tuscany.sca.contribution.service.ContributionListener; -import org.apache.tuscany.sca.contribution.service.ContributionListenerExtensionPoint; -import org.apache.tuscany.sca.contribution.service.ContributionReadException; -import org.apache.tuscany.sca.contribution.service.ContributionRepository; -import org.apache.tuscany.sca.contribution.service.ContributionResolveException; -import org.apache.tuscany.sca.contribution.xml.ContributionGeneratedMetadataDocumentProcessor; -import org.apache.tuscany.sca.contribution.xml.ContributionMetadataDocumentProcessor; -import org.apache.tuscany.sca.contribution.xml.ContributionMetadataProcessor; -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.core.assembly.ActivationException; -import org.apache.tuscany.sca.host.embedded.impl.ReallySmallRuntime; -import org.apache.tuscany.sca.implementation.data.collection.Entry; -import org.apache.tuscany.sca.implementation.data.collection.Item; -import org.apache.tuscany.sca.implementation.data.collection.ItemCollection; -import org.apache.tuscany.sca.implementation.data.collection.LocalItemCollection; -import org.apache.tuscany.sca.implementation.data.collection.NotFoundException; -import org.apache.tuscany.sca.implementation.node.NodeImplementation; -import org.apache.tuscany.sca.interfacedef.InterfaceContractMapper; -import org.apache.tuscany.sca.interfacedef.impl.InterfaceContractMapperImpl; -import org.apache.tuscany.sca.policy.IntentAttachPointTypeFactory; -import org.apache.tuscany.sca.policy.PolicyFactory; -import org.apache.tuscany.sca.workspace.processor.impl.ContributionContentProcessor; -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 deployable composite collection service. - * - * @version $Rev$ $Date$ - */ -@Scope("COMPOSITE") -@Service(interfaces={ItemCollection.class, LocalItemCollection.class, Servlet.class}) -public class DeployableCompositeCollectionImpl extends HttpServlet implements ItemCollection, LocalItemCollection { - private static final long serialVersionUID = -8809641932774129151L; - - private final static Logger logger = Logger.getLogger(DeployableCompositeCollectionImpl.class.getName()); - - @Reference - public LocalItemCollection contributionCollection; - - @Reference - public LocalItemCollection domainCompositeCollection; - - @Reference - public LocalItemCollection cloudCollection; - - private ModelFactoryExtensionPoint modelFactories; - private ModelResolverExtensionPoint modelResolvers; - private AssemblyFactory assemblyFactory; - private URLArtifactProcessor<Contribution> contributionContentProcessor; - private StAXArtifactProcessor<Composite> compositeProcessor; - private XMLOutputFactory outputFactory; - private CompositeBuilder compositeBuilder; - private CompositeConfigurationBuilderImpl compositeConfigurationBuilder; - private List<ContributionListener> contributionListeners; - - /** - * Initialize the component. - */ - @Init - public void initialize() throws ParserConfigurationException { - - // Bootstrap a runtime to get a populated registry - // FIXME Remove this later - ReallySmallRuntime runtime = newRuntime(); - ExtensionPointRegistry registry = runtime.getExtensionPointRegistry(); - - // Get model factories - modelFactories = registry.getExtensionPoint(ModelFactoryExtensionPoint.class); - assemblyFactory = modelFactories.getFactory(AssemblyFactory.class); - XMLInputFactory inputFactory = modelFactories.getFactory(XMLInputFactory.class); - outputFactory = modelFactories.getFactory(XMLOutputFactory.class); - outputFactory.setProperty(XMLOutputFactory.IS_REPAIRING_NAMESPACES, true); - ContributionFactory contributionFactory = modelFactories.getFactory(ContributionFactory.class); - PolicyFactory policyFactory = modelFactories.getFactory(PolicyFactory.class); - - // Get and initialize artifact processors - StAXArtifactProcessorExtensionPoint staxProcessors = registry.getExtensionPoint(StAXArtifactProcessorExtensionPoint.class); - StAXArtifactProcessor<Object> staxProcessor = new ExtensibleStAXArtifactProcessor(staxProcessors, inputFactory, outputFactory); - staxProcessors.addArtifactProcessor(new ContributionMetadataProcessor(assemblyFactory, contributionFactory, staxProcessor)); - compositeProcessor = (StAXArtifactProcessor<Composite>)staxProcessors.getProcessor(Composite.class); - - URLArtifactProcessorExtensionPoint urlProcessors = registry.getExtensionPoint(URLArtifactProcessorExtensionPoint.class); - URLArtifactProcessor<Object> urlProcessor = new ExtensibleURLArtifactProcessor(urlProcessors); - urlProcessors.addArtifactProcessor(new ContributionMetadataDocumentProcessor(staxProcessor, inputFactory)); - urlProcessors.addArtifactProcessor(new ContributionGeneratedMetadataDocumentProcessor(staxProcessor, inputFactory)); - - // Create contribution processor - modelResolvers = registry.getExtensionPoint(ModelResolverExtensionPoint.class); - contributionContentProcessor = new ContributionContentProcessor(modelFactories, modelResolvers, urlProcessor); - contributionListeners = registry.getExtensionPoint(ContributionListenerExtensionPoint.class).getContributionListeners(); - - // Create composite builder - SCABindingFactory scaBindingFactory = modelFactories.getFactory(SCABindingFactory.class); - IntentAttachPointTypeFactory intentAttachPointTypeFactory = modelFactories.getFactory(IntentAttachPointTypeFactory.class); - InterfaceContractMapper contractMapper = new InterfaceContractMapperImpl(); - - // TODO need to get these messages back to the browser - CompositeBuilderMonitor monitor = new CompositeBuilderMonitor() { - public void problem(Problem problem) { - if (problem.getSeverity() == Severity.INFO) { - logger.info(problem.toString()); - } else if (problem.getSeverity() == Severity.WARNING) { - logger.warning(problem.toString()); - } else if (problem.getSeverity() == Severity.ERROR) { - if (problem.getCause() != null) { - logger.log(Level.SEVERE, problem.toString(), problem.getCause()); - } else { - logger.severe(problem.toString()); - } - } - } - }; - - compositeBuilder = new CompositeBuilderImpl(assemblyFactory, scaBindingFactory, intentAttachPointTypeFactory, - contractMapper, monitor); - - compositeConfigurationBuilder = new CompositeConfigurationBuilderImpl(assemblyFactory, - scaBindingFactory, - intentAttachPointTypeFactory, - contractMapper, - monitor); - } - - public Entry<String, Item>[] getAll() { - logger.info("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.info("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.info("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(); - } - } - - @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.info("get " + key); - - // Expect a key in the form - // composite:contributionURI;namespace;localName - // and return the corresponding resolved composite - - // Extract the composite qname from the key - QName qname = compositeQName(key); - - // Somewhere to store the composite we expect to write out at the end - Composite compositeImage = 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 - List<Contribution> loadedContributions = new ArrayList<Contribution>(); - 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 contributionItem = entry.getData(); - - // Read the contribution - Contribution c; - try { - c = contribution(loadedContributions, entry.getKey(), contributionItem.getAlternate()); - } catch (ContributionReadException e) { - continue; - } - loadedContributions.add(c); - if (contributionURI.equals(entry.getKey())) { - contribution = c; - contributionMap.put(contributionURI, contribution); - } - } - } - - 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); - - // store away the composite we are generating the deployable XML for. - if (qname.equals(deployable.getName())){ - compositeImage = deployable; - } - } - - // Composite not found - if (compositeImage == 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 node = 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)) { - node = nc; - break; - } - } - } - - if (node != null) { - try { - List<Binding> defaultBindings = node.getServices().get(0).getBindings(); - compositeConfigurationBuilder.configureBindingURIs(composite, null, defaultBindings); - } 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; - } - - // rebuild the requested composite from the domain composite - // we have to reverse the flatterning that went on when the domain - // composite was built - List<Component> tempComponentList = new ArrayList<Component>(); - tempComponentList.addAll(compositeImage.getComponents()); - compositeImage.getComponents().clear(); - - for (Component inputComponent : tempComponentList){ - for (Component deployComponent : domainComposite.getComponents()){ - if (deployComponent.getName().equals(inputComponent.getName())){ - compositeImage.getComponents().add(deployComponent); - } - } - } - - // Write the deployable composite - try { - response.setContentType("text/xml"); - XMLStreamWriter writer = outputFactory.createXMLStreamWriter(response.getOutputStream()); - compositeProcessor.write(compositeImage, 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 composites - List<Contribution> loadedContributions = new ArrayList<Contribution>(); - Map<String, Contribution> contributionMap = new HashMap<String, Contribution>(); - for (Entry<String, Item> cloudEntry: cloudEntries) { - String key = cloudEntry.getKey(); - String contributionURI = contributionURI(key); - QName qname = compositeQName(key); - - // Load the contribution - Contribution contribution = contributionMap.get(contributionURI); - if (contribution == null) { - Item contributionItem = contributionCollection.get(contributionURI); - - // Read the contribution - try { - contribution = contribution(loadedContributions, contributionURI, contributionItem.getAlternate()); - } catch (ContributionReadException e) { - continue; - } - loadedContributions.add(contribution); - contributionMap.put(contributionURI, contribution); - } - - // Include the composite in the clouds composite - 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 contributions - * @param contributionURI - * @param contributionLocation - * @return - * @throws NotFoundException - */ - private Contribution contribution(List<Contribution> contributions, String contributionURI, String contributionLocation) throws ContributionReadException { - try { - URI uri = URI.create(contributionURI); - URL location = locationURL(contributionLocation); - Contribution contribution = (Contribution)contributionContentProcessor.read(null, uri, location); - - // FIXME simplify this later - // Fix up contribution imports - ContributionRepository dummyRepository = new DummyContributionRepository(contributions); - for (ContributionListener listener: contributionListeners) { - listener.contributionAdded(dummyRepository, contribution); - } - - ModelResolver modelResolver = new ExtensibleModelResolver(contribution, modelResolvers, modelFactories); - contributionContentProcessor.resolve(contribution, modelResolver); - - return contribution; - - } catch (ContributionReadException e) { - throw e; - } catch (ContributionResolveException e) { - throw new ContributionReadException(e); - } catch (MalformedURLException e) { - throw new ContributionReadException(e); - } - } - - /** - * Returns the contribution with the given URI. - * - * @param contributionURI - * @param contributionLocation - * @return - * @throws NotFoundException - */ - private Contribution contribution(String contributionURI, String contributionLocation) throws ContributionReadException { - return contribution(new ArrayList<Contribution>(), contributionURI, contributionLocation); - } - - /** - * 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(DomainAdminUtil.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; - } - - /** - * FIXME Remove this later - * DummyContributionRepository - */ - private class DummyContributionRepository implements ContributionRepository { - - private List<Contribution> contributions; - - public DummyContributionRepository(List<Contribution> contributions) { - this.contributions = contributions; - } - - public void addContribution(Contribution contribution) {} - public URL find(String contribution) { return null; } - public Contribution getContribution(String uri) { return null; } - public List<Contribution> getContributions() { return contributions; } - public URI getDomain() { return null; } - public List<String> list() { return null; } - public void remove(String contribution) {} - public void removeContribution(Contribution contribution) {} - public URL store(String contribution, URL sourceURL, InputStream contributionStream) throws IOException { return null; } - public URL store(String contribution, URL sourceURL) throws IOException { return null;} - public void updateContribution(Contribution contribution) {} - } -} diff --git a/branches/sca-java-1.2/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/DeployedCompositeCollectionImpl.java b/branches/sca-java-1.2/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/DeployedCompositeCollectionImpl.java deleted file mode 100644 index fe5a3fe7e1..0000000000 --- a/branches/sca-java-1.2/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/DeployedCompositeCollectionImpl.java +++ /dev/null @@ -1,399 +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.workspace.admin.impl; - -import static org.apache.tuscany.sca.workspace.admin.impl.DomainAdminUtil.DEPLOYMENT_CONTRIBUTION_URI; -import static org.apache.tuscany.sca.workspace.admin.impl.DomainAdminUtil.compositeKey; -import static org.apache.tuscany.sca.workspace.admin.impl.DomainAdminUtil.compositeQName; -import static org.apache.tuscany.sca.workspace.admin.impl.DomainAdminUtil.contributionURI; -import static org.apache.tuscany.sca.workspace.admin.impl.DomainAdminUtil.compositeTitle; -import static org.apache.tuscany.sca.workspace.admin.impl.DomainAdminUtil.compositeSourceLink; - -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.InputStream; -import java.io.OutputStreamWriter; -import java.io.Writer; -import java.net.URL; -import java.net.URLConnection; -import java.net.URLDecoder; -import java.util.ArrayList; -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 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.CompositeProcessor; -import org.apache.tuscany.sca.assembly.xml.Constants; -import org.apache.tuscany.sca.contribution.ContributionFactory; -import org.apache.tuscany.sca.contribution.DefaultModelFactoryExtensionPoint; -import org.apache.tuscany.sca.contribution.ModelFactoryExtensionPoint; -import org.apache.tuscany.sca.implementation.data.collection.Entry; -import org.apache.tuscany.sca.implementation.data.collection.Item; -import org.apache.tuscany.sca.implementation.data.collection.ItemCollection; -import org.apache.tuscany.sca.implementation.data.collection.LocalItemCollection; -import org.apache.tuscany.sca.implementation.data.collection.NotFoundException; -import org.apache.tuscany.sca.policy.PolicyFactory; -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: 632617 $ $Date: 2008-03-01 08:24:33 -0800 (Sat, 01 Mar 2008) $ - */ -@Scope("COMPOSITE") -@Service(interfaces={ItemCollection.class,LocalItemCollection.class, Servlet.class}) -public class DeployedCompositeCollectionImpl extends HttpServlet implements ItemCollection, LocalItemCollection { - private static final long serialVersionUID = -3477992129462720901L; - - private final static 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; - - private ModelFactoryExtensionPoint modelFactories; - private AssemblyFactory assemblyFactory; - private CompositeProcessor compositeProcessor; - private XMLOutputFactory outputFactory; - private DocumentBuilder documentBuilder; - - /** - * Initialize the component. - */ - @Init - public void initialize() throws ParserConfigurationException { - - // Create factories - modelFactories = new DefaultModelFactoryExtensionPoint(); - assemblyFactory = modelFactories.getFactory(AssemblyFactory.class); - outputFactory = modelFactories.getFactory(XMLOutputFactory.class); - outputFactory.setProperty(XMLOutputFactory.IS_REPAIRING_NAMESPACES, true); - - // Create composite processor - ContributionFactory contributionFactory = modelFactories.getFactory(ContributionFactory.class); - PolicyFactory policyFactory = modelFactories.getFactory(PolicyFactory.class); - compositeProcessor = new CompositeProcessor(contributionFactory, assemblyFactory, policyFactory, null); - - // Create a document builder (used to pretty print XML) - documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); - } - - public Entry<String, Item>[] getAll() { - logger.info("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.info("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); - } - - @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.info("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; - } - - // Support reading source composite file inside a JAR - String uri = item.getAlternate(); - 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); - } - } - - // Read the composite file and write to response - response.setContentType("text/xml"); - URLConnection connection = new URL(uri).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(); - } - - public String post(String key, Item item) { - logger.info("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) { - File directory = new File(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.info("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.info("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)) { - File file = new File(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 { - Composite compositeCollection; - File file = new File(compositeFile); - if (file.exists()) { - 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); - } - } 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)); - } - return compositeCollection; - } - - /** - * Write the domain composite back to disk. - * - * @param compositeCollection - */ - private void writeCompositeCollection(Composite compositeCollection) { - try { - // 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 - FileOutputStream os = new FileOutputStream(new File(compositeFile)); - XMLSerializer serializer = new XMLSerializer(os, format); - serializer.serialize(document); - } catch (Exception e) { - throw new ServiceRuntimeException(e); - } - } - -} diff --git a/branches/sca-java-1.2/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/DomainAdminUtil.java b/branches/sca-java-1.2/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/DomainAdminUtil.java deleted file mode 100644 index 39fec24e92..0000000000 --- a/branches/sca-java-1.2/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/DomainAdminUtil.java +++ /dev/null @@ -1,249 +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.workspace.admin.impl; - -import java.io.File; -import java.net.MalformedURLException; -import java.net.URI; -import java.net.URL; - -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.contribution.ModelFactoryExtensionPoint; -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.core.assembly.ActivationException; -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.core.invocation.ProxyFactoryExtensionPoint; -import org.apache.tuscany.sca.host.embedded.impl.ReallySmallRuntime; -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 DomainAdminUtil { - - 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(DomainAdminUtil.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) { - URI uri = URI.create(contributionLocation); - if ("file".equals(uri.getScheme())) { - String path = uri.toString().substring(5); - File file = new File(path); - if (file.isDirectory()) { - if (contributionLocation.endsWith("/")) { - return contributionLocation + deployableURI; - } else { - return contributionLocation + "/" + deployableURI; - } - } else { - return contributionLocation + "!/" + deployableURI; - } - } else { - return contributionLocation + "!/" + deployableURI; - } - } - - /** - * 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); - } - } - - /** - * Temporary instantiation of a dummy Tuscany runtime. - * FIXME We need a better way to bootstrap without having to create - * a runtime instance at all. - * - * @return - */ - static ReallySmallRuntime newRuntime() { - try { - ReallySmallRuntime runtime = new ReallySmallRuntime(Thread.currentThread().getContextClassLoader()); - runtime.start(); - return runtime; - } catch (ActivationException e) { - throw new ServiceRuntimeException(e); - } - } -} diff --git a/branches/sca-java-1.2/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/FileCollectionImpl.java b/branches/sca-java-1.2/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/FileCollectionImpl.java deleted file mode 100644 index 241dc6f55b..0000000000 --- a/branches/sca-java-1.2/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/FileCollectionImpl.java +++ /dev/null @@ -1,129 +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.workspace.admin.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.implementation.data.collection.Entry; -import org.apache.tuscany.sca.implementation.data.collection.Item; -import org.apache.tuscany.sca.implementation.data.collection.ItemCollection; -import org.apache.tuscany.sca.implementation.data.collection.NotFoundException; -import org.osoa.sca.annotations.Init; -import org.osoa.sca.annotations.Property; -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 final static Logger logger = Logger.getLogger(FileCollectionImpl.class.getName()); - - @Property - public String directoryName; - - /** - * Initialize the component. - */ - @Init - public void initialize() throws IOException { - } - - public Entry<String, Item>[] getAll() { - logger.info("getAll"); - - // Return all the files - List<Entry<String, Item>> entries = new ArrayList<Entry<String, Item>>(); - File directory = new File(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.info("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.info("delete " + key); - - File directory = new File(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-java-1.2/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/FileServiceImpl.java b/branches/sca-java-1.2/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/FileServiceImpl.java deleted file mode 100644 index fe0fc9e415..0000000000 --- a/branches/sca-java-1.2/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/FileServiceImpl.java +++ /dev/null @@ -1,147 +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.workspace.admin.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.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 final static Logger logger = Logger.getLogger(FileServiceImpl.class.getName()); - - @Property - public String directoryName; - - 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 - try { - for (FileItem item: (List<FileItem>)upload.parseRequest(request)) { - if (!item.isFormField()) { - File directory = new File(directoryName); - if (!directory.exists()) { - directory.mkdirs(); - } - logger.info("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.info("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 - uri = new File(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-java-1.2/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/NodeProcessCollectionFacadeImpl.java b/branches/sca-java-1.2/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/NodeProcessCollectionFacadeImpl.java deleted file mode 100644 index 251f6cd410..0000000000 --- a/branches/sca-java-1.2/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/NodeProcessCollectionFacadeImpl.java +++ /dev/null @@ -1,249 +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.workspace.admin.impl; - -import static org.apache.tuscany.sca.workspace.admin.impl.DomainAdminUtil.compositeQName; -import static org.apache.tuscany.sca.workspace.admin.impl.DomainAdminUtil.dynamicReference; -import static org.apache.tuscany.sca.workspace.admin.impl.DomainAdminUtil.newRuntime; -import static org.apache.tuscany.sca.workspace.admin.impl.DomainAdminUtil.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.AtomBinding; -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.host.embedded.impl.ReallySmallRuntime; -import org.apache.tuscany.sca.implementation.data.collection.Entry; -import org.apache.tuscany.sca.implementation.data.collection.Item; -import org.apache.tuscany.sca.implementation.data.collection.ItemCollection; -import org.apache.tuscany.sca.implementation.data.collection.LocalItemCollection; -import org.apache.tuscany.sca.implementation.data.collection.NotFoundException; -import org.osoa.sca.ServiceReference; -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 final static Logger logger = Logger.getLogger(NodeProcessCollectionFacadeImpl.class.getName()); - - @Reference - public LocalItemCollection cloudCollection; - - private AssemblyFactory assemblyFactory; - private AtomBindingFactory atomBindingFactory; - private CompositeActivator compositeActivator; - - /** - * Initialize the component. - */ - @Init - public void initialize() { - - // Get a runtime - ReallySmallRuntime runtime = newRuntime(); - - // Get its composite activator - compositeActivator = runtime.getCompositeActivator(); - - // Get the model factories - ExtensionPointRegistry registry = runtime.getExtensionPointRegistry(); - ModelFactoryExtensionPoint modelFactories = registry.getExtensionPoint(ModelFactoryExtensionPoint.class); - assemblyFactory = modelFactories.getFactory(AssemblyFactory.class); - atomBindingFactory = modelFactories.getFactory(AtomBindingFactory.class); - } - - public Entry<String, Item>[] getAll() { - logger.info("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.info("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.info("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.info("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.info("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) { - 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-java-1.2/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/QuickStartServiceImpl.java b/branches/sca-java-1.2/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/impl/QuickStartServiceImpl.java deleted file mode 100644 index 550f97c2ad..0000000000 --- a/branches/sca-java-1.2/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/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.workspace.admin.impl; - -import static org.apache.tuscany.sca.workspace.admin.impl.DomainAdminUtil.compositeKey; -import static org.apache.tuscany.sca.workspace.admin.impl.DomainAdminUtil.compositeQName; -import static org.apache.tuscany.sca.workspace.admin.impl.DomainAdminUtil.contributionURI; -import static org.apache.tuscany.sca.workspace.admin.impl.DomainAdminUtil.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.implementation.data.collection.Entry; -import org.apache.tuscany.sca.implementation.data.collection.Item; -import org.apache.tuscany.sca.implementation.data.collection.LocalItemCollection; -import org.apache.tuscany.sca.implementation.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 final static 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.info("Composite Quick Start."); - logger.info("Contribution URI: " + contributionURI); - logger.info("Contribution location: " + contributionLocation); - logger.info("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-java-1.2/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/launcher/DomainManagerLauncherBootstrap.java b/branches/sca-java-1.2/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/launcher/DomainManagerLauncherBootstrap.java deleted file mode 100644 index 7b23951aef..0000000000 --- a/branches/sca-java-1.2/modules/workspace-admin/src/main/java/org/apache/tuscany/sca/workspace/admin/launcher/DomainManagerLauncherBootstrap.java +++ /dev/null @@ -1,84 +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.workspace.admin.launcher; - -import org.apache.tuscany.sca.host.embedded.SCADomain; -import org.apache.tuscany.sca.node.SCANode2; - -/** - * Bootstrap class for the SCA domain manager. - * - * @version $Rev$ $Date$ - */ -public class DomainManagerLauncherBootstrap { - private SCANode2 node; - - /** - * A node wrappering an instance of a domain manager. - */ - public static class NodeFacade implements SCANode2 { - private ClassLoader threadContextClassLoader; - private ClassLoader runtimeClassLoader; - private SCADomain domainManager; - - private NodeFacade() { - runtimeClassLoader = Thread.currentThread().getContextClassLoader(); - } - - public void start() { - threadContextClassLoader = Thread.currentThread().getContextClassLoader(); - boolean started = false; - try { - Thread.currentThread().setContextClassLoader(runtimeClassLoader); - domainManager = SCADomain.newInstance("DomainManager.composite"); - started = true; - } finally { - if (!started) { - Thread.currentThread().setContextClassLoader(threadContextClassLoader); - } - } - } - - public void stop() { - try { - Thread.currentThread().setContextClassLoader(runtimeClassLoader); - domainManager.close(); - } finally { - Thread.currentThread().setContextClassLoader(threadContextClassLoader); - } - } - } - - /** - * Constructs a new domain manager bootstrap. - */ - public DomainManagerLauncherBootstrap() throws Exception { - node = new NodeFacade(); - } - - /** - * Returns the node representing the domain manager. - * @return - */ - public SCANode2 getNode() { - return node; - } - -} |