org.sculptor.framework.propertyeditor.LocalDateEditor.java Source code

Java tutorial

Introduction

Here is the source code for org.sculptor.framework.propertyeditor.LocalDateEditor.java

Source

/*
 * 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) : "");
    }
}