summaryrefslogtreecommitdiffstats
path: root/documentation/datamodel
diff options
context:
space:
mode:
Diffstat (limited to 'documentation/datamodel')
-rw-r--r--documentation/datamodel/chapter-datamodel.asciidoc20
-rw-r--r--documentation/datamodel/datamodel-container.asciidoc834
-rw-r--r--documentation/datamodel/datamodel-itembinding.asciidoc377
-rw-r--r--documentation/datamodel/datamodel-items.asciidoc194
-rw-r--r--documentation/datamodel/datamodel-overview.asciidoc75
-rw-r--r--documentation/datamodel/datamodel-properties.asciidoc399
-rw-r--r--documentation/datamodel/img/beanitem-nested-beans.pngbin0 -> 3142 bytes
-rw-r--r--documentation/datamodel/img/beanitemcontainer-nested-beans.pngbin0 -> 18032 bytes
-rw-r--r--documentation/datamodel/img/datamodel-interfaces-hi.pngbin0 -> 170869 bytes
-rw-r--r--documentation/datamodel/img/datamodel-interfaces-lo.pngbin0 -> 41890 bytes
-rw-r--r--documentation/datamodel/original-drawings/beanitem-doublebinding.svg1026
-rw-r--r--documentation/datamodel/original-drawings/datamodel-interfaces.svg1321
12 files changed, 4246 insertions, 0 deletions
diff --git a/documentation/datamodel/chapter-datamodel.asciidoc b/documentation/datamodel/chapter-datamodel.asciidoc
new file mode 100644
index 0000000000..c28e5b716b
--- /dev/null
+++ b/documentation/datamodel/chapter-datamodel.asciidoc
@@ -0,0 +1,20 @@
+[[datamodel]]
+== Binding Components to Data
+
+((("Vaadin Data Model", id="term.datamodel", range="startofrange")))
+
+
+This chapter describes the Vaadin Data Model and shows how you can use it to
+bind components directly to data sources, such as database queries.
+
+
+include::datamodel-overview.asciidoc[leveloffset=+2]
+
+include::datamodel-properties.asciidoc[leveloffset=+2]
+
+include::datamodel-items.asciidoc[leveloffset=+2]
+
+include::datamodel-itembinding.asciidoc[leveloffset=+2]
+
+include::datamodel-container.asciidoc[leveloffset=+2]
+(((range="endofrange", startref="term.datamodel")))
diff --git a/documentation/datamodel/datamodel-container.asciidoc b/documentation/datamodel/datamodel-container.asciidoc
new file mode 100644
index 0000000000..8f88e7c8bf
--- /dev/null
+++ b/documentation/datamodel/datamodel-container.asciidoc
@@ -0,0 +1,834 @@
+---
+title: Collecting Items in Containers
+order: 5
+layout: page
+---
+
+[[datamodel.container]]
+= Collecting Items in Containers
+
+((("[classname]#Container#", id="term.datamodel.container", range="startofrange")))
+
+
+The [classname]#Container# interface is the highest containment level of the
+Vaadin data model, for containing items (rows) which in turn contain properties
+(columns). Containers can therefore represent tabular data, which can be viewed
+in a [classname]#Table# or some other selection component, as well as
+hierarchical data.
+
+The items contained in a container are identified by an __item identifier__ or
+__IID__, and the properties by a __property identifier__ or __PID__.
+
+[[datamodel.container.intro]]
+== Basic Use of Containers
+
+The basic use of containers involves creating one, adding items to it, and
+binding it as a container data source of a component.
+
+[[datamodel.container.intro.default]]
+=== Default Containers and Delegation
+
+Before saying anything about creation of containers, it should be noted that all
+components that can be bound to a container data source are by default bound to
+a default container. For example, [classname]#Table# is bound to a
+[classname]#IndexedContainer#, [classname]#Tree# to a
+[classname]#HierarchicalContainer#, and so forth.
+
+All of the user interface components using containers also implement the
+relevant container interfaces themselves, so that the access to the underlying
+data source is delegated through the component.
+
+
+----
+// Create a table with one column
+Table table = new Table("My Table");
+table.addContainerProperty("col1", String.class, null);
+
+// Access items and properties through the component
+table.addItem("row1"); // Create item by explicit ID
+Item item1 = table.getItem("row1");
+Property property1 = item1.getItemProperty("col1");
+property1.setValue("some given value");
+
+// Equivalent access through the container
+Container container = table.getContainerDataSource();
+container.addItem("row2");
+Item item2 = container.getItem("row2");
+Property property2 = item2.getItemProperty("col1");
+property2.setValue("another given value");
+----
+
+
+[[datamodel.container.intro.creating]]
+=== Creating and Binding a Container
+
+A container is created and bound to a component as follows:
+
+
+----
+// Create a container of some type
+Container container = new IndexedContainer();
+
+// Initialize the container as required by the container type
+container.addContainerProperty("name", String.class, "none");
+container.addContainerProperty("volume", Double.class, 0.0);
+
+... add items ...
+
+// Bind it to a component
+Table table = new Table("My Table");
+table.setContainerDataSource(container);
+----
+
+Most components that can be bound to a container allow passing it also in the
+constructor, in addition to using [methodname]#setContainerDataSource()#.
+Creation of the container depends on its type. For some containers, such as the
+[classname]#IndexedContainer#, you need to define the contained properties
+(columns) as was done above, while some others determine them otherwise. The
+definition of a property with [methodname]#addContainerProperty()# requires a
+unique property ID, type, and a default value. You can also give
+[parameter]#null#.
+
+Vaadin has a several built-in in-memory container implementations, such as
+[classname]#IndexedContainer# and [classname]#BeanItemContainer#, which are easy
+to use for setting up nonpersistent data storages. For persistent data, either
+the built-in [classname]#SQLContainer# or the [classname]#JPAContainer# add-on
+container can be used.
+
+
+[[datamodel.container.intro.adding]]
+=== Adding Items and Accessing Properties
+
+Items can be added to a container with the [methodname]#addItem()# method. The
+parameterless version of the method automatically generates the item ID.
+
+
+----
+// Create an item
+Object itemId = container.addItem();
+----
+
+Properties can be requested from container by first requesting an item with
+[methodname]#getItem()# and then getting the properties from the item with
+[methodname]#getItemProperty()#.
+
+
+----
+// Get the item object
+Item item = container.getItem(itemId);
+
+// Access a property in the item
+Property<String> nameProperty =
+ item.getItemProperty("name");
+
+// Do something with the property
+nameProperty.setValue("box");
+----
+
+You can also get a property directly by the item and property ids with
+[methodname]#getContainerProperty()#.
+
+
+----
+container.getContainerProperty(itemId, "volume").setValue(5.0);
+----
+
+
+[[datamodel.container.intro.givenid]]
+=== Adding Items by Given ID
+
+Some containers, such as [classname]#IndexedContainer# and
+[classname]#HierarchicalContainer#, allow adding items by a given ID, which can
+be any [classname]#Object#.
+
+
+----
+Item item = container.addItem("agivenid");
+item.getItemProperty("name").setValue("barrel");
+Item.getItemProperty("volume").setValue(119.2);
+----
+
+Notice that the actual item __is not__ given as a parameter to the method, only
+its ID, as the interface assumes that the container itself creates all the items
+it contains. Some container implementations can provide methods to add
+externally created items, and they can even assume that the item ID object is
+also the item itself. Lazy containers might not create the item immediately, but
+lazily when it is accessed by its ID.
+
+
+
+[[datamodel.container.inner]]
+== Container Subinterfaces
+
+The [classname]#Container# interface contains inner interfaces that container
+implementations can implement to fulfill different features required by
+components that present container data.
+
+[interfacename]#Container.Filterable#:: Filterable containers allow filtering the contained items by filters, as
+described in <<datamodel.container.filtered>>.
+
+[interfacename]#Container.Hierarchical#:: Hierarchical containers allow representing hierarchical relationships between
+items and are required by the [classname]#Tree# and [classname]#TreeTable#
+components. The [classname]#HierarchicalContainer# is a built-in in-memory
+container for hierarchical data, and is used as the default container for the
+tree components. The [classname]#FilesystemContainer# provides access to
+browsing the content of a file system. Also [classname]#JPAContainer# is
+hierarchical, as described in
+<<dummy/../../../framework/jpacontainer/jpacontainer-usage#jpacontainer.usage.hierarchical,"Hierarchical
+Container">>.
+
+[interfacename]#Container.Indexed#:: An indexed container allows accessing items by an index number, not just their
+item ID. This feature is required by some components, especially
+[classname]#Table#, which needs to provide lazy access to large containers. The
+[classname]#IndexedContainer# is a basic in-memory implementation, as described
+in <<datamodel.container.indexedcontainer>>.
+
+[interfacename]#Container.Ordered#:: An ordered container allows traversing the items in successive order in either
+direction. Most built-in containers are ordered.
+
+[interfacename]#Container.SimpleFilterable#:: This interface enables filtering a container by string matching with
+[methodname]#addContainerFilter()#. The filtering is done by either searching
+the given string anywhere in a property value, or as its prefix.
+
+[interfacename]#Container.Sortable#:: A sortable container is required by some components that allow sorting the
+content, such as [classname]#Table#, where the user can click a column header to
+sort the table by the column. Some other components, such as
+[classname]#Calendar#, may require that the content is sorted to be able to
+display it properly. Depending on the implementation, sorting can be done only
+when the [methodname]#sort()# method is called, or the container is
+automatically kept in order according to the last call of the method.
+
+
+
+See the API documentation for a detailed description of the interfaces.
+
+
+[[datamodel.container.indexedcontainer]]
+== [classname]#IndexedContainer#
+
+The [classname]#IndexedContainer# is an in-memory container that implements the
+[interfacename]#Indexed# interface to allow referencing the items by an index.
+[classname]#IndexedContainer# is used as the default container in most selection
+components in Vaadin.
+
+The properties need to be defined with [methodname]#addContainerProperty()#,
+which takes the property ID, type, and a default value. This must be done before
+any items are added to the container.
+
+
+----
+// Create the container
+IndexedContainer container = new IndexedContainer();
+
+// Define the properties (columns)
+container.addContainerProperty("name", String.class, "noname");
+container.addContainerProperty("volume", Double.class, -1.0d);
+
+// Add some items
+Object content[][] = { {"jar", 2.0}, {"bottle", 0.75},
+ {"can", 1.5}};
+for (Object[] row: content) {
+ Item newItem = container.getItem(container.addItem());
+ newItem.getItemProperty("name").setValue(row[0]);
+ newItem.getItemProperty("volume").setValue(row[1]);
+}
+----
+
+New items are added with [methodname]#addItem()#, which returns the item ID of
+the new item, or by giving the item ID as a parameter as was described earlier.
+Note that the [classname]#Table# component, which has
+[classname]#IndexedContainer# as its default container, has a conveniency
+[methodname]#addItem()# method that allows adding items as object vectors
+containing the property values.
+
+The container implements the [interfacename]#Container.Indexed# feature to allow
+accessing the item IDs by their index number, with [methodname]#getIdByIndex()#,
+etc. The feature is required mainly for internal purposes of some components,
+such as [classname]#Table#, which uses it to enable lazy transmission of table
+data to the client-side.
+
+
+[[datamodel.container.beancontainer]]
+== [classname]#BeanContainer#
+
+The [classname]#BeanContainer# is an in-memory container for JavaBean objects.
+Each contained bean is wrapped inside a [classname]#BeanItem# wrapper. The item
+properties are determined automatically by inspecting the getter and setter
+methods of the class. This requires that the bean class has public visibility,
+local classes for example are not allowed. Only beans of the same type can be
+added to the container.
+
+The generic has two parameters: a bean type and an item identifier type. The
+item identifiers can be obtained by defining a custom resolver, using a specific
+item property for the IDs, or by giving item IDs explicitly. As such, it is more
+general than the [classname]#BeanItemContainer#, which uses the bean object
+itself as the item identifier, making the use usually simpler. Managing the item
+IDs makes [classname]#BeanContainer# more complex to use, but it is necessary in
+some cases where the [methodname]#equals()# or [methodname]#hashCode()# methods
+have been reimplemented in the bean.
+
+
+----
+// Here is a JavaBean
+public class Bean implements Serializable {
+ String name;
+ double energy; // Energy content in kJ/100g
+
+ public Bean(String name, double energy) {
+ this.name = name;
+ this.energy = energy;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public double getEnergy() {
+ return energy;
+ }
+
+ public void setEnergy(double energy) {
+ this.energy = energy;
+ }
+}
+
+void basic(VerticalLayout layout) {
+ // Create a container for such beans with
+ // strings as item IDs.
+ BeanContainer<String, Bean> beans =
+ new BeanContainer<String, Bean>(Bean.class);
+
+ // Use the name property as the item ID of the bean
+ beans.setBeanIdProperty("name");
+
+ // Add some beans to it
+ beans.addBean(new Bean("Mung bean", 1452.0));
+ beans.addBean(new Bean("Chickpea", 686.0));
+ beans.addBean(new Bean("Lentil", 1477.0));
+ beans.addBean(new Bean("Common bean", 129.0));
+ beans.addBean(new Bean("Soybean", 1866.0));
+
+ // Bind a table to it
+ Table table = new Table("Beans of All Sorts", beans);
+ layout.addComponent(table);
+}
+----
+See the http://demo.vaadin.com/book-examples-vaadin7/book#datamodel.container.beancontainer.basic[on-line example, window="_blank"].
+
+To use explicit item IDs, use the methods [methodname]#addItem(Object, Object)#,
+[methodname]#addItemAfter(Object, Object, Object)#, and
+[methodname]#addItemAt(int, Object, Object)#.
+
+It is not possible to add additional properties to the container, except
+properties in a nested bean.
+
+[[datamodel.container.beancontainer.nestedproperties]]
+=== Nested Properties
+
+((("nested bean properties", id="term.datamodel.container.beancontainer.nestedproperties", range="startofrange")))
+
+
+If you have a nested bean with an 1:1 relationship inside a bean type contained
+in a [classname]#BeanContainer# or [classname]#BeanItemContainer#, you can add
+its properties to the container by specifying them with
+[methodname]#addNestedContainerProperty()#. The feature is defined at the level
+of [classname]#AbstractBeanContainer#.
+((("[methodname]#addNestedContainerProperty()#")))
+
+As with the bean in a bean container, also a nested bean must have public
+visibility or otherwise an access exception is thrown. An intermediate reference
+from a bean in the bean container to a nested bean may have a null value.
+
+For example, let us assume that we have the following two beans with the first
+one nested inside the second one.
+
+
+----
+/** Bean to be nested */
+public class EqCoord implements Serializable {
+ double rightAscension; /* In angle hours */
+ double declination; /* In degrees */
+
+ ... setters and getters for the properties ...
+}
+
+/** Bean referencing a nested bean */
+public class Star implements Serializable {
+ String name;
+ EqCoord equatorial; /* Nested bean */
+
+ ... setters and getters for the properties ...
+}
+----
+See the http://demo.vaadin.com/book-examples-vaadin7/book#datamodel.container.beanitemcontainer.nestedbean[on-line example, window="_blank"].
+
+After creating the container, you can declare the nested properties by
+specifying their property identifiers with the
+[methodname]#addNestedContainerProperty()# in dot notation.
+
+
+----
+// Create a container for beans
+BeanItemContainer<Star> stars =
+ new BeanItemContainer<Star>(Star.class);
+
+// Declare the nested properties to be used in the container
+stars.addNestedContainerProperty("equatorial.rightAscension");
+stars.addNestedContainerProperty("equatorial.declination");
+
+// Add some items
+stars.addBean(new Star("Sirius", new EqCoord(6.75, 16.71611)));
+stars.addBean(new Star("Polaris", new EqCoord(2.52, 89.26417)));
+
+// Here the nested bean reference is null
+stars.addBean(new Star("Vega", null));
+----
+See the http://demo.vaadin.com/book-examples-vaadin7/book#datamodel.container.beanitemcontainer.nestedbean[on-line example, window="_blank"].
+
+If you bind such a container to a [classname]#Table#, you probably also need to
+set the column headers. Notice that the entire nested bean itself is still a
+property in the container and would be displayed in its own column. The
+[methodname]#toString()# method is used for obtaining the displayed value, which
+is by default an object reference. You normally do not want this, so you can
+hide the column with [methodname]#setVisibleColumns()#.
+((("[methodname]#setVisibleColumns()#")))
+
+
+----
+// Put them in a table
+Table table = new Table("Stars", stars);
+table.setColumnHeader("equatorial.rightAscension", "RA");
+table.setColumnHeader("equatorial.declination", "Decl");
+table.setPageLength(table.size());
+
+// Have to set explicitly to hide the "equatorial" property
+table.setVisibleColumns("name",
+ "equatorial.rightAscension", "equatorial.declination");
+----
+See the http://demo.vaadin.com/book-examples-vaadin7/book#datamodel.container.beanitemcontainer.nestedbean[on-line example, window="_blank"].
+
+The resulting table is shown in
+<<figure.datamodel.container.beancontainer.nestedproperties>>.
+
+[[figure.datamodel.container.beancontainer.nestedproperties]]
+.[classname]#Table# Bound to a [classname]#BeanContainer# with Nested Properties
+image::img/beanitemcontainer-nested-beans.png[]
+
+The bean binding in [classname]#AbstractBeanContainer# normally uses the
+[classname]#MethodProperty# implementation of the [classname]#Property#
+interface to access the bean properties using the setter and getter methods. For
+nested properties, the [classname]#NestedMethodProperty# implementation is used.
+((("[classname]#MethodProperty#")))
+((("[classname]#NestedMethodProperty#")))
+
+(((range="endofrange", startref="term.datamodel.container.beancontainer.nestedproperties")))
+
+ifdef::web[]
+[[datamodel.container.beancontainer.idresolver]]
+=== Defining a Bean ID Resolver
+
+If a bean ID resolver is set using [methodname]#setBeanIdResolver()# or
+[methodname]#setBeanIdProperty()#, the methods [methodname]#addBean()#,
+[methodname]#addBeanAfter()#, [methodname]#addBeanAt()# and
+[methodname]#addAll()# can be used to add items to the container. If one of
+these methods is called, the resolver is used to generate an identifier for the
+item (must not return [parameter]#null#).
+
+Note that explicit item identifiers can also be used when a resolver has been
+set by calling the [methodname]#addItem*()# methods - the resolver is only used
+when adding beans using the [methodname]#addBean*()# or
+[methodname]#addAll(Collection)# methods.
+
+endif::web[]
+
+
+[[datamodel.container.beanitemcontainer]]
+== [classname]#BeanItemContainer#
+
+[classname]#BeanItemContainer# is a container for JavaBean objects where each
+bean is wrapped inside a [classname]#BeanItem# wrapper. The item properties are
+determined automatically by inspecting the getter and setter methods of the
+class. This requires that the bean class has public visibility, local classes
+for example are not allowed. Only beans of the same type can be added to the
+container.
+
+[classname]#BeanItemContainer# is a specialized version of the
+[classname]#BeanContainer# described in <<datamodel.container.beancontainer>>.
+It uses the bean itself as the item identifier, which makes it a bit easier to
+use than [classname]#BeanContainer# in many cases. The latter is, however,
+needed if the bean has reimplemented the [methodname]#equals()# or
+[methodname]#hashCode()# methods.
+
+Let us revisit the example given in <<datamodel.container.beancontainer>> using
+the [classname]#BeanItemContainer#.
+
+
+----
+// Create a container for the beans
+BeanItemContainer<Bean> beans =
+ new BeanItemContainer<Bean>(Bean.class);
+
+// Add some beans to it
+beans.addBean(new Bean("Mung bean", 1452.0));
+beans.addBean(new Bean("Chickpea", 686.0));
+beans.addBean(new Bean("Lentil", 1477.0));
+beans.addBean(new Bean("Common bean", 129.0));
+beans.addBean(new Bean("Soybean", 1866.0));
+
+// Bind a table to it
+Table table = new Table("Beans of All Sorts", beans);
+----
+See the http://demo.vaadin.com/book-examples-vaadin7/book#datamodel.container.beanitemcontainer.basic[on-line example, window="_blank"].
+
+It is not possible to add additional properties to a
+[classname]#BeanItemContainer#, except properties in a nested bean, as described
+in <<datamodel.container.beancontainer>>. ((("nested bean
+properties")))
+
+
+ifdef::web[]
+[[datamodel.container.iterating]]
+== Iterating Over a Container
+
+As the items in a [classname]#Container# are not necessarily indexed, iterating
+over the items has to be done using an [classname]#Iterator#. The
+[methodname]#getItemIds()# method of [classname]#Container# returns a
+[classname]#Collection# of item identifiers over which you can iterate. The
+following example demonstrates a typical case where you iterate over the values
+of check boxes in a column of a [classname]#Table# component. The context of the
+example is the example used in
+<<dummy/../../../framework/components/components-table#components.table,"Table">>.
+
+
+----
+// Collect the results of the iteration into this string.
+String items = "";
+
+// Iterate over the item identifiers of the table.
+for (Iterator i = table.getItemIds().iterator(); i.hasNext();) {
+ // Get the current item identifier, which is an integer.
+ int iid = (Integer) i.next();
+
+ // Now get the actual item from the table.
+ Item item = table.getItem(iid);
+
+ // And now we can get to the actual checkbox object.
+ Button button = (Button)
+ (item.getItemProperty("ismember").getValue());
+
+ // If the checkbox is selected.
+ if ((Boolean)button.getValue() == true) {
+ // Do something with the selected item; collect the
+ // first names in a string.
+ items += item.getItemProperty("First Name")
+ .getValue() + " ";
+ }
+}
+
+// Do something with the results; display the selected items.
+layout.addComponent (new Label("Selected items: " + items));
+----
+
+Notice that the [methodname]#getItemIds()# returns an __unmodifiable
+collection__, so the [classname]#Container# may not be modified during
+iteration. You can not, for example, remove items from the
+[classname]#Container# during iteration. The modification includes modification
+in another thread. If the [classname]#Container# is modified during iteration, a
+[classname]#ConcurrentModificationException# is thrown and the iterator may be
+left in an undefined state.
+
+endif::web[]
+
+[[datamodel.container.gpc]]
+== [classname]#GeneratedPropertyContainer#
+
+[classname]#GeneratedPropertyContainer# is a container wrapper that allows
+defining generated values for properties (columns). The generated properties can
+shadow properties with the same IDs in the wrapped container. Removing a
+property from the wrapper hides it.
+
+The container is especially useful with [classname]#Grid#, which does not
+support generated columns or hiding columns like [classname]#Table# does.
+
+[[datamodel.container.gpc.wrapping]]
+=== Wrapping a Container
+
+A container to be wrapped must be a [interfacename]#Container.Indexed#. It can
+optionally also implement [interfacename]#Container.Sortable# or
+[interfacename]#Container.Filterable# to enable sorting and filtering the
+container, respectively.
+
+For example, let us consider the following container with some regular columns:
+
+
+----
+IndexedContainer container = new IndexedContainer();
+container.addContainerProperty("firstname", String.class, null);
+container.addContainerProperty("lastname", String.class, null);
+container.addContainerProperty("born", Integer.class, null);
+container.addContainerProperty("died", Integer.class, null);
+
+// Wrap it
+GeneratedPropertyContainer gpcontainer =
+ new GeneratedPropertyContainer(container);
+----
+
+
+[[datamodel.container.gpc.properties]]
+=== Generated Properties
+
+Now, you can add generated properties in the container with
+[methodname]#addGeneratedProperty()# by specifying a property ID and a
+[interfacename]#PropertyValueGenerator#. The method takes the ID of the
+generated property as first parameter; you can use a same ID as in the wrapped
+container to shadow its properties.
+
+You need to implement [methodname]#getType()#, which must return the class
+object of the value type of the property, and [methodname]#getValue()#, which
+returns the property value for the given item. The item ID and the property ID
+of the generated property are also given in case they are needed. You can access
+other properties of the item to compute the property value.
+
+
+----
+gpcontainer.addGeneratedProperty("lived",
+ new PropertyValueGenerator<Integer>() {
+ @Override
+ public Integer getValue(Item item, Object itemId,
+ Object propertyId) {
+ int born = (Integer)
+ item.getItemProperty("born").getValue();
+ int died = (Integer)
+ item.getItemProperty("died").getValue();
+ return Integer.valueOf(died - born);
+ }
+
+ @Override
+ public Class<Integer> getType() {
+ return Integer.class;
+ }
+});
+----
+
+You can access other items in the container, also their generated properties,
+although you should beware of accidental recursion.
+
+
+[[datamodel.container.gpc.using]]
+=== Using [classname]#GeneratedPropertyContainer#
+
+Finally, you need to bind the [classname]#GeneratedPropertyContainer# to the
+component instead of the wrapped container.
+
+
+----
+Grid grid = new Grid(gpcontainer);
+----
+
+When using [classname]#GeneratedPropertyContainer# in [classname]#Grid#, notice
+that generated columns are read-only, so you can not add grid rows with
+[methodname]#addRow()#. In editable mode, editor fields are not generated for
+generated columns.
+
+
+[[datamodel.container.gpc.sorting]]
+=== Sorting
+
+Even though the [classname]#GeneratedPropertyContainer# implements
+[interfacename]#Container.Sortable#, the wrapped container must also support it
+or otherwise sorting is disabled. Also, the generated properties are not
+normally sortable, but require special handling to enable sorting.
+
+
+
+[[datamodel.container.filtered]]
+== [classname]#Filterable# Containers
+
+((("Container", "Filterable", id="term.datamodel.container.filtered.filterable", range="startofrange")))
+
+
+((("[classname]#Filter# (in [classname]#Container#)", id="term.datamodel.container.filtered.filters", range="startofrange")))
+
+
+Containers that implement the [classname]#Container.Filterable# interface can be
+filtered. For example, the built-in [classname]#IndexedContainer# and the bean
+item containers implement it. Filtering is typically used for filtering the
+content of a [classname]#Table#.
+((("[classname]#IndexedContainer#")))
+((("[classname]#Table#")))
+
+Filters implement the [classname]#Filter# interface and you add them to a
+filterable container with the [methodname]#addContainerFilter()# method.
+Container items that pass the filter condition are kept and shown in the
+filterable component.
+((("[methodname]#addContainerFilter()#")))
+
+
+----
+Filter filter = new SimpleStringFilter("name",
+ "Douglas", true, false);
+table.addContainerFilter(filter);
+----
+See the http://demo.vaadin.com/book-examples-vaadin7/book#datamodel.container.filter.basic[on-line example, window="_blank"].
+
+If multiple filters are added to a container, they are evaluated using the
+logical AND operator so that only items that are passed by all the filters are
+kept.
+
+[[datamodel.container.filtered.composite]]
+=== Atomic and Composite Filters
+
+Filters can be classified as __atomic__ and __composite__. Atomic filters, such
+as [classname]#SimpleStringFilter#, define a single condition, usually for a
+specific container property. Composite filters make filtering decisions based on
+the result of one or more other filters. The built-in composite filters
+implement the logical operators AND, OR, or NOT.
+
+For example, the following composite filter would filter out items where the
+[literal]#++name++# property contains the name "Douglas" somewhere __or__ where
+the [literal]#++age++# property has value less than 42. The properties must have
+[classname]#String# and [classname]#Integer# types, respectively.
+
+
+----
+
+filter = new Or(new SimpleStringFilter("name",
+ "Douglas", true, false),
+ new Compare.Less("age", 42));
+----
+
+
+[[datamodel.container.filtered.builtin]]
+=== Built-In Filter Types
+
+The built-in filter types are the following:
+
+[classname]#SimpleStringFilter#:: ((("[classname]#SimpleStringFilter#")))
++
+Passes items where the specified property, that must be of [classname]#String#
+type, contains the given [parameter]#filterString# as a substring. If
+[parameter]#ignoreCase# is [parameter]#true#, the search is case insensitive. If
+the [parameter]#onlyMatchPrefix# is [parameter]#true#, the substring may only be
+in the beginning of the string, otherwise it may be elsewhere as well.
+
+[classname]#IsNull#:: ((("[classname]#IsNull# (filter)")))
++
+Passes items where the specified property has null value. For in-memory
+filtering, a simple [literal]#++==++# check is performed. For other containers,
+the comparison implementation is container dependent, but should correspond to
+the in-memory null check.
+
+[classname]#Equal#,[classname]#Greater#,
+ [classname]#Less#,
+ [classname]#GreaterOrEqual#, and[classname]#LessOrEqual#:: ((("[classname]#Equal# (filter)")))
+((("[classname]#Greater# (filter)")))
+((("[classname]#Less# (filter)")))
+((("[classname]#GreaterOrEqual# (filter)")))
+((("[classname]#LessOrEqual# (filter)")))
++
+The comparison filter implementations compare the specified property value to
+the given constant and pass items for which the comparison result is true. The
+comparison operators are included in the abstract [classname]#Compare# class.
+
++
+For the [classname]#Equal# filter, the [methodname]#equals()# method for the
+property is used in built-in in-memory containers. In other types of containers,
+the comparison is container dependent and may use, for example, database
+comparison operations.
+
++
+For the other filters, the property value type must implement the
+[classname]#Comparable# interface to work with the built-in in-memory
+containers. Again for the other types of containers, the comparison is container
+dependent.
+
+[classname]#And#and[classname]#Or#:: ((("[classname]#And# (filter)")))
+((("[classname]#Or# (filter)")))
++
+These logical operator filters are composite filters that combine multiple other
+filters.
+
+[classname]#Not#:: ((("[classname]#Not# (filter)")))
++
+The logical unary operator filter negates which items are passed by the filter
+given as the parameter.
+
+
+
+
+[[datamodel.container.filtered.custom]]
+=== Implementing Custom Filters
+
+A custom filter needs to implement the [classname]#Container.Filter# interface.
+
+A filter can use a single or multiple properties for the filtering logic. The
+properties used by the filter must be returned with the
+[methodname]#appliesToProperty()# method. If the filter applies to a
+user-defined property or properties, it is customary to give the properties as
+the first argument for the constructor of the filter.
+
+
+----
+class MyCustomFilter implements Container.Filter {
+ protected String propertyId;
+ protected String regex;
+
+ public MyCustomFilter(String propertyId, String regex) {
+ this.propertyId = propertyId;
+ this.regex = regex;
+ }
+
+ /** Tells if this filter works on the given property. */
+ @Override
+ public boolean appliesToProperty(Object propertyId) {
+ return propertyId != null &&
+ propertyId.equals(this.propertyId);
+ }
+----
+See the http://demo.vaadin.com/book-examples-vaadin7/book#datamodel.container.filter.custom[on-line example, window="_blank"].
+
+The actual filtering logic is done in the [methodname]#passesFilter()# method,
+which simply returns [literal]#++true++# if the item should pass the filter and
+[literal]#++false++# if it should be filtered out.
+
+
+----
+ /** Apply the filter on an item to check if it passes. */
+ @Override
+ public boolean passesFilter(Object itemId, Item item)
+ throws UnsupportedOperationException {
+ // Acquire the relevant property from the item object
+ Property p = item.getItemProperty(propertyId);
+
+ // Should always check validity
+ if (p == null || !p.getType().equals(String.class))
+ return false;
+ String value = (String) p.getValue();
+
+ // The actual filter logic
+ return value.matches(regex);
+ }
+}
+----
+See the http://demo.vaadin.com/book-examples-vaadin7/book#datamodel.container.filter.custom[on-line example, window="_blank"].
+
+You can use such a custom filter just like any other:
+
+
+----
+c.addContainerFilter(
+ new MyCustomFilter("Name", (String) tf.getValue()));
+----
+See the http://demo.vaadin.com/book-examples-vaadin7/book#datamodel.container.filter.custom[on-line example, window="_blank"].
+
+
+(((range="endofrange", startref="term.datamodel.container.filtered.filters")))
+(((range="endofrange", startref="term.datamodel.container.filtered.filterable")))
+
+(((range="endofrange", startref="term.datamodel.container")))
+
+
diff --git a/documentation/datamodel/datamodel-itembinding.asciidoc b/documentation/datamodel/datamodel-itembinding.asciidoc
new file mode 100644
index 0000000000..fd21b72267
--- /dev/null
+++ b/documentation/datamodel/datamodel-itembinding.asciidoc
@@ -0,0 +1,377 @@
+---
+title: Creating Forms by Binding Fields to Items
+order: 4
+layout: page
+---
+
+[[datamodel.itembinding]]
+= Creating Forms by Binding Fields to Items
+
+Most applications in existence have forms of some sort. Forms contain fields,
+which you want to bind to a data source, an item in the Vaadin data model.
+[classname]#FieldGroup# provides an easy way to bind fields to the properties of
+an item. You can use it by first creating a layout with some fields, and then
+call it to bind the fields to the data source. You can also let the
+[classname]#FieldGroup# create the fields using a field factory. It can also
+handle commits. Notice that [classname]#FieldGroup# is not a user interface
+component, so you can not add it to a layout.
+
+[[datamodel.itembinding.simple]]
+== Simple Binding
+
+Let us start with a data model that has an item with a couple of properties. The
+item could be any item type, as described earlier.
+
+
+----
+// Have an item
+PropertysetItem item = new PropertysetItem();
+item.addItemProperty("name", new ObjectProperty<String>("Zaphod"));
+item.addItemProperty("age", new ObjectProperty<Integer>(42));
+----
+
+Next, you would design a form for editing the data. The [classname]#FormLayout#
+(
+<<dummy/../../../framework/layout/layout-formlayout#layout.formlayout,"FormLayout">>
+is ideal for forms, but you could use any other layout as well.
+
+
+----
+// Have some layout and create the fields
+FormLayout form = new FormLayout();
+
+TextField nameField = new TextField("Name");
+form.addComponent(nameField);
+
+TextField ageField = new TextField("Age");
+form.addComponent(ageField);
+----
+
+Then, we can bind the fields to the data as follows:
+
+
+----
+// Now create the binder and bind the fields
+FieldGroup binder = new FieldGroup(item);
+binder.bind(nameField, "name");
+binder.bind(ageField, "age");
+----
+
+The above way of binding is not different from simply calling
+[methodname]#setPropertyDataSource()# for the fields. It does, however, register
+the fields in the field group, which for example enables buffering or validation
+of the fields using the field group, as described in
+<<datamodel.itembinding.buffering>>.
+
+Next, we consider more practical uses for a [classname]#FieldGroup#.
+
+
+[[datamodel.itembinding.fieldfactory]]
+== Using a [interfacename]#FieldFactory# to Build and Bind Fields
+
+Using the [methodname]#buildAndBind()# methods, [classname]#FieldGroup# can
+create fields for you using a [interfacename]#FieldGroupFieldFactory#, but you
+still have to add them to the correct position in your layout.
+
+
+----
+// Have some layout
+FormLayout form = new FormLayout();
+
+// Now create a binder that can also create the fields
+// using the default field factory
+FieldGroup binder = new FieldGroup(item);
+form.addComponent(binder.buildAndBind("Name", "name"));
+form.addComponent(binder.buildAndBind("Age", "age"));
+----
+
+
+[[datamodel.itembinding.formclass]]
+== Binding Member Fields
+
+The [methodname]#bindMemberFields()# method in [classname]#FieldGroup# uses
+reflection to bind the properties of an item to field components that are member
+variables of a class. Hence, if you implement a form as a class with the fields
+stored as member variables, you can use this method to bind them super-easy.
+
+The item properties are mapped to the members by the property ID and the name of
+the member variable. If you want to map a property with a different ID to a
+member, you can use the [literal]#++@PropertyId++# annotation for the member,
+with the property ID as the parameter.
+
+For example:
+
+
+----
+// Have an item
+PropertysetItem item = new PropertysetItem();
+item.addItemProperty("name", new ObjectProperty<String>("Zaphod"));
+item.addItemProperty("age", new ObjectProperty<Integer>(42));
+
+// Define a form as a class that extends some layout
+class MyForm extends FormLayout {
+ // Member that will bind to the "name" property
+ TextField name = new TextField("Name");
+
+ // Member that will bind to the "age" property
+ @PropertyId("age")
+ TextField ageField = new TextField("Age");
+
+ public MyForm() {
+ // Customize the layout a bit
+ setSpacing(true);
+
+ // Add the fields
+ addComponent(name);
+ addComponent(ageField);
+ }
+}
+
+// Create one
+MyForm form = new MyForm();
+
+// Now create a binder that can also creates the fields
+// using the default field factory
+FieldGroup binder = new FieldGroup(item);
+binder.bindMemberFields(form);
+
+// And the form can be used in an higher-level layout
+layout.addComponent(form);
+----
+See the http://demo.vaadin.com/book-examples-vaadin7/book#datamodel.itembinding.formclass.extended[on-line example, window="_blank"].
+
+[[datamodel.itembinding.formclass.customcomponent]]
+=== Encapsulating in [classname]#CustomComponent#
+
+Using a [classname]#CustomComponent# can be better for hiding the implementation
+details than extending a layout. Also, the use of the [classname]#FieldGroup#
+can be encapsulated in the form class.
+
+Consider the following as an alternative for the form implementation presented
+earlier:
+
+
+----
+// A form component that allows editing an item
+class MyForm extends CustomComponent {
+ // Member that will bind to the "name" property
+ TextField name = new TextField("Name");
+
+ // Member that will bind to the "age" property
+ @PropertyId("age")
+ TextField ageField = new TextField("Age");
+
+ public MyForm(Item item) {
+ FormLayout layout = new FormLayout();
+ layout.addComponent(name);
+ layout.addComponent(ageField);
+
+ // Now use a binder to bind the members
+ FieldGroup binder = new FieldGroup(item);
+ binder.bindMemberFields(this);
+
+ setCompositionRoot(layout);
+ }
+}
+
+// And the form can be used as a component
+layout.addComponent(new MyForm(item));
+----
+See the http://demo.vaadin.com/book-examples-vaadin7/book#datamodel.itembinding.formclass.customcomponent[on-line example, window="_blank"].
+
+
+
+[[datamodel.itembinding.buffering]]
+== Buffering Forms
+
+Just like for individual fields, as described in
+<<dummy/../../../framework/components/components-fields#components.fields.buffering,"Field
+Buffering">>, a [classname]#FieldGroup# can handle buffering the form content so
+that it is written to the item data source only when [methodname]#commit()# is
+called for the group. It runs validation for all fields in the group and writes
+their values to the item data source only if all fields pass the validation.
+Edits can be discarded, so that the field values are reloaded from the data
+source, by calling [methodname]#discard()#. Buffering is enabled by default, but
+can be disabled by calling [methodname]#setBuffered(false)# for the
+[classname]#FieldGroup#.
+
+
+----
+// Have an item of some sort
+final PropertysetItem item = new PropertysetItem();
+item.addItemProperty("name", new ObjectProperty<String>("Q"));
+item.addItemProperty("age", new ObjectProperty<Integer>(42));
+
+// Have some layout and create the fields
+Panel form = new Panel("Buffered Form");
+form.setContent(new FormLayout());
+
+// Build and bind the fields using the default field factory
+final FieldGroup binder = new FieldGroup(item);
+form.addComponent(binder.buildAndBind("Name", "name"));
+form.addComponent(binder.buildAndBind("Age", "age"));
+
+// Enable buffering (actually enabled by default)
+binder.setBuffered(true);
+
+// A button to commit the buffer
+form.addComponent(new Button("OK", new ClickListener() {
+ @Override
+ public void buttonClick(ClickEvent event) {
+ try {
+ binder.commit();
+ Notification.show("Thanks!");
+ } catch (CommitException e) {
+ Notification.show("You fail!");
+ }
+ }
+}));
+
+// A button to discard the buffer
+form.addComponent(new Button("Discard", new ClickListener() {
+ @Override
+ public void buttonClick(ClickEvent event) {
+ binder.discard();
+ Notification.show("Discarded!");
+ }
+}));
+----
+See the http://demo.vaadin.com/book-examples-vaadin7/book#datamodel.itembinding.formclass.customcomponent[on-line example, window="_blank"].
+
+
+[[datamodel.itembinding.beans]]
+== Binding Fields to a Bean
+
+The [classname]#BeanFieldGroup# makes it easier to bind fields to a bean. It
+also handles binding to nested beans properties. The build a field bound to a
+nested bean property, identify the property with dot notation. For example, if a
+[classname]#Person# bean has a [literal]#++address++# property with an
+[classname]#Address# type, which in turn has a [literal]#++street++# property,
+you could build a field bound to the property with
+[methodname]#buildAndBind("Street", "address.street")#.
+
+The input to fields bound to a bean can be validated using the Java Bean
+Validation API, as described in <<datamodel.itembinding.beanvalidation>>. The
+[classname]#BeanFieldGroup# automatically adds a [classname]#BeanValidator# to
+every field if a bean validation implementation is included in the classpath.
+
+
+[[datamodel.itembinding.beanvalidation]]
+== Bean Validation
+
+Vaadin allows using the Java Bean Validation API 1.0 (JSR-303) for validating
+input from fields bound to bean properties before the values are committed to
+the bean. The validation is done based on annotations on the bean properties,
+which are used for creating the actual validators automatically. See
+<<dummy/../../../framework/components/components-fields#components.fields.validation,"Field
+Validation">> for general information about validation.
+
+Using bean validation requires an implementation of the Bean Validation API,
+such as Hibernate Validator ( [filename]#hibernate-validator-4.2.0.Final.jar# or
+later) or Apache Bean Validation. The implementation JAR must be included in the
+project classpath when using the bean validation, or otherwise an internal error
+is thrown.
+
+Bean validation is especially useful when persisting entity beans with the
+Vaadin JPAContainer, described in
+<<dummy/../../../framework/jpacontainer/jpacontainer-overview.asciidoc#jpacontainer.overview,"Vaadin
+JPAContainer">>.
+
+[[datamodel.itembinding.beanvalidation.annotations]]
+=== Annotations
+
+The validation constraints are defined as annotations. For example, consider the
+following bean:
+
+
+----
+// Here is a bean
+public class Person implements Serializable {
+ @NotNull
+ @javax.validation.constraints.Size(min=2, max=10)
+ String name;
+
+ @Min(1)
+ @Max(130)
+ int age;
+
+ // ... setters and getters ...
+}
+----
+
+For a complete list of allowed constraints for different data types, please see
+the link:http://docs.oracle.com/javaee/6/tutorial/doc/gircz.html[Bean Validation
+API documentation].
+
+
+[[datamodel.itembinding.beanvalidation.validating]]
+=== Validating the Beans
+
+Validating a bean is done with a [classname]#BeanValidator#, which you
+initialize with the name of the bean property it should validate and add it the
+the editor field.
+
+In the following example, we validate a single unbuffered field:
+
+
+----
+Person bean = new Person("Mung bean", 100);
+BeanItem<Person> item = new BeanItem<Person> (bean);
+
+// Create an editor bound to a bean field
+TextField firstName = new TextField("First Name",
+ item.getItemProperty("name"));
+
+// Add the bean validator
+firstName.addValidator(new BeanValidator(Person.class, "name"));
+
+firstName.setImmediate(true);
+layout.addComponent(firstName);
+----
+
+In this case, the validation is done immediately after focus leaves the field.
+You could do the same for the other field as well.
+
+Bean validators are automatically created when using a
+[classname]#BeanFieldGroup#.
+
+
+----
+// Have a bean
+Person bean = new Person("Mung bean", 100);
+
+// Form for editing the bean
+final BeanFieldGroup<Person> binder =
+ new BeanFieldGroup<Person>(Person.class);
+binder.setItemDataSource(bean);
+layout.addComponent(binder.buildAndBind("Name", "name"));
+layout.addComponent(binder.buildAndBind("Age", "age"));
+
+// Buffer the form content
+binder.setBuffered(true);
+layout.addComponent(new Button("OK", new ClickListener() {
+ @Override
+ public void buttonClick(ClickEvent event) {
+ try {
+ binder.commit();
+ } catch (CommitException e) {
+ }
+ }
+}));
+----
+
+
+[[datamodel.itembinding.beanvalidation.locale]]
+=== Locale Setting for Bean Validation
+
+The validation error messages are defined in the bean validation implementation,
+in a [filename]#ValidationMessages.properties# file. The message is shown in the
+language specified with the locale setting for the form. The default language is
+English, but for example Hibernate Validator contains translations of the
+messages for a number of languages. If other languages are needed, you need to
+provide a translation of the properties file.
+
+
+
+
+
diff --git a/documentation/datamodel/datamodel-items.asciidoc b/documentation/datamodel/datamodel-items.asciidoc
new file mode 100644
index 0000000000..75a7c1ecf8
--- /dev/null
+++ b/documentation/datamodel/datamodel-items.asciidoc
@@ -0,0 +1,194 @@
+---
+title: Holding properties in Items
+order: 3
+layout: page
+---
+
+[[datamodel.items]]
+= Holding properties in Items
+
+The [classname]#Item# interface provides access to a set of named properties.
+Each property is identified by a __property identifier__ (PID) and a reference
+to such a property can be queried from an [classname]#Item# with
+[methodname]#getItemProperty()# using the identifier.
+
+Examples on the use of items include rows in a [classname]#Table#, with the
+properties corresponding to table columns, nodes in a [classname]#Tree#, and the
+the data bound to a [classname]#Form#, with item's properties bound to
+individual form fields.
+
+Items are generally equivalent to objects in the object-oriented model, but with
+the exception that they are configurable and provide an event handling
+mechanism. The simplest way to utilize [classname]#Item# interface is to use
+existing implementations. Provided utility classes include a configurable
+property set ( [classname]#PropertysetItem#) and a bean-to-item adapter (
+[classname]#BeanItem#). Also, a [classname]#Form# implements the interface and
+can therefore be used directly as an item.
+
+In addition to being used indirectly by many user interface components, items
+provide the basic data model underlying the [classname]#Form# component. In
+simple cases, forms can even be generated automatically from items. The
+properties of the item correspond to the fields of the form.
+
+The [classname]#Item# interface defines inner interfaces for maintaining the
+item property set and listening changes made to it.
+[classname]#PropertySetChangeEvent# events can be emitted by a class
+implementing the [classname]#PropertySetChangeNotifier# interface. They can be
+received through the [classname]#PropertySetChangeListener# interface.
+
+ifdef::web[]
+[[datamodel.items.propertysetitem]]
+== The [classname]#PropertysetItem# Implementation
+
+The [classname]#PropertysetItem# is a generic implementation of the
+[classname]#Item# interface that allows storing properties. The properties are
+added with [methodname]#addItemProperty()#, which takes a name and the property
+as parameters.
+
+The following example demonstrates a typical case of collecting
+[classname]#ObjectProperty# properties in an item:
+
+
+----
+PropertysetItem item = new PropertysetItem();
+item.addItemProperty("name", new ObjectProperty("Zaphod"));
+item.addItemProperty("age", new ObjectProperty(42));
+
+// Bind it to a component
+Form form = new Form();
+form.setItemDataSource(item);
+----
+
+endif::web[]
+
+[[datamodel.items.beanitem]]
+== Wrapping a Bean in a [classname]#BeanItem#
+
+The [classname]#BeanItem# implementation of the [classname]#Item# interface is a
+wrapper for Java Bean objects. In fact, only the setters and getters are
+required while serialization and other bean features are not, so you can wrap
+almost any POJOs with minimal requirements.
+
+
+----
+// Here is a bean (or more exactly a POJO)
+class Person {
+ String name;
+ int age;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public Integer getAge() {
+ return age;
+ }
+
+ public void setAge(Integer age) {
+ this.age = age.intValue();
+ }
+}
+
+// Create an instance of the bean
+Person bean = new Person();
+
+// Wrap it in a BeanItem
+BeanItem<Person> item = new BeanItem<Person>(bean);
+
+// Bind it to a component
+Form form = new Form();
+form.setItemDataSource(item);
+----
+
+You can use the [methodname]#getBean()# method to get a reference to the
+underlying bean.
+
+[[datamodel.items.beanitem.nested]]
+=== Nested Beans
+
+You may often have composite classes where one class "has a" another class. For
+example, consider the following [classname]#Planet# class which "has a"
+discoverer:
+
+
+----
+// Here is a bean with two nested beans
+public class Planet implements Serializable {
+ String name;
+ Person discoverer;
+
+ public Planet(String name, Person discoverer) {
+ this.name = name;
+ this.discoverer = discoverer;
+ }
+
+ ... getters and setters ...
+}
+
+...
+// Create an instance of the bean
+Planet planet = new Planet("Uranus",
+ new Person("William Herschel", 1738));
+----
+
+When shown in a [classname]#Form#, for example, you would want to list the
+properties of the nested bean along the properties of the composite bean. You
+can do that by binding the properties of the nested bean individually with a
+[classname]#MethodProperty# or [classname]#NestedMethodProperty#. You should
+usually hide the nested bean from binding as a property by listing only the
+bound properties in the constructor.
+
+
+----
+// Wrap it in a BeanItem and hide the nested bean property
+BeanItem<Planet> item = new BeanItem<Planet>(planet,
+ new String[]{"name"});
+
+// Bind the nested properties.
+// Use NestedMethodProperty to bind using dot notation.
+item.addItemProperty("discoverername",
+ new NestedMethodProperty(planet, "discoverer.name"));
+
+// The other way is to use regular MethodProperty.
+item.addItemProperty("discovererborn",
+ new MethodProperty<Person>(planet.getDiscoverer(),
+ "born"));
+----
+
+The difference is that [classname]#NestedMethodProperty# does not access the
+nested bean immediately but only when accessing the property values, while when
+using [classname]#MethodProperty# the nested bean is accessed when creating the
+method property. The difference is only significant if the nested bean can be
+null or be changed later.
+
+You can use such a bean item for example in a [classname]#Form# as follows:
+
+
+----
+// Bind it to a component
+Form form = new Form();
+form.setItemDataSource(item);
+
+// Nicer captions
+form.getField("discoverername").setCaption("Discoverer");
+form.getField("discovererborn").setCaption("Born");
+----
+
+[[figure.datamodel.items.beanitem.nested]]
+.A [classname]#Form# with Nested Bean Properties
+image::img/beanitem-nested-beans.png[]
+
+The [classname]#BeanContainer# and [classname]#BeanItemContainer# allow easy
+definition of nested bean properties with
+[methodname]#addNestedContainerProperty()#, as described in
+<<dummy/../../../framework/datamodel/datamodel-container#datamodel.container.beancontainer.nestedproperties,"Nested
+Properties">>.
+
+
+
+
+
diff --git a/documentation/datamodel/datamodel-overview.asciidoc b/documentation/datamodel/datamodel-overview.asciidoc
new file mode 100644
index 0000000000..e053400776
--- /dev/null
+++ b/documentation/datamodel/datamodel-overview.asciidoc
@@ -0,0 +1,75 @@
+---
+title: Overview
+order: 1
+layout: page
+---
+
+[[datamodel.overview]]
+= Overview
+
+The Vaadin Data Model is one of the core concepts of the library. To allow the
+view (user interface components) to access the data model of an application
+directly, we have introduced a standard data interface.
+
+The model allows binding user interface components directly to the data that
+they display and possibly allow to edit. There are three nested levels of
+hierarchy in the data model: __property__, __item__, and __container__. Using a
+spreadsheet application as an analogy, these would correspond to a cell, a row,
+and a table, respectively.
+
+.Vaadin Data Model
+image::img/datamodel-whitebg.png[]
+
+The Data Model is realized as a set of interfaces in the
+[classname]#com.vaadin.data# package. The package contains the
+[classname]#Property#, [classname]#Item#, and [classname]#Container# interfaces,
+along with a number of more specialized interfaces and classes.
+
+Notice that the Data Model does not define data representation, but only
+interfaces. This leaves the representation fully to the implementation of the
+containers. The representation can be almost anything, such as a plain old Java
+object (POJO) structure, a filesystem, or a database query.
+
+The Data Model is used heavily in the core user interface components of Vaadin,
+especially the field components, that is, components that implement the
+[classname]#Field# interface or more typically extend
+[classname]#AbstractField#, which defines many common features. A key feature of
+all the built-in field components is that they can either maintain their data by
+themselves or be bound to an external data source. The value of a field is
+always available through the [classname]#Property# interface. As more than one
+component can be bound to the same data source, it is easy to implement various
+viewer-editor patterns.
+
+The relationships of the various interfaces are shown in
+<<figure.datamodel.overview.relationships>>; the value change event and listener
+interfaces are shown only for the [classname]#Property# interface, while the
+notifier interfaces are omitted altogether.
+
+[[figure.datamodel.overview.relationships]]
+.Interface Relationships in Vaadin Data Model
+image::img/datamodel-interfaces-hi.png[]
+
+The Data Model has many important and useful features, such as support for
+change notification. Especially containers have many helper interfaces,
+including ones that allow indexing, ordering, sorting, and filtering the data.
+Also [classname]#Field# components provide a number of features involving the
+data model, such as buffering, validation, and lazy loading.
+
+Vaadin provides a number of built-in implementations of the data model
+interfaces. The built-in implementations are used as the default data models in
+many field components.
+
+In addition to the built-in implementations, many data model implementations,
+such as containers, are available as add-ons, either from the Vaadin Directory
+or from independent sources. Both commercial and free implementations exist. The
+JPAContainer, described in
+<<dummy/../../../framework/jpacontainer/jpacontainer-overview.asciidoc#jpacontainer.overview,"Vaadin
+JPAContainer">>, is the most often used conmmercial container add-on. The
+installation of add-ons is described in
+<<dummy/../../../framework/addons/addons-overview.asciidoc#addons.overview,"Using
+Vaadin Add-ons">>. Notice that unlike with most regular add-on components, you
+do not need to compile a widget set for add-ons that include just data model
+implementations.
+
+
+
diff --git a/documentation/datamodel/datamodel-properties.asciidoc b/documentation/datamodel/datamodel-properties.asciidoc
new file mode 100644
index 0000000000..d5d0d3e39d
--- /dev/null
+++ b/documentation/datamodel/datamodel-properties.asciidoc
@@ -0,0 +1,399 @@
+---
+title: Properties
+order: 2
+layout: page
+---
+
+[[datamodel.properties]]
+= Properties
+
+The [interfacename]#Property# interface is the base of the Vaadin Data Model. It
+provides a standardized API for a single data value object that can be read
+(get) and written (set). A property is always typed, but can optionally support
+data type conversions. The type of a property can be any Java class. Optionally,
+properties can provide value change events for following their changes.
+
+You can set the value of a property with [methodname]#setValue()# and read with
+[methodname]#getValue()#.
+
+In the following, we set and read the property value from a
+[classname]#TextField# component, which implements the [interfacename]#Property#
+interface to allow accessing the field value.
+
+
+----
+final TextField tf = new TextField("Name");
+
+// Set the value
+tf.setValue("The text field value");
+
+// When the field value is edited by the user
+tf.addValueChangeListener(
+ new Property.ValueChangeListener() {
+ public void valueChange(ValueChangeEvent event) {
+ // Do something with the new value
+ layout.addComponent(new Label(tf.getValue()));
+ }
+});
+----
+See the http://demo.vaadin.com/book-examples-vaadin7/book#datamodel.properties.basic[on-line example, window="_blank"].
+
+Changes in the property value usually fire a [classname]#ValueChangeEvent#,
+which can be handled with a [classname]#ValueChangeListener#. The event object
+provides reference to the property with [methodname]#getProperty()#. Note that
+its [methodname]#getValue()# method returns the value with [classname]#Object#
+type, so you need to cast it to the proper type.
+
+Properties are in themselves unnamed. They are collected in __items__, which
+associate the properties with names: the __Property Identifiers__ or __PID__s.
+Items can be further contained in containers and are identified with __Item
+Identifiers__ or __IID__s. In the spreadsheet analogy, __Property Identifiers__
+would correspond to column names and __Item Identifiers__ to row names. The
+identifiers can be arbitrary objects, but must implement the
+[methodname]#equals(Object)# and [methodname]#hashCode()# methods so that they
+can be used in any standard Java [classname]#Collection#.
+
+The [classname]#Property# interface can be utilized either by implementing the
+interface or by using some of the built-in property implementations. Vaadin
+includes a [classname]#Property# interface implementation for arbitrary function
+pairs and bean properties, with the [classname]#MethodProperty# class, and for
+simple object properties, with the [classname]#ObjectProperty# class, as
+described later.
+
+In addition to the simple components, selection components provide their current
+selection as the property value. In single selection mode, the property is a
+single item identifier, while in multiple selection mode it is a set of item
+identifiers. See the documentation of the selection components for further
+details.
+
+Components that can be bound to a property have an internal default data source
+object, typically a [classname]#ObjectProperty#, which is described later. As
+all such components are viewers or editors, also described later, so you can
+rebind a component to any data source with
+[methodname]#setPropertyDataSource()#.
+
+[[datamodel.properties.viewers]]
+== Property Viewers and Editors
+
+The most important function of the [classname]#Property# as well as of the other
+data model interfaces is to connect classes implementing the interface directly
+to editor and viewer classes. This means connecting a data source (model) to a
+user interface component (views) to allow editing or viewing the data model.
+
+A property can be bound to a component implementing the [classname]#Viewer#
+interface with [methodname]#setPropertyDataSource()#.
+
+
+----
+// Have a data model
+ObjectProperty property =
+ new ObjectProperty("Hello", String.class);
+
+// Have a component that implements Viewer
+Label viewer = new Label();
+
+// Bind it to the data
+viewer.setPropertyDataSource(property);
+----
+
+You can use the same method in the [classname]#Editor# interface to bind a
+component that allows editing a particular property type to a property.
+
+
+----
+// Have a data model
+ObjectProperty property =
+ new ObjectProperty("Hello", String.class);
+
+// Have a component that implements Viewer
+TextField editor = new TextField("Edit Greeting");
+
+// Bind it to the data
+editor.setPropertyDataSource(property);
+
+----
+
+As all field components implement the [classname]#Property# interface, you can
+bind any component implementing the [classname]#Viewer# interface to any field,
+assuming that the viewer is able the view the object type of the field.
+Continuing from the above example, we can bind a [classname]#Label# to the
+[classname]#TextField# value:
+
+
+----
+Label viewer = new Label();
+viewer.setPropertyDataSource(editor);
+
+// The value shown in the viewer is updated immediately
+// after editing the value in the editor (once it
+// loses the focus)
+editor.setImmediate(true);
+----
+
+If a field has validators, as described in
+<<dummy/../../../framework/components/components-fields#components.fields.validation,"Field
+Validation">>, the validators are executed before writing the value to the
+property data source, or by calling the [methodname]#validate()# or
+[methodname]#commit()# for the field.
+
+
+[[datamodel.properties.objectproperty]]
+== [classname]#ObjectProperty# Implementation
+
+The [classname]#ObjectProperty# class is a simple implementation of the
+[classname]#Property# interface that allows storing an arbitrary Java object.
+
+
+----
+// Have a component that implements Viewer interface
+final TextField tf = new TextField("Name");
+
+// Have a data model with some data
+String myObject = "Hello";
+
+// Wrap it in an ObjectProperty
+ObjectProperty property =
+ new ObjectProperty(myObject, String.class);
+
+// Bind the property to the component
+tf.setPropertyDataSource(property);
+----
+
+
+[[datamodel.properties.converter]]
+== Converting Between Property Type and Representation
+
+Fields allow editing a certain type, such as a [classname]#String# or
+[classname]#Date#. The bound property, on the other hand, could have some
+entirely different type. Conversion between a representation edited by the field
+and the model defined in the property is handler with a converter that
+implements the [interfacename]#Converter# interface.
+
+Most common type conversions, such as between string and integer, are handled by
+the default converters. They are created in a converter factory global in the
+application.
+
+[[datamodel.properties.converter.basic]]
+=== Basic Use of Converters
+
+The [methodname]#setConverter([interfacename]#Converter#)# method sets the
+converter for a field. The method is defined in [classname]#AbstractField#.
+
+
+----
+// Have an integer property
+final ObjectProperty<Integer> property =
+ new ObjectProperty<Integer>(42);
+
+// Create a TextField, which edits Strings
+final TextField tf = new TextField("Name");
+
+// Use a converter between String and Integer
+tf.setConverter(new StringToIntegerConverter());
+
+// And bind the field
+tf.setPropertyDataSource(property);
+----
+
+The built-in converters are the following:
+
+[[datamodel.properties.converter.basic.built-in]]
+.Built-in Converters
+[options="header"]
+|===============
+|Converter|Representation|Model
+|[classname]#StringToIntegerConverter#|[classname]#String#|[classname]#Integer#
+|[classname]#StringToDoubleConverter#|[classname]#String#|[classname]#Double#
+|[classname]#StringToNumberConverter#|[classname]#String#|[classname]#Number#
+|[classname]#StringToBooleanConverter#|[classname]#String#|[classname]#Boolean#
+|[classname]#StringToDateConverter#|[classname]#String#|[classname]#Date#
+|[classname]#DateToLongConverter#|[classname]#Date#|[classname]#Long#
+
+|===============
+
+
+
+In addition, there is a [classname]#ReverseConverter# that takes a converter as
+a parameter and reverses the conversion direction.
+
+If a converter already exists for a type, the
+[methodname]#setConverter([interfacename]#Class#)# retrieves the converter for
+the given type from the converter factory, and then sets it for the field. This
+method is used implicitly when binding field to a property data source.
+
+
+[[datamodel.properties.converter.custom]]
+=== Implementing a Converter
+
+A conversion always occurs between a __representation type__, edited by the
+field component, and a __model type__, that is, the type of the property data
+source. Converters implement the [interfacename]#Converter# interface defined in
+the [package]#com.vaadin.data.util.converter# package.
+
+For example, let us assume that we have a simple [classname]#Complex# type for
+storing complex values.
+
+
+----
+public class ComplexConverter
+ implements Converter<String, Complex> {
+ @Override
+ public Complex convertToModel(String value, Locale locale)
+ throws ConversionException {
+ String parts[] =
+ value.replaceAll("[\\(\\)]", "").split(",");
+ if (parts.length != 2)
+ throw new ConversionException(
+ "Unable to parse String to Complex");
+ return new Complex(Double.parseDouble(parts[0]),
+ Double.parseDouble(parts[1]));
+ }
+
+ @Override
+ public String convertToPresentation(Complex value,
+ Locale locale)
+ throws ConversionException {
+ return "("+value.getReal()+","+value.getImag()+")";
+ }
+
+ @Override
+ public Class<Complex> getModelType() {
+ return Complex.class;
+ }
+
+ @Override
+ public Class<String> getPresentationType() {
+ return String.class;
+ }
+}
+----
+
+The conversion methods get the locale for the conversion as a parameter.
+
+
+[[datamodel.properties.converter.converterfactory]]
+=== Converter Factory
+
+If a field does not directly allow editing a property type, a default converter
+is attempted to create using an application-global converter factory. If you
+define your own converters that you wish to include in the converter factory,
+you need to implement one yourself. While you could implement the
+[interfacename]#ConverterFactory# interface, it is usually easier to just extend
+[classname]#DefaultConverterFactory#.
+
+
+----
+class MyConverterFactory extends DefaultConverterFactory {
+ @Override
+ public <PRESENTATION, MODEL> Converter<PRESENTATION, MODEL>
+ createConverter(Class<PRESENTATION> presentationType,
+ Class<MODEL> modelType) {
+ // Handle one particular type conversion
+ if (String.class == presentationType &&
+ Complex.class == modelType)
+ return (Converter<PRESENTATION, MODEL>)
+ new ComplexConverter();
+
+ // Default to the supertype
+ return super.createConverter(presentationType,
+ modelType);
+ }
+}
+
+// Use the factory globally in the application
+Application.getCurrentApplication().setConverterFactory(
+ new MyConverterFactory());
+----
+
+
+
+ifdef::web[]
+[[datamodel.properties.implementing]]
+== Implementing the [classname]#Property# Interface
+
+Implementation of the [classname]#Property# interface requires defining setters
+and getters for the value and the __read-only__ mode. Only a getter is needed
+for the property type, as the type is often fixed in property implementations.
+
+The following example shows a simple implementation of the [classname]#Property#
+interface:
+
+
+----
+class MyProperty implements Property {
+ Integer data = 0;
+ boolean readOnly = false;
+
+ // Return the data type of the model
+ public Class<?> getType() {
+ return Integer.class;
+ }
+
+ public Object getValue() {
+ return data;
+ }
+
+ // Override the default implementation in Object
+ @Override
+ public String toString() {
+ return Integer.toHexString(data);
+ }
+
+ public boolean isReadOnly() {
+ return readOnly;
+ }
+
+ public void setReadOnly(boolean newStatus) {
+ readOnly = newStatus;
+ }
+
+ public void setValue(Object newValue)
+ throws ReadOnlyException, ConversionException {
+ if (readOnly)
+ throw new ReadOnlyException();
+
+ // Already the same type as the internal representation
+ if (newValue instanceof Integer)
+ data = (Integer) newValue;
+
+ // Conversion from a string is required
+ else if (newValue instanceof String)
+ try {
+ data = Integer.parseInt((String) newValue, 16);
+ } catch (NumberFormatException e) {
+ throw new ConversionException();
+ }
+ else
+ // Don't know how to convert any other types
+ throw new ConversionException();
+
+ // Reverse decode the hexadecimal value
+ }
+}
+
+// Instantiate the property and set its data
+MyProperty property = new MyProperty();
+property.setValue(42);
+
+// Bind it to a component
+final TextField tf = new TextField("Name", property);
+----
+
+The components get the displayed value by the [methodname]#toString()# method,
+so it is necessary to override it. To allow editing the value, value returned in
+the [methodname]#toString()# must be in a format that is accepted by the
+[methodname]#setValue()# method, unless the property is read-only. The
+[methodname]#toString()# can perform any type conversion necessary to make the
+internal type a string, and the [methodname]#setValue()# must be able to make a
+reverse conversion.
+
+The implementation example does not notify about changes in the property value
+or in the read-only mode. You should normally also implement at least the
+[classname]#Property.ValueChangeNotifier# and
+[classname]#Property.ReadOnlyStatusChangeNotifier#. See the
+[classname]#ObjectProperty# class for an example of the implementation.
+
+endif::web[]
+
+
+
diff --git a/documentation/datamodel/img/beanitem-nested-beans.png b/documentation/datamodel/img/beanitem-nested-beans.png
new file mode 100644
index 0000000000..ea8c51ccd4
--- /dev/null
+++ b/documentation/datamodel/img/beanitem-nested-beans.png
Binary files differ
diff --git a/documentation/datamodel/img/beanitemcontainer-nested-beans.png b/documentation/datamodel/img/beanitemcontainer-nested-beans.png
new file mode 100644
index 0000000000..fbd5fa155a
--- /dev/null
+++ b/documentation/datamodel/img/beanitemcontainer-nested-beans.png
Binary files differ
diff --git a/documentation/datamodel/img/datamodel-interfaces-hi.png b/documentation/datamodel/img/datamodel-interfaces-hi.png
new file mode 100644
index 0000000000..9bebdb0ac0
--- /dev/null
+++ b/documentation/datamodel/img/datamodel-interfaces-hi.png
Binary files differ
diff --git a/documentation/datamodel/img/datamodel-interfaces-lo.png b/documentation/datamodel/img/datamodel-interfaces-lo.png
new file mode 100644
index 0000000000..2139cf9f08
--- /dev/null
+++ b/documentation/datamodel/img/datamodel-interfaces-lo.png
Binary files differ
diff --git a/documentation/datamodel/original-drawings/beanitem-doublebinding.svg b/documentation/datamodel/original-drawings/beanitem-doublebinding.svg
new file mode 100644
index 0000000000..509013ab07
--- /dev/null
+++ b/documentation/datamodel/original-drawings/beanitem-doublebinding.svg
@@ -0,0 +1,1026 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="744.09448"
+ height="1052.3622"
+ id="svg2475"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docname="beanitem-doublebinding.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/home/magi/itmill/doc/cheatsheet/vaadin-cheatsheet.png"
+ inkscape:export-xdpi="300.01001"
+ inkscape:export-ydpi="300.01001"
+ version="1.0">
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10000"
+ guidetolerance="4"
+ objecttolerance="4"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1.2"
+ inkscape:cx="458.26878"
+ inkscape:cy="757.29383"
+ inkscape:document-units="mm"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1680"
+ inkscape:window-height="1026"
+ inkscape:window-x="1280"
+ inkscape:window-y="0"
+ inkscape:snap-nodes="true"
+ inkscape:snap-bbox="true"
+ units="mm"
+ inkscape:snap-global="true"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ snapvisiblegridlinesonly="true"
+ dotted="false"
+ type="xygrid"
+ id="grid4674"
+ visible="true"
+ enabled="true"
+ units="mm"
+ empspacing="5"
+ spacingx="1mm"
+ spacingy="1mm" />
+ </sodipodi:namedview>
+ <defs
+ id="defs2477">
+ <marker
+ style="overflow:visible"
+ id="Arrow1Lstart"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Lstart">
+ <path
+ transform="matrix(0.8,0,0,0.8,10,0)"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z"
+ id="path5210" />
+ </marker>
+ <marker
+ inkscape:stockid="DotS"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="DotS"
+ style="overflow:visible">
+ <path
+ id="path3636"
+ d="M -2.5,-1 C -2.5,1.76 -4.74,4 -7.5,4 C -10.26,4 -12.5,1.76 -12.5,-1 C -12.5,-3.76 -10.26,-6 -7.5,-6 C -4.74,-6 -2.5,-3.76 -2.5,-1 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+ transform="matrix(0.2,0,0,0.2,1.48,0.2)" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="TriangleOutS"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="TriangleOutS">
+ <path
+ transform="scale(0.2,0.2)"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ d="M 5.77,0 L -2.88,5 L -2.88,-5 L 5.77,0 z"
+ id="path3717" />
+ </marker>
+ <inkscape:path-effect
+ effect="skeletal"
+ id="path-effect2503"
+ prop_scale="1"
+ pattern="M 349.202,225.086 L 405.895,331.386 L 370.462,338.472 "
+ copytype="single_stretched" />
+ <inkscape:path-effect
+ effect="skeletal"
+ id="path-effect2499"
+ prop_scale="1" />
+ <inkscape:path-effect
+ effect="skeletal"
+ id="path-effect2497"
+ prop_scale="1"
+ pattern="M 432.28346,272.83462 L 403.93701,216.14171"
+ pattern-nodetypes="cc" />
+ <marker
+ inkscape:stockid="Arrow1Send"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Send"
+ style="overflow:visible">
+ <path
+ id="path3641"
+ d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="matrix(-0.2,0,0,-0.2,-1.2,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Lend"
+ style="overflow:visible">
+ <path
+ id="path3629"
+ d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+ </marker>
+ <inkscape:perspective
+ id="perspective3487"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ <marker
+ inkscape:stockid="Arrow2Sendp"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Sendp"
+ style="overflow:visible">
+ <path
+ id="path28139"
+ style="font-size:12px;fill:#f39300;fill-rule:evenodd;stroke:#f39300;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z"
+ transform="matrix(-0.3,0,0,-0.3,0.69,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleOutSK"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutSK"
+ style="overflow:visible">
+ <path
+ id="path36611"
+ d="M 5.77,0 L -2.88,5 L -2.88,-5 L 5.77,0 z"
+ style="fill:#49c2f1;fill-rule:evenodd;stroke:#49c2f1;stroke-width:1pt;marker-start:none"
+ transform="scale(0.2,0.2)" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleOutSH"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutSH"
+ style="overflow:visible">
+ <path
+ id="path36614"
+ d="M 5.77,0 L -2.88,5 L -2.88,-5 L 5.77,0 z"
+ style="fill:#49c2f1;fill-rule:evenodd;stroke:#49c2f1;stroke-width:1pt;marker-start:none"
+ transform="scale(0.2,0.2)" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleOutSA"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutSA"
+ style="overflow:visible">
+ <path
+ id="path36617"
+ d="M 5.77,0 L -2.88,5 L -2.88,-5 L 5.77,0 z"
+ style="fill:#49c2f1;fill-rule:evenodd;stroke:#49c2f1;stroke-width:1pt;marker-start:none"
+ transform="scale(0.2,0.2)" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleOutSKF"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutSKF"
+ style="overflow:visible">
+ <path
+ id="path36620"
+ d="M 5.77,0 L -2.88,5 L -2.88,-5 L 5.77,0 z"
+ style="fill:#49c2f1;fill-rule:evenodd;stroke:#49c2f1;stroke-width:1pt;marker-start:none"
+ transform="scale(0.2,0.2)" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleOutS9"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutS9"
+ style="overflow:visible">
+ <path
+ id="path36623"
+ d="M 5.77,0 L -2.88,5 L -2.88,-5 L 5.77,0 z"
+ style="fill:#49c2f1;fill-rule:evenodd;stroke:#49c2f1;stroke-width:1pt;marker-start:none"
+ transform="scale(0.2,0.2)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2SendpA"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2SendpA"
+ style="overflow:visible">
+ <path
+ id="path3396"
+ style="font-size:12px;fill:#d9d9cd;fill-rule:evenodd;stroke:#d9d9cd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z"
+ transform="matrix(-0.3,0,0,-0.3,0.69,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Sendpg"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Sendpg"
+ style="overflow:visible">
+ <path
+ id="path3360"
+ style="font-size:12px;fill:#fcc988;fill-rule:evenodd;stroke:#fcc988;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z"
+ transform="matrix(-0.3,0,0,-0.3,0.69,0)" />
+ </marker>
+ <filter
+ height="1.1"
+ width="1.1"
+ inkscape:label="White Halo"
+ id="filter2780">
+ <feMorphology
+ result="result0"
+ radius="3"
+ operator="dilate"
+ id="feMorphology2782" />
+ <feFlood
+ result="result3"
+ in="result0"
+ flood-opacity="1"
+ flood-color="rgb(255,255,255)"
+ id="feFlood2786" />
+ <feComposite
+ result="result4"
+ operator="in"
+ in2="result0"
+ in="result3"
+ id="feComposite2623" />
+ <feMerge
+ id="feMerge2629">
+ <feMergeNode
+ in="result4"
+ id="feMergeNode2631"
+ inkscape:collect="always" />
+ <feMergeNode
+ in="SourceGraphic"
+ id="feMergeNode2633"
+ inkscape:collect="always" />
+ </feMerge>
+ </filter>
+ <marker
+ style="overflow:visible"
+ id="TriangleOutSn"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="TriangleOutSn">
+ <path
+ transform="scale(0.2,0.2)"
+ style="fill:#d9d9cd;fill-rule:evenodd;stroke:#d9d9cd;stroke-width:1pt;marker-start:none"
+ d="M 5.77,0 L -2.88,5 L -2.88,-5 L 5.77,0 z"
+ id="path4441" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="TriangleOutS9F"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="TriangleOutS9F">
+ <path
+ transform="scale(0.2,0.2)"
+ style="fill:#d9d9cd;fill-rule:evenodd;stroke:#d9d9cd;stroke-width:1pt;marker-start:none"
+ d="M 5.77,0 L -2.88,5 L -2.88,-5 L 5.77,0 z"
+ id="path4444" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="TriangleOutSI"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="TriangleOutSI">
+ <path
+ transform="scale(0.2,0.2)"
+ style="fill:#d9d9cd;fill-rule:evenodd;stroke:#d9d9cd;stroke-width:1pt;marker-start:none"
+ d="M 5.77,0 L -2.88,5 L -2.88,-5 L 5.77,0 z"
+ id="path4447" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="TriangleOutSO"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="TriangleOutSO">
+ <path
+ transform="scale(0.2,0.2)"
+ style="fill:#d9d9cd;fill-rule:evenodd;stroke:#d9d9cd;stroke-width:1pt;marker-start:none"
+ d="M 5.77,0 L -2.88,5 L -2.88,-5 L 5.77,0 z"
+ id="path4450" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="TriangleOutSW"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="TriangleOutSW">
+ <path
+ transform="scale(0.2,0.2)"
+ style="fill:#d9d9cd;fill-rule:evenodd;stroke:#d9d9cd;stroke-width:1pt;marker-start:none"
+ d="M 5.77,0 L -2.88,5 L -2.88,-5 L 5.77,0 z"
+ id="path4453" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="TriangleOutSB"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="TriangleOutSB">
+ <path
+ transform="scale(0.2,0.2)"
+ style="fill:#d9d9cd;fill-rule:evenodd;stroke:#d9d9cd;stroke-width:1pt;marker-start:none"
+ d="M 5.77,0 L -2.88,5 L -2.88,-5 L 5.77,0 z"
+ id="path4456" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="TriangleOutSZ"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="TriangleOutSZ">
+ <path
+ transform="scale(0.2,0.2)"
+ style="fill:#d9d9cd;fill-rule:evenodd;stroke:#d9d9cd;stroke-width:1pt;marker-start:none"
+ d="M 5.77,0 L -2.88,5 L -2.88,-5 L 5.77,0 z"
+ id="path4459" />
+ </marker>
+ <marker
+ inkscape:stockid="DotSq"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="DotSq"
+ style="overflow:visible">
+ <path
+ id="path5853"
+ d="M -2.5,-1 C -2.5,1.76 -4.74,4 -7.5,4 C -10.26,4 -12.5,1.76 -12.5,-1 C -12.5,-3.76 -10.26,-6 -7.5,-6 C -4.74,-6 -2.5,-3.76 -2.5,-1 z"
+ style="fill:#d9d9cd;fill-rule:evenodd;stroke:#d9d9cd;stroke-width:1pt;marker-start:none;marker-end:none"
+ transform="matrix(0.2,0,0,0.2,1.48,0.2)" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="TriangleOutSBO"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="TriangleOutSBO">
+ <path
+ transform="scale(0.2,0.2)"
+ style="fill:#49c2f1;fill-rule:evenodd;stroke:#49c2f1;stroke-width:1pt;marker-start:none"
+ d="M 5.77,0 L -2.88,5 L -2.88,-5 L 5.77,0 z"
+ id="path7501" />
+ </marker>
+ <marker
+ inkscape:stockid="DotSu"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="DotSu"
+ style="overflow:visible">
+ <path
+ id="path9463"
+ d="M -2.5,-1 C -2.5,1.76 -4.74,4 -7.5,4 C -10.26,4 -12.5,1.76 -12.5,-1 C -12.5,-3.76 -10.26,-6 -7.5,-6 C -4.74,-6 -2.5,-3.76 -2.5,-1 z"
+ style="fill:#49c2f1;fill-rule:evenodd;stroke:#49c2f1;stroke-width:1pt;marker-start:none;marker-end:none"
+ transform="matrix(0.2,0,0,0.2,1.48,0.2)" />
+ </marker>
+ <filter
+ id="filter10694"
+ inkscape:label="Black Halo"
+ width="1.1"
+ height="1.1">
+ <feMorphology
+ id="feMorphology10696"
+ operator="dilate"
+ radius="3"
+ result="result0" />
+ <feFlood
+ id="feFlood10698"
+ flood-color="rgb(0,0,0)"
+ flood-opacity="1"
+ in="result0"
+ result="result3" />
+ <feComposite
+ id="feComposite10700"
+ in="result3"
+ in2="result0"
+ operator="in"
+ result="result4" />
+ <feMerge
+ id="feMerge10702">
+ <feMergeNode
+ inkscape:collect="always"
+ id="feMergeNode10704"
+ in="result4" />
+ <feMergeNode
+ inkscape:collect="always"
+ id="feMergeNode10706"
+ in="SourceGraphic" />
+ </feMerge>
+ </filter>
+ <marker
+ style="overflow:visible"
+ id="TriangleOutSu"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="TriangleOutSu">
+ <path
+ transform="scale(0.2,0.2)"
+ style="fill:#49c2f1;fill-rule:evenodd;stroke:#49c2f1;stroke-width:1pt;marker-start:none"
+ d="M 5.77,0 L -2.88,5 L -2.88,-5 L 5.77,0 z"
+ id="path8127" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="TriangleOutSI8"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="TriangleOutSI8">
+ <path
+ transform="scale(0.2,0.2)"
+ style="fill:#49c2f1;fill-rule:evenodd;stroke:#49c2f1;stroke-width:1pt;marker-start:none"
+ d="M 5.77,0 L -2.88,5 L -2.88,-5 L 5.77,0 z"
+ id="path8130" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="TriangleOutSr"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="TriangleOutSr">
+ <path
+ transform="scale(0.2,0.2)"
+ style="fill:#49c2f1;fill-rule:evenodd;stroke:#49c2f1;stroke-width:1pt;marker-start:none"
+ d="M 5.77,0 L -2.88,5 L -2.88,-5 L 5.77,0 z"
+ id="path8133" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="TriangleOutSM"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="TriangleOutSM">
+ <path
+ transform="scale(0.2,0.2)"
+ style="fill:#49c2f1;fill-rule:evenodd;stroke:#49c2f1;stroke-width:1pt;marker-start:none"
+ d="M 5.77,0 L -2.88,5 L -2.88,-5 L 5.77,0 z"
+ id="path8136" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="TriangleOutSb"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="TriangleOutSb">
+ <path
+ transform="scale(0.2,0.2)"
+ style="fill:#49c2f1;fill-rule:evenodd;stroke:#49c2f1;stroke-width:1pt;marker-start:none"
+ d="M 5.77,0 L -2.88,5 L -2.88,-5 L 5.77,0 z"
+ id="path8139" />
+ </marker>
+ <marker
+ markerWidth="4.6297302"
+ markerHeight="5.7450776"
+ orient="auto"
+ id="marker18095">
+ <g
+ transform="matrix(0.5,0,0,0.5,-185.64298,-257.19655)"
+ id="g11064">
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 370,508.65625 C 369.13933,508.715 368.39056,509.27755 368.09375,510.09375 C 367.82399,510.83551 368.03605,511.62868 368.53125,512.21875 L 366.78125,512.21875 C 366.73884,512.21408 366.69882,512.22093 366.65625,512.21875 L 366.65625,516.59375 L 366.78125,516.59375 L 368.53125,516.59375 C 367.85229,517.45345 367.83424,518.70924 368.625,519.5 C 369.47591,520.35091 370.89909,520.35091 371.75,519.5 L 375.09375,516.125 C 375.12672,516.09552 375.15802,516.06422 375.1875,516.03125 C 375.21972,516.01191 375.25101,515.99105 375.28125,515.96875 C 375.28162,515.96839 375.49976,515.68796 375.5,515.6875 C 375.50005,515.68741 375.49338,515.64282 375.5,515.625 C 375.5011,515.62203 375.53002,515.62832 375.53125,515.625 C 375.57039,515.57293 375.58228,515.57321 375.625,515.5 C 375.76199,515.26524 375.79184,515.12809 375.78125,515.15625 C 375.81807,515.06473 375.79977,515.04374 375.8125,515 C 375.82311,514.98978 375.83353,514.97936 375.84375,514.96875 C 375.90379,514.74477 375.93181,514.45186 375.90625,514.1875 C 375.89266,513.98387 375.84739,513.88985 375.84375,513.875 C 375.84389,513.86458 375.84389,513.85417 375.84375,513.84375 C 375.86975,513.94071 375.85901,513.85978 375.75,513.59375 C 375.69753,513.46336 375.66014,513.37439 375.625,513.3125 C 375.57262,513.22275 375.49154,513.05015 375.28125,512.84375 L 371.75,509.3125 C 371.29355,508.82579 370.66491,508.60087 370,508.65625 z"
+ id="path11050"
+ sodipodi:nodetypes="csccccccsccssssssssssssssccc" />
+ <path
+ style="fill:#49c2f1;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 366.65625,515.40625 L 371.28125,515.40625 L 369.46875,517.21875 C 369.0718,517.6157 369.0718,518.2593 369.46875,518.65625 C 369.8657,519.0532 370.5093,519.0532 370.90625,518.65625 L 374.34375,515.1875 L 374.4375,515.125 C 374.44343,515.11918 374.43171,515.09972 374.4375,515.09375 C 374.49291,515.03659 374.5526,514.97676 374.59375,514.90625 C 374.62239,514.85717 374.63663,514.80216 374.65625,514.75 C 374.66861,514.71928 374.67831,514.68783 374.6875,514.65625 C 374.71862,514.54015 374.73024,514.43132 374.71875,514.3125 C 374.71489,514.25466 374.70138,514.21285 374.6875,514.15625 C 374.6766,514.1156 374.67237,514.07059 374.65625,514.03125 C 374.63982,513.99042 374.61578,513.94505 374.59375,513.90625 C 374.5483,513.82838 374.50015,513.74899 374.4375,513.6875 L 370.90625,510.15625 C 370.69734,509.93349 370.39809,509.8184 370.09375,509.84375 C 369.69897,509.8707 369.35398,510.12813 369.21875,510.5 C 369.08351,510.87187 369.18349,511.28826 369.46875,511.5625 L 371.34375,513.40625 L 366.65625,513.40625"
+ id="path11035"
+ sodipodi:nodetypes="cccscccsssssssscccsccc" />
+ </g>
+ </marker>
+ <marker
+ markerWidth="4.6297355"
+ markerHeight="5.7450781"
+ orient="auto"
+ id="marker44971">
+ <g
+ transform="matrix(0.5,0,0,0.5,-185.64299,-257.19655)"
+ id="g18059">
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 370,508.65625 C 369.13933,508.715 368.39056,509.27755 368.09375,510.09375 C 367.82399,510.83551 368.03605,511.62868 368.53125,512.21875 L 366.78125,512.21875 C 366.73884,512.21408 366.69882,512.22093 366.65625,512.21875 L 366.65625,516.59375 L 366.78125,516.59375 L 368.53125,516.59375 C 367.85229,517.45345 367.83424,518.70924 368.625,519.5 C 369.47591,520.35091 370.89909,520.35091 371.75,519.5 L 375.09375,516.125 C 375.12672,516.09552 375.15802,516.06422 375.1875,516.03125 C 375.21972,516.01191 375.25101,515.99105 375.28125,515.96875 C 375.28162,515.96839 375.49976,515.68796 375.5,515.6875 C 375.50005,515.68741 375.49338,515.64282 375.5,515.625 C 375.5011,515.62203 375.53002,515.62832 375.53125,515.625 C 375.57039,515.57293 375.58228,515.57321 375.625,515.5 C 375.76199,515.26524 375.79184,515.12809 375.78125,515.15625 C 375.81807,515.06473 375.79977,515.04374 375.8125,515 C 375.82311,514.98978 375.83353,514.97936 375.84375,514.96875 C 375.90379,514.74477 375.93181,514.45186 375.90625,514.1875 C 375.89266,513.98387 375.84739,513.88985 375.84375,513.875 C 375.84389,513.86458 375.84389,513.85417 375.84375,513.84375 C 375.86975,513.94071 375.85901,513.85978 375.75,513.59375 C 375.69753,513.46336 375.66014,513.37439 375.625,513.3125 C 375.57262,513.22275 375.49154,513.05015 375.28125,512.84375 L 371.75,509.3125 C 371.29355,508.82579 370.66491,508.60087 370,508.65625 z"
+ id="path18061"
+ sodipodi:nodetypes="csccccccsccssssssssssssssccc" />
+ <path
+ style="fill:#d9d9cd;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 366.65625,515.40625 L 371.28125,515.40625 L 369.46875,517.21875 C 369.0718,517.6157 369.0718,518.2593 369.46875,518.65625 C 369.8657,519.0532 370.5093,519.0532 370.90625,518.65625 L 374.34375,515.1875 L 374.4375,515.125 C 374.44343,515.11918 374.43171,515.09972 374.4375,515.09375 C 374.49291,515.03659 374.5526,514.97676 374.59375,514.90625 C 374.62239,514.85717 374.63663,514.80216 374.65625,514.75 C 374.66861,514.71928 374.67831,514.68783 374.6875,514.65625 C 374.71862,514.54015 374.73024,514.43132 374.71875,514.3125 C 374.71489,514.25466 374.70138,514.21285 374.6875,514.15625 C 374.6766,514.1156 374.67237,514.07059 374.65625,514.03125 C 374.63982,513.99042 374.61578,513.94505 374.59375,513.90625 C 374.5483,513.82838 374.50015,513.74899 374.4375,513.6875 L 370.90625,510.15625 C 370.69734,509.93349 370.39809,509.8184 370.09375,509.84375 C 369.69897,509.8707 369.35398,510.12813 369.21875,510.5 C 369.08351,510.87187 369.18349,511.28826 369.46875,511.5625 L 371.34375,513.40625 L 366.65625,513.40625"
+ id="path18063"
+ sodipodi:nodetypes="cccscccsssssssscccsccc" />
+ </g>
+ </marker>
+ <marker
+ markerWidth="4.6297302"
+ markerHeight="5.7450786"
+ orient="auto"
+ id="marker52016">
+ <g
+ transform="matrix(0.5,0,0,0.5,-185.64299,-257.19655)"
+ id="g52010">
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 370,508.65625 C 369.13933,508.715 368.39056,509.27755 368.09375,510.09375 C 367.82399,510.83551 368.03605,511.62868 368.53125,512.21875 L 366.78125,512.21875 C 366.73884,512.21408 366.69882,512.22093 366.65625,512.21875 L 366.65625,516.59375 L 366.78125,516.59375 L 368.53125,516.59375 C 367.85229,517.45345 367.83424,518.70924 368.625,519.5 C 369.47591,520.35091 370.89909,520.35091 371.75,519.5 L 375.09375,516.125 C 375.12672,516.09552 375.15802,516.06422 375.1875,516.03125 C 375.21972,516.01191 375.25101,515.99105 375.28125,515.96875 C 375.28162,515.96839 375.49976,515.68796 375.5,515.6875 C 375.50005,515.68741 375.49338,515.64282 375.5,515.625 C 375.5011,515.62203 375.53002,515.62832 375.53125,515.625 C 375.57039,515.57293 375.58228,515.57321 375.625,515.5 C 375.76199,515.26524 375.79184,515.12809 375.78125,515.15625 C 375.81807,515.06473 375.79977,515.04374 375.8125,515 C 375.82311,514.98978 375.83353,514.97936 375.84375,514.96875 C 375.90379,514.74477 375.93181,514.45186 375.90625,514.1875 C 375.89266,513.98387 375.84739,513.88985 375.84375,513.875 C 375.84389,513.86458 375.84389,513.85417 375.84375,513.84375 C 375.86975,513.94071 375.85901,513.85978 375.75,513.59375 C 375.69753,513.46336 375.66014,513.37439 375.625,513.3125 C 375.57262,513.22275 375.49154,513.05015 375.28125,512.84375 L 371.75,509.3125 C 371.29355,508.82579 370.66491,508.60087 370,508.65625 z"
+ id="path52012"
+ sodipodi:nodetypes="csccccccsccssssssssssssssccc" />
+ <path
+ style="fill:#f39300;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 366.65625,515.40625 L 371.28125,515.40625 L 369.46875,517.21875 C 369.0718,517.6157 369.0718,518.2593 369.46875,518.65625 C 369.8657,519.0532 370.5093,519.0532 370.90625,518.65625 L 374.34375,515.1875 L 374.4375,515.125 C 374.44343,515.11918 374.43171,515.09972 374.4375,515.09375 C 374.49291,515.03659 374.5526,514.97676 374.59375,514.90625 C 374.62239,514.85717 374.63663,514.80216 374.65625,514.75 C 374.66861,514.71928 374.67831,514.68783 374.6875,514.65625 C 374.71862,514.54015 374.73024,514.43132 374.71875,514.3125 C 374.71489,514.25466 374.70138,514.21285 374.6875,514.15625 C 374.6766,514.1156 374.67237,514.07059 374.65625,514.03125 C 374.63982,513.99042 374.61578,513.94505 374.59375,513.90625 C 374.5483,513.82838 374.50015,513.74899 374.4375,513.6875 L 370.90625,510.15625 C 370.69734,509.93349 370.39809,509.8184 370.09375,509.84375 C 369.69897,509.8707 369.35398,510.12813 369.21875,510.5 C 369.08351,510.87187 369.18349,511.28826 369.46875,511.5625 L 371.34375,513.40625 L 366.65625,513.40625"
+ id="path52014"
+ sodipodi:nodetypes="cccscccsssssssscccsccc" />
+ </g>
+ </marker>
+ <marker
+ markerWidth="4.6297255"
+ markerHeight="5.745079"
+ orient="auto"
+ id="marker64887">
+ <g
+ transform="matrix(0.5,0,0,0.5,-185.64299,-257.19655)"
+ id="g64855">
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 370,508.65625 C 369.13933,508.715 368.39056,509.27755 368.09375,510.09375 C 367.82399,510.83551 368.03605,511.62868 368.53125,512.21875 L 366.78125,512.21875 C 366.73884,512.21408 366.69882,512.22093 366.65625,512.21875 L 366.65625,516.59375 L 366.78125,516.59375 L 368.53125,516.59375 C 367.85229,517.45345 367.83424,518.70924 368.625,519.5 C 369.47591,520.35091 370.89909,520.35091 371.75,519.5 L 375.09375,516.125 C 375.12672,516.09552 375.15802,516.06422 375.1875,516.03125 C 375.21972,516.01191 375.25101,515.99105 375.28125,515.96875 C 375.28162,515.96839 375.49976,515.68796 375.5,515.6875 C 375.50005,515.68741 375.49338,515.64282 375.5,515.625 C 375.5011,515.62203 375.53002,515.62832 375.53125,515.625 C 375.57039,515.57293 375.58228,515.57321 375.625,515.5 C 375.76199,515.26524 375.79184,515.12809 375.78125,515.15625 C 375.81807,515.06473 375.79977,515.04374 375.8125,515 C 375.82311,514.98978 375.83353,514.97936 375.84375,514.96875 C 375.90379,514.74477 375.93181,514.45186 375.90625,514.1875 C 375.89266,513.98387 375.84739,513.88985 375.84375,513.875 C 375.84389,513.86458 375.84389,513.85417 375.84375,513.84375 C 375.86975,513.94071 375.85901,513.85978 375.75,513.59375 C 375.69753,513.46336 375.66014,513.37439 375.625,513.3125 C 375.57262,513.22275 375.49154,513.05015 375.28125,512.84375 L 371.75,509.3125 C 371.29355,508.82579 370.66491,508.60087 370,508.65625 z"
+ id="path64857"
+ sodipodi:nodetypes="csccccccsccssssssssssssssccc" />
+ <path
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 366.65625,515.40625 L 371.28125,515.40625 L 369.46875,517.21875 C 369.0718,517.6157 369.0718,518.2593 369.46875,518.65625 C 369.8657,519.0532 370.5093,519.0532 370.90625,518.65625 L 374.34375,515.1875 L 374.4375,515.125 C 374.44343,515.11918 374.43171,515.09972 374.4375,515.09375 C 374.49291,515.03659 374.5526,514.97676 374.59375,514.90625 C 374.62239,514.85717 374.63663,514.80216 374.65625,514.75 C 374.66861,514.71928 374.67831,514.68783 374.6875,514.65625 C 374.71862,514.54015 374.73024,514.43132 374.71875,514.3125 C 374.71489,514.25466 374.70138,514.21285 374.6875,514.15625 C 374.6766,514.1156 374.67237,514.07059 374.65625,514.03125 C 374.63982,513.99042 374.61578,513.94505 374.59375,513.90625 C 374.5483,513.82838 374.50015,513.74899 374.4375,513.6875 L 370.90625,510.15625 C 370.69734,509.93349 370.39809,509.8184 370.09375,509.84375 C 369.69897,509.8707 369.35398,510.12813 369.21875,510.5 C 369.08351,510.87187 369.18349,511.28826 369.46875,511.5625 L 371.34375,513.40625 L 366.65625,513.40625"
+ id="path64859"
+ sodipodi:nodetypes="cccscccsssssssscccsccc" />
+ </g>
+ </marker>
+ <marker
+ markerWidth="4.6297302"
+ markerHeight="5.745079"
+ orient="auto"
+ id="marker4057">
+ <g
+ transform="matrix(0.5,0,0,0.5,-185.64299,-257.19655)"
+ id="g51986">
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 370,508.65625 C 369.13933,508.715 368.39056,509.27755 368.09375,510.09375 C 367.82399,510.83551 368.03605,511.62868 368.53125,512.21875 L 366.78125,512.21875 C 366.73884,512.21408 366.69882,512.22093 366.65625,512.21875 L 366.65625,516.59375 L 366.78125,516.59375 L 368.53125,516.59375 C 367.85229,517.45345 367.83424,518.70924 368.625,519.5 C 369.47591,520.35091 370.89909,520.35091 371.75,519.5 L 375.09375,516.125 C 375.12672,516.09552 375.15802,516.06422 375.1875,516.03125 C 375.21972,516.01191 375.25101,515.99105 375.28125,515.96875 C 375.28162,515.96839 375.49976,515.68796 375.5,515.6875 C 375.50005,515.68741 375.49338,515.64282 375.5,515.625 C 375.5011,515.62203 375.53002,515.62832 375.53125,515.625 C 375.57039,515.57293 375.58228,515.57321 375.625,515.5 C 375.76199,515.26524 375.79184,515.12809 375.78125,515.15625 C 375.81807,515.06473 375.79977,515.04374 375.8125,515 C 375.82311,514.98978 375.83353,514.97936 375.84375,514.96875 C 375.90379,514.74477 375.93181,514.45186 375.90625,514.1875 C 375.89266,513.98387 375.84739,513.88985 375.84375,513.875 C 375.84389,513.86458 375.84389,513.85417 375.84375,513.84375 C 375.86975,513.94071 375.85901,513.85978 375.75,513.59375 C 375.69753,513.46336 375.66014,513.37439 375.625,513.3125 C 375.57262,513.22275 375.49154,513.05015 375.28125,512.84375 L 371.75,509.3125 C 371.29355,508.82579 370.66491,508.60087 370,508.65625 z"
+ id="path51988"
+ sodipodi:nodetypes="csccccccsccssssssssssssssccc" />
+ <path
+ style="fill:#49c2f1;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 366.65625,515.40625 L 371.28125,515.40625 L 369.46875,517.21875 C 369.0718,517.6157 369.0718,518.2593 369.46875,518.65625 C 369.8657,519.0532 370.5093,519.0532 370.90625,518.65625 L 374.34375,515.1875 L 374.4375,515.125 C 374.44343,515.11918 374.43171,515.09972 374.4375,515.09375 C 374.49291,515.03659 374.5526,514.97676 374.59375,514.90625 C 374.62239,514.85717 374.63663,514.80216 374.65625,514.75 C 374.66861,514.71928 374.67831,514.68783 374.6875,514.65625 C 374.71862,514.54015 374.73024,514.43132 374.71875,514.3125 C 374.71489,514.25466 374.70138,514.21285 374.6875,514.15625 C 374.6766,514.1156 374.67237,514.07059 374.65625,514.03125 C 374.63982,513.99042 374.61578,513.94505 374.59375,513.90625 C 374.5483,513.82838 374.50015,513.74899 374.4375,513.6875 L 370.90625,510.15625 C 370.69734,509.93349 370.39809,509.8184 370.09375,509.84375 C 369.69897,509.8707 369.35398,510.12813 369.21875,510.5 C 369.08351,510.87187 369.18349,511.28826 369.46875,511.5625 L 371.34375,513.40625 L 366.65625,513.40625"
+ id="path51990"
+ sodipodi:nodetypes="cccscccsssssssscccsccc" />
+ </g>
+ </marker>
+ <marker
+ markerWidth="4.0334239"
+ markerHeight="4.5568175"
+ orient="auto"
+ id="marker72805">
+ <path
+ style="fill:#f39300;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M -2.0167119,0.50456824 L 0.29578813,0.50456824 L -0.61046187,1.4108182 C -0.80893187,1.6092982 -0.80893187,1.9310982 -0.61046187,2.1295682 C -0.41198187,2.3280482 -0.090181874,2.3280482 0.10828813,2.1295682 L 1.8270381,0.39519824 L 1.8739181,0.36394824 C 1.8768781,0.36103824 1.8710181,0.35130824 1.8739181,0.34831824 C 1.9016181,0.31973824 1.9314681,0.28982824 1.9520381,0.25456824 C 1.9663581,0.23002824 1.9734781,0.20252824 1.9832881,0.17644824 C 1.9894681,0.16108824 1.9943181,0.14535824 1.9989181,0.12956824 C 2.0144781,0.07151824 2.0202881,0.01710824 2.0145381,-0.04230176 C 2.0126081,-0.07122176 2.0058581,-0.09213176 1.9989181,-0.12043176 C 1.9934681,-0.14075176 1.9913481,-0.16326176 1.9832881,-0.18293176 C 1.9750781,-0.20334176 1.9630581,-0.22603176 1.9520381,-0.24543176 C 1.9293181,-0.28436176 1.9052381,-0.32406176 1.8739181,-0.35480176 L 0.10828813,-2.1204318 C 0.003838126,-2.2318118 -0.14579187,-2.2893518 -0.29796187,-2.2766818 C -0.49535187,-2.2632018 -0.66784187,-2.1344918 -0.73546187,-1.9485518 C -0.80308187,-1.7626218 -0.75309187,-1.5544218 -0.61046187,-1.4173018 L 0.32703813,-0.49543176 L -2.0167119,-0.49543176"
+ id="path18057"
+ sodipodi:nodetypes="cccscccsssssssscccsccc" />
+ </marker>
+ <marker
+ markerWidth="4.0334177"
+ markerHeight="4.5568123"
+ orient="auto"
+ id="marker72808">
+ <path
+ style="fill:#d9d9cd;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M -2.016709,0.50457301 L 0.29579105,0.50457301 L -0.61045895,1.410823 C -0.80893895,1.609293 -0.80893895,1.931093 -0.61045895,2.129573 C -0.41198895,2.328043 -0.090188953,2.328043 0.10829105,2.129573 L 1.827041,0.39519301 L 1.873911,0.36394301 C 1.876881,0.36103301 1.871021,0.35130301 1.873911,0.34832301 C 1.901621,0.31974301 1.931461,0.28982301 1.952041,0.25457301 C 1.966361,0.23003301 1.973481,0.20252301 1.983291,0.17644301 C 1.989471,0.16108301 1.994321,0.14536301 1.998911,0.12957301 C 2.014471,0.071523013 2.020281,0.017103013 2.014541,-0.042306987 C 2.012611,-0.071226987 2.005851,-0.092126987 1.998911,-0.12042699 C 1.993461,-0.14075699 1.991351,-0.16325699 1.983291,-0.18292699 C 1.975071,-0.20334699 1.963051,-0.22602699 1.952041,-0.24542699 C 1.929311,-0.28436699 1.905241,-0.32405699 1.873911,-0.35480699 L 0.10829105,-2.120427 C 0.003831047,-2.231807 -0.14578895,-2.289357 -0.29795895,-2.276677 C -0.49534895,-2.263207 -0.66784895,-2.134487 -0.73545895,-1.948557 C -0.80307895,-1.762617 -0.75308895,-1.554427 -0.61045895,-1.417307 L 0.32704105,-0.49542699 L -2.016709,-0.49542699"
+ id="path72801"
+ sodipodi:nodetypes="cccscccsssssssscccsccc" />
+ </marker>
+ <marker
+ inkscape:stockid="DotSuN"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="DotSuN"
+ style="overflow:visible">
+ <path
+ id="path81580"
+ d="M -2.5,-1 C -2.5,1.76 -4.74,4 -7.5,4 C -10.26,4 -12.5,1.76 -12.5,-1 C -12.5,-3.76 -10.26,-6 -7.5,-6 C -4.74,-6 -2.5,-3.76 -2.5,-1 z"
+ style="fill:#f39300;fill-rule:evenodd;stroke:#f39300;stroke-width:1pt;marker-start:none;marker-end:none"
+ transform="matrix(0.2,0,0,0.2,1.48,0.2)" />
+ </marker>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ id="perspective3071" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ id="perspective3071-3" />
+ <marker
+ inkscape:stockid="DotSqn"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="DotSqn"
+ style="overflow:visible">
+ <path
+ id="path3825"
+ d="M -2.5,-1 C -2.5,1.76 -4.74,4 -7.5,4 C -10.26,4 -12.5,1.76 -12.5,-1 C -12.5,-3.76 -10.26,-6 -7.5,-6 C -4.74,-6 -2.5,-3.76 -2.5,-1 z"
+ style="marker-end:none;fill-rule:evenodd;marker-start:none;stroke:#49c2f1;stroke-width:1pt;fill:#49c2f1"
+ transform="matrix(0.2,0,0,0.2,1.48,0.2)" />
+ </marker>
+ </defs>
+ <metadata
+ id="metadata2480">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <flowRoot
+ transform="translate(-0.8858472,0)"
+ xml:space="preserve"
+ id="flowRoot2485"
+ style="font-size:12px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Helvetica Rounded LT Std;-inkscape-font-specification:Helvetica Rounded LT Std Bold"><flowRegion
+ id="flowRegion2487"><rect
+ id="rect2489"
+ width="184.28572"
+ height="120"
+ x="262.85715"
+ y="238.07646"
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:Helvetica Rounded LT Std;-inkscape-font-specification:Helvetica Rounded LT Std Bold" /></flowRegion><flowPara
+ id="flowPara2491" /></flowRoot> <g
+ id="g3178"
+ transform="translate(-4.4572759,23.214286)" />
+ <flowRoot
+ transform="translate(-0.8858472,0)"
+ xml:space="preserve"
+ id="flowRoot8724"
+ style="font-size:12px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Helvetica LT Std;-inkscape-font-specification:Helvetica LT Std Light"><flowRegion
+ id="flowRegion8726"><rect
+ id="rect8728"
+ width="29.904507"
+ height="22.868153"
+ x="39.286312"
+ y="752.14441"
+ style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-family:Helvetica LT Std;-inkscape-font-specification:Helvetica LT Std Light" /></flowRegion><flowPara
+ id="flowPara8730" /></flowRoot> <g
+ id="g18053"
+ transform="matrix(0.5,0,0,0.5,102.45714,0.7940752)" />
+ <g
+ transform="translate(-166.83345,55.50466)"
+ id="g2630">
+ <rect
+ style="opacity:1;fill:#49c2f1;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="rect2632"
+ width="134.64566"
+ height="35.433067"
+ x="205.84985"
+ y="181.8969"
+ ry="3.7880721" />
+ <flowRoot
+ transform="translate(273.91267,204.25271)"
+ id="flowRoot2634"
+ style="font-size:12px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Helvetica Rounded LT Std;-inkscape-font-specification:Helvetica Rounded LT Std Bold"
+ xml:space="preserve"><flowRegion
+ id="flowRegion2636" /><flowPara
+ id="flowPara2638">BeanItem&lt;DaBean&gt;</flowPara></flowRoot> <path
+ sodipodi:type="arc"
+ style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.12598419;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:2.12598425, 2.12598425;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="path4306"
+ sodipodi:cx="487.20471"
+ sodipodi:cy="228.54329"
+ sodipodi:rx="7.0740213"
+ sodipodi:ry="7.0907817"
+ d="M 494.27873,228.54329 A 7.0740213,7.0907817 0 1 1 494.27873,228.53995"
+ sodipodi:start="0"
+ sodipodi:end="6.2827149"
+ transform="translate(-214.12137,-46.769087)"
+ sodipodi:open="true" />
+ </g>
+ <g
+ transform="translate(-165.25597,-21.834568)"
+ id="g3696">
+ <rect
+ style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#49c2f1;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="rect3698"
+ width="74.409447"
+ height="35.43306"
+ x="234.86888"
+ y="181.8969"
+ ry="3.7880721" />
+ <flowRoot
+ transform="translate(273.91267,204.25271)"
+ id="flowRoot3700"
+ style="font-size:12px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Helvetica Rounded LT Std;-inkscape-font-specification:Helvetica Rounded LT Std Bold"
+ xml:space="preserve"><flowRegion
+ id="flowRegion3702" /><flowPara
+ id="flowPara3704">DaBean</flowPara></flowRoot> </g>
+ <g
+ transform="translate(-208.41219,126.37676)"
+ id="g3706">
+ <rect
+ style="opacity:1;fill:#49c2f1;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="rect3708"
+ width="74.409447"
+ height="35.43306"
+ x="234.86888"
+ y="181.8969"
+ ry="3.7880721" />
+ <flowRoot
+ transform="translate(273.91267,204.25271)"
+ id="flowRoot3710"
+ style="font-size:12px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Helvetica Rounded LT Std;-inkscape-font-specification:Helvetica Rounded LT Std Bold"
+ xml:space="preserve"><flowRegion
+ id="flowRegion3712" /><flowPara
+ id="flowPara3714">Form</flowPara></flowRoot> <path
+ sodipodi:type="arc"
+ style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.12598419;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:2.12598425, 2.12598425;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="path4287"
+ sodipodi:cx="487.20471"
+ sodipodi:cy="228.54329"
+ sodipodi:rx="7.0740213"
+ sodipodi:ry="7.0907817"
+ d="M 494.27873,228.54329 A 7.0740213,7.0907817 0 1 1 494.27873,228.53995"
+ sodipodi:start="0"
+ sodipodi:end="6.2827149"
+ transform="translate(-215.0244,-46.226947)"
+ sodipodi:open="true" />
+ </g>
+ <path
+ sodipodi:nodetypes="cc"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#49c2f1;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;marker-start:none;marker-mid:none;marker-end:url(#DotSqn);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+ d="M 97.827294,272.83462 L 63.779528,308.26769"
+ id="path4290"
+ inkscape:connector-type="polyline"
+ inkscape:connection-start="#g2630" />
+ <g
+ transform="translate(-123.81342,126.37858)"
+ id="g4292">
+ <rect
+ style="opacity:1;fill:#49c2f1;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="rect4294"
+ width="74.409447"
+ height="35.43306"
+ x="234.86888"
+ y="181.8969"
+ ry="3.7880721" />
+ <flowRoot
+ transform="translate(273.91267,204.25271)"
+ id="flowRoot4296"
+ style="font-size:12px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Helvetica Rounded LT Std;-inkscape-font-specification:Helvetica Rounded LT Std Bold"
+ xml:space="preserve"><flowRegion
+ id="flowRegion4298" /><flowPara
+ id="flowPara4300">Form</flowPara></flowRoot> <path
+ sodipodi:type="arc"
+ style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.12598419;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:2.12598425, 2.12598425;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="path4302"
+ sodipodi:cx="487.20471"
+ sodipodi:cy="228.54329"
+ sodipodi:rx="7.0740213"
+ sodipodi:ry="7.0907817"
+ d="M 494.27873,228.54329 A 7.0740213,7.0907817 0 1 1 494.27873,228.53995"
+ sodipodi:start="0"
+ sodipodi:end="6.2827149"
+ transform="translate(-215.0244,-46.226947)"
+ sodipodi:open="true" />
+ </g>
+ <path
+ sodipodi:nodetypes="cc"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#49c2f1;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;marker-start:none;marker-mid:none;marker-end:url(#DotSqn);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+ d="M 114.83517,272.83462 L 148.8189,308.26769"
+ id="path3716"
+ inkscape:connector-type="polyline"
+ inkscape:connection-start="#g2630" />
+ <path
+ sodipodi:nodetypes="cc"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#49c2f1;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;marker-start:none;marker-mid:none;marker-end:url(#DotSqn);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+ d="M 106.66359,195.49539 L 106.29921,237.40155"
+ id="path4304"
+ inkscape:connector-type="polyline"
+ inkscape:connection-start="#g3696" />
+ <g
+ transform="translate(24.465107,55.919946)"
+ id="g4308">
+ <rect
+ style="opacity:1;fill:#49c2f1;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="rect4310"
+ width="134.64566"
+ height="35.433067"
+ x="205.84985"
+ y="181.8969"
+ ry="3.7880721" />
+ <flowRoot
+ transform="translate(273.91267,204.25271)"
+ id="flowRoot4312"
+ style="font-size:12px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Helvetica Rounded LT Std;-inkscape-font-specification:Helvetica Rounded LT Std Bold"
+ xml:space="preserve"><flowRegion
+ id="flowRegion4314" /><flowPara
+ id="flowPara4316">BeanItem&lt;DaBean&gt;</flowPara></flowRoot> <path
+ sodipodi:type="arc"
+ style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.12598419;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:2.12598425, 2.12598425;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="path4318"
+ sodipodi:cx="487.20471"
+ sodipodi:cy="228.54329"
+ sodipodi:rx="7.0740213"
+ sodipodi:ry="7.0907817"
+ d="M 494.27873,228.54329 A 7.0740213,7.0907817 0 1 1 494.27873,228.53995"
+ sodipodi:start="0"
+ sodipodi:end="6.2827149"
+ transform="translate(-214.12137,-46.769087)"
+ sodipodi:open="true" />
+ </g>
+ <g
+ transform="translate(96.43882,-21.681466)"
+ id="g4320">
+ <rect
+ style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#49c2f1;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="rect4322"
+ width="74.409447"
+ height="35.43306"
+ x="234.86888"
+ y="181.8969"
+ ry="3.7880721" />
+ <flowRoot
+ transform="translate(273.91267,204.25271)"
+ id="flowRoot4324"
+ style="font-size:12px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Helvetica Rounded LT Std;-inkscape-font-specification:Helvetica Rounded LT Std Bold"
+ xml:space="preserve"><flowRegion
+ id="flowRegion4326" /><flowPara
+ id="flowPara4328">DaBean</flowPara></flowRoot> </g>
+ <g
+ transform="translate(25.457474,125.80388)"
+ id="g4330">
+ <rect
+ style="opacity:1;fill:#49c2f1;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="rect4332"
+ width="74.409447"
+ height="35.43306"
+ x="234.86888"
+ y="182.48613"
+ ry="3.7880721" />
+ <flowRoot
+ transform="translate(273.91267,204.25271)"
+ id="flowRoot4334"
+ style="font-size:12px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Helvetica Rounded LT Std;-inkscape-font-specification:Helvetica Rounded LT Std Bold"
+ xml:space="preserve"><flowRegion
+ id="flowRegion4336" /><flowPara
+ id="flowPara4338">Form</flowPara></flowRoot> <path
+ sodipodi:type="arc"
+ style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.12598419;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:2.12598425, 2.12598425;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="path4340"
+ sodipodi:cx="487.20471"
+ sodipodi:cy="228.54329"
+ sodipodi:rx="7.0740213"
+ sodipodi:ry="7.0907817"
+ d="M 494.27873,228.54329 A 7.0740213,7.0907817 0 1 1 494.27873,228.53995"
+ sodipodi:start="0"
+ sodipodi:end="6.2827149"
+ transform="translate(-215.0244,-46.226947)"
+ sodipodi:open="true" />
+ </g>
+ <path
+ sodipodi:nodetypes="cc"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#49c2f1;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;marker-start:none;marker-mid:none;marker-end:url(#DotSqn);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+ d="M 297.63779,273.24991 L 297.6378,308.26769"
+ id="path4342"
+ inkscape:connector-type="polyline" />
+ <g
+ transform="translate(167.18976,126.38479)"
+ id="g4344">
+ <rect
+ style="opacity:1;fill:#49c2f1;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="rect4346"
+ width="74.409447"
+ height="35.43306"
+ x="234.86888"
+ y="181.8969"
+ ry="3.7880721" />
+ <flowRoot
+ transform="translate(273.91267,204.25271)"
+ id="flowRoot4348"
+ style="font-size:12px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Helvetica Rounded LT Std;-inkscape-font-specification:Helvetica Rounded LT Std Bold"
+ xml:space="preserve"><flowRegion
+ id="flowRegion4350" /><flowPara
+ id="flowPara4352">Form</flowPara></flowRoot> <path
+ sodipodi:type="arc"
+ style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.12598419;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:2.12598425, 2.12598425;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="path4354"
+ sodipodi:cx="487.20471"
+ sodipodi:cy="228.54329"
+ sodipodi:rx="7.0740213"
+ sodipodi:ry="7.0907817"
+ d="M 494.27873,228.54329 A 7.0740213,7.0907817 0 1 1 494.27873,228.53995"
+ sodipodi:start="0"
+ sodipodi:end="6.2827149"
+ transform="translate(-215.0244,-46.226947)"
+ sodipodi:open="true" />
+ </g>
+ <path
+ sodipodi:nodetypes="cc"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#49c2f1;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;marker-start:none;marker-mid:none;marker-end:url(#DotSqn);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+ d="M 439.37007,273.24991 L 439.37008,308.26769"
+ id="path4356"
+ inkscape:connector-type="polyline"
+ inkscape:connection-start="#g4360" />
+ <path
+ sodipodi:nodetypes="cc"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#49c2f1;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;marker-start:none;marker-mid:none;marker-end:url(#DotSqn);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+ d="M 345.76938,197.14849 L 297.63779,237.81684"
+ id="path4358"
+ inkscape:connector-type="polyline"
+ inkscape:connection-start="#g4320" />
+ <g
+ transform="translate(166.19738,55.91995)"
+ id="g4360">
+ <rect
+ style="opacity:1;fill:#49c2f1;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="rect4362"
+ width="134.64566"
+ height="35.433067"
+ x="205.84985"
+ y="181.8969"
+ ry="3.7880721" />
+ <flowRoot
+ transform="translate(273.91267,204.25271)"
+ id="flowRoot4364"
+ style="font-size:12px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Helvetica Rounded LT Std;-inkscape-font-specification:Helvetica Rounded LT Std Bold"
+ xml:space="preserve"><flowRegion
+ id="flowRegion4366" /><flowPara
+ id="flowPara4368">BeanItem&lt;DaBean&gt;</flowPara></flowRoot> <path
+ sodipodi:type="arc"
+ style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.12598419;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:2.12598425, 2.12598425;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="path4370"
+ sodipodi:cx="487.20471"
+ sodipodi:cy="228.54329"
+ sodipodi:rx="7.0740213"
+ sodipodi:ry="7.0907817"
+ d="M 494.27873,228.54329 A 7.0740213,7.0907817 0 1 1 494.27873,228.53995"
+ sodipodi:start="0"
+ sodipodi:end="6.2827149"
+ transform="translate(-214.12137,-46.769087)"
+ sodipodi:open="true" />
+ </g>
+ <path
+ sodipodi:nodetypes="cc"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#49c2f1;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;marker-start:none;marker-mid:none;marker-end:url(#DotSqn);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+ d="M 391.25002,197.14849 L 439.37007,237.81684"
+ id="path4372"
+ inkscape:connector-type="polyline"
+ inkscape:connection-start="#g4320" />
+ </g>
+</svg>
diff --git a/documentation/datamodel/original-drawings/datamodel-interfaces.svg b/documentation/datamodel/original-drawings/datamodel-interfaces.svg
new file mode 100644
index 0000000000..051f60c48d
--- /dev/null
+++ b/documentation/datamodel/original-drawings/datamodel-interfaces.svg
@@ -0,0 +1,1321 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="744.09448"
+ height="1052.3622"
+ id="svg2475"
+ sodipodi:version="0.32"
+ inkscape:version="0.47pre4 r22446"
+ sodipodi:docname="datamodel-interfaces.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/home/magi/itmill/doc/cheatsheet/vaadin-cheatsheet.png"
+ inkscape:export-xdpi="300.01001"
+ inkscape:export-ydpi="300.01001"
+ version="1.0">
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10000"
+ guidetolerance="4"
+ objecttolerance="4"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1.6970563"
+ inkscape:cx="429.28864"
+ inkscape:cy="730.78696"
+ inkscape:document-units="mm"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1680"
+ inkscape:window-height="1030"
+ inkscape:window-x="-4"
+ inkscape:window-y="-3"
+ inkscape:snap-nodes="true"
+ inkscape:snap-bbox="true"
+ units="mm"
+ inkscape:snap-global="true"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ spacingy="1mm"
+ spacingx="1mm"
+ empspacing="5"
+ units="mm"
+ enabled="true"
+ visible="true"
+ id="grid4674"
+ type="xygrid"
+ dotted="false"
+ snapvisiblegridlinesonly="true" />
+ </sodipodi:namedview>
+ <defs
+ id="defs2477">
+ <marker
+ inkscape:stockid="Arrow1Lstart"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Lstart"
+ style="overflow:visible">
+ <path
+ id="path5210"
+ d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="matrix(0.8,0,0,0.8,10,0)" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="DotS"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="DotS">
+ <path
+ transform="matrix(0.2,0,0,0.2,1.48,0.2)"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+ d="M -2.5,-1 C -2.5,1.76 -4.74,4 -7.5,4 C -10.26,4 -12.5,1.76 -12.5,-1 C -12.5,-3.76 -10.26,-6 -7.5,-6 C -4.74,-6 -2.5,-3.76 -2.5,-1 z"
+ id="path3636" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleOutS"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutS"
+ style="overflow:visible">
+ <path
+ id="path3717"
+ d="M 5.77,0 L -2.88,5 L -2.88,-5 L 5.77,0 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="scale(0.2,0.2)" />
+ </marker>
+ <inkscape:path-effect
+ copytype="single_stretched"
+ pattern="M 349.202,225.086 L 405.895,331.386 L 370.462,338.472 "
+ prop_scale="1"
+ id="path-effect2503"
+ effect="skeletal" />
+ <inkscape:path-effect
+ prop_scale="1"
+ id="path-effect2499"
+ effect="skeletal" />
+ <inkscape:path-effect
+ pattern-nodetypes="cc"
+ pattern="M 432.28346,272.83462 L 403.93701,216.14171"
+ prop_scale="1"
+ id="path-effect2497"
+ effect="skeletal" />
+ <marker
+ style="overflow:visible"
+ id="Arrow1Send"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Send">
+ <path
+ transform="matrix(-0.2,0,0,-0.2,-1.2,0)"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z"
+ id="path3641" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow1Lend"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Lend">
+ <path
+ transform="matrix(-0.8,0,0,-0.8,-10,0)"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z"
+ id="path3629" />
+ </marker>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective3487" />
+ <marker
+ style="overflow:visible"
+ id="Arrow2Sendp"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow2Sendp">
+ <path
+ transform="matrix(-0.3,0,0,-0.3,0.69,0)"
+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z"
+ style="font-size:12px;fill:#f39300;fill-rule:evenodd;stroke:#f39300;stroke-width:0.625;stroke-linejoin:round"
+ id="path28139" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="TriangleOutSK"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="TriangleOutSK">
+ <path
+ transform="scale(0.2,0.2)"
+ style="fill:#49c2f1;fill-rule:evenodd;stroke:#49c2f1;stroke-width:1pt;marker-start:none"
+ d="M 5.77,0 L -2.88,5 L -2.88,-5 L 5.77,0 z"
+ id="path36611" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="TriangleOutSH"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="TriangleOutSH">
+ <path
+ transform="scale(0.2,0.2)"
+ style="fill:#49c2f1;fill-rule:evenodd;stroke:#49c2f1;stroke-width:1pt;marker-start:none"
+ d="M 5.77,0 L -2.88,5 L -2.88,-5 L 5.77,0 z"
+ id="path36614" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="TriangleOutSA"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="TriangleOutSA">
+ <path
+ transform="scale(0.2,0.2)"
+ style="fill:#49c2f1;fill-rule:evenodd;stroke:#49c2f1;stroke-width:1pt;marker-start:none"
+ d="M 5.77,0 L -2.88,5 L -2.88,-5 L 5.77,0 z"
+ id="path36617" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="TriangleOutSKF"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="TriangleOutSKF">
+ <path
+ transform="scale(0.2,0.2)"
+ style="fill:#49c2f1;fill-rule:evenodd;stroke:#49c2f1;stroke-width:1pt;marker-start:none"
+ d="M 5.77,0 L -2.88,5 L -2.88,-5 L 5.77,0 z"
+ id="path36620" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="TriangleOutS9"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="TriangleOutS9">
+ <path
+ transform="scale(0.2,0.2)"
+ style="fill:#49c2f1;fill-rule:evenodd;stroke:#49c2f1;stroke-width:1pt;marker-start:none"
+ d="M 5.77,0 L -2.88,5 L -2.88,-5 L 5.77,0 z"
+ id="path36623" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2SendpA"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow2SendpA">
+ <path
+ transform="matrix(-0.3,0,0,-0.3,0.69,0)"
+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z"
+ style="font-size:12px;fill:#d9d9cd;fill-rule:evenodd;stroke:#d9d9cd;stroke-width:0.625;stroke-linejoin:round"
+ id="path3396" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2Sendpg"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow2Sendpg">
+ <path
+ transform="matrix(-0.3,0,0,-0.3,0.69,0)"
+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z"
+ style="font-size:12px;fill:#fcc988;fill-rule:evenodd;stroke:#fcc988;stroke-width:0.625;stroke-linejoin:round"
+ id="path3360" />
+ </marker>
+ <filter
+ id="filter2780"
+ inkscape:label="White Halo"
+ width="1.1"
+ height="1.1">
+ <feMorphology
+ id="feMorphology2782"
+ operator="dilate"
+ radius="3"
+ result="result0" />
+ <feFlood
+ id="feFlood2786"
+ flood-color="rgb(255,255,255)"
+ flood-opacity="1"
+ in="result0"
+ result="result3" />
+ <feComposite
+ id="feComposite2623"
+ in="result3"
+ in2="result0"
+ operator="in"
+ result="result4" />
+ <feMerge
+ id="feMerge2629">
+ <feMergeNode
+ inkscape:collect="always"
+ id="feMergeNode2631"
+ in="result4" />
+ <feMergeNode
+ inkscape:collect="always"
+ id="feMergeNode2633"
+ in="SourceGraphic" />
+ </feMerge>
+ </filter>
+ <marker
+ inkscape:stockid="TriangleOutSn"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutSn"
+ style="overflow:visible">
+ <path
+ id="path4441"
+ d="M 5.77,0 L -2.88,5 L -2.88,-5 L 5.77,0 z"
+ style="fill:#d9d9cd;fill-rule:evenodd;stroke:#d9d9cd;stroke-width:1pt;marker-start:none"
+ transform="scale(0.2,0.2)" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleOutS9F"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutS9F"
+ style="overflow:visible">
+ <path
+ id="path4444"
+ d="M 5.77,0 L -2.88,5 L -2.88,-5 L 5.77,0 z"
+ style="fill:#d9d9cd;fill-rule:evenodd;stroke:#d9d9cd;stroke-width:1pt;marker-start:none"
+ transform="scale(0.2,0.2)" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleOutSI"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutSI"
+ style="overflow:visible">
+ <path
+ id="path4447"
+ d="M 5.77,0 L -2.88,5 L -2.88,-5 L 5.77,0 z"
+ style="fill:#d9d9cd;fill-rule:evenodd;stroke:#d9d9cd;stroke-width:1pt;marker-start:none"
+ transform="scale(0.2,0.2)" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleOutSO"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutSO"
+ style="overflow:visible">
+ <path
+ id="path4450"
+ d="M 5.77,0 L -2.88,5 L -2.88,-5 L 5.77,0 z"
+ style="fill:#d9d9cd;fill-rule:evenodd;stroke:#d9d9cd;stroke-width:1pt;marker-start:none"
+ transform="scale(0.2,0.2)" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleOutSW"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutSW"
+ style="overflow:visible">
+ <path
+ id="path4453"
+ d="M 5.77,0 L -2.88,5 L -2.88,-5 L 5.77,0 z"
+ style="fill:#d9d9cd;fill-rule:evenodd;stroke:#d9d9cd;stroke-width:1pt;marker-start:none"
+ transform="scale(0.2,0.2)" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleOutSB"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutSB"
+ style="overflow:visible">
+ <path
+ id="path4456"
+ d="M 5.77,0 L -2.88,5 L -2.88,-5 L 5.77,0 z"
+ style="fill:#d9d9cd;fill-rule:evenodd;stroke:#d9d9cd;stroke-width:1pt;marker-start:none"
+ transform="scale(0.2,0.2)" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleOutSZ"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutSZ"
+ style="overflow:visible">
+ <path
+ id="path4459"
+ d="M 5.77,0 L -2.88,5 L -2.88,-5 L 5.77,0 z"
+ style="fill:#d9d9cd;fill-rule:evenodd;stroke:#d9d9cd;stroke-width:1pt;marker-start:none"
+ transform="scale(0.2,0.2)" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="DotSq"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="DotSq">
+ <path
+ transform="matrix(0.2,0,0,0.2,1.48,0.2)"
+ style="fill:#d9d9cd;fill-rule:evenodd;stroke:#d9d9cd;stroke-width:1pt;marker-start:none;marker-end:none"
+ d="M -2.5,-1 C -2.5,1.76 -4.74,4 -7.5,4 C -10.26,4 -12.5,1.76 -12.5,-1 C -12.5,-3.76 -10.26,-6 -7.5,-6 C -4.74,-6 -2.5,-3.76 -2.5,-1 z"
+ id="path5853" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleOutSBO"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutSBO"
+ style="overflow:visible">
+ <path
+ id="path7501"
+ d="M 5.77,0 L -2.88,5 L -2.88,-5 L 5.77,0 z"
+ style="fill:#49c2f1;fill-rule:evenodd;stroke:#49c2f1;stroke-width:1pt;marker-start:none"
+ transform="scale(0.2,0.2)" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="DotSu"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="DotSu">
+ <path
+ transform="matrix(0.2,0,0,0.2,1.48,0.2)"
+ style="fill:#49c2f1;fill-rule:evenodd;stroke:#49c2f1;stroke-width:1pt;marker-start:none;marker-end:none"
+ d="M -2.5,-1 C -2.5,1.76 -4.74,4 -7.5,4 C -10.26,4 -12.5,1.76 -12.5,-1 C -12.5,-3.76 -10.26,-6 -7.5,-6 C -4.74,-6 -2.5,-3.76 -2.5,-1 z"
+ id="path9463" />
+ </marker>
+ <filter
+ height="1.1"
+ width="1.1"
+ inkscape:label="Black Halo"
+ id="filter10694">
+ <feMorphology
+ result="result0"
+ radius="3"
+ operator="dilate"
+ id="feMorphology10696" />
+ <feFlood
+ result="result3"
+ in="result0"
+ flood-opacity="1"
+ flood-color="rgb(0,0,0)"
+ id="feFlood10698" />
+ <feComposite
+ result="result4"
+ operator="in"
+ in2="result0"
+ in="result3"
+ id="feComposite10700" />
+ <feMerge
+ id="feMerge10702">
+ <feMergeNode
+ in="result4"
+ id="feMergeNode10704"
+ inkscape:collect="always" />
+ <feMergeNode
+ in="SourceGraphic"
+ id="feMergeNode10706"
+ inkscape:collect="always" />
+ </feMerge>
+ </filter>
+ <marker
+ inkscape:stockid="TriangleOutSu"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutSu"
+ style="overflow:visible">
+ <path
+ id="path8127"
+ d="M 5.77,0 L -2.88,5 L -2.88,-5 L 5.77,0 z"
+ style="fill:#49c2f1;fill-rule:evenodd;stroke:#49c2f1;stroke-width:1pt;marker-start:none"
+ transform="scale(0.2,0.2)" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleOutSI8"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutSI8"
+ style="overflow:visible">
+ <path
+ id="path8130"
+ d="M 5.77,0 L -2.88,5 L -2.88,-5 L 5.77,0 z"
+ style="fill:#49c2f1;fill-rule:evenodd;stroke:#49c2f1;stroke-width:1pt;marker-start:none"
+ transform="scale(0.2,0.2)" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleOutSr"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutSr"
+ style="overflow:visible">
+ <path
+ id="path8133"
+ d="M 5.77,0 L -2.88,5 L -2.88,-5 L 5.77,0 z"
+ style="fill:#49c2f1;fill-rule:evenodd;stroke:#49c2f1;stroke-width:1pt;marker-start:none"
+ transform="scale(0.2,0.2)" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleOutSM"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutSM"
+ style="overflow:visible">
+ <path
+ id="path8136"
+ d="M 5.77,0 L -2.88,5 L -2.88,-5 L 5.77,0 z"
+ style="fill:#49c2f1;fill-rule:evenodd;stroke:#49c2f1;stroke-width:1pt;marker-start:none"
+ transform="scale(0.2,0.2)" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleOutSb"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutSb"
+ style="overflow:visible">
+ <path
+ id="path8139"
+ d="M 5.77,0 L -2.88,5 L -2.88,-5 L 5.77,0 z"
+ style="fill:#49c2f1;fill-rule:evenodd;stroke:#49c2f1;stroke-width:1pt;marker-start:none"
+ transform="scale(0.2,0.2)" />
+ </marker>
+ <marker
+ id="marker18095"
+ orient="auto"
+ markerHeight="5.7450776"
+ markerWidth="4.6297302">
+ <g
+ id="g11064"
+ transform="matrix(0.5,0,0,0.5,-185.64298,-257.19655)">
+ <path
+ sodipodi:nodetypes="csccccccsccssssssssssssssccc"
+ id="path11050"
+ d="M 370,508.65625 C 369.13933,508.715 368.39056,509.27755 368.09375,510.09375 C 367.82399,510.83551 368.03605,511.62868 368.53125,512.21875 L 366.78125,512.21875 C 366.73884,512.21408 366.69882,512.22093 366.65625,512.21875 L 366.65625,516.59375 L 366.78125,516.59375 L 368.53125,516.59375 C 367.85229,517.45345 367.83424,518.70924 368.625,519.5 C 369.47591,520.35091 370.89909,520.35091 371.75,519.5 L 375.09375,516.125 C 375.12672,516.09552 375.15802,516.06422 375.1875,516.03125 C 375.21972,516.01191 375.25101,515.99105 375.28125,515.96875 C 375.28162,515.96839 375.49976,515.68796 375.5,515.6875 C 375.50005,515.68741 375.49338,515.64282 375.5,515.625 C 375.5011,515.62203 375.53002,515.62832 375.53125,515.625 C 375.57039,515.57293 375.58228,515.57321 375.625,515.5 C 375.76199,515.26524 375.79184,515.12809 375.78125,515.15625 C 375.81807,515.06473 375.79977,515.04374 375.8125,515 C 375.82311,514.98978 375.83353,514.97936 375.84375,514.96875 C 375.90379,514.74477 375.93181,514.45186 375.90625,514.1875 C 375.89266,513.98387 375.84739,513.88985 375.84375,513.875 C 375.84389,513.86458 375.84389,513.85417 375.84375,513.84375 C 375.86975,513.94071 375.85901,513.85978 375.75,513.59375 C 375.69753,513.46336 375.66014,513.37439 375.625,513.3125 C 375.57262,513.22275 375.49154,513.05015 375.28125,512.84375 L 371.75,509.3125 C 371.29355,508.82579 370.66491,508.60087 370,508.65625 z"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cccscccsssssssscccsccc"
+ id="path11035"
+ d="M 366.65625,515.40625 L 371.28125,515.40625 L 369.46875,517.21875 C 369.0718,517.6157 369.0718,518.2593 369.46875,518.65625 C 369.8657,519.0532 370.5093,519.0532 370.90625,518.65625 L 374.34375,515.1875 L 374.4375,515.125 C 374.44343,515.11918 374.43171,515.09972 374.4375,515.09375 C 374.49291,515.03659 374.5526,514.97676 374.59375,514.90625 C 374.62239,514.85717 374.63663,514.80216 374.65625,514.75 C 374.66861,514.71928 374.67831,514.68783 374.6875,514.65625 C 374.71862,514.54015 374.73024,514.43132 374.71875,514.3125 C 374.71489,514.25466 374.70138,514.21285 374.6875,514.15625 C 374.6766,514.1156 374.67237,514.07059 374.65625,514.03125 C 374.63982,513.99042 374.61578,513.94505 374.59375,513.90625 C 374.5483,513.82838 374.50015,513.74899 374.4375,513.6875 L 370.90625,510.15625 C 370.69734,509.93349 370.39809,509.8184 370.09375,509.84375 C 369.69897,509.8707 369.35398,510.12813 369.21875,510.5 C 369.08351,510.87187 369.18349,511.28826 369.46875,511.5625 L 371.34375,513.40625 L 366.65625,513.40625"
+ style="fill:#49c2f1;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+ </marker>
+ <marker
+ id="marker44971"
+ orient="auto"
+ markerHeight="5.7450781"
+ markerWidth="4.6297355">
+ <g
+ id="g18059"
+ transform="matrix(0.5,0,0,0.5,-185.64299,-257.19655)">
+ <path
+ sodipodi:nodetypes="csccccccsccssssssssssssssccc"
+ id="path18061"
+ d="M 370,508.65625 C 369.13933,508.715 368.39056,509.27755 368.09375,510.09375 C 367.82399,510.83551 368.03605,511.62868 368.53125,512.21875 L 366.78125,512.21875 C 366.73884,512.21408 366.69882,512.22093 366.65625,512.21875 L 366.65625,516.59375 L 366.78125,516.59375 L 368.53125,516.59375 C 367.85229,517.45345 367.83424,518.70924 368.625,519.5 C 369.47591,520.35091 370.89909,520.35091 371.75,519.5 L 375.09375,516.125 C 375.12672,516.09552 375.15802,516.06422 375.1875,516.03125 C 375.21972,516.01191 375.25101,515.99105 375.28125,515.96875 C 375.28162,515.96839 375.49976,515.68796 375.5,515.6875 C 375.50005,515.68741 375.49338,515.64282 375.5,515.625 C 375.5011,515.62203 375.53002,515.62832 375.53125,515.625 C 375.57039,515.57293 375.58228,515.57321 375.625,515.5 C 375.76199,515.26524 375.79184,515.12809 375.78125,515.15625 C 375.81807,515.06473 375.79977,515.04374 375.8125,515 C 375.82311,514.98978 375.83353,514.97936 375.84375,514.96875 C 375.90379,514.74477 375.93181,514.45186 375.90625,514.1875 C 375.89266,513.98387 375.84739,513.88985 375.84375,513.875 C 375.84389,513.86458 375.84389,513.85417 375.84375,513.84375 C 375.86975,513.94071 375.85901,513.85978 375.75,513.59375 C 375.69753,513.46336 375.66014,513.37439 375.625,513.3125 C 375.57262,513.22275 375.49154,513.05015 375.28125,512.84375 L 371.75,509.3125 C 371.29355,508.82579 370.66491,508.60087 370,508.65625 z"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cccscccsssssssscccsccc"
+ id="path18063"
+ d="M 366.65625,515.40625 L 371.28125,515.40625 L 369.46875,517.21875 C 369.0718,517.6157 369.0718,518.2593 369.46875,518.65625 C 369.8657,519.0532 370.5093,519.0532 370.90625,518.65625 L 374.34375,515.1875 L 374.4375,515.125 C 374.44343,515.11918 374.43171,515.09972 374.4375,515.09375 C 374.49291,515.03659 374.5526,514.97676 374.59375,514.90625 C 374.62239,514.85717 374.63663,514.80216 374.65625,514.75 C 374.66861,514.71928 374.67831,514.68783 374.6875,514.65625 C 374.71862,514.54015 374.73024,514.43132 374.71875,514.3125 C 374.71489,514.25466 374.70138,514.21285 374.6875,514.15625 C 374.6766,514.1156 374.67237,514.07059 374.65625,514.03125 C 374.63982,513.99042 374.61578,513.94505 374.59375,513.90625 C 374.5483,513.82838 374.50015,513.74899 374.4375,513.6875 L 370.90625,510.15625 C 370.69734,509.93349 370.39809,509.8184 370.09375,509.84375 C 369.69897,509.8707 369.35398,510.12813 369.21875,510.5 C 369.08351,510.87187 369.18349,511.28826 369.46875,511.5625 L 371.34375,513.40625 L 366.65625,513.40625"
+ style="fill:#d9d9cd;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+ </marker>
+ <marker
+ id="marker52016"
+ orient="auto"
+ markerHeight="5.7450786"
+ markerWidth="4.6297302">
+ <g
+ id="g52010"
+ transform="matrix(0.5,0,0,0.5,-185.64299,-257.19655)">
+ <path
+ sodipodi:nodetypes="csccccccsccssssssssssssssccc"
+ id="path52012"
+ d="M 370,508.65625 C 369.13933,508.715 368.39056,509.27755 368.09375,510.09375 C 367.82399,510.83551 368.03605,511.62868 368.53125,512.21875 L 366.78125,512.21875 C 366.73884,512.21408 366.69882,512.22093 366.65625,512.21875 L 366.65625,516.59375 L 366.78125,516.59375 L 368.53125,516.59375 C 367.85229,517.45345 367.83424,518.70924 368.625,519.5 C 369.47591,520.35091 370.89909,520.35091 371.75,519.5 L 375.09375,516.125 C 375.12672,516.09552 375.15802,516.06422 375.1875,516.03125 C 375.21972,516.01191 375.25101,515.99105 375.28125,515.96875 C 375.28162,515.96839 375.49976,515.68796 375.5,515.6875 C 375.50005,515.68741 375.49338,515.64282 375.5,515.625 C 375.5011,515.62203 375.53002,515.62832 375.53125,515.625 C 375.57039,515.57293 375.58228,515.57321 375.625,515.5 C 375.76199,515.26524 375.79184,515.12809 375.78125,515.15625 C 375.81807,515.06473 375.79977,515.04374 375.8125,515 C 375.82311,514.98978 375.83353,514.97936 375.84375,514.96875 C 375.90379,514.74477 375.93181,514.45186 375.90625,514.1875 C 375.89266,513.98387 375.84739,513.88985 375.84375,513.875 C 375.84389,513.86458 375.84389,513.85417 375.84375,513.84375 C 375.86975,513.94071 375.85901,513.85978 375.75,513.59375 C 375.69753,513.46336 375.66014,513.37439 375.625,513.3125 C 375.57262,513.22275 375.49154,513.05015 375.28125,512.84375 L 371.75,509.3125 C 371.29355,508.82579 370.66491,508.60087 370,508.65625 z"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cccscccsssssssscccsccc"
+ id="path52014"
+ d="M 366.65625,515.40625 L 371.28125,515.40625 L 369.46875,517.21875 C 369.0718,517.6157 369.0718,518.2593 369.46875,518.65625 C 369.8657,519.0532 370.5093,519.0532 370.90625,518.65625 L 374.34375,515.1875 L 374.4375,515.125 C 374.44343,515.11918 374.43171,515.09972 374.4375,515.09375 C 374.49291,515.03659 374.5526,514.97676 374.59375,514.90625 C 374.62239,514.85717 374.63663,514.80216 374.65625,514.75 C 374.66861,514.71928 374.67831,514.68783 374.6875,514.65625 C 374.71862,514.54015 374.73024,514.43132 374.71875,514.3125 C 374.71489,514.25466 374.70138,514.21285 374.6875,514.15625 C 374.6766,514.1156 374.67237,514.07059 374.65625,514.03125 C 374.63982,513.99042 374.61578,513.94505 374.59375,513.90625 C 374.5483,513.82838 374.50015,513.74899 374.4375,513.6875 L 370.90625,510.15625 C 370.69734,509.93349 370.39809,509.8184 370.09375,509.84375 C 369.69897,509.8707 369.35398,510.12813 369.21875,510.5 C 369.08351,510.87187 369.18349,511.28826 369.46875,511.5625 L 371.34375,513.40625 L 366.65625,513.40625"
+ style="fill:#f39300;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+ </marker>
+ <marker
+ id="marker64887"
+ orient="auto"
+ markerHeight="5.745079"
+ markerWidth="4.6297255">
+ <g
+ id="g64855"
+ transform="matrix(0.5,0,0,0.5,-185.64299,-257.19655)">
+ <path
+ sodipodi:nodetypes="csccccccsccssssssssssssssccc"
+ id="path64857"
+ d="M 370,508.65625 C 369.13933,508.715 368.39056,509.27755 368.09375,510.09375 C 367.82399,510.83551 368.03605,511.62868 368.53125,512.21875 L 366.78125,512.21875 C 366.73884,512.21408 366.69882,512.22093 366.65625,512.21875 L 366.65625,516.59375 L 366.78125,516.59375 L 368.53125,516.59375 C 367.85229,517.45345 367.83424,518.70924 368.625,519.5 C 369.47591,520.35091 370.89909,520.35091 371.75,519.5 L 375.09375,516.125 C 375.12672,516.09552 375.15802,516.06422 375.1875,516.03125 C 375.21972,516.01191 375.25101,515.99105 375.28125,515.96875 C 375.28162,515.96839 375.49976,515.68796 375.5,515.6875 C 375.50005,515.68741 375.49338,515.64282 375.5,515.625 C 375.5011,515.62203 375.53002,515.62832 375.53125,515.625 C 375.57039,515.57293 375.58228,515.57321 375.625,515.5 C 375.76199,515.26524 375.79184,515.12809 375.78125,515.15625 C 375.81807,515.06473 375.79977,515.04374 375.8125,515 C 375.82311,514.98978 375.83353,514.97936 375.84375,514.96875 C 375.90379,514.74477 375.93181,514.45186 375.90625,514.1875 C 375.89266,513.98387 375.84739,513.88985 375.84375,513.875 C 375.84389,513.86458 375.84389,513.85417 375.84375,513.84375 C 375.86975,513.94071 375.85901,513.85978 375.75,513.59375 C 375.69753,513.46336 375.66014,513.37439 375.625,513.3125 C 375.57262,513.22275 375.49154,513.05015 375.28125,512.84375 L 371.75,509.3125 C 371.29355,508.82579 370.66491,508.60087 370,508.65625 z"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cccscccsssssssscccsccc"
+ id="path64859"
+ d="M 366.65625,515.40625 L 371.28125,515.40625 L 369.46875,517.21875 C 369.0718,517.6157 369.0718,518.2593 369.46875,518.65625 C 369.8657,519.0532 370.5093,519.0532 370.90625,518.65625 L 374.34375,515.1875 L 374.4375,515.125 C 374.44343,515.11918 374.43171,515.09972 374.4375,515.09375 C 374.49291,515.03659 374.5526,514.97676 374.59375,514.90625 C 374.62239,514.85717 374.63663,514.80216 374.65625,514.75 C 374.66861,514.71928 374.67831,514.68783 374.6875,514.65625 C 374.71862,514.54015 374.73024,514.43132 374.71875,514.3125 C 374.71489,514.25466 374.70138,514.21285 374.6875,514.15625 C 374.6766,514.1156 374.67237,514.07059 374.65625,514.03125 C 374.63982,513.99042 374.61578,513.94505 374.59375,513.90625 C 374.5483,513.82838 374.50015,513.74899 374.4375,513.6875 L 370.90625,510.15625 C 370.69734,509.93349 370.39809,509.8184 370.09375,509.84375 C 369.69897,509.8707 369.35398,510.12813 369.21875,510.5 C 369.08351,510.87187 369.18349,511.28826 369.46875,511.5625 L 371.34375,513.40625 L 366.65625,513.40625"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+ </marker>
+ <marker
+ id="marker4057"
+ orient="auto"
+ markerHeight="5.745079"
+ markerWidth="4.6297302">
+ <g
+ id="g51986"
+ transform="matrix(0.5,0,0,0.5,-185.64299,-257.19655)">
+ <path
+ sodipodi:nodetypes="csccccccsccssssssssssssssccc"
+ id="path51988"
+ d="M 370,508.65625 C 369.13933,508.715 368.39056,509.27755 368.09375,510.09375 C 367.82399,510.83551 368.03605,511.62868 368.53125,512.21875 L 366.78125,512.21875 C 366.73884,512.21408 366.69882,512.22093 366.65625,512.21875 L 366.65625,516.59375 L 366.78125,516.59375 L 368.53125,516.59375 C 367.85229,517.45345 367.83424,518.70924 368.625,519.5 C 369.47591,520.35091 370.89909,520.35091 371.75,519.5 L 375.09375,516.125 C 375.12672,516.09552 375.15802,516.06422 375.1875,516.03125 C 375.21972,516.01191 375.25101,515.99105 375.28125,515.96875 C 375.28162,515.96839 375.49976,515.68796 375.5,515.6875 C 375.50005,515.68741 375.49338,515.64282 375.5,515.625 C 375.5011,515.62203 375.53002,515.62832 375.53125,515.625 C 375.57039,515.57293 375.58228,515.57321 375.625,515.5 C 375.76199,515.26524 375.79184,515.12809 375.78125,515.15625 C 375.81807,515.06473 375.79977,515.04374 375.8125,515 C 375.82311,514.98978 375.83353,514.97936 375.84375,514.96875 C 375.90379,514.74477 375.93181,514.45186 375.90625,514.1875 C 375.89266,513.98387 375.84739,513.88985 375.84375,513.875 C 375.84389,513.86458 375.84389,513.85417 375.84375,513.84375 C 375.86975,513.94071 375.85901,513.85978 375.75,513.59375 C 375.69753,513.46336 375.66014,513.37439 375.625,513.3125 C 375.57262,513.22275 375.49154,513.05015 375.28125,512.84375 L 371.75,509.3125 C 371.29355,508.82579 370.66491,508.60087 370,508.65625 z"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cccscccsssssssscccsccc"
+ id="path51990"
+ d="M 366.65625,515.40625 L 371.28125,515.40625 L 369.46875,517.21875 C 369.0718,517.6157 369.0718,518.2593 369.46875,518.65625 C 369.8657,519.0532 370.5093,519.0532 370.90625,518.65625 L 374.34375,515.1875 L 374.4375,515.125 C 374.44343,515.11918 374.43171,515.09972 374.4375,515.09375 C 374.49291,515.03659 374.5526,514.97676 374.59375,514.90625 C 374.62239,514.85717 374.63663,514.80216 374.65625,514.75 C 374.66861,514.71928 374.67831,514.68783 374.6875,514.65625 C 374.71862,514.54015 374.73024,514.43132 374.71875,514.3125 C 374.71489,514.25466 374.70138,514.21285 374.6875,514.15625 C 374.6766,514.1156 374.67237,514.07059 374.65625,514.03125 C 374.63982,513.99042 374.61578,513.94505 374.59375,513.90625 C 374.5483,513.82838 374.50015,513.74899 374.4375,513.6875 L 370.90625,510.15625 C 370.69734,509.93349 370.39809,509.8184 370.09375,509.84375 C 369.69897,509.8707 369.35398,510.12813 369.21875,510.5 C 369.08351,510.87187 369.18349,511.28826 369.46875,511.5625 L 371.34375,513.40625 L 366.65625,513.40625"
+ style="fill:#49c2f1;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+ </marker>
+ <marker
+ id="marker72805"
+ orient="auto"
+ markerHeight="4.5568175"
+ markerWidth="4.0334239">
+ <path
+ sodipodi:nodetypes="cccscccsssssssscccsccc"
+ id="path18057"
+ d="M -2.0167119,0.50456824 L 0.29578813,0.50456824 L -0.61046187,1.4108182 C -0.80893187,1.6092982 -0.80893187,1.9310982 -0.61046187,2.1295682 C -0.41198187,2.3280482 -0.090181874,2.3280482 0.10828813,2.1295682 L 1.8270381,0.39519824 L 1.8739181,0.36394824 C 1.8768781,0.36103824 1.8710181,0.35130824 1.8739181,0.34831824 C 1.9016181,0.31973824 1.9314681,0.28982824 1.9520381,0.25456824 C 1.9663581,0.23002824 1.9734781,0.20252824 1.9832881,0.17644824 C 1.9894681,0.16108824 1.9943181,0.14535824 1.9989181,0.12956824 C 2.0144781,0.07151824 2.0202881,0.01710824 2.0145381,-0.04230176 C 2.0126081,-0.07122176 2.0058581,-0.09213176 1.9989181,-0.12043176 C 1.9934681,-0.14075176 1.9913481,-0.16326176 1.9832881,-0.18293176 C 1.9750781,-0.20334176 1.9630581,-0.22603176 1.9520381,-0.24543176 C 1.9293181,-0.28436176 1.9052381,-0.32406176 1.8739181,-0.35480176 L 0.10828813,-2.1204318 C 0.003838126,-2.2318118 -0.14579187,-2.2893518 -0.29796187,-2.2766818 C -0.49535187,-2.2632018 -0.66784187,-2.1344918 -0.73546187,-1.9485518 C -0.80308187,-1.7626218 -0.75309187,-1.5544218 -0.61046187,-1.4173018 L 0.32703813,-0.49543176 L -2.0167119,-0.49543176"
+ style="fill:#f39300;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </marker>
+ <marker
+ id="marker72808"
+ orient="auto"
+ markerHeight="4.5568123"
+ markerWidth="4.0334177">
+ <path
+ sodipodi:nodetypes="cccscccsssssssscccsccc"
+ id="path72801"
+ d="M -2.016709,0.50457301 L 0.29579105,0.50457301 L -0.61045895,1.410823 C -0.80893895,1.609293 -0.80893895,1.931093 -0.61045895,2.129573 C -0.41198895,2.328043 -0.090188953,2.328043 0.10829105,2.129573 L 1.827041,0.39519301 L 1.873911,0.36394301 C 1.876881,0.36103301 1.871021,0.35130301 1.873911,0.34832301 C 1.901621,0.31974301 1.931461,0.28982301 1.952041,0.25457301 C 1.966361,0.23003301 1.973481,0.20252301 1.983291,0.17644301 C 1.989471,0.16108301 1.994321,0.14536301 1.998911,0.12957301 C 2.014471,0.071523013 2.020281,0.017103013 2.014541,-0.042306987 C 2.012611,-0.071226987 2.005851,-0.092126987 1.998911,-0.12042699 C 1.993461,-0.14075699 1.991351,-0.16325699 1.983291,-0.18292699 C 1.975071,-0.20334699 1.963051,-0.22602699 1.952041,-0.24542699 C 1.929311,-0.28436699 1.905241,-0.32405699 1.873911,-0.35480699 L 0.10829105,-2.120427 C 0.003831047,-2.231807 -0.14578895,-2.289357 -0.29795895,-2.276677 C -0.49534895,-2.263207 -0.66784895,-2.134487 -0.73545895,-1.948557 C -0.80307895,-1.762617 -0.75308895,-1.554427 -0.61045895,-1.417307 L 0.32704105,-0.49542699 L -2.016709,-0.49542699"
+ style="fill:#d9d9cd;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="DotSuN"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="DotSuN">
+ <path
+ transform="matrix(0.2,0,0,0.2,1.48,0.2)"
+ style="fill:#f39300;fill-rule:evenodd;stroke:#f39300;stroke-width:1pt;marker-start:none;marker-end:none"
+ d="M -2.5,-1 C -2.5,1.76 -4.74,4 -7.5,4 C -10.26,4 -12.5,1.76 -12.5,-1 C -12.5,-3.76 -10.26,-6 -7.5,-6 C -4.74,-6 -2.5,-3.76 -2.5,-1 z"
+ id="path81580" />
+ </marker>
+ <inkscape:perspective
+ id="perspective3071"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ <inkscape:perspective
+ id="perspective3071-3"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ </defs>
+ <metadata
+ id="metadata2480">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:groupmode="layer"
+ inkscape:label="Layer 1">
+ <rect
+ style="fill:#ffffff;fill-opacity:1;stroke:none"
+ id="rect3139"
+ width="393.30707"
+ height="322.44095"
+ x="322.44095"
+ y="134.64565"
+ ry="3.7880721" />
+ <rect
+ style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.77165353;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="rect6642"
+ width="387.10629"
+ height="205.51181"
+ x="325.09842"
+ y="138.18895"
+ ry="3.7880721" />
+ <g
+ id="g2870"
+ transform="translate(176.19402,101.81896)">
+ <rect
+ ry="3.7880721"
+ y="181.8969"
+ x="205.84985"
+ height="35.433067"
+ width="99.212601"
+ id="rect2872"
+ style="opacity:1;fill:#d9d9cd;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <flowRoot
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Helvetica Rounded LT Std;-inkscape-font-specification:Helvetica Rounded LT Std Bold"
+ id="flowRoot2874"
+ transform="translate(255.02722,204.55399)"><flowRegion
+ id="flowRegion2876" /><flowPara
+ id="flowPara2880">Property</flowPara></flowRoot> </g>
+ <g
+ id="g5098"
+ transform="translate(175.94148,45.126049)">
+ <rect
+ ry="3.7880721"
+ y="181.8969"
+ x="205.84985"
+ height="35.433067"
+ width="99.212601"
+ id="rect5100"
+ style="opacity:1;fill:#d9d9cd;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <flowRoot
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Helvetica Rounded LT Std;-inkscape-font-specification:Helvetica Rounded LT Std Bold"
+ id="flowRoot5102"
+ transform="translate(254.32934,203.83604)"><flowRegion
+ id="flowRegion5104" /><flowPara
+ id="flowPara5108">Item</flowPara></flowRoot> </g>
+ <g
+ id="g3740"
+ transform="translate(291.4357,78.274004)">
+ <rect
+ ry="3.7880721"
+ y="235.59096"
+ x="182.48161"
+ height="17.716536"
+ width="102.75591"
+ id="rect3742"
+ style="opacity:1;fill:#d9d9cd;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1.77165353;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <flowRoot
+ xml:space="preserve"
+ style="font-size:9px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Helvetica Rounded LT Std;-inkscape-font-specification:Helvetica Rounded LT Std Bold"
+ id="flowRoot3744"
+ transform="translate(234.16765,246.96275)"><flowRegion
+ id="flowRegion3746" /><flowPara
+ id="flowPara3750">ValueChangeListener</flowPara></flowRoot> </g>
+ <path
+ inkscape:connector-type="polyline"
+ id="path3776"
+ d="M 410.32826,365.0986 371.52155,332.46732"
+ style="fill:none;stroke:#d9d9cd;stroke-width:2.83464575;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-mid:none;marker-end:url(#marker44971);display:inline"
+ inkscape:connection-start="#g2854" />
+ <flowRoot
+ style="font-size:12px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Helvetica Rounded LT Std;-inkscape-font-specification:Helvetica Rounded LT Std Bold"
+ id="flowRoot2485"
+ xml:space="preserve"
+ transform="translate(-0.8858472,0)"><flowRegion
+ id="flowRegion2487"><rect
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:Helvetica Rounded LT Std;-inkscape-font-specification:Helvetica Rounded LT Std Bold"
+ y="238.07646"
+ x="262.85715"
+ height="120"
+ width="184.28572"
+ id="rect2489" /></flowRegion><flowPara
+ id="flowPara2491" /></flowRoot> <g
+ transform="translate(-4.4572759,23.214286)"
+ id="g3178" />
+ <path
+ inkscape:connection-end="#g2870"
+ inkscape:connector-type="polyline"
+ id="path2882"
+ d="m 431.4526,365.0986 0.1426,-45.94968"
+ style="fill:none;stroke:#d9d9cd;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-mid:none;marker-end:url(#marker44971);display:inline"
+ inkscape:connection-start="#g2854" />
+ <path
+ inkscape:connection-start="#g2854"
+ inkscape:connection-end="#g3740"
+ inkscape:connector-type="polyline"
+ id="path5048"
+ d="m 459.0809,365.0986 52.37273,-33.5171"
+ style="fill:none;stroke:#d9d9cd;stroke-width:2.83464575;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-mid:none;marker-end:url(#marker44971);display:inline" />
+ <g
+ id="g2854"
+ transform="translate(222.75553,132.03305)">
+ <rect
+ ry="3.7880721"
+ y="233.06555"
+ x="166.12241"
+ height="35.433075"
+ width="85.039375"
+ id="rect2856"
+ style="fill:#d9d9cd;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <flowRoot
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Helvetica Rounded LT Std;-inkscape-font-specification:Helvetica Rounded LT Std Bold"
+ id="flowRoot2858"
+ transform="translate(207.58709,255.55638)"><flowRegion
+ id="flowRegion2860" /><flowPara
+ id="flowPara2864">Field</flowPara></flowRoot> </g>
+ <path
+ inkscape:connection-end="#g2854"
+ inkscape:connection-start="#g2802"
+ inkscape:connector-type="polyline"
+ id="path2868"
+ d="m 431.37248,418.96375 0.0128,-18.43207"
+ style="fill:none;stroke:#f39300;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-mid:none;marker-end:url(#marker52016);display:inline" />
+ <g
+ id="g3752"
+ transform="translate(291.4357,58.754809)">
+ <rect
+ ry="3.7880721"
+ y="235.59096"
+ x="182.48161"
+ height="17.716536"
+ width="102.75591"
+ id="rect3754"
+ style="opacity:1;fill:#d9d9cd;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1.77165353;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <flowRoot
+ xml:space="preserve"
+ style="font-size:9px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Helvetica Rounded LT Std;-inkscape-font-specification:Helvetica Rounded LT Std Bold"
+ id="flowRoot3756"
+ transform="translate(233.81083,246.99763)"><flowRegion
+ id="flowRegion3758" /><flowPara
+ id="flowPara3762">ValueChangeEvent</flowPara></flowRoot> </g>
+ <g
+ transform="translate(203.72084,210.41373)"
+ id="g2802">
+ <rect
+ ry="3.7880721"
+ y="208.55002"
+ x="172.42705"
+ height="35.93816"
+ width="110.42418"
+ id="rect2804"
+ style="fill:#f39300;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <flowRoot
+ transform="translate(226.79094,230.27406)"
+ id="flowRoot2806"
+ style="font-size:12px;font-style:italic;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Helvetica Rounded LT Std;-inkscape-font-specification:Helvetica Rounded LT Std Bold Italic"
+ xml:space="preserve"><flowRegion
+ id="flowRegion2808" /><flowPara
+ id="flowPara2812">AbstractField</flowPara></flowRoot> </g>
+ <g
+ id="g5110"
+ transform="translate(176.19402,-15.110183)">
+ <rect
+ ry="3.7880721"
+ y="181.8969"
+ x="205.84985"
+ height="35.433067"
+ width="99.212601"
+ id="rect5112"
+ style="opacity:1;fill:#d9d9cd;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <flowRoot
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Helvetica Rounded LT Std;-inkscape-font-specification:Helvetica Rounded LT Std Bold"
+ id="flowRoot5114"
+ transform="translate(255.50671,204.20613)"><flowRegion
+ id="flowRegion5116" /><flowPara
+ id="flowPara5120">Container</flowPara></flowRoot> </g>
+ <g
+ id="g5146"
+ transform="translate(152.8407,-40.751695)">
+ <rect
+ ry="3.7880721"
+ y="235.59096"
+ x="182.48161"
+ height="17.716534"
+ width="49.6063"
+ id="rect5148"
+ style="fill:#d9d9cd;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1.77165353;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <flowRoot
+ xml:space="preserve"
+ style="font-size:9px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Helvetica Rounded LT Std;-inkscape-font-specification:Helvetica Rounded LT Std Bold"
+ id="flowRoot5150"
+ transform="translate(205.92958,247.90652)"><flowRegion
+ id="flowRegion5152" /><flowPara
+ id="flowPara5156">Editor</flowPara></flowRoot> </g>
+ <g
+ id="g5158"
+ transform="translate(152.8407,-60.67148)">
+ <rect
+ ry="3.7880721"
+ y="235.59096"
+ x="182.48161"
+ height="17.716534"
+ width="49.6063"
+ id="rect5160"
+ style="fill:#d9d9cd;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1.77165353;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <flowRoot
+ xml:space="preserve"
+ style="font-size:9px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Helvetica Rounded LT Std;-inkscape-font-specification:Helvetica Rounded LT Std Bold"
+ id="flowRoot5162"
+ transform="translate(205.46539,247.16347)"><flowRegion
+ id="flowRegion5164" /><flowPara
+ id="flowPara5168">Viewer</flowPara></flowRoot> </g>
+ <flowRoot
+ transform="translate(31.312673,-134.1482)"
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:end;line-height:125%;writing-mode:lr-tb;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Helvetica Rounded LT Std;-inkscape-font-specification:Helvetica Rounded LT Std Bold"
+ id="flowRoot6644"
+ xml:space="preserve"><flowRegion
+ id="flowRegion6646"><rect
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:end;line-height:125%;writing-mode:lr-tb;text-anchor:end;fill:#000000;fill-opacity:1;font-family:Helvetica Rounded LT Std;-inkscape-font-specification:Helvetica Rounded LT Std Bold"
+ y="280.93362"
+ x="202.85715"
+ height="99.581009"
+ width="204.28046"
+ id="rect6648" /></flowRegion><flowPara
+ id="flowPara6650">Data Model</flowPara></flowRoot> <path
+ inkscape:connector-type="polyline"
+ id="path6692"
+ d="M 491.6841,213.79089 L 491.89141,158.02434"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#d9d9cd;stroke-width:2.83464575;stroke-linecap:round;stroke-linejoin:round;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-type="polyline"
+ id="path6694"
+ d="M 502.26376,185.75889 L 481.25647,185.38534"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#d9d9cd;stroke-width:2.83464575;stroke-linecap:round;stroke-linejoin:round;marker-start:none;marker-mid:none;marker-end:url(#marker44971);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+ sodipodi:nodetypes="cc"
+ inkscape:connection-end="#g5110"
+ inkscape:connection-start="#g6678" />
+ <g
+ id="g6618"
+ transform="translate(319.78215,-86.772082)">
+ <rect
+ ry="3.7880721"
+ y="235.59096"
+ x="182.48161"
+ height="17.716534"
+ width="49.6063"
+ id="rect6620"
+ style="opacity:1;fill:#d9d9cd;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.77165353;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <flowRoot
+ xml:space="preserve"
+ style="font-size:9px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Helvetica Rounded LT Std;-inkscape-font-specification:Helvetica Rounded LT Std Bold"
+ id="flowRoot6622"
+ transform="translate(207.97695,247.32124)"><flowRegion
+ id="flowRegion6624" /><flowPara
+ id="flowPara6628">Ordered</flowPara></flowRoot> </g>
+ <g
+ id="g6666"
+ transform="translate(318.4375,-30.492633)">
+ <rect
+ ry="3.7880721"
+ y="236.25572"
+ x="183.82626"
+ height="17.716536"
+ width="58.037571"
+ id="rect6668"
+ style="opacity:1;fill:#d9d9cd;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.77165353;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <flowRoot
+ xml:space="preserve"
+ style="font-size:9px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Helvetica Rounded LT Std;-inkscape-font-specification:Helvetica Rounded LT Std Bold"
+ id="flowRoot6670"
+ transform="translate(213.13426,248.56061)"><flowRegion
+ id="flowRegion6672" /><flowPara
+ id="flowPara6676">Hierarchical</flowPara></flowRoot> </g>
+ <path
+ inkscape:connector-type="polyline"
+ id="path6664"
+ d="M 587.09005,157.43667 L 551.87006,157.57777"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#d9d9cd;stroke-width:2.83464575;stroke-linecap:round;stroke-linejoin:round;marker-start:none;marker-mid:none;marker-end:url(#marker44971);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+ sodipodi:nodetypes="cc"
+ inkscape:connection-end="#g6618"
+ inkscape:connection-start="#g6606" />
+ <g
+ id="g6594"
+ transform="translate(404.82152,-58.425625)">
+ <rect
+ ry="3.7880721"
+ y="235.59096"
+ x="182.48161"
+ height="17.716534"
+ width="49.6063"
+ id="rect6596"
+ style="opacity:1;fill:#d9d9cd;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.77165353;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <flowRoot
+ xml:space="preserve"
+ style="font-size:9px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Helvetica Rounded LT Std;-inkscape-font-specification:Helvetica Rounded LT Std Bold"
+ id="flowRoot6598"
+ transform="translate(206.96566,247.31617)"><flowRegion
+ id="flowRegion6600" /><flowPara
+ id="flowPara6604">Sortable</flowPara></flowRoot> </g>
+ <g
+ id="g6606"
+ transform="translate(404.60844,-87.111921)">
+ <rect
+ ry="3.7880721"
+ y="235.59096"
+ x="182.48161"
+ height="17.716534"
+ width="49.6063"
+ id="rect6608"
+ style="opacity:1;fill:#d9d9cd;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.77165353;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <flowRoot
+ xml:space="preserve"
+ style="font-size:9px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Helvetica Rounded LT Std;-inkscape-font-specification:Helvetica Rounded LT Std Bold"
+ id="flowRoot6610"
+ transform="translate(207.61263,247.53033)"><flowRegion
+ id="flowRegion6612" /><flowPara
+ id="flowPara6616">Indexed</flowPara></flowRoot> </g>
+ <g
+ id="g6678"
+ transform="translate(318.4375,-58.83909)">
+ <rect
+ ry="3.7880721"
+ y="236.25572"
+ x="183.82626"
+ height="17.716536"
+ width="58.037571"
+ id="rect6680"
+ style="opacity:1;fill:#d9d9cd;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.77165353;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <flowRoot
+ xml:space="preserve"
+ style="font-size:9px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Helvetica Rounded LT Std;-inkscape-font-specification:Helvetica Rounded LT Std Bold"
+ id="flowRoot6682"
+ transform="translate(212.17928,248.64068)"><flowRegion
+ id="flowRegion6684" /><flowPara
+ id="flowPara6688">Filterable</flowPara></flowRoot> </g>
+ <path
+ inkscape:connection-end="#g6594"
+ inkscape:connector-type="polyline"
+ id="path8412"
+ d="M 654.63021,185.80396 L 636.90943,185.89549"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#d9d9cd;stroke-width:2.83464575;stroke-linecap:round;stroke-linejoin:round;marker-start:none;marker-mid:none;marker-end:url(#marker44971);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connection-end="#g6606"
+ inkscape:connector-type="polyline"
+ id="path8414"
+ d="M 654.63021,156.98779 L 636.69635,157.13446"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#d9d9cd;stroke-width:2.83464575;stroke-linecap:round;stroke-linejoin:round;marker-start:none;marker-mid:none;marker-end:url(#marker44971);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connection-end="#g6666"
+ inkscape:connector-type="polyline"
+ id="path8416"
+ d="M 570.52478,251.85959 L 540.61753,223.47962"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#d9d9cd;stroke-width:2.83464575;stroke-linecap:round;stroke-linejoin:round;marker-start:none;marker-mid:none;marker-end:url(#marker44971);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connection-end="#g6678"
+ inkscape:connection-start="#g8396"
+ inkscape:connector-type="polyline"
+ id="path8418"
+ d="M 591.82037,209.3064 L 554.56632,195.13317"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#d9d9cd;stroke-width:2.83464575;stroke-linecap:round;stroke-linejoin:round;marker-start:none;marker-mid:none;marker-end:url(#marker44971);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+ sodipodi:nodetypes="cc" />
+ <g
+ id="g8396"
+ transform="translate(374.07349,27.409503)">
+ <rect
+ ry="3.7880721"
+ y="181.8969"
+ x="205.84985"
+ height="35.433071"
+ width="116.92914"
+ id="rect8398"
+ style="opacity:1;fill:#d9d9cd;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <text
+ sodipodi:linespacing="125%"
+ id="text8408"
+ y="203.15674"
+ x="265.04974"
+ style="font-size:12px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Helvetica Rounded LT Std;-inkscape-font-specification:Helvetica Rounded LT Std Bold"
+ xml:space="preserve"><tspan
+ y="203.15674"
+ x="265.04974"
+ id="tspan8410"
+ sodipodi:role="line">IndexedContainer</tspan></text>
+ </g>
+ <path
+ inkscape:connection-start="#g8420"
+ inkscape:connection-end="#g8396"
+ inkscape:connector-type="polyline"
+ id="path8430"
+ d="M 638.55893,251.82608 L 638.51007,244.73947"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#d9d9cd;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;marker-start:none;marker-mid:none;marker-end:url(#marker44971);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline" />
+ <g
+ id="g8420"
+ transform="translate(452.31943,69.929187)">
+ <rect
+ ry="3.7880721"
+ y="181.8969"
+ x="117.26717"
+ height="35.433071"
+ width="138.18898"
+ id="rect8422"
+ style="opacity:1;fill:#d9d9cd;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <text
+ sodipodi:linespacing="125%"
+ id="text8424"
+ y="203.15674"
+ x="185.59758"
+ style="font-size:12px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Helvetica Rounded LT Std;-inkscape-font-specification:Helvetica Rounded LT Std Bold"
+ xml:space="preserve"><tspan
+ y="203.15674"
+ x="185.59758"
+ id="tspan8426"
+ sodipodi:role="line">HierarchicalContainer</tspan></text>
+ </g>
+ <flowRoot
+ style="font-size:12px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Helvetica LT Std;-inkscape-font-specification:Helvetica LT Std Light"
+ id="flowRoot8724"
+ xml:space="preserve"
+ transform="translate(-0.8858472,0)"><flowRegion
+ id="flowRegion8726"><rect
+ style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-family:Helvetica LT Std;-inkscape-font-specification:Helvetica LT Std Light"
+ y="752.14441"
+ x="39.286312"
+ height="22.868153"
+ width="29.904507"
+ id="rect8728" /></flowRegion><flowPara
+ id="flowPara8730" /></flowRoot> <path
+ sodipodi:open="true"
+ transform="translate(-55.807094,-1.7674908)"
+ sodipodi:end="6.2827149"
+ sodipodi:start="0"
+ d="M 494.29133,228.54329 A 7.0866146,7.0907812 0 1 1 494.29133,228.53995"
+ sodipodi:ry="7.0907812"
+ sodipodi:rx="7.0866146"
+ sodipodi:cy="228.54329"
+ sodipodi:cx="487.20471"
+ id="path54937"
+ style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.12598419;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:2.12598425, 2.12598425;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ sodipodi:type="arc" />
+ <path
+ inkscape:connector-type="polyline"
+ id="path5172"
+ d="M 431.5759,202.21978 L 431.47191,227.02295"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#d9d9cd;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;marker-start:none;marker-mid:none;marker-end:url(#DotSq);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+ inkscape:connection-start="#g5110"
+ inkscape:connection-end="#g5098" />
+ <path
+ sodipodi:open="true"
+ transform="translate(-55.612376,55.132734)"
+ sodipodi:end="6.2827149"
+ sodipodi:start="0"
+ d="M 494.27873,228.54329 A 7.0740213,7.0907817 0 1 1 494.27873,228.53995"
+ sodipodi:ry="7.0907817"
+ sodipodi:rx="7.0740213"
+ sodipodi:cy="228.54329"
+ sodipodi:cx="487.20471"
+ id="path54939"
+ style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.12598419;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:2.12598425, 2.12598425;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ sodipodi:type="arc" />
+ <path
+ inkscape:connector-type="polyline"
+ id="path6576"
+ d="M 431.47655,262.45601 L 431.57126,283.71586"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#d9d9cd;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;marker-start:none;marker-mid:none;marker-end:url(#DotSq);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+ inkscape:connection-start="#g5098"
+ inkscape:connection-end="#g2870" />
+ <path
+ inkscape:connection-start="#g6618"
+ inkscape:connector-type="polyline"
+ id="path55678"
+ d="M 502.26376,157.92341 L 492.09872,158.02434"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#d9d9cd;stroke-width:2.83464575;stroke-linecap:round;stroke-linejoin:round;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connection-start="#g6666"
+ inkscape:connector-type="polyline"
+ id="path55680"
+ d="M 502.26376,213.86481 L 491.47679,213.58358"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#d9d9cd;stroke-width:2.83464575;stroke-linecap:round;stroke-linejoin:round;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+ sodipodi:nodetypes="cc" />
+ <path
+ id="path55688"
+ d="M 587.30314,184.25195 L 576.67322,184.25195 L 576.67322,155.90549"
+ style="fill:none;fill-rule:evenodd;stroke:#d9d9cd;stroke-width:2.83464575;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cc"
+ id="path55690"
+ d="M 654.62597,209.0551 L 654.62597,155.90549"
+ style="fill:none;fill-rule:evenodd;stroke:#d9d9cd;stroke-width:2.83464575;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <flowRoot
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#d9d9cd;fill-opacity:1;stroke:none;font-family:Helvetica Rounded LT Std;-inkscape-font-specification:Helvetica Rounded LT Std Bold"
+ id="flowRoot59412"
+ transform="translate(439.65072,221.68981)"><flowRegion
+ id="flowRegion59414" /><flowPara
+ id="flowPara59418">n</flowPara></flowRoot> <flowRoot
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#d9d9cd;fill-opacity:1;stroke:none;font-family:Helvetica Rounded LT Std;-inkscape-font-specification:Helvetica Rounded LT Std Bold"
+ id="flowRoot59420"
+ transform="translate(439.65072,278.97199)"><flowRegion
+ id="flowRegion59422" /><flowPara
+ id="flowPara59426">n</flowPara></flowRoot> <g
+ transform="matrix(0.5,0,0,0.5,102.45714,0.7940752)"
+ id="g18053" />
+ <text
+ id="text80346"
+ y="324.81149"
+ x="393.58478"
+ style="font-size:6px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Helvetica LT Std;-inkscape-font-specification:Helvetica LT Std Light"
+ xml:space="preserve"><tspan
+ id="tspan80354"
+ y="324.81149"
+ x="393.58478"
+ sodipodi:role="line">setValue()</tspan><tspan
+ id="tspan80365"
+ y="332.31149"
+ x="393.58478"
+ sodipodi:role="line">getValue()</tspan></text>
+ <text
+ id="text116490"
+ y="209.0551"
+ x="439.94095"
+ style="font-size:8px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Helvetica LT Std;-inkscape-font-specification:Helvetica LT Std Light"
+ xml:space="preserve"
+ sodipodi:linespacing="125%"><tspan
+ y="209.0551"
+ x="439.94095"
+ id="tspan116492"
+ sodipodi:role="line"
+ style="font-size:8px;font-style:oblique;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:FreeSans;-inkscape-font-specification:FreeSans Oblique">addItem()</tspan></text>
+ <text
+ id="text116494"
+ y="269.43359"
+ x="440.29276"
+ style="font-size:8px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Helvetica LT Std;-inkscape-font-specification:Helvetica LT Std Light"
+ xml:space="preserve"
+ sodipodi:linespacing="125%"><tspan
+ y="269.43359"
+ x="440.29276"
+ id="tspan116496"
+ sodipodi:role="line"
+ style="font-size:8px;font-style:oblique;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:FreeSans;-inkscape-font-specification:FreeSans Oblique">addItemProperty()</tspan></text>
+ <text
+ id="text5081"
+ y="337.70709"
+ x="523.63373"
+ style="font-size:8px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Helvetica LT Std;-inkscape-font-specification:Helvetica LT Std Light"
+ xml:space="preserve"
+ sodipodi:linespacing="125%"><tspan
+ y="337.70709"
+ x="523.63373"
+ id="tspan5083"
+ sodipodi:role="line"
+ style="font-size:8px;font-style:oblique;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:FreeSans;-inkscape-font-specification:FreeSans Oblique">valueChange()</tspan></text>
+ <g
+ id="g5146-3"
+ transform="translate(152.8407,19.844568)">
+ <rect
+ ry="3.7880721"
+ y="235.59096"
+ x="182.48161"
+ height="17.716534"
+ width="49.6063"
+ id="rect5148-7"
+ style="fill:#d9d9cd;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1.77165353;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <flowRoot
+ xml:space="preserve"
+ style="font-size:9px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Helvetica Rounded LT Std;-inkscape-font-specification:Helvetica Rounded LT Std Bold"
+ id="flowRoot5150-4"
+ transform="translate(205.92958,247.90652)"><flowRegion
+ id="flowRegion5152-5" /><flowPara
+ id="flowPara5156-2">Editor</flowPara></flowRoot> </g>
+ <g
+ id="g5158-5"
+ transform="translate(152.8407,-0.0752115)">
+ <rect
+ ry="3.7880721"
+ y="235.59096"
+ x="182.48161"
+ height="17.716534"
+ width="49.6063"
+ id="rect5160-4"
+ style="fill:#d9d9cd;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1.77165353;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <flowRoot
+ xml:space="preserve"
+ style="font-size:9px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Helvetica Rounded LT Std;-inkscape-font-specification:Helvetica Rounded LT Std Bold"
+ id="flowRoot5162-7"
+ transform="translate(205.46539,247.16347)"><flowRegion
+ id="flowRegion5164-4" /><flowPara
+ id="flowPara5168-4">Viewer</flowPara></flowRoot> </g>
+ <g
+ id="g5146-0"
+ transform="translate(152.8407,79.657004)">
+ <rect
+ ry="3.7880721"
+ y="235.59096"
+ x="182.48161"
+ height="17.716534"
+ width="49.6063"
+ id="rect5148-78"
+ style="fill:#d9d9cd;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1.77165353;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <flowRoot
+ xml:space="preserve"
+ style="font-size:9px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Helvetica Rounded LT Std;-inkscape-font-specification:Helvetica Rounded LT Std Bold"
+ id="flowRoot5150-6"
+ transform="translate(205.92958,247.90652)"><flowRegion
+ id="flowRegion5152-8" /><flowPara
+ id="flowPara5156-8">Editor</flowPara></flowRoot> </g>
+ <g
+ id="g5158-4"
+ transform="translate(152.8407,59.737224)">
+ <rect
+ ry="3.7880721"
+ y="235.59096"
+ x="182.48161"
+ height="17.716534"
+ width="49.6063"
+ id="rect5160-3"
+ style="fill:#d9d9cd;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1.77165353;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <flowRoot
+ xml:space="preserve"
+ style="font-size:9px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Helvetica Rounded LT Std;-inkscape-font-specification:Helvetica Rounded LT Std Bold"
+ id="flowRoot5162-1"
+ transform="translate(205.46539,247.16347)"><flowRegion
+ id="flowRegion5164-49" /><flowPara
+ id="flowPara5168-2">Viewer</flowPara></flowRoot> </g>
+ </g>
+</svg>