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

de.uni.freiburg.iig.telematik.sepia.traversal.RandomPNTraverser Maven / Gradle / Ivy

package de.uni.freiburg.iig.telematik.sepia.traversal;

import java.util.List;

import de.invation.code.toval.misc.valuegeneration.RandomChooser;
import de.invation.code.toval.validate.InconsistencyException;
import de.invation.code.toval.validate.ParameterException;
import de.invation.code.toval.validate.Validate;
import de.invation.code.toval.validate.ParameterException.ErrorCode;
import de.uni.freiburg.iig.telematik.sepia.petrinet.abstr.AbstractPetriNet;
import de.uni.freiburg.iig.telematik.sepia.petrinet.abstr.AbstractTransition;


/**
 * This flow control chooses the next transition to fire 
 * randomly out of the set of enabled Transitions.
 * 
 * @author Thomas Stocker
 */
public class RandomPNTraverser> extends PNTraverser {
	
	RandomChooser randomChooser = new RandomChooser();

	public RandomPNTraverser(AbstractPetriNet net) {
		super(net);
	}

	@Override
	public T chooseNextTransition(List enabledTransitions) throws InconsistencyException {
		if(!isValid())
			throw new ParameterException(ErrorCode.INCONSISTENCY, "Cannot provide transitions in invalid state.");
		Validate.notNull(enabledTransitions);
		Validate.noNullElements(enabledTransitions);
		
		if(enabledTransitions.isEmpty())
			return null;
		
		if(!net.getEnabledTransitions().containsAll(enabledTransitions))
			throw new ParameterException(ErrorCode.INCOMPATIBILITY, "Some of the given transitions re not enabled.");
		
		return randomChooser.chooseValue(enabledTransitions);
	}

	@Override
	public boolean isValid() {
		return randomChooser.isValid();
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy