All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.tractionsoftware.gwt.user.client.ui.impl.UTCTimeBoxImplShared Maven / Gradle / Ivy

There is a newer version: 5.8.4
Show newest version
/*
 * Copyright 2010 Traction Software, Inc.
 *
 * 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 com.tractionsoftware.gwt.user.client.ui.impl;

import java.util.Date;

import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.user.client.ui.Composite;
import com.tractionsoftware.gwt.user.client.ui.UTCDateBox;

/**
 * Shared implementation for UTCTimeBox.
 *
 * 

Code Source

* *

* This is external code that was copied into the CedarCommon codebase under * the terms of its license. *

* *
* * * * * * * * * * * * * * * *
Source:Traction Software
Date:July, 2014
Reason:The official Traction-supplied jar in Maven only supports Java 1.7+, but CedarCommon supports Java 1.6+.
*
* * @author Andy @ Traction Software */ public abstract class UTCTimeBoxImplShared extends Composite implements UTCTimeBoxImpl { protected static DateTimeFormat[] fallbackTimeFormats = null; protected static String[] fallbackFormatStrings = new String[] { "hh:mma", "HH:mm" }; protected DateTimeFormat timeFormat; // ---------------------------------------------------------------------- /** * Sets the DateTimeFormat for this UTCTimeBox. The HTML5 * implementation will ignore this. */ @Override public void setTimeFormat(DateTimeFormat timeFormat) { this.timeFormat = timeFormat; } /** * Sets the visible length of the time input. The HTML5 * implementation will ignore this. */ @Override public void setVisibleLength(int length) {} /** * Validates the value that has been typed into the text input. * The HTML5 implementation will do nothing. */ @Override public void validate() {} /** * Sets the time value (as milliseconds since midnight independent * of time zone) */ @Override public final void setValue(Long value) { setValue(value, false); } // ---------------------------------------------------------------------- public UTCTimeBoxImplShared() { if (fallbackTimeFormats == null) { fallbackTimeFormats = new DateTimeFormat[fallbackFormatStrings.length]; for (int i=0; ipm, a->am if (text.endsWith("p") || text.endsWith("a")) { text += "m"; } Long ret = parseUsingFallbacks(text, timeFormat); if (ret == null) { ret = parseUsingFallbacksWithColon(text, timeFormat); } return ret; } } /** * Formats the value provided with the specified DateTimeFormat */ protected static final String formatUsingFormat(Long value, DateTimeFormat fmt) { if (value == null) { return ""; } else { // midnight GMT Date date = new Date(0); // offset by timezone and value date.setTime(UTCDateBox.timezoneOffsetMillis(date) + value.longValue()); // format it return fmt.format(date); } } /** * Attempts to insert a colon so that a value without a colon can * be parsed. */ protected static final Long parseUsingFallbacksWithColon(String text, DateTimeFormat timeFormat) { if (text.indexOf(':') == -1) { text = text.replace(" ", ""); int numdigits = 0; int lastdigit = 0; for (int i = 0; i < text.length(); i++) { char c = text.charAt(i); if (Character.isDigit(c)) { numdigits++; lastdigit = i; } } if (numdigits == 1 || numdigits == 2) { // insert :00 int colon = lastdigit + 1; text = text.substring(0, colon) + ":00" + text.substring(colon); } else if (numdigits > 2) { // insert : int colon = lastdigit - 1; text = text.substring(0, colon) + ":" + text.substring(colon); } return parseUsingFallbacks(text, timeFormat); } else { return null; } } protected static final Long parseUsingFormat(String text, DateTimeFormat fmt) { Date date = new Date(0); int num = fmt.parse(text, 0, date); return (num != 0) ? new Long(normalizeInLocalRange(date.getTime() - UTCDateBox.timezoneOffsetMillis(date))) : null; } protected static final Long parseUsingFallbacks(String text, DateTimeFormat primaryTimeFormat) { Long ret = parseUsingFormat(text, primaryTimeFormat); for (int i = 0; ret == null && i < fallbackTimeFormats.length; i++) { ret = parseUsingFormat(text, fallbackTimeFormats[i]); } return ret; } protected static long normalizeInLocalRange(long time) { return (time + UTCDateBox.DAY_IN_MS) % UTCDateBox.DAY_IN_MS; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy