Search in sources :

Example 21 with Form

use of com.servoy.j2db.persistence.Form in project servoy-client by Servoy.

the class FormComponentPropertyType method toTemplateJSONValue.

@Override
public JSONWriter toTemplateJSONValue(JSONWriter writer, String key, Object formElementValue, PropertyDescription pd, DataConversion clientConversion, FormElementContext formElementContext) throws JSONException {
    if (formElementValue == null)
        return writer;
    FlattenedSolution fs = formElementContext.getFlattenedSolution();
    Form form = getForm(formElementValue, fs);
    if (form != null) {
        if (pd.getConfig() instanceof ComponentTypeConfig && ((ComponentTypeConfig) pd.getConfig()).forFoundset != null) {
            clientConversion.convert(FormComponentPropertyType.TYPE_NAME);
        }
        // else this info below seems to be needed client-side even for non-foundset linked form components; but it's just some dumb simple JSON, not a client side type
        JSONUtils.addKeyIfPresent(writer, key);
        // we output here a uuid that is a uuid that must be used to get the compiled template from the $formcomponentCache
        String uuid = FormElementHelper.INSTANCE.getFormComponentCache(formElementContext.getFormElement(), pd, (JSONObject) formElementValue, form, fs).getHtmlTemplateUUIDForAngular();
        writer.object();
        writer.key("uuid");
        writer.value(uuid);
        writer.key("formHeight");
        writer.value(form.getSize().height);
        writer.key("formWidth");
        writer.value(form.getSize().width);
        writer.key("absoluteLayout");
        writer.value(!form.isResponsiveLayout());
        writer.endObject();
    }
    return writer;
}
Also used : JSONObject(org.json.JSONObject) Form(com.servoy.j2db.persistence.Form) JSForm(com.servoy.j2db.scripting.solutionmodel.JSForm) FlattenedSolution(com.servoy.j2db.FlattenedSolution) ComponentTypeConfig(com.servoy.j2db.server.ngclient.property.ComponentTypeConfig)

Example 22 with Form

use of com.servoy.j2db.persistence.Form in project servoy-client by Servoy.

the class FormComponentSabloValue method getComponents.

private ComponentTypeSabloValue[] getComponents() {
    FormComponentCache formComponentCache = getCache();
    if (currentFormComponentCache != formComponentCache) {
        List<FormElement> elements = formComponentCache.getFormComponentElements();
        List<ComponentTypeSabloValue> componentsList = new ArrayList<ComponentTypeSabloValue>(elements.size());
        PropertyPath path = new PropertyPath();
        path.add(component.getName());
        path.add("containedForm");
        path.add("childElements");
        JSONObject tags = new JSONObject();
        tags.put(ComponentTypeSabloValue.TAG_ADD_TO_ELEMENTS_SCOPE, true);
        PropertyDescription compPd = new PropertyDescriptionBuilder().withName(pd.getName()).withType(ComponentPropertyType.INSTANCE).withConfig(pd.getConfig()).withTags(tags).build();
        int j = 0;
        for (FormElement element : elements) {
            path.add(j);
            ComponentTypeFormElementValue elementValue = ComponentPropertyType.INSTANCE.getFormElementValue(null, compPd, path, element, dal.getApplication().getFlattenedSolution());
            ComponentTypeSabloValue ctsv = ComponentPropertyType.INSTANCE.toSabloComponentValue(elementValue, compPd, element, component, dal);
            if (ctsv != null) {
                // if it is null then it is probably a child component that was blocked by security (visibility == false); in that case just ignore it (similar to what portal does through .spec setting on comp. array to ignore null values at runtime)
                j++;
                componentsList.add(ctsv);
            }
            path.backOneLevel();
            if (element.getWebComponentSpec() != null) {
                Collection<PropertyDescription> properties = element.getWebComponentSpec().getProperties(FormComponentPropertyType.INSTANCE);
                if (properties.size() > 0) {
                    for (PropertyDescription pd : properties) {
                        Object propertyValue = element.getPropertyValue(pd.getName());
                        Form frm = FormComponentPropertyType.INSTANCE.getForm(propertyValue, dal.getApplication().getFlattenedSolution());
                        if (frm == null)
                            continue;
                        FormComponentCache innerCache = FormElementHelper.INSTANCE.getFormComponentCache(element, pd, (JSONObject) propertyValue, frm, dal.getApplication().getFlattenedSolution());
                        List<FormElement> innerElements = innerCache.getFormComponentElements();
                        for (FormElement innerElement : innerElements) {
                            path.add(j);
                            elementValue = ComponentPropertyType.INSTANCE.getFormElementValue(null, compPd, path, innerElement, dal.getApplication().getFlattenedSolution());
                            // use main property
                            ctsv = ComponentPropertyType.INSTANCE.toSabloComponentValue(elementValue, compPd, innerElement, component, dal);
                            if (ctsv != null) {
                                // if it is null then it is probably a child component that was blocked by security (visibility == false); in that case just ignore it (similar to what portal does through .spec setting on comp. array to ignore null values at runtime)
                                j++;
                                componentsList.add(ctsv);
                            }
                            path.backOneLevel();
                        }
                    }
                }
            }
        }
        // re-attach
        if (currentFormComponentCache != null && changeMonitor != null && webObjectContext != null) {
            for (ComponentTypeSabloValue componentTypeSabloValue : componentsList) {
                componentTypeSabloValue.attachToBaseObject(changeMonitor, webObjectContext);
            }
        }
        currentFormComponentCache = formComponentCache;
        components = componentsList.toArray(new ComponentTypeSabloValue[0]);
    }
    return components;
}
Also used : FormComponentCache(com.servoy.j2db.server.ngclient.FormElementHelper.FormComponentCache) Form(com.servoy.j2db.persistence.Form) PropertyDescriptionBuilder(org.sablo.specification.PropertyDescriptionBuilder) ArrayList(java.util.ArrayList) FormElement(com.servoy.j2db.server.ngclient.FormElement) INGFormElement(com.servoy.j2db.server.ngclient.INGFormElement) ComponentTypeSabloValue(com.servoy.j2db.server.ngclient.property.ComponentTypeSabloValue) ComponentTypeFormElementValue(com.servoy.j2db.server.ngclient.property.ComponentTypeFormElementValue) PropertyDescription(org.sablo.specification.PropertyDescription) JSONObject(org.json.JSONObject) JSONObject(org.json.JSONObject)

