/*
* 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.bpmscript.remote;
import java.util.ArrayList;
import java.util.List;
import javax.jbi.component.Component;
import javax.xml.namespace.QName;
import org.apache.servicemix.common.BaseComponent;
import org.bpmscript.BpmScriptException;
import org.bpmscript.IPagedResult;
import org.bpmscript.IProcess;
import org.bpmscript.IProcessInstance;
import org.bpmscript.IProcessInstanceManager;
import org.bpmscript.IProcessManager;
import org.bpmscript.IProcessSource;
import org.bpmscript.IProcessSourceName;
import org.bpmscript.IQuery;
import org.bpmscript.ProcessSourceName;
import org.bpmscript.jbi.IComponentAware;
import org.bpmscript.jbi.component.BpmScriptLifeCycle;
import org.bpmscript.jbi.component.ProcessEndpoint;
public class RemoteProcessManager implements IRemoteProcessManager, IComponentAware {
private final transient org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory
.getLog(getClass());
private IProcessManager processManager = null;
private IProcessInstanceManager processInstanceManager = null;
private Component component;
/* (non-Javadoc)
* @see org.bpmscript.remote.IRemoteProcessManager#addSourceToProcess(java.lang.String, java.lang.String, java.lang.String, boolean)
*/
public void addSourceToProcess(String processId, String name, String source, boolean main) throws BpmScriptException {
processManager.addSourceToProcess(processId, name, source, main);
}
/* (non-Javadoc)
* @see org.bpmscript.remote.IRemoteProcessManager#createProcess(java.lang.String)
*/
public String createProcess(String source, String name) throws BpmScriptException {
IProcess primaryProcess = processManager.getPrimaryProcess(name);
if(primaryProcess == null) {
log.info("new process " + name + " registering endpoint");
String processId = processManager.createProcess(source, name, false);
BpmScriptLifeCycle lifeCycle = (BpmScriptLifeCycle) component.getLifeCycle();
ProcessEndpoint processEndpoint = new ProcessEndpoint();
processEndpoint.setProcessId(processId);
processEndpoint.setProcessInstanceManager(processInstanceManager);
processEndpoint.setProcessExecutor(lifeCycle.getProcessExecutor());
processEndpoint.setServiceUnit(lifeCycle.getProcessServiceUnit());
QName service = new QName(lifeCycle.getDefaultNamespace(), name);
processEndpoint.setService(service);
processEndpoint.setEndpoint(name);
lifeCycle.getProcessServiceUnit().addEndpoint(processEndpoint);
BaseComponent baseComponent = (BaseComponent) component;
baseComponent.getRegistry().registerEndpoint(processEndpoint);
log.info("endpoint " + service + " registered");
try {
processEndpoint.activate();
processEndpoint.start();
log.info("endpoint " + service + " started");
} catch (Exception e) {
throw new BpmScriptException(e);
}
return processId;
} else {
String processId = processManager.createProcess(source, name, primaryProcess.isPinned());
return processId;
}
}
/* (non-Javadoc)
* @see org.bpmscript.remote.IRemoteProcessManager#getMainSource(java.lang.String)
*/
public IProcessSource getMainSource(String processId) throws BpmScriptException {
return processManager.getMainSource(processId);
}
/* (non-Javadoc)
* @see org.bpmscript.remote.IRemoteProcessManager#getProcess(java.lang.String)
*/
public IProcess getProcess(String processId) throws BpmScriptException {
return processManager.getProcess(processId);
}
/* (non-Javadoc)
* @see org.bpmscript.remote.IRemoteProcessManager#getProcesses()
*/
public List<IProcess> getPrimaryProcesses() throws BpmScriptException {
return processManager.getPrimaryProcesses();
}
/* (non-Javadoc)
* @see org.bpmscript.remote.IRemoteProcessManager#getProcessSources(java.lang.String)
*/
public List<IProcessSource> getProcessSources(String processId) throws BpmScriptException {
return processManager.getProcessSources(processId);
}
/* (non-Javadoc)
* @see org.bpmscript.remote.IRemoteProcessManager#setProcessAsPrimary(java.lang.String)
*/
public void setProcessAsPrimary(String processId) throws BpmScriptException {
processManager.setProcessAsPrimary(processId);
}
public void setProcessManager(IProcessManager processManager) {
this.processManager = processManager;
}
public IProcessInstance getProcessInstance(String processInstanceId) throws BpmScriptException {
return this.processInstanceManager.getProcessInstance(processInstanceId);
}
public IProcessSource getProcessSource(String processSourceId) throws BpmScriptException {
return this.processManager.getProcessSource(processSourceId);
}
public List<IProcessSourceName> getProcessSourceNames(String processId) throws BpmScriptException {
List<IProcessSource> processSources = processManager.getProcessSources(processId);
List<IProcessSourceName> result = new ArrayList<IProcessSourceName>();
for (IProcessSource source : processSources) {
result.add(new ProcessSourceName(source.getId(), source.getName(), source.isMain()));
}
return result;
}
public List<IProcessInstance> getChildProcessInstances(String processInstanceId) throws BpmScriptException {
return processInstanceManager.getChildProcessInstances(processInstanceId);
}
public IPagedResult<IProcessInstance> getProcessInstances(IQuery query) throws BpmScriptException {
return processInstanceManager.getProcessInstances(query);
}
public IProcess getPrimaryProcess(String name) throws BpmScriptException {
return processManager.getPrimaryProcess(name);
}
public void setComponent(Component component) {
this.component = component;
}
public IProcessInstanceManager getProcessInstanceManager() {
return processInstanceManager;
}
public void setProcessInstanceManager(
IProcessInstanceManager processInstanceManager) {
this.processInstanceManager = processInstanceManager;
}
public List<IProcess> getProcessVersions(String name) throws BpmScriptException {
return this.processManager.getProcessVersions(name);
}
}
|