package converter;
import bpcf.BPCtrlFlowModel;
import bpcf.BPElement;
import bpcf.BpcfFactory;
import bpcf.Start;
import epc.*;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import java.io.File;
import java.io.IOException;
import java.util.Collections;
import java.util.HashMap;
import java.util.UUID;
/**
* Created by miguel on 06-05-2014.
*/
public class EPCManager implements Manager {
private EpcFactory epcFactory;
private EPCModel epcModel;
private HashMap<String, Object> elements;
int n = 0;
public EPCManager() {
epcFactory = EpcFactory.eINSTANCE;
epcModel = epcFactory.createEPCModel();
elements = new HashMap<String, Object>();
}
public void addActivity(String id, String name) {
System.out.println(".. Adding Activity " + name);
Function function = epcFactory.createFunction();
function.setUuid(id);
function.setName(name);
epcModel.getElements().add(function);
elements.put(id, function);
}
@Override
public void addFlow(String idFrom, String idTo) {
System.out.println("Adding flow from " + ((EPCFlowNode)elements.get(idFrom)).getName() + " to " + ((EPCFlowNode)elements.get(idTo)).getName() + "...");
if (n < 4) {
n++;
}
FlowConnection connection = epcFactory.createFlowConnection();
connection.setUuid(UUID.randomUUID().toString());
connection.setSource((EPCFlowNode) elements.get(idFrom));
connection.setTarget((EPCFlowNode) elements.get(idTo));
epcModel.getConnections().add(connection);
((EPCFlowNode) elements.get(idFrom)).getOutgoing().add(connection);
((EPCFlowNode) elements.get(idTo)).getIncoming().add(connection);
}
public void addMerge(String id, String name) {
System.out.println(".. Adding Merge Element " + name);
JoinLogicGate merge = epcFactory.createJoinLogicGate();
merge.setUuid(id);
merge.setName(name);
epcModel.getElements().add(merge);
elements.put(id, merge);
}
public void addFork(String id, String name) {
System.out.println(".. Adding Fork Element " + name);
SplitLogicGate fork = epcFactory.createSplitLogicGate();
fork.setUuid(id);
fork.setName(name);
epcModel.getElements().add(fork);
elements.put(id, fork);
}
public void addJoin(String id, String name) {
System.out.println(".. Adding Join Element " + name);
JoinLogicGate join = epcFactory.createJoinLogicGate();
join.setUuid(id);
join.setName(name);
epcModel.getElements().add(join);
elements.put(id, join);
}
public void addDecision(String id, String name) {
System.out.println(".. Adding Decision Element " + name);
SplitLogicGate decision = epcFactory.createSplitLogicGate();
decision.setUuid(id);
decision.setGateType(LogicGateType.XOR);
decision.setName(name);
epcModel.getElements().add(decision);
elements.put(id, decision);
}
public void addStart(String id, String name) {
System.out.println(".. Adding Start Element " + name);
Event start = epcFactory.createEvent();
start.setName(name);
start.setUuid(id);
elements.put(id, start);
epcModel.getElements().add(start);
}
@Override
public void addArtificialStart(String flowToId) {
}
public void addFinish(String id, String name) {
System.out.println(".. Adding Finish Element " + name);
Event end = epcFactory.createEvent();
end.setUuid(id);
end.setName(name);
elements.put(id, end);
epcModel.getElements().add(end);
}
@Override
public void addArtificialFinish(String flowFromId) {
}
public void saveModel(String path) {
System.out.println("Saving model in " + path + "...");
ResourceSet resSet = new ResourceSetImpl();
resSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put(
Resource.Factory.Registry.DEFAULT_EXTENSION, new org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl());
String newFileString = new File(path).getAbsolutePath();
URI fileURI = URI.createFileURI(newFileString);
Resource resource = resSet.createResource(fileURI);
resource.getContents().add(epcModel);
try {
resource.save(Collections.EMPTY_MAP);
} catch (IOException e) {
e.printStackTrace();
}
}
public HashMap<String, Object> getElements() {
return elements;
}
public static void main(String[] args) {
BpcfFactory factory = BpcfFactory.eINSTANCE;
BPCtrlFlowModel bpCtrlFlowModel = factory.createBPCtrlFlowModel();
// bpCtrlFlowModel.getBpElements().add(start);
BPElement start = factory.createStart();
Start start1 = factory.createStart();
// System.out.println(StartImpl.class);
// bpCtrlFlowModel.getStartEvents().add(start);
}
}