Example 23 with Form

use of com.servoy.j2db.persistence.Form in project servoy-client by Servoy.

the class FormPropertyType method toRhinoValue.

@Override
public Object toRhinoValue(Object webComponentValue, PropertyDescription pd, IWebObjectContext webObjectContext, Scriptable startScriptable) {
    if (webComponentValue instanceof Form) {
        return ((Form) webComponentValue).getName();
    } else {
        if (webComponentValue != null && webObjectContext != null && webObjectContext.getUnderlyingWebObject() instanceof IContextProvider) {
            // form is stored as uuid on disk
            FlattenedSolution solution = ((IContextProvider) webObjectContext.getUnderlyingWebObject()).getDataConverterContext().getSolution();
            Form form = solution.getForm(webComponentValue.toString());
            if (form == null) {
                form = (Form) solution.searchPersist(webComponentValue.toString());
            }
            if (form != null) {
                return form.getName();
            }
        }
    }
    return webComponentValue;
}
Also used : IContextProvider(com.servoy.j2db.server.ngclient.IContextProvider) Form(com.servoy.j2db.persistence.Form) JSForm(com.servoy.j2db.scripting.solutionmodel.JSForm) FlattenedSolution(com.servoy.j2db.FlattenedSolution)

Example 24 with Form

use of com.servoy.j2db.persistence.Form in project servoy-client by Servoy.

the class TitleStringPropertyType method toSabloComponentDefaultValue.

/*
	 * (non-Javadoc)
	 *
	 * @see com.servoy.j2db.server.ngclient.property.types.NGConversions.IFormElementDefaultValueToSabloComponent#toSabloComponentDefaultValue(org.sablo.
	 * specification.PropertyDescription, com.servoy.j2db.server.ngclient.INGFormElement, com.servoy.j2db.server.ngclient.WebFormComponent,
	 * com.servoy.j2db.server.ngclient.DataAdapterList)
	 */
