/**
* Copyright (C) 2010 BonitaSoft S.A.
* BonitaSoft, 31 rue Gustave Eiffel - 38000 Grenoble
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2.0 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.bonitasoft.simulation.model.process;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
* @author Romain Bioteau
*
*/
public class SimActivity extends SimNamedElement {
private Set<SimTransition> outgoingTransitions ;
private Set<SimTransition> incomingTransitions ;
private boolean exclusiveOutgoingTransition ;
private List<SimData> data ;
private List<ResourceAssignement> assignedResources ;
private long executionTime ; //in ms
private long estimatedTime ;//in ms
private long maximumTime = Long.MAX_VALUE;//in ms
private boolean contigous ;
private boolean isStartElement ;
private String parentProcessName ;
private JoinType joinType = JoinType.XOR;
private boolean inCycle = false;
private boolean isEntryNode = false;
private boolean isExitNode = false;
public SimActivity(final String name,final String parentProcessName, final boolean exclusiveOutgoingTransition,final boolean isStartElement){
super(name);
this.isStartElement = isStartElement ;
this.parentProcessName = parentProcessName;
this.exclusiveOutgoingTransition = exclusiveOutgoingTransition;
this.maximumTime = 0 ;
assignedResources = new ArrayList<ResourceAssignement>() ;
outgoingTransitions = new HashSet<SimTransition>();
incomingTransitions = new HashSet<SimTransition>();
data = new ArrayList<SimData>();
}
public SimActivity(final String name,final String parentProcessName,final boolean isStartElement, final long executionTime, final long estimatedTime, final long maximumTime,
final boolean exclusiveOutgoingTransition, final boolean contigous){
super(name);
this.isStartElement = isStartElement ;
this.contigous = contigous;
this.parentProcessName = parentProcessName;
this.estimatedTime = estimatedTime;
this.exclusiveOutgoingTransition = exclusiveOutgoingTransition;
this.executionTime = executionTime;
this.maximumTime = maximumTime;
assignedResources = new ArrayList<ResourceAssignement>() ;
outgoingTransitions = new HashSet<SimTransition>();
incomingTransitions = new HashSet<SimTransition>();
data = new ArrayList<SimData>();
}
public SimActivity(final String name,final String parentProcessName, final long executionTime, final long estimatedTime, final long maximumTime,
final boolean exclusiveOutgoingTransition, final boolean contigous){
this(name,parentProcessName,false,executionTime,estimatedTime,maximumTime,exclusiveOutgoingTransition,contigous) ;
}
public SimActivity(final String name,final JoinType joinType,final String parentProcessName, final long executionTime, final long estimatedTime, final long maximumTime,
final boolean exclusiveOutgoingTransition, final boolean contigous){
this(name,parentProcessName,false,executionTime,estimatedTime,maximumTime,exclusiveOutgoingTransition,contigous) ;
this.joinType = joinType ;
}
public SimActivity(final String name,final JoinType joinType,final String parentProcessName, final boolean exclusiveOutgoingTransition){
this(name,parentProcessName,false,0,0,0,exclusiveOutgoingTransition,false) ;
this.joinType = joinType ;
}
public List<SimData> getData() {
return Collections.unmodifiableList(data);
}
public void addData(SimData simData) {
data.add(simData);
}
public boolean hasResources() {
return assignedResources != null && !assignedResources.isEmpty();
}
public List<ResourceAssignement> getAssignedResources() {
return Collections.unmodifiableList(assignedResources);
}
public void addResourceAssignement(ResourceAssignement ra){
assignedResources.add(ra);
}
public long getExecutionTime() {
return executionTime;
}
public long getEstimatedTime() {
return estimatedTime;
}
public long getMaximumTime() {
return maximumTime;
}
public boolean isContigous() {
return contigous;
}
public Set<SimTransition> getOutgoingTransitions() {
return Collections.unmodifiableSet(outgoingTransitions);
}
public Set<SimTransition> getIncomingTransitions() {
return Collections.unmodifiableSet(incomingTransitions);
}
public void addOutgoingTransition(SimTransition transition) {
transition.setSource(this) ;
outgoingTransitions.add(transition);
}
public boolean isExclusiveOutgoingTransition() {
return exclusiveOutgoingTransition;
}
public String getParentProcessName() {
return parentProcessName;
}
public boolean isStartElement() {
return isStartElement;
}
public JoinType getJoinType() {
return joinType;
}
public void addIncomingTransition(SimTransition incomingTransition) {
this.incomingTransitions.add(incomingTransition);
}
public void setInCycle(boolean inCycle) {
this.inCycle = inCycle;
}
public boolean isInCycle() {
return inCycle;
}
public void setEntryNode(boolean isEntryNode) {
this.isEntryNode = isEntryNode;
}
public boolean isEntryNode() {
return isEntryNode;
}
public void setExitNode(boolean isExitNode) {
this.isExitNode = isExitNode;
}
public boolean isExitNode() {
return isExitNode;
}
}