001 /*
002 * Copyright 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 org.kuali.kfs.module.purap.util;
017
018 import java.math.BigDecimal;
019 import java.sql.Date;
020 import java.text.ParseException;
021 import java.text.SimpleDateFormat;
022 import java.util.Calendar;
023
024 import org.apache.commons.lang.StringUtils;
025 import org.apache.commons.lang.time.DateUtils;
026 import org.apache.log4j.Logger;
027 import org.kuali.kfs.module.purap.PurapConstants;
028 import org.kuali.kfs.sys.context.SpringContext;
029 import org.kuali.rice.kns.service.DateTimeService;
030
031 public class ElectronicInvoiceUtils {
032
033 private final static Logger LOG = Logger.getLogger(ElectronicInvoiceUtils.class);
034
035 public static Date getDate(String invoiceDateString){
036
037 boolean formatInvalid = true;
038 String formattedDateString = "";
039 String stringToParse = null;
040
041 if (StringUtils.isNotEmpty(invoiceDateString)) {
042
043 String dateToConvert = null;
044 // get a copy of given date with 0's for all numbers to check format
045 formattedDateString = invoiceDateString.replaceAll("\\d", "0");
046
047 if (PurApDateFormatUtils.getFormattingString(PurapConstants.NamedDateFormats.CXML_DATE_FORMAT).equals(formattedDateString)) {
048 // Date is in 0000-00-00 format
049 formatInvalid = false;
050 stringToParse = invoiceDateString;
051 }
052 else if (PurApDateFormatUtils.getFormattingString(PurapConstants.NamedDateFormats.KUALI_DATE_FORMAT).equals(formattedDateString)) {
053 try {
054 java.util.Date javaDate = SpringContext.getBean(DateTimeService.class).convertToDate(invoiceDateString);
055 return org.kuali.rice.kns.util.DateUtils.convertToSqlDate(javaDate);
056 }
057 catch (ParseException e) {
058 return null;
059 }
060 }
061 else if (PurApDateFormatUtils.getFormattingString(PurapConstants.NamedDateFormats.CXML_DATE_FORMAT).length() != formattedDateString.length()) {
062 // strings are not the same length... must parse down given string from cXML for validation
063 formattedDateString = formattedDateString.substring(0, PurApDateFormatUtils.getFormattingString(PurapConstants.NamedDateFormats.CXML_DATE_FORMAT).length());
064 // strings should now be same length
065 if (PurApDateFormatUtils.getFormattingString(PurapConstants.NamedDateFormats.CXML_DATE_FORMAT).equals(formattedDateString)) {
066 // if strings are equal we can process date
067 formatInvalid = false;
068 stringToParse = invoiceDateString.substring(0, PurApDateFormatUtils.getFormattingString(PurapConstants.NamedDateFormats.CXML_DATE_FORMAT).length());
069 }
070 else {
071 // strings are same size and both only use 0 characters so date is invalid
072 }
073 }
074 else {
075 /*
076 * strings are of same length but are not equal this can only occur if date separators are invalid so we have an
077 * invalid format
078 */
079 }
080 }
081
082 if (formatInvalid) {
083 return null;
084 }
085 else {
086 // try to parse date
087 SimpleDateFormat sdf = PurApDateFormatUtils.getSimpleDateFormat(PurapConstants.NamedDateFormats.CXML_SIMPLE_DATE_FORMAT);
088 try {
089 return org.kuali.rice.kns.util.DateUtils.convertToSqlDate(sdf.parse(stringToParse));
090 }
091 catch (ParseException e) {
092 return null;
093 }
094 }
095
096 }
097
098 public static String getDateDisplayText(java.util.Date date) {
099 Calendar c = Calendar.getInstance();
100 c.setTime(date);
101 // we add one to the month below because January = 0, February = 1, March = 2, and so on
102 String monthPart = (c.get(Calendar.MONTH) + 1) + "";
103 String dayPart = c.get(Calendar.DATE) + "";
104 if (monthPart.length() == 1){
105 monthPart = "0" + monthPart;
106 }
107
108 if (dayPart.length() == 1){
109 dayPart = "0" + dayPart;
110 }
111
112 String useDate = monthPart + "/" + dayPart + "/" + c.get(Calendar.YEAR);
113 String actualDate = (date != null) ? date.toString() : "empty given date";
114 return useDate;
115 }
116
117 public static String stripSplChars(String data){
118 if (data != null){
119 StringBuffer result = new StringBuffer();
120 for (int i = 0; i < data.length(); i++) {
121 if (Character.isLetterOrDigit(data.charAt(i))){
122 result.append(data.charAt(i));
123 }
124 }
125 return result.toString();
126 }else{
127 return null;
128 }
129 }
130
131 }