ExecutionStateException.java

package edu.udel.cis.vsl.tass.semantics.IF;

import edu.udel.cis.vsl.tass.dynamic.IF.DynamicException;
import edu.udel.cis.vsl.tass.model.IF.location.LocationIF;
import edu.udel.cis.vsl.tass.util.Source;

public class ExecutionStateException extends ExecutionProblem {

	private static final long serialVersionUID = -741658455672274523L;

	private LocationIF[] locations;

	public ExecutionStateException(LocationIF[] locations, ErrorKind kind,
			Certainty certainty, String message) {
		super(kind, certainty, message);
		assert locations != null;
		this.locations = locations;
	}

	public ExecutionStateException(LocationIF[] locations,
			DynamicException dynamicException, Certainty certainty) {
		super(dynamicException, certainty);
		assert locations != null;
		this.locations = locations;
	}

	public ExecutionStateException(LocationIF[] locations,
			ExecutionProblem problem) {
		this(locations, problem.kind(), problem.certainty(), problem
				.getMessage());
	}

	public LocationIF[] locations() {
		return locations;
	}

	public String toString() {
		String result = super.toString();

		result += "\n with:\n";
		for (int i = 0; i < locations.length; i++) {
			LocationIF location = locations[i];

			result += "  Process " + i;
			if (location == null) {
				result += ": <terminated>";

			} else {
				Source source = location.getSource();

				result += " at location " + location.id();
				if (source == null) {
					result += " (unknown source)";
				} else {
					result += ": " + source.toString();
				}
			}
			result += "\n";
		}
		return result;
	}
}