/*******************************************************************************
* Copyright (c) 2011 The University of York.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Louis Rose - initial API and implementation
******************************************************************************/
package simulator.execution.model.actions;
import simulator.execution.model.Time;
import simulator.execution.model.TimeFormatter;
import simulator.execution.model.state.State;
import simulator.scl.Displayable;
import simulator.scl.StringConstant;
import simulator.scl.TimeConstant;
import simulator.scl.Variable;
public class ReadableDisplayable {
private final Displayable displayable;
private final TimeFormatter timeFormatter = TimeFormatter.twentyFourHourFormatter;
public ReadableDisplayable(Displayable displayable) {
this.displayable = displayable;
}
public String extractValue(State state) {
final String value;
if (displayable instanceof StringConstant) {
value = extractValue((StringConstant)displayable);
} else if (displayable instanceof TimeConstant) {
value = extractValue((TimeConstant)displayable);
} else if (displayable instanceof Variable) {
value = extractValue((Variable)displayable, state);
} else {
throw new IllegalArgumentException("Unknown type of Displayable: " + displayable);
}
return value == null ? "" : value;
}
private String extractValue(StringConstant constant) {
return constant.getValue();
}
private String extractValue(TimeConstant constant) {
return new Time(constant).formatWith(timeFormatter);
}
private String extractValue(Variable variable, State state) {
final Time variableValue = state.getValueOf(((Variable)variable));
return (variableValue == null ? null : variableValue.formatWith(timeFormatter));
}
}