summaryrefslogtreecommitdiffstats
path: root/branches/sca-java-1.x/modules/workspace-manager/src/main/java/org/apache
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--branches/sca-java-1.x/modules/workspace-manager/src/main/java/org/apache/tuscany/sca/workspace/manager/WorkspaceManager.java106
-rw-r--r--branches/sca-java-1.x/modules/workspace-manager/src/main/java/org/apache/tuscany/sca/workspace/manager/impl/WorkspaceManagerImpl.java (renamed from branches/sca-java-1.x/modules/workspace-impl/src/main/java/org/apache/tuscany/sca/workspace/manager/impl/WorkspaceManagerImpl.java)59
2 files changed, 141 insertions, 24 deletions
diff --git a/branches/sca-java-1.x/modules/workspace-manager/src/main/java/org/apache/tuscany/sca/workspace/manager/WorkspaceManager.java b/branches/sca-java-1.x/modules/workspace-manager/src/main/java/org/apache/tuscany/sca/workspace/manager/WorkspaceManager.java
new file mode 100644
index 0000000000..0ea82f8e86
--- /dev/null
+++ b/branches/sca-java-1.x/modules/workspace-manager/src/main/java/org/apache/tuscany/sca/workspace/manager/WorkspaceManager.java
@@ -0,0 +1,106 @@
+/*
+ * 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.manager;
+
+import org.apache.tuscany.sca.contribution.Contribution;
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+import org.apache.tuscany.sca.workspace.Workspace;
+import org.apache.tuscany.sca.workspace.manager.impl.WorkspaceManagerImpl;
+import org.osoa.sca.ServiceRuntimeException;
+
+/**
+ * This workspace manager class provides an SPI for firing up the Tuscany runtime
+ * and for providing access to the Tuscany ExtensionPointRegsitry. With a reference to the
+ * registry you can add new extension points programmatically before starting the runtime.
+ * Once the runtime is started you can read contributions, create a workspace, populate it
+ * and then resolve it.
+ *
+ * A workspace is a collection of contributions. A workspace populated
+ * with one or more contribution models can be resolved to ensure
+ * that all referenced artifacts are located. When more than one contribution
+ * model is present resolution takes into account the import and export relationships
+ * between contributions.
+ */
+public abstract class WorkspaceManager {
+
+ /**
+ * Get a new instance of the WorkspaceManager. Each call will create a
+ * distinct instance.
+ *
+ * @return workspace manager
+ */
+ public static WorkspaceManager newInstance() throws ServiceRuntimeException{
+ try {
+ // replace with service discovery lookup?
+ return new WorkspaceManagerImpl();
+ } catch(Exception ex){
+ throw new ServiceRuntimeException(ex);
+ }
+ }
+
+ /**
+ * If you want to add new extensions to the extension point
+ * registry and have the runtime take notice of them you need
+ * to do this before calling start
+ */
+ public abstract ExtensionPointRegistry getRegistry();
+
+ /**
+ * Starting the runtime creates the extensible model processors and
+ * resolvers based on the extension points currently found in the
+ * extension point registry.
+ */
+ public abstract void start() throws ServiceRuntimeException;
+
+ /**
+ * Remove any resources being held by the runtime
+ */
+ public abstract void stop() throws ServiceRuntimeException;
+
+ /**
+ * Create an empty workspace
+ *
+ * @return workspace
+ */
+ public abstract Workspace createWorkspace() throws ServiceRuntimeException;
+
+ /**
+ * Create a contribution model by reading from the specified location URL
+ *
+ * @param name the URI that's given to the contribution
+ * @param location the URL of the contribution to be read
+ */
+ public abstract Contribution readContribution(String name, String location) throws ServiceRuntimeException;
+
+ /**
+ * Add a contribution to a workspace
+ *
+ * @param workspace the workspace to be extended
+ * @param contribution the contribution to be added
+ */
+ public abstract void addContributionToWorkspace(Workspace workspace, Contribution contribution) throws ServiceRuntimeException;
+
+ /**
+ * Resolve all of the contributions in the workspace
+ *
+ * @param workspace
+ */
+ public abstract void resolveWorkspace(Workspace workspace) throws ServiceRuntimeException;
+}
diff --git a/branches/sca-java-1.x/modules/workspace-impl/src/main/java/org/apache/tuscany/sca/workspace/manager/impl/WorkspaceManagerImpl.java b/branches/sca-java-1.x/modules/workspace-manager/src/main/java/org/apache/tuscany/sca/workspace/manager/impl/WorkspaceManagerImpl.java
index 97f1f472f1..f732cf7337 100644
--- a/branches/sca-java-1.x/modules/workspace-impl/src/main/java/org/apache/tuscany/sca/workspace/manager/impl/WorkspaceManagerImpl.java
+++ b/branches/sca-java-1.x/modules/workspace-manager/src/main/java/org/apache/tuscany/sca/workspace/manager/impl/WorkspaceManagerImpl.java
@@ -37,7 +37,6 @@ import org.apache.tuscany.sca.monitor.Monitor;
import org.apache.tuscany.sca.monitor.MonitorFactory;
import org.apache.tuscany.sca.monitor.Problem;
import org.apache.tuscany.sca.monitor.Problem.Severity;
-import org.apache.tuscany.sca.workspace.ContributionConfiguration;
import org.apache.tuscany.sca.workspace.Workspace;
import org.apache.tuscany.sca.workspace.WorkspaceFactory;
import org.apache.tuscany.sca.workspace.builder.ContributionDependencyBuilder;
@@ -46,14 +45,19 @@ import org.apache.tuscany.sca.workspace.manager.WorkspaceManager;
import org.osoa.sca.ServiceRuntimeException;
/**
- * An SPI for firing up the Tuscany runtime and for providing
- * access to the ExtensionPointRegsitry. With a reference to the
- * registry you can add new extension points and then start the
- * runtime. Once started you can create worksapces and use them
- * to read and resolve SCA contributions in the same way that
- * Tuscany does internally.
+ * This workspace manager class provides an SPI for firing up the Tuscany runtime
+ * and for providing access to the Tuscany ExtensionPointRegsitry. With a reference to the
+ * registry you can add new extension points programmatically before starting the runtime.
+ * Once the runtime is started you can read contributions, create a workspace, populate it
+ * and then resolve it.
+ *
+ * A workspace is a collection of contributions. A workspace populated
+ * with one or more contribution models can be resolved to ensure
+ * that all referenced artifacts are located. When more than one contribution
+ * model is present resolution takes into account the import and export relationships
+ * between contributions.
*/
-public class WorkspaceManagerImpl implements WorkspaceManager {
+public class WorkspaceManagerImpl extends WorkspaceManager {
private ReallySmallRuntime runtime;
@@ -67,7 +71,7 @@ public class WorkspaceManagerImpl implements WorkspaceManager {
private MonitorFactory monitorFactory;
private Monitor monitor;
- public WorkspaceManagerImpl(){
+ public WorkspaceManagerImpl() throws ServiceRuntimeException{
try {
runtime = new ReallySmallRuntime(Thread.currentThread().getContextClassLoader());
@@ -93,7 +97,7 @@ public class WorkspaceManagerImpl implements WorkspaceManager {
return runtime.getExtensionPointRegistry();
}
- public void start(){
+ public void start() throws ServiceRuntimeException {
try {
runtime.start();
} catch(Exception ex) {
@@ -101,7 +105,7 @@ public class WorkspaceManagerImpl implements WorkspaceManager {
}
}
- public void stop(){
+ public void stop() throws ServiceRuntimeException{
try {
runtime.stop();
} catch(Exception ex) {
@@ -116,14 +120,14 @@ public class WorkspaceManagerImpl implements WorkspaceManager {
return workspace;
}
-
- public Contribution addContributionToWorkspace(Workspace workspace, Contribution contribution){
+
+
+ public Contribution readContribution(String name, String location) throws ServiceRuntimeException{
try {
- Contribution returnContribution = contributionProcessor.read(null,
- URI.create(contribution.getURI()),
- new File(contribution.getLocation()).toURI().toURL());
-
- workspace.getContributions().add(returnContribution);
+ Contribution returnContribution =
+ contributionProcessor.read(null,
+ URI.create(name),
+ new File(location).toURI().toURL());
analyzeProblems();
@@ -133,12 +137,23 @@ public class WorkspaceManagerImpl implements WorkspaceManager {
throw new ServiceRuntimeException(ex);
}
}
+
+ public void addContributionToWorkspace(Workspace workspace, Contribution contribution) throws ServiceRuntimeException{
+ try {
+
+ workspace.getContributions().add(contribution);
+
+
+ } catch (Exception ex) {
+ throw new ServiceRuntimeException(ex);
+ }
+ }
- public void resolveWorkspace(Workspace workspace){
+ public void resolveWorkspace(Workspace workspace) throws ServiceRuntimeException {
try {
// some algorithm to resolve contributions given their dependencies
// need to look at the one from 2.x as this one expects contributions
- // presented in the right order
+ // to be presented in the right order
Set<Contribution> resolved = new HashSet<Contribution>();
for (Contribution contribution: workspace.getContributions()) {
List<Contribution> dependencies = contributionDependencyBuilder.buildContributionDependencies(contribution, workspace);
@@ -159,10 +174,6 @@ public class WorkspaceManagerImpl implements WorkspaceManager {
}
}
- public void removeContributionFromWorkspace(Workspace workspace, Contribution contribution){
- workspace.getContributions().remove(contribution);
- }
-
private void analyzeProblems() throws Exception {
for (Problem problem : monitor.getProblems()) {