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

org.yaoqiang.bpmn.model.elements.data.InputOutputSpecification Maven / Gradle / Ivy

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

import java.util.List;

import org.yaoqiang.bpmn.model.elements.XMLCollection;
import org.yaoqiang.bpmn.model.elements.XMLElement;
import org.yaoqiang.bpmn.model.elements.XMLTextElement;
import org.yaoqiang.bpmn.model.elements.core.foundation.BaseElement;

/**
 * InputOutputSpecification
 * 
 * @author Shi Yaoqiang([email protected])
 */
public class InputOutputSpecification extends BaseElement {

	private static final long serialVersionUID = 7583470044108280711L;

	public InputOutputSpecification(XMLElement parent) {
		super(parent, "ioSpecification");
	}

	protected void fillStructure() {
		DataInputs refDataInputs = new DataInputs(this);
		DataOutputs refDataOutputs = new DataOutputs(this);
		InputSets refInputSets = new InputSets(this);
		OutputSets refOutputSets = new OutputSets(this);

		super.fillStructure();
		add(refDataInputs);
		add(refDataOutputs);
		add(refInputSets);
		add(refOutputSets);
	}

	public final DataInputs getDataInputs() {
		return (DataInputs) get("dataInputs");
	}

	public final DataOutputs getDataOutputs() {
		return (DataOutputs) get("dataOutputs");
	}

	public final List getDataInputList() {
		return getDataInputs().getXMLElements();
	}

	public final List getDataOutputList() {
		return getDataOutputs().getXMLElements();
	}

	public final XMLElement getDataInOut(String id) {
		XMLElement dout = getDataOutputs().getCollectionElement(id);
		if (dout == null) {
			return getDataInputs().getCollectionElement(id);
		} else {
			return dout;
		}
	}

	public final InputSets getInputSets() {
		return (InputSets) get("inputSets");
	}

	public final OutputSets getOutputSets() {
		return (OutputSets) get("outputSets");
	}

	public boolean isEmpty() {
		boolean isEmpty = true;
		for (XMLElement el : getXMLElements()) {
			isEmpty = isEmpty && (el.isEmpty() || ((XMLCollection) el).getXMLElements().get(0).isEmpty());
		}
		return isEmpty;
	}

	public void clear() {
		getDataInputs().clear();
		getDataOutputs().clear();
		getInputSets().clear();
		getOutputSets().clear();
	}

	public final DataInput addDataInput(String id, String value, boolean isCollection) {
		DataInput dataInput = (DataInput) getDataInputs().generateNewElement();
		dataInput.setId(id);
		if (value != null && value.length() != 0) {
			dataInput.setIsCollection(isCollection);
			int index = value.lastIndexOf("\n[");
			if (index > 0) {
				dataInput.setName(value.substring(0, index));
				dataInput.setDataState(value.substring(index + 2, value.length() - 1));
			} else {
				dataInput.setName(value);
			}
		}
		getDataInputs().add(dataInput);
		addDataInputRef(id);
		return dataInput;
	}

	public final void addDataInput(DataInput dataInput) {
		getDataInputs().add(dataInput);
		addDataInputRef(dataInput.getId());
	}

	public final DataOutput addDataOutput(String id, String value, boolean isCollection) {
		DataOutput dataOutput = (DataOutput) getDataOutputs().generateNewElement();
		dataOutput.setId(id);
		if (value != null && value.length() != 0) {
			dataOutput.setIsCollection(isCollection);
			int index = value.lastIndexOf("\n[");
			if (index > 0) {
				dataOutput.setName(value.substring(0, index));
				dataOutput.setDataState(value.substring(index + 2, value.length() - 1));
			} else {
				dataOutput.setName(value);
			}
		}
		getDataOutputs().add(dataOutput);
		addDataOutputRef(id);
		return dataOutput;
	}

	public final void addDataOutput(DataOutput dataOutput) {
		getDataOutputs().add(dataOutput);
		addDataOutputRef(dataOutput.getId());
	}

	public final void addDataInputRef(String id) {
		InputSet inputSet = null;
		if (getInputSets().isEmpty()) {
			inputSet = (InputSet) getInputSets().generateNewElement();
			getInputSets().add(inputSet);
		} else {
			inputSet = (InputSet) getInputSets().getXMLElements().get(0);
		}
		if (getOutputSets().isEmpty()) {
			getOutputSets().add(getOutputSets().generateNewElement());
		}
		if (!inputSet.getDataInputRefs().contains(id)) {
			XMLTextElement dataInputRef = (XMLTextElement) inputSet.getDataInputRefs().generateNewElement();
			dataInputRef.setValue(id);
			inputSet.getDataInputRefs().add(dataInputRef);
		}
	}

	public final void addDataOutputRef(String id) {
		if (getInputSets().isEmpty()) {
			getInputSets().add(getInputSets().generateNewElement());
		}
		OutputSet outputSet = null;
		if (getOutputSets().isEmpty()) {
			outputSet = (OutputSet) getOutputSets().generateNewElement();
			getOutputSets().add(outputSet);
		} else {
			outputSet = (OutputSet) getOutputSets().getXMLElements().get(0);
		}
		if (!outputSet.getDataOutputRefs().contains(id)) {
			XMLTextElement dataOutputRef = (XMLTextElement) outputSet.getDataOutputRefs().generateNewElement();
			dataOutputRef.setValue(id);
			outputSet.getDataOutputRefs().add(dataOutputRef);
		}
	}

	public final void removeDataInput(String id) {
		getDataInputs().remove(id);
		InputSet inputSet = (InputSet) getInputSets().getXMLElements().get(0);
		inputSet.getDataInputRefs().remove(id);
	}

	public final void removeDataInputRef(String value) {
		InputSet inputSet = (InputSet) getInputSets().getXMLElements().get(0);
		inputSet.getDataInputRefs().remove(value);
	}

	public final void removeDataOutput(String id) {
		getDataOutputs().remove(id);
		OutputSet outputSet = (OutputSet) getOutputSets().getXMLElements().get(0);
		outputSet.getDataOutputRefs().remove(id);
	}

	public final void removeDataOutputRef(String value) {
		OutputSet outputSet = (OutputSet) getOutputSets().getXMLElements().get(0);
		outputSet.getDataOutputRefs().remove(value);
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy