Search in sources :

Example 1 with NGReturn

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();
    }
}
Also used : HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) NGReturn(angularBeans.api.NGReturn) ModelQueryImpl(angularBeans.util.ModelQueryImpl) Method(java.lang.reflect.Method) InvocationTargetException(java.lang.reflect.InvocationTargetException) JsonArray(com.google.gson.JsonArray) ParameterizedType(java.lang.reflect.ParameterizedType) Type(java.lang.reflect.Type) JsonElement(com.google.gson.JsonElement) NGPostConstruct(angularBeans.api.NGPostConstruct) JsonObject(com.google.gson.JsonObject) HashMap(java.util.HashMap) Map(java.util.Map)

Example 2 with NGReturn

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;
}
Also used : NGReturn(angularBeans.api.NGReturn) NGSubmit(angularBeans.api.NGSubmit) HttpMethod(angularBeans.api.http.HttpMethod) Method(java.lang.reflect.Method) Type(java.lang.reflect.Type) HttpMethod(angularBeans.api.http.HttpMethod) HashSet(java.util.HashSet)

Example 3 with NGReturn

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 "/";
}
Also used : User(angularBeans.demoApp.domain.User) NotificationMessage(angularBeans.demoApp.domain.NotificationMessage) NGReturn(angularBeans.api.NGReturn) NGSubmit(angularBeans.api.NGSubmit) RealTime(angularBeans.realtime.RealTime)

Aggregations

NGReturn (angularBeans.api.NGReturn)3 NGSubmit (angularBeans.api.NGSubmit)2 Method (java.lang.reflect.Method)2 Type (java.lang.reflect.Type)2 NGPostConstruct (angularBeans.api.NGPostConstruct)1 HttpMethod (angularBeans.api.http.HttpMethod)1 NotificationMessage (angularBeans.demoApp.domain.NotificationMessage)1 User (angularBeans.demoApp.domain.User)1 RealTime (angularBeans.realtime.RealTime)1 ModelQueryImpl (angularBeans.util.ModelQueryImpl)1 JsonArray (com.google.gson.JsonArray)1 JsonElement (com.google.gson.JsonElement)1 JsonObject (com.google.gson.JsonObject)1 InvocationTargetException (java.lang.reflect.InvocationTargetException)1 ParameterizedType (java.lang.reflect.ParameterizedType)1 ArrayList (java.util.ArrayList)1 HashMap (java.util.HashMap)1 HashSet (java.util.HashSet)1 Map (java.util.Map)1