annotate org.eclipse.core.databinding/src/org/eclipse/core/internal/databinding/conversion/DateConversionSupport.d @ 125:c43718956f21 default tip

Updated the snippets status.
author Jacob Carlborg <doob@me.com>
date Thu, 11 Aug 2011 19:55:14 +0200
parents 6be48cf9f95c
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
78
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1 /*
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2 * Copyright cast(C) 2005 db4objects Inc. http://www.db4o.com
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
3 *
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
4 * All rights reserved. This program and the accompanying materials
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
5 * are made available under the terms of the Eclipse Public License v1.0
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
6 * which accompanies this distribution, and is available at
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
7 * http://www.eclipse.org/legal/epl-v10.html
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
8 *
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
9 * Contributors:
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
10 * db4objects - Initial API and implementation
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
11 * Tom Schindl<tom.schindl@bestsolution.at> - bugfix for 217940
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
12 */
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
13 module org.eclipse.core.internal.databinding.conversion.DateConversionSupport;
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
14
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
15 import java.lang.all;
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
16
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
17 import java.text.ParsePosition;
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
18 import java.util.Date;
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
19
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
20 import org.eclipse.core.internal.databinding.BindingMessages;
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
21
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
22 import com.ibm.icu.text.DateFormat;
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
23 import com.ibm.icu.text.SimpleDateFormat;
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
24
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
25 /**
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
26 * Base support for date/string conversion handling according to the default
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
27 * locale or in plain long milliseconds.
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
28 * <p>
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
29 * NOTE: parse(format(date)) will generally *not* be equal to date, since the
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
30 * string representation may not cover the sub-second range, time-only string
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
31 * representations will be counted from the beginning of the era, etc.
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
32 * </p>
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
33 */
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
34 public abstract class DateConversionSupport {
85
6be48cf9f95c Work on databinding
Frank Benoit <benoit@tionex.de>
parents: 78
diff changeset
35 private const static int DATE_FORMAT=DateFormat.SHORT;
6be48cf9f95c Work on databinding
Frank Benoit <benoit@tionex.de>
parents: 78
diff changeset
36 private const static int DEFAULT_FORMATTER_INDEX=0;
78
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
37
85
6be48cf9f95c Work on databinding
Frank Benoit <benoit@tionex.de>
parents: 78
diff changeset
38 private const static int NUM_VIRTUAL_FORMATTERS=1;
78
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
39
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
40 /**
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
41 * Alternative formatters for date, time and date/time.
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
42 * Raw milliseconds are covered as a special case.
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
43 */
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
44 // TODO: These could be shared, but would have to be synchronized.
85
6be48cf9f95c Work on databinding
Frank Benoit <benoit@tionex.de>
parents: 78
diff changeset
45 private static DateFormat[] formatters;
6be48cf9f95c Work on databinding
Frank Benoit <benoit@tionex.de>
parents: 78
diff changeset
46 static this(){
6be48cf9f95c Work on databinding
Frank Benoit <benoit@tionex.de>
parents: 78
diff changeset
47 formatters = [ cast(DateFormat)
6be48cf9f95c Work on databinding
Frank Benoit <benoit@tionex.de>
parents: 78
diff changeset
48 new SimpleDateFormat(BindingMessages.getString(BindingMessages.DATE_FORMAT_DATE_TIME)),
6be48cf9f95c Work on databinding
Frank Benoit <benoit@tionex.de>
parents: 78
diff changeset
49 new SimpleDateFormat(BindingMessages.getString(BindingMessages.DATEFORMAT_TIME)),
78
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
50 DateFormat.getDateTimeInstance(DATE_FORMAT, DateFormat.SHORT),
85
6be48cf9f95c Work on databinding
Frank Benoit <benoit@tionex.de>
parents: 78
diff changeset
51 DateFormat.getDateInstance(DATE_FORMAT),
6be48cf9f95c Work on databinding
Frank Benoit <benoit@tionex.de>
parents: 78
diff changeset
52 DateFormat.getTimeInstance(DateFormat.SHORT),
78
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
53 DateFormat.getDateTimeInstance(DATE_FORMAT,DateFormat.MEDIUM),
85
6be48cf9f95c Work on databinding
Frank Benoit <benoit@tionex.de>
parents: 78
diff changeset
54 DateFormat.getTimeInstance(DateFormat.MEDIUM)
6be48cf9f95c Work on databinding
Frank Benoit <benoit@tionex.de>
parents: 78
diff changeset
55 ];
6be48cf9f95c Work on databinding
Frank Benoit <benoit@tionex.de>
parents: 78
diff changeset
56 }
78
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
57
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
58 /**
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
59 * Tries all available formatters to parse the given string according to the
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
60 * default locale or as a raw millisecond value and returns the result of the
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
61 * first successful run.
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
62 *
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
63 * @param str A string specifying a date according to the default locale or in raw milliseconds
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
64 * @return The parsed date, or null, if no available formatter could interpret the input string
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
65 */
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
66 protected Date parse(String str) {
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
67 for (int formatterIdx = 0; formatterIdx < formatters.length; formatterIdx++) {
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
68 Date parsed=parse(str,formatterIdx);
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
69 if(parsed !is null) {
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
70 return parsed;
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
71 }
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
72 }
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
73 return null;
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
74 }
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
75
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
76 protected Date parse(String str,int formatterIdx) {
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
77 if(formatterIdx>=0) {
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
78 ParsePosition pos=new ParsePosition(0);
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
79 if (str is null) {
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
80 return null;
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
81 }
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
82 Date date=formatters[formatterIdx].parse(str,pos);
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
83 if(pos.getErrorIndex() !is -1||pos.getIndex() !is str.length()) {
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
84 return null;
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
85 }
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
86 return date;
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
87 }
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
88 try {
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
89 long millisecs=Long.parseLong(str);
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
90 return new Date(millisecs);
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
91 }
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
92 catch(NumberFormatException exc) {
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
93 }
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
94 return null;
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
95 }
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
96
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
97 /**
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
98 * Formats the given date with the default formatter according to the default locale.
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
99 * @param date a date
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
100 * @return a string representation of the given date according to the default locale
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
101 */
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
102 protected String format(Date date) {
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
103 return format(date,DEFAULT_FORMATTER_INDEX);
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
104 }
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
105
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
106 protected String format(Date date,int formatterIdx) {
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
107 if(formatterIdx>=0) {
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
108 return formatters[formatterIdx].format(date);
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
109 }
85
6be48cf9f95c Work on databinding
Frank Benoit <benoit@tionex.de>
parents: 78
diff changeset
110 return String_valueOf(date.getTime());
78
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
111 }
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
112
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
113 protected int numFormatters() {
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
114 return formatters.length+NUM_VIRTUAL_FORMATTERS;
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
115 }
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
116
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
117 /**
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
118 * Returns the date format for the provided <code>index</code>.
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
119 * <p>
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
120 * This is for testing purposes only and should not be a part of the API if
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
121 * this class was to be exposed.
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
122 * </p>
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
123 *
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
124 * @param index
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
125 * @return date format
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
126 */
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
127 protected DateFormat getDateFormat(int index) {
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
128 if (index < 0 || index >= formatters.length) {
85
6be48cf9f95c Work on databinding
Frank Benoit <benoit@tionex.de>
parents: 78
diff changeset
129 throw new IllegalArgumentException(Format("'index' [{}] is out of bounds.", index )); //$NON-NLS-1$//$NON-NLS-2$
78
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
130 }
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
131
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
132 return formatters[index];
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
133 }
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
134 }