512 lines
17 KiB
Java
512 lines
17 KiB
Java
/*
|
|
* Decompiled with CFR 0.152.
|
|
*/
|
|
package com.tridium.util;
|
|
|
|
import java.util.Calendar;
|
|
import java.util.HashMap;
|
|
import javax.baja.sys.BAbsTime;
|
|
import javax.baja.sys.BBoolean;
|
|
import javax.baja.sys.BFacets;
|
|
import javax.baja.sys.BMonth;
|
|
import javax.baja.sys.BObject;
|
|
import javax.baja.sys.BString;
|
|
import javax.baja.sys.BTime;
|
|
import javax.baja.sys.Context;
|
|
import javax.baja.sys.Sys;
|
|
import javax.baja.timezone.BTimeZone;
|
|
import javax.baja.util.Lexicon;
|
|
|
|
public class TimeFormat {
|
|
static final int SHOW_DATE = 1;
|
|
static final int SHOW_TIME = 2;
|
|
static final int SHOW_SECONDS = 4;
|
|
static final int SHOW_MILLIS = 8;
|
|
static final int SHOW_ZONE = 16;
|
|
static final int[] SHOW;
|
|
public static final int YEAR_2 = 1;
|
|
public static final int YEAR_4 = 2;
|
|
public static final int MON_1 = 3;
|
|
public static final int MON_2 = 4;
|
|
public static final int MON_TAG = 5;
|
|
public static final int MON = 18;
|
|
public static final int DAY_1 = 6;
|
|
public static final int DAY_2 = 7;
|
|
public static final int HOUR_12_1 = 8;
|
|
public static final int HOUR_12_2 = 9;
|
|
public static final int HOUR_24_1 = 10;
|
|
public static final int HOUR_24_2 = 11;
|
|
public static final int MIN = 12;
|
|
public static final int AM_PM = 13;
|
|
public static final int SEC = 14;
|
|
public static final int ZONE_TAG = 15;
|
|
public static final int WEEK_1 = 16;
|
|
public static final int WEEK_2 = 17;
|
|
public static final int ZONE_OFFSET = 19;
|
|
public static final int WEEK_YEAR = 20;
|
|
private static String[] PATTERNS;
|
|
static HashMap cache;
|
|
static String defaultPattern;
|
|
static final String fallbackPattern = "DD-MMM-YY h:mm:ss a z";
|
|
public static final String TIME_FORMAT = "timeFormat";
|
|
int[] pattern;
|
|
|
|
public static String format(BAbsTime bAbsTime, String string, Context context) {
|
|
context = BFacets.make(context.getFacets(), BFacets.make(TIME_FORMAT, BString.make(string)));
|
|
return TimeFormat.format(bAbsTime, context);
|
|
}
|
|
|
|
public static String format(BAbsTime bAbsTime, String string) {
|
|
BFacets bFacets = BFacets.make(TIME_FORMAT, BString.make(string));
|
|
return TimeFormat.format(bAbsTime, (Context)bFacets);
|
|
}
|
|
|
|
public static String format(BAbsTime bAbsTime, Context context) {
|
|
bAbsTime = TimeFormat.toTimeZone(bAbsTime, context);
|
|
int n = TimeFormat.toShowMask(19, context);
|
|
n = TimeFormat.normalizeShowMask(n);
|
|
return TimeFormat.make(context).format(bAbsTime, n, context);
|
|
}
|
|
|
|
public static String formatTime(BAbsTime bAbsTime, Context context) {
|
|
bAbsTime = TimeFormat.toTimeZone(bAbsTime, context);
|
|
int n = TimeFormat.toShowMask(2, context);
|
|
n |= 2;
|
|
n &= 0xFFFFFFFE;
|
|
n = TimeFormat.normalizeShowMask(n);
|
|
return TimeFormat.make(context).format(bAbsTime, n, context);
|
|
}
|
|
|
|
public static String formatDate(BAbsTime bAbsTime, Context context) {
|
|
bAbsTime = TimeFormat.toTimeZone(bAbsTime, context);
|
|
int n = TimeFormat.toShowMask(1, context);
|
|
n |= 1;
|
|
n &= 0xFFFFFFFD;
|
|
n = TimeFormat.normalizeShowMask(n);
|
|
return TimeFormat.make(context).format(bAbsTime, n, context);
|
|
}
|
|
|
|
public static String format(BTime bTime, Context context) {
|
|
int n = TimeFormat.toShowMask(2, context);
|
|
n &= 0xFFFFFFFE;
|
|
n &= 0xFFFFFFEF;
|
|
n = TimeFormat.normalizeShowMask(n);
|
|
return TimeFormat.make(context).format(bTime, n, context);
|
|
}
|
|
|
|
public static int[] pattern(Context context) {
|
|
int n = TimeFormat.toShowMask(19, context);
|
|
return TimeFormat.make(context).pattern(n);
|
|
}
|
|
|
|
public static void setDefaultPattern(String string) {
|
|
if (string != null && (string = string.trim()).length() == 0) {
|
|
string = null;
|
|
}
|
|
defaultPattern = string;
|
|
}
|
|
|
|
private static final BAbsTime toTimeZone(BAbsTime bAbsTime, Context context) {
|
|
BTimeZone bTimeZone;
|
|
if (context != null && (bTimeZone = (BTimeZone)context.getFacet("TimeZone")) != null) {
|
|
return BAbsTime.make(bAbsTime, bTimeZone);
|
|
}
|
|
return bAbsTime;
|
|
}
|
|
|
|
static TimeFormat make(Context context) {
|
|
Object object;
|
|
String string = null;
|
|
if (context != null && (object = context.getFacet(TIME_FORMAT)) != null) {
|
|
string = object.toString();
|
|
}
|
|
if (string == null || string.length() == 0) {
|
|
string = defaultPattern;
|
|
}
|
|
if (string == null || string.length() == 0) {
|
|
string = Lexicon.make(Sys.getBajaModule(), context).get(TIME_FORMAT);
|
|
}
|
|
if (string == null || string.length() == 0) {
|
|
System.out.println("ERROR: Missing baja:timeFormat lexicon entry");
|
|
string = fallbackPattern;
|
|
}
|
|
if ((object = (TimeFormat)cache.get(string)) == null) {
|
|
object = new TimeFormat(string);
|
|
cache.put(string, object);
|
|
}
|
|
return object;
|
|
}
|
|
|
|
int toCode(int n, int n2) {
|
|
switch (n) {
|
|
case 89: {
|
|
int n3 = 0;
|
|
if (n2 <= 2) {
|
|
n3 = 1;
|
|
}
|
|
return 2 - n3;
|
|
}
|
|
case 77: {
|
|
switch (n2) {
|
|
case 1: {
|
|
return 3;
|
|
}
|
|
case 2: {
|
|
return 4;
|
|
}
|
|
case 3: {
|
|
return 5;
|
|
}
|
|
}
|
|
return 18;
|
|
}
|
|
case 68: {
|
|
int n4 = 0;
|
|
if (n2 == 1) {
|
|
n4 = 1;
|
|
}
|
|
return 7 - n4;
|
|
}
|
|
case 104: {
|
|
int n5 = 0;
|
|
if (n2 == 1) {
|
|
n5 = 1;
|
|
}
|
|
return 9 - n5;
|
|
}
|
|
case 72: {
|
|
int n6 = 0;
|
|
if (n2 == 1) {
|
|
n6 = 1;
|
|
}
|
|
return 11 - n6;
|
|
}
|
|
case 109: {
|
|
return 12;
|
|
}
|
|
case 115: {
|
|
return 14;
|
|
}
|
|
case 97: {
|
|
return 13;
|
|
}
|
|
case 122: {
|
|
return 15;
|
|
}
|
|
case 90: {
|
|
return 19;
|
|
}
|
|
case 87: {
|
|
int n7 = 0;
|
|
if (n2 == 1) {
|
|
n7 = 1;
|
|
}
|
|
return 17 - n7;
|
|
}
|
|
case 119: {
|
|
return 20;
|
|
}
|
|
}
|
|
return n;
|
|
}
|
|
|
|
int[] pattern(int n) {
|
|
int[] nArray = new int[this.pattern.length];
|
|
int n2 = 0;
|
|
int n3 = -1;
|
|
int n4 = 0;
|
|
int n5 = 0;
|
|
while (n5 < this.pattern.length) {
|
|
int n6 = this.pattern[n5];
|
|
if (n6 >= SHOW.length) {
|
|
n3 = n6;
|
|
} else if ((SHOW[n6] & n) == 0) {
|
|
n3 = -1;
|
|
} else {
|
|
if (++n4 > 1 && n3 != -1) {
|
|
nArray[n2++] = n3;
|
|
n3 = -1;
|
|
}
|
|
++n4;
|
|
nArray[n2++] = n6;
|
|
}
|
|
++n5;
|
|
}
|
|
int[] nArray2 = new int[n2];
|
|
System.arraycopy(nArray, 0, nArray2, 0, n2);
|
|
return nArray2;
|
|
}
|
|
|
|
String format(BTime bTime, int n, Context context) {
|
|
return this.format(null, 0, BMonth.january, 0, bTime.getHour(), bTime.getMinute(), bTime.getSecond(), bTime.getMillisecond(), BTimeZone.getLocal(), n, context);
|
|
}
|
|
|
|
String format(BAbsTime bAbsTime, int n, Context context) {
|
|
return this.format(bAbsTime, bAbsTime.getYear(), bAbsTime.getMonth(), bAbsTime.getDay(), bAbsTime.getHour(), bAbsTime.getMinute(), bAbsTime.getSecond(), bAbsTime.getMillisecond(), bAbsTime.getTimeZone(), n, context);
|
|
}
|
|
|
|
String format(BAbsTime bAbsTime, int n, BMonth bMonth, int n2, int n3, int n4, int n5, int n6, BTimeZone bTimeZone, int n7, Context context) {
|
|
int n8 = bMonth.getOrdinal() + 1;
|
|
int[] nArray = this.pattern;
|
|
int n9 = nArray.length;
|
|
StringBuffer stringBuffer = new StringBuffer(n9 * 4);
|
|
int n10 = -1;
|
|
int n11 = -1;
|
|
int n12 = 0;
|
|
int n13 = 0;
|
|
while (n13 < n9) {
|
|
int n14 = nArray[n13];
|
|
if (n14 >= SHOW.length) {
|
|
if (n10 == -1) {
|
|
n10 = n14;
|
|
} else if (n11 == -1) {
|
|
n11 = n14;
|
|
}
|
|
} else if ((SHOW[n14] & n7) == 0) {
|
|
n11 = -1;
|
|
n10 = -1;
|
|
} else {
|
|
if (++n12 > 1 && n10 != -1) {
|
|
stringBuffer.append((char)n10);
|
|
if (n11 != -1) {
|
|
stringBuffer.append((char)n11);
|
|
}
|
|
n11 = -1;
|
|
n10 = -1;
|
|
}
|
|
++n12;
|
|
switch (n14) {
|
|
case 1: {
|
|
TimeFormat.pad(stringBuffer, n % 100);
|
|
break;
|
|
}
|
|
case 2: {
|
|
stringBuffer.append(n);
|
|
break;
|
|
}
|
|
case 3: {
|
|
stringBuffer.append(n8);
|
|
break;
|
|
}
|
|
case 4: {
|
|
TimeFormat.pad(stringBuffer, n8);
|
|
break;
|
|
}
|
|
case 5: {
|
|
stringBuffer.append(bMonth.getShortDisplayTag(context));
|
|
break;
|
|
}
|
|
case 18: {
|
|
stringBuffer.append(bMonth.toString(context));
|
|
break;
|
|
}
|
|
case 6: {
|
|
stringBuffer.append(n2);
|
|
break;
|
|
}
|
|
case 7: {
|
|
TimeFormat.pad(stringBuffer, n2);
|
|
break;
|
|
}
|
|
case 8: {
|
|
if (n3 == 0) {
|
|
stringBuffer.append("12");
|
|
break;
|
|
}
|
|
stringBuffer.append(n3 > 12 ? n3 - 12 : n3);
|
|
break;
|
|
}
|
|
case 9: {
|
|
if (n3 == 0) {
|
|
stringBuffer.append("12");
|
|
break;
|
|
}
|
|
TimeFormat.pad(stringBuffer, n3 > 12 ? n3 - 12 : n3);
|
|
break;
|
|
}
|
|
case 10: {
|
|
stringBuffer.append(n3);
|
|
break;
|
|
}
|
|
case 11: {
|
|
TimeFormat.pad(stringBuffer, n3);
|
|
break;
|
|
}
|
|
case 12: {
|
|
TimeFormat.pad(stringBuffer, n4);
|
|
break;
|
|
}
|
|
case 13: {
|
|
stringBuffer.append(n3 < 12 ? "AM" : "PM");
|
|
break;
|
|
}
|
|
case 14: {
|
|
TimeFormat.pad(stringBuffer, n5);
|
|
if ((n7 & 8) == 0) break;
|
|
stringBuffer.append('.');
|
|
if (n6 < 10) {
|
|
stringBuffer.append('0');
|
|
}
|
|
if (n6 < 100) {
|
|
stringBuffer.append('0');
|
|
}
|
|
stringBuffer.append(n6);
|
|
break;
|
|
}
|
|
case 15: {
|
|
stringBuffer.append(bTimeZone.getShortDisplayName(bAbsTime, context));
|
|
break;
|
|
}
|
|
case 19: {
|
|
int n15 = bAbsTime != null ? bAbsTime.getTimeZoneOffset() : bTimeZone.getUtcOffset(BAbsTime.now().getMillis());
|
|
if (n15 == 0) {
|
|
stringBuffer.append('Z');
|
|
break;
|
|
}
|
|
int n16 = Math.abs(n15 / 3600000);
|
|
int n17 = Math.abs(n15 % 3600000 / 60000);
|
|
if (n15 < 0) {
|
|
stringBuffer.append('-');
|
|
} else {
|
|
stringBuffer.append('+');
|
|
}
|
|
if (n16 < 10) {
|
|
stringBuffer.append('0');
|
|
}
|
|
stringBuffer.append(n16);
|
|
stringBuffer.append(":");
|
|
if (n17 < 10) {
|
|
stringBuffer.append('0');
|
|
}
|
|
stringBuffer.append(n17);
|
|
break;
|
|
}
|
|
case 16: {
|
|
stringBuffer.append(bAbsTime.getWeekday().getShortDisplayTag(context));
|
|
break;
|
|
}
|
|
case 17: {
|
|
stringBuffer.append(bAbsTime.getWeekday().getDisplayTag(context));
|
|
break;
|
|
}
|
|
case 20: {
|
|
Calendar calendar = BAbsTime.makeCalendar(n, bMonth, n2, n3, n4, n5, n6, bTimeZone, context);
|
|
stringBuffer.append(calendar.get(3));
|
|
break;
|
|
}
|
|
}
|
|
n11 = -1;
|
|
n10 = -1;
|
|
}
|
|
++n13;
|
|
}
|
|
return stringBuffer.toString();
|
|
}
|
|
|
|
static void pad(StringBuffer stringBuffer, int n) {
|
|
if (n < 10) {
|
|
stringBuffer.append('0');
|
|
}
|
|
stringBuffer.append(n);
|
|
}
|
|
|
|
static int toShowMask(int n, Context context) {
|
|
if (context != null) {
|
|
BFacets bFacets = context.getFacets();
|
|
n = TimeFormat.mask(n, bFacets, "showDate", 1);
|
|
n = TimeFormat.mask(n, bFacets, "showTime", 2);
|
|
n = TimeFormat.mask(n, bFacets, "showSeconds", 4);
|
|
n = TimeFormat.mask(n, bFacets, "showMilliseconds", 8);
|
|
n = TimeFormat.mask(n, bFacets, "showTimeZone", 16);
|
|
}
|
|
return n;
|
|
}
|
|
|
|
static int mask(int n, BFacets bFacets, String string, int n2) {
|
|
BObject bObject = bFacets.getFacet(string);
|
|
if (bObject instanceof BBoolean) {
|
|
n = ((BBoolean)bObject).getBoolean() ? (n |= n2) : (n &= ~n2);
|
|
}
|
|
return n;
|
|
}
|
|
|
|
static int normalizeShowMask(int n) {
|
|
if ((n & 2) == 0) {
|
|
n &= 0xFFFFFFE3;
|
|
}
|
|
return n;
|
|
}
|
|
|
|
public static String patternToString(int n) {
|
|
if (n < PATTERNS.length) {
|
|
return PATTERNS[n];
|
|
}
|
|
return "" + (char)n;
|
|
}
|
|
|
|
public static String patternToString(int[] nArray) {
|
|
StringBuffer stringBuffer = new StringBuffer();
|
|
int n = 0;
|
|
while (n < nArray.length) {
|
|
stringBuffer.append(TimeFormat.patternToString(nArray[n]));
|
|
++n;
|
|
}
|
|
return stringBuffer.toString();
|
|
}
|
|
|
|
TimeFormat(String string) {
|
|
if (string == null) {
|
|
string = fallbackPattern;
|
|
}
|
|
int n = string.length();
|
|
int[] nArray = new int[n];
|
|
int n2 = 0;
|
|
char c = string.charAt(0);
|
|
int n3 = 1;
|
|
int n4 = 1;
|
|
while (n4 < n) {
|
|
char c2 = string.charAt(n4);
|
|
if (c == c2) {
|
|
++n3;
|
|
} else {
|
|
nArray[n2++] = this.toCode(c, n3);
|
|
c = c2;
|
|
n3 = 1;
|
|
}
|
|
++n4;
|
|
}
|
|
nArray[n2++] = this.toCode(c, n3);
|
|
this.pattern = new int[n2];
|
|
System.arraycopy(nArray, 0, this.pattern, 0, n2);
|
|
}
|
|
|
|
static {
|
|
int[] nArray = new int[21];
|
|
nArray[1] = 1;
|
|
nArray[2] = 1;
|
|
nArray[3] = 1;
|
|
nArray[4] = 1;
|
|
nArray[5] = 1;
|
|
nArray[6] = 1;
|
|
nArray[7] = 1;
|
|
nArray[8] = 2;
|
|
nArray[9] = 2;
|
|
nArray[10] = 2;
|
|
nArray[11] = 2;
|
|
nArray[12] = 2;
|
|
nArray[13] = 2;
|
|
nArray[14] = 12;
|
|
nArray[15] = 16;
|
|
nArray[16] = 1;
|
|
nArray[17] = 1;
|
|
nArray[18] = 1;
|
|
nArray[19] = 16;
|
|
nArray[20] = 1;
|
|
SHOW = nArray;
|
|
PATTERNS = new String[]{"?", "YY", "YYYY", "M", "MM", "MMM", "D", "DD", "h", "hh", "H", "HH", "mm", "a", "ss", "z", "W", "WW", "MMMM", "Z", "w"};
|
|
cache = new HashMap();
|
|
defaultPattern = null;
|
|
}
|
|
}
|
|
|