/**
* Copyright 2010 JBoss Inc
*
* Licensed 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.drools.bpel.instance;
import org.drools.bpel.core.BPELProcess;
import org.drools.runtime.process.NodeInstance;
import org.drools.workflow.core.Node;
import org.drools.workflow.instance.impl.WorkflowProcessInstanceImpl;
/**
*
* @author <a href="mailto:kris_verlaenen@hotmail.com">Kris Verlaenen</a>
*/
public class BPELProcessInstance extends WorkflowProcessInstanceImpl {
private static final long serialVersionUID = 510l;
public BPELProcess getBPELProcess() {
return (BPELProcess) getProcess();
}
// TODO: unification with signalEvent
// public void acceptMessage(String partnerLink, String portType, String operation, String message) {
// if (getState() == STATE_PENDING) {
// setState(STATE_ACTIVE);
// }
// BPELReceive receive = findBPELReceive(partnerLink, portType, operation);
// if (receive == null) {
// throw new IllegalArgumentException(
// "Could not find BPELReceive for " + partnerLink + ", " + portType + ", " + operation);
// }
// BPELActivity activity = receive;
// List<BPELActivity> parents = new ArrayList<BPELActivity>();
// while (!activity.getNodeContainer().equals(getBPELProcess())) {
// activity = (BPELActivity) activity.getNodeContainer();
// parents.add(0, activity);
// }
// NodeInstanceContainer nodeInstanceContainer = this;
// for (Iterator<BPELActivity> iterator = parents.iterator(); iterator.hasNext(); ) {
// BPELActivity parent = iterator.next();
// NodeInstance nodeInstance = nodeInstanceContainer.getFirstNodeInstance(parent.getId());
// if (nodeInstance != null) {
// nodeInstanceContainer = (NodeInstanceContainer) nodeInstance;
// } else if (receive.isCreateInstance()) {
// nodeInstanceContainer = (NodeInstanceContainer) nodeInstanceContainer.getNodeInstance(parent);
// } else {
// // TODO: store message in cache of accepted messages
// return;
// }
// }
// BPELReceiveInstance bpelReceiveInstance = (BPELReceiveInstance) nodeInstanceContainer.getNodeInstance(receive);
// ((EventSupport) getWorkingMemory()).getRuleFlowEventSupport().fireBeforeRuleFlowNodeTriggered(bpelReceiveInstance, (InternalWorkingMemory) getWorkingMemory());
// bpelReceiveInstance.triggerCompleted(message);
// ((EventSupport) getWorkingMemory()).getRuleFlowEventSupport().fireAfterRuleFlowNodeTriggered(bpelReceiveInstance, (InternalWorkingMemory) getWorkingMemory());
// }
//
// private BPELReceive findBPELReceive(String partnerLink, String portType, String operation) {
// return findBPELReceive(partnerLink, portType, operation, getBPELProcess().getActivity());
// }
//
// private BPELReceive findBPELReceive(String partnerLink, String portType, String operation, Node node) {
// if (node instanceof BPELReceive) {
// BPELReceive receive = (BPELReceive) node;
// if (receive.getPartnerLink().equals(partnerLink)
// && receive.getPortType().equals(portType)
// && receive.getOperation().equals(operation)) {
// return receive;
// }
// return null;
// }
// if (node instanceof NodeContainer) {
// Node[] nodes = ((NodeContainer) node).getNodes();
// for (int i = 0; i < nodes.length; i++) {
// BPELReceive result = findBPELReceive(partnerLink, portType, operation, nodes[i]);
// if (result != null) {
// return result;
// }
// }
// }
// return null;
// }
@Override
protected void internalStart() {
NodeInstance nodeInstance = getNodeInstance(getBPELProcess().getActivity());
((org.drools.workflow.instance.NodeInstance) nodeInstance)
.trigger(null, Node.CONNECTION_DEFAULT_TYPE);
}
}