Search in sources :

Example 6 with IonBean

use of com.twinsoft.convertigo.beans.mobile.components.dynamic.IonBean in project convertigo by convertigo.

the class UIDynamicAction method computeActionContent.

protected String computeActionContent() {
    if (isEnabled()) {
        IonBean ionBean = getIonBean();
        if (ionBean != null) {
            int numThen = numberOfActions();
            String actionName = getActionName();
            String inputs = computeActionInputs(false);
            StringBuilder sbCatch = new StringBuilder();
            StringBuilder sbThen = new StringBuilder();
            Iterator<UIComponent> it = getUIComponentList().iterator();
            while (it.hasNext()) {
                UIComponent component = (UIComponent) it.next();
                if (component.isEnabled()) {
                    String sCatch = "", sThen = "";
                    if (component instanceof UIDynamicAction) {
                        sThen = ((UIDynamicAction) component).computeActionContent();
                    }
                    if (component instanceof UICustomAction) {
                        sThen = ((UICustomAction) component).computeActionContent();
                    }
                    if (component instanceof UIActionFailureEvent) {
                        sCatch = ((UIActionFailureEvent) component).computeEvent();
                    }
                    if (!sCatch.isEmpty()) {
                        sbCatch.append(sCatch);
                    }
                    if (!sThen.isEmpty()) {
                        sbThen.append(sbThen.length() > 0 && numThen > 1 ? "\t\t," + System.lineSeparator() : "").append(sThen);
                    }
                }
            }
            String tsCode = "";
            tsCode += "\t\tnew Promise((resolve, reject) => {" + System.lineSeparator();
            // tsCode += "\t\tlet self: any = stack[\""+ getName() +"\"] = {};"+ System.lineSeparator();
            tsCode += "\t\tlet self: any = stack[\"" + getName() + "\"] = stack[\"" + priority + "\"] = {};" + System.lineSeparator();
            tsCode += "\t\tself.in = " + inputs + ";" + System.lineSeparator();
            if ("InvokeAction".equals(ionBean.getName())) {
                if (isBroken()) {
                    tsCode += "\t\treturn this.actionBeans." + actionName + "(this, {...self.in.props, ...{message: 'Invoke source is broken'}}, " + "{...stack[\"root\"].in, ...self.in.vars})" + System.lineSeparator();
                } else {
                    if (getSharedAction() != null) {
                        tsCode += "\t\treturn this.actionBeans." + actionName + "(this, {...{stack: stack, parent: parent, out: out}, ...self.in.props}, " + "{...stack[\"root\"].in, ...params, ...self.in.vars}, event)" + System.lineSeparator();
                    } else {
                        tsCode += "\t\treturn this.actionBeans." + actionName + "(this, {...{stack: stack, parent: parent, out: out}, ...self.in.props}, " + "{...stack[\"root\"].in, ...self.in.vars}, event)" + System.lineSeparator();
                    }
                }
            } else {
                tsCode += "\t\treturn this.actionBeans." + actionName + "(this, self.in.props, {...stack[\"root\"].in, ...self.in.vars})" + System.lineSeparator();
            }
            tsCode += "\t\t.catch((error:any) => {" + System.lineSeparator();
            tsCode += "\t\tparent = self;" + System.lineSeparator();
            tsCode += "\t\tparent.out = error;" + System.lineSeparator();
            tsCode += "\t\tout = parent.out;" + System.lineSeparator();
            if (sbCatch.length() > 0) {
                tsCode += "\t\t" + sbCatch.toString();
            } else {
                tsCode += "\t\treturn Promise.reject(error);" + System.lineSeparator();
            }
            tsCode += "\t\t})" + System.lineSeparator();
            tsCode += "\t\t.then((res:any) => {" + System.lineSeparator();
            tsCode += "\t\tparent = self;" + System.lineSeparator();
            tsCode += "\t\tparent.out = res;" + System.lineSeparator();
            tsCode += "\t\tout = parent.out;" + System.lineSeparator();
            if (sbThen.length() > 0) {
                if (numThen > 1) {
                    tsCode += "\t\treturn Promise.all([" + System.lineSeparator();
                    tsCode += sbThen.toString();
                    tsCode += "\t\t])" + System.lineSeparator();
                } else {
                    tsCode += "\t\treturn " + sbThen.toString().replaceFirst("\t\t", "");
                }
            } else {
                tsCode += "\t\treturn Promise.resolve(res);" + System.lineSeparator();
            }
            if ("IfAction".equals(ionBean.getName())) {
                tsCode += "\t\t}, (error: any) => {if (\"c8oSkipError\" === error.message) {resolve(false);} else {this.c8o.log.debug(\"[MB] " + actionName + " : \", error.message);throw new Error(error);}})" + System.lineSeparator();
            } else {
                tsCode += "\t\t}, (error: any) => {this.c8o.log.debug(\"[MB] " + actionName + " : \", error.message);throw new Error(error);})" + System.lineSeparator();
            }
            tsCode += "\t\t.then((res:any) => {resolve(res)}).catch((error:any) => {reject(error)})" + System.lineSeparator();
            tsCode += "\t\t})" + System.lineSeparator();
            return tsCode;
        }
    }
    return "";
}
Also used : IonBean(com.twinsoft.convertigo.beans.mobile.components.dynamic.IonBean)

