/*
* Copyright 2013 Daniel Kurka
*
* 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.googlecode.gwtphonegap.client.globalization.js;
import com.google.gwt.core.client.JsDate;
import com.googlecode.gwtphonegap.client.globalization.CNumberPattern;
import com.googlecode.gwtphonegap.client.globalization.CurrencyPattern;
import com.googlecode.gwtphonegap.client.globalization.DateNameOptions;
import com.googlecode.gwtphonegap.client.globalization.DateOptions;
import com.googlecode.gwtphonegap.client.globalization.DatePattern;
import com.googlecode.gwtphonegap.client.globalization.DayLightSavings;
import com.googlecode.gwtphonegap.client.globalization.Globalization;
import com.googlecode.gwtphonegap.client.globalization.GlobalizationArrayValue;
import com.googlecode.gwtphonegap.client.globalization.GlobalizationCallback;
import com.googlecode.gwtphonegap.client.globalization.GlobalizationDoubleValue;
import com.googlecode.gwtphonegap.client.globalization.GlobalizationError;
import com.googlecode.gwtphonegap.client.globalization.GlobalizationIntValue;
import com.googlecode.gwtphonegap.client.globalization.GlobalizationStringValue;
import com.googlecode.gwtphonegap.client.globalization.NumberOptions;
import java.util.Date;
public class GlobalizationJsImpl implements Globalization {
/*
* (non-Javadoc)
*
* @see
* com.googlecode.gwtphonegap.client.globalization.Globalization#getPreferredLanguage(com.googlecode
* .gwtphonegap.client.globalization.GlobalizationCallback)
*/
@Override
public native void getPreferredLanguage(
GlobalizationCallback<GlobalizationStringValue, GlobalizationError> callback)/*-{
var win = function(language) {
@com.googlecode.gwtphonegap.client.globalization.js.GlobalizationJsImpl::getGlobalizationStringSuccess(Lcom/googlecode/gwtphonegap/client/globalization/GlobalizationCallback;Lcom/googlecode/gwtphonegap/client/globalization/js/GlobalizationStringValueJsImpl;)(callback,language);
};
var fail = function(error) {
@com.googlecode.gwtphonegap.client.globalization.js.GlobalizationJsImpl::failureCallback(Lcom/googlecode/gwtphonegap/client/globalization/GlobalizationCallback;Lcom/googlecode/gwtphonegap/client/globalization/js/GlobalizationErrorJsImpl;)(callback, error);
};
$wnd.navigator.globalization.getPreferredLanguage($entry(win),
$entry(fail));
}-*/;
/*
* (non-Javadoc)
*
* @see
* com.googlecode.gwtphonegap.client.globalization.Globalization#getLocaleName(com.googlecode.
* gwtphonegap.client.globalization.GlobalizationCallback)
*/
@Override
public native void getLocaleName(GlobalizationCallback<GlobalizationStringValue, GlobalizationError> callback) /*-{
var win = function(locale) {
@com.googlecode.gwtphonegap.client.globalization.js.GlobalizationJsImpl::getGlobalizationStringSuccess(Lcom/googlecode/gwtphonegap/client/globalization/GlobalizationCallback;Lcom/googlecode/gwtphonegap/client/globalization/js/GlobalizationStringValueJsImpl;)(callback,locale);
};
var fail = function(error) {
@com.googlecode.gwtphonegap.client.globalization.js.GlobalizationJsImpl::failureCallback(Lcom/googlecode/gwtphonegap/client/globalization/GlobalizationCallback;Lcom/googlecode/gwtphonegap/client/globalization/js/GlobalizationErrorJsImpl;)(callback, error);
};
$wnd.navigator.globalization.getLocaleName($entry(win), $entry(fail));
}-*/;
/*
* (non-Javadoc)
*
* @see
* com.googlecode.gwtphonegap.client.globalization.Globalization#convertDateToString(java.util
* .Date, com.googlecode.gwtphonegap.client.globalization.GlobalizationCallback)
*/
@Override
public void convertDateToString(Date date,
GlobalizationCallback<GlobalizationStringValue, GlobalizationError> callback) {
convertDateToString(date, new DateOptions(DateOptions.LENGTH_SHORT,
DateOptions.SELECTOR_DATE_AND_TIME), callback);
}
/*
* (non-Javadoc)
*
* @see
* com.googlecode.gwtphonegap.client.globalization.Globalization#convertDateToString(java.util
* .Date, com.googlecode.gwtphonegap.client.globalization.DateOptions,
* com.googlecode.gwtphonegap.client.globalization.GlobalizationCallback)
*/
@Override
public void convertDateToString(Date date, DateOptions options,
GlobalizationCallback<GlobalizationStringValue, GlobalizationError> callback) {
if(options == null){
throw new IllegalArgumentException("options can not be null");
}
JsDate jsDate = JsDate.create(date.getTime());
convertDateToString0(jsDate, options.getFormatLength(), options.getSelector(), callback);
}
private native void convertDateToString0 (JsDate date, String formatLength, String selector,
GlobalizationCallback<GlobalizationStringValue, GlobalizationError> callback)/*-{
var win = function(dateValue) {
@com.googlecode.gwtphonegap.client.globalization.js.GlobalizationJsImpl::getGlobalizationStringSuccess(Lcom/googlecode/gwtphonegap/client/globalization/GlobalizationCallback;Lcom/googlecode/gwtphonegap/client/globalization/js/GlobalizationStringValueJsImpl;)(callback,dateValue);
};
var fail = function(error) {
@com.googlecode.gwtphonegap.client.globalization.js.GlobalizationJsImpl::failureCallback(Lcom/googlecode/gwtphonegap/client/globalization/GlobalizationCallback;Lcom/googlecode/gwtphonegap/client/globalization/js/GlobalizationErrorJsImpl;)(callback, error);
};
$wnd.navigator.globalization.dateToString(date, $entry(win),
$entry(fail), {
formatLength : formatLength,
selector : selector
});
}-*/;
@Override
public void convertStringToDate(String dateString,
GlobalizationCallback<Date, GlobalizationError> callback) {
convertStringToDate(dateString, new DateOptions(DateOptions.LENGTH_SHORT,
DateOptions.SELECTOR_DATE_AND_TIME), callback);
}
@Override
public void convertStringToDate(String dateString, DateOptions options,
GlobalizationCallback<Date, GlobalizationError> callback) {
if (options == null) {
throw new IllegalArgumentException("options can not be null");
}
convertStringToDate0(dateString, options.getFormatLength(), options.getSelector(), callback);
}
private static void onConvertStringToDateSuccess(DateFieldsJsImpl jsDate,
GlobalizationCallback<Date, GlobalizationError> callback) {
@SuppressWarnings("deprecation")
Date d = new Date(jsDate.getYear(), jsDate.getMonth(),jsDate.getDay(), jsDate.getHour(),jsDate.getMinute(), jsDate.getSecond());
//TODO: Ideally the below lines should be uncommented to add the ms to
//give the exact output. But these lines are throwing some errors.
callback.onSuccess(d);
}
private native void convertStringToDate0(String dateString, String formatLength, String selector,
GlobalizationCallback<Date, GlobalizationError> callback) /*-{
var win = function(jsDate) {
@com.googlecode.gwtphonegap.client.globalization.js.GlobalizationJsImpl::onConvertStringToDateSuccess(Lcom/googlecode/gwtphonegap/client/globalization/js/DateFieldsJsImpl;Lcom/googlecode/gwtphonegap/client/globalization/GlobalizationCallback;)(jsDate, callback);
};
var fail = function(error) {
@com.googlecode.gwtphonegap.client.globalization.js.GlobalizationJsImpl::failureCallback(Lcom/googlecode/gwtphonegap/client/globalization/GlobalizationCallback;Lcom/googlecode/gwtphonegap/client/globalization/js/GlobalizationErrorJsImpl;)(callback, error);
};
$wnd.navigator.globalization.stringToDate(dateString, $entry(win),
$entry(fail), {
formatLength : formatLength,
selector : selector
});
}-*/;
/*
* (non-Javadoc)
*
* @see
* com.googlecode.gwtphonegap.client.globalization.Globalization#getDatePattern(com.googlecode
* .gwtphonegap.client.globalization.GlobalizationCallback)
*/
@Override
public void getDatePattern(GlobalizationCallback<DatePattern, GlobalizationError> callback) {
getDatePattern(new DateOptions(DateOptions.LENGTH_SHORT, DateOptions.SELECTOR_DATE_AND_TIME),
callback);
}
/*
* (non-Javadoc)
*
* @see
* com.googlecode.gwtphonegap.client.globalization.Globalization#getDatePattern(com.googlecode
* .gwtphonegap.client.globalization.DateOptions,
* com.googlecode.gwtphonegap.client.globalization.GlobalizationCallback)
*/
@Override
public void getDatePattern(DateOptions options,
GlobalizationCallback<DatePattern, GlobalizationError> callback) {
if (options == null)
throw new IllegalArgumentException();
getDatePattern0(options.getFormatLength(), options.getSelector(), callback);
}
private static void onGetDatePatternSuccess(DatePatternJsImpl datePattern,
GlobalizationCallback<DatePattern, ?> callback) {
callback.onSuccess(datePattern);
}
private native void getDatePattern0(String formatLength, String selector,
GlobalizationCallback<DatePattern, GlobalizationError> callback) /*-{
var win = function(date) {
@com.googlecode.gwtphonegap.client.globalization.js.GlobalizationJsImpl::onGetDatePatternSuccess(Lcom/googlecode/gwtphonegap/client/globalization/js/DatePatternJsImpl;Lcom/googlecode/gwtphonegap/client/globalization/GlobalizationCallback;)(date, callback);
};
var fail = function(error) {
@com.googlecode.gwtphonegap.client.globalization.js.GlobalizationJsImpl::failureCallback(Lcom/googlecode/gwtphonegap/client/globalization/GlobalizationCallback;Lcom/googlecode/gwtphonegap/client/globalization/js/GlobalizationErrorJsImpl;)(callback, error);
};
$wnd.navigator.globalization.getDatePattern($entry(win), $entry(fail),
{
formatLength : formatLength,
selector : selector
});
}-*/;
/*
* (non-Javadoc)
*
* @see com.googlecode.gwtphonegap.client.globalization.Globalization#getDateNames(com.googlecode.
* gwtphonegap.client.globalization.GlobalizationCallback)
*/
@Override
public void getDateNames(GlobalizationCallback<GlobalizationArrayValue, GlobalizationError> callback) {
getDateNames(new DateNameOptions(DateNameOptions.TYPE_WIDE, DateNameOptions.ITEM_MONTHS),
callback);
}
/*
* (non-Javadoc)
*
* @see com.googlecode.gwtphonegap.client.globalization.Globalization#getDateNames(com.googlecode.
* gwtphonegap.client.globalization.js.DateNameOptions,
* com.googlecode.gwtphonegap.client.globalization.GlobalizationCallback)
*/
@Override
public void getDateNames(DateNameOptions options,
GlobalizationCallback<GlobalizationArrayValue, GlobalizationError> callback) {
if (options == null)
throw new IllegalArgumentException();
getDateNames0(options.getType(), options.getItem(), callback);
}
private static void onGetDateNames(GlobalizationArrayValueJsImpl arrayJSImpl,
GlobalizationCallback<GlobalizationArrayValue, GlobalizationError> callback) {
callback.onSuccess(arrayJSImpl);
}
private native void getDateNames0(String type, String item,
GlobalizationCallback<GlobalizationArrayValue, GlobalizationError> callback) /*-{
var win = function(names) {
@com.googlecode.gwtphonegap.client.globalization.js.GlobalizationJsImpl::onGetDateNames(Lcom/googlecode/gwtphonegap/client/globalization/js/GlobalizationArrayValueJsImpl;Lcom/googlecode/gwtphonegap/client/globalization/GlobalizationCallback;)(names,callback);
};
var fail = function(error) {
@com.googlecode.gwtphonegap.client.globalization.js.GlobalizationJsImpl::failureCallback(Lcom/googlecode/gwtphonegap/client/globalization/GlobalizationCallback;Lcom/googlecode/gwtphonegap/client/globalization/js/GlobalizationErrorJsImpl;)(callback, error);
};
$wnd.navigator.globalization.getDateNames($entry(win), $entry(fail), {
type : type,
item : item
});
}-*/;
@Override
public void isDayLightSavingsTime(Date date,
GlobalizationCallback<DayLightSavings, GlobalizationError> callback) {
JsDate jsDate = JsDate.create(date.getTime());
isDayLightSavingsTime0(jsDate, callback);
}
private static void onIsDayLightSavingsTime(DayLightSavingsJsImpl dayLightSavings,
GlobalizationCallback<DayLightSavings, GlobalizationError> callback) {
callback.onSuccess(dayLightSavings);
}
private native void isDayLightSavingsTime0(JsDate jsDate,
GlobalizationCallback<DayLightSavings, GlobalizationError> callback) /*-{
var win = function(is) {
@com.googlecode.gwtphonegap.client.globalization.js.GlobalizationJsImpl::onIsDayLightSavingsTime(Lcom/googlecode/gwtphonegap/client/globalization/js/DayLightSavingsJsImpl;Lcom/googlecode/gwtphonegap/client/globalization/GlobalizationCallback;)(is,callback);
};
var fail = function(error) {
@com.googlecode.gwtphonegap.client.globalization.js.GlobalizationJsImpl::failureCallback(Lcom/googlecode/gwtphonegap/client/globalization/GlobalizationCallback;Lcom/googlecode/gwtphonegap/client/globalization/js/GlobalizationErrorJsImpl;)(callback, error);
};
$wnd.navigator.globalization.isDayLightSavingsTime(jsDate, $entry(win),
$entry(fail));
}-*/;
@Override
public native void getFirstDayOfWeek(GlobalizationCallback<GlobalizationIntValue, GlobalizationError> callback) /*-{
var win = function(success) {
@com.googlecode.gwtphonegap.client.globalization.js.GlobalizationJsImpl::getGlobalizationIntSuccess(Lcom/googlecode/gwtphonegap/client/globalization/GlobalizationCallback;Lcom/googlecode/gwtphonegap/client/globalization/js/GlobalizationIntValueJsImpl;)(callback,success);
};
var fail = function(error) {
@com.googlecode.gwtphonegap.client.globalization.js.GlobalizationJsImpl::failureCallback(Lcom/googlecode/gwtphonegap/client/globalization/GlobalizationCallback;Lcom/googlecode/gwtphonegap/client/globalization/js/GlobalizationErrorJsImpl;)(callback, error);
};
$wnd.navigator.globalization.getFirstDayOfWeek($entry(win),
$entry(fail));
}-*/;
@Override
public void numberToString(double number, NumberOptions options,
GlobalizationCallback<GlobalizationStringValue, GlobalizationError> callback) {
if (options == null) {
throw new IllegalArgumentException();
}
numberToString0(number, options.getType(), callback);
}
private native void numberToString0(double number, String type,
GlobalizationCallback<GlobalizationStringValue, GlobalizationError> callback) /*-{
var win = function(success) {
@com.googlecode.gwtphonegap.client.globalization.js.GlobalizationJsImpl::getGlobalizationStringSuccess(Lcom/googlecode/gwtphonegap/client/globalization/GlobalizationCallback;Lcom/googlecode/gwtphonegap/client/globalization/js/GlobalizationStringValueJsImpl;)(callback,success);
};
var fail = function(error) {
@com.googlecode.gwtphonegap.client.globalization.js.GlobalizationJsImpl::failureCallback(Lcom/googlecode/gwtphonegap/client/globalization/GlobalizationCallback;Lcom/googlecode/gwtphonegap/client/globalization/js/GlobalizationErrorJsImpl;)(callback, error);
};
$wnd.navigator.globalization.numberToString(number, $entry(win),
$entry(fail), {
type : type
});
}-*/;
@Override
public void numberToString(double number,
GlobalizationCallback<GlobalizationStringValue, GlobalizationError> callback) {
numberToString(number, new NumberOptions(NumberOptions.DECIMAL), callback);
}
@Override
public void stringToNumber(String stringToFormat, NumberOptions options,
GlobalizationCallback<GlobalizationDoubleValue, GlobalizationError> callback) {
if (options == null) {
throw new IllegalArgumentException();
}
stringToNumber0(stringToFormat, options.getType(), callback);
}
private native void stringToNumber0(String stringToFormat, String type,
GlobalizationCallback<GlobalizationDoubleValue, GlobalizationError> callback) /*-{
var win = function(success) {
@com.googlecode.gwtphonegap.client.globalization.js.GlobalizationJsImpl::getGlobalizationDoubleSuccess(Lcom/googlecode/gwtphonegap/client/globalization/GlobalizationCallback;Lcom/googlecode/gwtphonegap/client/globalization/js/GlobalizationDoubleValueJsImpl;)(callback,success);
};
var fail = function(error) {
@com.googlecode.gwtphonegap.client.globalization.js.GlobalizationJsImpl::failureCallback(Lcom/googlecode/gwtphonegap/client/globalization/GlobalizationCallback;Lcom/googlecode/gwtphonegap/client/globalization/js/GlobalizationErrorJsImpl;)(callback, error);
};
$wnd.navigator.globalization.stringToNumber(stringToFormat,
$entry(win), $entry(fail), {
type : type
});
}-*/;
@Override
public void stringToNumber(String stringToFormat,
GlobalizationCallback<GlobalizationDoubleValue, GlobalizationError> callback) {
stringToNumber(stringToFormat, new NumberOptions(NumberOptions.DECIMAL), callback);
}
@Override
public void getNumberPattern(NumberOptions options,
GlobalizationCallback<CNumberPattern, GlobalizationError> callback) {
if (options == null) {
throw new IllegalArgumentException();
}
getNumberPattern(options.getType(), callback);
}
private static void onGetNumberPattern(CNumberPatternJsImpl numberPattern,
GlobalizationCallback<CNumberPattern, GlobalizationError> callback) {
callback.onSuccess(numberPattern);
}
private native void getNumberPattern(String type,
GlobalizationCallback<CNumberPattern, GlobalizationError> callback) /*-{
var win = function(pattern) {
@com.googlecode.gwtphonegap.client.globalization.js.GlobalizationJsImpl::onGetNumberPattern(Lcom/googlecode/gwtphonegap/client/globalization/js/CNumberPatternJsImpl;Lcom/googlecode/gwtphonegap/client/globalization/GlobalizationCallback;)(pattern, callback);
};
var fail = function(error) {
@com.googlecode.gwtphonegap.client.globalization.js.GlobalizationJsImpl::failureCallback(Lcom/googlecode/gwtphonegap/client/globalization/GlobalizationCallback;Lcom/googlecode/gwtphonegap/client/globalization/js/GlobalizationErrorJsImpl;)(callback, error);
};
$wnd.navigator.globalization.getNumberPattern($entry(win),
$entry(fail), {
type : type
});
}-*/;
@Override
public void getNumberPattern(GlobalizationCallback<CNumberPattern, GlobalizationError> callback) {
getNumberPattern(new NumberOptions(NumberOptions.DECIMAL), callback);
}
@Override
public native void getCurrencyPattern(String currencyCode,
GlobalizationCallback<CurrencyPattern, GlobalizationError> callback) /*-{
var win = function(pattern) {
@com.googlecode.gwtphonegap.client.globalization.js.GlobalizationJsImpl::onGetCurrencyPattern(Lcom/googlecode/gwtphonegap/client/globalization/js/CurrencyPatternJsImpl;Lcom/googlecode/gwtphonegap/client/globalization/GlobalizationCallback;)(pattern,callback);
};
var fail = function(error) {
@com.googlecode.gwtphonegap.client.globalization.js.GlobalizationJsImpl::failureCallback(Lcom/googlecode/gwtphonegap/client/globalization/GlobalizationCallback;Lcom/googlecode/gwtphonegap/client/globalization/js/GlobalizationErrorJsImpl;)(callback, error);
};
$wnd.navigator.globalization.getCurrencyPattern(currencyCode,
$entry(win), $entry(fail));
}-*/;
private static void onGetCurrencyPattern(CurrencyPatternJsImpl currencyPattern,
GlobalizationCallback<CurrencyPattern, GlobalizationError> callback) {
callback.onSuccess(currencyPattern);
}
private static void getGlobalizationStringSuccess(
GlobalizationCallback<GlobalizationStringValue, GlobalizationError> callback, GlobalizationStringValueJsImpl locale) {
callback.onSuccess(locale);
}
private static void getGlobalizationIntSuccess(
GlobalizationCallback<GlobalizationIntValue, GlobalizationError> callback, GlobalizationIntValueJsImpl locale) {
callback.onSuccess(locale);
}
private static void getGlobalizationDoubleSuccess(
GlobalizationCallback<GlobalizationDoubleValue, GlobalizationError> callback, GlobalizationDoubleValueJsImpl locale) {
callback.onSuccess(locale);
}
private static void failureCallback(GlobalizationCallback<?, GlobalizationError> callback,
GlobalizationErrorJsImpl error) {
callback.onFailure(error);
}
}