001    /*
002     * Copyright 2005-2007 The Kuali Foundation
003     *
004     *
005     * Licensed under the Educational Community License, Version 2.0 (the "License");
006     * you may not use this file except in compliance with the License.
007     * You may obtain a copy of the License at
008     *
009     * http://www.opensource.org/licenses/ecl2.php
010     *
011     * Unless required by applicable law or agreed to in writing, software
012     * distributed under the License is distributed on an "AS IS" BASIS,
013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014     * See the License for the specific language governing permissions and
015     * limitations under the License.
016     */
017    package org.kuali.rice.kew.stats.web;
018    
019    import java.text.ParseException;
020    import java.text.SimpleDateFormat;
021    import java.util.Date;
022    import java.util.HashMap;
023    import java.util.Map;
024    
025    import javax.servlet.http.HttpServletRequest;
026    
027    import org.kuali.rice.kew.stats.Stats;
028    import org.kuali.rice.kew.util.KEWConstants;
029    import org.kuali.rice.kns.web.struts.form.KualiForm;
030    import org.kuali.rice.krad.util.GlobalVariables;
031    import org.kuali.rice.krad.util.KRADConstants;
032    
033    
034    /**
035     * A Struts ActionForm for the {@link StatsAction}.
036     *
037     * @see StatsAction
038     *
039     * @author Kuali Rice Team (rice.collab@kuali.org)
040     */
041    public class StatsForm extends KualiForm {
042    
043            private static final long serialVersionUID = 4587377779133823858L;
044            private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(StatsForm.class);
045            private static final String BEGIN_DATE = "begDate";
046            private static final String END_DATE = "endDate";
047    
048        public static final String DAY_TIME_UNIT = "DDD";
049        public static final String WEEK_TIME_UNIT = "WW";
050        public static final String MONTH_TIME_UNIT = "MM";
051        public static final String YEAR_TIME_UNIT = "YYYY";
052    
053        public static final String DEFAULT_BEGIN_DATE = "01/01/1900";
054        public static final String DEFAULT_END_DATE = "01/01/2400";
055        public static final String BEG_DAY_TIME = " 00:00";
056        public static final String END_DAY_TIME = " 23:59";
057        public static final String DATE_FORMAT = "MM/dd/yyyy";
058        public static final String TIME_FORMAT = " HH:mm";
059    
060        private Stats stats;
061        private String methodToCall = "";
062        private String avgActionsPerTimeUnit = DAY_TIME_UNIT;
063    
064        private String begDate;
065        private String endDate;
066    
067        private Date beginningDate;
068        private Date endingDate;
069    
070        // KULRICE-3137: Added a backLocation parameter similar to the one from lookups.
071        private String backLocation;
072        
073            public StatsForm() {
074            stats = new Stats();
075        }
076    
077            /**
078             * Retrieves the "returnLocation" parameter after calling "populate" on the superclass.
079             * 
080             * @see org.kuali.rice.krad.web.struts.form.KualiForm#populate(javax.servlet.http.HttpServletRequest)
081             */
082            @Override
083            public void populate(HttpServletRequest request) {
084                    super.populate(request);
085                    
086            if (getParameter(request, KRADConstants.RETURN_LOCATION_PARAMETER) != null) {
087                setBackLocation(getParameter(request, KRADConstants.RETURN_LOCATION_PARAMETER));
088            }
089            }
090            
091        public void determineBeginDate() {
092            SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT + TIME_FORMAT);
093    
094            beginningDate = null;
095            try {
096                if (getBegDate() == null || getBegDate().trim().equals("")) {
097                    beginningDate = dateFormat.parse(DEFAULT_BEGIN_DATE + BEG_DAY_TIME);
098                } else {
099                    beginningDate = dateFormat.parse(getBegDate() + BEG_DAY_TIME);
100                }
101    
102                dateFormat = new SimpleDateFormat(DATE_FORMAT);
103                begDate = dateFormat.format(beginningDate);
104            } catch (ParseException e) {
105                //parse error caught in validate methods
106            } finally {
107                if (beginningDate == null) {
108                    try {
109                        beginningDate = dateFormat.parse(DEFAULT_BEGIN_DATE + BEG_DAY_TIME);
110                    } catch (ParseException e) {
111                        throw new RuntimeException("Default Begin Date format incorrect");
112                    }
113                }
114            }
115        }
116    
117        public void determineEndDate() {
118            SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT + TIME_FORMAT);
119    
120            endingDate = null;
121            try {
122                if (getEndDate() == null || getEndDate().trim().equals("")) {
123                    endingDate = dateFormat.parse(DEFAULT_END_DATE + END_DAY_TIME);
124                } else {
125                    endingDate = dateFormat.parse(getEndDate() + END_DAY_TIME);
126                }
127    
128                dateFormat = new SimpleDateFormat(DATE_FORMAT);
129                endDate = dateFormat.format(endingDate);
130            } catch (ParseException e) {
131                //parse error caught in validate methods
132            } finally {
133                if (endingDate == null) {
134                    try {
135                        endingDate = dateFormat.parse(DEFAULT_END_DATE + END_DAY_TIME);
136                    } catch (ParseException e) {
137                        throw new RuntimeException("Default End Date format incorrect");
138                    }
139                }
140            }
141        }
142    
143        public Map makePerUnitOfTimeDropDownMap() {
144    
145            Map dropDownMap = new HashMap();
146            dropDownMap.put(DAY_TIME_UNIT, KEWConstants.DAILY_UNIT);
147            dropDownMap.put(WEEK_TIME_UNIT, KEWConstants.WEEKLY_UNIT);
148            dropDownMap.put(MONTH_TIME_UNIT, KEWConstants.MONTHLY_UNIT);
149            dropDownMap.put(YEAR_TIME_UNIT, KEWConstants.YEARLY_UNIT);
150            return dropDownMap;
151    
152        }
153    
154        public void validateDates() {
155            LOG.debug("validate()");
156    
157            //this.validateDate(BEGIN_DATE, this.getBegDate(), "general.error.fieldinvalid");
158            //this.validateDate(END_DATE, this.getEndDate(), "general.error.fieldinvalid");
159            if (getBegDate() != null && getBegDate().length() != 0) {
160                try {
161                    new SimpleDateFormat(DATE_FORMAT + TIME_FORMAT).parse(getBegDate().trim()+END_DAY_TIME);
162                } catch (ParseException e) {
163                    GlobalVariables.getMessageMap().putError(BEGIN_DATE, "general.error.fieldinvalid", "Begin Date");
164                }
165            }
166            if (getEndDate() != null && getEndDate().length() != 0) {
167                try {
168                    new SimpleDateFormat(DATE_FORMAT + TIME_FORMAT).parse(getEndDate().trim()+END_DAY_TIME);
169                } catch (ParseException e) {
170                    GlobalVariables.getMessageMap().putError(END_DATE, "general.error.fieldinvalid", "End Date");
171                }
172            }
173        }
174    
175        public Stats getStats() {
176            return stats;
177        }
178    
179        public void setStats(Stats stats) {
180            this.stats = stats;
181        }
182    
183        public String getCanceledLabel() {
184            return KEWConstants.ROUTE_HEADER_CANCEL_LABEL;
185        }
186    
187        public String getDisapprovedLabel() {
188            return KEWConstants.ROUTE_HEADER_DISAPPROVED_LABEL;
189        }
190    
191        public String getEnrouteLabel() {
192            return KEWConstants.ROUTE_HEADER_ENROUTE_LABEL;
193        }
194    
195        public String getExceptionLabel() {
196            return KEWConstants.ROUTE_HEADER_EXCEPTION_LABEL;
197        }
198    
199        public String getFinalLabel() {
200            return KEWConstants.ROUTE_HEADER_FINAL_LABEL;
201        }
202    
203        public String getInitiatedLabel() {
204            return KEWConstants.ROUTE_HEADER_INITIATED_LABEL;
205        }
206    
207        public String getProcessedLabel() {
208            return KEWConstants.ROUTE_HEADER_PROCESSED_LABEL;
209        }
210    
211        public String getSavedLabel() {
212            return KEWConstants.ROUTE_HEADER_SAVED_LABEL;
213        }
214    
215        public String getAvgActionsPerTimeUnit() {
216            return avgActionsPerTimeUnit;
217        }
218    
219        public void setAvgActionsPerTimeUnit(String string) {
220            avgActionsPerTimeUnit = string;
221        }
222    
223        public String getBegDate() {
224            return begDate;
225        }
226    
227        public void setBegDate(String begDate) {
228            this.begDate = begDate;
229        }
230    
231        public String getEndDate() {
232            return endDate;
233        }
234    
235        public void setEndDate(String endDate) {
236            this.endDate = endDate;
237        }
238    
239        public String getMethodToCall() {
240            return methodToCall;
241        }
242    
243        public void setMethodToCall(String methodToCall) {
244            this.methodToCall = methodToCall;
245        }
246    
247        public Date getBeginningDate() {
248            return beginningDate;
249        }
250    
251        public void setBeginningDate(Date beginningDate) {
252            this.beginningDate = beginningDate;
253        }
254    
255        public Date getEndingDate() {
256            return endingDate;
257        }
258    
259        public void setEndingDate(Date endingDate) {
260            this.endingDate = endingDate;
261        }
262    
263        public String getDayTimeUnit() {
264            return DAY_TIME_UNIT;
265        }
266    
267        public String getMonthTimeUnit() {
268            return MONTH_TIME_UNIT;
269        }
270    
271        public String getWeekTimeUnit() {
272            return WEEK_TIME_UNIT;
273        }
274    
275        public String getYearTimeUnit() {
276            return YEAR_TIME_UNIT;
277        }
278    
279            public String getBackLocation() {
280                    return this.backLocation;
281            }
282    
283            public void setBackLocation(String backLocation) {
284                    this.backLocation = backLocation;
285            }
286        
287    }