/**
*
*/
package cz.cuni.mff.peckam.java.origamist.model;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.List;
import cz.cuni.mff.peckam.java.origamist.model.jaxb.Operations;
import cz.cuni.mff.peckam.java.origamist.modelstate.ModelState;
import cz.cuni.mff.peckam.java.origamist.modelstate.arguments.BooleanArgument;
import cz.cuni.mff.peckam.java.origamist.modelstate.arguments.LastOperationsArgument;
import cz.cuni.mff.peckam.java.origamist.modelstate.arguments.OperationArgument;
/**
* A repeat operation.
*
* @author Martin Pecka
*/
public class RepeatOperation extends cz.cuni.mff.peckam.java.origamist.model.jaxb.RepeatOperation implements
OperationContainer
{
@Override
protected void init()
{
super.init();
type = Operations.REPEAT_ACTION; // it doesn't help to specify the value as fixed in XSD
}
@Override
public ModelState getModelState(ModelState previousState)
{
for (Operation o : operations) {
o.getModelState(previousState);
}
return previousState;
}
@Override
public boolean areContentsVisible()
{
return isDisplayed();
}
@Override
protected List<OperationArgument> initArguments()
{
List<OperationArgument> arguments = new ArrayList<OperationArgument>(2);
arguments.add(new LastOperationsArgument(true, "operation.argument.last.operations"));
arguments.add(new BooleanArgument(true, "operation.argument.hidden", "operation.argument.hidden.message",
"operation.argument.hidden.displayed", "operation.argument.hidden.hidden"));
return arguments;
}
@Override
public void fillFromArguments() throws IllegalStateException
{
this.operations.clear();
this.operations.addAll(((LastOperationsArgument) arguments.get(0)).getOperations());
if (((BooleanArgument) arguments.get(1)).getValue() != null)
this.displayed = ((BooleanArgument) arguments.get(1)).getValue();
}
@Override
public String getL7dUserTip(OperationArgument argument)
{
String bundleKey = null;
if (argument == getArguments().get(0)) {
bundleKey = "repeat.steps.user.tip";
} else if (argument == getArguments().get(1)) {
bundleKey = "repeat.visible.user.tip";
}
if (bundleKey != null)
return messages.getString(bundleKey);
else
return null;
}
@Override
public boolean isCompletelyDelayedToNextStep()
{
return !isDisplayed();
}
@Override
public String getDefaultDescription()
{
String prefix = type.toString();
StringBuilder text = new StringBuilder("<html><body>").append(getL7dName());
text.append(" (");
text.append(MessageFormat.format(messages.getString(prefix + ".countFormat"),
new Object[] { operations.size() }));
text.append(", ");
if (displayed) {
text.append(messages.getString(prefix + ".displayed"));
} else {
text.append(messages.getString(prefix + ".hidden"));
}
text.append(")");
text.append("</body></html>");
return text.toString();
}
@Override
public String toString()
{
return "RepeatOperation [displayed=" + displayed + ", operations=" + operations + "]";
}
}