/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.component.workflow.model.api; import java.beans.PropertyChangeListener; import java.io.Serializable; import java.util.UUID; import java.util.regex.Pattern; import de.rcenvironment.core.component.integration.ToolIntegrationConstants; import de.rcenvironment.core.component.model.api.ComponentDescription; import de.rcenvironment.core.component.model.configuration.api.ConfigurationDescription; import de.rcenvironment.core.component.model.endpoint.api.EndpointDescriptionsManager; import de.rcenvironment.core.component.model.spi.PropertiesChangeSupport; import de.rcenvironment.core.component.workflow.model.spi.ComponentInstanceProperties; /** * A node within a {@link WorkflowDescription}. * * @author Roland Gude * @author Heinrich Wendel * @author Robert Mischke * @author Christian Weiss * @author Hendrik Abbenhaus */ public class WorkflowNode extends PropertiesChangeSupport implements Serializable, ComponentInstanceProperties, Comparable<WorkflowNode> { /** * {@link Pattern} to match property names of {@link java.beans.PropertyChangeEvent}s concerning properties. */ public static final Pattern PROPERTIES_PATTERN = Pattern.compile("^properties\\.(.*)$"); /** Property that is fired when the location changes. */ public static final String PROPERTY_COMMUNICATION_NODE = "de.rcenvironment.rce.component.workflow.CommunicationNode"; /** Property that is fired when the name changes. */ public static final String PROPERTY_NODE_ATTRIBUTES = "de.rcenvironment.props.n"; private static final int DEFAULT_X_Y = 0; private static final long serialVersionUID = -7495156467094187194L; private static final int INITIAL_ZINDEX = -1; private ComponentDescription compDesc; private String identifier; private String name; /** X position of the location in a graphical editor. */ private int x; /** Y position of the location in a graphical editor. */ private int y; /** Z index of component. */ private int zIndex; private boolean isEnabled = true; private boolean valid = false; private boolean isChecked = false; private boolean init = false; /** * Constructor. * * @param componentDescription The {@link ComponentDescription} of the {@link de.rcenvironment.core.component.model.spi.Component} * represented by this {@link WorkflowNode}. * @param componentConfiguration The configuration of this {@link de.rcenvironment.core.component.model.spi.Component} represented by * this {@link WorkflowNode}. */ public WorkflowNode(ComponentDescription componentDescription) { compDesc = componentDescription; identifier = UUID.randomUUID().toString(); x = DEFAULT_X_Y; y = DEFAULT_X_Y; zIndex = INITIAL_ZINDEX; } @Override public String toString() { return compDesc.getIdentifier(); } public ComponentDescription getComponentDescription() { return compDesc; } public void setComponentDescription(ComponentDescription cd) { this.compDesc = cd; } public int getX() { return x; } public int getY() { return y; } public boolean isEnabled() { return isEnabled; } public boolean isImitiationModeActive() { return Boolean.valueOf(getConfigurationDescription().getConfigurationValue(ToolIntegrationConstants.KEY_IS_MOCK_MODE)); } public boolean isImitationModeSupported() { return Boolean.valueOf(getConfigurationDescription().getComponentConfigurationDefinition() .getReadOnlyConfiguration().getValue(ToolIntegrationConstants.KEY_MOCK_MODE_SUPPORTED)); } /** * @param newX The new X location. * @param newY The new Y location. */ public void setLocation(int newX, int newY) { x = newX; y = newY; firePropertyChange(PROPERTY_COMMUNICATION_NODE); } /** * @param newEnabled <code>true</code> of {@link WorkflowNode} is activated and considered during execution, otherwise * <code>false</code> */ public void setEnabled(boolean newEnabled) { this.isEnabled = newEnabled; firePropertyChange(PROPERTY_NODE_ATTRIBUTES); } /** * * @param isImitiationModeActive set <code>true</code> to activate or <code>false</code> to deactivate imitation mode */ public void setImitiationModeActive(boolean isImitiationModeActive) { getConfigurationDescription().setConfigurationValue(ToolIntegrationConstants.KEY_IS_MOCK_MODE, Boolean.valueOf(isImitiationModeActive).toString()); firePropertyChange(PROPERTY_NODE_ATTRIBUTES); } public boolean isValid() { return valid; } public void setValid(boolean valid) { this.valid = valid; } /** * @param name The name to set. */ public void setName(String name) { this.name = name; firePropertyChange(PROPERTY_NODE_ATTRIBUTES); } public String getName() { return name; } public String getIdentifier() { return identifier; } @Override public boolean equals(Object other) { if (other instanceof WorkflowNode) { return identifier.equals(((WorkflowNode) other).identifier); } return false; } @Override public int hashCode() { return identifier.hashCode(); } // needed for the persistence handler to set the identifier given by file public void setIdentifier(String newIdentifier) { identifier = newIdentifier; } @Override public synchronized void addPropertyChangeListener(PropertyChangeListener l) { super.addPropertyChangeListener(l); getConfigurationDescription().addPropertyChangeListener(l); getInputDescriptionsManager().addPropertyChangeListener(l); getOutputDescriptionsManager().addPropertyChangeListener(l); } @Override public synchronized void removePropertyChangeListener(PropertyChangeListener l) { super.removePropertyChangeListener(l); getConfigurationDescription().removePropertyChangeListener(l); getInputDescriptionsManager().removePropertyChangeListener(l); getOutputDescriptionsManager().removePropertyChangeListener(l); } @Override public int compareTo(WorkflowNode o) { return getName().compareTo(o.getName()); } @Override public EndpointDescriptionsManager getInputDescriptionsManager() { return compDesc.getInputDescriptionsManager(); } @Override public EndpointDescriptionsManager getOutputDescriptionsManager() { return compDesc.getOutputDescriptionsManager(); } @Override public ConfigurationDescription getConfigurationDescription() { return compDesc.getConfigurationDescription(); } @Override public String getComponentIdentifierWithVersion() { return getComponentDescription().getIdentifier(); } public boolean isChecked() { return isChecked; } public void setChecked(boolean checked) { this.isChecked = checked; } /** * * @return flag. */ public boolean isInit() { return init; } public void setInit(boolean init) { this.init = init; } public int getZIndex() { return zIndex; } public void setZIndex(int zIndexD) { this.zIndex = zIndexD; } }