Search in sources :

Example 26 with IFormElement

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

the class FormWrapper method getCSSPositionElementNames.

private Map<String, Boolean> getCSSPositionElementNames() {
    Map<String, Boolean> names = new HashMap<String, Boolean>();
    names.putAll(formComponentCSSPositionElementNames);
    List<IFormElement> persists = form.getFlattenedObjects(null);
    for (IFormElement persist : persists) {
        if (form.getUseCssPosition().booleanValue() || CSSPositionUtils.isInAbsoluteLayoutMode(persist)) {
            FormElement formElement = FormElementHelper.INSTANCE.getFormElement(persist, context.getSolution(), null, design);
            String name = formElement.getDesignId() != null ? formElement.getDesignId() : formElement.getName();
            if (!names.containsKey(name))
                names.put(name, Boolean.TRUE);
        }
    }
    return names;
}
Also used : IFormElement(com.servoy.j2db.persistence.IFormElement) HashMap(java.util.HashMap) FormElement(com.servoy.j2db.server.ngclient.FormElement) IFormElement(com.servoy.j2db.persistence.IFormElement)

Example 27 with IFormElement

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

the class FormWrapper method getBodyComponents.

public Collection<BaseComponent> getBodyComponents() {
    Part part = getBodyPart();
    List<BaseComponent> baseComponents = new ArrayList<>();
    if (part == null)
        return baseComponents;
    int startPos = form.getPartStartYPos(part.getID());
    int endPos = part.getHeight();
    List<IFormElement> persists = form.getFlattenedObjects(PositionComparator.XY_PERSIST_COMPARATOR);
    for (IFormElement persist : persists) {
        if (persist instanceof GraphicalComponent && isTableView && ((GraphicalComponent) persist).getLabelFor() != null)
            continue;
        Point location = CSSPositionUtils.getLocation(persist);
        if (startPos <= location.y && endPos > location.y) {
            if (isSecurityVisible(persist))
                baseComponents.add((BaseComponent) persist);
        }
    }
    return baseComponents;
}
Also used : IFormElement(com.servoy.j2db.persistence.IFormElement) BaseComponent(com.servoy.j2db.persistence.BaseComponent) Part(com.servoy.j2db.persistence.Part) GraphicalComponent(com.servoy.j2db.persistence.GraphicalComponent) ArrayList(java.util.ArrayList) Point(java.awt.Point) Point(java.awt.Point)

Example 28 with IFormElement

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

the class PartWrapper method getBaseComponents.

public static Collection<BaseComponent> getBaseComponents(Part part, Form context, IServoyDataConverterContext converterContext, boolean isDesign, boolean flatten) {
    if (!isDesign && part.getPartType() == Part.BODY) {
        switch(context.getView()) {
            case FormController.TABLE_VIEW:
            case FormController.LOCKED_TABLE_VIEW:
            case IForm.LIST_VIEW:
            case FormController.LOCKED_LIST_VIEW:
                return Arrays.asList(new BaseComponent[] { new BodyPortal(context) });
        }
    }
    List<BaseComponent> baseComponents = new ArrayList<>();
    int startPos = context.getPartStartYPos(part.getID());
    int endPos = part.getHeight();
    Comparator<? super IFormElement> comparator = null;
    if (context.isResponsiveLayout()) {
        comparator = PositionComparator.XY_PERSIST_COMPARATOR;
    } else {
        comparator = FlattenedForm.FORM_INDEX_WITH_HIERARCHY_COMPARATOR;
    }
    List<IFormElement> persists = null;
    if (flatten) {
        persists = context.getFlattenedObjects(comparator);
    } else {
        persists = new ArrayList(context.getAllObjectsAsList());
        Iterator<IFormElement> it = persists.iterator();
        while (it.hasNext()) {
            IPersist persist = it.next();
            if (!(persist instanceof BaseComponent)) {
                it.remove();
            }
        }
        Collections.sort(persists, comparator);
    }
    for (IFormElement persist : persists) {
        Point location = CSSPositionUtils.getLocation(persist);
        if (startPos <= location.y && endPos > location.y && persist instanceof BaseComponent) {
            if (isSecurityVisible(persist, converterContext.getSolution(), context))
                baseComponents.add((BaseComponent) persist);
        }
    }
    return baseComponents;
}
Also used : IFormElement(com.servoy.j2db.persistence.IFormElement) BaseComponent(com.servoy.j2db.persistence.BaseComponent) IPersist(com.servoy.j2db.persistence.IPersist) BodyPortal(com.servoy.j2db.server.ngclient.BodyPortal) ArrayList(java.util.ArrayList) Point(java.awt.Point) Point(java.awt.Point)

