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

org.yaoqiang.bpmn.model.elements.events.Event Maven / Gradle / Ivy

package org.yaoqiang.bpmn.model.elements.events;

import java.util.ArrayList;
import java.util.List;

import org.yaoqiang.bpmn.model.BPMNModelUtils;
import org.yaoqiang.bpmn.model.elements.XMLElement;
import org.yaoqiang.bpmn.model.elements.XMLTextElements;
import org.yaoqiang.bpmn.model.elements.activities.SubProcess;
import org.yaoqiang.bpmn.model.elements.core.common.FlowElements;
import org.yaoqiang.bpmn.model.elements.core.common.FlowNode;
import org.yaoqiang.bpmn.model.elements.data.Properties;
import org.yaoqiang.bpmn.model.elements.process.BPMNProcess;

/**
 * Event
 * 
 * @author Shi Yaoqiang([email protected])
 */
public abstract class Event extends FlowNode {

	private static final long serialVersionUID = 4420172447198557330L;

	public Event(FlowElements parent, String name) {
		super(parent, name);
	}

	protected void fillStructure() {
		Properties refProperties = new Properties(this);

		super.fillStructure();
		add(refProperties);
	}

	public final Properties getProperties() {
		return (Properties) get("properties");
	}
	
	public List getAccessibleProperties() {
		List properties = getProperties().getXMLElements();
		if (getParent().getParent() instanceof SubProcess) {
			properties.addAll(((SubProcess) getParent().getParent()).getAccessibleProperties());
		} else if (getParent().getParent() instanceof BPMNProcess) {
			properties.addAll(((BPMNProcess) getParent().getParent()).getAccessibleProperties());
		}
		return properties;
	}
	
	public final Properties setProperties(Properties properties) {
		getProperties().clear();
		getProperties().addAll(properties.getXMLElements());
		return properties;
	}
	
	public final EventDefinitions getEventDefinitions() {
		return (EventDefinitions) get("eventDefinitions");
	}
	
	public final EventDefinitions setEventDefinitions(EventDefinitions eventDefinitions){
		getEventDefinitions().clear();
		getEventDefinitions().addAll(eventDefinitions.getXMLElements());
		return eventDefinitions;
	}
	
	public final EventDefinition getEventDefinition() {
		if (getAllEventDefinitionList().isEmpty()) {
			return null;
		} else {
			return (EventDefinition) getAllEventDefinitionList().get(0);
		}
	}

	public final EventDefinition getRefEventDefinition() {
		if (getRefEventDefinitionList().isEmpty()) {
			return null;
		} else {
			return (EventDefinition) getRefEventDefinitionList().get(0);
		}
	}

	public final XMLTextElements getEventDefinitionRefs() {
		return (XMLTextElements) get("eventDefinitionRef");
	}

	public final XMLTextElements setEventDefinitionRefs(XMLTextElements eventDefinitionRefs){
		getEventDefinitionRefs().clear();
		getEventDefinitionRefs().addAll(eventDefinitionRefs.getXMLElements());
		return eventDefinitionRefs;
	}
	
	public final List getEventDefinitionRefList() {
		return getEventDefinitionRefs().getXMLElements();
	}

	public final List getAllEventDefinitionList() {
		List els = new ArrayList();
		els.addAll(getEventDefinitionList());
		els.addAll(getRefEventDefinitionList());
		return els;
	}
	
	public final List getEventDefinitionList() {
		return getEventDefinitions().getXMLElements();
	}
	
	public final List getRefEventDefinitionList() {
		List els = new ArrayList();
		for (XMLElement edRef: getEventDefinitionRefList()) {
			EventDefinition ed = BPMNModelUtils.getDefinitions(parent).getEventDefinition(edRef.toValue());
			if (ed != null) {
				ed = (EventDefinition) ed.clone();
				ed.setParent(getEventDefinitions());
				els.add(ed);
			}
		}
		return els;
	}

	public boolean hasEventDefinition(String id) {
		return getEventDefinitions().contains(id);
	}
	
	public boolean hasEventDefinitionRef(String ref) {
		for (XMLElement edRef: getEventDefinitionRefList()) {
			if (edRef.toValue().equals(ref)) {
				return true;
			}
		}
		return false;
	}
	
	public void addEventDefinitionRef(String ref) {
		for (XMLElement edRef: getEventDefinitionRefList()) {
			if (edRef.toValue().equals(ref)) {
				return;
			}
		}
		XMLElement eventDefinitionRef = getEventDefinitionRefs().generateNewElement();
		eventDefinitionRef.setValue(ref);
		getEventDefinitionRefs().add(eventDefinitionRef);
	}
	
	public final EventDefinition generateEventDefinition(String type) {
		EventDefinitions eventDefinitions = getEventDefinitions();
		eventDefinitions.setType(type);
		EventDefinition el = (EventDefinition)eventDefinitions.generateNewElement();
		return el;
	}
	
	public final void addEventDefinition(EventDefinition eventDefinition) {
		if (eventDefinition != null && !getEventDefinitions().contains(eventDefinition.getId())) {
			eventDefinition.setId(getEventDefinitions().createId(getId() + "_ED"));
			getEventDefinitions().add(eventDefinition);
		}
	}

	public void removeEventDefinition(String id) {
		if (getEventDefinitions().contains(id)) {
			getEventDefinitions().remove(id);
		} else {
			for (XMLElement edRef: getEventDefinitionRefList()) {
				if (edRef.toValue().equals(id)) {
					getEventDefinitionRefs().remove(id);
				}
			}
		}
	}
	
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy