aboutsummaryrefslogtreecommitdiffstats
path: root/documentation/sqlcontainer/sqlcontainer-nonimplemented.asciidoc
blob: 595085822f690a40865a08093ec8be05328fdffb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
---
title: Non-Implemented Methods
order: 8
layout: page
---

[[sqlcontainer.nonimplemented]]
= Non-Implemented Methods

Due to the database connection inherent to the SQLContainer, some of the methods
from the container interfaces of Vaadin can not (or would not make sense to) be
implemented. These methods are listed below, and they will throw an
[classname]#UnsupportedOperationException# on invocation.


----
public boolean addContainerProperty(Object propertyId,
                                    Class<?> type,
                                    Object defaultValue)
public boolean removeContainerProperty(Object propertyId)
public Item addItem(Object itemId)
public Object addItemAt(int index)
public Item addItemAt(int index, Object newItemId)
public Object addItemAfter(Object previousItemId)
public Item addItemAfter(Object previousItemId, Object newItemId)
----

Additionally, the following methods of the [classname]#Item# interface are not
supported in the [classname]#RowItem# class:


----
public boolean addItemProperty(Object id, Property property)
public boolean removeItemProperty(Object id)
----

[[sqlcontainer.nonimplemented.getitemids]]
== About the getItemIds() method

To properly implement the Vaadin [classname]#Container# interface, a
[methodname]#getItemIds()# method has been implented in the
[classname]#SQLContainer#. By definition, this method returns a collection of
all the item IDs present in the container. What this means in the
[classname]#SQLContainer# case is that the container has to query the database
for the primary key columns of all the rows present in the connected database
table.

It is obvious that this could potentially lead to fetching tens or even hundreds
of thousands of rows in an effort to satisfy the method caller. This will
effectively kill the lazy loading properties of [classname]#SQLContainer# and
therefore the following warning is expressed here:


[WARNING]
====
It is highly recommended not to call the [methodname]#getitemIds()# method,
unless it is known that in the use case in question the item ID set will always
be of reasonable size.

====
import org.apache.batik.bridge.BridgeContext; import org.apache.batik.gvt.GraphicsNode; import org.apache.batik.gvt.TextNode; import org.w3c.dom.Element; import org.w3c.dom.Node; /** * Bridge class for the &lt;text> element. * This bridge will use the direct text painter if the text * for the element is simple. * * @author <a href="mailto:fop-dev@xml.apache.org">Apache XML FOP Development Team</a> * @version $Id: PSTextElementBridge.java,v 1.2 2003/03/07 09:46:30 jeremias Exp $ */ public class PSTextElementBridge extends SVGTextElementBridge { private PSTextPainter textPainter; /** * Constructs a new bridge for the &lt;text> element. * @param textPainter the text painter to use */ public PSTextElementBridge(PSTextPainter textPainter) { this.textPainter = textPainter; } /** * Create a text element bridge. * This set the text painter on the node if the text is simple. * @param ctx the bridge context * @param e the svg element * @return the text graphics node created by the super class */ public GraphicsNode createGraphicsNode(BridgeContext ctx, Element e) { GraphicsNode node = super.createGraphicsNode(ctx, e); /* this code is worthless I think. PSTextPainter does a much better job * at determining whether to stroke or not. */ if (true/*node != null && isSimple(ctx, e, node)*/) { ((TextNode)node).setTextPainter(getTextPainter()); } return node; } private PSTextPainter getTextPainter() { return this.textPainter; } /** * Check if text element contains simple text. * This checks the children of the text element to determine * if the text is simple. The text is simple if it can be rendered * with basic text drawing algorithms. This means there are no * alternate characters, the font is known and there are no effects * applied to the text. * * @param ctx the bridge context * @param element the svg text element * @param node the graphics node * @return true if this text is simple of false if it cannot be * easily rendered using normal drawString on the PDFGraphics2D */ private boolean isSimple(BridgeContext ctx, Element element, GraphicsNode node) { for (Node n = element.getFirstChild(); n != null; n = n.getNextSibling()) { switch (n.getNodeType()) { case Node.ELEMENT_NODE: if (n.getLocalName().equals(SVG_TSPAN_TAG) || n.getLocalName().equals(SVG_ALT_GLYPH_TAG)) { return false; } else if (n.getLocalName().equals(SVG_TEXT_PATH_TAG)) { return false; } else if (n.getLocalName().equals(SVG_TREF_TAG)) { return false; } break; case Node.TEXT_NODE: case Node.CDATA_SECTION_NODE: default: } } /*if (CSSUtilities.convertFilter(element, node, ctx) != null) { return false; }*/ return true; } }