001package org.kuali.student.r2.common.dto;
002
003public class DtoConstants {
004 
005    public final static String STATE_DRAFT = "Draft"; 
006    public final static String STATE_SUBMITTED = "Submitted";
007    public final static String STATE_WITHDRAWN = "Withdrawn";
008    public final static String STATE_APPROVED = "Approved";
009    public final static String STATE_NOT_APPROVED = "NotApproved";
010    public final static String STATE_ACTIVE = "Active";
011    public final static String STATE_SUPERSEDED  = "Superseded";
012    public final static String STATE_SUSPENDED  = "Suspended";
013    public final static String STATE_RETIRED = "Retired";
014
015   
016    
017        public static final String DTO_STATE = "DtoState";
018        public static final String DTO_NEXT_STATE = "DtoNextState";
019        public static final String DTO_WORKFLOW_NODE = "DtoWorkflowNode";
020        public static final String WORKFLOW_NODE_PRE_ROUTE = "PreRoute";
021
022        //FIXME: Need to split out proposal states (ie. workflow states) versus dto states
023        public enum DtoState {
024                DRAFT, SUBMITTED, APPROVED, ACTIVE, SUSPENDED, RETIRED, SUPERSEDED, SAVED, ENROUTE;
025
026                public boolean equalsString(String state){
027                        if (state != null){
028                                return this.toString().equals(state.toUpperCase());
029                        }
030                        
031                        return false;
032                }
033                
034                /**
035             * This is used to determine the next state.
036             * 
037             * TODO: Ideally this method should not be hardcoded here.  Also determining next state may
038             * be a more complicated and not just be a simple sequence.
039             * 
040             * @param state
041             * @return the next state
042             */
043                public static DtoState getNextState(String state){
044                        // Element States
045                        if (DRAFT.equalsString(state)) {
046                    return ACTIVE;
047                } else if (APPROVED.equalsString(state)) {
048                        return ACTIVE;
049                } else if (ACTIVE.equalsString(state)) {
050                        return SUSPENDED;
051                } else if (SUSPENDED.equalsString(state)) {
052                        return ACTIVE;
053                
054                // Proposal States
055                } else if (SAVED.equalsString(state)) {
056                        return ENROUTE;
057                } else if (ENROUTE.equalsString(state)) {
058                        return APPROVED;
059                }
060                                        
061                        
062                        return null;
063                }
064                
065                public static String getNextStateAsString(String state){
066                        DtoState dtoState = getNextState(state);
067                        if (dtoState == null){
068                                return null;
069                        } else {
070                                return dtoState.toString();
071                        }
072                }
073        }
074}