/** * */ package cz.cuni.mff.peckam.java.origamist.model; import java.util.EnumMap; import java.util.Map; import java.util.ResourceBundle; import javax.swing.ImageIcon; import cz.cuni.mff.peckam.java.origamist.model.jaxb.Operations; import cz.cuni.mff.peckam.java.origamist.services.ServiceLocator; import cz.cuni.mff.peckam.java.origamist.services.interfaces.ConfigurationManager; /** * Helper class for Operations enum. * * @author Martin Pecka */ public class OperationsHelper { /** The cache of icons. */ protected static Map<Operations, ImageIcon> icons = new EnumMap<Operations, ImageIcon>(Operations.class); /** * Get the default icon for the operation. * * @param operation The operation to get icon for * @return The default icon of the operation */ public static ImageIcon getIcon(Operations operation) { ImageIcon icon = icons.get(operation); if (icon != null) return icon; String path = "/resources/images/fold-marks/"; switch (operation) { case MOUNTAIN_FOLD: path += "mountain_fold.png"; break; case VALLEY_FOLD: path += "valley_fold.png"; break; case MOUNTAIN_VALLEY_FOLD_UNFOLD: path += "mountain_fold_unfold.png"; break; case VALLEY_MOUNTAIN_FOLD_UNFOLD: path += "valley_fold_unfold.png"; break; case THUNDERBOLT_FOLD: path += "thunderbolt_fold.png"; break; case INSIDE_REVERSE_FOLD: path += "inside_reverse_fold.png"; break; case OUTSIDE_REVERSE_FOLD: path += "outside_reverse_fold.png"; break; case INSIDE_CRIMP_FOLD: path += "inside_crimp_fold.png"; break; case OUTSIDE_CRIMP_FOLD: path += "outside_crimp_fold.png"; break; case ROTATE: path += "rotate.png"; break; case TURN_OVER: path += "turn_over.png"; break; case REPEAT_ACTION: path += "repeat_one.png"; break; case SYMMETRY: path += "repeat_one.png"; break; case PULL: path += "pull.png"; break; default: return null; } icon = new ImageIcon(OperationsHelper.class.getResource(path)); icons.put(operation, icon); return icon; } /** * Return the operation corresponding to the given constant. * * @param operation The constant defining an operation. * @return The operation. */ public static Operation getOperation(Operations operation) { return getOperation(operation, false); } /** * Return the operation corresponding to the given constant. * * @param operation The constant defining an operation. * @param alternative If true, return the alternative version of the operation. * @return The operation. */ public static Operation getOperation(Operations operation, boolean alternative) { Operation result = null; switch (operation) { case MOUNTAIN_FOLD: result = new FoldOperation(); break; case VALLEY_FOLD: result = new FoldOperation(); break; case MOUNTAIN_VALLEY_FOLD_UNFOLD: result = new FoldUnfoldOperation(); break; case VALLEY_MOUNTAIN_FOLD_UNFOLD: result = new FoldUnfoldOperation(); break; case THUNDERBOLT_FOLD: result = new ThunderboltFoldOperation(); if (alternative) ((ThunderboltFoldOperation) result).setInvert(true); break; case TURN_OVER: result = new TurnOverOperation(); break; case ROTATE: result = new RotateOperation(); break; case PULL: result = new PullOperation(); break; case INSIDE_CRIMP_FOLD: result = new CrimpFoldOperation(); break; case OUTSIDE_CRIMP_FOLD: result = new CrimpFoldOperation(); break; case OPEN: result = null; // TODO break; case INSIDE_REVERSE_FOLD: result = new ReverseFoldOperation(); break; case OUTSIDE_REVERSE_FOLD: result = new ReverseFoldOperation(); break; case REPEAT_ACTION: result = new RepeatOperation(); break; case MARKER: result = new MarkerOperation(); break; case RABBIT_FOLD: result = null; // TODO break; case SQUASH_FOLD: result = null; // TODO break; case IMAGE: result = new ImageOperation(); break; case SYMMETRY: result = new SymmetryOperation(); break; } if (result == null) return null; result.setType(operation); return result; } /** * Return a localized text representation of the operation. * * @param operation The operation to convert to string. * @return A localized text representation of the operation. */ public static String toString(Operations operation) { return ResourceBundle.getBundle(Operation.BUNDLE_NAME, ServiceLocator.get(ConfigurationManager.class).get().getLocale()).getString(operation.toString()); } }