package com.eas.core;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Logger;
import com.google.gwt.core.client.JavaScriptObject;
public class Predefine {
private static JavaScriptObject boxing;
private static JavaScriptObject logger;
public static Logger platypusApplicationLogger = Logger.getLogger("platypusApplication");
protected static Map<String, JavaScriptObject> defined = new HashMap<>();
public static boolean isNumber(Object aValue) {
return aValue instanceof Number;
}
public static boolean isBoolean(Object aValue) {
return aValue instanceof Boolean;
}
public static Map<String, JavaScriptObject> getDefined() {
return defined;
}
public static native JavaScriptObject prerequire(String aName)/*-{
var defined = @com.eas.core.Predefine::defined;
return defined.@java.util.Map::get(Ljava/lang/Object;)(aName);
}-*/;
public static native void predefine(JavaScriptObject aDeps, String aName, JavaScriptObject aDefiner)/*-{
var defined = @com.eas.core.Predefine::defined;
var resolved = [];
for (var d = 0; d < aDeps.length; d++) {
var module = defined.@java.util.Map::get(Ljava/lang/Object;)(aDeps[d]);
resolved.push(module);
}
var module = aDefiner.apply(null, resolved);
defined.@java.util.Map::put(Ljava/lang/Object;Ljava/lang/Object;)(aName, module);
}-*/;
public native static void init()/*-{
function predefine(aDeps, aName, aDefiner) {
@com.eas.core.Predefine::predefine(Lcom/google/gwt/core/client/JavaScriptObject;Ljava/lang/String;Lcom/google/gwt/core/client/JavaScriptObject;)(aDeps, aName, aDefiner);
}
predefine([], 'boxing', function() {
function boxAsJs(aValue) {
if (aValue == null)
return null;
else if (@com.eas.core.Predefine::isNumber(Ljava/lang/Object;)(aValue))
return aValue.@java.lang.Number::doubleValue()();
else if (@com.eas.core.Predefine::isBoolean(Ljava/lang/Object;)(aValue))
return aValue.@java.lang.Boolean::booleanValue()();
else
// dates, strings, complex java objects handled in Utils.toJs()
return aValue;
}
function boxAsJava(aValue) {
var valueType = typeof (aValue);
if (valueType == "string")
return aValue;
else if (valueType == "number")
return @java.lang.Double::new(D)(aValue);
else if (valueType == "boolean")
return @java.lang.Boolean::new(Z)(aValue);
else
// dates, strings, complex js objects handled in Utils.toJava()
return aValue;
}
var module = {};
Object.defineProperty(module, 'boxAsJs', {
enumerable : true,
value : boxAsJs
});
Object.defineProperty(module, 'boxAsJava', {
enumerable : true,
value : boxAsJava
});
@com.eas.core.Predefine::boxing = module;
return module;
});
predefine([], 'logger', function() {
var module = {};
var nativeLogger = @com.eas.core.Predefine::platypusApplicationLogger;
function severe(aMessage) {
nativeLogger.@java.util.logging.Logger::severe(Ljava/lang/String;)(aMessage!=null?""+aMessage:null);
}
function warning(aMessage) {
nativeLogger.@java.util.logging.Logger::warning(Ljava/lang/String;)(aMessage!=null?""+aMessage:null);
}
function info(aMessage) {
nativeLogger.@java.util.logging.Logger::info(Ljava/lang/String;)(aMessage!=null?""+aMessage:null);
}
function fine(aMessage) {
nativeLogger.@java.util.logging.Logger::fine(Ljava/lang/String;)(aMessage!=null?""+aMessage:null);
}
function finer(aMessage) {
nativeLogger.@java.util.logging.Logger::finer(Ljava/lang/String;)(aMessage!=null?""+aMessage:null);
}
function finest(aMessage) {
nativeLogger.@java.util.logging.Logger::finest(Ljava/lang/String;)(aMessage!=null?""+aMessage:null);
}
Object.defineProperty(module, 'severe', {
enumerable : true,
value : severe
});
Object.defineProperty(module, 'warning', {
enumerable : true,
value : warning
});
Object.defineProperty(module, 'info', {
enumerable : true,
value : info
});
Object.defineProperty(module, 'fine', {
enumerable : true,
value : fine
});
Object.defineProperty(module, 'finer', {
enumerable : true,
value : finer
});
Object.defineProperty(module, 'finest', {
enumerable : true,
value : finest
});
@com.eas.core.Predefine::logger = module;
return module;
});
}-*/;
}