package open.dolphin.letter; import open.dolphin.client.GUIConst; import open.dolphin.client.Letter; import open.dolphin.project.Project; /** * * @author Kazushi Minagawa, Digital Globe, Inc. */ public class LetterStateMgr { private final Letter letterImpl; private final LetterState emptyState = new EmptyState(); private final LetterState cleanState = new CleanState(); private final DirtyState dirtyState = new DirtyState(); private LetterState currentState; public LetterStateMgr(Letter letterImpl) { this.letterImpl = letterImpl; currentState = emptyState; } public void processEmptyEvent() { currentState = emptyState; this.enter(); } public void processCleanEvent() { currentState = cleanState; this.enter(); } // public void processModifyKarteEvent() { // currentState = startEditingState; // currentState.enter(); // } public void processSavedEvent() { currentState = cleanState; currentState.enter(); } public void processDirtyEvent() { boolean newDirty = letterImpl.letterIsDirty(); currentState = newDirty ? dirtyState : emptyState; currentState.enter(); } public boolean isDirtyState() { return currentState == dirtyState; } public void enter() { currentState.enter(); } protected abstract class LetterState { public LetterState() { } public abstract void enter(); } protected final class EmptyState extends LetterState { public EmptyState() { } @Override public void enter() { letterImpl.getContext().enabledAction(GUIConst.ACTION_MODIFY_KARTE, false); letterImpl.getContext().enabledAction(GUIConst.ACTION_PRINT, false); } } protected final class CleanState extends LetterState { public CleanState() { } @Override public void enter() { letterImpl.setEditables(false); letterImpl.getContext().enabledAction(GUIConst.ACTION_SAVE, false); boolean canEdit = !letterImpl.getContext().isReadOnly(); letterImpl.getContext().enabledAction(GUIConst.ACTION_MODIFY_KARTE, canEdit); // 修正 //s.oh^ 2014/08/19 ID権限 //letterImpl.getContext().enabledAction(GUIConst.ACTION_PRINT, true); // Print letterImpl.getContext().enabledAction(GUIConst.ACTION_PRINT, !Project.isOtherCare()); letterImpl.getContext().enabledAction(GUIConst.ACTION_PRINTER_SETUP, !Project.isOtherCare()); //s.oh$ } } // class StartEditingState extends LetterState { // // @Override // public void enter() { // letterImpl.setEditables(true); // letterImpl.setListeners(); // letterImpl.getContext().enabledAction(GUIConst.ACTION_SAVE, false); // letterImpl.getContext().enabledAction(GUIConst.ACTION_PRINT, true); // letterImpl.getContext().enabledAction(GUIConst.ACTION_MODIFY_KARTE, false); // } // } class DirtyState extends LetterState { @Override public void enter() { letterImpl.getContext().enabledAction(GUIConst.ACTION_SAVE, true); //s.oh^ 2014/08/19 ID権限 //letterImpl.getContext().enabledAction(GUIConst.ACTION_PRINT, true); letterImpl.getContext().enabledAction(GUIConst.ACTION_PRINT, !Project.isOtherCare()); letterImpl.getContext().enabledAction(GUIConst.ACTION_PRINTER_SETUP, !Project.isOtherCare()); //s.oh$ //letterImpl.getContext().enabledAction(GUIConst.ACTION_MODIFY_KARTE, false); } } }