es.us.isa.bpmn.handler.Bpmn20ModelHandlerImpl Maven / Gradle / Ivy
package es.us.isa.bpmn.handler;
import es.us.isa.bpmn.xmlClasses.bpmn20.*;
import javax.xml.bind.JAXBElement;
import java.util.*;
/**
* Class that loads XML BPMN 2.0 models
*
* @author resinas
* @author Edelia
*
*/
public class Bpmn20ModelHandlerImpl extends AbstractModelHandler implements Bpmn20ModelHandler {
private Map processes;
private Map processOfElement;
private Map taskList;
private Map startEventList;
private Map endEventList;
private Map dataObjectList;
private Map sequenceFlowList;
private Map exclusiveGtwList;
private Map gatewayList;
private Map subProcessList;
private Map elementById;
private Map elementByName;
/**
* Constructor de la clase
*/
public Bpmn20ModelHandlerImpl() {
super();
processes = new HashMap();
processOfElement = new HashMap();
taskList = new HashMap();
startEventList = new HashMap();
endEventList = new HashMap();
dataObjectList = new HashMap();
sequenceFlowList = new HashMap();
exclusiveGtwList = new HashMap();
gatewayList = new HashMap();
subProcessList = new HashMap();
elementById = new HashMap();
elementByName = new HashMap();
}
/**
* Devuelve el mapa de TTask en el proceso. El id es la key en el mapa.
*/
public Map getTaskMap(){
return taskList;
}
/**
* Devuelve el mapa de StartEvent en el proceso. El id es la key en el mapa.
*/
public Map getStartEventMap(){
return startEventList;
}
/**
* Devuelve el mapa de EndEvent en el proceso. El id es la key en el mapa.
*/
public Map getEndEventMap(){
return endEventList;
}
/**
* Devuelve el mapa de DataObject en el proceso. El id es la key en el mapa.
*/
public Map getDataObjectMap(){
return dataObjectList;
}
/**
* Devuelve el mapa de SequenceFlow en el proceso. El id es la key en el mapa.
*/
public Map getSequenceFlowMap(){
return sequenceFlowList;
}
/**
* Devuelve el mapa de Gateway en el proceso. El id es la key en el mapa.
*/
public Map getGatewayMap(){
return gatewayList;
}
/**
* Devuelve el mapa de SequenceFlow en el proceso. El id es la key en el mapa.
*/
public Map getExclusiveGatewayMap(){
return exclusiveGtwList;
}
/**
* Devuelve el mapa de SubProcess en el proceso. El id es la key en el mapa.
*/
public Map getSubProcessMap(){
return subProcessList;
}
/**
* Returns factory classes that are used while loading XML files.
*/
@Override
protected Class[] iniLoader() {
return new Class[] {es.us.isa.bpmn.xmlClasses.bpmn20.ObjectFactory.class,
es.us.isa.bpmn.xmlClasses.bpmndi.ObjectFactory.class};
}
@Override
protected void beforeSave() {
}
public TDefinitions getDefinitions() {
return (TDefinitions) this.getElement().getValue();
}
@Override
public TProcess getProcessOfElement(String id) {
return processOfElement.get(id);
}
protected List readProcesses() {
List processes = new ArrayList();
TDefinitions tDefinitions = (TDefinitions) this.getElement().getValue();
for (JAXBElement> element : tDefinitions.getRootElement()) {
Object participant = element.getValue();
if (participant instanceof TProcess ) {
processes.add((TProcess) participant);
}
}
return processes;
}
/**
* Genera las instancias de clases del modelo a partir de instancias de clases Jabx.
*/
@Override
protected void afterLoad() {
for (TProcess p : readProcesses()) {
this.generateProcessModelLists(p);
this.processes.put(p.getId(), p);
}
}
/**
* Genera las instancias de clases del modelo, del proceso indicado
*
* @param process Clase Jaxb del proceso
*/
private void generateProcessModelLists(TProcess process){
List> flowElements= process.getFlowElement();
// itera por todos los elementos en el proceso, y de acuerdo a su tipo lo situa en el mapa correspondiente
for (JAXBElement extends TFlowElement> flowElement : flowElements) {
TFlowElement contentElement = flowElement.getValue();
processOfElement.put(contentElement.getId(), process);
elementById.put(contentElement.getId(), contentElement);
elementByName.put(contentElement.getName(), contentElement);
if (contentElement instanceof TStartEvent) {
TStartEvent startEvent = (TStartEvent) contentElement;
startEvent.getName();
startEventList.put(startEvent.getId(), startEvent);
} else if (contentElement instanceof TEndEvent) {
TEndEvent endEvent = (TEndEvent) contentElement;
endEvent.getName();
endEventList.put(endEvent.getId(), endEvent);
} else if (contentElement instanceof TTask) {
TTask task = (TTask) contentElement;
task.getName();
taskList.put(task.getId(), task);
} else if (contentElement instanceof TSubProcess) {
TSubProcess subprocess = (TSubProcess) contentElement;
subprocess.getName();
subProcessList.put(subprocess.getId(), subprocess);
} else if (contentElement instanceof TDataObject) {
TDataObject dataObject = (TDataObject) contentElement;
dataObject.getName();
dataObjectList.put(dataObject.getId(), dataObject);
} else if (contentElement instanceof TSequenceFlow) {
TSequenceFlow sequenceFlow = (TSequenceFlow) contentElement;
sequenceFlow.getName();
sequenceFlowList.put(sequenceFlow.getId(), sequenceFlow);
} else if (contentElement instanceof TExclusiveGateway) {
TExclusiveGateway exclusivegtw = (TExclusiveGateway) contentElement;
exclusivegtw.getName();
exclusiveGtwList.put(exclusivegtw.getId(), exclusivegtw);
} else if (contentElement instanceof TGateway) {
TGateway gtw = (TGateway) contentElement;
gtw.getName();
gatewayList.put(gtw.getId(), gtw);
}
}
}
/**
* Devuelve el objeto Jaxb del proceso
*
* @return Objeto TProcess
*/
@Override
public TProcess getProcess() {
TProcess p = null;
if (!processes.isEmpty()) {
p = processes.values().iterator().next();
}
return p;
}
/**
* Devuelve el id del proceso involucrado en el xml
*
* @return Id del proceso
*/
@Override
public String getProcId() {
return this.getProcess().getId();
}
@Override
public Collection getProcesses() {
return processes.values();
}
protected TProcess getProcess(String id) {
return processes.get(id);
}
@Override
public Collection getProcessId() {
return processes.keySet();
}
@Override
public TFlowElement getElementById(String id) {
return elementById.get(id);
}
@Override
public TFlowElement getElementByName(String name) {
return elementByName.get(name);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy