/**
*
*/
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.exceptions.InvalidOperationException;
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.IntegerArgument;
import cz.cuni.mff.peckam.java.origamist.modelstate.arguments.OperationArgument;
import cz.cuni.mff.peckam.java.origamist.modelstate.arguments.PointArgument;
import cz.cuni.mff.peckam.java.origamist.modelstate.arguments.TextArgument;
/**
* Add a marker that moves with a specified point on the paper.
*
* @author Martin Pecka
*/
public class MarkerOperation extends cz.cuni.mff.peckam.java.origamist.model.jaxb.MarkerOperation
{
@Override
protected void init()
{
super.init();
type = Operations.MARKER; // it doesn't help to specify the value as fixed in XSD
}
@Override
public ModelState getModelState(ModelState previousState) throws InvalidOperationException
{
previousState.addMarker(refPoint.toPoint2d(), text, stepsToHide);
return previousState;
}
@Override
protected List<OperationArgument> initArguments()
{
List<OperationArgument> result = new ArrayList<OperationArgument>(2);
result.add(new PointArgument(true, "operation.argument.select.point"));
result.add(new TextArgument(true, "operation.argument.text"));
result.add(new IntegerArgument(true, "operation.argument.stepToHide"));
return result;
}
@Override
public void fillFromArguments() throws IllegalStateException
{
super.fillFromArguments();
this.refPoint = ((PointArgument) arguments.get(0)).getPoint2D();
this.text = ((TextArgument) arguments.get(1)).getText();
this.stepsToHide = ((IntegerArgument) arguments.get(2)).getInteger();
}
@Override
public String getL7dUserTip(OperationArgument argument)
{
String bundleKey = null;
if (argument == getArguments().get(0)) {
bundleKey = "marker.point.user.tip";
} else if (argument == getArguments().get(1)) {
bundleKey = "marker.text.user.tip";
} else if (argument == getArguments().get(2)) {
bundleKey = "marker.stepsToHide.user.tip";
}
if (bundleKey != null)
return messages.getString(bundleKey);
else
return null;
}
@Override
public String getDefaultDescription()
{
String prefix = type.toString();
StringBuilder text = new StringBuilder("<html><body><dl style=\"margin:0px;\"><dt>").append(getL7dName())
.append("</dt>");
text.append("<dd style=\"margin-left: 10px;\">");
text.append(MessageFormat.format(messages.getString(prefix + ".textFormat"), new Object[] { this.text }));
text.append("</dd>");
text.append("</dl></body></html>");
return text.toString();
}
}