blob: 0ea82f8e86db627a84d37965029c99999746817e [file] [log] [blame]
/*
* 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;
}