Example 7 with IonBean

use of com.twinsoft.convertigo.beans.mobile.components.dynamic.IonBean in project convertigo by convertigo.

the class UIDynamicAction method getContributor.

@Override
protected Contributor getContributor() {
    Contributor contributor = super.getContributor();
    return new Contributor() {

        @Override
        public boolean isNgModuleForApp() {
            if (!getModuleNgImports().isEmpty() || !getModuleNgProviders().isEmpty()) {
                return true;
            }
            return false;
        }

        @Override
        public Map<String, String> getActionTsFunctions() {
            Map<String, String> functions = new HashMap<String, String>();
            IonBean ionBean = getIonBean();
            if (ionBean != null) {
                String actionName = getActionName();
                String actionCode = ComponentManager.getActionTsCode(actionName);
                if (compareToTplVersion("7.5.2.0") < 0) {
                    actionCode = actionCode.replaceFirst("C8oPageBase", "C8oPage");
                    actionCode = actionCode.replaceAll("C8oCafUtils\\.merge", "page.merge");
                }
                functions.put(actionName, actionCode);
            }
            return functions;
        }

        @Override
        public Map<String, String> getActionTsImports() {
            Map<String, String> imports = new HashMap<String, String>();
            IonBean ionBean = getIonBean();
            if (ionBean != null) {
                Map<String, List<String>> map = ionBean.getConfig().getActionTsImports();
                if (map.size() > 0) {
                    for (String from : map.keySet()) {
                        for (String component : map.get(from)) {
                            imports.put(component.trim(), from);
                        }
                    }
                }
                if (ionBean.getName().equals("PublishEventAction")) {
                    if (compareToTplVersion("7.9.0.5") < 0) {
                        // removed from ion_objects.json since 7.9.0.5, need to add for older tpl
                        imports.put("Events", "ionic-angular");
                    }
                }
            }
            return imports;
        }

        @Override
        public Map<String, File> getCompBeanDir() {
            return contributor.getCompBeanDir();
        }

        @Override
        public Map<String, String> getModuleTsImports() {
            return contributor.getModuleTsImports();
        }

        @Override
        public Set<String> getModuleNgImports() {
            return contributor.getModuleNgImports();
        }

        @Override
        public Set<String> getModuleNgProviders() {
            return contributor.getModuleNgProviders();
        }

        @Override
        public Set<String> getModuleNgDeclarations() {
            return contributor.getModuleNgDeclarations();
        }

        @Override
        public Set<String> getModuleNgComponents() {
            return contributor.getModuleNgComponents();
        }

        @Override
        public Map<String, String> getPackageDependencies() {
            return contributor.getPackageDependencies();
        }

        @Override
        public Map<String, String> getConfigPlugins() {
            return contributor.getConfigPlugins();
        }
    };
}
Also used : HashMap(java.util.HashMap) IonBean(com.twinsoft.convertigo.beans.mobile.components.dynamic.IonBean) List(java.util.List) File(java.io.File)

