1 /* 2 * Copyright 2004 Jonathan M. Lehr 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" 11 * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language 12 * governing permissions and limitations under the License. 13 * 14 * MODIFIED BY THE KUALI FOUNDATION 15 */ 16 // begin Kuali Foundation modification 17 package org.kuali.rice.kns.web.format; 18 // end Kuali Foundation modification 19 20 // begin Kuali Foundation modification 21 // import order changed, and java.util.Calendar, org.kuali.KeyConstants and org.kuali.rice.KNSServiceLocator added 22 import java.sql.Date; 23 import java.text.ParseException; 24 import java.util.Calendar; 25 26 import org.kuali.rice.kns.service.DateTimeService; 27 import org.kuali.rice.kns.service.KNSServiceLocator; 28 import org.kuali.rice.kns.util.RiceKeyConstants; 29 30 /** 31 * begin Kuali Foundation modification 32 * This class is used to format Date objects. 33 * end Kuali Foundation modification 34 */ 35 public class DateFormatter extends Formatter { 36 // begin Kuali Foundation modification 37 // serialVersionUID changed from 1L 38 private static final long serialVersionUID = 7612442662886603084L; 39 40 41 private static DateTimeService dateTimeService; 42 // end Kuali Foundation modification 43 44 // begin Kuali Foundation modification 45 // static variables DATE_ERROR_KEY and PARSE_MSG removed 46 // method public String getErrorKey() removed 47 // end Kuali Foundation modification 48 49 // begin Kuali Foundation modification 50 // added this method 51 /** 52 * 53 * For a given user input date, this method returns the exact string the user entered after the last slash. This allows the 54 * formatter to distinguish between ambiguous values such as "/06" "/6" and "/0006" 55 * 56 * @param date 57 * @return 58 */ 59 private String verbatimYear(String date) { 60 String result = ""; 61 62 int pos = date.lastIndexOf("/"); 63 if (pos >= 0) { 64 result = date.substring(pos); 65 } 66 67 return result; 68 } 69 // end Kuali Foundation modification 70 71 72 /** 73 * Unformats its argument and return a java.util.Date instance initialized with the resulting string. 74 * 75 * @return a java.util.Date intialized with the provided string 76 */ 77 protected Object convertToObject(String target) { 78 // begin Kuali Foundation modification 79 try { 80 Date result = getDateTimeService().convertToSqlDate(target); 81 Calendar calendar = Calendar.getInstance(); 82 calendar.setTime(result); 83 if (calendar.get(Calendar.YEAR) < 1000 && verbatimYear(target).length() < 4) { 84 throw new FormatException("illegal year format", RiceKeyConstants.ERROR_DATE, target); 85 } 86 return result; 87 } 88 catch (ParseException e) { 89 throw new FormatException("parsing", RiceKeyConstants.ERROR_DATE, target, e); 90 } 91 // end Kuali Foundation modification 92 } 93 94 /** 95 * Returns a string representation of its argument, formatted as a date with the "MM/dd/yyyy" format. 96 * 97 * @return a formatted String 98 */ 99 public Object format(Object value) { 100 if (value == null) { 101 return null; 102 } 103 // begin Kuali Foundation modification 104 if ("".equals(value)) { 105 return null; 106 } 107 return getDateTimeService().toDateString((java.util.Date)value); 108 // end Kuali Foundation modification 109 } 110 111 112 public static DateTimeService getDateTimeService() { 113 if ( dateTimeService == null ) { 114 dateTimeService = KNSServiceLocator.getDateTimeService(); 115 } 116 return dateTimeService; 117 } 118 119 /** 120 * This method is invoked to validate a date string using the KNS Service 121 * DateTimeService. 122 * 123 * @param dateString 124 * @return 125 */ 126 public boolean validate(String dateString) { 127 boolean isValid=false; 128 129 DateTimeService service=getDateTimeService(); 130 try { 131 service.convertToSqlTimestamp(dateString); 132 isValid=true; 133 } catch (Exception e) { 134 135 } 136 137 return isValid; 138 139 } 140 141 }