use of com.servoy.j2db.persistence.IPersist in project servoy-client by Servoy.
the class FlattenedSolution method formCanBeInstantiated.
/**
* Check whether a form can be instantiated.
*
* @param form
* @return
*/
public boolean formCanBeInstantiated(Form form) {
if (form != null) {
if (form.isResponsiveLayout())
return true;
// forms without parts are abstract
List<Form> formHierarchy = new ArrayList<Form>();
formHierarchy.add(form);
Form f = form;
while (true) {
Iterator<IPersist> allObjects = f.getAllObjects();
while (allObjects.hasNext()) {
if (allObjects.next() instanceof Part) {
return true;
}
}
if (form instanceof FlattenedForm || f.getExtendsID() <= 0) {
// no (more) hierarchy to investigate
break;
}
f = getForm(f.getExtendsID());
if (f == null || formHierarchy.contains(f)) /* prevent cycles */
{
break;
}
formHierarchy.add(f);
}
}
return false;
}
use of com.servoy.j2db.persistence.IPersist in project servoy-client by Servoy.
the class PersistIndex method initDatasourceCache.
protected void initDatasourceCache(String datasource) {
if ((datasourceToPersist.size() == 0) || (datasource != null && datasourceToPersist.get(datasource) == null)) {
visit((persist) -> {
if (persist instanceof TableNode) {
String tableDs = ((TableNode) persist).getDataSource();
if (tableDs != null) {
ConcurrentMap<Class<? extends IPersist>, ConcurrentMap<String, IPersist>> dsMap = datasourceToPersist.get(tableDs);
if (dsMap == null) {
dsMap = new ConcurrentHashMap<>(4);
dsMap.put(ScriptCalculation.class, new ConcurrentHashMap<String, IPersist>(4));
dsMap.put(TableNode.class, new ConcurrentHashMap<String, IPersist>(4));
dsMap.put(AggregateVariable.class, new ConcurrentHashMap<String, IPersist>(4));
dsMap.put(ScriptMethod.class, new ConcurrentHashMap<String, IPersist>(4));
datasourceToPersist.put(tableDs, dsMap);
}
ConcurrentMap<String, IPersist> tableNodeCache = dsMap.get(TableNode.class);
Solution solution = (Solution) ((TableNode) persist).getAncestor(IRepository.SOLUTIONS);
tableNodeCache.put(solution.getName(), persist);
return IPersistVisitor.CONTINUE_TRAVERSAL;
}
} else {
ISupportChilds parent = persist.getParent();
if (persist instanceof ScriptCalculation) {
if (parent instanceof TableNode) {
ConcurrentMap<Class<? extends IPersist>, ConcurrentMap<String, IPersist>> dsMap = datasourceToPersist.get(((TableNode) parent).getDataSource());
addInDatasourceCache(dsMap.get(ScriptCalculation.class), persist, datasource);
} else {
Debug.error("Something wrong with ScriptCalculation " + ((ScriptCalculation) persist).getName() + " should have table as parent but the parent is: " + parent);
}
} else if (persist instanceof AggregateVariable) {
if (parent instanceof TableNode) {
ConcurrentMap<Class<? extends IPersist>, ConcurrentMap<String, IPersist>> dsMap = datasourceToPersist.get(((TableNode) parent).getDataSource());
addInDatasourceCache(dsMap.get(AggregateVariable.class), persist, datasource);
} else {
Debug.error("Something wrong with AggregateVariable " + ((ScriptCalculation) persist).getName() + " should have table as parent but the parent is: " + parent);
}
} else if (persist instanceof ScriptMethod && parent instanceof TableNode) {
ConcurrentMap<Class<? extends IPersist>, ConcurrentMap<String, IPersist>> dsMap = datasourceToPersist.get(((TableNode) parent).getDataSource());
addInDatasourceCache(dsMap.get(ScriptMethod.class), persist, datasource);
}
}
return persist instanceof Solution ? IPersistVisitor.CONTINUE_TRAVERSAL : IPersistVisitor.CONTINUE_TRAVERSAL_BUT_DONT_GO_DEEPER;
});
if (datasource != null && datasourceToPersist.get(datasource) == null) {
ConcurrentMap<Class<? extends IPersist>, ConcurrentMap<String, IPersist>> dsMap = new ConcurrentHashMap<>(4);
dsMap.put(ScriptCalculation.class, new ConcurrentHashMap<String, IPersist>(4));
dsMap.put(TableNode.class, new ConcurrentHashMap<String, IPersist>(4));
dsMap.put(AggregateVariable.class, new ConcurrentHashMap<String, IPersist>(4));
dsMap.put(ScriptMethod.class, new ConcurrentHashMap<String, IPersist>(4));
datasourceToPersist.put(datasource, dsMap);
}
}
}
use of com.servoy.j2db.persistence.IPersist in project servoy-client by Servoy.
the class WebForm method getFormAnchorInfo.
@SuppressWarnings("unchecked")
public FormAnchorInfo getFormAnchorInfo() {
formAnchorInfo = new FormAnchorInfo(formController.getName(), formController.getForm().getSize(), formController.getForm().getUUID());
final Map<String, ISupportAnchors> elements = new HashMap<String, ISupportAnchors>();
Iterator<IPersist> e1 = formController.getForm().getAllObjects();
while (e1.hasNext()) {
IPersist obj = e1.next();
if (obj instanceof ISupportAnchors && obj instanceof ISupportBounds) {
elements.put(ComponentFactory.getWebID(formController.getForm(), obj), (ISupportAnchors) obj);
}
}
// In case we are in table view.
if (view instanceof WebCellBasedView) {
WebCellBasedView formPart = (WebCellBasedView) view;
formAnchorInfo.addPart(Part.getDisplayName(Part.BODY), formPart.getMarkupId(), 50);
formAnchorInfo.isTableView = true;
formAnchorInfo.bodyContainerId = formPart.getMarkupId();
}
// Find the id of the form navigator, if any.
visitChildren(Component.class, new IVisitor() {
public Object component(Component component) {
if (component instanceof WebDefaultRecordNavigator) {
formAnchorInfo.navigatorWebId = component.getMarkupId();
return IVisitor.CONTINUE_TRAVERSAL;
} else if (component instanceof WebTabPanel) {
return IVisitor.CONTINUE_TRAVERSAL_BUT_DONT_GO_DEEPER;
} else
return IVisitor.CONTINUE_TRAVERSAL;
}
});
visitChildren(WebDataRenderer.class, new IVisitor() {
public Object component(Component component) {
WebDataRenderer formPart = (WebDataRenderer) component;
final FormPartAnchorInfo part = formAnchorInfo.addPart(formPart.getFormPartName(), formPart.getMarkupId(), formPart.getSize().height);
if (Part.getDisplayName(Part.BODY).equals(formPart.getFormPartName())) {
Component parent = formPart.getParent();
formAnchorInfo.bodyContainerId = parent.getMarkupId();
}
formPart.visitChildren(ISupportWebBounds.class, new IVisitor() {
public Object component(Component comp) {
String id = comp.getId();
ISupportAnchors obj = elements.get(id);
if (obj != null) {
int anchors = obj.getAnchors();
if (((anchors > 0 && anchors != IAnchorConstants.DEFAULT)) || (comp instanceof WebTabPanel) || (comp instanceof IButton)) {
Rectangle r = ((ISupportWebBounds) comp).getWebBounds();
if (r != null) {
if (anchors == 0)
anchors = IAnchorConstants.DEFAULT;
int hAlign = -1;
int vAlign = -1;
if (obj instanceof ISupportTextSetup) {
ISupportTextSetup alignedObj = (ISupportTextSetup) obj;
hAlign = alignedObj.getHorizontalAlignment();
vAlign = alignedObj.getVerticalAlignment();
}
String imageDisplayURL = null;
boolean isRandomParamRemoved = false;
if (comp instanceof IImageDisplay) {
Object[] aImageDisplayURL = WebBaseButton.getImageDisplayURL((IImageDisplay) comp, false);
imageDisplayURL = (String) aImageDisplayURL[0];
isRandomParamRemoved = ((Boolean) aImageDisplayURL[1]).booleanValue();
}
part.addAnchoredElement(comp.getMarkupId(), anchors, r, hAlign, vAlign, comp.getClass(), imageDisplayURL, isRandomParamRemoved);
}
}
}
return IVisitor.CONTINUE_TRAVERSAL;
}
});
return IVisitor.CONTINUE_TRAVERSAL_BUT_DONT_GO_DEEPER;
}
});
return formAnchorInfo;
}
use of com.servoy.j2db.persistence.IPersist 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'> </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("> </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> </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%'> </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();
}
}
use of com.servoy.j2db.persistence.IPersist in project servoy-client by Servoy.
the class SortableCellViewHeaderGroup method sort.
protected final void sort(final String name, final WebCellBasedView view, int modifiers) {
direction = Utils.getAsBoolean(sorted.get(name));
direction = !direction;
FormController fc = null;
try {
Iterator<IPersist> it = cellview.getAllObjects();
while (it.hasNext()) {
IPersist element = it.next();
if (element instanceof ISupportName && element instanceof ISupportDataProviderID) {
if (name.equals(ComponentFactory.getWebID(form, element))) {
IFoundSetInternal fs = ((FoundSetListWrapper) listView.getList()).getFoundSet();
if (fs != null) {
WebForm wf = listView.findParent(WebForm.class);
if (wf != null)
fc = wf.getController();
GraphicalComponent gc = (GraphicalComponent) view.labelsFor.get(((ISupportName) element).getName());
int labelForOnActionMethodId = 0;
if (gc != null) {
labelForOnActionMethodId = gc.getOnActionMethodID();
}
if (fc != null && labelForOnActionMethodId > 0) {
// execute on action
JSEvent event = new JSEvent();
event.setType(JSEvent.EventType.action);
event.setName(RepositoryHelper.getDisplayName(StaticContentSpecLoader.PROPERTY_ONSORTCMDMETHODID.getPropertyName(), Form.class));
event.setFormName(view.getDataAdapterList().getFormController().getName());
event.setModifiers(modifiers);
event.setElementName(gc.getName());
fc.executeFunction(String.valueOf(labelForOnActionMethodId), // $NON-NLS-1$
Utils.arrayMerge((new Object[] { event }), Utils.parseJSExpressions(gc.getFlattenedMethodArguments("onActionMethodID"))), true, null, false, // $NON-NLS-1$
"onActionMethodID");
}
String id = ((ISupportDataProviderID) element).getDataProviderID();
if (id != null) {
if (cellview instanceof Portal && !ScopesUtils.isVariableScope(id)) {
int idx = id.lastIndexOf('.');
if (idx > 0) {
id = id.substring(idx + 1);
}
}
IDataProvider dataProvider = null;
if (fc != null) {
dataProvider = fs.getFoundSetManager().getApplication().getFlattenedSolution().getDataproviderLookup(fs.getFoundSetManager(), fc.getForm()).getDataProvider(id);
}
if (!(fc != null && labelForOnActionMethodId > 0)) {
// in case there is no onAction definned
if (cellview instanceof Portal || fc == null || fc.getForm().getOnSortCmdMethodID() == 0) {
List<String> sortingProviders = null;
try {
sortingProviders = DBValueList.getShowDataproviders(fs.getFoundSetManager().getApplication().getFlattenedSolution().getValueList(((ISupportDataProviderID) element).getValuelistID()), (Table) fs.getTable(), dataProvider == null ? id : dataProvider.getDataProviderID(), fs.getFoundSetManager());
} catch (RepositoryException ex) {
Debug.error(ex);
}
if (sortingProviders == null) {
// no related sort, use sort on dataProviderID instead
sortingProviders = Collections.singletonList(dataProvider == null ? id : dataProvider.getDataProviderID());
}
List<SortColumn> list = (modifiers & Event.SHIFT_MASK) != 0 ? fs.getSortColumns() : new ArrayList<SortColumn>();
for (String sortingProvider : sortingProviders) {
FoundSetManager fsm = (FoundSetManager) fs.getFoundSetManager();
SortColumn sc = fsm.getSortColumn(fs.getTable(), sortingProvider, false);
if (sc != null && sc.getColumn().getDataProviderType() != IColumnTypes.MEDIA) {
for (SortColumn oldColumn : list) {
if (oldColumn.equalsIgnoreSortorder(sc)) {
sc = oldColumn;
break;
}
}
if (!list.contains(sc))
list.add(sc);
sc.setSortOrder(direction ? SortColumn.ASCENDING : SortColumn.DESCENDING);
}
fs.sort(list, false);
}
} else if (fc != null && fc.getForm().getOnSortCmdMethodID() != -1) {
JSEvent event = new JSEvent();
event.setType(JSEvent.EventType.none);
event.setName(RepositoryHelper.getDisplayName(StaticContentSpecLoader.PROPERTY_ONSORTCMDMETHODID.getPropertyName(), Form.class));
event.setFormName(view.getDataAdapterList().getFormController().getName());
event.setModifiers(modifiers);
fc.executeFunction(String.valueOf(fc.getForm().getOnSortCmdMethodID()), Utils.arrayMerge((new Object[] { dataProvider == null ? id : dataProvider.getDataProviderID(), Boolean.valueOf(direction), event }), // $NON-NLS-1$
Utils.parseJSExpressions(fc.getForm().getFlattenedMethodArguments("onSortCmdMethodID"))), true, null, false, // $NON-NLS-1$
"onSortCmdMethodID");
}
}
if ((modifiers & Event.SHIFT_MASK) == 0) {
sorted.clear();
}
sorted.put(name, new Boolean(direction));
listView.setCurrentPage(0);
}
}
break;
}
}
}
listView.modelChanged();
} catch (Exception e) {
if (fc != null) {
if (e instanceof ServoyException) {
((ServoyException) e).setContext(fc.toString());
} else {
ServoyException se = new ServoyException();
se.initCause(e);
se.setContext(fc.toString());
e = se;
}
}
Debug.error("error sorting foundset: " + sorted, e);
}
}
Aggregations