001    /**
002     * Copyright 2005-2012 The Kuali Foundation
003     *
004     * Licensed under the Educational Community License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     *
008     * http://www.opensource.org/licenses/ecl2.php
009     *
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     * See the License for the specific language governing permissions and
014     * limitations under the License.
015     */
016    package org.kuali.rice.kew.preferences.web;
017    
018    import javax.servlet.http.HttpServletRequest;
019    
020    import org.kuali.rice.kew.api.preferences.Preferences;
021    import org.kuali.rice.kns.web.struts.form.KualiForm;
022    import org.kuali.rice.krad.exception.ValidationException;
023    import org.kuali.rice.krad.util.GlobalVariables;
024    import org.kuali.rice.krad.util.KRADConstants;
025    
026    
027    /**
028     * Struts ActionForm for {@link PreferencesAction}.
029     *
030     * @see PreferencesAction
031     *
032     * @author Kuali Rice Team (rice.collab@kuali.org)
033     */
034    public class PreferencesForm extends KualiForm {
035    
036        private static final long serialVersionUID = 4536869031291955777L;
037        private static final String ERR_KEY_REFRESH_RATE_WHOLE_NUM = "preferences.refreshRate";
038        private static final String ERR_KEY_ACTION_LIST_PAGE_SIZE_WHOLE_NUM = "preferences.pageSize";
039            private Preferences.Builder preferences;
040        private String methodToCall = "";
041        private String returnMapping;
042        private boolean showOutbox = true;
043        private String documentTypePreferenceName;
044        private String documentTypePreferenceValue;
045    
046        // KULRICE-3137: Added a backLocation parameter similar to the one from lookups.
047        private String backLocation;
048        
049            public String getReturnMapping() {
050            return returnMapping;
051        }
052        public void setReturnMapping(String returnMapping) {
053            this.returnMapping = returnMapping;
054        }
055        public PreferencesForm() {
056            preferences = Preferences.Builder.create();
057        }
058        public String getMethodToCall() {
059            return methodToCall;
060        }
061        public void setMethodToCall(String methodToCall) {
062            this.methodToCall = methodToCall;
063        }
064        public Preferences.Builder getPreferences() {
065            return preferences;
066        }
067        public void setPreferences(Preferences.Builder preferences) {
068            this.preferences = preferences;
069        }
070        public boolean isShowOutbox() {
071            return this.showOutbox;
072        }
073        public void setShowOutbox(boolean showOutbox) {
074            this.showOutbox = showOutbox;
075        }
076        
077            public String getBackLocation() {
078                    return this.backLocation;
079            }
080            public void setBackLocation(String backLocation) {
081                    this.backLocation = backLocation;
082            }
083            
084            public String getDocumentTypePreferenceName() {
085            return documentTypePreferenceName;
086        }
087        
088        public void setDocumentTypePreferenceName(String documentTypePreferenceName) {
089            this.documentTypePreferenceName = documentTypePreferenceName;
090        }
091        
092        public String getDocumentTypePreferenceValue() {
093            return documentTypePreferenceValue;
094        }
095        
096        public void setDocumentTypePreferenceValue(String documentTypePreferenceValue) {
097            this.documentTypePreferenceValue = documentTypePreferenceValue;
098        }
099        
100        public Object getDocumentTypeNotificationPreference(String documentType) {
101            return preferences.getDocumentTypeNotificationPreference(documentType);
102        }
103        
104        public void setDocumentTypeNotificationPreference(String documentType, String preferenceValue) {
105            preferences.addDocumentTypeNotificationPreference(documentType, preferenceValue);
106        }
107            
108            /**
109             * Retrieves the "returnLocation" parameter after calling "populate" on the superclass.
110             * 
111             * @see org.kuali.rice.krad.web.struts.form.KualiForm#populate(javax.servlet.http.HttpServletRequest)
112             */
113            @Override
114            public void populate(HttpServletRequest request) {
115                    super.populate(request);
116                    
117            if (getParameter(request, KRADConstants.RETURN_LOCATION_PARAMETER) != null) {
118                setBackLocation(getParameter(request, KRADConstants.RETURN_LOCATION_PARAMETER));
119            }
120            }
121    
122        public void validatePreferences() {
123         
124            try {
125                new Integer(preferences.getRefreshRate().trim());
126            } catch (NumberFormatException e) {
127                GlobalVariables.getMessageMap().putError(ERR_KEY_REFRESH_RATE_WHOLE_NUM, "general.message", "ActionList Refresh Rate must be in whole minutes");
128            } catch (NullPointerException e1) {
129                GlobalVariables.getMessageMap().putError(ERR_KEY_REFRESH_RATE_WHOLE_NUM, "general.message", "ActionList Refresh Rate must be in whole minutes");
130            }
131    
132            try {
133                if(new Integer(preferences.getPageSize().trim()) == 0){
134                     GlobalVariables.getMessageMap().putError(ERR_KEY_ACTION_LIST_PAGE_SIZE_WHOLE_NUM, "general.message", "ActionList Page Size must be non-zero ");
135                }    
136            } catch (NumberFormatException e) {
137                GlobalVariables.getMessageMap().putError(ERR_KEY_ACTION_LIST_PAGE_SIZE_WHOLE_NUM, "general.message", "ActionList Page Size must be in whole minutes");
138            } catch (NullPointerException e1) {
139                GlobalVariables.getMessageMap().putError(ERR_KEY_ACTION_LIST_PAGE_SIZE_WHOLE_NUM, "general.message", "ActionList Page Size must be in whole minutes");
140            }
141          
142            if (GlobalVariables.getMessageMap().hasErrors()) {
143                throw new ValidationException("errors in preferences");
144            }
145        }
146    }