| /* |
| * 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; |
| } |