Example 29 with IFormElement

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

the class TemplateGenerator method createCellBasedView.

private static void createCellBasedView(AbstractBase obj, Form form, StringBuffer html, TextualCSS css, boolean addHeaders, int startY, int endY, Color bgColor, IServiceProvider sp, int viewType, boolean enableAnchoring, int partStartY, int partEndY) throws RepositoryException {
    try {
        html.append('\n');
        boolean sortable = true;
        boolean shouldFillAllHorizSpace = false;
        boolean[] userCssClassAdded = new boolean[] { false };
        if (obj instanceof ISupportScrollbars) {
            int scrollbars = ((ISupportScrollbars) obj).getScrollbars();
            if ((scrollbars & ISupportScrollbars.HORIZONTAL_SCROLLBAR_NEVER) == ISupportScrollbars.HORIZONTAL_SCROLLBAR_NEVER) {
                boolean hasAtLeastOneAnchored = false;
                Iterator<IPersist> it2 = obj.getAllObjects(PositionComparator.XY_PERSIST_COMPARATOR);
                while (it2.hasNext()) {
                    IPersist element = it2.next();
                    if (element instanceof Field || element instanceof GraphicalComponent || element instanceof Bean) {
                        if (element instanceof GraphicalComponent && ((GraphicalComponent) element).getLabelFor() != null) {
                            continue;
                        }
                        Point l = ((IFormElement) element).getLocation();
                        if (l == null) {
                            // unkown where to add
                            continue;
                        }
                        if (l.y >= startY && l.y < endY) {
                            if (element instanceof ISupportAnchors) {
                                int anchors = ((ISupportAnchors) element).getAnchors();
                                if (((anchors & IAnchorConstants.EAST) != 0) && ((anchors & IAnchorConstants.WEST) != 0)) {
                                    hasAtLeastOneAnchored = true;
                                    break;
                                }
                            }
                        }
                    }
                }
                if (hasAtLeastOneAnchored)
                    shouldFillAllHorizSpace = true;
            }
        }
        // true for list view type and multi-line portals
        boolean listViewMode = viewType == IForm.LIST_VIEW || viewType == FormController.LOCKED_LIST_VIEW;
        if (obj instanceof Form) {
            html.append("<span servoy:id='info'></span>\n<table border=0 cellpadding=0 cellspacing=0 width='100%'>\n");
            html.append(getCssClassForElement(obj, ""));
        } else // is portal
        {
            Portal p = (Portal) obj;
            listViewMode = p.getMultiLine();
            sortable = p.getSortable();
            TextualStyle styleObj = css.addStyle('#' + ComponentFactory.getWebID(form, p));
            BorderAndPadding ins = applyBaseComponentProperties(p, form, styleObj, null, null, sp);
            applyLocationAndSize(p, styleObj, ins, partStartY, partEndY, form.getSize().width, true, p.getAnchors(), sp);
            html.append("<div style='overflow: auto' ");
            html.append(getWicketIDParameter(form, p));
            // html.append(getJavaScriptIDParameter(p));
            html.append(getCssClassForElement(obj, userCssClassAdded, "portal"));
            // $NON-NLS-1$
            html.append("><span servoy:id='info'></span>\n<table cellpadding='0' cellspacing='0' class='portal'>\n");
        }
        int yOffset = 0;
        if (listViewMode) {
            if (obj instanceof Portal) {
                Iterator<IPersist> it = obj.getAllObjects();
                boolean isYOffsetSet = false;
                while (it.hasNext()) {
                    IPersist element = it.next();
                    if (element instanceof Field || element instanceof GraphicalComponent || element instanceof Bean) {
                        Point l = ((IFormElement) element).getLocation();
                        // unknown where to add
                        if (l == null)
                            continue;
                        if (l.y >= startY && l.y < endY) {
                            if (!isYOffsetSet || yOffset > (l.y - startY)) {
                                yOffset = l.y - startY;
                                isYOffsetSet = true;
                            }
                        }
                    }
                }
            }
            css.addCSSBoundsHandler(new YOffsetCSSBoundsHandler(-startY - yOffset));
        } else {
            css.addCSSBoundsHandler(NoLocationCSSBoundsHandler.INSTANCE);
        }
        html.append("<tr><td height='99%'><table border=0 cellpadding=0 cellspacing=0 width='100%'>\n");
        if (addHeaders) {
            Map<String, GraphicalComponent> labelsFor = new HashMap<String, GraphicalComponent>();
            html.append("<thead ");
            // if (sortable) html.append("servoy:id='header'");
            html.append("servoy:id='header'");
            html.append("><tr class='headerbuttons'>\n");
            Iterator<IPersist> it1 = obj.getAllObjects(PositionComparator.XY_PERSIST_COMPARATOR);
            while (it1.hasNext()) {
                IPersist element = it1.next();
                if (element instanceof GraphicalComponent && ((GraphicalComponent) element).getLabelFor() != null && !((GraphicalComponent) element).getLabelFor().equals("")) {
                    labelsFor.put(((GraphicalComponent) element).getLabelFor(), (GraphicalComponent) element);
                }
            }
            boolean usesImageMedia = false;
            boolean hasAtLeastOneLabelFor = false;
            Iterator<IPersist> it2 = obj.getAllObjects(PositionComparator.XY_PERSIST_COMPARATOR);
            while (it2.hasNext()) {
                IPersist element = it2.next();
                if (element instanceof Field || element instanceof GraphicalComponent || element instanceof Bean) {
                    if (element instanceof GraphicalComponent && ((GraphicalComponent) element).getLabelFor() != null) {
                        continue;
                    }
                    Point l = ((IFormElement) element).getLocation();
                    if (l == null) {
                        // unkown where to add
                        continue;
                    }
                    if (l.y >= startY && l.y < endY) {
                        GraphicalComponent label = labelsFor.get(((IFormElement) element).getName());
                        if (label != null)
                            hasAtLeastOneLabelFor = true;
                    }
                }
            }
            int currentColumnCount = 0;
            int headerHeight = 0;
            it2 = obj.getAllObjects(PositionComparator.XY_PERSIST_COMPARATOR);
            while (it2.hasNext()) {
                IPersist element = it2.next();
                if (element instanceof Field || element instanceof GraphicalComponent || element instanceof Bean) {
                    if (element instanceof GraphicalComponent && ((GraphicalComponent) element).getLabelFor() != null) {
                        continue;
                    }
                    Point l = ((IFormElement) element).getLocation();
                    if (l == null) {
                        // unkown where to add
                        continue;
                    }
                    if (l.y >= startY && l.y < endY) {
                        currentColumnCount++;
                        html.append("<th ");
                        // if (sortable) html.append(getWicketIDParameter(element));
                        html.append(getWicketIDParameter(form, element));
                        int w = ((IFormElement) element).getSize().width;
                        // minus left padding from css for th
                        w = w - 2;
                        // html.append("height='");
                        // html.append( ((IFormElement)element).getSize().height );
                        // html.append("' ");
                        TextualStyle styleObj = new TextualStyle();
                        GraphicalComponent label = labelsFor.get(((IFormElement) element).getName());
                        if (label != null) {
                            if (currentColumnCount == 1)
                                headerHeight = label.getSize().height;
                            html.append(' ');
                            BorderAndPadding ins = applyBaseComponentProperties(label, form, styleObj, (Insets) DEFAULT_LABEL_PADDING.clone(), null, sp);
                            // some css attributes were not applied
                            Pair<IStyleSheet, IStyleRule> styleInfo = ComponentFactory.getStyleForBasicComponent(sp, label, form);
                            Border cssBorder = null;
                            if (styleInfo != null) {
                                IStyleRule s = styleInfo.getRight();
                                IStyleSheet ss = styleInfo.getLeft();
                                if (ss != null && s != null) {
                                    addAttributeToStyle(styleObj, CSS.Attribute.COLOR.toString(), s.getValue(CSS.Attribute.COLOR.toString()));
                                    addAttributeToStyle(styleObj, CSS.Attribute.BACKGROUND_COLOR.toString(), s.getValue(CSS.Attribute.BACKGROUND_COLOR.toString()));
                                    addAttributeToStyle(styleObj, CSS.Attribute.FONT.toString(), s.getValue(CSS.Attribute.FONT.toString()));
                                    addAttributeToStyle(styleObj, CSS.Attribute.FONT_FAMILY.toString(), s.getValue(CSS.Attribute.FONT_FAMILY.toString()));
                                    addAttributeToStyle(styleObj, CSS.Attribute.FONT_SIZE.toString(), s.getValue(CSS.Attribute.FONT_SIZE.toString()));
                                    addAttributeToStyle(styleObj, CSS.Attribute.FONT_STYLE.toString(), s.getValue(CSS.Attribute.FONT_STYLE.toString()));
                                    addAttributeToStyle(styleObj, CSS.Attribute.FONT_VARIANT.toString(), s.getValue(CSS.Attribute.FONT_VARIANT.toString()));
                                    addAttributeToStyle(styleObj, CSS.Attribute.FONT_WEIGHT.toString(), s.getValue(CSS.Attribute.FONT_WEIGHT.toString()));
                                    cssBorder = ss.getBorder(s);
                                }
                            }
                            if (ins.border != null)
                                w = w - ins.border.left - ins.border.right;
                            applyTextProperties(label, styleObj);
                            TextualStyle bgborderstyleObj = new TextualStyle();
                            if (!sortable) {
                                bgborderstyleObj.setProperty("text-align", styleObj.getProperty("text-align"));
                                bgborderstyleObj.setProperty("color", styleObj.getProperty("color"));
                            }
                            if (label.getImageMediaID() <= 0) {
                                bgborderstyleObj.setProperty("background-image", "none");
                                usesImageMedia = false;
                            } else {
                                usesImageMedia = true;
                                // always remove background image here
                                styleObj.remove(CSS.Attribute.BACKGROUND_IMAGE.toString());
                            }
                            String styleObjBgColor = styleObj.getProperty("background-color");
                            if (styleObjBgColor != null && !"".equals(styleObjBgColor)) {
                                bgborderstyleObj.setProperty("background-color", styleObjBgColor);
                            }
                            // unless specified, set the font-weight for <th> to normal, as disabled parent component will make the font bold by default and we don't want that
                            if (styleObj.getProperty(CSS.Attribute.FONT_WEIGHT.toString()) == null) {
                                bgborderstyleObj.setProperty(CSS.Attribute.FONT_WEIGHT.toString(), "normal", false);
                            }
                            if (cssBorder != null && label.getBorderType() == null)
                                ComponentFactoryHelper.createBorderCSSProperties(ComponentFactoryHelper.createBorderString(cssBorder), bgborderstyleObj);
                            else
                                ComponentFactoryHelper.createBorderCSSProperties(label.getBorderType(), bgborderstyleObj);
                            if (headerHeight > 0)
                                bgborderstyleObj.setProperty(CSS.Attribute.HEIGHT.toString(), headerHeight + "px");
                            html.append(bgborderstyleObj.toString());
                            Enumeration<Object> e = bgborderstyleObj.keys();
                            while (e.hasMoreElements()) {
                                String key = (String) e.nextElement();
                                styleObj.remove(key);
                            }
                            if (cssBorder != null || label.getBorderType() != null) {
                                for (Attribute att : ServoyStyleSheet.borderAttributes) {
                                    // make sure all border attributes are removed
                                    styleObj.remove(att.toString());
                                }
                                for (String extendedStyleAttribute : ServoyStyleSheet.borderAttributesExtensions) {
                                    // make sure all border attributes are removed
                                    styleObj.remove(extendedStyleAttribute);
                                }
                            }
                        } else {
                            // If there is no label-for, we put a default right-border to all columns except the last.
                            if (!hasAtLeastOneLabelFor) {
                                TextualStyle defaultBorder = new TextualStyle();
                                defaultBorder.setProperty("border-right", NO_LABELFOR_DEFAULT_BORDER_WIDTH + "px solid gray");
                                html.append(defaultBorder.toString());
                            }
                        }
                        if (sortable && !usesImageMedia) {
                            html.append(getCssClassForElement((AbstractBase) element, "sortable"));
                        } else {
                            html.append(getCssClassForElement((AbstractBase) element, "nosort"));
                        }
                        html.append("width='");
                        html.append(w);
                        html.append("' ");
                        html.append('>');
                        int headerW = w;
                        if (!hasAtLeastOneLabelFor)
                            headerW -= 1;
                        html.append("<table servoy:id='headerColumnTable' cellspacing='0' cellpadding='0' width='");
                        html.append(headerW).append("px'><tr>");
                        Object fontHeight = styleObj.get(CSS.Attribute.FONT_SIZE.toString());
                        int cellHeight = 13;
                        if (fontHeight != null) {
                            String sFontHeight = fontHeight.toString().toLowerCase();
                            if (sFontHeight.endsWith("px") || sFontHeight.endsWith("pt"))
                                sFontHeight = sFontHeight.substring(0, sFontHeight.length() - 2);
                            try {
                                cellHeight = Integer.parseInt(sFontHeight);
                                cellHeight += 2;
                            } catch (NumberFormatException ex) {
                                Debug.error(ex);
                            }
                        }
                        html.append("<td height='").append(cellHeight).append("px'>");
                        styleObj.setProperty("overflow", "hidden");
                        styleObj.setProperty("left", "0px");
                        styleObj.setProperty("right", "0px");
                        styleObj.setProperty("position", "absolute");
                        TextualStyle sortLinkStyle = new TextualStyle();
                        sortLinkStyle.setProperty("position", "relative");
                        int cellWidth = (headerW - SortableCellViewHeader.ARROW_WIDTH);
                        sortLinkStyle.setProperty("width", cellWidth + "px");
                        if (sortable) {
                            sortLinkStyle.setProperty("text-align", styleObj.getProperty("text-align"));
                            html.append("<a servoy:id='sortLink' ");
                            // if (element instanceof ISupportDataProviderID && ((ISupportDataProviderID)element).getDataProviderID() != null)
                            // {
                            // html.append("class='orderOff' ");
                            // }
                            html.append(sortLinkStyle.toString());
                            html.append('>');
                            html.append("<div servoy:id='headertext' ");
                            styleObj.setProperty("cursor", "pointer");
                            styleObj.setProperty("width", cellWidth + "px");
                            html.append(styleObj.toString());
                            html.append("></div>");
                            html.append("</a>");
                        } else {
                            html.append("<div servoy:id='sortLink' ");
                            html.append(sortLinkStyle.toString());
                            html.append('>');
                            html.append("<div servoy:id='headertext' ");
                            html.append(styleObj.toString());
                            html.append("></div>");
                            html.append("</div>");
                        }
                        html.append("</td><td valign='middle' align='right'>");
                        if (sortable) {
                            html.append("<img servoy:id='resizeBar'></img>");
                        } else {
                            html.append("<span servoy:id='resizeBar'>&nbsp;</span>");
                        // html.append("<span ");
                        // html.append(getWicketIDParameter(element));
                        // html.append(styleObj.toString());
                        // html.append("></span>");
                        }
                        html.append("</td></tr></table>\n");
                        html.append("</th>\n");
                    }
                }
            }
            // when the table has no horizontal scrollbar, then there should be no filler.
            if (!shouldFillAllHorizSpace) {
                html.append("<th");
                if (bgColor != null) {
                    html.append(" style=\"background-image: none; background-color: ");
                    html.append(PersistHelper.createColorString(bgColor));
                    html.append(";\"");
                }
                // add filler (need to be a space else safari & ie7 will not display correctly)
                html.append(">&nbsp;</th>\n");
            }
            html.append("</tr></thead>\n");
        }
        html.append("<tbody servoy:id='rowsContainerBody'>\n");
        StringBuffer columns = new StringBuffer();
        int firstComponentHeight = -1;
        if (listViewMode) {
            if (!(obj instanceof Portal)) {
                Iterator<Part> partIte = form.getParts();
                while (partIte.hasNext()) {
                    Part p = partIte.next();
                    if (p.getPartType() == Part.BODY) {
                        firstComponentHeight = p.getHeight() - startY;
                        break;
                    }
                }
            }
            StringBuffer sbElements = new StringBuffer();
            Iterator<?> it = obj instanceof Portal ? obj.getAllObjects() : form.getFormElementsSortedByFormIndex();
            while (it.hasNext()) {
                Object element = it.next();
                if (element instanceof Field || element instanceof GraphicalComponent || element instanceof Bean) {
                    Point l = ((IFormElement) element).getLocation();
                    // unknown where to add
                    if (l == null)
                        continue;
                    if (l.y >= startY && l.y < endY) {
                        if (obj instanceof Portal) {
                            Dimension d = ((IFormElement) element).getSize();
                            if (l.y + d.height - startY > firstComponentHeight)
                                firstComponentHeight = l.y + d.height - startY;
                        }
                        createTableViewComponentHTMLAndStyles((IFormElement) element, form, sbElements, css, bgColor, startY, endY, enableAnchoring, sp);
                        sbElements.append('\n');
                    }
                }
            }
            columns.append("<td><div servoy:id='listViewItem' class=\"listViewItem\" tabindex=\"-1\" style=\"position: absolute; height: ").append(firstComponentHeight - yOffset).append("px;");
            if (enableAnchoring || obj instanceof Portal) {
                columns.append(" left: 0px; right: 0px;");
            } else {
                columns.append(" width: ").append(form.getWidth()).append("px;");
            }
            columns.append("\">");
            columns.append(sbElements);
            columns.append("</div></td>\n");
        } else {
            Iterator<IPersist> it = obj.getAllObjects(PositionComparator.XY_PERSIST_COMPARATOR);
            while (it.hasNext()) {
                IPersist element = it.next();
                if (element instanceof Field || element instanceof GraphicalComponent || element instanceof Bean) {
                    if (element instanceof GraphicalComponent && ((GraphicalComponent) element).getLabelFor() != null) {
                        continue;
                    }
                    Point l = ((IFormElement) element).getLocation();
                    if (l == null) {
                        // unkown where to add
                        continue;
                    }
                    if (l.y >= startY && l.y < endY) {
                        columns.append("<td ");
                        if (element instanceof ISupportName) {
                            String name = ((ISupportName) element).getName();
                            if (((name != null) && (name.trim().length() > 0)) || addHeaders) {
                                // this column's cells can be made invisible (and <td> tag is the one that has to change)
                                // so we will link this <td> to a wicket component
                                columns.append("servoy:id='");
                                columns.append(ComponentFactory.getWebID(form, element));
                                columns.append("_' ");
                            }
                        }
                        if (firstComponentHeight == -1)
                            firstComponentHeight = ((IFormElement) element).getSize().height;
                        if (!addHeaders && !shouldFillAllHorizSpace) {
                            columns.append("width='");
                            int w = ((IFormElement) element).getSize().width;
                            // w = w - (2+2);  //minus left+rigth padding from css for th
                            columns.append(w);
                            columns.append("' ");
                        }
                        // columns.append("valign='middle' ");
                        columns.append('>');
                        String cssClass = TABLE_VIEW_CELL_CLASS;
                        if (element instanceof Field && ((Field) element).getDisplayType() == Field.COMBOBOX) {
                            cssClass += " " + COMBOBOX_CLASS;
                        }
                        columns.append("<div class='" + cssClass + "' style='position:relative'>");
                        TextualStyle classBasedStyle = createTableViewComponentHTMLAndStyles(element, form, columns, css, bgColor, startY, endY, false, sp);
                        if (element instanceof Field) {
                            int type = ((Field) element).getDisplayType();
                            if (type == Field.PASSWORD || type == Field.TEXT_FIELD || type == Field.TYPE_AHEAD || type == Field.TEXT_AREA) {
                                classBasedStyle.setProperty("float", "left");
                            }
                        }
                        columns.append("</div>\n");
                        columns.append("</td>\n");
                    }
                }
            }
        }
        // no filler when the tableview has no horizontal scrollbar.
        if (!shouldFillAllHorizSpace) {
            // add filler (need to be a space else safari & ie7 will not display correctly)
            columns.append("<td>&nbsp;</td>\n");
        }
        html.append("<tr servoy:id='rows' ");
        html.append("height='");
        html.append(firstComponentHeight - yOffset);
        html.append("' ");
        if ((obj instanceof ISupportRowBGColorScript) && (((ISupportRowBGColorScript) obj).getRowBGColorScript() == null || ((ISupportRowBGColorScript) obj).getRowBGColorScript().trim().length() == 0)) {
            html.append("class='even'");
        }
        html.append(">\n");
        html.append(columns);
        html.append("</tr>\n");
        html.append("</tbody></table>\n");
        html.append("</td></tr>\n");
        html.append("<tr valign='bottom'>\n");
        html.append("<td servoy:id='navigator' height='1%'>&nbsp;</td>\n");
        html.append("</tr>\n");
        html.append("</table>\n");
        if (!(obj instanceof Form)) {
            html.append("</div>\n");
        }
        html.append("\n\n");
    } finally {
        css.removeCSSBoundsHandler();
    }
}
Also used : IForm(com.servoy.j2db.IForm) Form(com.servoy.j2db.persistence.Form) WebForm(com.servoy.j2db.server.headlessclient.WebForm) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) HashMap(java.util.HashMap) WeakHashMap(java.util.WeakHashMap) Attribute(javax.swing.text.html.CSS.Attribute) ISupportScrollbars(com.servoy.j2db.persistence.ISupportScrollbars) GraphicalComponent(com.servoy.j2db.persistence.GraphicalComponent) ISupportName(com.servoy.j2db.persistence.ISupportName) Bean(com.servoy.j2db.persistence.Bean) Field(com.servoy.j2db.persistence.Field) Portal(com.servoy.j2db.persistence.Portal) ISupportRowBGColorScript(com.servoy.j2db.ui.ISupportRowBGColorScript) IStyleSheet(com.servoy.j2db.util.IStyleSheet) AbstractBase(com.servoy.j2db.persistence.AbstractBase) Point(java.awt.Point) Dimension(java.awt.Dimension) Point(java.awt.Point) IFormElement(com.servoy.j2db.persistence.IFormElement) ISupportAnchors(com.servoy.j2db.persistence.ISupportAnchors) IPersist(com.servoy.j2db.persistence.IPersist) Part(com.servoy.j2db.persistence.Part) IStyleRule(com.servoy.j2db.util.IStyleRule) MatteBorder(javax.swing.border.MatteBorder) Border(javax.swing.border.Border) TitledBorder(javax.swing.border.TitledBorder) EmptyBorder(javax.swing.border.EmptyBorder)

