/**
* Copyright 2010 Red Hat, Inc. and/or its affiliates.
*
* 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.jbpm.ruleflow.core.factory;
import org.jbpm.process.core.event.EventFilter;
import org.jbpm.process.core.event.EventTransformer;
import org.jbpm.process.core.event.EventTypeFilter;
import org.jbpm.ruleflow.core.RuleFlowNodeContainerFactory;
import org.jbpm.workflow.core.Node;
import org.jbpm.workflow.core.NodeContainer;
import org.jbpm.workflow.core.node.BoundaryEventNode;
public class BoundaryEventNodeFactory extends NodeFactory {
private NodeContainer nodeContainer;
private String attachedToUniqueId;
public BoundaryEventNodeFactory(RuleFlowNodeContainerFactory nodeContainerFactory, NodeContainer nodeContainer, long id) {
super(nodeContainerFactory, nodeContainer, id);
this.nodeContainer = nodeContainer;
}
public BoundaryEventNodeFactory attachedTo(long attachedToId) {
attachedToUniqueId = (String)nodeContainer.getNode(attachedToId).getMetaData().get("UniqueId");
getBoundaryEventNode().setAttachedToNodeId(attachedToUniqueId);
getBoundaryEventNode().setMetaData("AttachedTo", attachedToUniqueId);
return this;
}
protected Node createNode() {
return new BoundaryEventNode();
}
protected BoundaryEventNode getBoundaryEventNode() {
return(BoundaryEventNode) getNode();
}
public BoundaryEventNodeFactory name(String name) {
getNode().setName(name);
return this;
}
public BoundaryEventNodeFactory variableName(String variableName) {
getBoundaryEventNode().setVariableName(variableName);
return this;
}
public BoundaryEventNodeFactory eventFilter(EventFilter eventFilter) {
getBoundaryEventNode().addEventFilter(eventFilter);
return this;
}
public BoundaryEventNodeFactory eventType(String eventType) {
EventTypeFilter filter = new EventTypeFilter();
filter.setType(eventType);
return eventFilter(filter);
}
public BoundaryEventNodeFactory eventType(String eventTypePrefix, String eventTypeSurffix) {
if (attachedToUniqueId == null) {
throw new IllegalStateException("attachedTo() must be called before");
}
EventTypeFilter filter = new EventTypeFilter();
filter.setType(eventTypePrefix + "-" + attachedToUniqueId + "-" + eventTypeSurffix);
return eventFilter(filter);
}
public BoundaryEventNodeFactory timeCycle(String timeCycle) {
eventType("Timer", timeCycle);
setMetaData("TimeCycle", timeCycle);
return this;
}
public BoundaryEventNodeFactory timeCycle(String timeCycle, String language) {
eventType("Timer", timeCycle);
setMetaData("TimeCycle", timeCycle);
setMetaData("Language", language);
return this;
}
public BoundaryEventNodeFactory timeDuration(String timeDuration) {
eventType("Timer", timeDuration);
setMetaData("TimeDuration", timeDuration);
return this;
}
public BoundaryEventNodeFactory cancelActivity(boolean cancelActivity) {
setMetaData("CancelActivity", cancelActivity);
return this;
}
public BoundaryEventNodeFactory eventTransformer(EventTransformer transformer) {
getBoundaryEventNode().setEventTransformer(transformer);
return this;
}
public BoundaryEventNodeFactory scope(String scope) {
getBoundaryEventNode().setScope(scope);
return this;
}
public BoundaryEventNodeFactory setMetaData(String name,Object value) {
getBoundaryEventNode().setMetaData(name, value);
return this;
}
}