001    package org.kuali.student.r2.common.dto;
002    
003    public 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    }