diff options
author | Ilia Motornyi <elmot@vaadin.com> | 2015-12-03 14:59:05 +0000 |
---|---|---|
committer | Vaadin Code Review <review@vaadin.com> | 2015-12-03 14:59:12 +0000 |
commit | 2af72ba9636bec70046394c41744f89ce4572e35 (patch) | |
tree | ccb3dc2d2239585f8c3f79eb5f131ff61ca9ce86 /documentation/datamodel | |
parent | 8aa5fabe89f2967e966a64842a608eceaf80d08f (diff) | |
download | vaadin-framework-2af72ba9636bec70046394c41744f89ce4572e35.tar.gz vaadin-framework-2af72ba9636bec70046394c41744f89ce4572e35.zip |
Revert "Merge branch 'documentation'"7.6.0.beta2
This reverts commit f6874bde3d945c8b2d1b5c17ab50e2d0f1f8ff00.
Change-Id: I67ee1c30ba3e3bcc3c43a1dd2e73a822791514bf
Diffstat (limited to 'documentation/datamodel')
-rw-r--r-- | documentation/datamodel/chapter-datamodel.asciidoc | 20 | ||||
-rw-r--r-- | documentation/datamodel/datamodel-container.asciidoc | 834 | ||||
-rw-r--r-- | documentation/datamodel/datamodel-itembinding.asciidoc | 377 | ||||
-rw-r--r-- | documentation/datamodel/datamodel-items.asciidoc | 194 | ||||
-rw-r--r-- | documentation/datamodel/datamodel-overview.asciidoc | 72 | ||||
-rw-r--r-- | documentation/datamodel/datamodel-properties.asciidoc | 399 | ||||
-rw-r--r-- | documentation/datamodel/img/beanitem-nested-beans.png | bin | 3142 -> 0 bytes | |||
-rw-r--r-- | documentation/datamodel/img/beanitemcontainer-nested-beans.png | bin | 18032 -> 0 bytes | |||
-rw-r--r-- | documentation/datamodel/img/datamodel-interfaces-hi.png | bin | 170869 -> 0 bytes | |||
-rw-r--r-- | documentation/datamodel/img/datamodel-interfaces-lo.png | bin | 41890 -> 0 bytes | |||
-rw-r--r-- | documentation/datamodel/img/datamodel-whitebg.png | bin | 287119 -> 0 bytes | |||
-rw-r--r-- | documentation/datamodel/original-drawings/beanitem-doublebinding.svg | 1026 | ||||
-rw-r--r-- | documentation/datamodel/original-drawings/datamodel-interfaces.svg | 1321 |
13 files changed, 0 insertions, 4243 deletions
diff --git a/documentation/datamodel/chapter-datamodel.asciidoc b/documentation/datamodel/chapter-datamodel.asciidoc deleted file mode 100644 index c28e5b716b..0000000000 --- a/documentation/datamodel/chapter-datamodel.asciidoc +++ /dev/null @@ -1,20 +0,0 @@ -[[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 deleted file mode 100644 index 8f88e7c8bf..0000000000 --- a/documentation/datamodel/datamodel-container.asciidoc +++ /dev/null @@ -1,834 +0,0 @@ ---- -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 deleted file mode 100644 index fd21b72267..0000000000 --- a/documentation/datamodel/datamodel-itembinding.asciidoc +++ /dev/null @@ -1,377 +0,0 @@ ---- -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 deleted file mode 100644 index 75a7c1ecf8..0000000000 --- a/documentation/datamodel/datamodel-items.asciidoc +++ /dev/null @@ -1,194 +0,0 @@ ---- -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 deleted file mode 100644 index 95209e0b76..0000000000 --- a/documentation/datamodel/datamodel-overview.asciidoc +++ /dev/null @@ -1,72 +0,0 @@ ---- -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 deleted file mode 100644 index d5d0d3e39d..0000000000 --- a/documentation/datamodel/datamodel-properties.asciidoc +++ /dev/null @@ -1,399 +0,0 @@ ---- -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 Binary files differdeleted file mode 100644 index ea8c51ccd4..0000000000 --- a/documentation/datamodel/img/beanitem-nested-beans.png +++ /dev/null diff --git a/documentation/datamodel/img/beanitemcontainer-nested-beans.png b/documentation/datamodel/img/beanitemcontainer-nested-beans.png Binary files differdeleted file mode 100644 index fbd5fa155a..0000000000 --- a/documentation/datamodel/img/beanitemcontainer-nested-beans.png +++ /dev/null diff --git a/documentation/datamodel/img/datamodel-interfaces-hi.png b/documentation/datamodel/img/datamodel-interfaces-hi.png Binary files differdeleted file mode 100644 index 9bebdb0ac0..0000000000 --- a/documentation/datamodel/img/datamodel-interfaces-hi.png +++ /dev/null diff --git a/documentation/datamodel/img/datamodel-interfaces-lo.png b/documentation/datamodel/img/datamodel-interfaces-lo.png Binary files differdeleted file mode 100644 index 2139cf9f08..0000000000 --- a/documentation/datamodel/img/datamodel-interfaces-lo.png +++ /dev/null diff --git a/documentation/datamodel/img/datamodel-whitebg.png b/documentation/datamodel/img/datamodel-whitebg.png Binary files differdeleted file mode 100644 index 803dd70c08..0000000000 --- a/documentation/datamodel/img/datamodel-whitebg.png +++ /dev/null diff --git a/documentation/datamodel/original-drawings/beanitem-doublebinding.svg b/documentation/datamodel/original-drawings/beanitem-doublebinding.svg deleted file mode 100644 index 509013ab07..0000000000 --- a/documentation/datamodel/original-drawings/beanitem-doublebinding.svg +++ /dev/null @@ -1,1026 +0,0 @@ -<?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<DaBean></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<DaBean></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<DaBean></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 deleted file mode 100644 index 051f60c48d..0000000000 --- a/documentation/datamodel/original-drawings/datamodel-interfaces.svg +++ /dev/null @@ -1,1321 +0,0 @@ -<?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>
|