use of angularBeans.events.Callback in project AngularBeans by bessemHmidi.
the class ModuleGenerator method generateBean.
/**
* this method concern is the generation of the AngularJS service from the @AngularBean CDI bean.
*
* @param bean
* the bean wrapper for an @AngularBean CDI bean.
* @return a StringBuffer containing the generated angular service code.
*/
public StringBuffer generateBean(NGBean bean) {
Object reference = locator.lookup(bean.getName(), sessionID);
StringBuffer buffer = new StringBuffer();
Class<? extends Object> clazz = bean.getTargetClass();
Method[] methods = bean.getMethods();
buffer.append(";app.factory('" + bean.getName() + "',function " + bean.getName() + "(");
// writer.write("['$rootScope','$scope','$http','$location','logger','responseHandler','realtimeManager'',function");
buffer.append("$rootScope, $http, $location,logger,responseHandler,$q");
buffer.append(",realtimeManager");
buffer.append("){\n");
// writer.write("var deffered = $q.defer();");
// ,scopes:[]};");
buffer.append("var " + bean.getName() + "={serviceID:'" + bean.getName() + "'};");
buffer.append(// + contextPath
"\nvar rpath=$rootScope.baseUrl+'" + "http/invoke/service/';\n");
for (Method m : bean.getMethods()) {
if (m.isAnnotationPresent(Eval.class)) {
Callback callback = m.getAnnotation(Eval.class).value();
try {
String execution = (String) m.invoke(reference);
String js = "";
if (callback.equals(BEFORE_SESSION_READY)) {
js = execution;
}
if (callback.equals(AFTER_SESSION_READY)) {
js = "setTimeout(listen,500);" + "function listen(){" + " if(realtimeManager.ready){" + execution + " }" + " else" + " setTimeout(listen,500);" + "}";
}
buffer.append(js);
} catch (ClassCastException e) {
throw new RuntimeException("for bean name: " + bean.getName() + " --> an @Eval bloc must return a String");
} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
e.printStackTrace();
}
}
}
for (Method get : bean.getters()) {
Object result = null;
String getter = get.getName();
String modelName = CommonUtils.obtainFieldNameFromAccessor(getter);
if (get.getReturnType().equals(LobWrapper.class)) {
String uid = String.valueOf(UUID.randomUUID());
cache.getCache().put(uid, new Call(reference, get));
result = contextPath + "lob/" + uid;
buffer.append(bean.getName() + "." + modelName + "='" + result + "';");
continue;
}
validationAdapter.processBeanValidationParsing(get);
Method m;
try {
m = bean.getTargetClass().getMethod((getter));
result = m.invoke(reference);
if ((result == null && (m.getReturnType().equals(String.class))))
result = "";
if (result == null)
continue;
Class<? extends Object> resultClazz = result.getClass();
if (!resultClazz.isPrimitive()) {
result = util.getJson(result);
}
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
buffer.append(bean.getName() + "." + modelName + "=" + result + ";");
}
for (Method m : bean.getMethods()) {
if (m.isAnnotationPresent(FileUpload.class)) {
String uploadPath = m.getAnnotation(FileUpload.class).path();
Call call = new Call(reference, m);
uploadHandler.getUploadsActions().put(uploadPath, call);
}
}
buffer.append(generateStaticPart(bean).toString());
buffer.append(");\n");
return buffer;
}
Aggregations