/**
*
*/
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.math.AngleUnit;
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.AngleArgument;
import cz.cuni.mff.peckam.java.origamist.modelstate.arguments.OperationArgument;
import cz.cuni.mff.peckam.java.origamist.services.ServiceLocator;
import cz.cuni.mff.peckam.java.origamist.services.interfaces.ConfigurationManager;
/**
* Rotate operation.
*
* @author Martin Pecka
*/
public class RotateOperation extends cz.cuni.mff.peckam.java.origamist.model.jaxb.RotateOperation
{
@Override
protected void init()
{
super.init();
type = Operations.ROTATE; // it doesn't help to specify the value as fixed in XSD
}
@Override
public ModelState getModelState(ModelState previousState)
{
// TODO handle <refPoint>
previousState.addRotation(-this.angle);
return previousState;
}
@Override
public boolean isCompletelyDelayedToNextStep()
{
return true;
}
@Override
protected List<OperationArgument> initArguments()
{
List<OperationArgument> result = new ArrayList<OperationArgument>(1);
result.add(new AngleArgument(true, "operation.argument.angle"));
return result;
}
@Override
public void fillFromArguments() throws IllegalStateException
{
super.fillFromArguments();
this.angle = ((AngleArgument) arguments.get(0)).getAngle();
}
@Override
public String getL7dUserTip(OperationArgument argument)
{
String bundleKey = null;
if (argument == getArguments().get(0)) {
bundleKey = "rotate.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;\">");
AngleUnit prefUnit = ServiceLocator.get(ConfigurationManager.class).get().getPreferredAngleUnit();
String angleText = prefUnit.formatValue(AngleUnit.RAD.convertTo(angle, prefUnit));
text.append(MessageFormat.format(messages.getString(prefix + ".angleFormat"), new Object[] { angleText }));
text.append("</dd>");
text.append("</dl></body></html>");
return text.toString();
}
@Override
public String toString()
{
return "RotateOperation [angle=" + angle + "]";
}
}