/* * Copyright 2007 The Fornax Project Team, including the original * author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.sculptor.framework.propertyeditor; import java.beans.PropertyEditorSupport; import org.joda.time.LocalDate; import org.joda.time.format.DateTimeFormat; import org.joda.time.format.DateTimeFormatter; import org.springframework.util.StringUtils; /** * Custom <tt>PropertyEditorSupport</tt> to convert from <tt>String</tt> to * JODA's <tt>LocalDate</tt>. * * @see <a * href="http://springframework.cvs.sourceforge.net/springframework/spring/src/org/springframework/beans/propertyeditors/CustomDateEditor.java?revision=HEAD&view=markup">Spring's * CustomDateEditor</a> * @see <a * href="http://www.springframework.org/docs/reference/beans.html#beans-applicationcontext-customeditors">http://www.springframework.org/docs/reference/beans.html#beans-applicationcontext-customeditors</a> * @see <a * href="http://joda-time.sourceforge.net/userguide.html#Standard_Formatters">http://joda-time.sourceforge.net/userguide.html#Standard_Formatters</a> */ public class LocalDateEditor extends PropertyEditorSupport { private final DateTimeFormatter formatter; private final boolean allowEmpty; /** * Create a new LocalDateEditor instance, using the given format for * parsing and rendering. * * The "allowEmpty" parameter states if an empty String should be allowed * for parsing, i.e. get interpreted as null value. Otherwise, an * IllegalArgumentException gets thrown in that case. * * @param dateFormat * DateFormat to use for parsing and rendering * @param allowEmpty * if empty strings should be allowed */ public LocalDateEditor(String dateFormat, boolean allowEmpty) { this.formatter = DateTimeFormat.forPattern(dateFormat); this.allowEmpty = allowEmpty; } /** * Parse the value from the given text, using the specified format. */ public void setAsText(String text) throws IllegalArgumentException { if (this.allowEmpty && !StringUtils.hasText(text)) { // Treat empty String as null value. setValue(null); } else { setValue(new LocalDate(this.formatter.parseDateTime(text))); } } /** * Format the LocalDate as String, using the specified format. */ public String getAsText() { LocalDate value = (LocalDate) getValue(); return (value != null ? value.toString(this.formatter) : ""); } }