blob: 538e9c9051b2e1dd932f17827590577b561b3c1c [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010-2015, Andras Szabolcs Nagy, Abel Hegedus, Akos Horvath, Zoltan Ujhelyi and Daniel Varro
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-v20.html.
*
* SPDX-License-Identifier: EPL-2.0
*******************************************************************************/
package org.eclipse.viatra.dse.examples.bpmn.problems;
import org.eclipse.viatra.dse.examples.simplifiedbpmn.BaseElement;
import org.eclipse.viatra.dse.examples.simplifiedbpmn.EndEvent;
import org.eclipse.viatra.dse.examples.simplifiedbpmn.Gateway;
import org.eclipse.viatra.dse.examples.simplifiedbpmn.ParallelGateway;
import org.eclipse.viatra.dse.examples.simplifiedbpmn.ResourceInstance;
import org.eclipse.viatra.dse.examples.simplifiedbpmn.ResourceType;
import org.eclipse.viatra.dse.examples.simplifiedbpmn.ResourceTypeVariant;
import org.eclipse.viatra.dse.examples.simplifiedbpmn.SequenceFlow;
import org.eclipse.viatra.dse.examples.simplifiedbpmn.SimplifiedBPMN;
import org.eclipse.viatra.dse.examples.simplifiedbpmn.SimplifiedbpmnFactory;
import org.eclipse.viatra.dse.examples.simplifiedbpmn.StartEvent;
import org.eclipse.viatra.dse.examples.simplifiedbpmn.Task;
/**
* This class simplifies the creation of a BPMN model by defining helper methods.
*
* @author Andras Szabolcs Nagy
*/
public class SimplifiedBpmnBuilder {
private final SimplifiedBPMN root;
private SimplifiedbpmnFactory factory;
public SimplifiedBpmnBuilder(SimplifiedBPMN root) {
this.root = root;
factory = SimplifiedbpmnFactory.eINSTANCE;
}
public SimplifiedBpmnBuilder() {
factory = SimplifiedbpmnFactory.eINSTANCE;
this.root = factory.createSimplifiedBPMN();
}
public SimplifiedBPMN getRoot() {
return root;
}
public StartEvent createStartEvent(String name) {
StartEvent startEvent = factory.createStartEvent();
startEvent.setName(name);
root.getStartEvents().add(startEvent);
return startEvent;
}
public EndEvent createEndEvent(String name) {
EndEvent endEvent = factory.createEndEvent();
endEvent.setName(name);
root.getEndEvents().add(endEvent);
return endEvent;
}
public Task createTask(String name, int execTime, ResourceType resourceType) {
Task task = factory.createTask();
task.setName(name);
task.setExecutionTime(execTime);
task.setResourceNeeded(resourceType);
root.getTasks().add(task);
return task;
}
public Task createTask(String name, int execTime) {
return createTask(name, execTime, null);
}
public Gateway createGateway(String name) {
Gateway gateway = factory.createGateway();
gateway.setName(name);
root.getGateways().add(gateway);
return gateway;
}
public ParallelGateway createParallelGateway(BaseElement e1, BaseElement e2, boolean isDiverging) {
ParallelGateway gateway = factory.createParallelGateway();
StringBuilder sb = new StringBuilder();
if (isDiverging) {
sb.append("Diverging:");
} else {
sb.append("Conerging:");
}
sb.append(createOrderedString(e1.getName(), e2.getName()));
gateway.setName(sb.toString());
gateway.setDiverging(isDiverging);
root.getParallelGateways().add(gateway);
return gateway;
}
public ResourceType createResourceType(String name) {
ResourceType resourceType = factory.createResourceType();
resourceType.setName(name);
root.getResourceTypes().add(resourceType);
return resourceType;
}
public ResourceType createResourceTypeWithSimpleVariant(String name, int count) {
ResourceType resourceType = createResourceType(name);
createResourceTypeVariant(name, resourceType, 1.0, count);
return resourceType;
}
public ResourceTypeVariant createResourceTypeVariant(String name, ResourceType resourceType, double efficiency,
int count) {
ResourceTypeVariant resourceTypeVariant = factory.createResourceTypeVariant();
resourceTypeVariant.setName(name);
resourceTypeVariant.setEfficiency(efficiency);
resourceType.getVariants().add(resourceTypeVariant);
for (int i = 0; i < count; i++) {
ResourceInstance instance = factory.createResourceInstance();
resourceTypeVariant.getInstances().add(instance);
}
return resourceTypeVariant;
}
public ResourceTypeVariant createResourceTypeVariant(String name, ResourceType resourceType, double efficiency) {
return createResourceTypeVariant(name, resourceType, efficiency, 0);
}
public ResourceTypeVariant createResourceTypeVariant(String name, ResourceType resourceType) {
return createResourceTypeVariant(name, resourceType, 1.0d, 0);
}
public SequenceFlow createFlow(BaseElement source, BaseElement target, int propability) {
SequenceFlow flow = factory.createSequenceFlow();
root.getSequenceFlows().add(flow);
flow.setSource(source);
flow.setTarget(target);
flow.setPropability(propability);
return flow;
}
public SequenceFlow createFlow(BaseElement source, BaseElement target) {
return createFlow(source, target, 1);
}
public SequenceFlow createDataFlow(BaseElement source, BaseElement target, int propability) {
SequenceFlow flow = createFlow(source, target, propability);
flow.setIsDataFlow(true);
return flow;
}
public SequenceFlow createDataFlow(BaseElement source, BaseElement target) {
SequenceFlow flow = createFlow(source, target, 1);
flow.setIsDataFlow(true);
return flow;
}
public static String createOrderedString(String s1, String s2) {
int sign = s1.compareTo(s2);
return (sign > 0 ? s1 : s2) + "%" + (sign > 0 ? s2 : s1);
}
}