001    /**
002     * Copyright 2005-2011 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 edu.sampleu.kew.krad.form;
017    
018    import java.text.ParseException;
019    import java.text.SimpleDateFormat;
020    import java.util.Date;
021    import java.util.HashMap;
022    import java.util.Map;
023    
024    import org.kuali.rice.kew.stats.Stats;
025    import org.kuali.rice.kew.stats.web.StatsAction;
026    import org.kuali.rice.kew.api.KewApiConstants;
027    import org.kuali.rice.krad.util.GlobalVariables;
028    import org.kuali.rice.krad.web.form.UifFormBase;
029    
030    /**
031     * A Struts ActionForm for the {@link StatsAction}.
032     * 
033     * @see StatsAction
034     * 
035     * @author Kuali Rice Team (rice.collab@kuali.org)
036     */
037    public class StatsForm extends UifFormBase {
038    
039        private static final long serialVersionUID = 4587377779133823858L;
040        private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(StatsForm.class);
041        private static final String BEGIN_DATE = "begDate";
042        private static final String END_DATE = "endDate";
043    
044        public static final String DAY_TIME_UNIT = "DDD";
045        public static final String WEEK_TIME_UNIT = "WW";
046        public static final String MONTH_TIME_UNIT = "MM";
047        public static final String YEAR_TIME_UNIT = "YYYY";
048    
049        public static final String DEFAULT_BEGIN_DATE = "01/01/1900";
050        public static final String DEFAULT_END_DATE = "01/01/2400";
051        public static final String BEG_DAY_TIME = " 00:00";
052        public static final String END_DAY_TIME = " 23:59";
053        public static final String DATE_FORMAT = "MM/dd/yyyy";
054        public static final String TIME_FORMAT = " HH:mm";
055    
056        private Stats stats;
057        private String methodToCall = "";
058        private String avgActionsPerTimeUnit = DAY_TIME_UNIT;
059    
060        private String begDate;
061        private String endDate;
062    
063        private Date beginningDate;
064        private Date endingDate;
065    
066        // KULRICE-3137: Added a backLocation parameter similar to the one from lookups.
067        private String backLocation;
068    
069        public StatsForm() {
070            stats = new Stats();
071        }
072    
073        /**
074         * Retrieves the "returnLocation" parameter after calling "populate" on the superclass.
075         * 
076         * @see org.kuali.rice.krad.web.struts.form.KualiForm#populate(javax.servlet.http.HttpServletRequest)
077         */
078        //  @Override
079        //  public void populate(HttpServletRequest request) {
080        //          super.populate(request);
081        //          
082        //        if (getParameter(request, KRADConstants.RETURN_LOCATION_PARAMETER) != null) {
083        //            setBackLocation(getParameter(request, KRADConstants.RETURN_LOCATION_PARAMETER));
084        //        }
085        //  }
086    
087        public void determineBeginDate() {
088            SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT + TIME_FORMAT);
089    
090            beginningDate = null;
091            try {
092                if (getBegDate() == null || getBegDate().trim().equals("")) {
093                    beginningDate = dateFormat.parse(DEFAULT_BEGIN_DATE + BEG_DAY_TIME);
094                } else {
095                    beginningDate = dateFormat.parse(getBegDate() + BEG_DAY_TIME);
096                }
097    
098                dateFormat = new SimpleDateFormat(DATE_FORMAT);
099                begDate = dateFormat.format(beginningDate);
100            } catch (ParseException e) {
101                //parse error caught in validate methods
102            } finally {
103                if (beginningDate == null) {
104                    try {
105                        beginningDate = dateFormat.parse(DEFAULT_BEGIN_DATE + BEG_DAY_TIME);
106                    } catch (ParseException e) {
107                        throw new RuntimeException("Default Begin Date format incorrect");
108                    }
109                }
110            }
111        }
112    
113        public void determineEndDate() {
114            SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT + TIME_FORMAT);
115    
116            endingDate = null;
117            try {
118                if (getEndDate() == null || getEndDate().trim().equals("")) {
119                    endingDate = dateFormat.parse(DEFAULT_END_DATE + END_DAY_TIME);
120                } else {
121                    endingDate = dateFormat.parse(getEndDate() + END_DAY_TIME);
122                }
123    
124                dateFormat = new SimpleDateFormat(DATE_FORMAT);
125                endDate = dateFormat.format(endingDate);
126            } catch (ParseException e) {
127                //parse error caught in validate methods
128            } finally {
129                if (endingDate == null) {
130                    try {
131                        endingDate = dateFormat.parse(DEFAULT_END_DATE + END_DAY_TIME);
132                    } catch (ParseException e) {
133                        throw new RuntimeException("Default End Date format incorrect");
134                    }
135                }
136            }
137        }
138    
139        public Map makePerUnitOfTimeDropDownMap() {
140    
141            Map dropDownMap = new HashMap();
142            dropDownMap.put(DAY_TIME_UNIT, KewApiConstants.DAILY_UNIT);
143            dropDownMap.put(WEEK_TIME_UNIT, KewApiConstants.WEEKLY_UNIT);
144            dropDownMap.put(MONTH_TIME_UNIT, KewApiConstants.MONTHLY_UNIT);
145            dropDownMap.put(YEAR_TIME_UNIT, KewApiConstants.YEARLY_UNIT);
146            return dropDownMap;
147    
148        }
149    
150        public void validateDates() {
151            LOG.debug("validate()");
152    
153            //this.validateDate(BEGIN_DATE, this.getBegDate(), "general.error.fieldinvalid");
154            //this.validateDate(END_DATE, this.getEndDate(), "general.error.fieldinvalid");
155            if (getBegDate() != null && getBegDate().length() != 0) {
156                try {
157                    new SimpleDateFormat(DATE_FORMAT + TIME_FORMAT).parse(getBegDate().trim() + END_DAY_TIME);
158                } catch (ParseException e) {
159                    GlobalVariables.getMessageMap().putError(BEGIN_DATE, "general.error.fieldinvalid", "Begin Date");
160                }
161            }
162            if (getEndDate() != null && getEndDate().length() != 0) {
163                try {
164                    new SimpleDateFormat(DATE_FORMAT + TIME_FORMAT).parse(getEndDate().trim() + END_DAY_TIME);
165                } catch (ParseException e) {
166                    GlobalVariables.getMessageMap().putError(END_DATE, "general.error.fieldinvalid", "End Date");
167                }
168            }
169        }
170    
171        public Stats getStats() {
172            return stats;
173        }
174    
175        public void setStats(Stats stats) {
176            this.stats = stats;
177        }
178    
179    //    public String getApprovedLabel() {
180    //        return KewApiConstants.ROUTE_HEADER_APPROVED_LABEL;
181    //    }
182    
183        public String getCanceledLabel() {
184            return KewApiConstants.ROUTE_HEADER_CANCEL_LABEL;
185        }
186    
187        public String getDisapprovedLabel() {
188            return KewApiConstants.ROUTE_HEADER_DISAPPROVED_LABEL;
189        }
190    
191        public String getEnrouteLabel() {
192            return KewApiConstants.ROUTE_HEADER_ENROUTE_LABEL;
193        }
194    
195        public String getExceptionLabel() {
196            return KewApiConstants.ROUTE_HEADER_EXCEPTION_LABEL;
197        }
198    
199        public String getFinalLabel() {
200            return KewApiConstants.ROUTE_HEADER_FINAL_LABEL;
201        }
202    
203        public String getInitiatedLabel() {
204            return KewApiConstants.ROUTE_HEADER_INITIATED_LABEL;
205        }
206    
207        public String getProcessedLabel() {
208            return KewApiConstants.ROUTE_HEADER_PROCESSED_LABEL;
209        }
210    
211        public String getSavedLabel() {
212            return KewApiConstants.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    }