Search in sources :

Example 1 with HttpMethod

use of angularBeans.api.http.HttpMethod 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)

Aggregations

NGReturn (angularBeans.api.NGReturn)1 NGSubmit (angularBeans.api.NGSubmit)1 HttpMethod (angularBeans.api.http.HttpMethod)1 Method (java.lang.reflect.Method)1 Type (java.lang.reflect.Type)1 HashSet (java.util.HashSet)1