All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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 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