package xapi.dev;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import xapi.dev.gwtc.api.GwtcService;
import xapi.gwtc.api.DefaultValue;
import xapi.gwtc.api.Gwtc;
import xapi.inject.X_Inject;
import xapi.log.X_Log;
public class X_Gwtc {
public static void compile(String entryPoint, Gwtc ... settings) {
final GwtcService service = X_Inject.instance(GwtcService.class);
try {
service.addClass(Thread.currentThread().getContextClassLoader().loadClass(entryPoint));
} catch (ClassNotFoundException e) {
X_Log.error(X_Gwtc.class, "Could not find class",entryPoint,"from",Thread.currentThread().getContextClassLoader(), e);
}
}
public static GwtcService getServiceFor(Method method) {
final GwtcService service = X_Inject.instance(GwtcService.class);
if (method != null) {
service.addMethod(method);
}
return service;
}
public static GwtcService getServiceFor(Class<?> clazz) {
final GwtcService service = X_Inject.instance(GwtcService.class);
if (clazz != null) {
service.addClass(clazz);
}
return service;
}
public static GwtcService getServiceFor(Package pkg, boolean recursive) {
final GwtcService service = X_Inject.instance(GwtcService.class);
if (pkg != null) {
service.addPackage(pkg, recursive);
}
return service;
}
public static DefaultValue getDefaultValue(Class<?> param, Annotation[] annos) {
for (Annotation anno : annos) {
if (anno.annotationType().equals(DefaultValue.class)) {
return (DefaultValue) anno;
}
}
if (param.isPrimitive()) {
if (param == char.class) {
return DefaultValue.Defaults.DEFAULT_CHAR;
} else if (param == long.class) {
return DefaultValue.Defaults.DEFAULT_LONG;
} else if (param == float.class) {
return DefaultValue.Defaults.DEFAULT_FLOAT;
} else if (param == double.class) {
return DefaultValue.Defaults.DEFAULT_DOUBLE;
} else if (param == boolean.class) {
return DefaultValue.Defaults.DEFAULT_BOOLEAN;
} else {
return DefaultValue.Defaults.DEFAULT_INT;
}
} else if (param == String.class) {
return DefaultValue.Defaults.DEFAULT_STRING;
} else if (param.isArray()){
return DefaultValue.Defaults.DEFAULT_OBJECT;
} else {
DefaultValue value = param.getAnnotation(DefaultValue.class);
if (value == null) {
return DefaultValue.Defaults.DEFAULT_OBJECT;
} else {
return value;
}
}
}
}