001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */
017: package org.apache.wicket.datetime;
018:
019: import java.text.SimpleDateFormat;
020:
021: import org.apache.wicket.datetime.markup.html.form.DateTextField;
022: import org.joda.time.DateTime;
023: import org.joda.time.DateTimeZone;
024: import org.joda.time.format.DateTimeFormat;
025: import org.joda.time.format.DateTimeFormatter;
026:
027: /**
028: * Date converter that uses Joda Time and can be configured to take the time
029: * zone difference between clients and server into account. This converter is
030: * hard coded to use the provided custom date pattern, no matter what current
031: * locale is used. See {@link SimpleDateFormat} for available patterns.
032: * <p>
033: * This converter is especially suited on a per-component base.
034: * </p>
035: *
036: * @see SimpleDateFormat
037: * @see StyleDateConverter
038: * @see DateTextField
039: * @see DateTime
040: * @see DateTimeFormat
041: * @see DateTimeZone
042: *
043: * @author eelcohillenius
044: */
045: public class PatternDateConverter extends DateConverter {
046:
047: private static final long serialVersionUID = 1L;
048:
049: /** pattern to use. */
050: private final String datePattern;
051:
052: /**
053: * Construct.
054: * </p>
055: * When applyTimeZoneDifference is true, the current time is applied on the
056: * parsed date, and the date will be corrected for the time zone difference
057: * between the server and the client. For instance, if I'm in Seattle and
058: * the server I'm working on is in Amsterdam, the server is 9 hours ahead.
059: * So, if I'm inputting say 12/24 at a couple of hours before midnight, at
060: * the server it is already 12/25. If this boolean is true, it will be
061: * transformed to 12/25, while the client sees 12/24.
062: * </p>
063: *
064: * @param datePattern
065: * The pattern to use. Must be not null. See
066: * {@link SimpleDateFormat} for available patterns.
067: * @param applyTimeZoneDifference
068: * whether to apply the difference in time zones between client
069: * and server
070: * @throws IllegalArgumentException
071: * in case the date pattern is null
072: */
073: public PatternDateConverter(String datePattern,
074: boolean applyTimeZoneDifference) {
075:
076: super (applyTimeZoneDifference);
077: if (datePattern == null) {
078: throw new IllegalArgumentException(
079: "datePattern must be not null");
080: }
081: this .datePattern = datePattern;
082: }
083:
084: /**
085: * Gets the optional date pattern.
086: *
087: * @return datePattern
088: */
089: public final String getDatePattern() {
090: return datePattern;
091: }
092:
093: /**
094: * @return formatter The formatter for the current conversion
095: */
096: protected DateTimeFormatter getFormat() {
097: return DateTimeFormat.forPattern(datePattern).withLocale(
098: getLocale()).withPivotYear(2000);
099: }
100: }
|