Example 30 with IFormElement

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

the class FormComponentPropertyType method getFCPropertyDescription.

/**
 * @param property
 * @param currentValue
 * @param fs
 * @param forms
 * @return
 */
private PropertyDescription getFCPropertyDescription(String property, JSONObject currentValue, FlattenedSolution fs, HashSet<String> forms, Map<String, PropertyDescription> cached) {
    PropertyDescription pd;
    if (currentValue != null) {
        String formName = currentValue.optString(SVY_FORM);
        PropertyDescription propertyDescription = cached.get(formName);
        if (propertyDescription != null) {
            return propertyDescription;
        }
        PropertyDescriptionBuilder pdBuilder = new PropertyDescriptionBuilder().withName(property).withType(FormComponentPropertyType.INSTANCE);
        PropertyDescription formDesc = new PropertyDescriptionBuilder().withName(SVY_FORM).withType(StringPropertyType.INSTANCE).build();
        pdBuilder.withProperty(SVY_FORM, formDesc);
        Form form = getForm(formName, fs);
        String testFormName = form.getName();
        boolean nested = false;
        if (form != null && !forms.add(testFormName)) {
            // $NON-NLS-1$
            Debug.error("recursive reference found between (List)FormComponents: " + forms);
            nested = true;
        }
        while (form != null) {
            List<IFormElement> formelements = form.getFlattenedObjects(null);
            for (IFormElement element : formelements) {
                if (element.getName() != null) {
                    WebObjectSpecification spec = WebComponentSpecProvider.getSpecProviderState().getWebComponentSpecification(FormTemplateGenerator.getComponentTypeName(element));
                    Collection<PropertyDescription> properties = spec.getProperties(FormComponentPropertyType.INSTANCE);
                    if (properties.size() > 0 && !nested) {
                        PropertyDescriptionBuilder nestedFormComponentBuilder = new PropertyDescriptionBuilder().withName(element.getName());
                        for (PropertyDescription nestedFormComponentPD : properties) {
                            Object object = ((AbstractBase) element).getProperty(nestedFormComponentPD.getName());
                            if (object instanceof JSONObject) {
                                nestedFormComponentBuilder.withProperty(nestedFormComponentPD.getName(), getFCPropertyDescription(nestedFormComponentPD.getName(), (JSONObject) object, fs, forms, cached));
                            }
                        }
                        pdBuilder.withProperty(element.getName(), nestedFormComponentBuilder.build());
                    } else {
                        pdBuilder.withProperty(element.getName(), spec);
                    }
                }
            }
            form = form.getExtendsForm();
        }
        forms.remove(testFormName);
        pd = pdBuilder.build();
        cached.put(formName, pd);
    } else {
        PropertyDescriptionBuilder pdBuilder = new PropertyDescriptionBuilder().withName(property).withType(FormComponentPropertyType.INSTANCE);
        PropertyDescription formDesc = new PropertyDescriptionBuilder().withName(SVY_FORM).withType(StringPropertyType.INSTANCE).build();
        pdBuilder.withProperty(SVY_FORM, formDesc);
        pd = pdBuilder.build();
    }
    return pd;
}
Also used : PropertyDescription(org.sablo.specification.PropertyDescription) IFormElement(com.servoy.j2db.persistence.IFormElement) WebObjectSpecification(org.sablo.specification.WebObjectSpecification) JSONObject(org.json.JSONObject) Form(com.servoy.j2db.persistence.Form) JSForm(com.servoy.j2db.scripting.solutionmodel.JSForm) PropertyDescriptionBuilder(org.sablo.specification.PropertyDescriptionBuilder) AbstractBase(com.servoy.j2db.persistence.AbstractBase) JSONObject(org.json.JSONObject)