Example 8 with IonBean

use of com.twinsoft.convertigo.beans.mobile.components.dynamic.IonBean in project convertigo by convertigo.

the class UIDynamicAction method computeJsonModel.

@Override
public String computeJsonModel() {
    JSONObject jsonModel = new JSONObject();
    // if (isEnabled()) {
    try {
        jsonModel.put("in", new JSONObject().put("props", new JSONObject()).put("vars", new JSONObject())).put("out", new JSONObject());
        IonBean ionBean = getIonBean();
        if (ionBean != null) {
            JSONObject jsonProps = jsonModel.getJSONObject("in").getJSONObject("props");
            jsonProps.put("tplVersion", "");
            jsonProps.put("actionName", "");
            jsonProps.put("actionFunction", "");
            for (IonProperty property : ionBean.getProperties().values()) {
                jsonProps.put(property.getName(), "");
            }
        }
        JSONObject jsonVars = jsonModel.getJSONObject("in").getJSONObject("vars");
        Iterator<UIComponent> it = getUIComponentList().iterator();
        while (it.hasNext()) {
            UIComponent component = (UIComponent) it.next();
            if (component instanceof UIControlVariable) {
                UIControlVariable var = (UIControlVariable) component;
                jsonVars.put(var.getVarName(), "");
            }
        }
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    // }
    return jsonModel.toString();
}
Also used : IonProperty(com.twinsoft.convertigo.beans.mobile.components.dynamic.IonProperty) JSONObject(org.codehaus.jettison.json.JSONObject) IonBean(com.twinsoft.convertigo.beans.mobile.components.dynamic.IonBean) JSONException(org.codehaus.jettison.json.JSONException)

Example 9 with IonBean

use of com.twinsoft.convertigo.beans.mobile.components.dynamic.IonBean in project convertigo by convertigo.

the class UIDynamicAction method addInfos.

@Override
protected void addInfos(Set<UIComponent> done, Map<String, Set<String>> infoMap) {
    super.addInfos(done, infoMap);
    IonBean ionBean = getIonBean();
    if (ionBean != null) {
        String beanName = ionBean.getName();
        if (ionBean.hasProperty("marker")) {
            JSONObject json = new JSONObject();
            String key = null;
            for (IonProperty property : ionBean.getProperties().values()) {
                MobileSmartSourceType msst = property.getSmartType();
                String p_name = property.getName();
                Object p_value = property.getValue();
                if (!p_value.equals(false)) {
                    if (beanName.equals("FullSyncViewAction")) {
                        if (p_name.equals("fsview")) {
                            key = p_value.toString() + ".view";
                        }
                    } else if (beanName.equals("FullSyncGetAction")) {
                        if (p_name.equals("requestable")) {
                            key = p_value.toString() + ".get";
                        }
                    } else if (beanName.equals("CallSequenceAction")) {
                        if (p_name.equals("requestable")) {
                            key = p_value.toString();
                        }
                    } else if (beanName.equals("CallFullSyncAction")) {
                        if (p_name.equals("requestable")) {
                            key = p_value.toString();
                            Object p_verb = ionBean.getProperty("verb").getValue();
                            if (!p_verb.equals(false)) {
                                key += "." + p_verb.toString();
                            }
                        }
                    }
                }
                try {
                    if (p_name.equals("marker")) {
                        json.put(p_name, !p_value.equals(false) ? msst.getValue() : "");
                    }
                    if (p_name.equals("include_docs")) {
                        json.put(p_name, !p_value.equals(false) ? msst.getValue() : "false");
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
            if (key != null && !key.isEmpty()) {
                Set<String> infos = infoMap.get(key);
                if (infos == null) {
                    infos = new HashSet<String>();
                }
                String info = json.toString();
                if (!info.isEmpty()) {
                    infos.add(info);
                }
                infoMap.put(key, infos);
            }
        }
    }
}
Also used : IonProperty(com.twinsoft.convertigo.beans.mobile.components.dynamic.IonProperty) JSONObject(org.codehaus.jettison.json.JSONObject) IonBean(com.twinsoft.convertigo.beans.mobile.components.dynamic.IonBean) JSONException(org.codehaus.jettison.json.JSONException) DatabaseObject(com.twinsoft.convertigo.beans.core.DatabaseObject) JSONObject(org.codehaus.jettison.json.JSONObject)

Example 10 with IonBean

use of com.twinsoft.convertigo.beans.mobile.components.dynamic.IonBean in project convertigo by convertigo.

the class UIDynamicComponent method getContributor.

/* (non-Javadoc)
	 * @see com.twinsoft.convertigo.beans.mobile.components.UIDynamicElement#getContributor()
	 */
@Override
protected Contributor getContributor() {
    Contributor contributor = super.getContributor();
    return new Contributor() {

        @Override
        public Map<String, String> getActionTsFunctions() {
            return contributor.getActionTsFunctions();
        }

        @Override
        public Map<String, String> getActionTsImports() {
            return contributor.getActionTsImports();
        }

        @Override
        public Map<String, File> getCompBeanDir() {
            Map<String, File> map = new HashMap<String, File>();
            IonBean ionBean = getIonBean();
            if (ionBean != null) {
                String compName = ionBean.getName();
                File dir = ComponentManager.getCompBeanDir(compName);
                if (dir != null) {
                    map.put(compName, dir);
                }
            }
            return map;
        }

        @Override
        public Map<String, String> getModuleTsImports() {
            return contributor.getModuleTsImports();
        }

        @Override
        public Set<String> getModuleNgImports() {
            return contributor.getModuleNgImports();
        }

        @Override
        public Set<String> getModuleNgProviders() {
            return contributor.getModuleNgProviders();
        }

        @Override
        public Set<String> getModuleNgDeclarations() {
            return contributor.getModuleNgDeclarations();
        }

        @Override
        public Set<String> getModuleNgComponents() {
            return contributor.getModuleNgComponents();
        }

        @Override
        public Map<String, String> getPackageDependencies() {
            return contributor.getPackageDependencies();
        }

        @Override
        public Map<String, String> getConfigPlugins() {
            return contributor.getConfigPlugins();
        }
    };
}
Also used : HashMap(java.util.HashMap) IonBean(com.twinsoft.convertigo.beans.mobile.components.dynamic.IonBean) File(java.io.File)

Aggregations

IonBean (com.twinsoft.convertigo.beans.mobile.components.dynamic.IonBean)22 DatabaseObject (com.twinsoft.convertigo.beans.core.DatabaseObject)10 IonProperty (com.twinsoft.convertigo.beans.mobile.components.dynamic.IonProperty)8 JSONObject (org.codehaus.jettison.json.JSONObject)7 EngineException (com.twinsoft.convertigo.engine.EngineException)6 HashMap (java.util.HashMap)6 UIDynamicAction (com.twinsoft.convertigo.beans.mobile.components.UIDynamicAction)4 UISharedComponent (com.twinsoft.convertigo.beans.mobile.components.UISharedComponent)4 File (java.io.File)4 JSONException (org.codehaus.jettison.json.JSONException)4 MobileSmartSourceType (com.twinsoft.convertigo.beans.mobile.components.MobileSmartSourceType)3 UIActionStack (com.twinsoft.convertigo.beans.mobile.components.UIActionStack)3 UICompVariable (com.twinsoft.convertigo.beans.mobile.components.UICompVariable)3 UIDynamicElement (com.twinsoft.convertigo.beans.mobile.components.UIDynamicElement)3 UIUseShared (com.twinsoft.convertigo.beans.mobile.components.UIUseShared)3 Project (com.twinsoft.convertigo.beans.core.Project)2 ApplicationComponent (com.twinsoft.convertigo.beans.mobile.components.ApplicationComponent)2 UIComponent (com.twinsoft.convertigo.beans.mobile.components.UIComponent)2 UIControlVariable (com.twinsoft.convertigo.beans.mobile.components.UIControlVariable)2 UIDynamicInvoke (com.twinsoft.convertigo.beans.mobile.components.UIDynamicInvoke)2