@Override
public BasicTagStringTypeSabloValue toSabloComponentDefaultValue(PropertyDescription pd, INGFormElement formElement, WebFormComponent component, DataAdapterList dataAdapterList) {
    TitleStringConfig titleStringConfig = (TitleStringConfig) pd.getConfig();
    String forDataprovider = titleStringConfig.getForDataprovider();
    if (forDataprovider != null) {
        PropertyDescription forProperty = formElement.getPropertyDescription(forDataprovider);
        if (forProperty != null) {
            IPropertyType<?> type = forProperty.getType();
            if (type instanceof FoundsetLinkedPropertyType) {
                Object config = forProperty.getConfig();
                if (config instanceof FoundsetLinkedConfig && ((FoundsetLinkedConfig) config).getForFoundsetName() != null) {
                    String forFoundset = ((FoundsetLinkedConfig) config).getForFoundsetName();
                    String dataproviderID = (String) formElement.getPropertyValue(forDataprovider);
                    JSONObject foundsetValue = (JSONObject) formElement.getPropertyValue(forFoundset);
                    if (foundsetValue != null) {
                        String foundsetID = foundsetValue.optString(FoundsetPropertyType.FOUNDSET_SELECTOR);
                        INGApplication application = ((WebFormComponent) component.getUnderlyingWebObject()).getDataConverterContext().getApplication();
                        Form form = ((IContextProvider) component.getUnderlyingWebObject()).getDataConverterContext().getForm().getForm();
                        ITable table = FoundsetTypeSabloValue.getTableBasedOfFoundsetPropertyFromFoundsetIdentifier(foundsetID, application, form);
                        if (table != null) {
                            Column dataproviderColumn = table.getColumn(dataproviderID);
                            if (dataproviderColumn != null) {
                                return toSabloComponentValue(dataproviderColumn.getTitle(), pd, formElement, component, dataAdapterList);
                            }
                        }
                    }
                }
            }
        }
    }
    return null;
}
Also used : Form(com.servoy.j2db.persistence.Form) FoundsetLinkedConfig(com.servoy.j2db.server.ngclient.property.FoundsetLinkedConfig) PropertyDescription(org.sablo.specification.PropertyDescription) INGApplication(com.servoy.j2db.server.ngclient.INGApplication) JSONObject(org.json.JSONObject) IContextProvider(com.servoy.j2db.server.ngclient.IContextProvider) Column(com.servoy.j2db.persistence.Column) JSONObject(org.json.JSONObject) ITable(com.servoy.j2db.persistence.ITable) FoundsetLinkedPropertyType(com.servoy.j2db.server.ngclient.property.FoundsetLinkedPropertyType)

Example 25 with Form

use of com.servoy.j2db.persistence.Form in project servoy-client by Servoy.

the class FlattenedSolution method getFlattenedForm.

public Form getFlattenedForm(IPersist persist, boolean useCached) {
    if (mainSolution == null && loginFlattenedSolution != null) {
        return loginFlattenedSolution.getFlattenedForm(persist, useCached);
    }
    if (persist == null || getSolution() == null) {
        return null;
    }
    Form form = null;
    if (persist instanceof FlattenedForm) {
        form = ((FlattenedForm) persist).getForm();
    } else {
        form = (Form) persist.getAncestor(IRepository.FORMS);
    }
    if (form == null || form.getExtendsID() <= 0) {
        // no form or nothing to flatten
        return form;
    }
    // make sure is latest form
    form = getForm(form.getID());
    // form is already deleted?
    if (form == null)
        return null;
    if (flattenedFormCache == null) {
        // no caching
        return createFlattenedForm(form);
    }
    // cache flattened form
    FlattenedForm[] flattedFormRef;
    synchronized (flattenedFormCache) {
        flattedFormRef = flattenedFormCache.get(form);
        if (flattedFormRef == null) {
            flattenedFormCache.put(form, flattedFormRef = new FlattenedForm[] { null });
        }
    }
    synchronized (flattedFormRef) {
        if (flattedFormRef[0] == null || !useCached) {
            flattedFormRef[0] = createFlattenedForm(form);
        }
        return flattedFormRef[0];
    }
}
Also used : FlattenedForm(com.servoy.j2db.persistence.FlattenedForm) Form(com.servoy.j2db.persistence.Form) FlattenedForm(com.servoy.j2db.persistence.FlattenedForm)

Aggregations

Form (com.servoy.j2db.persistence.Form)146 FlattenedForm (com.servoy.j2db.persistence.FlattenedForm)35 ArrayList (java.util.ArrayList)32 Point (java.awt.Point)26 FlattenedSolution (com.servoy.j2db.FlattenedSolution)24 IPersist (com.servoy.j2db.persistence.IPersist)22 ISMForm (com.servoy.j2db.solutionmodel.ISMForm)20 JSONObject (org.json.JSONObject)20 Solution (com.servoy.j2db.persistence.Solution)16 Dimension (java.awt.Dimension)15 Part (com.servoy.j2db.persistence.Part)14 RepositoryException (com.servoy.j2db.persistence.RepositoryException)14 FormController (com.servoy.j2db.FormController)13 WebFormComponent (com.servoy.j2db.server.ngclient.WebFormComponent)12 IMobileSMForm (com.servoy.base.solutionmodel.mobile.IMobileSMForm)11 IForm (com.servoy.j2db.IForm)11 ScriptMethod (com.servoy.j2db.persistence.ScriptMethod)11 FormElement (com.servoy.j2db.server.ngclient.FormElement)11 HashMap (java.util.HashMap)11 JSFunction (org.mozilla.javascript.annotations.JSFunction)11