Aggregations

IFormElement (com.servoy.j2db.persistence.IFormElement)42 IPersist (com.servoy.j2db.persistence.IPersist)20 ArrayList (java.util.ArrayList)15 Point (java.awt.Point)14 HashMap (java.util.HashMap)12 JSONObject (org.json.JSONObject)12 PropertyDescription (org.sablo.specification.PropertyDescription)11 Form (com.servoy.j2db.persistence.Form)8 GraphicalComponent (com.servoy.j2db.persistence.GraphicalComponent)8 Part (com.servoy.j2db.persistence.Part)8 FormElement (com.servoy.j2db.server.ngclient.FormElement)8 WebObjectSpecification (org.sablo.specification.WebObjectSpecification)8 Dimension (java.awt.Dimension)7 AbstractBase (com.servoy.j2db.persistence.AbstractBase)6 PropertyPath (com.servoy.j2db.server.ngclient.property.types.PropertyPath)6 BaseComponent (com.servoy.j2db.persistence.BaseComponent)5 LayoutContainer (com.servoy.j2db.persistence.LayoutContainer)5 Portal (com.servoy.j2db.persistence.Portal)4 ServoyJSONObject (com.servoy.j2db.util.ServoyJSONObject)4 IBasicWebObject (com.servoy.j2db.persistence.IBasicWebObject)3