use of angularBeans.api.NGReturn in project AngularBeans by bessemHmidi.
the class InvocationHandler method genericInvoke.
private void genericInvoke(Object service, String methodName, JsonObject params, Map<String, Object> returns, long reqID, String UID, HttpServletRequest request) throws SecurityException, ClassNotFoundException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException {
Object mainReturn = null;
Method m = null;
JsonElement argsElem = params.get("args");
if (reqID > 0) {
returns.put("reqId", reqID);
}
if (argsElem != null) {
JsonArray args = params.get("args").getAsJsonArray();
m = CommonUtils.getMethod(service.getClass(), methodName, args.size());
Pair<Boolean, Map<Integer, String>> ngCast = CommonUtils.getParamCastMap(m);
Type[] parameters = m.getGenericParameterTypes();
if (parameters.length == args.size()) {
List<Object> argsValues = new ArrayList<>();
for (int i = 0; i < parameters.length; i++) {
JsonElement element = args.get(i);
Type type = null;
if (ngCast != null) {
type = CommonUtils.getParamType(service, ngCast.getValue().get(i), ngCast.getKey());
}
if (element.isJsonPrimitive()) {
Class<?> clazz = null;
String typeString = ((parameters[i]).toString());
if (typeString.startsWith("class")) {
clazz = Class.forName(typeString.substring(6));
if (clazz.equals(Object.class)) {
clazz = CommonUtils.getPrimitiveClass(element);
}
} else {
clazz = builtInMap.get(typeString);
}
String val = element.getAsString();
if (type == null) {
argsValues.add(CommonUtils.convertFromString(val, clazz));
} else {
argsValues.add(util.deserialise(type, element));
}
} else if (element.isJsonArray()) {
JsonArray arr = element.getAsJsonArray();
if (type == null) {
argsValues.add(util.deserialise(parameters[i], arr));
} else {
argsValues.add(util.deserialise(type, arr));
}
} else {
if (type == null) {
argsValues.add(util.deserialise(parameters[i], element));
} else {
argsValues.add(util.deserialise(type, element));
}
}
}
if (!CommonUtils.isGetter(m)) {
update(service, params);
}
try {
mainReturn = m.invoke(service, argsValues.toArray());
} catch (Exception e) {
handleException(m, e);
e.printStackTrace();
}
}
} else {
m = CommonUtils.getMethod(service.getClass(), methodName, 0);
// handling methods that took HttpServletRequest as parameter
if (!CommonUtils.isGetter(m)) {
update(service, params);
}
mainReturn = m.invoke(service);
}
ModelQueryImpl qImpl = (ModelQueryImpl) modelQueryFactory.get(service.getClass());
Map<String, Object> scMap = new HashMap<>(qImpl.getData());
returns.putAll(scMap);
qImpl.getData().clear();
if (!modelQueryFactory.getRootScope().getRootScopeMap().isEmpty()) {
returns.put("rootScope", new HashMap<>(modelQueryFactory.getRootScope().getRootScopeMap()));
modelQueryFactory.getRootScope().getRootScopeMap().clear();
}
String[] updates = null;
if (m != null && m.isAnnotationPresent(NGReturn.class)) {
if (mainReturn == null)
mainReturn = "";
NGReturn ngReturn = m.getAnnotation(NGReturn.class);
updates = ngReturn.updates();
if (ngReturn.model().length() > 0) {
returns.put(ngReturn.model(), mainReturn);
Map<String, String> binding = new HashMap<>();
binding.put("boundTo", ngReturn.model());
mainReturn = binding;
}
}
if (m != null && m.isAnnotationPresent(NGPostConstruct.class)) {
NGPostConstruct ngPostConstruct = m.getAnnotation(NGPostConstruct.class);
updates = ngPostConstruct.updates();
}
if (updates != null) {
if ((updates.length == 1) && (updates[0].equals("*"))) {
List<String> upd = new ArrayList<>();
for (Method met : service.getClass().getDeclaredMethods()) {
if (CommonUtils.isGetter(met)) {
String fieldName = (met.getName()).substring(3);
String firstCar = fieldName.substring(0, 1);
upd.add((firstCar.toLowerCase() + fieldName.substring(1)));
}
}
updates = new String[upd.size()];
for (int i = 0; i < upd.size(); i++) {
updates[i] = upd.get(i);
}
}
}
if (updates != null) {
for (String up : updates) {
String getterName = GETTER_PREFIX + up.substring(0, 1).toUpperCase() + up.substring(1);
Method getter;
try {
getter = service.getClass().getMethod(getterName);
} catch (NoSuchMethodException e) {
getter = service.getClass().getMethod((getterName.replace(GETTER_PREFIX, BOOLEAN_GETTER_PREFIX)));
}
Object result = getter.invoke(service);
returns.put(up, result);
}
}
returns.put("mainReturn", mainReturn);
if (!logger.getLogPool().isEmpty()) {
returns.put("log", logger.getLogPool().toArray());
logger.getLogPool().clear();
}
}
use of angularBeans.api.NGReturn in project AngularBeans by bessemHmidi.
the class ModuleGenerator method generateStaticPart.
/**
*
* @param bean
* the CDI bean wrapper
* @return StringBuffer containing the javaScript code of the static (non properties values dependent) code. by
* static parts we mean the JS code that can be generated from the java class of the bean (to initialize the
* angularJs service we need to call getters on the CDI bean instance and that is considered as the dynamic
* part of the angularBean javascript generation)
*/
private StringBuffer generateStaticPart(NGBean bean) {
StringBuffer cachedStaticPart = new StringBuffer();
if (StaticJsCache.CACHED_BEAN_STATIC_PART.containsKey(bean.getTargetClass())) {
return StaticJsCache.CACHED_BEAN_STATIC_PART.get(bean.getTargetClass());
}
Method[] nativesMethods = Object.class.getMethods();
for (Method m : bean.getMethods()) {
boolean corsEnabled = false;
boolean isNative = false;
for (Method nativeMethod : nativesMethods) {
if (nativeMethod.equals(m) && !Modifier.isVolatile(m.getModifiers()))
isNative = true;
}
if (isNative)
continue;
if ((!CommonUtils.isSetter(m)) && (!CommonUtils.isGetter(m))) {
String[] csUpdates = null;
Set<Method> setters = new HashSet<>();
HttpMethod httpMethod = GET;
if (m.isAnnotationPresent(Eval.class))
continue;
if (m.isAnnotationPresent(CORS.class)) {
corsEnabled = true;
}
if (m.isAnnotationPresent(Get.class)) {
httpMethod = GET;
}
if (m.isAnnotationPresent(Post.class)) {
httpMethod = POST;
}
if (m.isAnnotationPresent(Delete.class)) {
httpMethod = DELETE_TO_REPLACE;
}
if (m.isAnnotationPresent(Put.class)) {
httpMethod = PUT;
}
if (m.isAnnotationPresent(NGReturn.class)) {
NGReturn returns = m.getAnnotation(NGReturn.class);
csUpdates = returns.updates();
}
if (m.isAnnotationPresent(NGSubmit.class)) {
String[] models = m.getAnnotation(NGSubmit.class).backEndModels();
if (models.length == 1 && models[0].equals("*")) {
pushScope(bean.getMethods(), setters);
} else {
for (String model : models) {
for (Method md : bean.getMethods()) {
if (CommonUtils.isSetter(md)) {
String methodName = md.getName();
String modelName = CommonUtils.obtainFieldNameFromAccessor(methodName);
if (modelName.equals(model)) {
setters.add(md);
}
}
}
}
}
}
cachedStaticPart.append("angularBeans.addMethod(" + bean.getName() + ",'" + m.getName() + "',function(");
// ---------------------------------------------
// Handle args
// ---------------------------------------------
Type[] parameters = m.getParameterTypes();
if ((!m.isAnnotationPresent(FileUpload.class))) {
if (parameters.length > 0) {
String argsString = "";
for (int i = 0; i < parameters.length; i++) {
argsString += ("arg" + i + ",");
}
cachedStaticPart.append(argsString.substring(0, argsString.length() - 1));
}
}
cachedStaticPart.append(") {").append("var mainReturn={data:{}};").append(// sessionUID:$rootScope.sessionUID
"var params={};");
//--
cachedStaticPart.append(addParams(bean, setters, m, parameters));
if (m.isAnnotationPresent(RealTime.class)) {
cachedStaticPart.append("return realtimeManager.call(" + bean.getName() + ",'" + bean.getName() + "." + m.getName() + "',params");
cachedStaticPart.append(").then(function(response) {\n");
cachedStaticPart.append("var msg=(response);");
cachedStaticPart.append("mainReturn.data= responseHandler.handleResponse(msg," + bean.getName() + ",true);");
// }");
cachedStaticPart.append("return mainReturn.data;");
cachedStaticPart.append("} ,function(response){return $q.reject(response.data);});");
} else {
cachedStaticPart.append("\n return $http." + httpMethod.method() + "(rpath+'" + bean.getName() + "/" + m.getName());
if (corsEnabled) {
cachedStaticPart.append("/CORS");
corsEnabled = false;
} else {
cachedStaticPart.append("/JSON");
}
if (httpMethod.equals(POST)) {
cachedStaticPart.append("',params");
} else {
// encodeURI
String paramsQuery = ("?params='+encodeURIComponent(angular.toJson(params))");
cachedStaticPart.append(paramsQuery);
}
cachedStaticPart.append(").then(function(response) {\n");
cachedStaticPart.append("var msg=response.data;");
cachedStaticPart.append("mainReturn.data= responseHandler.handleResponse(msg," + bean.getName() + ",true);");
cachedStaticPart.append("return mainReturn.data;");
cachedStaticPart.append("} ,function(response){return $q.reject(response.data);});");
}
cachedStaticPart.append("});");
if ((!CommonUtils.isSetter(m)) && (!CommonUtils.isGetter(m))) {
if (m.isAnnotationPresent(NGPostConstruct.class)) {
cachedStaticPart.append("realtimeManager.onReadyState(function(){");
cachedStaticPart.append(bean.getName() + "." + m.getName() + "();\n");
cachedStaticPart.append("});");
}
}
}
}
cachedStaticPart.append("return " + bean.getName() + ";} \n");
StaticJsCache.CACHED_BEAN_STATIC_PART.put(bean.getClass(), cachedStaticPart);
return cachedStaticPart;
}
use of angularBeans.api.NGReturn in project AngularBeans by bessemHmidi.
the class AuthenticationService method authenticate.
@RealTime
@NGSubmit(backEndModels = "*")
@NGReturn(model = "users", updates = "*")
public String authenticate() {
remoteEventBus.subscribe("notificationChannel");
User user = new User(login, password);
if (virtualClassService.getUsers().contains(user)) {
connectedUser = virtualClassService.getUsers().get(virtualClassService.getUsers().indexOf(user));
rootScope.setProperty("connectedUser", connectedUser);
rootScope.setProperty("GRANT_LOGIN", true);
login = "";
password = "";
NotificationMessage message = new NotificationMessage("img", "GRANT-ACCESS", " Welcome !!", false);
message.setImage("images/mini_logo.png");
notificationBus.fire(message);
return "/choice";
}
notificationBus.fire(new NotificationMessage("danger", "SECURITY", "UNAUTHORIZED !!", false));
modelQuery.setProperty("message", "incorrect login or password !!");
return "/";
}
Aggregations