diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/constants/VOConstants.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/constants/VOConstants.java index 95fffb68..2b32ea5d 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/visualization/constants/VOConstants.java +++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/constants/VOConstants.java @@ -2,7 +2,12 @@ package edu.cornell.mannlib.vitro.webapp.visualization.constants; +import java.util.ArrayList; import java.util.Calendar; +import java.util.List; + +import org.joda.time.format.DateTimeFormatter; +import org.joda.time.format.ISODateTimeFormat; /** * This contains the constants related to all the value objects. @@ -23,6 +28,16 @@ public class VOConstants { public static final int NUM_CHARS_IN_YEAR_FORMAT = 4; public static final int MINIMUM_PUBLICATION_YEAR = 1800; public static final int CURRENT_YEAR = Calendar.getInstance().get(Calendar.YEAR); + + @SuppressWarnings("serial") + public static final List POSSIBLE_DATE_TIME_FORMATTERS = new ArrayList() {{ + + add(ISODateTimeFormat.dateTimeNoMillis()); + add(ISODateTimeFormat.dateHourMinuteSecond()); + add(ISODateTimeFormat.dateTimeParser()); + + }}; + } diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/valueobjects/BiboDocument.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/valueobjects/BiboDocument.java index 48450856..c6726439 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/valueobjects/BiboDocument.java +++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/valueobjects/BiboDocument.java @@ -10,6 +10,7 @@ import org.joda.time.format.DateTimeFormatter; import org.joda.time.format.ISODateTimeFormat; import edu.cornell.mannlib.vitro.webapp.visualization.constants.VOConstants; +import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.visutils.UtilityFunctions; /** * @author cdtank @@ -112,12 +113,11 @@ public class BiboDocument extends Individual { if (publicationDate != null) { - DateTimeFormatter dateTimeFormat = ISODateTimeFormat.dateHourMinuteSecond(); + DateTime validParsedDateTimeObject = UtilityFunctions.getValidParsedDateTimeObject(publicationDate); - try { - DateTime dateTime = dateTimeFormat.parseDateTime(publicationDate); - return String.valueOf(dateTime.getYear()); - } catch (Exception e) { + if (validParsedDateTimeObject != null) { + return String.valueOf(validParsedDateTimeObject.getYear()); + } else { return publicationYear != null ? publicationYear : VOConstants.DEFAULT_PUBLICATION_YEAR; } diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/visutils/UtilityFunctions.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/visutils/UtilityFunctions.java index aa08d94b..4c9ece4a 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/visutils/UtilityFunctions.java +++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/visutils/UtilityFunctions.java @@ -3,8 +3,10 @@ package edu.cornell.mannlib.vitro.webapp.visualization.freemarker.visutils; import java.io.IOException; +import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; +import java.util.List; import java.util.Map; import java.util.Set; import java.util.TreeMap; @@ -16,6 +18,9 @@ import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; +import org.joda.time.DateTime; +import org.joda.time.format.DateTimeFormatter; +import org.joda.time.format.ISODateTimeFormat; import edu.cornell.mannlib.vitro.webapp.beans.Portal; import edu.cornell.mannlib.vitro.webapp.controller.Controllers; @@ -23,6 +28,7 @@ import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.ResponseValues; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.TemplateResponseValues; import edu.cornell.mannlib.vitro.webapp.controller.visualization.freemarker.VisualizationFrameworkConstants; +import edu.cornell.mannlib.vitro.webapp.visualization.constants.VOConstants; import edu.cornell.mannlib.vitro.webapp.visualization.constants.VisConstants; import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.valueobjects.BiboDocument; import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.valueobjects.CoAuthorshipData; @@ -253,5 +259,27 @@ public class UtilityFunctions { return yearToGrantCount; } + + public static DateTime getValidParsedDateTimeObject(String unparsedDateTime) { + + for (DateTimeFormatter currentFormatter : VOConstants.POSSIBLE_DATE_TIME_FORMATTERS) { + + try { + + DateTime dateTime = currentFormatter.parseDateTime(unparsedDateTime); + return dateTime; + + } catch (Exception e2) { + /* + * The current date-time formatter did not pass the muster. + * */ + } + } + + /* + * This means that none of the date time formatters worked. + * */ + return null; + } }