<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://download.osbee.org/documentation/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Riegel</id>
		<title>OS.bee documentation - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://download.osbee.org/documentation/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Riegel"/>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php/Special:Contributions/Riegel"/>
		<updated>2026-05-09T21:17:45Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.26.2</generator>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Datainterchange_DSL&amp;diff=3728</id>
		<title>Datainterchange DSL</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Datainterchange_DSL&amp;diff=3728"/>
				<updated>2019-05-08T07:30:46Z</updated>
		
		<summary type="html">&lt;p&gt;Riegel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Purpose==&lt;br /&gt;
&lt;br /&gt;
The Data Interchange DSL (datainterchange for short) is made for defining data exchange models that can be used to import data from various formats (CSV, XML, EDI, etc.), map the data to entities, store them into database, or export them back into other formats.&lt;br /&gt;
&lt;br /&gt;
You only need to define the ''relationship'' between the file and the bean, not the import / export process themselves. Once defined, these models can be used in e.g. action DSL to define actions which, when triggered, execute the actual import / export process, which are generated automatically by the OSBP based on the model.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
As shown on the figure below, the [DSL Inferrer] will generate various views and In/Export component according to model described by datainterchange DSL (and action DSL, in the case of ActionButtons). The action buttons, when clicked, will trigger their corresponding In/Export processes by putting [http://download.osbee.org/downloads/javadoc/osbee-master-clean/org.eclipse.osbp.xtext.datainterchange.feature/apidocs/ WorkerThread (Runnable)] jobs into the executor job pool within the TriggerView (prefixed with datainterchang name), buttons (and toolbar / menus containing them) are further included in the perspective.&lt;br /&gt;
&lt;br /&gt;
[[File:Datainterchange.png|600px|center|frame|''Figure 1: - Data Interchange Structure.'']]&lt;br /&gt;
&lt;br /&gt;
==Data Interchange Model File==&lt;br /&gt;
&lt;br /&gt;
Datainterchange DSL model files end with the &amp;lt;code&amp;gt;.data&amp;lt;/code&amp;gt; extension. Data Interchange models may be split into several &amp;lt;code&amp;gt;.data&amp;lt;/code&amp;gt; files, as long as they have the same package declaration.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In the following we will dive deeper into the description and the usage of Datainterchange related and reserved keywords.&lt;br /&gt;
&lt;br /&gt;
===import===&lt;br /&gt;
In the import section are all entities to be found - as full qualified names – that are currently used in the DSL.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import ns net.osbee.sample.foodmart.entities.Mstore&lt;br /&gt;
import ns net.osbee.sample.foodmart.entities.Mwarehouse&lt;br /&gt;
import ns net.osbee.sample.foodmart.entities.Mregion&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that &amp;lt;code&amp;gt;ns&amp;lt;/code&amp;gt; is a mandatory keyword (stands for &amp;quot;namespace&amp;quot;) that comes after import for distinguishing the OS.bee internal namespaces and Java library namespaces. Wildcards are not supported, all names should be imported separately. Note that the import section will be imported/added automatically if they are used in the package, so you don't have to manually manage this section.&lt;br /&gt;
&lt;br /&gt;
===package===&lt;br /&gt;
&lt;br /&gt;
Datainterchange DSL model files must start with a package declaration. Packages are the root element of the DSL and should be defined as &amp;lt;code&amp;gt;&amp;lt;ApplicationName&amp;gt;.datainterchange&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;package net.osbee.sample.foodmart.datainterchanges { }&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Data Interchange models may be split into several .data files, as long as they have the same package declaration, the interchanges will be available under this package name.&lt;br /&gt;
&lt;br /&gt;
===title===&lt;br /&gt;
With the keyword title you can give a name to the corresponding TriggerView dialog inside your application. For example, the definition of the same datainterchanges package from above with title &amp;quot;Data Interchange Example&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;package net.osbee.sample.foodmart.datainterchanges title &amp;quot;Data Interchange Example&amp;quot; {}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This title will be translated based on locale.&lt;br /&gt;
&lt;br /&gt;
You can get more details about the TriggerView in the section below.&lt;br /&gt;
&lt;br /&gt;
===interchange===&lt;br /&gt;
The &amp;lt;code&amp;gt;interchange&amp;lt;/code&amp;gt; keyword defines interchange units for entities in the package, it should be in the form of:&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
interchange &amp;lt;InterchangeUnitName&amp;gt; [describedBy &amp;lt;description&amp;gt;] &amp;lt;EntityManagerMode&amp;gt; file &amp;lt;FileType&amp;gt; [&amp;lt;FileDetails&amp;gt;] beans {&lt;br /&gt;
  ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where &amp;lt;code&amp;gt;InterchangeUnitName&amp;lt;/code&amp;gt; being the name of the interchange unit; &amp;lt;code&amp;gt;describedBy&amp;lt;/code&amp;gt; (optional) can be used to provide a short description string. &amp;lt;code&amp;gt;EntityManagerMode&amp;lt;/code&amp;gt; being how the file should be handled (see section &amp;quot;persist, merge, remove&amp;quot; below), and after &amp;lt;code&amp;gt;file&amp;lt;/code&amp;gt; keyword, you should specify the type of the source / target data file you would like to import from or export to, then the file path, and other details depends on the type.&lt;br /&gt;
&lt;br /&gt;
The following example specifies an interchange that reads a CSV file under the specified path (note the forward slash as the path separator), delimited by semicolon, skip one line (the header), and treat the content as encoded in UTF-8:&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
interchange CurrencyNames persist file&lt;br /&gt;
CSV &amp;quot;C:/data/ISOCurrencyCode20170101.csv&amp;quot; delimiter &amp;quot;;&amp;quot; skipLines 1 encoding &amp;quot;UTF-8&amp;quot;&lt;br /&gt;
beans {&lt;br /&gt;
  ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;beans&amp;lt;/code&amp;gt; keyword comes after all the file specification and starts a block of entity definitions, which will be covered in section &amp;quot;entity&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===describedBy===&lt;br /&gt;
With this keyword you can the optional description of an interchange unit as shown below. &lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
interchange Currencies describedBy &amp;quot;european central bank currency exchange rates based on euro&amp;quot; persist ... { ... }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===vectorName===&lt;br /&gt;
With the optional keyword &amp;lt;code&amp;gt;vectorName&amp;lt;/code&amp;gt; followed by a string value you are able to define the name of the root element of both XML configuration files needed by Smooks. Please note that it also means that the first (root-)element of an XML-File you would have exported (file filled with real data) via the application will have the same name.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
interchange Stores remove vectorName &amp;quot;stores&amp;quot; elementSize 83 file ... { ... }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can view the result of this sample of code like shown below on figure[[#Figure3|''3'']].&lt;br /&gt;
&lt;br /&gt;
===persist, merge, remove===&lt;br /&gt;
These keywords define the purpose of the datainterchange unit and has a similar meaning as in the JPA's EntityManager class. Basically, &amp;lt;code&amp;gt;persist&amp;lt;/code&amp;gt; will insert the data records into database, &amp;lt;code&amp;gt;merge&amp;lt;/code&amp;gt; will update existing data record, or insert new one if necessary, &amp;lt;code&amp;gt;remove&amp;lt;/code&amp;gt; will remove the record if it could be found in database.&lt;br /&gt;
&lt;br /&gt;
► '''Example 1''': (persist)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
interchange EDIOrders describedBy &amp;quot;Orders&amp;quot; persist file&lt;br /&gt;
XML &amp;quot;C:/data/orders.xml&amp;quot;&lt;br /&gt;
beans {&lt;br /&gt;
  ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
► '''Example 2''': (merge)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
interchange Stores merge file&lt;br /&gt;
XML &amp;quot;C:/data/stores.xml&amp;quot;&lt;br /&gt;
beans {&lt;br /&gt;
  ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
► '''Example 3''': (remove)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
interchange Storesremove remove file&lt;br /&gt;
XML &amp;quot;C:/data/stores_remove.xml&amp;quot;&lt;br /&gt;
beans {&lt;br /&gt;
  ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===file===&lt;br /&gt;
With the keyword file you are able to set the file format of the files you intent to process with you interchange unit.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;interchange &amp;lt;SampleInterchangeUnitName&amp;gt; &amp;lt;EntityManagerMode&amp;gt; file &amp;lt;FileNameFormat&amp;gt; {}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The current supported file formats are CSV, EDI and XML followed by the name of the file you want to process, given its full path location in the system.&lt;br /&gt;
► '''Example 1''':&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;interchange SampleInterchangeUnit1 merge file CSV &amp;quot;C:/temp/testFile.csv&amp;quot; {}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
► '''Example 2''':&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;interchange SampleInterchangeUnit2 persist file XML &amp;quot;C:/temp/testFile.xml&amp;quot; {}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
► '''Example 3''':&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;interchange SampleInterchangeUnit3 merge file EDI &amp;quot;C:/temp/testFile.edi&amp;quot; {}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After choosing the file format you can either give the file name as a String value in a double quote &amp;quot;...&amp;quot; as shown here above, or press Ctrl+Space to get via the content assist the option of opening a File Chooser/Picker to specify the file you want to work with.&lt;br /&gt;
&lt;br /&gt;
[[File:FileChooser.jpg|center|frame|''Figure 2: File Chooser'']]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Please note that you can also change the path(?) of the file to process on runtime by selecting a new file.&lt;br /&gt;
&lt;br /&gt;
===mapByAttribute===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;mapByAttribute&amp;lt;/code&amp;gt; keyword is an XML-specific keyword that turns on the automatic attribute mapping. When enabled, datainterchange will detect if the value being mapped is from an attribute. For example, the 'USD' value in the following XML file comes from the attribute 'currency' of the element 'Cube':&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Cube currency='USD' rate='1.3759'/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
while in the following XML file, the same value is encapsulated in the element 'currency':&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Cube&amp;gt;&lt;br /&gt;
 &amp;lt;currency&amp;gt;USD&amp;lt;/currency&amp;gt;&lt;br /&gt;
 &amp;lt;rate&amp;gt;1.3759&amp;lt;/rate&amp;gt;&lt;br /&gt;
&amp;lt;/Cube&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When &amp;lt;code&amp;gt;mapByAttribute&amp;lt;/code&amp;gt; is present, datainterchange will automatically decide that a query in the form like &amp;lt;code&amp;gt;'/Cube/currency'&amp;lt;/code&amp;gt; will also catch the value from attribute. Without it, the query will have to put a &amp;lt;code&amp;gt;'@'&amp;lt;/code&amp;gt; symbol in front of the attribute name, i.e. &amp;lt;code&amp;gt;'/Cube/@currency'&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===elementSize===&lt;br /&gt;
With the keyword &amp;lt;code&amp;gt;elementSize&amp;lt;/code&amp;gt; followed by an integer, the user can set the estimated average size of the elements in bytes. Since the underlying API cannot know the size of an element before it is processed, this value can be supplied as a guide value to be used for estimating the import / output progress based on how much bytes have been processed.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
interchange EDIOrders describedBy &amp;quot;edi orders&amp;quot; persist elementSize 50 file EDI &amp;quot;C:/data/orders.edi&amp;quot; beans {&lt;br /&gt;
  ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Defines an average estimated element size of 50 bytes.&lt;br /&gt;
&lt;br /&gt;
===delimiter===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;delimiter&amp;lt;/code&amp;gt; is a CSV format-specific keyword, which defines the character to use in the CSV file to set the delimiter/separation character between different values. Default value is &amp;quot;,&amp;quot; (comma).&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
interchange CurrencyNames persist file&lt;br /&gt;
CSV &amp;quot;C:/data/ISOCurrencyCodes081507.csv&amp;quot; delimiter &amp;quot;;&amp;quot; ... {&lt;br /&gt;
  ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
will set the delimiter of the CSV file to &amp;quot;;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===skipLines===&lt;br /&gt;
This is a CSV format-specific keyword. Using &amp;lt;code&amp;gt;skipLines&amp;lt;/code&amp;gt; followed by an integer, the user can specify the number of lines to be skipped from the beginning in the processing of the selected file, this can be used to skip headers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
interchange CurrencyNames persist file CSV &amp;quot;C:/data/ISOCurrencyCodes081507.csv&amp;quot; ... skipLines 1 encoding &amp;quot;UTF-8&amp;quot; {&lt;br /&gt;
   ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
will skip the first line of the CSV file.&lt;br /&gt;
&lt;br /&gt;
===report===&lt;br /&gt;
&lt;br /&gt;
If a '''datainterchange''' unit is defined with the &amp;lt;code&amp;gt;report&amp;lt;/code&amp;gt; keyword, a report will be generated for data conversions. The report file is generated by Smooks, lies under &amp;lt;code&amp;gt;/smooks&amp;lt;/code&amp;gt; output directory of the datainterchange bundle, and has a name in the form like &amp;lt;code&amp;gt;&amp;lt;DataInterChangeName&amp;gt;-input.xml&amp;lt;/code&amp;gt; for input processes, and &amp;lt;code&amp;gt;&amp;lt;DataInterChangeName&amp;gt;-output.xml&amp;lt;/code&amp;gt; for output processes. '''Note: turn on report will have an impact performance.'''&lt;br /&gt;
&lt;br /&gt;
===indent===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;indent&amp;lt;/code&amp;gt; is a CSV-format specified keyword which adds indentation character data to the generated event stream. This simply makes the generated event stream easier to read in its serialized form and generally should only be used in testing.&lt;br /&gt;
&lt;br /&gt;
===quoteCharacter===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;quoteCharacter&amp;lt;/code&amp;gt; is a CSV format-specific keyword, which defines the character to use in the CSV file to identify values.&lt;br /&gt;
&lt;br /&gt;
===encoding===&lt;br /&gt;
With the keyword '''enconding''' followed by the encoding name as a string value you are able to specify the valid encoding of the file content.&lt;br /&gt;
&lt;br /&gt;
► '''Example 1''':&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;interchange SampleInterchangeUnitName merge elementSize 50 file CSV &amp;quot;C:/temp/testFile.csv&amp;quot; delimiter &amp;quot;;&amp;quot; skipLines 1 encoding &amp;quot;UTF-8&amp;quot;{}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
► '''Example 2''':&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;interchange SampleInterchangeUnitName remove elementSize 50 file CSV &amp;quot;C:/temp/testFile.csv&amp;quot; delimiter &amp;quot;;&amp;quot; skipLines 1 encoding &amp;quot;GB18030&amp;quot;{}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
► '''Example 3''':&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;interchange SampleInterchangeUnitName persistelementSize 50 file CSV &amp;quot;C:/temp/testFile.csv&amp;quot; delimiter &amp;quot;;&amp;quot; skipLines 1 encoding &amp;quot;ISO-2022-JP&amp;quot;{}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===mappingModel===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;mappingModel&amp;lt;/code&amp;gt; keyword is an EDI-specific keyword which can be used to specify an EDI to XML mapping model in XML format for Smooks.&lt;br /&gt;
&lt;br /&gt;
===validate===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;validate&amp;lt;/code&amp;gt; keyword is an EDI-specific keyword that...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===beans===&lt;br /&gt;
&lt;br /&gt;
The keyword &amp;lt;code&amp;gt;beans&amp;lt;/code&amp;gt; starts the series of entities. The name &amp;quot;bean&amp;quot; comes from the internal entities called JavaBean, which act as data containers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===entity===&lt;br /&gt;
&lt;br /&gt;
With the &amp;lt;code&amp;gt;entity&amp;lt;/code&amp;gt; keyword followed by a fully qualified name, the user can specify the mapping between a source data file and a data-containing entity. The behavior of the mapping can be further fine-tuned with the keywords discussed below. While these keywords can theoretically be combined all together and create very complicated behavior, they are normally used in a simple and straight forward way.&lt;br /&gt;
&lt;br /&gt;
The general form of &amp;lt;code&amp;gt;entity&amp;lt;/code&amp;gt; keywords is:&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
entity &amp;lt;ID&amp;gt;&lt;br /&gt;
    [nodeName &amp;lt;node-name&amp;gt;]&lt;br /&gt;
    [createOn &amp;lt;element-map&amp;gt;]&lt;br /&gt;
    [marker &amp;lt;property-name&amp;gt;]&lt;br /&gt;
    [expression '{' &amp;lt;expressions&amp;gt; '}'] &lt;br /&gt;
    [lookup '{' &amp;lt;lookup-rules&amp;gt; '}']&lt;br /&gt;
    [format '{' &amp;lt;formats&amp;gt; '}']&lt;br /&gt;
    [mapping '{' &amp;lt;mappings&amp;gt; '}']&lt;br /&gt;
    [keys '{' &amp;lt;lookup-keys&amp;gt; '}']&lt;br /&gt;
;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The order of the keywords is fixed, i.e. they are all optional, but must appear in the given order.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====nodeName====&lt;br /&gt;
&lt;br /&gt;
With the optional keyword &amp;lt;code&amp;gt;nodeName&amp;lt;/code&amp;gt; followed by a string you can specify the name (alias) of corresponding elements inside an (XML) input/output configuration file. This name is used to identify entities within an XML file using the [http://freemarker.org/docs/pgui_datamodel.html NodeModel of Freemarker] instead of using the standard Java Object Model name. For example:&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
interchange Stores remove vectorName &amp;quot;stores&amp;quot; elementSize 83 file XML &amp;quot;C:/.../net.osbee.sample.foodmart/net.osbee.sample.foodmart.datainterchange/smooks-resources/stores.xml&amp;quot; beans {&lt;br /&gt;
	entity Mregion nodeName    &amp;quot;region&amp;quot;&lt;br /&gt;
	entity Mstore nodeName     &amp;quot;store&amp;quot;&lt;br /&gt;
	entity Mwarehouse nodeName &amp;quot;warehouse&amp;quot; &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The result from this example code is the generation of Smooks configuration files, in which the structure of the output data file (order of elements) will be the same as declared inside the beans {...} expression block. The alias you have specified after the keyword will be used as element (entity) name inside the XML files.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Figure3&amp;quot;&amp;gt; [[File:FreeMarkerNodeModelStoreInEx.png|600px|thumb|center|''Figure 3: Store-import.xml and  Store-export.xml with NodeModel'']] &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The use of this keyword gives you the flexibility of naming entities using aliases in order to match any third part system description. By omitting the definition of both aliases ''region'' and ''warehouse'' like shown below, we obtain slightly divergent but very different contents than the ones from above.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
interchange Stores remove vectorName &amp;quot;stores&amp;quot; elementSize 83 file XML &amp;quot;C:/.../net.osbee.sample.foodmart/net.osbee.sample.foodmart.datainterchange/smooks-resources/stores.xml&amp;quot; beans {&lt;br /&gt;
	entity Mregion&lt;br /&gt;
	entity Mstore nodeName     &amp;quot;store&amp;quot;&lt;br /&gt;
	entity Mwarehouse&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:FreeMarkerJavaObjectModelStoreInEx.png|600px|thumb|center|''Figure 4: Store-import.xml (normal) and Store-export.xml (normal) with Java Object Model Name'']]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Please note that the declaration order of each node names matters.&lt;br /&gt;
&lt;br /&gt;
====createOn====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;createOn&amp;lt;/code&amp;gt; keyword followed by a string specifies on which input element should an entity to be created. For example:&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
entity Mcurrency createOn &amp;quot;/Envelope/Cube/Cube/Cube&amp;quot; ... {&lt;br /&gt;
    ...&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
will create an &amp;lt;code&amp;gt;Mcurrency&amp;lt;/code&amp;gt; entity when encountering &amp;lt;code&amp;gt;/Envelope/Cube/Cube&amp;lt;/code&amp;gt; in the source data file.&lt;br /&gt;
&lt;br /&gt;
====marker====&lt;br /&gt;
&lt;br /&gt;
With &amp;lt;code&amp;gt;marker&amp;lt;/code&amp;gt; keyword optionally followed by a property-name, the user can set the data to be imported to have an additional property under the given name whose value set to 1, while updating the existing data to have this property having value 0. This could be useful to identify the most recent import of some periodically updated data. For example:&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
entity McurrencyStream createOn &amp;quot;/Envelope/Cube&amp;quot; marker latest expression {&lt;br /&gt;
	...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
will make the entity &amp;lt;code&amp;gt;McurrencyStream&amp;lt;/code&amp;gt; to have a property &amp;quot;&amp;lt;code&amp;gt;latest&amp;lt;/code&amp;gt;&amp;quot;, which is to be set to 1 for the most recently imported data.&lt;br /&gt;
&lt;br /&gt;
====expression====&lt;br /&gt;
&lt;br /&gt;
With an &amp;lt;code&amp;gt;expression { ... }&amp;lt;/code&amp;gt; block, the user can define expressions that assign certain value to an entity property. These expressions are of two types, the first one is:&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  assign &amp;lt;id&amp;gt; with &amp;lt;value&amp;gt; as &amp;lt;type&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
this will assign the property &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt; with the value of &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt;, in type of &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;. The &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; may be one of the following:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;NowDate&amp;lt;/code&amp;gt;: the date of now (the time point of action)&lt;br /&gt;
* &amp;lt;code&amp;gt;StartDate&amp;lt;/code&amp;gt;: the date when the process started&lt;br /&gt;
* &amp;lt;code&amp;gt;UniversallyUniqueIdentifier&amp;lt;/code&amp;gt;: an UUID&lt;br /&gt;
&lt;br /&gt;
and &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; may be one of the following:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;Date&amp;lt;/code&amp;gt;: the value of NowDate or StartDate will be in date format&lt;br /&gt;
* &amp;lt;code&amp;gt;Milliseconds&amp;lt;/code&amp;gt;: the value of NowDate or StartDate will be in millisecond&lt;br /&gt;
* &amp;lt;code&amp;gt;Nanoseconds&amp;lt;/code&amp;gt;: the value of NowDate or StartDate will be in nanosconds&lt;br /&gt;
* &amp;lt;code&amp;gt;Random&amp;lt;/code&amp;gt;: the value of UUID will be random&lt;br /&gt;
* &amp;lt;code&amp;gt;ExecuteContext&amp;lt;/code&amp;gt;: the value of UUID will be unique for the execute context&lt;br /&gt;
&lt;br /&gt;
Note that the &amp;lt;code&amp;gt;Random&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;ExecuteContext&amp;lt;/code&amp;gt; should be only combined with &amp;lt;code&amp;gt;UniversallyUniqueIdentifier&amp;lt;/code&amp;gt;, while the other types should be only combined with &amp;lt;code&amp;gt;NowDate&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;StartDate&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  entity McurrencyStream createOn &amp;quot;/Envelope/Cube&amp;quot; marker latest expression {&lt;br /&gt;
      assign importDate with NowDate as Date&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
will assign the &amp;lt;code&amp;gt;importDate&amp;lt;/code&amp;gt; as the current date in &amp;lt;code&amp;gt;Date&amp;lt;/code&amp;gt; format.&lt;br /&gt;
&lt;br /&gt;
The other type of expression has the form:&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  copy &amp;lt;target-property&amp;gt; from &amp;lt;entity-name&amp;gt; property &amp;lt;from-property&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which will copy the value of &amp;lt;code&amp;gt;from-property&amp;lt;/code&amp;gt; from the &amp;lt;code&amp;gt;entity-name&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;target-property&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  entity Mcurrency createOn &amp;quot;/Envelope/Cube/Cube/Cube&amp;quot; expression {&lt;br /&gt;
      copy currencyDate from McurrencyDay property ratingDate&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
will copy the value of &amp;lt;code&amp;gt;ratingDate&amp;lt;/code&amp;gt; from &amp;lt;code&amp;gt;McurrencyDay&amp;lt;/code&amp;gt; entity to &amp;lt;code&amp;gt;currencyDate&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====lookup====&lt;br /&gt;
&amp;lt;div id=&amp;quot;lookup&amp;quot;&amp;gt;&lt;br /&gt;
With a &amp;lt;code&amp;gt;lookup&amp;lt;/code&amp;gt; { ... } block, the user can define a set of '''lookup-rules''' to identify complex data within our persistence layer (DB or In-Memory...). This makes sense when the data in a source file can't be clearly identified by an attribute (id), but moreover when the set data it contains is persisted over several entities.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
lookup {&lt;br /&gt;
   [&amp;lt;lookup-rules&amp;gt;]*&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lookup-rule expression:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
lookup-rule: &lt;br /&gt;
 'for' .. 'on' .. 'createOn' .. 'with' .. 'cacheSize' .. 'mapTo' .. ['allowNoResult' | 'allowNoResult' | 'markerPath']&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
interchange Currencies describedBy &amp;quot;european central bank currency exchange rates based on euro&amp;quot; persist elementSize 50 file&lt;br /&gt;
	XML &amp;quot;C:/git/development/net.osbee.sample.foodmart/net.osbee.sample.foodmart.datainterchange/smooks-resources/eurofxref-hist-90d.xml&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	mapByAttribute beans {&lt;br /&gt;
		entity McurrencyStream createOn &amp;quot;/Envelope/Cube&amp;quot; marker latest expression {&lt;br /&gt;
			assign importDate with NowDate as Date&lt;br /&gt;
		}&lt;br /&gt;
		entity McurrencyDay createOn &amp;quot;/Envelope/Cube/Cube&amp;quot; format {&lt;br /&gt;
			for ratingDate coding &amp;quot;yyyy-MM-dd&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
		mapping {&lt;br /&gt;
			map ratingDate to &amp;quot;time&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
		entity Mcurrency createOn &amp;quot;/Envelope/Cube/Cube/Cube&amp;quot; expression {&lt;br /&gt;
			copy currencyDate from McurrencyDay property ratingDate&lt;br /&gt;
		}&lt;br /&gt;
		lookup {&lt;br /&gt;
			for currency_name on McurrencyName createOn &amp;quot;/Envelope/Cube/Cube/Cube&amp;quot; with isoCode cacheSize 300 mapTo &amp;quot;currency&amp;quot; allowNoResult&lt;br /&gt;
			markerPath {&lt;br /&gt;
				markerEntity McurrencyNameStream markedBy latest&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		mapping {&lt;br /&gt;
			map conversion_ratio to &amp;quot;rate&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We will provide you in upcoming releases with more information about so called '''locator''' instances, which are generated in the background on the basis of the '''lookups''' you would have defined, in order to query persisted data. This will give you more insights about how the Datainterchange DSL really works at the lower level.&lt;br /&gt;
&lt;br /&gt;
====format====&lt;br /&gt;
&lt;br /&gt;
With a &amp;lt;code&amp;gt;format { ... }&amp;lt;/code&amp;gt; block, the user can define the format of the entity property being converted. A &amp;lt;code&amp;gt;format&amp;lt;/code&amp;gt; block can have more than one format definitions, in the following format:&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    format {&lt;br /&gt;
        for &amp;lt;property&amp;gt; coding &amp;lt;format-string&amp;gt; [locale &amp;lt;locale-string&amp;gt;]&lt;br /&gt;
        ...&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    entity McurrencyDay createOn &amp;quot;/Envelope/Cube/Cube&amp;quot; format {&lt;br /&gt;
        for ratingDate coding &amp;quot;yyyy-MM-dd&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
will convert the &amp;lt;code&amp;gt;&amp;quot;/Envelope/Cube/Cube&amp;quot;&amp;lt;/code&amp;gt; data to &amp;lt;code&amp;gt;ratingDate&amp;lt;/code&amp;gt; property of &amp;lt;code&amp;gt;McurrencyDay&amp;lt;/code&amp;gt; in format &amp;lt;code&amp;gt;&amp;quot;yyyy-MM-dd&amp;quot;&amp;lt;/code&amp;gt;, where&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    entity EDIOrderHeader createOn &amp;quot;/Order/header&amp;quot; format {&lt;br /&gt;
        for hdrDate coding &amp;quot;EEE MMM dd HH:mm:ss zzz yyyy&amp;quot; locale &amp;quot;en_US&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
will format the &amp;lt;code&amp;gt;hdrDate&amp;lt;/code&amp;gt; in format &amp;lt;code&amp;gt;&amp;quot;EEE MMM dd HH:mm:ss zzz yyyy&amp;quot;&amp;lt;/code&amp;gt; with English locale, i.e. the month and weekday names will be in English.&lt;br /&gt;
&lt;br /&gt;
====expose====&lt;br /&gt;
&lt;br /&gt;
With a &amp;lt;code&amp;gt;expose { ... }&amp;lt;/code&amp;gt; block, when and only when exporting an entity, the user can expose properties of its referenced entity. A &amp;lt;code&amp;gt;expose&amp;lt;/code&amp;gt; block can have more than one expose definitions, in the following syntax format:&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    expose {&lt;br /&gt;
        ref &amp;lt;EntityReference&amp;gt; &lt;br /&gt;
            on &amp;lt;EntityAttribute&amp;gt; &lt;br /&gt;
          | subExpose&lt;br /&gt;
        ...&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''subExpose''' has the same syntax format as '''expose''', which is: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    expose {&lt;br /&gt;
        ref &amp;lt;EntityReference&amp;gt; &lt;br /&gt;
            on &amp;lt;EntityAttribute&amp;gt; &lt;br /&gt;
          | subExpose&lt;br /&gt;
        ...&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&lt;br /&gt;
Entities are defined as following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
entity CashSlip {&lt;br /&gt;
     ...&lt;br /&gt;
     var boolean payed&lt;br /&gt;
     ref cascade CashPosition[ * ]positions opposite slip&lt;br /&gt;
     ref Mcustomer customer opposite slips  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
entity Mcustomer extends BaseID {&lt;br /&gt;
     ...&lt;br /&gt;
     var long account_num&lt;br /&gt;
     var String name&lt;br /&gt;
     ref Mregion region opposite customers&lt;br /&gt;
     ref Msales_fact[ * ]sales opposite customer  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In datainterchange DSL, when exporting entity &amp;quot;'''CashSlip'''&amp;quot;, the user can use  &amp;quot;'''expose'''&amp;quot; keyword to export the &amp;quot;'''account_num'''&amp;quot; property of &amp;quot;'''Mcustomer'''&amp;quot; referenced here as &amp;quot;'''customer'''&amp;quot;. &lt;br /&gt;
And sub-reference of the reference can also be exported. In the following example, the &amp;quot;'''region'''&amp;quot; reference (of entity &amp;quot;'''Mregion'''&amp;quot;) in &amp;quot;'''Mcustomer'''&amp;quot; has a property &amp;quot;'''sales_city'''&amp;quot;, it is also exported.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
interchange CashSlip describedBy &amp;quot;CashSlip&amp;quot; merge vectorName &amp;quot;cashslip&amp;quot; file XML &amp;quot;C:/MC/cashdata.xml&amp;quot; encoding &amp;quot;UTF-8&amp;quot;&lt;br /&gt;
     path {&lt;br /&gt;
         entity CashSlip&lt;br /&gt;
&lt;br /&gt;
         expose {&lt;br /&gt;
             customer on account_num&lt;br /&gt;
             customer expose {&lt;br /&gt;
                 region on sales_city&lt;br /&gt;
             }&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the generated Smooks config XML, the section will look like this:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;account_num&amp;gt;${(CashSlip.customer.account_num)!}&amp;lt;/account_num&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And the sub-expose part looks like this:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;sales_city&amp;gt;${(CashSlip.customer.region.sales_city)!}&amp;lt;/sales_city&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* This recursive-export can go as many levels as the user want.&lt;br /&gt;
&lt;br /&gt;
====mapping====&lt;br /&gt;
With a &amp;lt;code&amp;gt;mapping { ... }&amp;lt;/code&amp;gt; block, the user can easily '''map''' (or rather '''match''') attributes of the data model to values from external source files.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
mapping {&lt;br /&gt;
 [map &amp;lt;entity-attribute&amp;gt; to &amp;lt;Data&amp;gt;]*&lt;br /&gt;
 [mapBlob &amp;lt;entity-attribute&amp;gt; to &amp;lt;Data&amp;gt; [extension &amp;lt;blob-file-extension] [path &amp;lt;blob-path&amp;gt;] mimeType &amp;lt;mine-type&amp;gt; ]*&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
mapping{&lt;br /&gt;
  map conversion_ratio to &amp;quot;rate&amp;quot;&lt;br /&gt;
  mapBlob currency_icon to &amp;quot;currency_icon&amp;quot; extension &amp;quot;png&amp;quot; path &amp;quot;C:/data/currency_images&amp;quot; mimeType png&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first map of the above example will map the attribute conversion_ratio of the entity to field &amp;quot;rate&amp;quot;.&lt;br /&gt;
The second mapBlob does a bit more work, it will:&lt;br /&gt;
&lt;br /&gt;
  * generate full file paths by combining the path, the file names specified by &amp;quot;currency_icon&amp;quot; field, and the extension,&lt;br /&gt;
  * upload the files into database with the given mimeType, and&lt;br /&gt;
  * assign the UUID of the blob to property currency_icon of the entity.&lt;br /&gt;
&lt;br /&gt;
Please note that the only valid attributes here are the members of the corresponding entity, which the user has chosen prior defining the &amp;lt;code&amp;gt;mapping&amp;lt;/code&amp;gt; block itself.&lt;br /&gt;
&lt;br /&gt;
====keys====&lt;br /&gt;
With a &amp;lt;code&amp;gt;keys&amp;lt;/code&amp;gt; { ... } block, the user can define a set of '''keys''' to identify data within our persistence layer (DB or In-Memory...). &lt;br /&gt;
This makes sence when the data in a source file can't be clearly identified by an attribute (id). Therefore a set of attributes (keys) can be defined and then be used as identification parameter set by a [[#lookup|''lookups'']] instance in order to query our data pool and identify data using several criteria.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
keys {&lt;br /&gt;
 [key &amp;lt;entity-attribute&amp;gt;]*&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Assuming you try to update the address data of an employee from an entity named Employee, but you happen not to have his/her personal id. By setting a &amp;lt;code&amp;gt;keys&amp;lt;/code&amp;gt; { ... } block, like shown here below, you allow the Datainterchange unit to look into the database after employee's data based on the key set inside this block, rather than using a personal id, which might have been here unique and more than enough to find the employee right away.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
keys {&lt;br /&gt;
  key last_name&lt;br /&gt;
  key first_name&lt;br /&gt;
  key age&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note that the only valid attributes here are members of the corresponding entity, that you would have chosen prior defining the &amp;lt;code&amp;gt;keys&amp;lt;/code&amp;gt; block itself.&lt;br /&gt;
&lt;br /&gt;
==TriggerView==&lt;br /&gt;
A TriggerView will be automatically generated by the DataInterchange DSL as soon as you define an interchange unit inside the model file and save it. &lt;br /&gt;
&lt;br /&gt;
You can see on the right side of the figure shown below, the definition of 10 interchange units within the Datainterchange model file (blue rectangles); and on the right side of the figure you can see, how the TriggerView looks like (green rectangle), when it is embedded inside an application page in its entirety. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:TriggerView.png|600px|center|''Figure 5: Datainterchange TriggerView Definition and Application Views''|thumbnail|600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To achieve this result you need to do two simple steps. You need first to either integrate the TriggerView into an existing perspective or create a new perspective and then integrate the view into it, like shown below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
► '''Example 1''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import ns net.osbee.sample.foodmart.datainterchanges&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
package net.osbee.sample.foodmart.perspectives {&lt;br /&gt;
&lt;br /&gt;
	perspective Currencies iconURI &amp;quot;employee&amp;quot; {&lt;br /&gt;
		sashContainer c1 orientation horizontal {&lt;br /&gt;
			part imex view dataInterchange datainterchanges spaceVolume &amp;quot;20&amp;quot;&lt;br /&gt;
			...&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The most important thing in this example is to notice the use of the keyword '''view''' followed by the keyword '''dataInterchange''' and the name ''datainterchanges'' referring to the package, in which all datainterchange unit definitions have to be found.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The second step would be to create a menu entry for you to be able to access the newly created or altered perspective in the application via the menu bar, like shown in the following example.&lt;br /&gt;
&lt;br /&gt;
► '''Example 2''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import ns net.osbee.sample.foodmart.perspectives.Currencies&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
package net.osbee.sample.foodmart.menues {  &lt;br /&gt;
	...&lt;br /&gt;
	entry Menu describedBy &amp;quot;my menu&amp;quot; { &lt;br /&gt;
		entry Perspectives {&lt;br /&gt;
			entry MasterData {&lt;br /&gt;
				entry Company image &amp;quot;company&amp;quot; perspective Company&lt;br /&gt;
				entry Employees image &amp;quot;employee&amp;quot; perspective Employee&lt;br /&gt;
				entry Products image &amp;quot;products&amp;quot; perspective Products&lt;br /&gt;
				entry CashRegisterData image &amp;quot;editor_area&amp;quot; perspective CashMasterDataRegister&lt;br /&gt;
&lt;br /&gt;
				entry Currencies image &amp;quot;products&amp;quot; perspective Currencies&lt;br /&gt;
&lt;br /&gt;
				entry People image &amp;quot;task_action_delegate&amp;quot; perspective PeopleMock&lt;br /&gt;
				&lt;br /&gt;
			}&lt;br /&gt;
		...&lt;br /&gt;
	...	}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:TriggerViewMenuSelection.png|600px|center|''Figure 6: Datainterchange TriggerView Menu Selection''|thumbnail|600px]]&lt;br /&gt;
&lt;br /&gt;
The figure above shows the same menu structure defined in the example 2 and results in showing the application with the TriggerView, as you can see on the left side of the figure 5. You can get and review more information on how to create menu entries and perspectives in both [[Menu DSL]] and [[Perspective DSL]] documentation pages. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Among all the components that are generated for the use of each interchange unit functions are action buttons, you would find inside toolbars in some dialogs. Usually you have to define them by yourself in the corresponding DSL files. This step is not needed here, since it has already been generated for this particular view.&lt;br /&gt;
&lt;br /&gt;
[[File:TriggerViewActionButtons.png|600px|center|''Figure 7: Action Buttons for datainterchange unit functions''|thumbnail|600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Please note that it is '''not mandatory''' to display all available functionalities through the use of the TriggerView like shown here above. It is customary to only use parts of the generated Datainterchange components (e.g. action buttons) where you see them fit; for instance in order to only use each interchange unit functionalities (import and/or export) in separated and dedicated views (dialogs). Therefore, we also recommend you to have a look at the [[Action DSL]] documentation page in order to understand how to create your own toolbars, and so forth creating the buttons using import or export functions of any datainterchange unit you would have created.&lt;br /&gt;
&lt;br /&gt;
==Smooks Configuration and Settings File==&lt;br /&gt;
'''Please note that whenever a model is saved''', the '''Datainterchange DSL''' will do three things '''automatically''':&lt;br /&gt;
&lt;br /&gt;
* generate Java classes,&lt;br /&gt;
* generate Smooks configuration files for both import and export functions, and&lt;br /&gt;
* generate a config file to modify the import and export paths on runtime.&lt;br /&gt;
&lt;br /&gt;
===Smooks Configuration File===&lt;br /&gt;
&lt;br /&gt;
The OS.bee implementation of Data Interchange interface is based on Smooks. Smooks is a Java framework for processing XML and non XML data (CSV, EDI, Java etc) by mapping data to JavaBeans, which can later be persisted, enriched (merge with existing data from other source), or converted and exported into other formats.&lt;br /&gt;
&lt;br /&gt;
Smooks relies on a proper configuration file for the import / export processes. These configuration files are generated by the Datainterchange DSL automatically. Here is a brief introduction of how the generated Smooks configuration files work.&lt;br /&gt;
&lt;br /&gt;
When a data import / export Smooks instance is initiated, it will be supplied with the generated config file. This file defines the actions to be performed upon certain events during the SAX parsing process. Here is an example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; line='line'&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;smooks-resource-list xmlns=&amp;quot;http://www.milyn.org/xsd/smooks-1.1.xsd&amp;quot; xmlns:csv=&amp;quot;http://www.milyn.org/xsd/smooks/csv-1.2.xsd&amp;quot; xmlns:dao=&amp;quot;http://www.milyn.org/xsd/smooks/persistence-1.2.xsd&amp;quot; xmlns:jb=&amp;quot;http://www.milyn.org/xsd/smooks/javabean-1.2.xsd&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;jb:bean beanId=&amp;quot;McurrencyNameStream&amp;quot; class=&amp;quot;net.osbee.sample.foodmart.entities.McurrencyNameStream&amp;quot; createOnElement=&amp;quot;/csv-set&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;jb:expression property=&amp;quot;importDate&amp;quot;&amp;gt;PTIME.nowDate&amp;lt;/jb:expression&amp;gt;&lt;br /&gt;
        &amp;lt;jb:wiring beanIdRef=&amp;quot;McurrencyName&amp;quot; setterMethod=&amp;quot;addToCurrencyNames&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/jb:bean&amp;gt;&lt;br /&gt;
    &amp;lt;jb:bean beanId=&amp;quot;McurrencyName&amp;quot; class=&amp;quot;net.osbee.sample.foodmart.entities.McurrencyName&amp;quot; createOnElement=&amp;quot;/csv-set/csv-record&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;jb:value data=&amp;quot;/csv-set/csv-record/isoCode&amp;quot; decoder=&amp;quot;String&amp;quot; property=&amp;quot;isoCode&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;jb:value data=&amp;quot;/csv-set/csv-record/name&amp;quot; decoder=&amp;quot;String&amp;quot; property=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;jb:value data=&amp;quot;/csv-set/csv-record/countries&amp;quot; decoder=&amp;quot;String&amp;quot; property=&amp;quot;countries&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/jb:bean&amp;gt;&lt;br /&gt;
    &amp;lt;csv:reader fields=&amp;quot;isoCode,name,countries&amp;quot; indent=&amp;quot;false&amp;quot; separator=&amp;quot;;&amp;quot; skipLines=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;params&amp;gt;&lt;br /&gt;
        &amp;lt;param name=&amp;quot;stream.filter.type&amp;quot;&amp;gt;SAX&amp;lt;/param&amp;gt;&lt;br /&gt;
        &amp;lt;param name=&amp;quot;inputType&amp;quot;&amp;gt;input.csv&amp;lt;/param&amp;gt;&lt;br /&gt;
        &amp;lt;param name=&amp;quot;smooks.visitors.sort&amp;quot;&amp;gt;false&amp;lt;/param&amp;gt;&lt;br /&gt;
        &amp;lt;param name=&amp;quot;input.csv&amp;quot; type=&amp;quot;input.type.actived&amp;quot;&amp;gt;C:/git/net.osbee.sample.foodmart/net.osbee.sample.foodmart.datainterchange/smooks-resources/ISOCurrencyCodes081507.csv&amp;lt;/param&amp;gt;&lt;br /&gt;
    &amp;lt;/params&amp;gt;&lt;br /&gt;
&amp;lt;/smooks-resource-list&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Further informations on the Smoooks framework are available and can be reviewed in its [http://www.smooks.org/guide documentation] you will find on the [http://www.smooks.org/index official website].&lt;br /&gt;
&lt;br /&gt;
===Path Config File===&lt;br /&gt;
&lt;br /&gt;
The file is interpreted using the Properties xml im- and export method and looks like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE properties SYSTEM &amp;quot;http://java.sun.com/dtd/properties.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;properties&amp;gt;&lt;br /&gt;
&amp;lt;comment&amp;gt;dataInterchange file URLs&amp;lt;/comment&amp;gt;&lt;br /&gt;
&amp;lt;entry key=&amp;quot;EmployeesDepartment-import&amp;quot;&amp;gt;C:/myimports/employeesdepartment.xml&amp;lt;/entry&amp;gt;&lt;br /&gt;
&amp;lt;entry key=&amp;quot;EmployeesDepartment-export&amp;quot;&amp;gt;C:/myexports/employeesdepartment.xml&amp;lt;/entry&amp;gt;&lt;br /&gt;
&amp;lt;/properties&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
By default this file is named like the title in the Data Interchange package and extended by &amp;quot;Config&amp;quot; and has the extension &amp;quot;xml&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;package net.osbee.sample.foodmart.datainterchanges title &amp;quot;DataInterchange&amp;quot; {}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
leads to the filename:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;DataInterchangeConfig.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and is stored platform independently in the current user's home directory under the subdirectory &amp;quot;.osbee&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
An administrator must receive this configuration file with the application, modify it and place it somewhere on the application server. The path to this configuration file must be supplied in the product's preferences (&amp;lt;code&amp;gt;org.eclipse.osbp.production.prefs&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;datainterchange/datainterchangeConfiguration=c\:\\DataInterchangeConfig.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The path value obviously depends on the operating system you are developing.&lt;br /&gt;
&lt;br /&gt;
===Further Reading===&lt;br /&gt;
&lt;br /&gt;
There is a lot of information to be found in the internet that describe the formal structure of the smooks configuration in any case. A very good one can be found at [https://access.redhat.com/documentation/en-us/red_hat_jboss_fuse/6.3/html-single/smooks_development_guide/index RedHat].&lt;br /&gt;
&lt;br /&gt;
== Copyright Notice ==&lt;br /&gt;
{{Copyright Notice}}&lt;/div&gt;</summary>
		<author><name>Riegel</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=OS.bee_Customer_Display&amp;diff=3726</id>
		<title>OS.bee Customer Display</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=OS.bee_Customer_Display&amp;diff=3726"/>
				<updated>2019-03-12T08:18:41Z</updated>
		
		<summary type="html">&lt;p&gt;Riegel: /* Customer Display */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Customer Display ==&lt;br /&gt;
&lt;br /&gt;
The Statemachine DSL (Finite State-Machine) covers the synchronization of external (slave) browsers to a main (master) browser connected to an OS.bee server. The requirement was mainly inspired by the need of a customer display for the OS.bee application OS.pos. In this context it was required to display data for the customer on a secondary display.&lt;br /&gt;
&lt;br /&gt;
Multiple displays can be connected to a master just by using a pattern on the address line of the slave-browser:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  http://''server_host-name''/osbpdisplay/#''host-name_of_the_master''?display=''DialogName''Display (as defined in Dialog DSL)&amp;amp;locale=''language tag of locale''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
► example: http://dv999.compex.de:8081/osbpdisplay/#dv999.compex.de?display=CashSlipDisplay&amp;amp;locale=de-DE&lt;br /&gt;
&lt;br /&gt;
DisplayName must be followed by the postfix Display as the class is generated like this to be seprarate from other dialogs.&lt;br /&gt;
Language tags specify a language locale with its country component, like &amp;quot;de-DE&amp;quot;, &amp;quot;de-AT&amp;quot;, &amp;quot;en-US&amp;quot;, &amp;quot;en-EN&amp;quot;. The country component is necessary to decide the currency symbol and other country specific formats.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Important prerequisite ===&lt;br /&gt;
In order to use external displays you must add the bundle ''org.eclipse.osbp.display'' to your product's launch configuration and set auto-start to true.&lt;br /&gt;
&lt;br /&gt;
[[File:display_autostart.png|800px]]&lt;br /&gt;
&lt;br /&gt;
=== Technical changes in DSL model ===&lt;br /&gt;
&lt;br /&gt;
==== changes in dto ====&lt;br /&gt;
* New '''dto''' &amp;quot;'''CustomerDisplayDto'''&amp;quot;:&lt;br /&gt;
*:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
dto CustomerDisplayDto {&lt;br /&gt;
	var double totalAmount&lt;br /&gt;
	var boolean left&lt;br /&gt;
	var String message&lt;br /&gt;
	var boolean right&lt;br /&gt;
	var BlobMapping image&lt;br /&gt;
	ref CashSlipDto slip&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** '''totalAmount''' : total amount of all cash position.&lt;br /&gt;
** '''left''' &amp;amp; '''right''' : boolean value, define if this part will be shown on display.&lt;br /&gt;
** '''image''' : any image which will be shown on th display&lt;br /&gt;
** '''slip''' : reference the cash slip dto.&lt;br /&gt;
&lt;br /&gt;
==== changes in UI====&lt;br /&gt;
* New '''UI''':&lt;br /&gt;
*:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
display Customer {&lt;br /&gt;
	rootType CustomerDisplayDto&lt;br /&gt;
	datasource main:CustomerDisplayDto&lt;br /&gt;
	datasource img:BlobConverter&lt;br /&gt;
	horizontalLayout {&lt;br /&gt;
		verticalLayout left {&lt;br /&gt;
			textfield(i18n noCaption readonly) message&lt;br /&gt;
			table(i18n noCaption) slip {&lt;br /&gt;
				scrollToBottom&lt;br /&gt;
				type CashPositionDto&lt;br /&gt;
				columns {&lt;br /&gt;
					column quantity&lt;br /&gt;
					column product.sku&lt;br /&gt;
					column product.product_name&lt;br /&gt;
					column price&lt;br /&gt;
					column amount&lt;br /&gt;
				}&lt;br /&gt;
				sort {&lt;br /&gt;
					column now asc&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			align fill-left&lt;br /&gt;
			form(styles &amp;quot;os-cash-total&amp;quot;) {&lt;br /&gt;
				decimalField(precision= 2 readonly) totalAmount&lt;br /&gt;
			}&lt;br /&gt;
			bind [this.message].value &amp;lt;-- img.input&lt;br /&gt;
			bind [this.slip].collection &amp;lt;-- main.slip.positions&lt;br /&gt;
			bind [this.totalAmount].value &amp;lt;-- main.totalAmount&lt;br /&gt;
		}&lt;br /&gt;
		verticalLayout right {&lt;br /&gt;
			image info&lt;br /&gt;
			bind img.input &amp;lt;-- main.^image&lt;br /&gt;
			bind [this.info].resource &amp;lt;-- img.output&lt;br /&gt;
		}&lt;br /&gt;
		bind [this.left].visible &amp;lt;-- main.left&lt;br /&gt;
		bind [this.right].visible &amp;lt;-- main.right&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** In this '''display''' &amp;quot;'''customer'''&amp;quot;, we define in the 2 parts(left part &amp;amp; right part), if they will be shown and what will be shown in UI.&lt;br /&gt;
&lt;br /&gt;
==== changes in Functionlibrary ====&lt;br /&gt;
* New lines in '''operation''' &amp;quot;'''initImages'''&amp;quot; &amp;amp; '''operation''' &amp;quot;'''conputeTotal'''&amp;quot; :&lt;br /&gt;
*:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
operation initImages(IStateMachine stateMachine, Object [] params) {&lt;br /&gt;
	. . .&lt;br /&gt;
stateMachine.set(&amp;quot;CustomerDisplayImage&amp;quot;, cashregister.store.company.companyImage)&lt;br /&gt;
. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** In operation &amp;quot;'''initImages'''&amp;quot;, the image of customerDisplay could be set.&lt;br /&gt;
*:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
operation computeTotal(IStateMachine stateMachine) {&lt;br /&gt;
	. . .&lt;br /&gt;
	stateMachine.set(&amp;quot;CustomerDisplayTotalAmount&amp;quot;, amount);&lt;br /&gt;
	. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** In operation &amp;quot;'''computeTotal'''&amp;quot;, the total amount of CustomerDisplay could be calculated and set.&lt;br /&gt;
&lt;br /&gt;
==== changes in Statemachine ====&lt;br /&gt;
Some new keywords are introduced for this new functionality:&lt;br /&gt;
:* &amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt; display &amp;lt;DisplayName&amp;gt; using &amp;lt;DTOName&amp;gt; &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:* &amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt; dto &amp;lt;DTOAlias&amp;gt;  type &amp;lt;DTOName&amp;gt; attach &amp;lt;DisplayName&amp;gt; &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:* &amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt; displayText text &amp;quot;some text&amp;quot; @&amp;lt;DisplayName&amp;gt; to &amp;lt;DTOAttribute&amp;gt; &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The references of a DTO that is attached to a display are always synchronized across all connected displays. Single fields must be synchronized by '''displayText'''.&lt;br /&gt;
&lt;br /&gt;
:► e.g.: &lt;br /&gt;
:*&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
display CustomerDisplay using CustomerDisplayDto&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:*&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
dto cashslip type CashSlipDto attach CustomerDisplay&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:*&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
displayText text &amp;quot;locked&amp;quot; @CustomerDisplay to message&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:► The referenced DTO must be the rootType of the Display definition in the ui model.&lt;br /&gt;
&lt;br /&gt;
Now I will show the changes in statmachine:&lt;br /&gt;
# New '''events''' &amp;quot;'''dataProvider DataControl'''&amp;quot;:&lt;br /&gt;
#:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
dataProvider DataControl { &lt;br /&gt;
	. . .&lt;br /&gt;
dto cashslip type CashSlipDto attach CustomerDisplay&lt;br /&gt;
	dto customerDisplay type CustomerDisplayDto&lt;br /&gt;
	. . . &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# New '''events''' &amp;quot;'''peripheral PeripheralControl'''&amp;quot;:&lt;br /&gt;
#:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
peripheral PeripheralControl {&lt;br /&gt;
	. . .&lt;br /&gt;
	display CustomerDisplay using CustomerDisplay &lt;br /&gt;
	. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Setting for customerDisplay, in '''state''' &amp;quot;'''IDLE'''&amp;quot;: &lt;br /&gt;
#:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
trigger onStartUp&lt;br /&gt;
actions transition LOCKED{&lt;br /&gt;
	. . .&lt;br /&gt;
displayText false @CustomerDisplay to ^left&lt;br /&gt;
displayText true @CustomerDisplay to ^right&lt;br /&gt;
. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Setting for customerDisplay, in '''state''' &amp;quot;'''LOCKED'''&amp;quot;:&lt;br /&gt;
#:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
trigger onOk&lt;br /&gt;
actions transition ATTENTIVE{&lt;br /&gt;
	. . .&lt;br /&gt;
displayText true @CustomerDisplay to ^left&lt;br /&gt;
displayText false @CustomerDisplay to ^right&lt;br /&gt;
 . . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Copyright Notice ==&lt;br /&gt;
{{Copyright Notice}}&lt;/div&gt;</summary>
		<author><name>Riegel</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=OS.bee_Software_Factory_Unique_Selling_Propositions&amp;diff=3715</id>
		<title>OS.bee Software Factory Unique Selling Propositions</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=OS.bee_Software_Factory_Unique_Selling_Propositions&amp;diff=3715"/>
				<updated>2019-01-29T08:02:41Z</updated>
		
		<summary type="html">&lt;p&gt;Riegel: /* Why using OS.bee? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= What is OS.bee about? =&lt;br /&gt;
&lt;br /&gt;
OS.bee is a low-code model-driven software-factory, using over 20 Domain Specific Languages (DSL) to generate large-scale business web-applications. Each DSL contains a grammar for a required application-layer. A DSL hides complexity from successors, thereby enabling parallel modelling of domain requirements by multiple designers as they don’t need to know the domain logic they build upon. A model created with a DSL creates executable code, structured data and configuration settings or is interpreted by a renderer during runtime. The language of each DSL uses a grammar that makes the created model easy to understand and forms a requirement specification on its layer. The overall hierarchy can be browsed through at any time and gives a good understanding of the whole application in nearly natural English language. A DSL can also be studied by its syntactical graph. The creation of a model is a guided process through the syntax graph where the designer benefits from content assistance, code completion, quick fix, syntax colorizing, outline, formatting and validation. Many DSLs define metadata to be used by subsequent DSL to increase the leverage of definitions at a basic level. All element names defined by a DSL are automatically extracted to localization files for translation to open foreign markets for the resulting application. The ratio between the generated lines of code versus the numbers of lines in a model is about 8-10. Development speed improves by a similar factor. Dependencies between models reveal inconsistencies immediately while modifying and prevent generating code until these are resolved. Therefore turnaround cycles are short, errors are easy to discover and prototypes materialize in a very short time. Some DSL generate against famous open-source frameworks like EclipseLink, Smooks, Mondrian, Vaadin or jBPM thus enabling non-developers to use complex frameworks without deeper knowledge of their API. OS.bee inherits the features of the embedded frameworks and makes them easy to exploit for specialists of a domain not necessarily being software developer.&lt;br /&gt;
&lt;br /&gt;
= Why using OS.bee? =&lt;br /&gt;
* You need a lot of unexpensive workstations for your employees to work with OS.bee applications.&lt;br /&gt;
* Work has to be done from everywhere, worldwide, in any language.&lt;br /&gt;
* Deployment of new versions shall be simple and be done at a single point to keep IT-costs at a minimum.&lt;br /&gt;
* Downtimes for updates or sandbox trials are undesired.&lt;br /&gt;
* You want to scale your applications effortless as you do with your business in means of functionality and security.&lt;br /&gt;
* You want a hierachically consistent and validated application any time, no matter what was just modified.&lt;br /&gt;
* You dislike vendor lock-in.&lt;br /&gt;
* Investments in software should be long-term decisions.&lt;br /&gt;
* You know that software never is a stand-alone solution, instead it must deeply integrate with existing solutions, machines and protocols.&lt;br /&gt;
* The Internet of Things is not just a verbal formula to you, you ought to use it.&lt;br /&gt;
* You know best about your business and want to be enabled to implement that knowledge by yourself into the application.&lt;br /&gt;
* You want that continuous improvement for applications shall be unexpensive.&lt;br /&gt;
* Open Source software is an advantage to you, not a risk.&lt;br /&gt;
* The software architecture should fulfill all state of the art design patterns and conform to object oriented design principles in order to be open to changes.&lt;br /&gt;
* It should be possible to hire software specialists all over the world needing a minimum of training on your software if it becomes necessary.&lt;br /&gt;
* Fast solutions to your business problems is your biggest concern.&lt;br /&gt;
* The software you use shall be fault tolerant and self-controlling.&lt;br /&gt;
* The business processes implemented in your software shall use standardized notations and be automatic, cooperative, save and easy to learn and modify.&lt;br /&gt;
* You know that enforcing business rules in your company is a success factor.&lt;br /&gt;
* On the other hand, your employees must feel comfortable with the software they use.&lt;br /&gt;
* It is quite clear to you that mature capabilities in all departments of your company can only be achieved through measurement and analysis and agile change management for business processs.&lt;br /&gt;
* If you need support, you can get it anytime. 24/7 by experts, from a forum, by examples and videos.&lt;br /&gt;
&lt;br /&gt;
= DSL Modeling =&lt;br /&gt;
&lt;br /&gt;
== Persistence ==&lt;br /&gt;
&lt;br /&gt;
Persistence refers to object and process characteristics that continue to exist even after the process that created it ceases or the machine it is running on is powered off. When an object or state is created and needs to be persistent, it is saved in a non-volatile storage location, like a hard drive, versus a temporary file or volatile random access memory.&lt;br /&gt;
&lt;br /&gt;
=== Data-type ===&lt;br /&gt;
&lt;br /&gt;
A data type is a classification that specifies which type of value a variable has and what type of mathematical, relational or logical operations can be applied to it without causing an error. Data types also hold metadata for higher-level DSLs so they can apply additional functionality to a field using this data type.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Primitive Types (int, double, etc.)&lt;br /&gt;
* Object Types (String, Date, etc.)&lt;br /&gt;
* Blob&lt;br /&gt;
** Store and retrieve any document or image type in binary form&lt;br /&gt;
* Auto-sizing Images&lt;br /&gt;
** Additionally stores images of definable size to experience better performance while rendering&lt;br /&gt;
* Formatted types&lt;br /&gt;
** Dates and times in any localized form&lt;br /&gt;
** Dates and times in any format (time only, date only, short and long forms, custom pattern, etc.)&lt;br /&gt;
** Currencies in any localized form&lt;br /&gt;
* Validated types with adjustable severity message&lt;br /&gt;
** Date in past/future&lt;br /&gt;
** Not null&lt;br /&gt;
** Not duplicate&lt;br /&gt;
** Range values&lt;br /&gt;
** Min/max length&lt;br /&gt;
* Slider types&lt;br /&gt;
** Min/max values&lt;br /&gt;
* Masked types&lt;br /&gt;
** Number, Hexadecimal, Capitalized&lt;br /&gt;
** Input pattern (e.g. Phone Numbers (###) ###-####)&lt;br /&gt;
** Password&lt;br /&gt;
* Suggestion types&lt;br /&gt;
** While typing some characters, a sorted list of suggestions pops up for selection&lt;br /&gt;
* Programmable Converters&lt;br /&gt;
** Text-to-Image&lt;br /&gt;
** Number-to-Text/Image&lt;br /&gt;
** Value-to-CSS Style&lt;br /&gt;
** Units of measurement&lt;br /&gt;
* Rich text editor using HTML markups&lt;br /&gt;
* Text area &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Entity ===&lt;br /&gt;
&lt;br /&gt;
An entity (-type) is a model of metadata for a single unique object in the real world. For example a person, organization, object type, or concept about which information is stored. Together with its attributes (or properties) it describes information that is being mastered. An entity typically corresponds to one or several related tables in database. An attribute is a characteristic or trait of an entity that describes the entity, for example, the Person entity type has the Date of Birth attribute.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Simple Entity&lt;br /&gt;
* Mapped super-classes&lt;br /&gt;
** Complement attributes in every entity using this&lt;br /&gt;
* Inheritance&lt;br /&gt;
** Specialized classes for special purpose&lt;br /&gt;
* References and their opposites&lt;br /&gt;
* References with constraints&lt;br /&gt;
* Embeddable beans&lt;br /&gt;
* Number generators UUID or ID&lt;br /&gt;
* Separated persistence-units capable of using multiple databases simultaneously&lt;br /&gt;
* All multiplicities (0..1, 0..n,1..1,1..n,*)&lt;br /&gt;
* Indexes unique and non-unique&lt;br /&gt;
* Validated uniqueness&lt;br /&gt;
* Domain-key annotation for lookups&lt;br /&gt;
* Methods for calculated attributes&lt;br /&gt;
* Lifecycle controlled method invoking (by PostLoad, PrePersist, etc.)&lt;br /&gt;
* Affected changes listeners&lt;br /&gt;
* Localizable Enumerations with images&lt;br /&gt;
* Creation and last modification information&lt;br /&gt;
* Transient data&lt;br /&gt;
* Synthetic attributes built by lifecycle methods either transient or persistent&lt;br /&gt;
* Historicized data&lt;br /&gt;
* Temporal data&lt;br /&gt;
* Versioned data&lt;br /&gt;
* Definable Runtime data filter&lt;br /&gt;
* Programmable Validators&lt;br /&gt;
* Nested Filter attributions over multiple references&lt;br /&gt;
* Abstraction of database vendor specific implementations&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Data transfer object (DTO) ===&lt;br /&gt;
&lt;br /&gt;
A DTO is an object that carries data between processes. DTOs are simple objects that do not contain any business logic but may contain serialization and deserialization mechanisms for transferring data.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Independent nested data container&lt;br /&gt;
* Automatically generated for entities&lt;br /&gt;
* Automatically mapped by entity data&lt;br /&gt;
* Editable sub- or supersets for entities&lt;br /&gt;
* Transient data container&lt;br /&gt;
* Nested objects automatically synchronized&lt;br /&gt;
* Nested properties access through dot expressions&lt;br /&gt;
* Used for services, processes, functions and renderers&lt;br /&gt;
* Dirty state aware&lt;br /&gt;
* Access restrictions on DTO and property granularity controlled by security layer&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== DTO Service ===&lt;br /&gt;
&lt;br /&gt;
A DTO service abstracts and encapsulates all access to the data source. It manages the connection with the data source to obtain and store data and implements the access mechanism required to work with the data source. The data source could be a persistent store like an RDBMS, or a business service accessed via REST or SOAP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Data storage and retrieval suitable for DTO&lt;br /&gt;
* Nested Transactions and Lock-modes&lt;br /&gt;
* Global transactions&lt;br /&gt;
* Object Oriented Query engine&lt;br /&gt;
* Low level Java Persistence Query Language method declarations (e.g. getTotal(), getAverage(), …)&lt;br /&gt;
* Injectable and declarative service&lt;br /&gt;
* Used for services, processes, functions and renderers&lt;br /&gt;
* Session scoped Entity Manager&lt;br /&gt;
* Thread safe persistence-unit bound Entity Manager Factory&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Data-Interchange ===&lt;br /&gt;
&lt;br /&gt;
Data Interchange is the endpoint-to-endpoint exchange of business documents in a standard electronic format between business partners or computer systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Smooks and FreeMarker implementation&lt;br /&gt;
* Nested entity import- and export-paths&lt;br /&gt;
* Localized formatters on data&lt;br /&gt;
* Supports encoding&lt;br /&gt;
* XML and CSV formats&lt;br /&gt;
* All EDI messages&lt;br /&gt;
* Automatically set export- and import markers for database&lt;br /&gt;
* Filtered exports&lt;br /&gt;
* Bulk insert/update&lt;br /&gt;
* Progress bar&lt;br /&gt;
* Generated import and export dashboard&lt;br /&gt;
* Generated lookup queries to embed relational data&lt;br /&gt;
* Merge or persist external data&lt;br /&gt;
* Import images of different mime-types into blobs via filename pattern&lt;br /&gt;
* Usage of expressions&lt;br /&gt;
* Free attribute mappings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Signal ===&lt;br /&gt;
&lt;br /&gt;
Signal processes events coming from file-systems. If a file that matches a given filename pattern is created, modified or deleted then an event is received and the modelled actions will be called. Signal also emits events for recurring things like a certain weekday and time is reached and executes the modelled actions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* File watcher for all file activities working on all operating systems&lt;br /&gt;
* Free filename pattern to watch for&lt;br /&gt;
&lt;br /&gt;
* Trigger Data-Interchange&lt;br /&gt;
* Definable export or import job-chain&lt;br /&gt;
* Synchronously or asynchronously execution (depending on import relationship) &lt;br /&gt;
* Quartz implementation for scheduled Data-Interchange export-jobs&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Entity-Mock ===&lt;br /&gt;
&lt;br /&gt;
Mock objects are simulated objects that mimic the behavior of real objects in controlled ways. A programmer typically creates a mock object to test the behavior of some other object, in much the same way that a car designer uses a crash test dummy to simulate the dynamic behavior of a human in vehicle impacts.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Generates fake data looking realistic&lt;br /&gt;
&lt;br /&gt;
* Mapping of roles to positions and multi-positions&lt;br /&gt;
&lt;br /&gt;
* Rule-based data composition (e.g. email address)&lt;br /&gt;
* Rule-based attribute generators for every data-type from data composition, or &lt;br /&gt;
** Randomly&lt;br /&gt;
** Ranges&lt;br /&gt;
** Picks from a given list&lt;br /&gt;
** Dates in the past with offset and limit (for birthdays)&lt;br /&gt;
** Dates in the future with offset and limit&lt;br /&gt;
* Composes objects from rule-based attribute generators (e.g. a person, a company, etc.)&lt;br /&gt;
* Composes object-trees from composed objects&lt;br /&gt;
* Creates relationships between objects using a given probability&lt;br /&gt;
* Creates mass data (e.g. sales data)&lt;br /&gt;
* Imports fixed data via Data-Interchange and embeds it&lt;br /&gt;
* Used mainly for quick-setup applications using a H2 database&lt;br /&gt;
* Exposes mock data services to be executed before any login-attempt&lt;br /&gt;
* Persists into all supported database products&lt;br /&gt;
* Can be executed at every server-start or once&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Business intelligence ==&lt;br /&gt;
&lt;br /&gt;
Business Intelligence (BI) refers to technologies, applications and practices for the collection, integration, analysis, and presentation of business information. The purpose of Business Intelligence is to support better business decision making. Essentially, Business Intelligence systems are data-driven Decision Support Systems (DSS). Business Intelligence is sometimes used interchangeably with briefing books, report and query tools and executive information systems.&lt;br /&gt;
&lt;br /&gt;
=== Cube ===&lt;br /&gt;
&lt;br /&gt;
A cube is a method of storing data in a multidimensional form, generally for reporting purposes. In cubes, data (measures) are categorized by dimensions. Cubes are pre-summarized across dimensions to drastically improve query time over relational databases. The query language used to interact and perform tasks with cubes is multidimensional expressions (MDX).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Mondrian OLAP for MDX queries implementation&lt;br /&gt;
* Cubes, dimensions, hierarchies, levels, members, and measures&lt;br /&gt;
* Defines a multi-dimensional database&lt;br /&gt;
* Contains a logical model, and a mapping of this model onto the physical entity model &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== DataMart ===&lt;br /&gt;
&lt;br /&gt;
A data mart is a subject-oriented archive that stores data and uses the retrieved set of information to assist and support the requirements involved within a particular business function or department. Data marts improve end-user response time by allowing users to have access to the specific type of data they need to view most often by providing the data in a way that supports the collective view of a group of users.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Common layer for data-warehouse queries&lt;br /&gt;
* Simplification of any kind of query against all available data sources&lt;br /&gt;
* Tailored queries and aggregates for different interest-groups&lt;br /&gt;
* Definition of complex multidimensional expressions (MDX) with a simple grammar&lt;br /&gt;
* Sophisticated analytic functions easy to use&lt;br /&gt;
* Online analytical processing built in&lt;br /&gt;
* Access to runtime data of the Business Process management engine&lt;br /&gt;
* Multi-purpose results for processes, reports, score cards and charts&lt;br /&gt;
* Definable navigation trees (join-paths)&lt;br /&gt;
* Definable single- and multi-selection filters on any leaf of the query tree&lt;br /&gt;
* Access restrictions on entity and attribute granularity controlled by security layer&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Function-Library ===&lt;br /&gt;
&lt;br /&gt;
A function-library is a collection of non-volatile resources used by other DSLs. It is a collection of implementations of behavior, written in Xbase, which has a well-defined interface by which the behavior is invoked. Library code is organized in such a way that it can be used by multiple programs that have no connection to each other, in other words it is completely independent of the calling logic. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Xbase implementation&lt;br /&gt;
* UOMo implementation&lt;br /&gt;
* Creates operational objects and methods&lt;br /&gt;
* Grouped by application field&lt;br /&gt;
** Converter for model-presentation conversions&lt;br /&gt;
*** Value to image&lt;br /&gt;
*** Value to value&lt;br /&gt;
*** Value to style (background color, text color, font-style, etc.)&lt;br /&gt;
*** Value to unit of measurement based value&lt;br /&gt;
*** Between measurement systems and unit of measurement families&lt;br /&gt;
** State-Machine&lt;br /&gt;
*** Operations&lt;br /&gt;
*** Functions&lt;br /&gt;
*** Guards&lt;br /&gt;
*** Full access to state-machine controls&lt;br /&gt;
** Toolbar Action&lt;br /&gt;
*** Can execute validation (enable/disable operation)&lt;br /&gt;
*** Execute any operation&lt;br /&gt;
** Validation on DTO&lt;br /&gt;
** Business logic implementation for BPM&lt;br /&gt;
*** Functions callable in system tasks&lt;br /&gt;
*** Ratings for gateways&lt;br /&gt;
*** Tests for gateways&lt;br /&gt;
** Calculations e.g. for&lt;br /&gt;
*** Currencies&lt;br /&gt;
*** Lengths&lt;br /&gt;
*** Areas&lt;br /&gt;
** Posting operations&lt;br /&gt;
* Exposes injectable and declarative service&lt;br /&gt;
* Store and retrieve data from DTO&lt;br /&gt;
* Full access to all JVM objects&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== State-Machine ===&lt;br /&gt;
&lt;br /&gt;
A finite-state machine (FSM) is a mathematical model of computation. It is an abstract machine that can be in exactly one of a finite number of states at any given time. The FSM can change from one state to another in response to an event. The change from one state to another is called a transition. An FSM is defined by a list of its states, its initial state, and the conditions for each transition. These conditions are called guards as they guard the transition from unwanted invocation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Implementation of business behavior&lt;br /&gt;
* Defines states and their transitions&lt;br /&gt;
* Transitions are triggered by events&lt;br /&gt;
* Transitions are guarded by functions from Function-Library&lt;br /&gt;
* Actions to be executed before and after transitioning from Function-Library&lt;br /&gt;
* Has things to control&lt;br /&gt;
** Database objects (DTO)&lt;br /&gt;
** Database filters&lt;br /&gt;
** Visibility or enabling of&lt;br /&gt;
*** Buttons (UI)&lt;br /&gt;
*** Layouts (UI)&lt;br /&gt;
*** Other components (UI)&lt;br /&gt;
** Peripheral devices (interfaces JavaPOS)&lt;br /&gt;
*** Printers&lt;br /&gt;
*** Line displays&lt;br /&gt;
*** Cash drawers&lt;br /&gt;
*** Payment terminals&lt;br /&gt;
*** Signature pads&lt;br /&gt;
** Slave browsers (external displays, etc.)&lt;br /&gt;
* Receives events from&lt;br /&gt;
** Buttons clicked&lt;br /&gt;
** UI selections&lt;br /&gt;
** Peripherals (printer out of paper, etc.)&lt;br /&gt;
** Schedulers&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== BLiP (Business Logic implementation Platform) ===&lt;br /&gt;
&lt;br /&gt;
BLiP focuses on improving corporate performance by managing business processes (BPM), business rules and business logic (Function-Library). &amp;lt;span style=&amp;quot;background-color:#ffffff;color:#222222;&amp;quot;&amp;gt;&amp;amp;nbsp;It is a disciplined approach to identify, design, execute, document, measure, monitor, and control both automated and non-automated business processes to achieve consistent, targeted results aligned with an organization’s strategic goals. BPM involves the deliberate and collaborative definition, improvement, innovation, and management of end-to-end business processes that drive business results, create value, and enable an organization to meet its business objectives with more agility. BPM enables an enterprise to align its business processes to its business strategy, leading to effective overall company performance through improvements of specific work activities either within a specific department, across the enterprise, or between organizations.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Implements jBPM&lt;br /&gt;
* Integrates a BPMN editor at design-time&lt;br /&gt;
* Connects tasks of BPM to business logic of Function-Library&lt;br /&gt;
* Controls sequence-flow through business logic of Function-Library&lt;br /&gt;
* Stores and retrieves process save-points&lt;br /&gt;
* Logs all process activities of system and user&lt;br /&gt;
* Exposes BPM data and events to UI elements&lt;br /&gt;
* Stores and retrieves workload data using DTO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Presentation ==&lt;br /&gt;
&lt;br /&gt;
The presentation layer ensures that the communications that pass through it are in the appropriate form for the recipient application. It is responsible for the delivery and formatting of information to the application layer for further processing or display. It relieves the application layer of concern regarding syntactical differences in data representation within the end-user systems.&lt;br /&gt;
&lt;br /&gt;
=== Table ===&lt;br /&gt;
&lt;br /&gt;
A table is a data structure that organizes information into rows and columns. It can be used to both store and display data in a structured format.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Editable cells&lt;br /&gt;
* Scorecard elements&lt;br /&gt;
** Rule-based colorizing of cell background and textcolor&lt;br /&gt;
** Mixed in rule-based icons&lt;br /&gt;
** Rule-based styling of cells&lt;br /&gt;
** Rule-based tooltips&lt;br /&gt;
* Data from DataMart or DTO&lt;br /&gt;
* Pivot presentation&lt;br /&gt;
* Multidimensional presentation on nested tab-sheets&lt;br /&gt;
* Filtering, sorting, swapping and hiding of columns&lt;br /&gt;
* Stores swapping and hiding per user&lt;br /&gt;
* 3 different row numbering modes&lt;br /&gt;
* Row selection synchronizes other views in scope&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Chart ===&lt;br /&gt;
&lt;br /&gt;
A chart is a diagram, picture, or graph which is intended to make information easier to understand. It is a symbolic representation of information according to some visualization technique.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Multiple data series with selectable colorizing&lt;br /&gt;
* Series switchable from legend&lt;br /&gt;
* Bar, line, pie, donut, bubble and gauge presentation&lt;br /&gt;
* Animated, stacked, shaded and xy-swapped charts&lt;br /&gt;
* Zoom and trend-line function&lt;br /&gt;
* Tooltips for series and data points with absolute value&lt;br /&gt;
* Selectable positioning relative to cursor for tooltips&lt;br /&gt;
* Selectable legend placement&lt;br /&gt;
* Collapsible tree presentation on hierarchical data&lt;br /&gt;
* Date axes with customizable formatting&lt;br /&gt;
* Up to 9 individually scalable Y axes&lt;br /&gt;
* Rotated axis text&lt;br /&gt;
* Category rendering either linear, logarithmic, timeline or as pyramid&lt;br /&gt;
* Downloadable SVG image&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Report ===&lt;br /&gt;
&lt;br /&gt;
A document containing information organized in a graphic or tabular form, prepared on ad hoc, periodic, recurring, regular, or as required basis. Reports may refer to specific periods, events, occurrences, or subjects, and are presented in printed form.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Actuate Birt implementation&lt;br /&gt;
* Definition of reusable layout metadata&lt;br /&gt;
** All units of measurement for layouts&lt;br /&gt;
** Definition of fonts and colors&lt;br /&gt;
** Definition of formatters for&lt;br /&gt;
*** Currencies&lt;br /&gt;
*** Date and time&lt;br /&gt;
** Page sizes (A4, A5, etc.)&lt;br /&gt;
** Orientations (Landscape, portrait)&lt;br /&gt;
** Margins&lt;br /&gt;
** Paddings&lt;br /&gt;
** Alignments&lt;br /&gt;
* Output as HTML or PDF&lt;br /&gt;
* Ability to reference multiple DataMarts for header, footer and details&lt;br /&gt;
* Rendering of blob-images&lt;br /&gt;
* External CSS usable&lt;br /&gt;
* Defines grids and cells&lt;br /&gt;
* Direct printing to preselected output medias per user or per location and report&lt;br /&gt;
* Rule-based visibility of cells&lt;br /&gt;
* Aggregates for grouping&lt;br /&gt;
* Rule-based page break&lt;br /&gt;
* Rule-based colorizing and styling&lt;br /&gt;
* URL-based or embedded images&lt;br /&gt;
* Auto-texts (page number etc.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Topology ===&lt;br /&gt;
&lt;br /&gt;
Topology is designed for representing simple geographical features, along with their non-spatial attributes. It includes geo-json points (addresses and locations), line strings (streets, highways and boundaries), polygons (countries, provinces, tracts of land), and multi-part collections of these types.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* D3 implementation&lt;br /&gt;
* Render predefined maps of U.S.A., Germany, Spain… the World&lt;br /&gt;
* Select states, countries, regions or cities to synchronize other views in scope&lt;br /&gt;
* Render geo-json data from blobs to show boundaries of plots of land, buildings or floor plans&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== UI ===&lt;br /&gt;
&lt;br /&gt;
The user interface (UI) is the space where interactions between humans and OS.bee occur. The goal of this interaction is to allow effective operation and control of the machine from the human end, whilst the machine simultaneously feeds back information that aids the operators' decision-making process.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Models interactive views&lt;br /&gt;
* Connects to data-sources of any kind (DTO, Bean, JVM object, etc.)&lt;br /&gt;
* Nests different kinds of layouts to a complex surface (horizontal, vertical, form, grid)&lt;br /&gt;
* Adds components to layouts (buttons, text-fields, tables, images, etc.)&lt;br /&gt;
* Binds components to properties of data-sources&lt;br /&gt;
* Rule-based visibility processor&lt;br /&gt;
* Navigation widgets for small geometry mobile devices&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Dialog ===&lt;br /&gt;
&lt;br /&gt;
The dialog is a composite UI which is composed by either an automatically generated UI or a UI created with means of the UI DSL and actions that are available through a toolbar. It also can be combined with an instance of State-Machine DSL if a sophisticated control over the visibility of components and a definable usage-sequence is needed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Renders interactive views&lt;br /&gt;
* Either references a predefined UI model or a model inferred from a DTO &lt;br /&gt;
* Links the view to a toolbar&lt;br /&gt;
* Renders different modes&lt;br /&gt;
** Normal, to be used inside perspectives&lt;br /&gt;
** Embedded, to be used inside menues&lt;br /&gt;
** Stateful, inside perspectives, and controlled by a state-machine&lt;br /&gt;
** Mobile, to be used on small geometry mobile devices with navigation widgets&lt;br /&gt;
* Renders in 1 to N columns of components&lt;br /&gt;
* Groups components by using entity metadata&lt;br /&gt;
* Renders owning relationships as combo-boxes&lt;br /&gt;
* Renders member relationships as tables on tab-sheets&lt;br /&gt;
* Implements blob up- and downloading&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Perspective ===&lt;br /&gt;
&lt;br /&gt;
A perspective is a visual container for a set of views (parts). These parts exist wholly within the perspective and are not shared. A perspective is also like a page within a book. It exists within a window along with any number of other perspectives and, like a page within a book, only one perspective is visible at any time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Based on the Eclipse 4 application model&lt;br /&gt;
* Presents a 360° view on the task to the user&lt;br /&gt;
* Divides the usable screen area in resizable containers&lt;br /&gt;
* Nests windows, perspective-stacks, perspectives, containers, part-stacks and parts containing views, and toolbars&lt;br /&gt;
* Stores and retrieves resized areas for each user&lt;br /&gt;
* Supports drag and drop&lt;br /&gt;
* Event dispatching system to synchronize data, actions, focus and more between views&lt;br /&gt;
* References all types of views (dialogs, tables, charts, reports …) to set up a dashboard&lt;br /&gt;
* Modifiable layout at runtime using the designer mode for permitted users&lt;br /&gt;
* Connects to user tasks of BPM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Action ===&lt;br /&gt;
&lt;br /&gt;
A toolbar is a set of icons or buttons that are part of a software program's interface or an open window. A toolbar item is an object type that associates a command with a toolbar. This association places an icon on the toolbar in a specific location relative to the other toolbar icons on that toolbar. A command is linked to a specific action and can have a keyboard shortcut specification.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Links action-buttons &lt;br /&gt;
** To business logic of Function-Library to be executed&lt;br /&gt;
*** Synchronously&lt;br /&gt;
*** Asynchronously as background process&lt;br /&gt;
** To Data-Interchange import- or export tasks&lt;br /&gt;
** To BPM start events&lt;br /&gt;
** To actions to trigger&lt;br /&gt;
*** Save, delete, download, print etc.&lt;br /&gt;
*** Advance focus to next or previous part&lt;br /&gt;
* Links action-buttons to business logic of Function-Library to be &lt;br /&gt;
** Enabled&lt;br /&gt;
** Disabled depending on data context&lt;br /&gt;
* Defines commands to control the application and trigger actions&lt;br /&gt;
* Assigns keyboard short-cuts to commands&lt;br /&gt;
* Connects to Message for fail or success messages about executed actions&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Menu ===&lt;br /&gt;
&lt;br /&gt;
A menu is a list of options or commands presented to the user of OS.bee. A menu appears as a tree structure if the popup button besides the user-image is pressed. It is the user-specific point of entry into the OS.bee system. The user menu contains only those items that are needed to perform daily tasks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Combines Perspectives, BPM start events, embedded dialogs and tables, configuration settings and other informative screens to a tree-organized menu&lt;br /&gt;
* Pops up anytime it is needed, and consumes no space on the screen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Message ===&lt;br /&gt;
&lt;br /&gt;
Messages can be defined to improve the user experience as guidance through complex user interactions with the system. For security and monitoring reasons they can be logged.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Defines messages to notify a user about events and usage violations&lt;br /&gt;
* Can be tracked by log entries&lt;br /&gt;
* Placeholders for parametrizing messages&lt;br /&gt;
* Can have a severity&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Security ==&lt;br /&gt;
&lt;br /&gt;
Security's mission is to protect the companies and their assets (know-how, company data, personal and customer data and personal data, etc.) from hackers, crackers and robbers, and economic damage caused by breaches of confidentiality, manipulation, hardware failure and availability prevent the systems.&lt;br /&gt;
&lt;br /&gt;
=== Authorization ===&lt;br /&gt;
&lt;br /&gt;
Authorization is a security mechanism to determine access levels and user privileges related to system resources including files, services, data and application features. This is the process of granting or denying access to a resource which allows the user access to various resources based on the user's identity.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Role-based authorization system&lt;br /&gt;
* Grant access to entities, beans and DTO&lt;br /&gt;
* Grant access to CRUD operations (create, read, update, delete)&lt;br /&gt;
* Grant access to modification of relationships (link, unlink references)&lt;br /&gt;
* Vetoes per attribute for visibility, editability and enabling&lt;br /&gt;
* Grant access to start a process&lt;br /&gt;
* Grant access working on a user task&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Organization ===&lt;br /&gt;
&lt;br /&gt;
An organization is an entity comprising multiple people, such as an institution or an association that has a collective goal and is linked to an external environment. Its design specifies how goals are subdivided and reflected in subdivisions of the organization. An organization can be visualized in an organigram. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Hierarchies of positions, multi-positions, and sub-organizations&lt;br /&gt;
* Maps roles to positions&lt;br /&gt;
* Definition of levels of collaboration if sharing the same roles&lt;br /&gt;
* Derives an organigram of each hierarchy to be rendered at runtime&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Services =&lt;br /&gt;
&lt;br /&gt;
== Authentication ==&lt;br /&gt;
&lt;br /&gt;
Authentication is a process that ensures and confirms a user’s identity. To do so, a user needs to provide some sort of proof of identity that the system understands and trust. There are multiple ways (realms) to do this: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Security specific data access object, software component that talks to a backend data source.&lt;br /&gt;
* If you have usernames and password in LDAP, then you would have an LDAP Realm that would communicate with LDAP. &lt;br /&gt;
* Active Directory&lt;br /&gt;
* Kerberos&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
More features:* Remember-me&lt;br /&gt;
* Forgot password&lt;br /&gt;
* Protection against brute-force attacks&lt;br /&gt;
* MD5 salted and encrypted passwords&lt;br /&gt;
* Protection against debugging&lt;br /&gt;
* First commissioning support&lt;br /&gt;
* Session management&lt;br /&gt;
* Simple Single Sign-On (SSO)&lt;br /&gt;
* AES 128 encrypted cookie support&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Persistence ==&lt;br /&gt;
&lt;br /&gt;
Persistence service enabling small data-sources as well as large-scale installations:* XA data-source support for distributed transactions&lt;br /&gt;
* Built in global transaction manager&lt;br /&gt;
* JNDI Service&lt;br /&gt;
* Built in support for local databases&lt;br /&gt;
* Supports database providers from Application Server implementations like WebSphere or WebLogic Server&lt;br /&gt;
* Provides JDBC and catalog data for Mondrian&lt;br /&gt;
* Supports all compatible databases to EclipseLink like:&lt;br /&gt;
** Oracle&lt;br /&gt;
** Oracle JDBC&lt;br /&gt;
** MySQL&lt;br /&gt;
** PostgreSQL&lt;br /&gt;
** Derby&lt;br /&gt;
** DB2&lt;br /&gt;
** DB2 (mainframe)&lt;br /&gt;
** Microsoft SQL Server&lt;br /&gt;
** Sybase&lt;br /&gt;
** Informix&lt;br /&gt;
** SQL Anywhere&lt;br /&gt;
** HSQL&lt;br /&gt;
** SAP HANA&lt;br /&gt;
** H2&lt;br /&gt;
** Firebird&lt;br /&gt;
** Microsoft Access&lt;br /&gt;
** Attunity&lt;br /&gt;
** Cloudscape&lt;br /&gt;
** DBase&lt;br /&gt;
** PointBase&lt;br /&gt;
** TimesTen&lt;br /&gt;
** Symfoware&lt;br /&gt;
** MaxDB&lt;br /&gt;
&lt;br /&gt;
== Translation ==&lt;br /&gt;
&lt;br /&gt;
There is a centralized translation service in OS.bee. It collects all property files from models created by a DSL and supplies all internal translations that the Software Factory needs. The number of supported languages is unlimited; however the internal translations deployed for the moment are limited to English, French, and German. More languages can be ordered. In case a translation key occurs multiple times, the “best” translation for this key is automatically selected. The “best” translation is evaluated by the maximum Levinshtein distance from the translation key.&lt;br /&gt;
&lt;br /&gt;
== Metadata ==&lt;br /&gt;
&lt;br /&gt;
OS.bee holds all model-data at runtime so that all programs can reference them. Renderers that do not need code will interpret these model to do their work. So even in the Function-Library it is possible to take the current modeling into account.&lt;br /&gt;
&lt;br /&gt;
== Theme Resources and CSS ==&lt;br /&gt;
&lt;br /&gt;
As usual for web-frontend applications, cascaded style sheets describe the look and feel. Custom CSS can be loaded from outside, or any modification can be made once the appropriate bundle is downloaded. CSS is compiled from a SCCS template with a pre-processor. The advantage of using SCSS is that you can use variables and therefore create different looks with just a hand-full of variables. OS.bee comes with 3 different theme variants that can be selected in the user profile. Resources like images, html pages and icons are available per theme and thus adjustable to the used color scheme.&lt;/div&gt;</summary>
		<author><name>Riegel</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=OS.bee_Software_Factory_Unique_Selling_Propositions&amp;diff=3714</id>
		<title>OS.bee Software Factory Unique Selling Propositions</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=OS.bee_Software_Factory_Unique_Selling_Propositions&amp;diff=3714"/>
				<updated>2019-01-29T07:53:29Z</updated>
		
		<summary type="html">&lt;p&gt;Riegel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= What is OS.bee about? =&lt;br /&gt;
&lt;br /&gt;
OS.bee is a low-code model-driven software-factory, using over 20 Domain Specific Languages (DSL) to generate large-scale business web-applications. Each DSL contains a grammar for a required application-layer. A DSL hides complexity from successors, thereby enabling parallel modelling of domain requirements by multiple designers as they don’t need to know the domain logic they build upon. A model created with a DSL creates executable code, structured data and configuration settings or is interpreted by a renderer during runtime. The language of each DSL uses a grammar that makes the created model easy to understand and forms a requirement specification on its layer. The overall hierarchy can be browsed through at any time and gives a good understanding of the whole application in nearly natural English language. A DSL can also be studied by its syntactical graph. The creation of a model is a guided process through the syntax graph where the designer benefits from content assistance, code completion, quick fix, syntax colorizing, outline, formatting and validation. Many DSLs define metadata to be used by subsequent DSL to increase the leverage of definitions at a basic level. All element names defined by a DSL are automatically extracted to localization files for translation to open foreign markets for the resulting application. The ratio between the generated lines of code versus the numbers of lines in a model is about 8-10. Development speed improves by a similar factor. Dependencies between models reveal inconsistencies immediately while modifying and prevent generating code until these are resolved. Therefore turnaround cycles are short, errors are easy to discover and prototypes materialize in a very short time. Some DSL generate against famous open-source frameworks like EclipseLink, Smooks, Mondrian, Vaadin or jBPM thus enabling non-developers to use complex frameworks without deeper knowledge of their API. OS.bee inherits the features of the embedded frameworks and makes them easy to exploit for specialists of a domain not necessarily being software developer.&lt;br /&gt;
&lt;br /&gt;
= Why using OS.bee? =&lt;br /&gt;
* You need a lot of unexpensive workstations for your employees.&lt;br /&gt;
* Work has to be done from everywhere, worldwide, in any language.&lt;br /&gt;
* Deployment of new versions shall be simple and be done at a single point to keep IT-costs at a minimum.&lt;br /&gt;
* Downtimes for updates or sandbox trials are undesired.&lt;br /&gt;
* You want to scale your software effortless as you do with your business in means of functionality and security.&lt;br /&gt;
* You want a hierachically consistent and validated application any time, no matter what was just modified.&lt;br /&gt;
* You dislike vendor lock-in.&lt;br /&gt;
* Investments in software should be long-term decisions.&lt;br /&gt;
* You know that software never is a stand-alone solution, instead it must deeply integrate with existing solutions, machines and protocols.&lt;br /&gt;
* The Internet of Things is not just a verbal formula to you, you ought to use it.&lt;br /&gt;
* You know best about your business and want to be enabled to implement that knowledge by yourself in your software.&lt;br /&gt;
* You want that continuous improvement for applications shall be unexpensive.&lt;br /&gt;
* Open Source software is an advantage to you, not a risk.&lt;br /&gt;
* The software architecture should fulfill all state of the art design patterns and conform to object oriented design principles in order to be open to changes.&lt;br /&gt;
* It should be possible to hire software specialists all over the world needing a minimum of training on your software if it becomes necessary.&lt;br /&gt;
* Fast solutions to your business problems is your biggest concern.&lt;br /&gt;
* The software you use shall be fault tolerant and self-controlling.&lt;br /&gt;
* The business processes implemented in your software shall use standardized notations and be automatic, cooperative, save and easy to learn and modify.&lt;br /&gt;
* You know that enforcing business rules in your company is a success factor.&lt;br /&gt;
* On the other hand, your employees must feel comfortable with the software they use.&lt;br /&gt;
* It is quite clear to you that mature capabilities in all departments of your company can only be achieved through measurement and analysis and agile change management for business processs.&lt;br /&gt;
* If you need support, you can get it anytime. 24/7 by experts, from a forum, by examples and videos.&lt;br /&gt;
&lt;br /&gt;
= DSL Modeling =&lt;br /&gt;
&lt;br /&gt;
== Persistence ==&lt;br /&gt;
&lt;br /&gt;
Persistence refers to object and process characteristics that continue to exist even after the process that created it ceases or the machine it is running on is powered off. When an object or state is created and needs to be persistent, it is saved in a non-volatile storage location, like a hard drive, versus a temporary file or volatile random access memory.&lt;br /&gt;
&lt;br /&gt;
=== Data-type ===&lt;br /&gt;
&lt;br /&gt;
A data type is a classification that specifies which type of value a variable has and what type of mathematical, relational or logical operations can be applied to it without causing an error. Data types also hold metadata for higher-level DSLs so they can apply additional functionality to a field using this data type.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Primitive Types (int, double, etc.)&lt;br /&gt;
* Object Types (String, Date, etc.)&lt;br /&gt;
* Blob&lt;br /&gt;
** Store and retrieve any document or image type in binary form&lt;br /&gt;
* Auto-sizing Images&lt;br /&gt;
** Additionally stores images of definable size to experience better performance while rendering&lt;br /&gt;
* Formatted types&lt;br /&gt;
** Dates and times in any localized form&lt;br /&gt;
** Dates and times in any format (time only, date only, short and long forms, custom pattern, etc.)&lt;br /&gt;
** Currencies in any localized form&lt;br /&gt;
* Validated types with adjustable severity message&lt;br /&gt;
** Date in past/future&lt;br /&gt;
** Not null&lt;br /&gt;
** Not duplicate&lt;br /&gt;
** Range values&lt;br /&gt;
** Min/max length&lt;br /&gt;
* Slider types&lt;br /&gt;
** Min/max values&lt;br /&gt;
* Masked types&lt;br /&gt;
** Number, Hexadecimal, Capitalized&lt;br /&gt;
** Input pattern (e.g. Phone Numbers (###) ###-####)&lt;br /&gt;
** Password&lt;br /&gt;
* Suggestion types&lt;br /&gt;
** While typing some characters, a sorted list of suggestions pops up for selection&lt;br /&gt;
* Programmable Converters&lt;br /&gt;
** Text-to-Image&lt;br /&gt;
** Number-to-Text/Image&lt;br /&gt;
** Value-to-CSS Style&lt;br /&gt;
** Units of measurement&lt;br /&gt;
* Rich text editor using HTML markups&lt;br /&gt;
* Text area &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Entity ===&lt;br /&gt;
&lt;br /&gt;
An entity (-type) is a model of metadata for a single unique object in the real world. For example a person, organization, object type, or concept about which information is stored. Together with its attributes (or properties) it describes information that is being mastered. An entity typically corresponds to one or several related tables in database. An attribute is a characteristic or trait of an entity that describes the entity, for example, the Person entity type has the Date of Birth attribute.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Simple Entity&lt;br /&gt;
* Mapped super-classes&lt;br /&gt;
** Complement attributes in every entity using this&lt;br /&gt;
* Inheritance&lt;br /&gt;
** Specialized classes for special purpose&lt;br /&gt;
* References and their opposites&lt;br /&gt;
* References with constraints&lt;br /&gt;
* Embeddable beans&lt;br /&gt;
* Number generators UUID or ID&lt;br /&gt;
* Separated persistence-units capable of using multiple databases simultaneously&lt;br /&gt;
* All multiplicities (0..1, 0..n,1..1,1..n,*)&lt;br /&gt;
* Indexes unique and non-unique&lt;br /&gt;
* Validated uniqueness&lt;br /&gt;
* Domain-key annotation for lookups&lt;br /&gt;
* Methods for calculated attributes&lt;br /&gt;
* Lifecycle controlled method invoking (by PostLoad, PrePersist, etc.)&lt;br /&gt;
* Affected changes listeners&lt;br /&gt;
* Localizable Enumerations with images&lt;br /&gt;
* Creation and last modification information&lt;br /&gt;
* Transient data&lt;br /&gt;
* Synthetic attributes built by lifecycle methods either transient or persistent&lt;br /&gt;
* Historicized data&lt;br /&gt;
* Temporal data&lt;br /&gt;
* Versioned data&lt;br /&gt;
* Definable Runtime data filter&lt;br /&gt;
* Programmable Validators&lt;br /&gt;
* Nested Filter attributions over multiple references&lt;br /&gt;
* Abstraction of database vendor specific implementations&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Data transfer object (DTO) ===&lt;br /&gt;
&lt;br /&gt;
A DTO is an object that carries data between processes. DTOs are simple objects that do not contain any business logic but may contain serialization and deserialization mechanisms for transferring data.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Independent nested data container&lt;br /&gt;
* Automatically generated for entities&lt;br /&gt;
* Automatically mapped by entity data&lt;br /&gt;
* Editable sub- or supersets for entities&lt;br /&gt;
* Transient data container&lt;br /&gt;
* Nested objects automatically synchronized&lt;br /&gt;
* Nested properties access through dot expressions&lt;br /&gt;
* Used for services, processes, functions and renderers&lt;br /&gt;
* Dirty state aware&lt;br /&gt;
* Access restrictions on DTO and property granularity controlled by security layer&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== DTO Service ===&lt;br /&gt;
&lt;br /&gt;
A DTO service abstracts and encapsulates all access to the data source. It manages the connection with the data source to obtain and store data and implements the access mechanism required to work with the data source. The data source could be a persistent store like an RDBMS, or a business service accessed via REST or SOAP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Data storage and retrieval suitable for DTO&lt;br /&gt;
* Nested Transactions and Lock-modes&lt;br /&gt;
* Global transactions&lt;br /&gt;
* Object Oriented Query engine&lt;br /&gt;
* Low level Java Persistence Query Language method declarations (e.g. getTotal(), getAverage(), …)&lt;br /&gt;
* Injectable and declarative service&lt;br /&gt;
* Used for services, processes, functions and renderers&lt;br /&gt;
* Session scoped Entity Manager&lt;br /&gt;
* Thread safe persistence-unit bound Entity Manager Factory&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Data-Interchange ===&lt;br /&gt;
&lt;br /&gt;
Data Interchange is the endpoint-to-endpoint exchange of business documents in a standard electronic format between business partners or computer systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Smooks and FreeMarker implementation&lt;br /&gt;
* Nested entity import- and export-paths&lt;br /&gt;
* Localized formatters on data&lt;br /&gt;
* Supports encoding&lt;br /&gt;
* XML and CSV formats&lt;br /&gt;
* All EDI messages&lt;br /&gt;
* Automatically set export- and import markers for database&lt;br /&gt;
* Filtered exports&lt;br /&gt;
* Bulk insert/update&lt;br /&gt;
* Progress bar&lt;br /&gt;
* Generated import and export dashboard&lt;br /&gt;
* Generated lookup queries to embed relational data&lt;br /&gt;
* Merge or persist external data&lt;br /&gt;
* Import images of different mime-types into blobs via filename pattern&lt;br /&gt;
* Usage of expressions&lt;br /&gt;
* Free attribute mappings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Signal ===&lt;br /&gt;
&lt;br /&gt;
Signal processes events coming from file-systems. If a file that matches a given filename pattern is created, modified or deleted then an event is received and the modelled actions will be called. Signal also emits events for recurring things like a certain weekday and time is reached and executes the modelled actions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* File watcher for all file activities working on all operating systems&lt;br /&gt;
* Free filename pattern to watch for&lt;br /&gt;
&lt;br /&gt;
* Trigger Data-Interchange&lt;br /&gt;
* Definable export or import job-chain&lt;br /&gt;
* Synchronously or asynchronously execution (depending on import relationship) &lt;br /&gt;
* Quartz implementation for scheduled Data-Interchange export-jobs&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Entity-Mock ===&lt;br /&gt;
&lt;br /&gt;
Mock objects are simulated objects that mimic the behavior of real objects in controlled ways. A programmer typically creates a mock object to test the behavior of some other object, in much the same way that a car designer uses a crash test dummy to simulate the dynamic behavior of a human in vehicle impacts.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Generates fake data looking realistic&lt;br /&gt;
&lt;br /&gt;
* Mapping of roles to positions and multi-positions&lt;br /&gt;
&lt;br /&gt;
* Rule-based data composition (e.g. email address)&lt;br /&gt;
* Rule-based attribute generators for every data-type from data composition, or &lt;br /&gt;
** Randomly&lt;br /&gt;
** Ranges&lt;br /&gt;
** Picks from a given list&lt;br /&gt;
** Dates in the past with offset and limit (for birthdays)&lt;br /&gt;
** Dates in the future with offset and limit&lt;br /&gt;
* Composes objects from rule-based attribute generators (e.g. a person, a company, etc.)&lt;br /&gt;
* Composes object-trees from composed objects&lt;br /&gt;
* Creates relationships between objects using a given probability&lt;br /&gt;
* Creates mass data (e.g. sales data)&lt;br /&gt;
* Imports fixed data via Data-Interchange and embeds it&lt;br /&gt;
* Used mainly for quick-setup applications using a H2 database&lt;br /&gt;
* Exposes mock data services to be executed before any login-attempt&lt;br /&gt;
* Persists into all supported database products&lt;br /&gt;
* Can be executed at every server-start or once&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Business intelligence ==&lt;br /&gt;
&lt;br /&gt;
Business Intelligence (BI) refers to technologies, applications and practices for the collection, integration, analysis, and presentation of business information. The purpose of Business Intelligence is to support better business decision making. Essentially, Business Intelligence systems are data-driven Decision Support Systems (DSS). Business Intelligence is sometimes used interchangeably with briefing books, report and query tools and executive information systems.&lt;br /&gt;
&lt;br /&gt;
=== Cube ===&lt;br /&gt;
&lt;br /&gt;
A cube is a method of storing data in a multidimensional form, generally for reporting purposes. In cubes, data (measures) are categorized by dimensions. Cubes are pre-summarized across dimensions to drastically improve query time over relational databases. The query language used to interact and perform tasks with cubes is multidimensional expressions (MDX).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Mondrian OLAP for MDX queries implementation&lt;br /&gt;
* Cubes, dimensions, hierarchies, levels, members, and measures&lt;br /&gt;
* Defines a multi-dimensional database&lt;br /&gt;
* Contains a logical model, and a mapping of this model onto the physical entity model &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== DataMart ===&lt;br /&gt;
&lt;br /&gt;
A data mart is a subject-oriented archive that stores data and uses the retrieved set of information to assist and support the requirements involved within a particular business function or department. Data marts improve end-user response time by allowing users to have access to the specific type of data they need to view most often by providing the data in a way that supports the collective view of a group of users.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Common layer for data-warehouse queries&lt;br /&gt;
* Simplification of any kind of query against all available data sources&lt;br /&gt;
* Tailored queries and aggregates for different interest-groups&lt;br /&gt;
* Definition of complex multidimensional expressions (MDX) with a simple grammar&lt;br /&gt;
* Sophisticated analytic functions easy to use&lt;br /&gt;
* Online analytical processing built in&lt;br /&gt;
* Access to runtime data of the Business Process management engine&lt;br /&gt;
* Multi-purpose results for processes, reports, score cards and charts&lt;br /&gt;
* Definable navigation trees (join-paths)&lt;br /&gt;
* Definable single- and multi-selection filters on any leaf of the query tree&lt;br /&gt;
* Access restrictions on entity and attribute granularity controlled by security layer&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Function-Library ===&lt;br /&gt;
&lt;br /&gt;
A function-library is a collection of non-volatile resources used by other DSLs. It is a collection of implementations of behavior, written in Xbase, which has a well-defined interface by which the behavior is invoked. Library code is organized in such a way that it can be used by multiple programs that have no connection to each other, in other words it is completely independent of the calling logic. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Xbase implementation&lt;br /&gt;
* UOMo implementation&lt;br /&gt;
* Creates operational objects and methods&lt;br /&gt;
* Grouped by application field&lt;br /&gt;
** Converter for model-presentation conversions&lt;br /&gt;
*** Value to image&lt;br /&gt;
*** Value to value&lt;br /&gt;
*** Value to style (background color, text color, font-style, etc.)&lt;br /&gt;
*** Value to unit of measurement based value&lt;br /&gt;
*** Between measurement systems and unit of measurement families&lt;br /&gt;
** State-Machine&lt;br /&gt;
*** Operations&lt;br /&gt;
*** Functions&lt;br /&gt;
*** Guards&lt;br /&gt;
*** Full access to state-machine controls&lt;br /&gt;
** Toolbar Action&lt;br /&gt;
*** Can execute validation (enable/disable operation)&lt;br /&gt;
*** Execute any operation&lt;br /&gt;
** Validation on DTO&lt;br /&gt;
** Business logic implementation for BPM&lt;br /&gt;
*** Functions callable in system tasks&lt;br /&gt;
*** Ratings for gateways&lt;br /&gt;
*** Tests for gateways&lt;br /&gt;
** Calculations e.g. for&lt;br /&gt;
*** Currencies&lt;br /&gt;
*** Lengths&lt;br /&gt;
*** Areas&lt;br /&gt;
** Posting operations&lt;br /&gt;
* Exposes injectable and declarative service&lt;br /&gt;
* Store and retrieve data from DTO&lt;br /&gt;
* Full access to all JVM objects&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== State-Machine ===&lt;br /&gt;
&lt;br /&gt;
A finite-state machine (FSM) is a mathematical model of computation. It is an abstract machine that can be in exactly one of a finite number of states at any given time. The FSM can change from one state to another in response to an event. The change from one state to another is called a transition. An FSM is defined by a list of its states, its initial state, and the conditions for each transition. These conditions are called guards as they guard the transition from unwanted invocation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Implementation of business behavior&lt;br /&gt;
* Defines states and their transitions&lt;br /&gt;
* Transitions are triggered by events&lt;br /&gt;
* Transitions are guarded by functions from Function-Library&lt;br /&gt;
* Actions to be executed before and after transitioning from Function-Library&lt;br /&gt;
* Has things to control&lt;br /&gt;
** Database objects (DTO)&lt;br /&gt;
** Database filters&lt;br /&gt;
** Visibility or enabling of&lt;br /&gt;
*** Buttons (UI)&lt;br /&gt;
*** Layouts (UI)&lt;br /&gt;
*** Other components (UI)&lt;br /&gt;
** Peripheral devices (interfaces JavaPOS)&lt;br /&gt;
*** Printers&lt;br /&gt;
*** Line displays&lt;br /&gt;
*** Cash drawers&lt;br /&gt;
*** Payment terminals&lt;br /&gt;
*** Signature pads&lt;br /&gt;
** Slave browsers (external displays, etc.)&lt;br /&gt;
* Receives events from&lt;br /&gt;
** Buttons clicked&lt;br /&gt;
** UI selections&lt;br /&gt;
** Peripherals (printer out of paper, etc.)&lt;br /&gt;
** Schedulers&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== BLiP (Business Logic implementation Platform) ===&lt;br /&gt;
&lt;br /&gt;
BLiP focuses on improving corporate performance by managing business processes (BPM), business rules and business logic (Function-Library). &amp;lt;span style=&amp;quot;background-color:#ffffff;color:#222222;&amp;quot;&amp;gt;&amp;amp;nbsp;It is a disciplined approach to identify, design, execute, document, measure, monitor, and control both automated and non-automated business processes to achieve consistent, targeted results aligned with an organization’s strategic goals. BPM involves the deliberate and collaborative definition, improvement, innovation, and management of end-to-end business processes that drive business results, create value, and enable an organization to meet its business objectives with more agility. BPM enables an enterprise to align its business processes to its business strategy, leading to effective overall company performance through improvements of specific work activities either within a specific department, across the enterprise, or between organizations.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Implements jBPM&lt;br /&gt;
* Integrates a BPMN editor at design-time&lt;br /&gt;
* Connects tasks of BPM to business logic of Function-Library&lt;br /&gt;
* Controls sequence-flow through business logic of Function-Library&lt;br /&gt;
* Stores and retrieves process save-points&lt;br /&gt;
* Logs all process activities of system and user&lt;br /&gt;
* Exposes BPM data and events to UI elements&lt;br /&gt;
* Stores and retrieves workload data using DTO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Presentation ==&lt;br /&gt;
&lt;br /&gt;
The presentation layer ensures that the communications that pass through it are in the appropriate form for the recipient application. It is responsible for the delivery and formatting of information to the application layer for further processing or display. It relieves the application layer of concern regarding syntactical differences in data representation within the end-user systems.&lt;br /&gt;
&lt;br /&gt;
=== Table ===&lt;br /&gt;
&lt;br /&gt;
A table is a data structure that organizes information into rows and columns. It can be used to both store and display data in a structured format.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Editable cells&lt;br /&gt;
* Scorecard elements&lt;br /&gt;
** Rule-based colorizing of cell background and textcolor&lt;br /&gt;
** Mixed in rule-based icons&lt;br /&gt;
** Rule-based styling of cells&lt;br /&gt;
** Rule-based tooltips&lt;br /&gt;
* Data from DataMart or DTO&lt;br /&gt;
* Pivot presentation&lt;br /&gt;
* Multidimensional presentation on nested tab-sheets&lt;br /&gt;
* Filtering, sorting, swapping and hiding of columns&lt;br /&gt;
* Stores swapping and hiding per user&lt;br /&gt;
* 3 different row numbering modes&lt;br /&gt;
* Row selection synchronizes other views in scope&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Chart ===&lt;br /&gt;
&lt;br /&gt;
A chart is a diagram, picture, or graph which is intended to make information easier to understand. It is a symbolic representation of information according to some visualization technique.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Multiple data series with selectable colorizing&lt;br /&gt;
* Series switchable from legend&lt;br /&gt;
* Bar, line, pie, donut, bubble and gauge presentation&lt;br /&gt;
* Animated, stacked, shaded and xy-swapped charts&lt;br /&gt;
* Zoom and trend-line function&lt;br /&gt;
* Tooltips for series and data points with absolute value&lt;br /&gt;
* Selectable positioning relative to cursor for tooltips&lt;br /&gt;
* Selectable legend placement&lt;br /&gt;
* Collapsible tree presentation on hierarchical data&lt;br /&gt;
* Date axes with customizable formatting&lt;br /&gt;
* Up to 9 individually scalable Y axes&lt;br /&gt;
* Rotated axis text&lt;br /&gt;
* Category rendering either linear, logarithmic, timeline or as pyramid&lt;br /&gt;
* Downloadable SVG image&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Report ===&lt;br /&gt;
&lt;br /&gt;
A document containing information organized in a graphic or tabular form, prepared on ad hoc, periodic, recurring, regular, or as required basis. Reports may refer to specific periods, events, occurrences, or subjects, and are presented in printed form.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Actuate Birt implementation&lt;br /&gt;
* Definition of reusable layout metadata&lt;br /&gt;
** All units of measurement for layouts&lt;br /&gt;
** Definition of fonts and colors&lt;br /&gt;
** Definition of formatters for&lt;br /&gt;
*** Currencies&lt;br /&gt;
*** Date and time&lt;br /&gt;
** Page sizes (A4, A5, etc.)&lt;br /&gt;
** Orientations (Landscape, portrait)&lt;br /&gt;
** Margins&lt;br /&gt;
** Paddings&lt;br /&gt;
** Alignments&lt;br /&gt;
* Output as HTML or PDF&lt;br /&gt;
* Ability to reference multiple DataMarts for header, footer and details&lt;br /&gt;
* Rendering of blob-images&lt;br /&gt;
* External CSS usable&lt;br /&gt;
* Defines grids and cells&lt;br /&gt;
* Direct printing to preselected output medias per user or per location and report&lt;br /&gt;
* Rule-based visibility of cells&lt;br /&gt;
* Aggregates for grouping&lt;br /&gt;
* Rule-based page break&lt;br /&gt;
* Rule-based colorizing and styling&lt;br /&gt;
* URL-based or embedded images&lt;br /&gt;
* Auto-texts (page number etc.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Topology ===&lt;br /&gt;
&lt;br /&gt;
Topology is designed for representing simple geographical features, along with their non-spatial attributes. It includes geo-json points (addresses and locations), line strings (streets, highways and boundaries), polygons (countries, provinces, tracts of land), and multi-part collections of these types.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* D3 implementation&lt;br /&gt;
* Render predefined maps of U.S.A., Germany, Spain… the World&lt;br /&gt;
* Select states, countries, regions or cities to synchronize other views in scope&lt;br /&gt;
* Render geo-json data from blobs to show boundaries of plots of land, buildings or floor plans&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== UI ===&lt;br /&gt;
&lt;br /&gt;
The user interface (UI) is the space where interactions between humans and OS.bee occur. The goal of this interaction is to allow effective operation and control of the machine from the human end, whilst the machine simultaneously feeds back information that aids the operators' decision-making process.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Models interactive views&lt;br /&gt;
* Connects to data-sources of any kind (DTO, Bean, JVM object, etc.)&lt;br /&gt;
* Nests different kinds of layouts to a complex surface (horizontal, vertical, form, grid)&lt;br /&gt;
* Adds components to layouts (buttons, text-fields, tables, images, etc.)&lt;br /&gt;
* Binds components to properties of data-sources&lt;br /&gt;
* Rule-based visibility processor&lt;br /&gt;
* Navigation widgets for small geometry mobile devices&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Dialog ===&lt;br /&gt;
&lt;br /&gt;
The dialog is a composite UI which is composed by either an automatically generated UI or a UI created with means of the UI DSL and actions that are available through a toolbar. It also can be combined with an instance of State-Machine DSL if a sophisticated control over the visibility of components and a definable usage-sequence is needed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Renders interactive views&lt;br /&gt;
* Either references a predefined UI model or a model inferred from a DTO &lt;br /&gt;
* Links the view to a toolbar&lt;br /&gt;
* Renders different modes&lt;br /&gt;
** Normal, to be used inside perspectives&lt;br /&gt;
** Embedded, to be used inside menues&lt;br /&gt;
** Stateful, inside perspectives, and controlled by a state-machine&lt;br /&gt;
** Mobile, to be used on small geometry mobile devices with navigation widgets&lt;br /&gt;
* Renders in 1 to N columns of components&lt;br /&gt;
* Groups components by using entity metadata&lt;br /&gt;
* Renders owning relationships as combo-boxes&lt;br /&gt;
* Renders member relationships as tables on tab-sheets&lt;br /&gt;
* Implements blob up- and downloading&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Perspective ===&lt;br /&gt;
&lt;br /&gt;
A perspective is a visual container for a set of views (parts). These parts exist wholly within the perspective and are not shared. A perspective is also like a page within a book. It exists within a window along with any number of other perspectives and, like a page within a book, only one perspective is visible at any time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Based on the Eclipse 4 application model&lt;br /&gt;
* Presents a 360° view on the task to the user&lt;br /&gt;
* Divides the usable screen area in resizable containers&lt;br /&gt;
* Nests windows, perspective-stacks, perspectives, containers, part-stacks and parts containing views, and toolbars&lt;br /&gt;
* Stores and retrieves resized areas for each user&lt;br /&gt;
* Supports drag and drop&lt;br /&gt;
* Event dispatching system to synchronize data, actions, focus and more between views&lt;br /&gt;
* References all types of views (dialogs, tables, charts, reports …) to set up a dashboard&lt;br /&gt;
* Modifiable layout at runtime using the designer mode for permitted users&lt;br /&gt;
* Connects to user tasks of BPM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Action ===&lt;br /&gt;
&lt;br /&gt;
A toolbar is a set of icons or buttons that are part of a software program's interface or an open window. A toolbar item is an object type that associates a command with a toolbar. This association places an icon on the toolbar in a specific location relative to the other toolbar icons on that toolbar. A command is linked to a specific action and can have a keyboard shortcut specification.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Links action-buttons &lt;br /&gt;
** To business logic of Function-Library to be executed&lt;br /&gt;
*** Synchronously&lt;br /&gt;
*** Asynchronously as background process&lt;br /&gt;
** To Data-Interchange import- or export tasks&lt;br /&gt;
** To BPM start events&lt;br /&gt;
** To actions to trigger&lt;br /&gt;
*** Save, delete, download, print etc.&lt;br /&gt;
*** Advance focus to next or previous part&lt;br /&gt;
* Links action-buttons to business logic of Function-Library to be &lt;br /&gt;
** Enabled&lt;br /&gt;
** Disabled depending on data context&lt;br /&gt;
* Defines commands to control the application and trigger actions&lt;br /&gt;
* Assigns keyboard short-cuts to commands&lt;br /&gt;
* Connects to Message for fail or success messages about executed actions&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Menu ===&lt;br /&gt;
&lt;br /&gt;
A menu is a list of options or commands presented to the user of OS.bee. A menu appears as a tree structure if the popup button besides the user-image is pressed. It is the user-specific point of entry into the OS.bee system. The user menu contains only those items that are needed to perform daily tasks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Combines Perspectives, BPM start events, embedded dialogs and tables, configuration settings and other informative screens to a tree-organized menu&lt;br /&gt;
* Pops up anytime it is needed, and consumes no space on the screen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Message ===&lt;br /&gt;
&lt;br /&gt;
Messages can be defined to improve the user experience as guidance through complex user interactions with the system. For security and monitoring reasons they can be logged.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Defines messages to notify a user about events and usage violations&lt;br /&gt;
* Can be tracked by log entries&lt;br /&gt;
* Placeholders for parametrizing messages&lt;br /&gt;
* Can have a severity&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Security ==&lt;br /&gt;
&lt;br /&gt;
Security's mission is to protect the companies and their assets (know-how, company data, personal and customer data and personal data, etc.) from hackers, crackers and robbers, and economic damage caused by breaches of confidentiality, manipulation, hardware failure and availability prevent the systems.&lt;br /&gt;
&lt;br /&gt;
=== Authorization ===&lt;br /&gt;
&lt;br /&gt;
Authorization is a security mechanism to determine access levels and user privileges related to system resources including files, services, data and application features. This is the process of granting or denying access to a resource which allows the user access to various resources based on the user's identity.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Role-based authorization system&lt;br /&gt;
* Grant access to entities, beans and DTO&lt;br /&gt;
* Grant access to CRUD operations (create, read, update, delete)&lt;br /&gt;
* Grant access to modification of relationships (link, unlink references)&lt;br /&gt;
* Vetoes per attribute for visibility, editability and enabling&lt;br /&gt;
* Grant access to start a process&lt;br /&gt;
* Grant access working on a user task&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Organization ===&lt;br /&gt;
&lt;br /&gt;
An organization is an entity comprising multiple people, such as an institution or an association that has a collective goal and is linked to an external environment. Its design specifies how goals are subdivided and reflected in subdivisions of the organization. An organization can be visualized in an organigram. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Hierarchies of positions, multi-positions, and sub-organizations&lt;br /&gt;
* Maps roles to positions&lt;br /&gt;
* Definition of levels of collaboration if sharing the same roles&lt;br /&gt;
* Derives an organigram of each hierarchy to be rendered at runtime&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Services =&lt;br /&gt;
&lt;br /&gt;
== Authentication ==&lt;br /&gt;
&lt;br /&gt;
Authentication is a process that ensures and confirms a user’s identity. To do so, a user needs to provide some sort of proof of identity that the system understands and trust. There are multiple ways (realms) to do this: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Security specific data access object, software component that talks to a backend data source.&lt;br /&gt;
* If you have usernames and password in LDAP, then you would have an LDAP Realm that would communicate with LDAP. &lt;br /&gt;
* Active Directory&lt;br /&gt;
* Kerberos&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
More features:* Remember-me&lt;br /&gt;
* Forgot password&lt;br /&gt;
* Protection against brute-force attacks&lt;br /&gt;
* MD5 salted and encrypted passwords&lt;br /&gt;
* Protection against debugging&lt;br /&gt;
* First commissioning support&lt;br /&gt;
* Session management&lt;br /&gt;
* Simple Single Sign-On (SSO)&lt;br /&gt;
* AES 128 encrypted cookie support&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Persistence ==&lt;br /&gt;
&lt;br /&gt;
Persistence service enabling small data-sources as well as large-scale installations:* XA data-source support for distributed transactions&lt;br /&gt;
* Built in global transaction manager&lt;br /&gt;
* JNDI Service&lt;br /&gt;
* Built in support for local databases&lt;br /&gt;
* Supports database providers from Application Server implementations like WebSphere or WebLogic Server&lt;br /&gt;
* Provides JDBC and catalog data for Mondrian&lt;br /&gt;
* Supports all compatible databases to EclipseLink like:&lt;br /&gt;
** Oracle&lt;br /&gt;
** Oracle JDBC&lt;br /&gt;
** MySQL&lt;br /&gt;
** PostgreSQL&lt;br /&gt;
** Derby&lt;br /&gt;
** DB2&lt;br /&gt;
** DB2 (mainframe)&lt;br /&gt;
** Microsoft SQL Server&lt;br /&gt;
** Sybase&lt;br /&gt;
** Informix&lt;br /&gt;
** SQL Anywhere&lt;br /&gt;
** HSQL&lt;br /&gt;
** SAP HANA&lt;br /&gt;
** H2&lt;br /&gt;
** Firebird&lt;br /&gt;
** Microsoft Access&lt;br /&gt;
** Attunity&lt;br /&gt;
** Cloudscape&lt;br /&gt;
** DBase&lt;br /&gt;
** PointBase&lt;br /&gt;
** TimesTen&lt;br /&gt;
** Symfoware&lt;br /&gt;
** MaxDB&lt;br /&gt;
&lt;br /&gt;
== Translation ==&lt;br /&gt;
&lt;br /&gt;
There is a centralized translation service in OS.bee. It collects all property files from models created by a DSL and supplies all internal translations that the Software Factory needs. The number of supported languages is unlimited; however the internal translations deployed for the moment are limited to English, French, and German. More languages can be ordered. In case a translation key occurs multiple times, the “best” translation for this key is automatically selected. The “best” translation is evaluated by the maximum Levinshtein distance from the translation key.&lt;br /&gt;
&lt;br /&gt;
== Metadata ==&lt;br /&gt;
&lt;br /&gt;
OS.bee holds all model-data at runtime so that all programs can reference them. Renderers that do not need code will interpret these model to do their work. So even in the Function-Library it is possible to take the current modeling into account.&lt;br /&gt;
&lt;br /&gt;
== Theme Resources and CSS ==&lt;br /&gt;
&lt;br /&gt;
As usual for web-frontend applications, cascaded style sheets describe the look and feel. Custom CSS can be loaded from outside, or any modification can be made once the appropriate bundle is downloaded. CSS is compiled from a SCCS template with a pre-processor. The advantage of using SCSS is that you can use variables and therefore create different looks with just a hand-full of variables. OS.bee comes with 3 different theme variants that can be selected in the user profile. Resources like images, html pages and icons are available per theme and thus adjustable to the used color scheme.&lt;/div&gt;</summary>
		<author><name>Riegel</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=OS.bee_Software_Factory_Unique_Selling_Propositions&amp;diff=3713</id>
		<title>OS.bee Software Factory Unique Selling Propositions</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=OS.bee_Software_Factory_Unique_Selling_Propositions&amp;diff=3713"/>
				<updated>2019-01-28T12:24:34Z</updated>
		
		<summary type="html">&lt;p&gt;Riegel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Abstract =&lt;br /&gt;
&lt;br /&gt;
OS.bee is a low-code model-driven software-factory, using over 20 Domain Specific Languages (DSL) to generate large-scale business web-applications. Each DSL contains a grammar for a required application-layer. A DSL hides complexity from successors, thereby enabling parallel modelling of domain requirements by multiple designers as they don’t need to know the domain logic they build upon. A model created with a DSL creates executable code, structured data and configuration settings or is interpreted by a renderer during runtime. The language of each DSL uses a grammar that makes the created model easy to understand and forms a requirement specification on its layer. The overall hierarchy can be browsed through at any time and gives a good understanding of the whole application in nearly natural English language. A DSL can also be studied by its syntactical graph. The creation of a model is a guided process through the syntax graph where the designer benefits from content assistance, code completion, quick fix, syntax colorizing, outline, formatting and validation. Many DSLs define metadata to be used by subsequent DSL to increase the leverage of definitions at a basic level. All element names defined by a DSL are automatically extracted to localization files for translation to open foreign markets for the resulting application. The ratio between the generated lines of code versus the numbers of lines in a model is about 8-10. Development speed improves by a similar factor. Dependencies between models reveal inconsistencies immediately while modifying and prevent generating code until these are resolved. Therefore turnaround cycles are short, errors are easy to discover and prototypes materialize in a very short time. Some DSL generate against famous open-source frameworks like EclipseLink, Smooks, Mondrian, Vaadin or jBPM thus enabling non-developers to use complex frameworks without deeper knowledge of their API. OS.bee inherits the features of the embedded frameworks and makes them easy to exploit for specialists of a domain not necessarily being software developer.&lt;br /&gt;
&lt;br /&gt;
= Why OS.bee? =&lt;br /&gt;
== If most of these points apply to you, you should chose OS.bee ==&lt;br /&gt;
* You need to have a lot of cheap workstations for your employees.&lt;br /&gt;
* Work has to be done from everywhere, worldwide, in any language.&lt;br /&gt;
* Deployment of new versions shall be simple and be done at a single point to keep IT-costs at a minimum.&lt;br /&gt;
* Downtimes for updates or sandbox trials are undesired.&lt;br /&gt;
* You want to scale your software effortless as you do with your business in means of functionality and security.&lt;br /&gt;
* The software architecture should fulfill all state of the art design patterns and conform to object oriented design principles.&lt;br /&gt;
* You want a hierachically consistent and validated software architecure any time, no matter what was modified.&lt;br /&gt;
* You dislike vendor lock-in.&lt;br /&gt;
* Investments in software should be long-term decisions.&lt;br /&gt;
* You know best about your business and want to implement that knowledge by yourself in your software.&lt;br /&gt;
* You want that continuous improvement for software shall be cheap.&lt;br /&gt;
* Open Source is an advantage to you, not a challenge.&lt;br /&gt;
* It should be possible to hire software specialists all over the world needing a minimum of training on your software if it becomes necessary.&lt;br /&gt;
* Fast solutions to your business problems is your biggest concern.&lt;br /&gt;
* The software you use shall be fault tolerant and self-controlling.&lt;br /&gt;
* The business processes implemented in your software shall use standardized notations and be automatic, cooperative, save and easy to learn and modify.&lt;br /&gt;
* You know that enforcing business rules in your company is a success factor.&lt;br /&gt;
* If you need support, you can get it anytime. 24/7 by experts, from a forum, by examples and videos.&lt;br /&gt;
&lt;br /&gt;
= DSL Modeling =&lt;br /&gt;
&lt;br /&gt;
== Persistence ==&lt;br /&gt;
&lt;br /&gt;
Persistence refers to object and process characteristics that continue to exist even after the process that created it ceases or the machine it is running on is powered off. When an object or state is created and needs to be persistent, it is saved in a non-volatile storage location, like a hard drive, versus a temporary file or volatile random access memory.&lt;br /&gt;
&lt;br /&gt;
=== Data-type ===&lt;br /&gt;
&lt;br /&gt;
A data type is a classification that specifies which type of value a variable has and what type of mathematical, relational or logical operations can be applied to it without causing an error. Data types also hold metadata for higher-level DSLs so they can apply additional functionality to a field using this data type.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Primitive Types (int, double, etc.)&lt;br /&gt;
* Object Types (String, Date, etc.)&lt;br /&gt;
* Blob&lt;br /&gt;
** Store and retrieve any document or image type in binary form&lt;br /&gt;
* Auto-sizing Images&lt;br /&gt;
** Additionally stores images of definable size to experience better performance while rendering&lt;br /&gt;
* Formatted types&lt;br /&gt;
** Dates and times in any localized form&lt;br /&gt;
** Dates and times in any format (time only, date only, short and long forms, custom pattern, etc.)&lt;br /&gt;
** Currencies in any localized form&lt;br /&gt;
* Validated types with adjustable severity message&lt;br /&gt;
** Date in past/future&lt;br /&gt;
** Not null&lt;br /&gt;
** Not duplicate&lt;br /&gt;
** Range values&lt;br /&gt;
** Min/max length&lt;br /&gt;
* Slider types&lt;br /&gt;
** Min/max values&lt;br /&gt;
* Masked types&lt;br /&gt;
** Number, Hexadecimal, Capitalized&lt;br /&gt;
** Input pattern (e.g. Phone Numbers (###) ###-####)&lt;br /&gt;
** Password&lt;br /&gt;
* Suggestion types&lt;br /&gt;
** While typing some characters, a sorted list of suggestions pops up for selection&lt;br /&gt;
* Programmable Converters&lt;br /&gt;
** Text-to-Image&lt;br /&gt;
** Number-to-Text/Image&lt;br /&gt;
** Value-to-CSS Style&lt;br /&gt;
** Units of measurement&lt;br /&gt;
* Rich text editor using HTML markups&lt;br /&gt;
* Text area &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Entity ===&lt;br /&gt;
&lt;br /&gt;
An entity (-type) is a model of metadata for a single unique object in the real world. For example a person, organization, object type, or concept about which information is stored. Together with its attributes (or properties) it describes information that is being mastered. An entity typically corresponds to one or several related tables in database. An attribute is a characteristic or trait of an entity that describes the entity, for example, the Person entity type has the Date of Birth attribute.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Simple Entity&lt;br /&gt;
* Mapped super-classes&lt;br /&gt;
** Complement attributes in every entity using this&lt;br /&gt;
* Inheritance&lt;br /&gt;
** Specialized classes for special purpose&lt;br /&gt;
* References and their opposites&lt;br /&gt;
* References with constraints&lt;br /&gt;
* Embeddable beans&lt;br /&gt;
* Number generators UUID or ID&lt;br /&gt;
* Separated persistence-units capable of using multiple databases simultaneously&lt;br /&gt;
* All multiplicities (0..1, 0..n,1..1,1..n,*)&lt;br /&gt;
* Indexes unique and non-unique&lt;br /&gt;
* Validated uniqueness&lt;br /&gt;
* Domain-key annotation for lookups&lt;br /&gt;
* Methods for calculated attributes&lt;br /&gt;
* Lifecycle controlled method invoking (by PostLoad, PrePersist, etc.)&lt;br /&gt;
* Affected changes listeners&lt;br /&gt;
* Localizable Enumerations with images&lt;br /&gt;
* Creation and last modification information&lt;br /&gt;
* Transient data&lt;br /&gt;
* Synthetic attributes built by lifecycle methods either transient or persistent&lt;br /&gt;
* Historicized data&lt;br /&gt;
* Temporal data&lt;br /&gt;
* Versioned data&lt;br /&gt;
* Definable Runtime data filter&lt;br /&gt;
* Programmable Validators&lt;br /&gt;
* Nested Filter attributions over multiple references&lt;br /&gt;
* Abstraction of database vendor specific implementations&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Data transfer object (DTO) ===&lt;br /&gt;
&lt;br /&gt;
A DTO is an object that carries data between processes. DTOs are simple objects that do not contain any business logic but may contain serialization and deserialization mechanisms for transferring data.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Independent nested data container&lt;br /&gt;
* Automatically generated for entities&lt;br /&gt;
* Automatically mapped by entity data&lt;br /&gt;
* Editable sub- or supersets for entities&lt;br /&gt;
* Transient data container&lt;br /&gt;
* Nested objects automatically synchronized&lt;br /&gt;
* Nested properties access through dot expressions&lt;br /&gt;
* Used for services, processes, functions and renderers&lt;br /&gt;
* Dirty state aware&lt;br /&gt;
* Access restrictions on DTO and property granularity controlled by security layer&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== DTO Service ===&lt;br /&gt;
&lt;br /&gt;
A DTO service abstracts and encapsulates all access to the data source. It manages the connection with the data source to obtain and store data and implements the access mechanism required to work with the data source. The data source could be a persistent store like an RDBMS, or a business service accessed via REST or SOAP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Data storage and retrieval suitable for DTO&lt;br /&gt;
* Nested Transactions and Lock-modes&lt;br /&gt;
* Global transactions&lt;br /&gt;
* Object Oriented Query engine&lt;br /&gt;
* Low level Java Persistence Query Language method declarations (e.g. getTotal(), getAverage(), …)&lt;br /&gt;
* Injectable and declarative service&lt;br /&gt;
* Used for services, processes, functions and renderers&lt;br /&gt;
* Session scoped Entity Manager&lt;br /&gt;
* Thread safe persistence-unit bound Entity Manager Factory&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Data-Interchange ===&lt;br /&gt;
&lt;br /&gt;
Data Interchange is the endpoint-to-endpoint exchange of business documents in a standard electronic format between business partners or computer systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Smooks and FreeMarker implementation&lt;br /&gt;
* Nested entity import- and export-paths&lt;br /&gt;
* Localized formatters on data&lt;br /&gt;
* Supports encoding&lt;br /&gt;
* XML and CSV formats&lt;br /&gt;
* All EDI messages&lt;br /&gt;
* Automatically set export- and import markers for database&lt;br /&gt;
* Filtered exports&lt;br /&gt;
* Bulk insert/update&lt;br /&gt;
* Progress bar&lt;br /&gt;
* Generated import and export dashboard&lt;br /&gt;
* Generated lookup queries to embed relational data&lt;br /&gt;
* Merge or persist external data&lt;br /&gt;
* Import images of different mime-types into blobs via filename pattern&lt;br /&gt;
* Usage of expressions&lt;br /&gt;
* Free attribute mappings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Signal ===&lt;br /&gt;
&lt;br /&gt;
Signal processes events coming from file-systems. If a file that matches a given filename pattern is created, modified or deleted then an event is received and the modelled actions will be called. Signal also emits events for recurring things like a certain weekday and time is reached and executes the modelled actions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* File watcher for all file activities working on all operating systems&lt;br /&gt;
* Free filename pattern to watch for&lt;br /&gt;
&lt;br /&gt;
* Trigger Data-Interchange&lt;br /&gt;
* Definable export or import job-chain&lt;br /&gt;
* Synchronously or asynchronously execution (depending on import relationship) &lt;br /&gt;
* Quartz implementation for scheduled Data-Interchange export-jobs&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Entity-Mock ===&lt;br /&gt;
&lt;br /&gt;
Mock objects are simulated objects that mimic the behavior of real objects in controlled ways. A programmer typically creates a mock object to test the behavior of some other object, in much the same way that a car designer uses a crash test dummy to simulate the dynamic behavior of a human in vehicle impacts.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Generates fake data looking realistic&lt;br /&gt;
&lt;br /&gt;
* Mapping of roles to positions and multi-positions&lt;br /&gt;
&lt;br /&gt;
* Rule-based data composition (e.g. email address)&lt;br /&gt;
* Rule-based attribute generators for every data-type from data composition, or &lt;br /&gt;
** Randomly&lt;br /&gt;
** Ranges&lt;br /&gt;
** Picks from a given list&lt;br /&gt;
** Dates in the past with offset and limit (for birthdays)&lt;br /&gt;
** Dates in the future with offset and limit&lt;br /&gt;
* Composes objects from rule-based attribute generators (e.g. a person, a company, etc.)&lt;br /&gt;
* Composes object-trees from composed objects&lt;br /&gt;
* Creates relationships between objects using a given probability&lt;br /&gt;
* Creates mass data (e.g. sales data)&lt;br /&gt;
* Imports fixed data via Data-Interchange and embeds it&lt;br /&gt;
* Used mainly for quick-setup applications using a H2 database&lt;br /&gt;
* Exposes mock data services to be executed before any login-attempt&lt;br /&gt;
* Persists into all supported database products&lt;br /&gt;
* Can be executed at every server-start or once&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Business intelligence ==&lt;br /&gt;
&lt;br /&gt;
Business Intelligence (BI) refers to technologies, applications and practices for the collection, integration, analysis, and presentation of business information. The purpose of Business Intelligence is to support better business decision making. Essentially, Business Intelligence systems are data-driven Decision Support Systems (DSS). Business Intelligence is sometimes used interchangeably with briefing books, report and query tools and executive information systems.&lt;br /&gt;
&lt;br /&gt;
=== Cube ===&lt;br /&gt;
&lt;br /&gt;
A cube is a method of storing data in a multidimensional form, generally for reporting purposes. In cubes, data (measures) are categorized by dimensions. Cubes are pre-summarized across dimensions to drastically improve query time over relational databases. The query language used to interact and perform tasks with cubes is multidimensional expressions (MDX).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Mondrian OLAP for MDX queries implementation&lt;br /&gt;
* Cubes, dimensions, hierarchies, levels, members, and measures&lt;br /&gt;
* Defines a multi-dimensional database&lt;br /&gt;
* Contains a logical model, and a mapping of this model onto the physical entity model &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== DataMart ===&lt;br /&gt;
&lt;br /&gt;
A data mart is a subject-oriented archive that stores data and uses the retrieved set of information to assist and support the requirements involved within a particular business function or department. Data marts improve end-user response time by allowing users to have access to the specific type of data they need to view most often by providing the data in a way that supports the collective view of a group of users.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Common layer for data-warehouse queries&lt;br /&gt;
* Simplification of any kind of query against all available data sources&lt;br /&gt;
* Tailored queries and aggregates for different interest-groups&lt;br /&gt;
* Definition of complex multidimensional expressions (MDX) with a simple grammar&lt;br /&gt;
* Sophisticated analytic functions easy to use&lt;br /&gt;
* Online analytical processing built in&lt;br /&gt;
* Access to runtime data of the Business Process management engine&lt;br /&gt;
* Multi-purpose results for processes, reports, score cards and charts&lt;br /&gt;
* Definable navigation trees (join-paths)&lt;br /&gt;
* Definable single- and multi-selection filters on any leaf of the query tree&lt;br /&gt;
* Access restrictions on entity and attribute granularity controlled by security layer&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Function-Library ===&lt;br /&gt;
&lt;br /&gt;
A function-library is a collection of non-volatile resources used by other DSLs. It is a collection of implementations of behavior, written in Xbase, which has a well-defined interface by which the behavior is invoked. Library code is organized in such a way that it can be used by multiple programs that have no connection to each other, in other words it is completely independent of the calling logic. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Xbase implementation&lt;br /&gt;
* UOMo implementation&lt;br /&gt;
* Creates operational objects and methods&lt;br /&gt;
* Grouped by application field&lt;br /&gt;
** Converter for model-presentation conversions&lt;br /&gt;
*** Value to image&lt;br /&gt;
*** Value to value&lt;br /&gt;
*** Value to style (background color, text color, font-style, etc.)&lt;br /&gt;
*** Value to unit of measurement based value&lt;br /&gt;
*** Between measurement systems and unit of measurement families&lt;br /&gt;
** State-Machine&lt;br /&gt;
*** Operations&lt;br /&gt;
*** Functions&lt;br /&gt;
*** Guards&lt;br /&gt;
*** Full access to state-machine controls&lt;br /&gt;
** Toolbar Action&lt;br /&gt;
*** Can execute validation (enable/disable operation)&lt;br /&gt;
*** Execute any operation&lt;br /&gt;
** Validation on DTO&lt;br /&gt;
** Business logic implementation for BPM&lt;br /&gt;
*** Functions callable in system tasks&lt;br /&gt;
*** Ratings for gateways&lt;br /&gt;
*** Tests for gateways&lt;br /&gt;
** Calculations e.g. for&lt;br /&gt;
*** Currencies&lt;br /&gt;
*** Lengths&lt;br /&gt;
*** Areas&lt;br /&gt;
** Posting operations&lt;br /&gt;
* Exposes injectable and declarative service&lt;br /&gt;
* Store and retrieve data from DTO&lt;br /&gt;
* Full access to all JVM objects&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== State-Machine ===&lt;br /&gt;
&lt;br /&gt;
A finite-state machine (FSM) is a mathematical model of computation. It is an abstract machine that can be in exactly one of a finite number of states at any given time. The FSM can change from one state to another in response to an event. The change from one state to another is called a transition. An FSM is defined by a list of its states, its initial state, and the conditions for each transition. These conditions are called guards as they guard the transition from unwanted invocation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Implementation of business behavior&lt;br /&gt;
* Defines states and their transitions&lt;br /&gt;
* Transitions are triggered by events&lt;br /&gt;
* Transitions are guarded by functions from Function-Library&lt;br /&gt;
* Actions to be executed before and after transitioning from Function-Library&lt;br /&gt;
* Has things to control&lt;br /&gt;
** Database objects (DTO)&lt;br /&gt;
** Database filters&lt;br /&gt;
** Visibility or enabling of&lt;br /&gt;
*** Buttons (UI)&lt;br /&gt;
*** Layouts (UI)&lt;br /&gt;
*** Other components (UI)&lt;br /&gt;
** Peripheral devices (interfaces JavaPOS)&lt;br /&gt;
*** Printers&lt;br /&gt;
*** Line displays&lt;br /&gt;
*** Cash drawers&lt;br /&gt;
*** Payment terminals&lt;br /&gt;
*** Signature pads&lt;br /&gt;
** Slave browsers (external displays, etc.)&lt;br /&gt;
* Receives events from&lt;br /&gt;
** Buttons clicked&lt;br /&gt;
** UI selections&lt;br /&gt;
** Peripherals (printer out of paper, etc.)&lt;br /&gt;
** Schedulers&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== BLiP (Business Logic implementation Platform) ===&lt;br /&gt;
&lt;br /&gt;
BLiP focuses on improving corporate performance by managing business processes (BPM), business rules and business logic (Function-Library). &amp;lt;span style=&amp;quot;background-color:#ffffff;color:#222222;&amp;quot;&amp;gt;&amp;amp;nbsp;It is a disciplined approach to identify, design, execute, document, measure, monitor, and control both automated and non-automated business processes to achieve consistent, targeted results aligned with an organization’s strategic goals. BPM involves the deliberate and collaborative definition, improvement, innovation, and management of end-to-end business processes that drive business results, create value, and enable an organization to meet its business objectives with more agility. BPM enables an enterprise to align its business processes to its business strategy, leading to effective overall company performance through improvements of specific work activities either within a specific department, across the enterprise, or between organizations.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Implements jBPM&lt;br /&gt;
* Integrates a BPMN editor at design-time&lt;br /&gt;
* Connects tasks of BPM to business logic of Function-Library&lt;br /&gt;
* Controls sequence-flow through business logic of Function-Library&lt;br /&gt;
* Stores and retrieves process save-points&lt;br /&gt;
* Logs all process activities of system and user&lt;br /&gt;
* Exposes BPM data and events to UI elements&lt;br /&gt;
* Stores and retrieves workload data using DTO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Presentation ==&lt;br /&gt;
&lt;br /&gt;
The presentation layer ensures that the communications that pass through it are in the appropriate form for the recipient application. It is responsible for the delivery and formatting of information to the application layer for further processing or display. It relieves the application layer of concern regarding syntactical differences in data representation within the end-user systems.&lt;br /&gt;
&lt;br /&gt;
=== Table ===&lt;br /&gt;
&lt;br /&gt;
A table is a data structure that organizes information into rows and columns. It can be used to both store and display data in a structured format.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Editable cells&lt;br /&gt;
* Scorecard elements&lt;br /&gt;
** Rule-based colorizing of cell background and textcolor&lt;br /&gt;
** Mixed in rule-based icons&lt;br /&gt;
** Rule-based styling of cells&lt;br /&gt;
** Rule-based tooltips&lt;br /&gt;
* Data from DataMart or DTO&lt;br /&gt;
* Pivot presentation&lt;br /&gt;
* Multidimensional presentation on nested tab-sheets&lt;br /&gt;
* Filtering, sorting, swapping and hiding of columns&lt;br /&gt;
* Stores swapping and hiding per user&lt;br /&gt;
* 3 different row numbering modes&lt;br /&gt;
* Row selection synchronizes other views in scope&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Chart ===&lt;br /&gt;
&lt;br /&gt;
A chart is a diagram, picture, or graph which is intended to make information easier to understand. It is a symbolic representation of information according to some visualization technique.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Multiple data series with selectable colorizing&lt;br /&gt;
* Series switchable from legend&lt;br /&gt;
* Bar, line, pie, donut, bubble and gauge presentation&lt;br /&gt;
* Animated, stacked, shaded and xy-swapped charts&lt;br /&gt;
* Zoom and trend-line function&lt;br /&gt;
* Tooltips for series and data points with absolute value&lt;br /&gt;
* Selectable positioning relative to cursor for tooltips&lt;br /&gt;
* Selectable legend placement&lt;br /&gt;
* Collapsible tree presentation on hierarchical data&lt;br /&gt;
* Date axes with customizable formatting&lt;br /&gt;
* Up to 9 individually scalable Y axes&lt;br /&gt;
* Rotated axis text&lt;br /&gt;
* Category rendering either linear, logarithmic, timeline or as pyramid&lt;br /&gt;
* Downloadable SVG image&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Report ===&lt;br /&gt;
&lt;br /&gt;
A document containing information organized in a graphic or tabular form, prepared on ad hoc, periodic, recurring, regular, or as required basis. Reports may refer to specific periods, events, occurrences, or subjects, and are presented in printed form.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Actuate Birt implementation&lt;br /&gt;
* Definition of reusable layout metadata&lt;br /&gt;
** All units of measurement for layouts&lt;br /&gt;
** Definition of fonts and colors&lt;br /&gt;
** Definition of formatters for&lt;br /&gt;
*** Currencies&lt;br /&gt;
*** Date and time&lt;br /&gt;
** Page sizes (A4, A5, etc.)&lt;br /&gt;
** Orientations (Landscape, portrait)&lt;br /&gt;
** Margins&lt;br /&gt;
** Paddings&lt;br /&gt;
** Alignments&lt;br /&gt;
* Output as HTML or PDF&lt;br /&gt;
* Ability to reference multiple DataMarts for header, footer and details&lt;br /&gt;
* Rendering of blob-images&lt;br /&gt;
* External CSS usable&lt;br /&gt;
* Defines grids and cells&lt;br /&gt;
* Direct printing to preselected output medias per user or per location and report&lt;br /&gt;
* Rule-based visibility of cells&lt;br /&gt;
* Aggregates for grouping&lt;br /&gt;
* Rule-based page break&lt;br /&gt;
* Rule-based colorizing and styling&lt;br /&gt;
* URL-based or embedded images&lt;br /&gt;
* Auto-texts (page number etc.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Topology ===&lt;br /&gt;
&lt;br /&gt;
Topology is designed for representing simple geographical features, along with their non-spatial attributes. It includes geo-json points (addresses and locations), line strings (streets, highways and boundaries), polygons (countries, provinces, tracts of land), and multi-part collections of these types.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* D3 implementation&lt;br /&gt;
* Render predefined maps of U.S.A., Germany, Spain… the World&lt;br /&gt;
* Select states, countries, regions or cities to synchronize other views in scope&lt;br /&gt;
* Render geo-json data from blobs to show boundaries of plots of land, buildings or floor plans&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== UI ===&lt;br /&gt;
&lt;br /&gt;
The user interface (UI) is the space where interactions between humans and OS.bee occur. The goal of this interaction is to allow effective operation and control of the machine from the human end, whilst the machine simultaneously feeds back information that aids the operators' decision-making process.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Models interactive views&lt;br /&gt;
* Connects to data-sources of any kind (DTO, Bean, JVM object, etc.)&lt;br /&gt;
* Nests different kinds of layouts to a complex surface (horizontal, vertical, form, grid)&lt;br /&gt;
* Adds components to layouts (buttons, text-fields, tables, images, etc.)&lt;br /&gt;
* Binds components to properties of data-sources&lt;br /&gt;
* Rule-based visibility processor&lt;br /&gt;
* Navigation widgets for small geometry mobile devices&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Dialog ===&lt;br /&gt;
&lt;br /&gt;
The dialog is a composite UI which is composed by either an automatically generated UI or a UI created with means of the UI DSL and actions that are available through a toolbar. It also can be combined with an instance of State-Machine DSL if a sophisticated control over the visibility of components and a definable usage-sequence is needed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Renders interactive views&lt;br /&gt;
* Either references a predefined UI model or a model inferred from a DTO &lt;br /&gt;
* Links the view to a toolbar&lt;br /&gt;
* Renders different modes&lt;br /&gt;
** Normal, to be used inside perspectives&lt;br /&gt;
** Embedded, to be used inside menues&lt;br /&gt;
** Stateful, inside perspectives, and controlled by a state-machine&lt;br /&gt;
** Mobile, to be used on small geometry mobile devices with navigation widgets&lt;br /&gt;
* Renders in 1 to N columns of components&lt;br /&gt;
* Groups components by using entity metadata&lt;br /&gt;
* Renders owning relationships as combo-boxes&lt;br /&gt;
* Renders member relationships as tables on tab-sheets&lt;br /&gt;
* Implements blob up- and downloading&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Perspective ===&lt;br /&gt;
&lt;br /&gt;
A perspective is a visual container for a set of views (parts). These parts exist wholly within the perspective and are not shared. A perspective is also like a page within a book. It exists within a window along with any number of other perspectives and, like a page within a book, only one perspective is visible at any time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Based on the Eclipse 4 application model&lt;br /&gt;
* Presents a 360° view on the task to the user&lt;br /&gt;
* Divides the usable screen area in resizable containers&lt;br /&gt;
* Nests windows, perspective-stacks, perspectives, containers, part-stacks and parts containing views, and toolbars&lt;br /&gt;
* Stores and retrieves resized areas for each user&lt;br /&gt;
* Supports drag and drop&lt;br /&gt;
* Event dispatching system to synchronize data, actions, focus and more between views&lt;br /&gt;
* References all types of views (dialogs, tables, charts, reports …) to set up a dashboard&lt;br /&gt;
* Modifiable layout at runtime using the designer mode for permitted users&lt;br /&gt;
* Connects to user tasks of BPM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Action ===&lt;br /&gt;
&lt;br /&gt;
A toolbar is a set of icons or buttons that are part of a software program's interface or an open window. A toolbar item is an object type that associates a command with a toolbar. This association places an icon on the toolbar in a specific location relative to the other toolbar icons on that toolbar. A command is linked to a specific action and can have a keyboard shortcut specification.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Links action-buttons &lt;br /&gt;
** To business logic of Function-Library to be executed&lt;br /&gt;
*** Synchronously&lt;br /&gt;
*** Asynchronously as background process&lt;br /&gt;
** To Data-Interchange import- or export tasks&lt;br /&gt;
** To BPM start events&lt;br /&gt;
** To actions to trigger&lt;br /&gt;
*** Save, delete, download, print etc.&lt;br /&gt;
*** Advance focus to next or previous part&lt;br /&gt;
* Links action-buttons to business logic of Function-Library to be &lt;br /&gt;
** Enabled&lt;br /&gt;
** Disabled depending on data context&lt;br /&gt;
* Defines commands to control the application and trigger actions&lt;br /&gt;
* Assigns keyboard short-cuts to commands&lt;br /&gt;
* Connects to Message for fail or success messages about executed actions&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Menu ===&lt;br /&gt;
&lt;br /&gt;
A menu is a list of options or commands presented to the user of OS.bee. A menu appears as a tree structure if the popup button besides the user-image is pressed. It is the user-specific point of entry into the OS.bee system. The user menu contains only those items that are needed to perform daily tasks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Combines Perspectives, BPM start events, embedded dialogs and tables, configuration settings and other informative screens to a tree-organized menu&lt;br /&gt;
* Pops up anytime it is needed, and consumes no space on the screen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Message ===&lt;br /&gt;
&lt;br /&gt;
Messages can be defined to improve the user experience as guidance through complex user interactions with the system. For security and monitoring reasons they can be logged.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Defines messages to notify a user about events and usage violations&lt;br /&gt;
* Can be tracked by log entries&lt;br /&gt;
* Placeholders for parametrizing messages&lt;br /&gt;
* Can have a severity&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Security ==&lt;br /&gt;
&lt;br /&gt;
Security's mission is to protect the companies and their assets (know-how, company data, personal and customer data and personal data, etc.) from hackers, crackers and robbers, and economic damage caused by breaches of confidentiality, manipulation, hardware failure and availability prevent the systems.&lt;br /&gt;
&lt;br /&gt;
=== Authorization ===&lt;br /&gt;
&lt;br /&gt;
Authorization is a security mechanism to determine access levels and user privileges related to system resources including files, services, data and application features. This is the process of granting or denying access to a resource which allows the user access to various resources based on the user's identity.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Role-based authorization system&lt;br /&gt;
* Grant access to entities, beans and DTO&lt;br /&gt;
* Grant access to CRUD operations (create, read, update, delete)&lt;br /&gt;
* Grant access to modification of relationships (link, unlink references)&lt;br /&gt;
* Vetoes per attribute for visibility, editability and enabling&lt;br /&gt;
* Grant access to start a process&lt;br /&gt;
* Grant access working on a user task&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Organization ===&lt;br /&gt;
&lt;br /&gt;
An organization is an entity comprising multiple people, such as an institution or an association that has a collective goal and is linked to an external environment. Its design specifies how goals are subdivided and reflected in subdivisions of the organization. An organization can be visualized in an organigram. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Hierarchies of positions, multi-positions, and sub-organizations&lt;br /&gt;
* Maps roles to positions&lt;br /&gt;
* Definition of levels of collaboration if sharing the same roles&lt;br /&gt;
* Derives an organigram of each hierarchy to be rendered at runtime&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Services =&lt;br /&gt;
&lt;br /&gt;
== Authentication ==&lt;br /&gt;
&lt;br /&gt;
Authentication is a process that ensures and confirms a user’s identity. To do so, a user needs to provide some sort of proof of identity that the system understands and trust. There are multiple ways (realms) to do this: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Security specific data access object, software component that talks to a backend data source.&lt;br /&gt;
* If you have usernames and password in LDAP, then you would have an LDAP Realm that would communicate with LDAP. &lt;br /&gt;
* Active Directory&lt;br /&gt;
* Kerberos&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
More features:* Remember-me&lt;br /&gt;
* Forgot password&lt;br /&gt;
* Protection against brute-force attacks&lt;br /&gt;
* MD5 salted and encrypted passwords&lt;br /&gt;
* Protection against debugging&lt;br /&gt;
* First commissioning support&lt;br /&gt;
* Session management&lt;br /&gt;
* Simple Single Sign-On (SSO)&lt;br /&gt;
* AES 128 encrypted cookie support&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Persistence ==&lt;br /&gt;
&lt;br /&gt;
Persistence service enabling small data-sources as well as large-scale installations:* XA data-source support for distributed transactions&lt;br /&gt;
* Built in global transaction manager&lt;br /&gt;
* JNDI Service&lt;br /&gt;
* Built in support for local databases&lt;br /&gt;
* Supports database providers from Application Server implementations like WebSphere or WebLogic Server&lt;br /&gt;
* Provides JDBC and catalog data for Mondrian&lt;br /&gt;
* Supports all compatible databases to EclipseLink like:&lt;br /&gt;
** Oracle&lt;br /&gt;
** Oracle JDBC&lt;br /&gt;
** MySQL&lt;br /&gt;
** PostgreSQL&lt;br /&gt;
** Derby&lt;br /&gt;
** DB2&lt;br /&gt;
** DB2 (mainframe)&lt;br /&gt;
** Microsoft SQL Server&lt;br /&gt;
** Sybase&lt;br /&gt;
** Informix&lt;br /&gt;
** SQL Anywhere&lt;br /&gt;
** HSQL&lt;br /&gt;
** SAP HANA&lt;br /&gt;
** H2&lt;br /&gt;
** Firebird&lt;br /&gt;
** Microsoft Access&lt;br /&gt;
** Attunity&lt;br /&gt;
** Cloudscape&lt;br /&gt;
** DBase&lt;br /&gt;
** PointBase&lt;br /&gt;
** TimesTen&lt;br /&gt;
** Symfoware&lt;br /&gt;
** MaxDB&lt;br /&gt;
&lt;br /&gt;
== Translation ==&lt;br /&gt;
&lt;br /&gt;
There is a centralized translation service in OS.bee. It collects all property files from models created by a DSL and supplies all internal translations that the Software Factory needs. The number of supported languages is unlimited; however the internal translations deployed for the moment are limited to English, French, and German. More languages can be ordered. In case a translation key occurs multiple times, the “best” translation for this key is automatically selected. The “best” translation is evaluated by the maximum Levinshtein distance from the translation key.&lt;br /&gt;
&lt;br /&gt;
== Metadata ==&lt;br /&gt;
&lt;br /&gt;
OS.bee holds all model-data at runtime so that all programs can reference them. Renderers that do not need code will interpret these model to do their work. So even in the Function-Library it is possible to take the current modeling into account.&lt;br /&gt;
&lt;br /&gt;
== Theme Resources and CSS ==&lt;br /&gt;
&lt;br /&gt;
As usual for web-frontend applications, cascaded style sheets describe the look and feel. Custom CSS can be loaded from outside, or any modification can be made once the appropriate bundle is downloaded. CSS is compiled from a SCCS template with a pre-processor. The advantage of using SCSS is that you can use variables and therefore create different looks with just a hand-full of variables. OS.bee comes with 3 different theme variants that can be selected in the user profile. Resources like images, html pages and icons are available per theme and thus adjustable to the used color scheme.&lt;/div&gt;</summary>
		<author><name>Riegel</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=OS.bee_Customer_Display&amp;diff=3528</id>
		<title>OS.bee Customer Display</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=OS.bee_Customer_Display&amp;diff=3528"/>
				<updated>2018-10-23T07:17:20Z</updated>
		
		<summary type="html">&lt;p&gt;Riegel: /* Customer Display */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Customer Display ==&lt;br /&gt;
&lt;br /&gt;
The latest version of the Statemachine DSL (Finite State-Machine) covers the synchronization of external (slave) browsers to a main (master) browser connected to an OS.bee server. The requirement was mainly inspired by the need of a customer display for the OS.bee POS application OS.pos. In this context it is required parts of the main screen's data which is shared on the slave browser working as a display.&lt;br /&gt;
&lt;br /&gt;
Multiple displays can be connected to a master just by using a pattern on the address line of the slave-browser:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  http://{server_host-name}/osbpdisplay/#{host-name_of_the_master}§{DisplayName_as_defined_in_the_ui_model} &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
► example: http://dv999.compex.de:8081/osbpdisplay/#dv888.compex.de§CustomerDisplay&lt;br /&gt;
&lt;br /&gt;
* '''''http://dv999.compex.de:8081/osbp''''': this part as same as the address in main display, including server host-name and port number.&lt;br /&gt;
* '''''display/''''':  this part is the slave name, you can attach one or more slaves on the same master.&lt;br /&gt;
* '''''#dv888.compex.de-''''': this part is master machine. &lt;br /&gt;
* '''''CustomerDisplay''''': this part is the display name which is used by this slave, and it is as same as the display name which is defined in the UI model.&lt;br /&gt;
&lt;br /&gt;
=== Important prerequisite ===&lt;br /&gt;
In order to use external displays you must add the bundle ''org.eclipse.osbp.display'' to your product's launch configuration and set auto-start to true.&lt;br /&gt;
&lt;br /&gt;
[[File:display_autostart.png|800px]]&lt;br /&gt;
&lt;br /&gt;
=== Technical changes in DSL model ===&lt;br /&gt;
&lt;br /&gt;
==== changes in dto ====&lt;br /&gt;
* New '''dto''' &amp;quot;'''CustomerDisplayDto'''&amp;quot;:&lt;br /&gt;
*:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
dto CustomerDisplayDto {&lt;br /&gt;
	var double totalAmount&lt;br /&gt;
	var boolean left&lt;br /&gt;
	var String message&lt;br /&gt;
	var boolean right&lt;br /&gt;
	var BlobMapping image&lt;br /&gt;
	ref CashSlipDto slip&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** '''totalAmount''' : total amount of all cash position.&lt;br /&gt;
** '''left''' &amp;amp; '''right''' : boolean value, define if this part will be shown on display.&lt;br /&gt;
** '''image''' : any image which will be shown on th display&lt;br /&gt;
** '''slip''' : reference the cash slip dto.&lt;br /&gt;
&lt;br /&gt;
==== changes in UI====&lt;br /&gt;
* New '''UI''':&lt;br /&gt;
*:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
display Customer {&lt;br /&gt;
	rootType CustomerDisplayDto&lt;br /&gt;
	datasource main:CustomerDisplayDto&lt;br /&gt;
	datasource img:BlobConverter&lt;br /&gt;
	horizontalLayout {&lt;br /&gt;
		verticalLayout left {&lt;br /&gt;
			textfield(i18n noCaption readonly) message&lt;br /&gt;
			table(i18n noCaption) slip {&lt;br /&gt;
				scrollToBottom&lt;br /&gt;
				type CashPositionDto&lt;br /&gt;
				columns {&lt;br /&gt;
					column quantity&lt;br /&gt;
					column product.sku&lt;br /&gt;
					column product.product_name&lt;br /&gt;
					column price&lt;br /&gt;
					column amount&lt;br /&gt;
				}&lt;br /&gt;
				sort {&lt;br /&gt;
					column now asc&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			align fill-left&lt;br /&gt;
			form(styles &amp;quot;os-cash-total&amp;quot;) {&lt;br /&gt;
				decimalField(precision= 2 readonly) totalAmount&lt;br /&gt;
			}&lt;br /&gt;
			bind [this.message].value &amp;lt;-- img.input&lt;br /&gt;
			bind [this.slip].collection &amp;lt;-- main.slip.positions&lt;br /&gt;
			bind [this.totalAmount].value &amp;lt;-- main.totalAmount&lt;br /&gt;
		}&lt;br /&gt;
		verticalLayout right {&lt;br /&gt;
			image info&lt;br /&gt;
			bind img.input &amp;lt;-- main.^image&lt;br /&gt;
			bind [this.info].resource &amp;lt;-- img.output&lt;br /&gt;
		}&lt;br /&gt;
		bind [this.left].visible &amp;lt;-- main.left&lt;br /&gt;
		bind [this.right].visible &amp;lt;-- main.right&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** In this '''display''' &amp;quot;'''customer'''&amp;quot;, we define in the 2 parts(left part &amp;amp; right part), if they will be shown and what will be shown in UI.&lt;br /&gt;
&lt;br /&gt;
==== changes in Functionlibrary ====&lt;br /&gt;
* New lines in '''operation''' &amp;quot;'''initImages'''&amp;quot; &amp;amp; '''operation''' &amp;quot;'''conputeTotal'''&amp;quot; :&lt;br /&gt;
*:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
operation initImages(IStateMachine stateMachine, Object [] params) {&lt;br /&gt;
	. . .&lt;br /&gt;
stateMachine.set(&amp;quot;CustomerDisplayImage&amp;quot;, cashregister.store.company.companyImage)&lt;br /&gt;
. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** In operation &amp;quot;'''initImages'''&amp;quot;, the image of customerDisplay could be set.&lt;br /&gt;
*:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
operation computeTotal(IStateMachine stateMachine) {&lt;br /&gt;
	. . .&lt;br /&gt;
	stateMachine.set(&amp;quot;CustomerDisplayTotalAmount&amp;quot;, amount);&lt;br /&gt;
	. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** In operation &amp;quot;'''computeTotal'''&amp;quot;, the total amount of CustomerDisplay could be calculated and set.&lt;br /&gt;
&lt;br /&gt;
==== changes in Statemachine ====&lt;br /&gt;
Some new keywords are introduced for this new functionality:&lt;br /&gt;
:* &amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt; display &amp;lt;DisplayName&amp;gt; using &amp;lt;DTOName&amp;gt; &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:* &amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt; dto &amp;lt;DTOAlias&amp;gt;  type &amp;lt;DTOName&amp;gt; attach &amp;lt;DisplayName&amp;gt; &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:* &amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt; displayText text &amp;quot;some text&amp;quot; @&amp;lt;DisplayName&amp;gt; to &amp;lt;DTOAttribute&amp;gt; &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The references of a DTO that is attached to a display are always synchronized across all connected displays. Single fields must be synchronized by '''displayText'''.&lt;br /&gt;
&lt;br /&gt;
:► e.g.: &lt;br /&gt;
:*&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
display CustomerDisplay using CustomerDisplayDto&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:*&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
dto cashslip type CashSlipDto attach CustomerDisplay&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:*&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
displayText text &amp;quot;locked&amp;quot; @CustomerDisplay to message&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:► The referenced DTO must be the rootType of the Display definition in the ui model.&lt;br /&gt;
&lt;br /&gt;
Now I will show the changes in statmachine:&lt;br /&gt;
# New '''events''' &amp;quot;'''dataProvider DataControl'''&amp;quot;:&lt;br /&gt;
#:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
dataProvider DataControl { &lt;br /&gt;
	. . .&lt;br /&gt;
dto cashslip type CashSlipDto attach CustomerDisplay&lt;br /&gt;
	dto customerDisplay type CustomerDisplayDto&lt;br /&gt;
	. . . &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# New '''events''' &amp;quot;'''peripheral PeripheralControl'''&amp;quot;:&lt;br /&gt;
#:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
peripheral PeripheralControl {&lt;br /&gt;
	. . .&lt;br /&gt;
	display CustomerDisplay using CustomerDisplay &lt;br /&gt;
	. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Setting for customerDisplay, in '''state''' &amp;quot;'''IDLE'''&amp;quot;: &lt;br /&gt;
#:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
trigger onStartUp&lt;br /&gt;
actions transition LOCKED{&lt;br /&gt;
	. . .&lt;br /&gt;
displayText false @CustomerDisplay to ^left&lt;br /&gt;
displayText true @CustomerDisplay to ^right&lt;br /&gt;
. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Setting for customerDisplay, in '''state''' &amp;quot;'''LOCKED'''&amp;quot;:&lt;br /&gt;
#:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
trigger onOk&lt;br /&gt;
actions transition ATTENTIVE{&lt;br /&gt;
	. . .&lt;br /&gt;
displayText true @CustomerDisplay to ^left&lt;br /&gt;
displayText false @CustomerDisplay to ^right&lt;br /&gt;
 . . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Copyright Notice ==&lt;br /&gt;
{{Copyright Notice}}&lt;/div&gt;</summary>
		<author><name>Riegel</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=OS.bee_Software_Factory_Unique_Selling_Propositions&amp;diff=3527</id>
		<title>OS.bee Software Factory Unique Selling Propositions</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=OS.bee_Software_Factory_Unique_Selling_Propositions&amp;diff=3527"/>
				<updated>2018-10-23T07:12:46Z</updated>
		
		<summary type="html">&lt;p&gt;Riegel: /* Persistence */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Abstract =&lt;br /&gt;
&lt;br /&gt;
OS.bee is a low-code model-driven software-factory, using over 20 Domain Specific Languages (DSL) to generate large-scale business web-applications. Each DSL contains a grammar for a required application-layer. A DSL hides complexity from successors, thereby enabling parallel modelling of domain requirements by multiple designers as they don’t need to know the domain logic they build upon. A model created with a DSL creates executable code, structured data and configuration settings or is interpreted by a renderer during runtime. The language of each DSL uses a grammar that makes the created model easy to understand and forms a requirement specification on its layer. The overall hierarchy can be browsed through at any time and gives a good understanding of the whole application in nearly natural English language. A DSL can also be studied by its syntactical graph. The creation of a model is a guided process through the syntax graph where the designer benefits from content assistance, code completion, quick fix, syntax colorizing, outline, formatting and validation. Many DSLs define metadata to be used by subsequent DSL to increase the leverage of definitions at a basic level. All element names defined by a DSL are automatically extracted to localization files for translation to open foreign markets for the resulting application. The ratio between the generated lines of code versus the numbers of lines in a model is 8 on average. Development speed improves by a similar factor. Dependencies between models reveal inconsistencies immediately while modifying and prevent generating code until these are resolved. Therefore turnaround cycles are short, errors are easy to discover and prototypes materialize in a very short time. Some DSL generate against famous open-source frameworks like EclipseLink, Smooks, Mondrian, Vaadin or jBPM thus enabling non-developers to use complex frameworks without deeper knowledge of their API. OS.bee inherits the features of the embedded frameworks and makes them easy to exploit for specialists of a domain not necessarily being software developer.&lt;br /&gt;
&lt;br /&gt;
= DSL Modeling =&lt;br /&gt;
&lt;br /&gt;
== Persistence ==&lt;br /&gt;
&lt;br /&gt;
Persistence refers to object and process characteristics that continue to exist even after the process that created it ceases or the machine it is running on is powered off. When an object or state is created and needs to be persistent, it is saved in a non-volatile storage location, like a hard drive, versus a temporary file or volatile random access memory.&lt;br /&gt;
&lt;br /&gt;
=== Data-type ===&lt;br /&gt;
&lt;br /&gt;
A data type is a classification that specifies which type of value a variable has and what type of mathematical, relational or logical operations can be applied to it without causing an error. Data types also hold metadata for higher-level DSLs so they can apply additional functionality to a field using this data type.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Primitive Types (int, double, etc.)&lt;br /&gt;
* Object Types (String, Date, etc.)&lt;br /&gt;
* Blob&lt;br /&gt;
** Store and retrieve any document or image type in binary form&lt;br /&gt;
* Auto-sizing Images&lt;br /&gt;
** Additionally stores images of definable size to experience better performance while rendering&lt;br /&gt;
* Formatted types&lt;br /&gt;
** Dates and times in any localized form&lt;br /&gt;
** Dates and times in any format (time only, date only, short and long forms, custom pattern, etc.)&lt;br /&gt;
** Currencies in any localized form&lt;br /&gt;
* Validated types with adjustable severity message&lt;br /&gt;
** Date in past/future&lt;br /&gt;
** Not null&lt;br /&gt;
** Not duplicate&lt;br /&gt;
** Range values&lt;br /&gt;
** Min/max length&lt;br /&gt;
* Slider types&lt;br /&gt;
** Min/max values&lt;br /&gt;
* Masked types&lt;br /&gt;
** Number, Hexadecimal, Capitalized&lt;br /&gt;
** Input pattern (e.g. Phone Numbers (###) ###-####)&lt;br /&gt;
** Password&lt;br /&gt;
* Suggestion types&lt;br /&gt;
** While typing some characters, a sorted list of suggestions pops up for selection&lt;br /&gt;
* Programmable Converters&lt;br /&gt;
** Text-to-Image&lt;br /&gt;
** Number-to-Text/Image&lt;br /&gt;
** Value-to-CSS Style&lt;br /&gt;
** Units of measurement&lt;br /&gt;
* Rich text editor using HTML markups&lt;br /&gt;
* Text area &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Entity ===&lt;br /&gt;
&lt;br /&gt;
An entity (-type) is a model of metadata for a single unique object in the real world. For example a person, organization, object type, or concept about which information is stored. Together with its attributes (or properties) it describes information that is being mastered. An entity typically corresponds to one or several related tables in database. An attribute is a characteristic or trait of an entity that describes the entity, for example, the Person entity type has the Date of Birth attribute.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Simple Entity&lt;br /&gt;
* Mapped super-classes&lt;br /&gt;
** Complement attributes in every entity using this&lt;br /&gt;
* Inheritance&lt;br /&gt;
** Specialized classes for special purpose&lt;br /&gt;
* References and their opposites&lt;br /&gt;
* References with constraints&lt;br /&gt;
* Embeddable beans&lt;br /&gt;
* Number generators UUID or ID&lt;br /&gt;
* Separated persistence-units capable of using multiple databases simultaneously&lt;br /&gt;
* All multiplicities (0..1, 0..n,1..1,1..n,*)&lt;br /&gt;
* Indexes unique and non-unique&lt;br /&gt;
* Validated uniqueness&lt;br /&gt;
* Domain-key annotation for lookups&lt;br /&gt;
* Methods for calculated attributes&lt;br /&gt;
* Lifecycle controlled method invoking (by PostLoad, PrePersist, etc.)&lt;br /&gt;
* Affected changes listeners&lt;br /&gt;
* Localizable Enumerations with images&lt;br /&gt;
* Creation and last modification information&lt;br /&gt;
* Transient data&lt;br /&gt;
* Synthetic attributes built by lifecycle methods either transient or persistent&lt;br /&gt;
* Historicized data&lt;br /&gt;
* Temporal data&lt;br /&gt;
* Versioned data&lt;br /&gt;
* Definable Runtime data filter&lt;br /&gt;
* Programmable Validators&lt;br /&gt;
* Nested Filter attributions over multiple references&lt;br /&gt;
* Abstraction of database vendor specific implementations&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Data transfer object (DTO) ===&lt;br /&gt;
&lt;br /&gt;
A DTO is an object that carries data between processes. DTOs are simple objects that do not contain any business logic but may contain serialization and deserialization mechanisms for transferring data.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Independent nested data container&lt;br /&gt;
* Automatically generated for entities&lt;br /&gt;
* Automatically mapped by entity data&lt;br /&gt;
* Editable sub- or supersets for entities&lt;br /&gt;
* Transient data container&lt;br /&gt;
* Nested objects automatically synchronized&lt;br /&gt;
* Nested properties access through dot expressions&lt;br /&gt;
* Used for services, processes, functions and renderers&lt;br /&gt;
* Dirty state aware&lt;br /&gt;
* Access restrictions on DTO and property granularity controlled by security layer&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== DTO Service ===&lt;br /&gt;
&lt;br /&gt;
A DTO service abstracts and encapsulates all access to the data source. It manages the connection with the data source to obtain and store data and implements the access mechanism required to work with the data source. The data source could be a persistent store like an RDBMS, or a business service accessed via REST or SOAP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Data storage and retrieval suitable for DTO&lt;br /&gt;
* Nested Transactions and Lock-modes&lt;br /&gt;
* Global transactions&lt;br /&gt;
* Object Oriented Query engine&lt;br /&gt;
* Low level Java Persistence Query Language method declarations (e.g. getTotal(), getAverage(), …)&lt;br /&gt;
* Injectable and declarative service&lt;br /&gt;
* Used for services, processes, functions and renderers&lt;br /&gt;
* Session scoped Entity Manager&lt;br /&gt;
* Thread safe persistence-unit bound Entity Manager Factory&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Data-Interchange ===&lt;br /&gt;
&lt;br /&gt;
Data Interchange is the endpoint-to-endpoint exchange of business documents in a standard electronic format between business partners or computer systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Smooks and FreeMarker implementation&lt;br /&gt;
* Nested entity import- and export-paths&lt;br /&gt;
* Localized formatters on data&lt;br /&gt;
* Supports encoding&lt;br /&gt;
* XML and CSV formats&lt;br /&gt;
* All EDI messages&lt;br /&gt;
* Automatically set export- and import markers for database&lt;br /&gt;
* Filtered exports&lt;br /&gt;
* Bulk insert/update&lt;br /&gt;
* Progress bar&lt;br /&gt;
* Generated import and export dashboard&lt;br /&gt;
* Generated lookup queries to embed relational data&lt;br /&gt;
* Merge or persist external data&lt;br /&gt;
* Import images of different mime-types into blobs via filename pattern&lt;br /&gt;
* Usage of expressions&lt;br /&gt;
* Free attribute mappings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Signal ===&lt;br /&gt;
&lt;br /&gt;
Signal processes events coming from file-systems. If a file that matches a given filename pattern is created, modified or deleted then an event is received and the modelled actions will be called. Signal also emits events for recurring things like a certain weekday and time is reached and executes the modelled actions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* File watcher for all file activities working on all operating systems&lt;br /&gt;
* Free filename pattern to watch for&lt;br /&gt;
&lt;br /&gt;
* Trigger Data-Interchange&lt;br /&gt;
* Definable export or import job-chain&lt;br /&gt;
* Synchronously or asynchronously execution (depending on import relationship) &lt;br /&gt;
* Quartz implementation for scheduled Data-Interchange export-jobs&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Entity-Mock ===&lt;br /&gt;
&lt;br /&gt;
Mock objects are simulated objects that mimic the behavior of real objects in controlled ways. A programmer typically creates a mock object to test the behavior of some other object, in much the same way that a car designer uses a crash test dummy to simulate the dynamic behavior of a human in vehicle impacts.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Generates fake data looking realistic&lt;br /&gt;
&lt;br /&gt;
* Mapping of roles to positions and multi-positions&lt;br /&gt;
&lt;br /&gt;
* Rule-based data composition (e.g. email address)&lt;br /&gt;
* Rule-based attribute generators for every data-type from data composition, or &lt;br /&gt;
** Randomly&lt;br /&gt;
** Ranges&lt;br /&gt;
** Picks from a given list&lt;br /&gt;
** Dates in the past with offset and limit (for birthdays)&lt;br /&gt;
** Dates in the future with offset and limit&lt;br /&gt;
* Composes objects from rule-based attribute generators (e.g. a person, a company, etc.)&lt;br /&gt;
* Composes object-trees from composed objects&lt;br /&gt;
* Creates relationships between objects using a given probability&lt;br /&gt;
* Creates mass data (e.g. sales data)&lt;br /&gt;
* Imports fixed data via Data-Interchange and embeds it&lt;br /&gt;
* Used mainly for quick-setup applications using a H2 database&lt;br /&gt;
* Exposes mock data services to be executed before any login-attempt&lt;br /&gt;
* Persists into all supported database products&lt;br /&gt;
* Can be executed at every server-start or once&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Business intelligence ==&lt;br /&gt;
&lt;br /&gt;
Business Intelligence (BI) refers to technologies, applications and practices for the collection, integration, analysis, and presentation of business information. The purpose of Business Intelligence is to support better business decision making. Essentially, Business Intelligence systems are data-driven Decision Support Systems (DSS). Business Intelligence is sometimes used interchangeably with briefing books, report and query tools and executive information systems.&lt;br /&gt;
&lt;br /&gt;
=== Cube ===&lt;br /&gt;
&lt;br /&gt;
A cube is a method of storing data in a multidimensional form, generally for reporting purposes. In cubes, data (measures) are categorized by dimensions. Cubes are pre-summarized across dimensions to drastically improve query time over relational databases. The query language used to interact and perform tasks with cubes is multidimensional expressions (MDX).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Mondrian OLAP for MDX queries implementation&lt;br /&gt;
* Cubes, dimensions, hierarchies, levels, members, and measures&lt;br /&gt;
* Defines a multi-dimensional database&lt;br /&gt;
* Contains a logical model, and a mapping of this model onto the physical entity model &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== DataMart ===&lt;br /&gt;
&lt;br /&gt;
A data mart is a subject-oriented archive that stores data and uses the retrieved set of information to assist and support the requirements involved within a particular business function or department. Data marts improve end-user response time by allowing users to have access to the specific type of data they need to view most often by providing the data in a way that supports the collective view of a group of users.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Common layer for data-warehouse queries&lt;br /&gt;
* Simplification of any kind of query against all available data sources&lt;br /&gt;
* Tailored queries and aggregates for different interest-groups&lt;br /&gt;
* Definition of complex multidimensional expressions (MDX) with a simple grammar&lt;br /&gt;
* Sophisticated analytic functions easy to use&lt;br /&gt;
* Online analytical processing built in&lt;br /&gt;
* Access to runtime data of the Business Process management engine&lt;br /&gt;
* Multi-purpose results for processes, reports, score cards and charts&lt;br /&gt;
* Definable navigation trees (join-paths)&lt;br /&gt;
* Definable single- and multi-selection filters on any leaf of the query tree&lt;br /&gt;
* Access restrictions on entity and attribute granularity controlled by security layer&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Function-Library ===&lt;br /&gt;
&lt;br /&gt;
A function-library is a collection of non-volatile resources used by other DSLs. It is a collection of implementations of behavior, written in Xbase, which has a well-defined interface by which the behavior is invoked. Library code is organized in such a way that it can be used by multiple programs that have no connection to each other, in other words it is completely independent of the calling logic. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Xbase implementation&lt;br /&gt;
* UOMo implementation&lt;br /&gt;
* Creates operational objects and methods&lt;br /&gt;
* Grouped by application field&lt;br /&gt;
** Converter for model-presentation conversions&lt;br /&gt;
*** Value to image&lt;br /&gt;
*** Value to value&lt;br /&gt;
*** Value to style (background color, text color, font-style, etc.)&lt;br /&gt;
*** Value to unit of measurement based value&lt;br /&gt;
*** Between measurement systems and unit of measurement families&lt;br /&gt;
** State-Machine&lt;br /&gt;
*** Operations&lt;br /&gt;
*** Functions&lt;br /&gt;
*** Guards&lt;br /&gt;
*** Full access to state-machine controls&lt;br /&gt;
** Toolbar Action&lt;br /&gt;
*** Can execute validation (enable/disable operation)&lt;br /&gt;
*** Execute any operation&lt;br /&gt;
** Validation on DTO&lt;br /&gt;
** Business logic implementation for BPM&lt;br /&gt;
*** Functions callable in system tasks&lt;br /&gt;
*** Ratings for gateways&lt;br /&gt;
*** Tests for gateways&lt;br /&gt;
** Calculations e.g. for&lt;br /&gt;
*** Currencies&lt;br /&gt;
*** Lengths&lt;br /&gt;
*** Areas&lt;br /&gt;
** Posting operations&lt;br /&gt;
* Exposes injectable and declarative service&lt;br /&gt;
* Store and retrieve data from DTO&lt;br /&gt;
* Full access to all JVM objects&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== State-Machine ===&lt;br /&gt;
&lt;br /&gt;
A finite-state machine (FSM) is a mathematical model of computation. It is an abstract machine that can be in exactly one of a finite number of states at any given time. The FSM can change from one state to another in response to an event. The change from one state to another is called a transition. An FSM is defined by a list of its states, its initial state, and the conditions for each transition. These conditions are called guards as they guard the transition from unwanted invocation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Implementation of business behavior&lt;br /&gt;
* Defines states and their transitions&lt;br /&gt;
* Transitions are triggered by events&lt;br /&gt;
* Transitions are guarded by functions from Function-Library&lt;br /&gt;
* Actions to be executed before and after transitioning from Function-Library&lt;br /&gt;
* Has things to control&lt;br /&gt;
** Database objects (DTO)&lt;br /&gt;
** Database filters&lt;br /&gt;
** Visibility or enabling of&lt;br /&gt;
*** Buttons (UI)&lt;br /&gt;
*** Layouts (UI)&lt;br /&gt;
*** Other components (UI)&lt;br /&gt;
** Peripheral devices (interfaces JavaPOS)&lt;br /&gt;
*** Printers&lt;br /&gt;
*** Line displays&lt;br /&gt;
*** Cash drawers&lt;br /&gt;
*** Payment terminals&lt;br /&gt;
*** Signature pads&lt;br /&gt;
** Slave browsers (external displays, etc.)&lt;br /&gt;
* Receives events from&lt;br /&gt;
** Buttons clicked&lt;br /&gt;
** UI selections&lt;br /&gt;
** Peripherals (printer out of paper, etc.)&lt;br /&gt;
** Schedulers&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== BLiP (Business Logic implementation Platform) ===&lt;br /&gt;
&lt;br /&gt;
BLiP focuses on improving corporate performance by managing business processes (BPM), business rules and business logic (Function-Library). &amp;lt;span style=&amp;quot;background-color:#ffffff;color:#222222;&amp;quot;&amp;gt;&amp;amp;nbsp;It is a disciplined approach to identify, design, execute, document, measure, monitor, and control both automated and non-automated business processes to achieve consistent, targeted results aligned with an organization’s strategic goals. BPM involves the deliberate and collaborative definition, improvement, innovation, and management of end-to-end business processes that drive business results, create value, and enable an organization to meet its business objectives with more agility. BPM enables an enterprise to align its business processes to its business strategy, leading to effective overall company performance through improvements of specific work activities either within a specific department, across the enterprise, or between organizations.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Implements jBPM&lt;br /&gt;
* Integrates a BPMN editor at design-time&lt;br /&gt;
* Connects tasks of BPM to business logic of Function-Library&lt;br /&gt;
* Controls sequence-flow through business logic of Function-Library&lt;br /&gt;
* Stores and retrieves process save-points&lt;br /&gt;
* Logs all process activities of system and user&lt;br /&gt;
* Exposes BPM data and events to UI elements&lt;br /&gt;
* Stores and retrieves workload data using DTO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Presentation ==&lt;br /&gt;
&lt;br /&gt;
The presentation layer ensures that the communications that pass through it are in the appropriate form for the recipient application. It is responsible for the delivery and formatting of information to the application layer for further processing or display. It relieves the application layer of concern regarding syntactical differences in data representation within the end-user systems.&lt;br /&gt;
&lt;br /&gt;
=== Table ===&lt;br /&gt;
&lt;br /&gt;
A table is a data structure that organizes information into rows and columns. It can be used to both store and display data in a structured format.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Editable cells&lt;br /&gt;
* Scorecard elements&lt;br /&gt;
** Rule-based colorizing of cell background and textcolor&lt;br /&gt;
** Mixed in rule-based icons&lt;br /&gt;
** Rule-based styling of cells&lt;br /&gt;
** Rule-based tooltips&lt;br /&gt;
* Data from DataMart or DTO&lt;br /&gt;
* Pivot presentation&lt;br /&gt;
* Multidimensional presentation on nested tab-sheets&lt;br /&gt;
* Filtering, sorting, swapping and hiding of columns&lt;br /&gt;
* Stores swapping and hiding per user&lt;br /&gt;
* 3 different row numbering modes&lt;br /&gt;
* Row selection synchronizes other views in scope&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Chart ===&lt;br /&gt;
&lt;br /&gt;
A chart is a diagram, picture, or graph which is intended to make information easier to understand. It is a symbolic representation of information according to some visualization technique.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Multiple data series with selectable colorizing&lt;br /&gt;
* Series switchable from legend&lt;br /&gt;
* Bar, line, pie, donut, bubble and gauge presentation&lt;br /&gt;
* Animated, stacked, shaded and xy-swapped charts&lt;br /&gt;
* Zoom and trend-line function&lt;br /&gt;
* Tooltips for series and data points with absolute value&lt;br /&gt;
* Selectable positioning relative to cursor for tooltips&lt;br /&gt;
* Selectable legend placement&lt;br /&gt;
* Collapsible tree presentation on hierarchical data&lt;br /&gt;
* Date axes with customizable formatting&lt;br /&gt;
* Up to 9 individually scalable Y axes&lt;br /&gt;
* Rotated axis text&lt;br /&gt;
* Category rendering either linear, logarithmic, timeline or as pyramid&lt;br /&gt;
* Downloadable SVG image&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Report ===&lt;br /&gt;
&lt;br /&gt;
A document containing information organized in a graphic or tabular form, prepared on ad hoc, periodic, recurring, regular, or as required basis. Reports may refer to specific periods, events, occurrences, or subjects, and are presented in printed form.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Actuate Birt implementation&lt;br /&gt;
* Definition of reusable layout metadata&lt;br /&gt;
** All units of measurement for layouts&lt;br /&gt;
** Definition of fonts and colors&lt;br /&gt;
** Definition of formatters for&lt;br /&gt;
*** Currencies&lt;br /&gt;
*** Date and time&lt;br /&gt;
** Page sizes (A4, A5, etc.)&lt;br /&gt;
** Orientations (Landscape, portrait)&lt;br /&gt;
** Margins&lt;br /&gt;
** Paddings&lt;br /&gt;
** Alignments&lt;br /&gt;
* Output as HTML or PDF&lt;br /&gt;
* Ability to reference multiple DataMarts for header, footer and details&lt;br /&gt;
* Rendering of blob-images&lt;br /&gt;
* External CSS usable&lt;br /&gt;
* Defines grids and cells&lt;br /&gt;
* Direct printing to preselected output medias per user or per location and report&lt;br /&gt;
* Rule-based visibility of cells&lt;br /&gt;
* Aggregates for grouping&lt;br /&gt;
* Rule-based page break&lt;br /&gt;
* Rule-based colorizing and styling&lt;br /&gt;
* URL-based or embedded images&lt;br /&gt;
* Auto-texts (page number etc.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Topology ===&lt;br /&gt;
&lt;br /&gt;
Topology is designed for representing simple geographical features, along with their non-spatial attributes. It includes geo-json points (addresses and locations), line strings (streets, highways and boundaries), polygons (countries, provinces, tracts of land), and multi-part collections of these types.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* D3 implementation&lt;br /&gt;
* Render predefined maps of U.S.A., Germany, Spain… the World&lt;br /&gt;
* Select states, countries, regions or cities to synchronize other views in scope&lt;br /&gt;
* Render geo-json data from blobs to show boundaries of plots of land, buildings or floor plans&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== UI ===&lt;br /&gt;
&lt;br /&gt;
The user interface (UI) is the space where interactions between humans and OS.bee occur. The goal of this interaction is to allow effective operation and control of the machine from the human end, whilst the machine simultaneously feeds back information that aids the operators' decision-making process.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Models interactive views&lt;br /&gt;
* Connects to data-sources of any kind (DTO, Bean, JVM object, etc.)&lt;br /&gt;
* Nests different kinds of layouts to a complex surface (horizontal, vertical, form, grid)&lt;br /&gt;
* Adds components to layouts (buttons, text-fields, tables, images, etc.)&lt;br /&gt;
* Binds components to properties of data-sources&lt;br /&gt;
* Rule-based visibility processor&lt;br /&gt;
* Navigation widgets for small geometry mobile devices&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Dialog ===&lt;br /&gt;
&lt;br /&gt;
The dialog is a composite UI which is composed by either an automatically generated UI or a UI created with means of the UI DSL and actions that are available through a toolbar. It also can be combined with an instance of State-Machine DSL if a sophisticated control over the visibility of components and a definable usage-sequence is needed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Renders interactive views&lt;br /&gt;
* Either references a predefined UI model or a model inferred from a DTO &lt;br /&gt;
* Links the view to a toolbar&lt;br /&gt;
* Renders different modes&lt;br /&gt;
** Normal, to be used inside perspectives&lt;br /&gt;
** Embedded, to be used inside menues&lt;br /&gt;
** Stateful, inside perspectives, and controlled by a state-machine&lt;br /&gt;
** Mobile, to be used on small geometry mobile devices with navigation widgets&lt;br /&gt;
* Renders in 1 to N columns of components&lt;br /&gt;
* Groups components by using entity metadata&lt;br /&gt;
* Renders owning relationships as combo-boxes&lt;br /&gt;
* Renders member relationships as tables on tab-sheets&lt;br /&gt;
* Implements blob up- and downloading&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Perspective ===&lt;br /&gt;
&lt;br /&gt;
A perspective is a visual container for a set of views (parts). These parts exist wholly within the perspective and are not shared. A perspective is also like a page within a book. It exists within a window along with any number of other perspectives and, like a page within a book, only one perspective is visible at any time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Based on the Eclipse 4 application model&lt;br /&gt;
* Presents a 360° view on the task to the user&lt;br /&gt;
* Divides the usable screen area in resizable containers&lt;br /&gt;
* Nests windows, perspective-stacks, perspectives, containers, part-stacks and parts containing views, and toolbars&lt;br /&gt;
* Stores and retrieves resized areas for each user&lt;br /&gt;
* Supports drag and drop&lt;br /&gt;
* Event dispatching system to synchronize data, actions, focus and more between views&lt;br /&gt;
* References all types of views (dialogs, tables, charts, reports …) to set up a dashboard&lt;br /&gt;
* Modifiable layout at runtime using the designer mode for permitted users&lt;br /&gt;
* Connects to user tasks of BPM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Action ===&lt;br /&gt;
&lt;br /&gt;
A toolbar is a set of icons or buttons that are part of a software program's interface or an open window. A toolbar item is an object type that associates a command with a toolbar. This association places an icon on the toolbar in a specific location relative to the other toolbar icons on that toolbar. A command is linked to a specific action and can have a keyboard shortcut specification.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Links action-buttons &lt;br /&gt;
** To business logic of Function-Library to be executed&lt;br /&gt;
*** Synchronously&lt;br /&gt;
*** Asynchronously as background process&lt;br /&gt;
** To Data-Interchange import- or export tasks&lt;br /&gt;
** To BPM start events&lt;br /&gt;
** To actions to trigger&lt;br /&gt;
*** Save, delete, download, print etc.&lt;br /&gt;
*** Advance focus to next or previous part&lt;br /&gt;
* Links action-buttons to business logic of Function-Library to be &lt;br /&gt;
** Enabled&lt;br /&gt;
** Disabled depending on data context&lt;br /&gt;
* Defines commands to control the application and trigger actions&lt;br /&gt;
* Assigns keyboard short-cuts to commands&lt;br /&gt;
* Connects to Message for fail or success messages about executed actions&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Menu ===&lt;br /&gt;
&lt;br /&gt;
A menu is a list of options or commands presented to the user of OS.bee. A menu appears as a tree structure if the popup button besides the user-image is pressed. It is the user-specific point of entry into the OS.bee system. The user menu contains only those items that are needed to perform daily tasks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Combines Perspectives, BPM start events, embedded dialogs and tables, configuration settings and other informative screens to a tree-organized menu&lt;br /&gt;
* Pops up anytime it is needed, and consumes no space on the screen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Message ===&lt;br /&gt;
&lt;br /&gt;
Messages can be defined to improve the user experience as guidance through complex user interactions with the system. For security and monitoring reasons they can be logged.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Defines messages to notify a user about events and usage violations&lt;br /&gt;
* Can be tracked by log entries&lt;br /&gt;
* Placeholders for parametrizing messages&lt;br /&gt;
* Can have a severity&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Security ==&lt;br /&gt;
&lt;br /&gt;
Security's mission is to protect the companies and their assets (know-how, company data, personal and customer data and personal data, etc.) from hackers, crackers and robbers, and economic damage caused by breaches of confidentiality, manipulation, hardware failure and availability prevent the systems.&lt;br /&gt;
&lt;br /&gt;
=== Authorization ===&lt;br /&gt;
&lt;br /&gt;
Authorization is a security mechanism to determine access levels and user privileges related to system resources including files, services, data and application features. This is the process of granting or denying access to a resource which allows the user access to various resources based on the user's identity.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Role-based authorization system&lt;br /&gt;
* Grant access to entities, beans and DTO&lt;br /&gt;
* Grant access to CRUD operations (create, read, update, delete)&lt;br /&gt;
* Grant access to modification of relationships (link, unlink references)&lt;br /&gt;
* Vetoes per attribute for visibility, editability and enabling&lt;br /&gt;
* Grant access to start a process&lt;br /&gt;
* Grant access working on a user task&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Organization ===&lt;br /&gt;
&lt;br /&gt;
An organization is an entity comprising multiple people, such as an institution or an association that has a collective goal and is linked to an external environment. Its design specifies how goals are subdivided and reflected in subdivisions of the organization. An organization can be visualized in an organigram. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Hierarchies of positions, multi-positions, and sub-organizations&lt;br /&gt;
* Maps roles to positions&lt;br /&gt;
* Definition of levels of collaboration if sharing the same roles&lt;br /&gt;
* Derives an organigram of each hierarchy to be rendered at runtime&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Services =&lt;br /&gt;
&lt;br /&gt;
== Authentication ==&lt;br /&gt;
&lt;br /&gt;
Authentication is a process that ensures and confirms a user’s identity. To do so, a user needs to provide some sort of proof of identity that the system understands and trust. There are multiple ways (realms) to do this: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Security specific data access object, software component that talks to a backend data source.&lt;br /&gt;
* If you have usernames and password in LDAP, then you would have an LDAP Realm that would communicate with LDAP. &lt;br /&gt;
* Active Directory&lt;br /&gt;
* Kerberos&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
More features:* Remember-me&lt;br /&gt;
* Forgot password&lt;br /&gt;
* Protection against brute-force attacks&lt;br /&gt;
* MD5 salted and encrypted passwords&lt;br /&gt;
* Protection against debugging&lt;br /&gt;
* First commissioning support&lt;br /&gt;
* Session management&lt;br /&gt;
* Simple Single Sign-On (SSO)&lt;br /&gt;
* AES 128 encrypted cookie support&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Persistence ==&lt;br /&gt;
&lt;br /&gt;
Persistence service enabling small data-sources as well as large-scale installations:* XA data-source support for distributed transactions&lt;br /&gt;
* Built in global transaction manager&lt;br /&gt;
* JNDI Service&lt;br /&gt;
* Built in support for local databases&lt;br /&gt;
* Supports database providers from Application Server implementations like WebSphere or WebLogic Server&lt;br /&gt;
* Provides JDBC and catalog data for Mondrian&lt;br /&gt;
* Supports all compatible databases to EclipseLink like:&lt;br /&gt;
** Oracle&lt;br /&gt;
** Oracle JDBC&lt;br /&gt;
** MySQL&lt;br /&gt;
** PostgreSQL&lt;br /&gt;
** Derby&lt;br /&gt;
** DB2&lt;br /&gt;
** DB2 (mainframe)&lt;br /&gt;
** Microsoft SQL Server&lt;br /&gt;
** Sybase&lt;br /&gt;
** Informix&lt;br /&gt;
** SQL Anywhere&lt;br /&gt;
** HSQL&lt;br /&gt;
** SAP HANA&lt;br /&gt;
** H2&lt;br /&gt;
** Firebird&lt;br /&gt;
** Microsoft Access&lt;br /&gt;
** Attunity&lt;br /&gt;
** Cloudscape&lt;br /&gt;
** DBase&lt;br /&gt;
** PointBase&lt;br /&gt;
** TimesTen&lt;br /&gt;
** Symfoware&lt;br /&gt;
** MaxDB&lt;br /&gt;
&lt;br /&gt;
== Translation ==&lt;br /&gt;
&lt;br /&gt;
There is a centralized translation service in OS.bee. It collects all property files from models created by a DSL and supplies all internal translations that the Software Factory needs. The number of supported languages is unlimited; however the internal translations deployed for the moment are limited to English, French, and German. More languages can be ordered. In case a translation key occurs multiple times, the “best” translation for this key is automatically selected. The “best” translation is evaluated by the maximum Levinshtein distance from the translation key.&lt;br /&gt;
&lt;br /&gt;
== Metadata ==&lt;br /&gt;
&lt;br /&gt;
OS.bee holds all model-data at runtime so that all programs can reference them. Renderers that do not need code will interpret these model to do their work. So even in the Function-Library it is possible to take the current modeling into account.&lt;br /&gt;
&lt;br /&gt;
== Theme Resources and CSS ==&lt;br /&gt;
&lt;br /&gt;
As usual for web-frontend applications, cascaded style sheets describe the look and feel. Custom CSS can be loaded from outside, or any modification can be made once the appropriate bundle is downloaded. CSS is compiled from a SCCS template with a pre-processor. The advantage of using SCSS is that you can use variables and therefore create different looks with just a hand-full of variables. OS.bee comes with 3 different theme variants that can be selected in the user profile. Resources like images, html pages and icons are available per theme and thus adjustable to the used color scheme.&lt;/div&gt;</summary>
		<author><name>Riegel</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=OS.bee_peripherals_for_JavaPOS&amp;diff=3463</id>
		<title>OS.bee peripherals for JavaPOS</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=OS.bee_peripherals_for_JavaPOS&amp;diff=3463"/>
				<updated>2018-09-26T12:41:30Z</updated>
		
		<summary type="html">&lt;p&gt;Riegel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== OS.bee peripherals for JavaPOS ==&lt;br /&gt;
&lt;br /&gt;
OS.bee integrates the framework JavaPOS [http://www.javapos.com/]. Purpose of this framework is to abstract peripheral units like printers, displays, dispenser from their physical properties and to present an application interface to Java applications. For each unit it is necessary to define its abstract properties and communication protocol. Each vendor of pripheral units for POS systems comes with his own configuration tool. But all of them end up with a xml file describing all peripheral units available to a single OS.bee application server. The name of this configuration file is not important. For the moment it is not possible to mix units of different vendors in a single file as they put their physical hardware information inside the file while using their individal setup program. OS.bee can only use a single xml file at a time. The path must be entered in OS.bee preferences of IDE using Window-&amp;gt;Preferences-&amp;gt;OSBP Application Configuration. Don't forget to select the right product to be configured.&lt;br /&gt;
&lt;br /&gt;
[[File:JavaPOS_Preferences.png]]&lt;br /&gt;
&lt;br /&gt;
=== Epson Peripheral Units ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Installation prerequisites ====&lt;br /&gt;
&lt;br /&gt;
First download the following zip and unpack it in a suitable directory.&lt;br /&gt;
[[http://download.osbee.org/downloads/drivers/epson/EPSON_JavaPOS_ADK_1143.zip Epson Windows Driver and Setup Download]]&lt;br /&gt;
From the directory EPSON_JavaPOS_ADK_1143 start the executable EPSON_JavaPOS_1.14.3.exe and follow the instructions of the program.&lt;br /&gt;
&lt;br /&gt;
If you follow the default settings of the installer, you end up with a directory structure epson/JavaPOS/SetupPOS. Here you start SetupPOS.bat as Administrator. For every peripheral unit you want to connect to OS.bee you must add an entry according to the requirements noted in the respective vendor's documentation. This program creates a xml file. The name is not important, but must be entered in the preferences in OS.bee under &amp;quot;External Data&amp;quot; (see section above).&lt;br /&gt;
&lt;br /&gt;
Here is a sample xml file for a typical Epson configuration:&lt;br /&gt;
[[http://download.osbee.org/downloads/drivers/epson/pos.xml Epson Sample Configuration Download]]&lt;br /&gt;
&lt;br /&gt;
==== Integration in OS.bee ====&lt;br /&gt;
&lt;br /&gt;
How to use the Epson peripheral devices is described in [[Peripheral_Devices]]&lt;br /&gt;
&lt;br /&gt;
=== WACOM Signature pad ===&lt;br /&gt;
&lt;br /&gt;
OS.bee Software Factory supports the use of [http://www.wacom.com/en-gb/enterprise/business-solutions/hardware/signature-pads signature pads] from Wacom.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Installation prequistits ====&lt;br /&gt;
&lt;br /&gt;
Supported OS: '''Windows'''&lt;br /&gt;
&lt;br /&gt;
You have to install the driver for the signature pad on the machine you want to run the OS.bee application.&lt;br /&gt;
&lt;br /&gt;
[[http://download.osbee.org/downloads/drivers/wacom/Wacom-STU-Driver-5.2.1.0.exe Windows Driver Installer Download]]&lt;br /&gt;
&lt;br /&gt;
[[http://download.osbee.org/downloads/drivers/wacom/Wacom-STU-SDK-2.8.0.msi Windows SDK Installer Download]]&lt;br /&gt;
&lt;br /&gt;
[[http://download.osbee.org/downloads/drivers/wacom/Wacom-STU-SDK2.8.0.tar.bz2 Lunix SDK Installer Download]]&lt;br /&gt;
&lt;br /&gt;
Make a new path entry in your computer's enivronment variables and add a path element for the Wacom SDK java directory according to your processor architecture. As an example: '''C:\Program Files (x86)\Wacom STU SDK\Java\jar\x64'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Integration in OS.bee ====&lt;br /&gt;
&lt;br /&gt;
How to use the signature pad for the payment process is described in [[OS.bee_Signature_Pad]].&lt;br /&gt;
&lt;br /&gt;
== Copyright Notice ==&lt;br /&gt;
{{Copyright Notice}}&lt;/div&gt;</summary>
		<author><name>Riegel</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=OS.bee_Signature_Pad&amp;diff=3459</id>
		<title>OS.bee Signature Pad</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=OS.bee_Signature_Pad&amp;diff=3459"/>
				<updated>2018-09-26T12:30:42Z</updated>
		
		<summary type="html">&lt;p&gt;Riegel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Signature Pad ==&lt;br /&gt;
&lt;br /&gt;
'''Using signature pad for payment process is a new cash payment method.'''&lt;br /&gt;
&lt;br /&gt;
=== Basic Functionalities ===&lt;br /&gt;
&lt;br /&gt;
Basic functionalities of display on signature pad are:&lt;br /&gt;
* Show the advertising slide images on signature pad one after another according to de slide delay predefined in Company( in our example, for company FoodMart, the slide delay is defined as 2000, which means 2 seconds).&lt;br /&gt;
* When the customer signature is required, the display image on the signature pad will switch to the signing image, additional 3 buttons will be shown under the signing image: done, cancle and delete.(these labels could be translated with I18n)&lt;br /&gt;
&lt;br /&gt;
==== Functionalities after signing ====&lt;br /&gt;
The following image is the signing image in our example.&lt;br /&gt;
&lt;br /&gt;
[[File:signing_image.jpeg|600px]]&lt;br /&gt;
&lt;br /&gt;
* Customer signs, and then select “'''done'''”, the signature of customer will be saved as a blob-mapping data, saving as thousands of points with x,y, pressure... the display of signature pad switch to the advertising slide images.&lt;br /&gt;
* Customer signs, and then select “'''cancle'''”, the signature process will be broken, switch to the advertising slide images.&lt;br /&gt;
* Customer signs, and then select “'''clear'''”, the signature will be deleted, and waiting for the next action of customer.&lt;br /&gt;
&lt;br /&gt;
=== Technical changes in DSL model ===&lt;br /&gt;
&lt;br /&gt;
==== changes in entity ====&lt;br /&gt;
&lt;br /&gt;
# New '''entity''' '''AdvertisingSlide''' :&lt;br /&gt;
#:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
entity AdvertisingSlide extends BaseUUID {&lt;br /&gt;
	persistenceUnit &amp;quot;businessdata&amp;quot;&lt;br /&gt;
	domainKey String slide&lt;br /&gt;
	var Date showFrom properties( key=&amp;quot;Date&amp;quot; value=&amp;quot;Minute&amp;quot;)&lt;br /&gt;
	var Date showUntil properties(key=&amp;quot;Date&amp;quot; value=&amp;quot;Minute&amp;quot;)&lt;br /&gt;
	var BlobMapping image&lt;br /&gt;
	ref Company company opposite slides&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
#* '''slide''': name of this slide.&lt;br /&gt;
#* '''ShowFrom''' and '''showUntil''': valid date interval for this slide.&lt;br /&gt;
#* '''Image''': save this slide as a blobmapping data.&lt;br /&gt;
#* '''Company''': which company using this slide.&lt;br /&gt;
# New properties and references in '''entity''' '''Company''':&lt;br /&gt;
#:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
entity Company extends BaseUUID { &lt;br /&gt;
	. . .&lt;br /&gt;
	var BlobMapping signingImage&lt;br /&gt;
	var int slideDelay properties(key=&amp;quot;Slider&amp;quot; value=&amp;quot;1000:10000&amp;quot;)&lt;br /&gt;
	ref AdvertisingSlide[*] slides opposite company properties( key = &amp;quot;Table&amp;quot; value = &amp;quot;&amp;quot; )&lt;br /&gt;
	. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
#* '''signingImage''': save the signing image as a blobmapping data. signingImage is the image which will be displayed on signature pad when customer signes. &lt;br /&gt;
#* '''slideDelay''': define the time delay for changing advertising slide image, unit is ms, and this value should be between 1000 and 10000, which means the delay should be between 1 second and 10 seconds.&lt;br /&gt;
#* '''Slides''': define a set of advertisingSlides for this company. These advertising slide images will be displayed one after another on the signature pad when no actions on it.&lt;br /&gt;
# A new '''Cash Payment Method''' &amp;quot;'''signaturePad'''&amp;quot;: If the customer selects this payment way, the signature pad will be active.&lt;br /&gt;
# New '''entity''' '''CashPaymentPenData''' :&lt;br /&gt;
#:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
entity CashPaymentPenData extends BaseUUID {&lt;br /&gt;
	persistenceUnit &amp;quot;businessdata&amp;quot;&lt;br /&gt;
	var int rdy&lt;br /&gt;
	var int sw&lt;br /&gt;
	var int pressure&lt;br /&gt;
	var int x&lt;br /&gt;
	var int y&lt;br /&gt;
	ref CashPayment payment opposite penData&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
#* The signature image will be saved as a '''CashPaymentPenData'''. All this relevant data value is generated from WACOM(mark of signature pad) software. The important values are pressure amount and cursor coordinates x and y. They will be saved save as a blob-mapping data, which including thousands of points with all the important values.&lt;br /&gt;
# Some new properties and references are defined in '''entity''' '''CashPayment''': &lt;br /&gt;
#:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
entity CashPayment extends BaseUUID {&lt;br /&gt;
. . .&lt;br /&gt;
	var BlobMapping signatureBitmap&lt;br /&gt;
	ref cascade CashPaymentPenData[*] penData opposite payment &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== changes in statemachine ====&lt;br /&gt;
# New '''payment method''' &amp;quot;'''payment signing'''&amp;quot;&lt;br /&gt;
#: It is defined as a new '''statemachine event''' &amp;quot;'''onMethod7'''&amp;quot;.&lt;br /&gt;
#: A new '''peripheral''' is defined in statemachine for it:&lt;br /&gt;
#:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
peripheral PeripheralControl {&lt;br /&gt;
	. . .&lt;br /&gt;
	signaturePad SignaturePad&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
#: A new '''button''' is defined for it in '''paypad''' of statemachine:&lt;br /&gt;
#:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
keypad PaymentPad event trigger {&lt;br /&gt;
	. . .&lt;br /&gt;
	button method7 image &amp;quot;&amp;quot; event onMethod7 &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# New '''keypad''' &amp;quot;'''PluPad'''&amp;quot;&lt;br /&gt;
#:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
keypad PluPad event identity from 1 until 6  named &amp;quot;plu&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Changes in statemachine '''state''' &amp;quot;'''IDLE'''&amp;quot;: &lt;br /&gt;
#:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
trigger onStartUp&lt;br /&gt;
actions transition LOCKED{&lt;br /&gt;
	. . .&lt;br /&gt;
	closeSignaturePad @SignaturePad&lt;br /&gt;
	. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Changes in statemachine '''state''' &amp;quot;'''LOCKED'''&amp;quot;:&lt;br /&gt;
#:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
trigger onOk&lt;br /&gt;
actions transition ATTENTIVE{&lt;br /&gt;
	. . .&lt;br /&gt;
	operation loadPLU()&lt;br /&gt;
	operation loadPaymentMethods() &lt;br /&gt;
	store &amp;quot;false&amp;quot; with paymentterminal.open&lt;br /&gt;
	paymentOpen host dto cashregister.payment_ip port dto cashregister.payment_port @VeriFone&lt;br /&gt;
	labelSignaturePad okLabel &amp;quot;done&amp;quot; clearLabel &amp;quot;clear&amp;quot; cancelLabel &amp;quot;cancel&amp;quot; @SignaturePad&lt;br /&gt;
	store &amp;quot;false&amp;quot; with signaturepad.open&lt;br /&gt;
	openSignaturePad @SignaturePad&lt;br /&gt;
	. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Changes in statemachine '''state''' &amp;quot;'''ATTENTIVE'''&amp;quot;, new '''trigger''' &amp;quot;'''onSignaturePadOpen'''&amp;quot; for signaturePad:&lt;br /&gt;
#:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
trigger onSignaturePadOpen&lt;br /&gt;
actions {&lt;br /&gt;
	store &amp;quot;true&amp;quot; with signaturepad.open&lt;br /&gt;
	operation initImages()&lt;br /&gt;
	idleSignaturePad @SignaturePad&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Changes in statemachine '''state''' &amp;quot;'''PAYMENT'''&amp;quot;:&lt;br /&gt;
#:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
trigger onBack&lt;br /&gt;
actions transition ATTENTIVE {&lt;br /&gt;
	idleSignaturePad @SignaturePad&lt;br /&gt;
	. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&lt;br /&gt;
#:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
trigger onMethod1 onMethod2 onMethod3 onMethod4 onMethod5 onMethod6 onMethod7&lt;br /&gt;
actions {&lt;br /&gt;
	. . .&lt;br /&gt;
	transition SIGNATURE_AUTHORIZATION guard useSignaturePad {&lt;br /&gt;
		visible signaturePadDisplay&lt;br /&gt;
		invisible money&lt;br /&gt;
		invisible method&lt;br /&gt;
		invisible functions&lt;br /&gt;
		store event with paymentMethod.last&lt;br /&gt;
		captureSignaturePad @SignaturePad&lt;br /&gt;
	}&lt;br /&gt;
	idleSignaturePad @SignaturePad&lt;br /&gt;
	. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# In statemachine new '''state''' &amp;quot;'''SIGNATURE_AUTHORIZATION'''&amp;quot;:&lt;br /&gt;
#:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
state SIGNATURE_AUTHORIZATION {&lt;br /&gt;
	triggers {&lt;br /&gt;
		trigger onSignatureOk&lt;br /&gt;
 		actions transition PAYMENT {&lt;br /&gt;
 			idleSignaturePad @SignaturePad&lt;br /&gt;
			operation dopayment(retrieve from paymentMethod.last)&lt;br /&gt;
			operation computePayed()&lt;br /&gt;
			set &amp;quot;0&amp;quot; @paymentGiven&lt;br /&gt;
			clearDevice LineDisplay&lt;br /&gt;
			lineDisplayTextAt translate &amp;quot;total&amp;quot; row 0 column 0 @LineDisplay&lt;br /&gt;
			lineDisplayTextAt translate &amp;quot;remain&amp;quot; row 0 column 10 @LineDisplay&lt;br /&gt;
			lineDisplayTextAt function getPaymentTotal() row 1 column 0 @LineDisplay&lt;br /&gt;
			lineDisplayTextAt function getPaymentRemain() row 1 column 10 @LineDisplay&lt;br /&gt;
			invisible paymentTerminalDisplay&lt;br /&gt;
			invisible signaturePadDisplay&lt;br /&gt;
			visible money&lt;br /&gt;
			visible method&lt;br /&gt;
			visible functions&lt;br /&gt;
			operation givenChanged()&lt;br /&gt;
			transition PRINT_SLIP guard isPayed {&lt;br /&gt;
				invisible total&lt;br /&gt;
				invisible logout&lt;br /&gt;
				invisible PaymentPad&lt;br /&gt;
				invisible paymentFields&lt;br /&gt;
				invisible functions&lt;br /&gt;
				invisible numbers&lt;br /&gt;
				invisible plu&lt;br /&gt;
				invisible money&lt;br /&gt;
				invisible method&lt;br /&gt;
				invisible filterToggle&lt;br /&gt;
				visible receipt&lt;br /&gt;
				visible printreceipt&lt;br /&gt;
				visible noreceipt&lt;br /&gt;
				visible paymentFields&lt;br /&gt;
				clearDevice LineDisplay&lt;br /&gt;
				lineDisplayTextAt translate &amp;quot;total&amp;quot; row 0 column 0 @LineDisplay&lt;br /&gt;
				lineDisplayTextAt translate &amp;quot;change&amp;quot; row 0 column 10 @LineDisplay&lt;br /&gt;
				lineDisplayTextAt function getPaymentTotal() row 1 column 0 @LineDisplay&lt;br /&gt;
				lineDisplayTextAt function getPaymentChange() row 1 column 10 @LineDisplay&lt;br /&gt;
				transition OPEN_DRAWER guard mustOpenDrawer {&lt;br /&gt;
					openDrawer CashDrawer&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		trigger onSignatureCancel&lt;br /&gt;
		actions transition PAYMENT {&lt;br /&gt;
			idleSignaturePad @SignaturePad&lt;br /&gt;
			invisible signaturePadDisplay&lt;br /&gt;
			visible money&lt;br /&gt;
			visible method&lt;br /&gt;
			visible functions&lt;br /&gt;
			operation givenChanged()&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== changes in functionlibrary ====&lt;br /&gt;
&lt;br /&gt;
# New '''guard function''' &amp;quot;'''useSignaturePad'''&amp;quot; in functionlibrary DSL :&lt;br /&gt;
#:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
guard useSignaturePad(IStateMachine stateMachine) {&lt;br /&gt;
	var slip =  stateMachine.get(&amp;quot;cashslip&amp;quot;) as CashSlipDto&lt;br /&gt;
		stateMachine.set(&amp;quot;signaturePadDisplayResolution&amp;quot; , 5)&lt;br /&gt;
		stateMachine.set(&amp;quot;signaturePadDisplay&amp;quot;, slip.register.store.company.signingImage)&lt;br /&gt;
	var paymentMethodDto = stateMachine.getStorage(stateMachine.getLastTrigger(), &amp;quot;dto&amp;quot;) as CashPaymentMethodDto&lt;br /&gt;
	var isopen = &amp;quot;true&amp;quot;.equals(stateMachine.getStorage(&amp;quot;signaturepad&amp;quot;, &amp;quot;open&amp;quot;) as String)&lt;br /&gt;
	return paymentMethodDto.signaturePad &amp;amp;&amp;amp; isopen&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# New '''operation''' &amp;quot;'''initImages'''&amp;quot; in functionlibrary DSL:&lt;br /&gt;
#:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
operation initImages(IStateMachine stateMachine, Object [] params) {&lt;br /&gt;
	var cashregister = stateMachine.get(&amp;quot;cashregister&amp;quot;) as CashRegisterDto&lt;br /&gt;
	if(cashregister === null) {return false}&lt;br /&gt;
	stateMachine.set(&amp;quot;CustomerDisplayImage&amp;quot;, cashregister.store.company.companyImage)&lt;br /&gt;
	stateMachine.set(&amp;quot;signatureSlideDelay&amp;quot;, cashregister.store.company.slideDelay)&lt;br /&gt;
	stateMachine.set(&amp;quot;signatureCaptureImage&amp;quot;, cashregister.store.company.signingImage)&lt;br /&gt;
	for(slide:cashregister.store.company.slides) {&lt;br /&gt;
		stateMachine.set(&amp;quot;signatureAddSlide&amp;quot;, slide.image)&lt;br /&gt;
	}	&lt;br /&gt;
	return true&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# New method in '''operation''' &amp;quot;'''dopayment()'''&amp;quot; for save the signature image:&lt;br /&gt;
#:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
var spIsOpen = &amp;quot;true&amp;quot;.equals(stateMachine.getStorage(&amp;quot;signaturepad&amp;quot;, &amp;quot;open&amp;quot;) as String)&lt;br /&gt;
if(spIsOpen &amp;amp;&amp;amp; paymentMethodDto.signaturePad) {&lt;br /&gt;
	var signatureBlob = stateMachine.get(&amp;quot;SignatureBlob&amp;quot;) as String&lt;br /&gt;
	paymentPosition.signatureBitmap = signatureBlob&lt;br /&gt;
	stateMachine.set(&amp;quot;signaturePadDisplay&amp;quot;, signatureBlob)&lt;br /&gt;
	var data = stateMachine.get(&amp;quot;PenData&amp;quot;) as List&amp;lt;PenData&amp;gt;&lt;br /&gt;
'''Bold text'''	if(data !== null) {&lt;br /&gt;
		for(pData:data) {&lt;br /&gt;
			var penDataDto 		= new CashPaymentPenDataDto&lt;br /&gt;
			penDataDto.rdy 		= pData.rdy&lt;br /&gt;
			penDataDto.sw 		= pData.sw&lt;br /&gt;
			penDataDto.pressure	= pData.pressure&lt;br /&gt;
			penDataDto.x 		= pData.x&lt;br /&gt;
			penDataDto.y 		= pData.y&lt;br /&gt;
			paymentPosition.addToPenData(penDataDto)&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Maintenance with OS.bee App===&lt;br /&gt;
&lt;br /&gt;
►In '''menu--&amp;gt; Master data--&amp;gt;Company''', the detail of '''entity''' &amp;quot;'''Company'''&amp;quot; can be set:&lt;br /&gt;
[[File:menu_company.png|center]]&lt;br /&gt;
&lt;br /&gt;
You could see 4 block on this page, and the two upper block is important for us to maintenance the master data of company.&lt;br /&gt;
[[File:page_company_4parts.png|1200px|center]]&lt;br /&gt;
* The upper left block show the main elements of company. &lt;br /&gt;
** The first tab is &amp;quot;'''Company'''&amp;quot;, you can choose the company name and set slide signing image and slide delay for this company here. &lt;br /&gt;
*: [[File:tab_Company.png|600px|center]]&lt;br /&gt;
*: If you do not see the magnifier search icon after company name field, please click it to change.&lt;br /&gt;
*: ►With the magnifier search icon, you will get the whole suggestion company name  in the insert field after you insert only the first letter of the company name.&lt;br /&gt;
*: [[File:tab_Company_search.png|600px|center]]&lt;br /&gt;
** The third tab &amp;quot;'''Slides'''&amp;quot; shows all advertising slides, and if you click one of them, the detail of this advertising slide (entity AdvertisingSlides) will be shown on the third tab “Slides” of the upper right block.&lt;br /&gt;
*: [[File:tab_Slides_dialog_Slides.png|600px|center]]&lt;br /&gt;
*: You can see all the advertising slides for the company in this tab &amp;quot;'''Slides'''&amp;quot;.&lt;br /&gt;
*: [[File:tab_Slides.png|600px|center]]&lt;br /&gt;
*: You can maintenance detail of the selected advertising slide in the dialog &amp;quot;'''Slides'''&amp;quot;.&lt;br /&gt;
*: [[File:dialog_Slides.png|600px|center]]&lt;br /&gt;
&lt;br /&gt;
►In '''menu--&amp;gt; Master data--&amp;gt;Cash register data''', you can maintenance the details about payment method:&lt;br /&gt;
[[File:menu_cash_register_data.png|center]]&lt;br /&gt;
&lt;br /&gt;
You could see 5 parts on this page. &lt;br /&gt;
[[File:page_cash_register_data_5parts.png|600px|center]]&lt;br /&gt;
* You can select one of the store in the ''upper left table'', e.g.: store 1. Then the detail of this store will be shown in the first tab “'''Mstore'''” of the ''upper middle block''. You could edit it here in this dialog. &lt;br /&gt;
*: [[File:tab_Mstore.png|600px|center]]&lt;br /&gt;
** Select the 4th tab “'''Registers'''” of the ''upper middle block'', the detail of all registers for the selected store will be shown in this table. &lt;br /&gt;
*: [[File:tab_Registers.png|600px|center]]&lt;br /&gt;
*: Select one of the registers and the detail of this register will be shown in the first tab “'''Cash register dialog'''” of the ''upper right block''. You can create new register and edit it in this dialog. &lt;br /&gt;
*:►Pay attention: your IP should be register before you use the signature pad .&lt;br /&gt;
*: [[File:tab_cash_register_dialog.png|600px|center]]&lt;br /&gt;
*:  You can see all the cash payment methods for the store in the ''bottom left block''.&lt;br /&gt;
*: [[File:table_Cash_payment_method.png|600px|center]]&lt;br /&gt;
*:  You can maintenance detail of the selected cash payment method in the ''bottom right block''.&lt;br /&gt;
*: [[File:dialog_Cash_payment_method.png|600px|center]]&lt;br /&gt;
&lt;br /&gt;
== Copyright Notice ==&lt;br /&gt;
{{Copyright Notice}}&lt;/div&gt;</summary>
		<author><name>Riegel</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=OS.bee_Customer_Display&amp;diff=3458</id>
		<title>OS.bee Customer Display</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=OS.bee_Customer_Display&amp;diff=3458"/>
				<updated>2018-09-11T08:36:30Z</updated>
		
		<summary type="html">&lt;p&gt;Riegel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Customer Display ==&lt;br /&gt;
&lt;br /&gt;
The latest version of the Statemachine DSL (Finite State-Machine) covers the synchronization of external (slave) browsers to a main (master) browser connected to an OS.bee server. The requirement was mainly inspired by the need of a customer display for the OS.bee POS application OS.pos. In this context it is required parts of the main screen's data which is shared on the slave browser working as a display.&lt;br /&gt;
&lt;br /&gt;
Multiple displays can be connected to a master just by using a pattern on the address line of the slave-browser:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  http://{server_host-name}/osbpdisplay/#{host-name_of_the_master}-{DisplayName_as_defined_in_the_ui_model} &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
► example: http://dv999.compex.de:8081/osbpdisplay/#dv888.compex.de-CustomerDisplay&lt;br /&gt;
&lt;br /&gt;
* '''''http://dv999.compex.de:8081/osbp''''': this part as same as the address in main display, including server host-name and port number.&lt;br /&gt;
* '''''display/''''':  this part is the slave name, you can attach one or more slaves on the same master.&lt;br /&gt;
* '''''#dv888.compex.de-''''': this part is master machine. &lt;br /&gt;
* '''''CustomerDisplay''''': this part is the display name which is used by this slave, and it is as same as the display name which is defined in the UI model.&lt;br /&gt;
&lt;br /&gt;
=== Important prerequisite ===&lt;br /&gt;
In order to use external displays you must add the bundle ''org.eclipse.osbp.display'' to your product's launch configuration and set auto-start to true.&lt;br /&gt;
&lt;br /&gt;
[[File:display_autostart.png|800px]]&lt;br /&gt;
&lt;br /&gt;
=== Technical changes in DSL model ===&lt;br /&gt;
&lt;br /&gt;
==== changes in dto ====&lt;br /&gt;
* New '''dto''' &amp;quot;'''CustomerDisplayDto'''&amp;quot;:&lt;br /&gt;
*:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
dto CustomerDisplayDto {&lt;br /&gt;
	var double totalAmount&lt;br /&gt;
	var boolean left&lt;br /&gt;
	var String message&lt;br /&gt;
	var boolean right&lt;br /&gt;
	var BlobMapping image&lt;br /&gt;
	ref CashSlipDto slip&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** '''totalAmount''' : total amount of all cash position.&lt;br /&gt;
** '''left''' &amp;amp; '''right''' : boolean value, define if this part will be shown on display.&lt;br /&gt;
** '''image''' : any image which will be shown on th display&lt;br /&gt;
** '''slip''' : reference the cash slip dto.&lt;br /&gt;
&lt;br /&gt;
==== changes in UI====&lt;br /&gt;
* New '''UI''':&lt;br /&gt;
*:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
display Customer {&lt;br /&gt;
	rootType CustomerDisplayDto&lt;br /&gt;
	datasource main:CustomerDisplayDto&lt;br /&gt;
	datasource img:BlobConverter&lt;br /&gt;
	horizontalLayout {&lt;br /&gt;
		verticalLayout left {&lt;br /&gt;
			textfield(i18n noCaption readonly) message&lt;br /&gt;
			table(i18n noCaption) slip {&lt;br /&gt;
				scrollToBottom&lt;br /&gt;
				type CashPositionDto&lt;br /&gt;
				columns {&lt;br /&gt;
					column quantity&lt;br /&gt;
					column product.sku&lt;br /&gt;
					column product.product_name&lt;br /&gt;
					column price&lt;br /&gt;
					column amount&lt;br /&gt;
				}&lt;br /&gt;
				sort {&lt;br /&gt;
					column now asc&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			align fill-left&lt;br /&gt;
			form(styles &amp;quot;os-cash-total&amp;quot;) {&lt;br /&gt;
				decimalField(precision= 2 readonly) totalAmount&lt;br /&gt;
			}&lt;br /&gt;
			bind [this.message].value &amp;lt;-- img.input&lt;br /&gt;
			bind [this.slip].collection &amp;lt;-- main.slip.positions&lt;br /&gt;
			bind [this.totalAmount].value &amp;lt;-- main.totalAmount&lt;br /&gt;
		}&lt;br /&gt;
		verticalLayout right {&lt;br /&gt;
			image info&lt;br /&gt;
			bind img.input &amp;lt;-- main.^image&lt;br /&gt;
			bind [this.info].resource &amp;lt;-- img.output&lt;br /&gt;
		}&lt;br /&gt;
		bind [this.left].visible &amp;lt;-- main.left&lt;br /&gt;
		bind [this.right].visible &amp;lt;-- main.right&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** In this '''display''' &amp;quot;'''customer'''&amp;quot;, we define in the 2 parts(left part &amp;amp; right part), if they will be shown and what will be shown in UI.&lt;br /&gt;
&lt;br /&gt;
==== changes in Functionlibrary ====&lt;br /&gt;
* New lines in '''operation''' &amp;quot;'''initImages'''&amp;quot; &amp;amp; '''operation''' &amp;quot;'''conputeTotal'''&amp;quot; :&lt;br /&gt;
*:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
operation initImages(IStateMachine stateMachine, Object [] params) {&lt;br /&gt;
	. . .&lt;br /&gt;
stateMachine.set(&amp;quot;CustomerDisplayImage&amp;quot;, cashregister.store.company.companyImage)&lt;br /&gt;
. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** In operation &amp;quot;'''initImages'''&amp;quot;, the image of customerDisplay could be set.&lt;br /&gt;
*:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
operation computeTotal(IStateMachine stateMachine) {&lt;br /&gt;
	. . .&lt;br /&gt;
	stateMachine.set(&amp;quot;CustomerDisplayTotalAmount&amp;quot;, amount);&lt;br /&gt;
	. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** In operation &amp;quot;'''computeTotal'''&amp;quot;, the total amount of CustomerDisplay could be calculated and set.&lt;br /&gt;
&lt;br /&gt;
==== changes in Statemachine ====&lt;br /&gt;
Some new keywords are introduced for this new functionality:&lt;br /&gt;
:* &amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt; display &amp;lt;DisplayName&amp;gt; using &amp;lt;DTOName&amp;gt; &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:* &amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt; dto &amp;lt;DTOAlias&amp;gt;  type &amp;lt;DTOName&amp;gt; attach &amp;lt;DisplayName&amp;gt; &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:* &amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt; displayText text &amp;quot;some text&amp;quot; @&amp;lt;DisplayName&amp;gt; to &amp;lt;DTOAttribute&amp;gt; &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The references of a DTO that is attached to a display are always synchronized across all connected displays. Single fields must be synchronized by '''displayText'''.&lt;br /&gt;
&lt;br /&gt;
:► e.g.: &lt;br /&gt;
:*&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
display CustomerDisplay using CustomerDisplayDto&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:*&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
dto cashslip type CashSlipDto attach CustomerDisplay&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:*&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
displayText text &amp;quot;locked&amp;quot; @CustomerDisplay to message&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:► The referenced DTO must be the rootType of the Display definition in the ui model.&lt;br /&gt;
&lt;br /&gt;
Now I will show the changes in statmachine:&lt;br /&gt;
# New '''events''' &amp;quot;'''dataProvider DataControl'''&amp;quot;:&lt;br /&gt;
#:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
dataProvider DataControl { &lt;br /&gt;
	. . .&lt;br /&gt;
dto cashslip type CashSlipDto attach CustomerDisplay&lt;br /&gt;
	dto customerDisplay type CustomerDisplayDto&lt;br /&gt;
	. . . &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# New '''events''' &amp;quot;'''peripheral PeripheralControl'''&amp;quot;:&lt;br /&gt;
#:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
peripheral PeripheralControl {&lt;br /&gt;
	. . .&lt;br /&gt;
	display CustomerDisplay using CustomerDisplay &lt;br /&gt;
	. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Setting for customerDisplay, in '''state''' &amp;quot;'''IDLE'''&amp;quot;: &lt;br /&gt;
#:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
trigger onStartUp&lt;br /&gt;
actions transition LOCKED{&lt;br /&gt;
	. . .&lt;br /&gt;
displayText false @CustomerDisplay to ^left&lt;br /&gt;
displayText true @CustomerDisplay to ^right&lt;br /&gt;
. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Setting for customerDisplay, in '''state''' &amp;quot;'''LOCKED'''&amp;quot;:&lt;br /&gt;
#:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
trigger onOk&lt;br /&gt;
actions transition ATTENTIVE{&lt;br /&gt;
	. . .&lt;br /&gt;
displayText true @CustomerDisplay to ^left&lt;br /&gt;
displayText false @CustomerDisplay to ^right&lt;br /&gt;
 . . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Copyright Notice ==&lt;br /&gt;
{{Copyright Notice}}&lt;/div&gt;</summary>
		<author><name>Riegel</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=File:Display_autostart.png&amp;diff=3457</id>
		<title>File:Display autostart.png</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=File:Display_autostart.png&amp;diff=3457"/>
				<updated>2018-09-11T08:35:45Z</updated>
		
		<summary type="html">&lt;p&gt;Riegel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Riegel</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=OS.bee_Customer_Display&amp;diff=3456</id>
		<title>OS.bee Customer Display</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=OS.bee_Customer_Display&amp;diff=3456"/>
				<updated>2018-09-11T08:35:19Z</updated>
		
		<summary type="html">&lt;p&gt;Riegel: /* Important prerequisite */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Customer Display ==&lt;br /&gt;
&lt;br /&gt;
The latest version of the Statemachine DSL (Finite State-Machine) covers the synchronization of external (slave) browsers to a main (master) browser connected to an OS.bee server. The requirement was mainly inspired by the need of a customer display for the OS.bee POS application OS.pos. In this context it is required parts of the main screen's data which is shared on the slave browser working as a display.&lt;br /&gt;
&lt;br /&gt;
Multiple displays can be connected to a master just by using a pattern on the address line of the slave-browser:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  http://{server_host-name}/osbpdisplay/#{host-name_of_the_master}-{DisplayName_as_defined_in_the_ui_model} &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
► example: http://dv999.compex.de:8081/osbpdisplay/#dv888.compex.de-CustomerDisplay&lt;br /&gt;
&lt;br /&gt;
* '''''http://dv999.compex.de:8081/osbp''''': this part as same as the address in main display, including server host-name and port number.&lt;br /&gt;
* '''''display/''''':  this part is the slave name, you can attach one or more slaves on the same master.&lt;br /&gt;
* '''''#dv888.compex.de-''''': this part is master machine. &lt;br /&gt;
* '''''CustomerDisplay''''': this part is the display name which is used by this slave, and it is as same as the display name which is defined in the UI model.&lt;br /&gt;
&lt;br /&gt;
=== Important prerequisite ===&lt;br /&gt;
In order to use external displays you must add the bundle ''org.eclipse.osbp.display'' to your product's launch configuration and set auto-start to true.&lt;br /&gt;
[[File:display_autostart.png|600px]]&lt;br /&gt;
&lt;br /&gt;
=== Technical changes in DSL model ===&lt;br /&gt;
&lt;br /&gt;
==== changes in dto ====&lt;br /&gt;
* New '''dto''' &amp;quot;'''CustomerDisplayDto'''&amp;quot;:&lt;br /&gt;
*:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
dto CustomerDisplayDto {&lt;br /&gt;
	var double totalAmount&lt;br /&gt;
	var boolean left&lt;br /&gt;
	var String message&lt;br /&gt;
	var boolean right&lt;br /&gt;
	var BlobMapping image&lt;br /&gt;
	ref CashSlipDto slip&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** '''totalAmount''' : total amount of all cash position.&lt;br /&gt;
** '''left''' &amp;amp; '''right''' : boolean value, define if this part will be shown on display.&lt;br /&gt;
** '''image''' : any image which will be shown on th display&lt;br /&gt;
** '''slip''' : reference the cash slip dto.&lt;br /&gt;
&lt;br /&gt;
==== changes in UI====&lt;br /&gt;
* New '''UI''':&lt;br /&gt;
*:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
display Customer {&lt;br /&gt;
	rootType CustomerDisplayDto&lt;br /&gt;
	datasource main:CustomerDisplayDto&lt;br /&gt;
	datasource img:BlobConverter&lt;br /&gt;
	horizontalLayout {&lt;br /&gt;
		verticalLayout left {&lt;br /&gt;
			textfield(i18n noCaption readonly) message&lt;br /&gt;
			table(i18n noCaption) slip {&lt;br /&gt;
				scrollToBottom&lt;br /&gt;
				type CashPositionDto&lt;br /&gt;
				columns {&lt;br /&gt;
					column quantity&lt;br /&gt;
					column product.sku&lt;br /&gt;
					column product.product_name&lt;br /&gt;
					column price&lt;br /&gt;
					column amount&lt;br /&gt;
				}&lt;br /&gt;
				sort {&lt;br /&gt;
					column now asc&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			align fill-left&lt;br /&gt;
			form(styles &amp;quot;os-cash-total&amp;quot;) {&lt;br /&gt;
				decimalField(precision= 2 readonly) totalAmount&lt;br /&gt;
			}&lt;br /&gt;
			bind [this.message].value &amp;lt;-- img.input&lt;br /&gt;
			bind [this.slip].collection &amp;lt;-- main.slip.positions&lt;br /&gt;
			bind [this.totalAmount].value &amp;lt;-- main.totalAmount&lt;br /&gt;
		}&lt;br /&gt;
		verticalLayout right {&lt;br /&gt;
			image info&lt;br /&gt;
			bind img.input &amp;lt;-- main.^image&lt;br /&gt;
			bind [this.info].resource &amp;lt;-- img.output&lt;br /&gt;
		}&lt;br /&gt;
		bind [this.left].visible &amp;lt;-- main.left&lt;br /&gt;
		bind [this.right].visible &amp;lt;-- main.right&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** In this '''display''' &amp;quot;'''customer'''&amp;quot;, we define in the 2 parts(left part &amp;amp; right part), if they will be shown and what will be shown in UI.&lt;br /&gt;
&lt;br /&gt;
==== changes in Functionlibrary ====&lt;br /&gt;
* New lines in '''operation''' &amp;quot;'''initImages'''&amp;quot; &amp;amp; '''operation''' &amp;quot;'''conputeTotal'''&amp;quot; :&lt;br /&gt;
*:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
operation initImages(IStateMachine stateMachine, Object [] params) {&lt;br /&gt;
	. . .&lt;br /&gt;
stateMachine.set(&amp;quot;CustomerDisplayImage&amp;quot;, cashregister.store.company.companyImage)&lt;br /&gt;
. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** In operation &amp;quot;'''initImages'''&amp;quot;, the image of customerDisplay could be set.&lt;br /&gt;
*:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
operation computeTotal(IStateMachine stateMachine) {&lt;br /&gt;
	. . .&lt;br /&gt;
	stateMachine.set(&amp;quot;CustomerDisplayTotalAmount&amp;quot;, amount);&lt;br /&gt;
	. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** In operation &amp;quot;'''computeTotal'''&amp;quot;, the total amount of CustomerDisplay could be calculated and set.&lt;br /&gt;
&lt;br /&gt;
==== changes in Statemachine ====&lt;br /&gt;
Some new keywords are introduced for this new functionality:&lt;br /&gt;
:* &amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt; display &amp;lt;DisplayName&amp;gt; using &amp;lt;DTOName&amp;gt; &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:* &amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt; dto &amp;lt;DTOAlias&amp;gt;  type &amp;lt;DTOName&amp;gt; attach &amp;lt;DisplayName&amp;gt; &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:* &amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt; displayText text &amp;quot;some text&amp;quot; @&amp;lt;DisplayName&amp;gt; to &amp;lt;DTOAttribute&amp;gt; &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The references of a DTO that is attached to a display are always synchronized across all connected displays. Single fields must be synchronized by '''displayText'''.&lt;br /&gt;
&lt;br /&gt;
:► e.g.: &lt;br /&gt;
:*&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
display CustomerDisplay using CustomerDisplayDto&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:*&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
dto cashslip type CashSlipDto attach CustomerDisplay&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:*&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
displayText text &amp;quot;locked&amp;quot; @CustomerDisplay to message&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:► The referenced DTO must be the rootType of the Display definition in the ui model.&lt;br /&gt;
&lt;br /&gt;
Now I will show the changes in statmachine:&lt;br /&gt;
# New '''events''' &amp;quot;'''dataProvider DataControl'''&amp;quot;:&lt;br /&gt;
#:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
dataProvider DataControl { &lt;br /&gt;
	. . .&lt;br /&gt;
dto cashslip type CashSlipDto attach CustomerDisplay&lt;br /&gt;
	dto customerDisplay type CustomerDisplayDto&lt;br /&gt;
	. . . &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# New '''events''' &amp;quot;'''peripheral PeripheralControl'''&amp;quot;:&lt;br /&gt;
#:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
peripheral PeripheralControl {&lt;br /&gt;
	. . .&lt;br /&gt;
	display CustomerDisplay using CustomerDisplay &lt;br /&gt;
	. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Setting for customerDisplay, in '''state''' &amp;quot;'''IDLE'''&amp;quot;: &lt;br /&gt;
#:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
trigger onStartUp&lt;br /&gt;
actions transition LOCKED{&lt;br /&gt;
	. . .&lt;br /&gt;
displayText false @CustomerDisplay to ^left&lt;br /&gt;
displayText true @CustomerDisplay to ^right&lt;br /&gt;
. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Setting for customerDisplay, in '''state''' &amp;quot;'''LOCKED'''&amp;quot;:&lt;br /&gt;
#:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
trigger onOk&lt;br /&gt;
actions transition ATTENTIVE{&lt;br /&gt;
	. . .&lt;br /&gt;
displayText true @CustomerDisplay to ^left&lt;br /&gt;
displayText false @CustomerDisplay to ^right&lt;br /&gt;
 . . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Copyright Notice ==&lt;br /&gt;
{{Copyright Notice}}&lt;/div&gt;</summary>
		<author><name>Riegel</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=OS.bee_Customer_Display&amp;diff=3455</id>
		<title>OS.bee Customer Display</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=OS.bee_Customer_Display&amp;diff=3455"/>
				<updated>2018-09-11T08:34:10Z</updated>
		
		<summary type="html">&lt;p&gt;Riegel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Customer Display ==&lt;br /&gt;
&lt;br /&gt;
The latest version of the Statemachine DSL (Finite State-Machine) covers the synchronization of external (slave) browsers to a main (master) browser connected to an OS.bee server. The requirement was mainly inspired by the need of a customer display for the OS.bee POS application OS.pos. In this context it is required parts of the main screen's data which is shared on the slave browser working as a display.&lt;br /&gt;
&lt;br /&gt;
Multiple displays can be connected to a master just by using a pattern on the address line of the slave-browser:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  http://{server_host-name}/osbpdisplay/#{host-name_of_the_master}-{DisplayName_as_defined_in_the_ui_model} &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
► example: http://dv999.compex.de:8081/osbpdisplay/#dv888.compex.de-CustomerDisplay&lt;br /&gt;
&lt;br /&gt;
* '''''http://dv999.compex.de:8081/osbp''''': this part as same as the address in main display, including server host-name and port number.&lt;br /&gt;
* '''''display/''''':  this part is the slave name, you can attach one or more slaves on the same master.&lt;br /&gt;
* '''''#dv888.compex.de-''''': this part is master machine. &lt;br /&gt;
* '''''CustomerDisplay''''': this part is the display name which is used by this slave, and it is as same as the display name which is defined in the UI model.&lt;br /&gt;
&lt;br /&gt;
=== Important prerequisite ===&lt;br /&gt;
In order to use external displays you must add the bundle ''org.eclipse.osbp.display'' to your product's launch configuration and set auto-start to true.&lt;br /&gt;
[[File:display_autostart.jpg]]&lt;br /&gt;
&lt;br /&gt;
=== Technical changes in DSL model ===&lt;br /&gt;
&lt;br /&gt;
==== changes in dto ====&lt;br /&gt;
* New '''dto''' &amp;quot;'''CustomerDisplayDto'''&amp;quot;:&lt;br /&gt;
*:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
dto CustomerDisplayDto {&lt;br /&gt;
	var double totalAmount&lt;br /&gt;
	var boolean left&lt;br /&gt;
	var String message&lt;br /&gt;
	var boolean right&lt;br /&gt;
	var BlobMapping image&lt;br /&gt;
	ref CashSlipDto slip&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** '''totalAmount''' : total amount of all cash position.&lt;br /&gt;
** '''left''' &amp;amp; '''right''' : boolean value, define if this part will be shown on display.&lt;br /&gt;
** '''image''' : any image which will be shown on th display&lt;br /&gt;
** '''slip''' : reference the cash slip dto.&lt;br /&gt;
&lt;br /&gt;
==== changes in UI====&lt;br /&gt;
* New '''UI''':&lt;br /&gt;
*:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
display Customer {&lt;br /&gt;
	rootType CustomerDisplayDto&lt;br /&gt;
	datasource main:CustomerDisplayDto&lt;br /&gt;
	datasource img:BlobConverter&lt;br /&gt;
	horizontalLayout {&lt;br /&gt;
		verticalLayout left {&lt;br /&gt;
			textfield(i18n noCaption readonly) message&lt;br /&gt;
			table(i18n noCaption) slip {&lt;br /&gt;
				scrollToBottom&lt;br /&gt;
				type CashPositionDto&lt;br /&gt;
				columns {&lt;br /&gt;
					column quantity&lt;br /&gt;
					column product.sku&lt;br /&gt;
					column product.product_name&lt;br /&gt;
					column price&lt;br /&gt;
					column amount&lt;br /&gt;
				}&lt;br /&gt;
				sort {&lt;br /&gt;
					column now asc&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			align fill-left&lt;br /&gt;
			form(styles &amp;quot;os-cash-total&amp;quot;) {&lt;br /&gt;
				decimalField(precision= 2 readonly) totalAmount&lt;br /&gt;
			}&lt;br /&gt;
			bind [this.message].value &amp;lt;-- img.input&lt;br /&gt;
			bind [this.slip].collection &amp;lt;-- main.slip.positions&lt;br /&gt;
			bind [this.totalAmount].value &amp;lt;-- main.totalAmount&lt;br /&gt;
		}&lt;br /&gt;
		verticalLayout right {&lt;br /&gt;
			image info&lt;br /&gt;
			bind img.input &amp;lt;-- main.^image&lt;br /&gt;
			bind [this.info].resource &amp;lt;-- img.output&lt;br /&gt;
		}&lt;br /&gt;
		bind [this.left].visible &amp;lt;-- main.left&lt;br /&gt;
		bind [this.right].visible &amp;lt;-- main.right&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** In this '''display''' &amp;quot;'''customer'''&amp;quot;, we define in the 2 parts(left part &amp;amp; right part), if they will be shown and what will be shown in UI.&lt;br /&gt;
&lt;br /&gt;
==== changes in Functionlibrary ====&lt;br /&gt;
* New lines in '''operation''' &amp;quot;'''initImages'''&amp;quot; &amp;amp; '''operation''' &amp;quot;'''conputeTotal'''&amp;quot; :&lt;br /&gt;
*:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
operation initImages(IStateMachine stateMachine, Object [] params) {&lt;br /&gt;
	. . .&lt;br /&gt;
stateMachine.set(&amp;quot;CustomerDisplayImage&amp;quot;, cashregister.store.company.companyImage)&lt;br /&gt;
. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** In operation &amp;quot;'''initImages'''&amp;quot;, the image of customerDisplay could be set.&lt;br /&gt;
*:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
operation computeTotal(IStateMachine stateMachine) {&lt;br /&gt;
	. . .&lt;br /&gt;
	stateMachine.set(&amp;quot;CustomerDisplayTotalAmount&amp;quot;, amount);&lt;br /&gt;
	. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** In operation &amp;quot;'''computeTotal'''&amp;quot;, the total amount of CustomerDisplay could be calculated and set.&lt;br /&gt;
&lt;br /&gt;
==== changes in Statemachine ====&lt;br /&gt;
Some new keywords are introduced for this new functionality:&lt;br /&gt;
:* &amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt; display &amp;lt;DisplayName&amp;gt; using &amp;lt;DTOName&amp;gt; &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:* &amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt; dto &amp;lt;DTOAlias&amp;gt;  type &amp;lt;DTOName&amp;gt; attach &amp;lt;DisplayName&amp;gt; &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:* &amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt; displayText text &amp;quot;some text&amp;quot; @&amp;lt;DisplayName&amp;gt; to &amp;lt;DTOAttribute&amp;gt; &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The references of a DTO that is attached to a display are always synchronized across all connected displays. Single fields must be synchronized by '''displayText'''.&lt;br /&gt;
&lt;br /&gt;
:► e.g.: &lt;br /&gt;
:*&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
display CustomerDisplay using CustomerDisplayDto&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:*&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
dto cashslip type CashSlipDto attach CustomerDisplay&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:*&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
displayText text &amp;quot;locked&amp;quot; @CustomerDisplay to message&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:► The referenced DTO must be the rootType of the Display definition in the ui model.&lt;br /&gt;
&lt;br /&gt;
Now I will show the changes in statmachine:&lt;br /&gt;
# New '''events''' &amp;quot;'''dataProvider DataControl'''&amp;quot;:&lt;br /&gt;
#:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
dataProvider DataControl { &lt;br /&gt;
	. . .&lt;br /&gt;
dto cashslip type CashSlipDto attach CustomerDisplay&lt;br /&gt;
	dto customerDisplay type CustomerDisplayDto&lt;br /&gt;
	. . . &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# New '''events''' &amp;quot;'''peripheral PeripheralControl'''&amp;quot;:&lt;br /&gt;
#:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
peripheral PeripheralControl {&lt;br /&gt;
	. . .&lt;br /&gt;
	display CustomerDisplay using CustomerDisplay &lt;br /&gt;
	. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Setting for customerDisplay, in '''state''' &amp;quot;'''IDLE'''&amp;quot;: &lt;br /&gt;
#:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
trigger onStartUp&lt;br /&gt;
actions transition LOCKED{&lt;br /&gt;
	. . .&lt;br /&gt;
displayText false @CustomerDisplay to ^left&lt;br /&gt;
displayText true @CustomerDisplay to ^right&lt;br /&gt;
. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Setting for customerDisplay, in '''state''' &amp;quot;'''LOCKED'''&amp;quot;:&lt;br /&gt;
#:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
trigger onOk&lt;br /&gt;
actions transition ATTENTIVE{&lt;br /&gt;
	. . .&lt;br /&gt;
displayText true @CustomerDisplay to ^left&lt;br /&gt;
displayText false @CustomerDisplay to ^right&lt;br /&gt;
 . . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Copyright Notice ==&lt;br /&gt;
{{Copyright Notice}}&lt;/div&gt;</summary>
		<author><name>Riegel</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=OS.bee_Software_Factory_Unique_Selling_Propositions&amp;diff=3226</id>
		<title>OS.bee Software Factory Unique Selling Propositions</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=OS.bee_Software_Factory_Unique_Selling_Propositions&amp;diff=3226"/>
				<updated>2018-07-03T08:42:14Z</updated>
		
		<summary type="html">&lt;p&gt;Riegel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Abstract =&lt;br /&gt;
&lt;br /&gt;
OS.bee is a low-code model-driven software-factory, using over 20 Domain Specific Languages (DSL) to generate large-scale business web-applications. Each DSL contains a grammar for a required application-layer. A DSL hides complexity from successors, thereby enabling parallel modelling of domain requirements by multiple designers as they don’t need to know the domain logic they build upon. A model created with a DSL creates executable code, structured data and configuration settings or is interpreted by a renderer during runtime. The language of each DSL uses a grammar that makes the created model easy to understand and forms a requirement specification on its layer. The overall hierarchy can be browsed through at any time and gives a good understanding of the whole application in nearly natural English language. A DSL can also be studied by its syntactical graph. The creation of a model is a guided process through the syntax graph where the designer benefits from content assistance, code completion, quick fix, syntax colorizing, outline, formatting and validation. Many DSLs define metadata to be used by subsequent DSL to increase the leverage of definitions at a basic level. All element names defined by a DSL are automatically extracted to localization files for translation to open foreign markets for the resulting application. The ratio between the generated lines of code versus the numbers of lines in a model is 8 on average. Development speed improves by a similar factor. Dependencies between models reveal inconsistencies immediately while modifying and prevent generating code until these are resolved. Therefore turnaround cycles are short, errors are easy to discover and prototypes materialize in a very short time. Some DSL generate against famous open-source frameworks like EclipseLink, Smooks, Mondrian, Vaadin or jBPM thus enabling non-developers to use complex frameworks without deeper knowledge of their API. OS.bee inherits the features of the embedded frameworks and makes them easy to exploit for specialists of a domain not necessarily being software developer.&lt;br /&gt;
&lt;br /&gt;
= DSL Modeling =&lt;br /&gt;
&lt;br /&gt;
== Persistence ==&lt;br /&gt;
&lt;br /&gt;
Persistence refers to object and process characteristics that continue to exist even after the process that created it ceases or the machine it is running on is powered off. When an object or state is created and needs to be persistent, it is saved in a non-volatile storage location, like a hard drive, versus a temporary file or volatile random access memory.&lt;br /&gt;
&lt;br /&gt;
=== Data-type ===&lt;br /&gt;
&lt;br /&gt;
A data type is a classification that specifies which type of value a variable has and what type of mathematical, relational or logical operations can be applied to it without causing an error. Data types also hold metadata for higher-level DSLs so they can apply additional functionality to a field using this data type.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Primitive Types (int, double, etc.)&lt;br /&gt;
* Object Types (String, Date, etc.)&lt;br /&gt;
* Blob&lt;br /&gt;
** Store and retrieve any document or image type in binary form&lt;br /&gt;
* Auto-sizing Images&lt;br /&gt;
** Additionally stores images of definable size to experience better performance while rendering&lt;br /&gt;
* Formatted types&lt;br /&gt;
** Dates and times in any localized form&lt;br /&gt;
** Dates and times in any format (time only, date only, short and long forms, custom pattern, etc.)&lt;br /&gt;
** Currencies in any localized form&lt;br /&gt;
* Validated types with adjustable severity message&lt;br /&gt;
** Date in past/future&lt;br /&gt;
** Not null&lt;br /&gt;
** Not duplicate&lt;br /&gt;
** Range values&lt;br /&gt;
** Min/max length&lt;br /&gt;
* Slider types&lt;br /&gt;
** Min/max values&lt;br /&gt;
* Masked types&lt;br /&gt;
** Number, Hexadecimal, Capitalized&lt;br /&gt;
** Input pattern (e.g. Phone Numbers (###) ###-####)&lt;br /&gt;
** Password&lt;br /&gt;
* Suggestion types&lt;br /&gt;
** While typing some characters, a sorted list of suggestions pops up for selection&lt;br /&gt;
* Programmable Converters&lt;br /&gt;
** Text-to-Image&lt;br /&gt;
** Number-to-Text/Image&lt;br /&gt;
** Value-to-CSS Style&lt;br /&gt;
** Units of measurement&lt;br /&gt;
* Rich text editor using HTML markups&lt;br /&gt;
* Text area &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Entity ===&lt;br /&gt;
&lt;br /&gt;
An entity (-type) is a model of metadata for a single unique object in the real world. For example a person, organization, object type, or concept about which information is stored. Together with its attributes (or properties) it describes information that is being mastered. An entity typically corresponds to one or several related tables in database. An attribute is a characteristic or trait of an entity that describes the entity, for example, the Person entity type has the Date of Birth attribute.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Simple Entity&lt;br /&gt;
* Mapped super-classes&lt;br /&gt;
** Complement attributes in every entity using this&lt;br /&gt;
* Inheritance&lt;br /&gt;
** Specialized classes for special purpose&lt;br /&gt;
* References and their opposites&lt;br /&gt;
* References with constraints&lt;br /&gt;
* Embeddable beans&lt;br /&gt;
* Number generators UUID or ID&lt;br /&gt;
* Separated persistence-units capable of using multiple databases simultaneously&lt;br /&gt;
* All multiplicities (0..1, 0..n,1..1,1..n,*)&lt;br /&gt;
* Indexes unique and non-unique&lt;br /&gt;
* Validated uniqueness&lt;br /&gt;
* Domain-key annotation for lookups&lt;br /&gt;
* Methods for calculated attributes&lt;br /&gt;
* Lifecycle controlled method invoking (by PostLoad, PrePersist, etc.)&lt;br /&gt;
* Affected changes listeners&lt;br /&gt;
* Localizable Enumerations with images&lt;br /&gt;
* Creation and last modification information&lt;br /&gt;
* Transient data&lt;br /&gt;
* Synthetic attributes built by lifecycle methods either transient or persistent&lt;br /&gt;
* Historicized data&lt;br /&gt;
* Temporal data&lt;br /&gt;
* Versioned data&lt;br /&gt;
* Definable Runtime data filter&lt;br /&gt;
* Programmable Validators&lt;br /&gt;
* Nested Filter attributions over multiple references&lt;br /&gt;
* Abstraction of database vendor specific implementations&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Data transfer object (DTO) ===&lt;br /&gt;
&lt;br /&gt;
A DTO is an object that carries data between processes. DTOs are simple objects that do not contain any business logic but may contain serialization and deserialization mechanisms for transferring data.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Independent nested data container&lt;br /&gt;
* Automatically generated for entities&lt;br /&gt;
* Automatically mapped by entity data&lt;br /&gt;
* Editable sub- or supersets for entities&lt;br /&gt;
* Transient data container&lt;br /&gt;
* Nested objects automatically synchronized&lt;br /&gt;
* Nested properties access through dot expressions&lt;br /&gt;
* Used for services, processes, functions and renderers&lt;br /&gt;
* Dirty state aware&lt;br /&gt;
* Access restrictions on DTO and property granularity controlled by security layer&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== DTO Service ===&lt;br /&gt;
&lt;br /&gt;
A DTO service abstracts and encapsulates all access to the data source. It manages the connection with the data source to obtain and store data and implements the access mechanism required to work with the data source. The data source could be a persistent store like an RDBMS, or a business service accessed via REST or SOAP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Data storage and retrieval suitable for DTO&lt;br /&gt;
* Nested Transactions and Lock-modes&lt;br /&gt;
* Global transactions&lt;br /&gt;
* Object Oriented Query engine&lt;br /&gt;
* Low level Java Persistence Query Language method declarations (e.g. getTotal(), getAverage(), …)&lt;br /&gt;
* Injectable and declarative service&lt;br /&gt;
* Used for services, processes, functions and renderers&lt;br /&gt;
* Session scoped Entity Manager&lt;br /&gt;
* Thread safe persistence-unit bound Entity Manager Factory&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Data-Interchange ===&lt;br /&gt;
&lt;br /&gt;
Data Interchange is the endpoint-to-endpoint exchange of business documents in a standard electronic format between business partners or computer systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Smooks and FreeMarker implementation&lt;br /&gt;
* Nested entity import- and export-paths&lt;br /&gt;
* Localized formatters on data&lt;br /&gt;
* Supports encoding&lt;br /&gt;
* XML and CSV formats&lt;br /&gt;
* All EDI messages&lt;br /&gt;
* Automatically set export- and import markers for database&lt;br /&gt;
* Filtered exports&lt;br /&gt;
* Bulk insert/update&lt;br /&gt;
* Progress bar&lt;br /&gt;
* Generated import and export dashboard&lt;br /&gt;
* Generated lookup queries to embed relational data&lt;br /&gt;
* Merge or persist external data&lt;br /&gt;
* Import images of different mime-types into blobs via filename pattern&lt;br /&gt;
* Usage of expressions&lt;br /&gt;
* Free attribute mappings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Signal ===&lt;br /&gt;
&lt;br /&gt;
Signal processes events coming from file-systems. If a file that matches a given filename pattern is created, modified or deleted then an event is received and the modelled actions will be called. Signal also emits events for recurring things like a certain weekday and time is reached and executes the modelled actions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* File watcher for all file activities working on all operating systems&lt;br /&gt;
* Free filename pattern to watch for&lt;br /&gt;
&lt;br /&gt;
* Trigger Data-Interchange&lt;br /&gt;
* Definable export or import job-chain&lt;br /&gt;
* Synchronously or asynchronously execution (depending on import relationship) &lt;br /&gt;
* Quartz implementation for scheduled Data-Interchange export-jobs&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Entity-Mock ===&lt;br /&gt;
&lt;br /&gt;
Mock objects are simulated objects that mimic the behavior of real objects in controlled ways. A programmer typically creates a mock object to test the behavior of some other object, in much the same way that a car designer uses a crash test dummy to simulate the dynamic behavior of a human in vehicle impacts.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Generates fake data looking realistic&lt;br /&gt;
&lt;br /&gt;
* Mapping of roles to positions and multi-positions&lt;br /&gt;
&lt;br /&gt;
* Rule-based data composition (e.g. email address)&lt;br /&gt;
* Rule-based attribute generators for every data-type from data composition, or &lt;br /&gt;
** Randomly&lt;br /&gt;
** Ranges&lt;br /&gt;
** Picks from a given list&lt;br /&gt;
** Dates in the past with offset and limit (for birthdays)&lt;br /&gt;
** Dates in the future with offset and limit&lt;br /&gt;
* Composes objects from rule-based attribute generators (e.g. a person, a company, etc.)&lt;br /&gt;
* Composes object-trees from composed objects&lt;br /&gt;
* Creates relationships between objects using a given probability&lt;br /&gt;
* Creates mass data (e.g. sales data)&lt;br /&gt;
* Imports fixed data via Data-Interchange and embeds it&lt;br /&gt;
* Used mainly for quick-setup applications using a H2 database&lt;br /&gt;
* Exposes mock data services to be executed before any login-attempt&lt;br /&gt;
* Persists into all supported database products&lt;br /&gt;
* Can be executed at every server-start or once&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Business intelligence ==&lt;br /&gt;
&lt;br /&gt;
Business Intelligence (BI) refers to technologies, applications and practices for the collection, integration, analysis, and presentation of business information. The purpose of Business Intelligence is to support better business decision making. Essentially, Business Intelligence systems are data-driven Decision Support Systems (DSS). Business Intelligence is sometimes used interchangeably with briefing books, report and query tools and executive information systems.&lt;br /&gt;
&lt;br /&gt;
=== Cube ===&lt;br /&gt;
&lt;br /&gt;
A cube is a method of storing data in a multidimensional form, generally for reporting purposes. In cubes, data (measures) are categorized by dimensions. Cubes are pre-summarized across dimensions to drastically improve query time over relational databases. The query language used to interact and perform tasks with cubes is multidimensional expressions (MDX).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Mondrian OLAP for MDX queries implementation&lt;br /&gt;
* Cubes, dimensions, hierarchies, levels, members, and measures&lt;br /&gt;
* Defines a multi-dimensional database&lt;br /&gt;
* Contains a logical model, and a mapping of this model onto the physical entity model &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== DataMart ===&lt;br /&gt;
&lt;br /&gt;
A data mart is a subject-oriented archive that stores data and uses the retrieved set of information to assist and support the requirements involved within a particular business function or department. Data marts improve end-user response time by allowing users to have access to the specific type of data they need to view most often by providing the data in a way that supports the collective view of a group of users.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Common layer for data-warehouse queries&lt;br /&gt;
* Simplification of any kind of query against all available data sources&lt;br /&gt;
* Tailored queries and aggregates for different interest-groups&lt;br /&gt;
* Definition of complex multidimensional expressions (MDX) with a simple grammar&lt;br /&gt;
* Sophisticated analytic functions easy to use&lt;br /&gt;
* Online analytical processing built in&lt;br /&gt;
* Access to runtime data of the Business Process management engine&lt;br /&gt;
* Multi-purpose results for processes, reports, score cards and charts&lt;br /&gt;
* Definable navigation trees (join-paths)&lt;br /&gt;
* Definable single- and multi-selection filters on any leaf of the query tree&lt;br /&gt;
* Access restrictions on entity and attribute granularity controlled by security layer&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Function-Library ===&lt;br /&gt;
&lt;br /&gt;
A function-library is a collection of non-volatile resources used by other DSLs. It is a collection of implementations of behavior, written in Xbase, which has a well-defined interface by which the behavior is invoked. Library code is organized in such a way that it can be used by multiple programs that have no connection to each other, in other words it is completely independent of the calling logic. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Xbase implementation&lt;br /&gt;
* UOMo implementation&lt;br /&gt;
* Creates operational objects and methods&lt;br /&gt;
* Grouped by application field&lt;br /&gt;
** Converter for model-presentation conversions&lt;br /&gt;
*** Value to image&lt;br /&gt;
*** Value to value&lt;br /&gt;
*** Value to style (background color, text color, font-style, etc.)&lt;br /&gt;
*** Value to unit of measurement based value&lt;br /&gt;
*** Between measurement systems and unit of measurement families&lt;br /&gt;
** State-Machine&lt;br /&gt;
*** Operations&lt;br /&gt;
*** Functions&lt;br /&gt;
*** Guards&lt;br /&gt;
*** Full access to state-machine controls&lt;br /&gt;
** Toolbar Action&lt;br /&gt;
*** Can execute validation (enable/disable operation)&lt;br /&gt;
*** Execute any operation&lt;br /&gt;
** Validation on DTO&lt;br /&gt;
** Business logic implementation for BPM&lt;br /&gt;
*** Functions callable in system tasks&lt;br /&gt;
*** Ratings for gateways&lt;br /&gt;
*** Tests for gateways&lt;br /&gt;
** Calculations e.g. for&lt;br /&gt;
*** Currencies&lt;br /&gt;
*** Lengths&lt;br /&gt;
*** Areas&lt;br /&gt;
** Posting operations&lt;br /&gt;
* Exposes injectable and declarative service&lt;br /&gt;
* Store and retrieve data from DTO&lt;br /&gt;
* Full access to all JVM objects&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== State-Machine ===&lt;br /&gt;
&lt;br /&gt;
A finite-state machine (FSM) is a mathematical model of computation. It is an abstract machine that can be in exactly one of a finite number of states at any given time. The FSM can change from one state to another in response to an event. The change from one state to another is called a transition. An FSM is defined by a list of its states, its initial state, and the conditions for each transition. These conditions are called guards as they guard the transition from unwanted invocation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Implementation of business behavior&lt;br /&gt;
* Defines states and their transitions&lt;br /&gt;
* Transitions are triggered by events&lt;br /&gt;
* Transitions are guarded by functions from Function-Library&lt;br /&gt;
* Actions to be executed before and after transitioning from Function-Library&lt;br /&gt;
* Has things to control&lt;br /&gt;
** Database objects (DTO)&lt;br /&gt;
** Database filters&lt;br /&gt;
** Visibility or enabling of&lt;br /&gt;
*** Buttons (UI)&lt;br /&gt;
*** Layouts (UI)&lt;br /&gt;
*** Other components (UI)&lt;br /&gt;
** Peripheral devices (interfaces JavaPOS)&lt;br /&gt;
*** Printers&lt;br /&gt;
*** Line displays&lt;br /&gt;
*** Cash drawers&lt;br /&gt;
*** Payment terminals&lt;br /&gt;
*** Signature pads&lt;br /&gt;
** Slave browsers (external displays, etc.)&lt;br /&gt;
* Receives events from&lt;br /&gt;
** Buttons clicked&lt;br /&gt;
** UI selections&lt;br /&gt;
** Peripherals (printer out of paper, etc.)&lt;br /&gt;
** Schedulers&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== BLiP (Business Logic implementation Platform) ===&lt;br /&gt;
&lt;br /&gt;
BLiP focuses on improving corporate performance by managing business processes (BPM), business rules and business logic (Function-Library). &amp;lt;span style=&amp;quot;background-color:#ffffff;color:#222222;&amp;quot;&amp;gt;&amp;amp;nbsp;It is a disciplined approach to identify, design, execute, document, measure, monitor, and control both automated and non-automated business processes to achieve consistent, targeted results aligned with an organization’s strategic goals. BPM involves the deliberate and collaborative definition, improvement, innovation, and management of end-to-end business processes that drive business results, create value, and enable an organization to meet its business objectives with more agility. BPM enables an enterprise to align its business processes to its business strategy, leading to effective overall company performance through improvements of specific work activities either within a specific department, across the enterprise, or between organizations.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Implements jBPM&lt;br /&gt;
* Integrates a BPMN editor at design-time&lt;br /&gt;
* Connects tasks of BPM to business logic of Function-Library&lt;br /&gt;
* Controls sequence-flow through business logic of Function-Library&lt;br /&gt;
* Stores and retrieves process save-points&lt;br /&gt;
* Logs all process activities of system and user&lt;br /&gt;
* Exposes BPM data and events to UI elements&lt;br /&gt;
* Stores and retrieves workload data using DTO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Presentation ==&lt;br /&gt;
&lt;br /&gt;
The presentation layer ensures that the communications that pass through it are in the appropriate form for the recipient application. It is responsible for the delivery and formatting of information to the application layer for further processing or display. It relieves the application layer of concern regarding syntactical differences in data representation within the end-user systems.&lt;br /&gt;
&lt;br /&gt;
=== Table ===&lt;br /&gt;
&lt;br /&gt;
A table is a data structure that organizes information into rows and columns. It can be used to both store and display data in a structured format.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Editable cells&lt;br /&gt;
* Scorecard elements&lt;br /&gt;
** Rule-based colorizing of cell background and textcolor&lt;br /&gt;
** Mixed in rule-based icons&lt;br /&gt;
** Rule-based styling of cells&lt;br /&gt;
** Rule-based tooltips&lt;br /&gt;
* Data from DataMart or DTO&lt;br /&gt;
* Pivot presentation&lt;br /&gt;
* Multidimensional presentation on nested tab-sheets&lt;br /&gt;
* Filtering, sorting, swapping and hiding of columns&lt;br /&gt;
* Stores swapping and hiding per user&lt;br /&gt;
* 3 different row numbering modes&lt;br /&gt;
* Row selection synchronizes other views in scope&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Chart ===&lt;br /&gt;
&lt;br /&gt;
A chart is a diagram, picture, or graph which is intended to make information easier to understand. It is a symbolic representation of information according to some visualization technique.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Multiple data series with selectable colorizing&lt;br /&gt;
* Series switchable from legend&lt;br /&gt;
* Bar, line, pie, donut, bubble and gauge presentation&lt;br /&gt;
* Animated, stacked, shaded and xy-swapped charts&lt;br /&gt;
* Zoom and trend-line function&lt;br /&gt;
* Tooltips for series and data points with absolute value&lt;br /&gt;
* Selectable positioning relative to cursor for tooltips&lt;br /&gt;
* Selectable legend placement&lt;br /&gt;
* Collapsible tree presentation on hierarchical data&lt;br /&gt;
* Date axes with customizable formatting&lt;br /&gt;
* Up to 9 individually scalable Y axes&lt;br /&gt;
* Rotated axis text&lt;br /&gt;
* Category rendering either linear, logarithmic, timeline or as pyramid&lt;br /&gt;
* Downloadable SVG image&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Report ===&lt;br /&gt;
&lt;br /&gt;
A document containing information organized in a graphic or tabular form, prepared on ad hoc, periodic, recurring, regular, or as required basis. Reports may refer to specific periods, events, occurrences, or subjects, and are presented in printed form.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Actuate Birt implementation&lt;br /&gt;
* Definition of reusable layout metadata&lt;br /&gt;
** All units of measurement for layouts&lt;br /&gt;
** Definition of fonts and colors&lt;br /&gt;
** Definition of formatters for&lt;br /&gt;
*** Currencies&lt;br /&gt;
*** Date and time&lt;br /&gt;
** Page sizes (A4, A5, etc.)&lt;br /&gt;
** Orientations (Landscape, portrait)&lt;br /&gt;
** Margins&lt;br /&gt;
** Paddings&lt;br /&gt;
** Alignments&lt;br /&gt;
* Output as HTML or PDF&lt;br /&gt;
* Ability to reference multiple DataMarts for header, footer and details&lt;br /&gt;
* Rendering of blob-images&lt;br /&gt;
* External CSS usable&lt;br /&gt;
* Defines grids and cells&lt;br /&gt;
* Direct printing to preselected output medias per user or per location and report&lt;br /&gt;
* Rule-based visibility of cells&lt;br /&gt;
* Aggregates for grouping&lt;br /&gt;
* Rule-based page break&lt;br /&gt;
* Rule-based colorizing and styling&lt;br /&gt;
* URL-based or embedded images&lt;br /&gt;
* Auto-texts (page number etc.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Topology ===&lt;br /&gt;
&lt;br /&gt;
Topology is designed for representing simple geographical features, along with their non-spatial attributes. It includes geo-json points (addresses and locations), line strings (streets, highways and boundaries), polygons (countries, provinces, tracts of land), and multi-part collections of these types.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* D3 implementation&lt;br /&gt;
* Render predefined maps of U.S.A., Germany, Spain… the World&lt;br /&gt;
* Select states, countries, regions or cities to synchronize other views in scope&lt;br /&gt;
* Render geo-json data from blobs to show boundaries of plots of land, buildings or floor plans&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== UI ===&lt;br /&gt;
&lt;br /&gt;
The user interface (UI) is the space where interactions between humans and OS.bee occur. The goal of this interaction is to allow effective operation and control of the machine from the human end, whilst the machine simultaneously feeds back information that aids the operators' decision-making process.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Models interactive views&lt;br /&gt;
* Connects to data-sources of any kind (DTO, Bean, JVM object, etc.)&lt;br /&gt;
* Nests different kinds of layouts to a complex surface (horizontal, vertical, form, grid)&lt;br /&gt;
* Adds components to layouts (buttons, text-fields, tables, images, etc.)&lt;br /&gt;
* Binds components to properties of data-sources&lt;br /&gt;
* Rule-based visibility processor&lt;br /&gt;
* Navigation widgets for small geometry mobile devices&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Dialog ===&lt;br /&gt;
&lt;br /&gt;
The dialog is a composite UI which is composed by either an automatically generated UI or a UI created with means of the UI DSL and actions that are available through a toolbar. It also can be combined with an instance of State-Machine DSL if a sophisticated control over the visibility of components and a definable usage-sequence is needed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Renders interactive views&lt;br /&gt;
* Either references a predefined UI model or a model inferred from a DTO &lt;br /&gt;
* Links the view to a toolbar&lt;br /&gt;
* Renders different modes&lt;br /&gt;
** Normal, to be used inside perspectives&lt;br /&gt;
** Embedded, to be used inside menues&lt;br /&gt;
** Stateful, inside perspectives, and controlled by a state-machine&lt;br /&gt;
** Mobile, to be used on small geometry mobile devices with navigation widgets&lt;br /&gt;
* Renders in 1 to N columns of components&lt;br /&gt;
* Groups components by using entity metadata&lt;br /&gt;
* Renders owning relationships as combo-boxes&lt;br /&gt;
* Renders member relationships as tables on tab-sheets&lt;br /&gt;
* Implements blob up- and downloading&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Perspective ===&lt;br /&gt;
&lt;br /&gt;
A perspective is a visual container for a set of views (parts). These parts exist wholly within the perspective and are not shared. A perspective is also like a page within a book. It exists within a window along with any number of other perspectives and, like a page within a book, only one perspective is visible at any time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Based on the Eclipse 4 application model&lt;br /&gt;
* Presents a 360° view on the task to the user&lt;br /&gt;
* Divides the usable screen area in resizable containers&lt;br /&gt;
* Nests windows, perspective-stacks, perspectives, containers, part-stacks and parts containing views, and toolbars&lt;br /&gt;
* Stores and retrieves resized areas for each user&lt;br /&gt;
* Supports drag and drop&lt;br /&gt;
* Event dispatching system to synchronize data, actions, focus and more between views&lt;br /&gt;
* References all types of views (dialogs, tables, charts, reports …) to set up a dashboard&lt;br /&gt;
* Modifiable layout at runtime using the designer mode for permitted users&lt;br /&gt;
* Connects to user tasks of BPM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Action ===&lt;br /&gt;
&lt;br /&gt;
A toolbar is a set of icons or buttons that are part of a software program's interface or an open window. A toolbar item is an object type that associates a command with a toolbar. This association places an icon on the toolbar in a specific location relative to the other toolbar icons on that toolbar. A command is linked to a specific action and can have a keyboard shortcut specification.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Links action-buttons &lt;br /&gt;
** To business logic of Function-Library to be executed&lt;br /&gt;
*** Synchronously&lt;br /&gt;
*** Asynchronously as background process&lt;br /&gt;
** To Data-Interchange import- or export tasks&lt;br /&gt;
** To BPM start events&lt;br /&gt;
** To actions to trigger&lt;br /&gt;
*** Save, delete, download, print etc.&lt;br /&gt;
*** Advance focus to next or previous part&lt;br /&gt;
* Links action-buttons to business logic of Function-Library to be &lt;br /&gt;
** Enabled&lt;br /&gt;
** Disabled depending on data context&lt;br /&gt;
* Defines commands to control the application and trigger actions&lt;br /&gt;
* Assigns keyboard short-cuts to commands&lt;br /&gt;
* Connects to Message for fail or success messages about executed actions&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Menu ===&lt;br /&gt;
&lt;br /&gt;
A menu is a list of options or commands presented to the user of OS.bee. A menu appears as a tree structure if the popup button besides the user-image is pressed. It is the user-specific point of entry into the OS.bee system. The user menu contains only those items that are needed to perform daily tasks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Combines Perspectives, BPM start events, embedded dialogs and tables, configuration settings and other informative screens to a tree-organized menu&lt;br /&gt;
* Pops up anytime it is needed, and consumes no space on the screen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Message ===&lt;br /&gt;
&lt;br /&gt;
Messages can be defined to improve the user experience as guidance through complex user interactions with the system. For security and monitoring reasons they can be logged.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Defines messages to notify a user about events and usage violations&lt;br /&gt;
* Can be tracked by log entries&lt;br /&gt;
* Placeholders for parametrizing messages&lt;br /&gt;
* Can have a severity&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Security ==&lt;br /&gt;
&lt;br /&gt;
Security's mission is to protect the companies and their assets (know-how, company data, personal and customer data and personal data, etc.) from hackers, crackers and robbers, and economic damage caused by breaches of confidentiality, manipulation, hardware failure and availability prevent the systems.&lt;br /&gt;
&lt;br /&gt;
=== Authorization ===&lt;br /&gt;
&lt;br /&gt;
Authorization is a security mechanism to determine access levels and user privileges related to system resources including files, services, data and application features. This is the process of granting or denying access to a resource which allows the user access to various resources based on the user's identity.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Role-based authorization system&lt;br /&gt;
* Grant access to entities, beans and DTO&lt;br /&gt;
* Grant access to CRUD operations (create, read, update, delete)&lt;br /&gt;
* Grant access to modification of relationships (link, unlink references)&lt;br /&gt;
* Vetoes per attribute for visibility, editability and enabling&lt;br /&gt;
* Grant access to start a process&lt;br /&gt;
* Grant access working on a user task&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Organization ===&lt;br /&gt;
&lt;br /&gt;
An organization is an entity comprising multiple people, such as an institution or an association that has a collective goal and is linked to an external environment. Its design specifies how goals are subdivided and reflected in subdivisions of the organization. An organization can be visualized in an organigram. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Hierarchies of positions, multi-positions, and sub-organizations&lt;br /&gt;
* Maps roles to positions&lt;br /&gt;
* Definition of levels of collaboration if sharing the same roles&lt;br /&gt;
* Derives an organigram of each hierarchy to be rendered at runtime&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Services =&lt;br /&gt;
&lt;br /&gt;
== Authentication ==&lt;br /&gt;
&lt;br /&gt;
Authentication is a process that ensures and confirms a user’s identity. To do so, a user needs to provide some sort of proof of identity that the system understands and trust. There are multiple ways (realms) to do this: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Security specific data access object, software component that talks to a backend data source.&lt;br /&gt;
* If you have usernames and password in LDAP, then you would have an LDAP Realm that would communicate with LDAP. &lt;br /&gt;
* Active Directory&lt;br /&gt;
* Kerberos&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
More features:* Remember-me&lt;br /&gt;
* Forgot password&lt;br /&gt;
* Protection against brute-force attacks&lt;br /&gt;
* MD5 salted and encrypted passwords&lt;br /&gt;
* Protection against debugging&lt;br /&gt;
* First commissioning support&lt;br /&gt;
* Session management&lt;br /&gt;
* Simple Single Sign-On (SSO)&lt;br /&gt;
* AES 128 encrypted cookie support&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Persistence ==&lt;br /&gt;
&lt;br /&gt;
Persistence service enabling small data-sources as well as large-scale installations:* XA data-source support for distributed transactions&lt;br /&gt;
* Built in global transaction manager&lt;br /&gt;
* JNDI Service&lt;br /&gt;
* Built in support for local databases&lt;br /&gt;
* Supports database providers from Application Server implementations like WebSphere or WebLogic Server&lt;br /&gt;
* Provides JDBC and catalog data for Mondrian&lt;br /&gt;
* Supports all compatible databases to EclipseLink like:&lt;br /&gt;
** Oracle&lt;br /&gt;
** Oracle JDBC (8, 9, 10, 11)&lt;br /&gt;
** MySQL&lt;br /&gt;
** PostgreSQL&lt;br /&gt;
** Derby&lt;br /&gt;
** DB2&lt;br /&gt;
** DB2 (mainframe)&lt;br /&gt;
** Microsoft SQL Server&lt;br /&gt;
** Sybase&lt;br /&gt;
** Informix&lt;br /&gt;
** SQL Anywhere&lt;br /&gt;
** HSQL&lt;br /&gt;
** SAP HANA&lt;br /&gt;
** H2&lt;br /&gt;
** Firebird&lt;br /&gt;
** Microsoft Access&lt;br /&gt;
** Attunity&lt;br /&gt;
** Cloudscape&lt;br /&gt;
** DBase&lt;br /&gt;
** PointBase&lt;br /&gt;
** TimesTen&lt;br /&gt;
** Symfoware&lt;br /&gt;
** MaxDB&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Translation ==&lt;br /&gt;
&lt;br /&gt;
There is a centralized translation service in OS.bee. It collects all property files from models created by a DSL and supplies all internal translations that the Software Factory needs. The number of supported languages is unlimited; however the internal translations deployed for the moment are limited to English, French, and German. More languages can be ordered. In case a translation key occurs multiple times, the “best” translation for this key is automatically selected. The “best” translation is evaluated by the maximum Levinshtein distance from the translation key.&lt;br /&gt;
&lt;br /&gt;
== Metadata ==&lt;br /&gt;
&lt;br /&gt;
OS.bee holds all model-data at runtime so that all programs can reference them. Renderers that do not need code will interpret these model to do their work. So even in the Function-Library it is possible to take the current modeling into account.&lt;br /&gt;
&lt;br /&gt;
== Theme Resources and CSS ==&lt;br /&gt;
&lt;br /&gt;
As usual for web-frontend applications, cascaded style sheets describe the look and feel. Custom CSS can be loaded from outside, or any modification can be made once the appropriate bundle is downloaded. CSS is compiled from a SCCS template with a pre-processor. The advantage of using SCSS is that you can use variables and therefore create different looks with just a hand-full of variables. OS.bee comes with 3 different theme variants that can be selected in the user profile. Resources like images, html pages and icons are available per theme and thus adjustable to the used color scheme.&lt;/div&gt;</summary>
		<author><name>Riegel</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=OS.bee_Software_Factory_Unique_Selling_Propositions&amp;diff=3225</id>
		<title>OS.bee Software Factory Unique Selling Propositions</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=OS.bee_Software_Factory_Unique_Selling_Propositions&amp;diff=3225"/>
				<updated>2018-06-29T13:13:56Z</updated>
		
		<summary type="html">&lt;p&gt;Riegel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;OS.bee Features&lt;br /&gt;
&lt;br /&gt;
= Abstract =&lt;br /&gt;
&lt;br /&gt;
OS.bee is a low-code model-driven software-factory, using over 20 Domain Specific Languages (DSL) to generate large-scale business web-applications. Each DSL contains a grammar for a required application-layer. A DSL hides complexity from successors, thereby enabling parallel modelling of domain requirements by multiple designers as they don’t need to know the domain logic they build upon. A model created with a DSL creates executable code, structured data and configuration settings or is interpreted by a renderer during runtime. The language of each DSL uses a grammar that makes the created model easy to understand and forms a requirement specification on its layer. The overall hierarchy can be browsed through at any time and gives a good understanding of the whole application in nearly natural English language. A DSL can also be studied by its syntactical graph. The creation of a model is a guided process through the syntax graph where the designer benefits from content assistance, code completion, quick fix, syntax colorizing, outline, formatting and validation. Many DSLs define metadata to be used by subsequent DSL to increase the leverage of definitions at a basic level. All element names defined by a DSL are automatically extracted to localization files for translation to open foreign markets for the resulting application. The ratio between the generated lines of code versus the numbers of lines in a model is 8 on average. Development speed improves by a similar factor. Dependencies between models reveal inconsistencies immediately while modifying and prevent generating code until these are resolved. Therefore turnaround cycles are short, errors are easy to discover and prototypes materialize in a very short time. Some DSL generate against famous open-source frameworks like EclipseLink, Smooks, Mondrian, Vaadin or jBPM thus enabling non-developers to use complex frameworks without deeper knowledge of their API. OS.bee inherits the features of the embedded frameworks and makes them easy to exploit for specialists of a domain not necessarily being software developer.&lt;br /&gt;
&lt;br /&gt;
= DSL Modeling =&lt;br /&gt;
&lt;br /&gt;
== Persistence ==&lt;br /&gt;
&lt;br /&gt;
Persistence refers to object and process characteristics that continue to exist even after the process that created it ceases or the machine it is running on is powered off. When an object or state is created and needs to be persistent, it is saved in a non-volatile storage location, like a hard drive, versus a temporary file or volatile random access memory.&lt;br /&gt;
&lt;br /&gt;
=== Data-type ===&lt;br /&gt;
&lt;br /&gt;
A data type is a classification that specifies which type of value a variable has and what type of mathematical, relational or logical operations can be applied to it without causing an error. Data types also hold metadata for higher-level DSLs so they can apply additional functionality to a field using this data type.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Primitive Types (int, double, etc.)&lt;br /&gt;
* Object Types (String, Date, etc.)&lt;br /&gt;
* Blob&lt;br /&gt;
** Store and retrieve any document or image type in binary form&lt;br /&gt;
* Auto-sizing Images&lt;br /&gt;
** Additionally stores images of definable size to experience better performance while rendering&lt;br /&gt;
* Formatted types&lt;br /&gt;
** Dates and times in any localized form&lt;br /&gt;
** Dates and times in any format (time only, date only, short and long forms, custom pattern, etc.)&lt;br /&gt;
** Currencies in any localized form&lt;br /&gt;
* Validated types with adjustable severity message&lt;br /&gt;
** Date in past/future&lt;br /&gt;
** Not null&lt;br /&gt;
** Not duplicate&lt;br /&gt;
** Range values&lt;br /&gt;
** Min/max length&lt;br /&gt;
* Slider types&lt;br /&gt;
** Min/max values&lt;br /&gt;
* Masked types&lt;br /&gt;
** Number, Hexadecimal, Capitalized&lt;br /&gt;
** Input pattern (e.g. Phone Numbers (###) ###-####)&lt;br /&gt;
** Password&lt;br /&gt;
* Suggestion types&lt;br /&gt;
** While typing some characters, a sorted list of suggestions pops up for selection&lt;br /&gt;
* Programmable Converters&lt;br /&gt;
** Text-to-Image&lt;br /&gt;
** Number-to-Text/Image&lt;br /&gt;
** Value-to-CSS Style&lt;br /&gt;
** Units of measurement&lt;br /&gt;
* Rich text editor using HTML markups&lt;br /&gt;
* Text area &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Entity ===&lt;br /&gt;
&lt;br /&gt;
An entity (-type) is a model of metadata for a single unique object in the real world. For example a person, organization, object type, or concept about which information is stored. Together with its attributes (or properties) it describes information that is being mastered. An entity typically corresponds to one or several related tables in database. An attribute is a characteristic or trait of an entity that describes the entity, for example, the Person entity type has the Date of Birth attribute.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Simple Entity&lt;br /&gt;
* Mapped super-classes&lt;br /&gt;
** Complement attributes in every entity using this&lt;br /&gt;
* Inheritance&lt;br /&gt;
** Specialized classes for special purpose&lt;br /&gt;
* References and their opposites&lt;br /&gt;
* References with constraints&lt;br /&gt;
* Embeddable beans&lt;br /&gt;
* Number generators UUID or ID&lt;br /&gt;
* Separated persistence-units capable of using multiple databases simultaneously&lt;br /&gt;
* All multiplicities (0..1, 0..n,1..1,1..n,*)&lt;br /&gt;
* Indexes unique and non-unique&lt;br /&gt;
* Validated uniqueness&lt;br /&gt;
* Domain-key annotation for lookups&lt;br /&gt;
* Methods for calculated attributes&lt;br /&gt;
* Lifecycle controlled method invoking (by PostLoad, PrePersist, etc.)&lt;br /&gt;
* Affected changes listeners&lt;br /&gt;
* Localizable Enumerations with images&lt;br /&gt;
* Creation and last modification information&lt;br /&gt;
* Transient data&lt;br /&gt;
* Synthetic attributes built by lifecycle methods either transient or persistent&lt;br /&gt;
* Historicized data&lt;br /&gt;
* Temporal data&lt;br /&gt;
* Versioned data&lt;br /&gt;
* Definable Runtime data filter&lt;br /&gt;
* Programmable Validators&lt;br /&gt;
* Nested Filter attributions over multiple references&lt;br /&gt;
* Abstraction of database vendor specific implementations&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Data transfer object (DTO) ===&lt;br /&gt;
&lt;br /&gt;
A DTO is an object that carries data between processes. DTOs are simple objects that do not contain any business logic but may contain serialization and deserialization mechanisms for transferring data.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Independent nested data container&lt;br /&gt;
* Automatically generated for entities&lt;br /&gt;
* Automatically mapped by entity data&lt;br /&gt;
* Editable sub- or supersets for entities&lt;br /&gt;
* Transient data container&lt;br /&gt;
* Nested objects automatically synchronized&lt;br /&gt;
* Nested properties access through dot expressions&lt;br /&gt;
* Used for services, processes, functions and renderers&lt;br /&gt;
* Dirty state aware&lt;br /&gt;
* Access restrictions on DTO and property granularity controlled by security layer&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== DTO Service ===&lt;br /&gt;
&lt;br /&gt;
A DTO service abstracts and encapsulates all access to the data source. It manages the connection with the data source to obtain and store data and implements the access mechanism required to work with the data source. The data source could be a persistent store like an RDBMS, or a business service accessed via REST or SOAP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Data storage and retrieval suitable for DTO&lt;br /&gt;
* Nested Transactions and Lock-modes&lt;br /&gt;
* Global transactions&lt;br /&gt;
* Object Oriented Query engine&lt;br /&gt;
* Low level Java Persistence Query Language method declarations (e.g. getTotal(), getAverage(), …)&lt;br /&gt;
* Injectable and declarative service&lt;br /&gt;
* Used for services, processes, functions and renderers&lt;br /&gt;
* Session scoped Entity Manager&lt;br /&gt;
* Thread safe persistence-unit bound Entity Manager Factory&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Data-Interchange ===&lt;br /&gt;
&lt;br /&gt;
Data Interchange is the endpoint-to-endpoint exchange of business documents in a standard electronic format between business partners or computer systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Smooks and FreeMarker implementation&lt;br /&gt;
* Nested entity import- and export-paths&lt;br /&gt;
* Localized formatters on data&lt;br /&gt;
* Supports encoding&lt;br /&gt;
* XML and CSV formats&lt;br /&gt;
* All EDI messages&lt;br /&gt;
* Automatically set export- and import markers for database&lt;br /&gt;
* Filtered exports&lt;br /&gt;
* Bulk insert/update&lt;br /&gt;
* Progress bar&lt;br /&gt;
* Generated import and export dashboard&lt;br /&gt;
* Generated lookup queries to embed relational data&lt;br /&gt;
* Merge or persist external data&lt;br /&gt;
* Import images of different mime-types into blobs via filename pattern&lt;br /&gt;
* Usage of expressions&lt;br /&gt;
* Free attribute mappings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Signal ===&lt;br /&gt;
&lt;br /&gt;
Signal processes events coming from file-systems. If a file that matches a given filename pattern is created, modified or deleted then an event is received and the modelled actions will be called. Signal also emits events for recurring things like a certain weekday and time is reached and executes the modelled actions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* File watcher for all file activities working on all operating systems&lt;br /&gt;
* Free filename pattern to watch for&lt;br /&gt;
&lt;br /&gt;
* Trigger Data-Interchange&lt;br /&gt;
* Definable export or import job-chain&lt;br /&gt;
* Synchronously or asynchronously execution (depending on import relationship) &lt;br /&gt;
* Quartz implementation for scheduled Data-Interchange export-jobs&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Entity-Mock ===&lt;br /&gt;
&lt;br /&gt;
* Generates fake data looking realistic&lt;br /&gt;
&lt;br /&gt;
* Mapping of roles to positions and multi-positions&lt;br /&gt;
&lt;br /&gt;
* Rule-based data composition (e.g. email address)&lt;br /&gt;
* Rule-based attribute generators for every data-type from data composition, or &lt;br /&gt;
** Randomly&lt;br /&gt;
** Ranges&lt;br /&gt;
** Picks from a given list&lt;br /&gt;
** Dates in the past with offset and limit (for birthdays)&lt;br /&gt;
** Dates in the future with offset and limit&lt;br /&gt;
* Composes objects from rule-based attribute generators (e.g. a person, a company, etc.)&lt;br /&gt;
* Composes object-trees from composed objects&lt;br /&gt;
* Creates relationships between objects using a given probability&lt;br /&gt;
* Creates mass data (e.g. sales data)&lt;br /&gt;
* Imports fixed data via Data-Interchange and embeds it&lt;br /&gt;
* Used mainly for quick-setup applications using a H2 database&lt;br /&gt;
* Exposes mock data services to be executed before any login-attempt&lt;br /&gt;
* Persists into all supported database products&lt;br /&gt;
* Can be executed at every server-start or once&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Business intelligence ==&lt;br /&gt;
&lt;br /&gt;
Business Intelligence (BI) refers to technologies, applications and practices for the collection, integration, analysis, and presentation of business information. The purpose of Business Intelligence is to support better business decision making. Essentially, Business Intelligence systems are data-driven Decision Support Systems (DSS). Business Intelligence is sometimes used interchangeably with briefing books, report and query tools and executive information systems.&lt;br /&gt;
&lt;br /&gt;
=== Cube ===&lt;br /&gt;
&lt;br /&gt;
A cube is a method of storing data in a multidimensional form, generally for reporting purposes. In cubes, data (measures) are categorized by dimensions. Cubes are pre-summarized across dimensions to drastically improve query time over relational databases. The query language used to interact and perform tasks with cubes is multidimensional expressions (MDX).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Mondrian OLAP for MDX queries implementation&lt;br /&gt;
* Cubes, dimensions, hierarchies, levels, members, and measures&lt;br /&gt;
* Defines a multi-dimensional database&lt;br /&gt;
* Contains a logical model, and a mapping of this model onto the physical entity model &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== DataMart ===&lt;br /&gt;
&lt;br /&gt;
A data mart is a subject-oriented archive that stores data and uses the retrieved set of information to assist and support the requirements involved within a particular business function or department. Data marts improve end-user response time by allowing users to have access to the specific type of data they need to view most often by providing the data in a way that supports the collective view of a group of users.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Common layer for data-warehouse queries&lt;br /&gt;
* Simplification of any kind of query against all available data sources&lt;br /&gt;
* Tailored queries and aggregates for different interest-groups&lt;br /&gt;
* Definition of complex multidimensional expressions (MDX) with a simple grammar&lt;br /&gt;
* Sophisticated analytic functions easy to use&lt;br /&gt;
* Online analytical processing built in&lt;br /&gt;
* Access to runtime data of the Business Process management engine&lt;br /&gt;
* Multi-purpose results for processes, reports, score cards and charts&lt;br /&gt;
* Definable navigation trees (join-paths)&lt;br /&gt;
* Definable single- and multi-selection filters on any leaf of the query tree&lt;br /&gt;
* Access restrictions on entity and attribute granularity controlled by security layer&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Function-Library ===&lt;br /&gt;
&lt;br /&gt;
* Xbase implementation&lt;br /&gt;
* UOMo implementation&lt;br /&gt;
* Creates operational objects and methods&lt;br /&gt;
* Grouped by application field&lt;br /&gt;
** Converter for model-presentation conversions&lt;br /&gt;
*** Value to image&lt;br /&gt;
*** Value to value&lt;br /&gt;
*** Value to style (background color, text color, font-style, etc.)&lt;br /&gt;
*** Value to unit of measurement based value&lt;br /&gt;
*** Between measurement systems and unit of measurement families&lt;br /&gt;
** State-Machine&lt;br /&gt;
*** Operations&lt;br /&gt;
*** Functions&lt;br /&gt;
*** Guards&lt;br /&gt;
*** Full access to state-machine controls&lt;br /&gt;
** Toolbar Action&lt;br /&gt;
*** Can execute validation (enable/disable operation)&lt;br /&gt;
*** Execute any operation&lt;br /&gt;
** Validation on DTO&lt;br /&gt;
** Business logic implementation for BPM&lt;br /&gt;
*** Functions callable in system tasks&lt;br /&gt;
*** Ratings for gateways&lt;br /&gt;
*** Tests for gateways&lt;br /&gt;
** Calculations e.g. for&lt;br /&gt;
*** Currencies&lt;br /&gt;
*** Lengths&lt;br /&gt;
*** Areas&lt;br /&gt;
** Posting operations&lt;br /&gt;
* Exposes injectable and declarative service&lt;br /&gt;
* Store and retrieve data from DTO&lt;br /&gt;
* Full access to all JVM objects&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== State-Machine ===&lt;br /&gt;
&lt;br /&gt;
* Implementation of business behavior&lt;br /&gt;
* Defines states and their transitions&lt;br /&gt;
* Transitions are triggered by events&lt;br /&gt;
* Transitions are guarded by functions from Function-Library&lt;br /&gt;
* Actions to be executed before and after transitioning from Function-Library&lt;br /&gt;
* Has things to control&lt;br /&gt;
** Database objects (DTO)&lt;br /&gt;
** Database filters&lt;br /&gt;
** Visibility or enabling of&lt;br /&gt;
*** Buttons (UI)&lt;br /&gt;
*** Layouts (UI)&lt;br /&gt;
*** Other components (UI)&lt;br /&gt;
** Peripheral devices (interfaces JavaPOS)&lt;br /&gt;
*** Printers&lt;br /&gt;
*** Line displays&lt;br /&gt;
*** Cash drawers&lt;br /&gt;
*** Payment terminals&lt;br /&gt;
*** Signature pads&lt;br /&gt;
** Slave browsers (external displays, etc.)&lt;br /&gt;
* Receives events from&lt;br /&gt;
** Buttons clicked&lt;br /&gt;
** UI selections&lt;br /&gt;
** Peripherals (printer out of paper, etc.)&lt;br /&gt;
** Schedulers&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== BLiP (Business Logic implementation Platform) ===&lt;br /&gt;
&lt;br /&gt;
* Implements jBPM&lt;br /&gt;
* Integrates a BPMN editor at design-time&lt;br /&gt;
* Connects tasks of BPM to business logic of Function-Library&lt;br /&gt;
* Controls sequence-flow through business logic of Function-Library&lt;br /&gt;
* Stores and retrieves process save-points&lt;br /&gt;
* Logs all process activities of system and user&lt;br /&gt;
* Exposes BPM data and events to UI elements&lt;br /&gt;
* Stores and retrieves workload data using DTO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Presentation ==&lt;br /&gt;
&lt;br /&gt;
The presentation layer ensures that the communications that pass through it are in the appropriate form for the recipient application. It is responsible for the delivery and formatting of information to the application layer for further processing or display. It relieves the application layer of concern regarding syntactical differences in data representation within the end-user systems.&lt;br /&gt;
&lt;br /&gt;
=== Table ===&lt;br /&gt;
&lt;br /&gt;
A table is a data structure that organizes information into rows and columns. It can be used to both store and display data in a structured format.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Editable cells&lt;br /&gt;
* Scorecard elements&lt;br /&gt;
** Rule-based colorizing of cell background and textcolor&lt;br /&gt;
** Mixed in rule-based icons&lt;br /&gt;
** Rule-based styling of cells&lt;br /&gt;
** Rule-based tooltips&lt;br /&gt;
* Data from DataMart or DTO&lt;br /&gt;
* Pivot presentation&lt;br /&gt;
* Multidimensional presentation on nested tab-sheets&lt;br /&gt;
* Filtering, sorting, swapping and hiding of columns&lt;br /&gt;
* Stores swapping and hiding per user&lt;br /&gt;
* 3 different row numbering modes&lt;br /&gt;
* Row selection synchronizes other views in scope&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Chart ===&lt;br /&gt;
&lt;br /&gt;
A chart is a diagram, picture, or graph which is intended to make information easier to understand. It is a symbolic representation of information according to some visualization technique.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Multiple data series with selectable colorizing&lt;br /&gt;
* Series switchable from legend&lt;br /&gt;
* Bar, line, pie, donut, bubble and gauge presentation&lt;br /&gt;
* Animated, stacked, shaded and xy-swapped charts&lt;br /&gt;
* Zoom and trend-line function&lt;br /&gt;
* Tooltips for series and data points with absolute value&lt;br /&gt;
* Selectable positioning relative to cursor for tooltips&lt;br /&gt;
* Selectable legend placement&lt;br /&gt;
* Collapsible tree presentation on hierarchical data&lt;br /&gt;
* Date axes with customizable formatting&lt;br /&gt;
* Up to 9 individually scalable Y axes&lt;br /&gt;
* Rotated axis text&lt;br /&gt;
* Category rendering either linear, logarithmic, timeline or as pyramid&lt;br /&gt;
* Downloadable SVG image&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Report ===&lt;br /&gt;
&lt;br /&gt;
A document containing information organized in a graphic or tabular form, prepared on ad hoc, periodic, recurring, regular, or as required basis. Reports may refer to specific periods, events, occurrences, or subjects, and are presented in printed form.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Actuate Birt implementation&lt;br /&gt;
* Definition of reusable layout metadata&lt;br /&gt;
** All units of measurement for layouts&lt;br /&gt;
** Definition of fonts and colors&lt;br /&gt;
** Definition of formatters for&lt;br /&gt;
*** Currencies&lt;br /&gt;
*** Date and time&lt;br /&gt;
** Page sizes (A4, A5, etc.)&lt;br /&gt;
** Orientations (Landscape, portrait)&lt;br /&gt;
** Margins&lt;br /&gt;
** Paddings&lt;br /&gt;
** Alignments&lt;br /&gt;
* Output as HTML or PDF&lt;br /&gt;
* Ability to reference multiple DataMarts for header, footer and details&lt;br /&gt;
* Rendering of blob-images&lt;br /&gt;
* External CSS usable&lt;br /&gt;
* Defines grids and cells&lt;br /&gt;
* Direct printing to preselected output medias per user or per location and report&lt;br /&gt;
* Rule-based visibility of cells&lt;br /&gt;
* Aggregates for grouping&lt;br /&gt;
* Rule-based page break&lt;br /&gt;
* Rule-based colorizing and styling&lt;br /&gt;
* URL-based or embedded images&lt;br /&gt;
* Auto-texts (page number etc.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Topology ===&lt;br /&gt;
&lt;br /&gt;
Topology is designed for representing simple geographical features, along with their non-spatial attributes. It includes geo-json points (addresses and locations), line strings (streets, highways and boundaries), polygons (countries, provinces, tracts of land), and multi-part collections of these types.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* D3 implementation&lt;br /&gt;
* Render predefined maps of U.S.A., Germany, Spain… the World&lt;br /&gt;
* Select states, countries, regions or cities to synchronize other views in scope&lt;br /&gt;
* Render geo-json data from blobs to show boundaries of plots of land, buildings or floor plans&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== UI ===&lt;br /&gt;
&lt;br /&gt;
* Models interactive views&lt;br /&gt;
* Connects to data-sources of any kind (DTO, Bean, JVM object, etc.)&lt;br /&gt;
* Nests different kinds of layouts to a complex surface (horizontal, vertical, form, grid)&lt;br /&gt;
* Adds components to layouts (buttons, text-fields, tables, images, etc.)&lt;br /&gt;
* Binds components to properties of data-sources&lt;br /&gt;
* Rule-based visibility processor&lt;br /&gt;
* Navigation widgets for small geometry mobile devices&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Dialog ===&lt;br /&gt;
&lt;br /&gt;
* Renders interactive views&lt;br /&gt;
* Either references a predefined UI model or a model inferred from a DTO &lt;br /&gt;
* Links the view to a toolbar&lt;br /&gt;
* Renders different modes&lt;br /&gt;
** Normal, to be used inside perspectives&lt;br /&gt;
** Embedded, to be used inside menues&lt;br /&gt;
** Stateful, inside perspectives, and controlled by a state-machine&lt;br /&gt;
** Mobile, to be used on small geometry mobile devices with navigation widgets&lt;br /&gt;
* Renders in 1 to N columns of components&lt;br /&gt;
* Groups components by using entity metadata&lt;br /&gt;
* Renders owning relationships as combo-boxes&lt;br /&gt;
* Renders member relationships as tables on tab-sheets&lt;br /&gt;
* Implements blob up- and downloading&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Perspective ===&lt;br /&gt;
&lt;br /&gt;
* Based on the Eclipse 4 application model&lt;br /&gt;
* Presents a 360° view on the task to the user&lt;br /&gt;
* Divides the usable screen area in resizable containers&lt;br /&gt;
* Nests windows, perspective-stacks, perspectives, containers, part-stacks and parts containing views, and toolbars&lt;br /&gt;
* Stores and retrieves resized areas for each user&lt;br /&gt;
* Supports drag and drop&lt;br /&gt;
* Event dispatching system to synchronize data, actions, focus and more between views&lt;br /&gt;
* References all types of views (dialogs, tables, charts, reports …) to set up a dashboard&lt;br /&gt;
* Modifiable layout at runtime using the designer mode for permitted users&lt;br /&gt;
* Connects to user tasks of BPM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Action ===&lt;br /&gt;
&lt;br /&gt;
* Links action-buttons &lt;br /&gt;
** To business logic of Function-Library to be executed&lt;br /&gt;
*** Synchronously&lt;br /&gt;
*** Asynchronously as background process&lt;br /&gt;
** To Data-Interchange import- or export tasks&lt;br /&gt;
** To BPM start events&lt;br /&gt;
** To actions to trigger&lt;br /&gt;
*** Save, delete, download, print etc.&lt;br /&gt;
*** Advance focus to next or previous part&lt;br /&gt;
* Links action-buttons to business logic of Function-Library to be &lt;br /&gt;
** Enabled&lt;br /&gt;
** Disabled depending on data context&lt;br /&gt;
* Defines commands to control the application and trigger actions&lt;br /&gt;
* Assigns keyboard short-cuts to commands&lt;br /&gt;
* Connects to Message for fail or success messages about executed actions&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Menu ===&lt;br /&gt;
&lt;br /&gt;
* Combines Perspectives, BPM start events, embedded dialogs and tables, configuration settings and other informative screens to a tree-organized menu&lt;br /&gt;
* Pops up anytime it is needed, and consumes no space on the screen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Message ===&lt;br /&gt;
&lt;br /&gt;
* Defines messages to notify a user about events and usage violations&lt;br /&gt;
* Can be tracked by log entries&lt;br /&gt;
* Placeholders for parametrizing messages&lt;br /&gt;
* Can have a severity&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Security ==&lt;br /&gt;
&lt;br /&gt;
=== Authorization ===&lt;br /&gt;
&lt;br /&gt;
* Role-based authorization system&lt;br /&gt;
* Grant access to entities, beans and DTO&lt;br /&gt;
* Grant access to CRUD operations (create, read, update, delete)&lt;br /&gt;
* Grant access to modification of relationships (link, unlink references)&lt;br /&gt;
* Vetoes per attribute for visibility, editability and enabling&lt;br /&gt;
* Grant access to start a process&lt;br /&gt;
* Grant access working on a user task&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Organization ===&lt;br /&gt;
&lt;br /&gt;
* Hierarchies of positions, multi-positions, and sub-organizations&lt;br /&gt;
* Maps roles to positions&lt;br /&gt;
* Definition of levels of collaboration if sharing the same roles&lt;br /&gt;
* Derives an organigram of each hierarchy to be rendered at runtime&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Services =&lt;br /&gt;
&lt;br /&gt;
== Authentication ==&lt;br /&gt;
&lt;br /&gt;
== Persistence ==&lt;br /&gt;
&lt;br /&gt;
== Translation ==&lt;br /&gt;
&lt;br /&gt;
== Metadata ==&lt;br /&gt;
&lt;br /&gt;
== Theme Resources ==&lt;/div&gt;</summary>
		<author><name>Riegel</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=OS.bee_Software_Factory_Unique_Selling_Propositions&amp;diff=3224</id>
		<title>OS.bee Software Factory Unique Selling Propositions</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=OS.bee_Software_Factory_Unique_Selling_Propositions&amp;diff=3224"/>
				<updated>2018-06-29T06:50:40Z</updated>
		
		<summary type="html">&lt;p&gt;Riegel: Created page with &amp;quot;== Abstract ==  OS.bee is a low-code model-driven software-factory, using over 20 Domain Specific Languages (DSL) to generate large-scale business web-applications. Each DSL c...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Abstract ==&lt;br /&gt;
&lt;br /&gt;
OS.bee is a low-code model-driven software-factory, using over 20 Domain Specific Languages (DSL) to generate large-scale business web-applications. Each DSL contains a grammar for a required application-layer. A DSL hides complexity from successors, thereby enabling parallel modelling of domain requirements by multiple designers as they don’t need to know the domain logic they build upon. A model created with a DSL creates executable code, structured data and configuration settings or is interpreted by a renderer during runtime. The language of each DSL uses a grammar that makes the created model easy to understand and forms a requirement specification on its layer. The overall hierarchy can be browsed through at any time and gives a good understanding of the whole application in nearly natural English language. A DSL can also be studied by its syntactical graph. The creation of a model is a guided process through the syntax graph where the designer benefits from content assistance, code completion, quick fix, syntax colorizing, outline, formatting and validation. Many DSLs define metadata to be used by subsequent DSL to increase the leverage of definitions at a basic level. All element names defined by a DSL are automatically extracted to localization files for translation to open foreign markets for the resulting application. The ratio between the generated lines of code versus the numbers of lines in a model is 8 on average.  Development speed improves by a similar factor. Dependencies between models reveal inconsistencies immediately while modifying and prevent generating code until these are resolved. Therefore turnaround cycles are short, errors are easy to discover and prototypes materialize in a very short time. Some DSL generate against famous open-source frameworks like EclipseLink, Smooks, Mondrian, Vaadin or jBPM thus enabling non-developers to use complex frameworks without deeper knowledge of their API. OS.bee inherits the features of the embedded frameworks and makes them easy to exploit for specialists of a domain not necessarily being software developer.&lt;br /&gt;
&lt;br /&gt;
== Modeling ==&lt;br /&gt;
&lt;br /&gt;
=== Data-type (type system layer) ===&lt;br /&gt;
*Primitive Types (int, double, etc.)&lt;br /&gt;
*Object Types (String, Date, etc.)&lt;br /&gt;
*Blob&lt;br /&gt;
 Store and retrieve any document or image type in binary form&lt;br /&gt;
*Auto-sizing  Images&lt;br /&gt;
 Additionally stores images of definable size to experience better performance while rendering&lt;br /&gt;
*Formatted types&lt;br /&gt;
 Dates and times in any localized form&lt;br /&gt;
 Dates and times in any format (time only, date only, short and long forms, custom pattern, etc.)&lt;br /&gt;
 Currencies in any localized form&lt;br /&gt;
*Validated types with adjustable severity message&lt;br /&gt;
 Date in past/future&lt;br /&gt;
 Not null&lt;br /&gt;
 Not duplicate&lt;br /&gt;
 Range values&lt;br /&gt;
 Min/max length&lt;br /&gt;
*Slider types&lt;br /&gt;
 Min/max values&lt;br /&gt;
*Masked types&lt;br /&gt;
 Number, Hexadecimal, Capitalized&lt;br /&gt;
 Input pattern (e.g. Phone Numbers (###) ###-####)&lt;br /&gt;
*Password&lt;br /&gt;
*Suggestion types&lt;br /&gt;
 While typing some characters, a sorted list of suggestions pops up for selection&lt;br /&gt;
*Programmable Converters&lt;br /&gt;
 Text-to-Image&lt;br /&gt;
 Number-to-Text/Image&lt;br /&gt;
 Value-to-CSS Style&lt;br /&gt;
 Units of measurement&lt;br /&gt;
*Rich text editor using HTML markups&lt;br /&gt;
*Text area &lt;br /&gt;
&lt;br /&gt;
=== Entity (Object relational mapper layer) ===&lt;/div&gt;</summary>
		<author><name>Riegel</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Main_Page&amp;diff=3223</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Main_Page&amp;diff=3223"/>
				<updated>2018-06-29T06:39:55Z</updated>
		
		<summary type="html">&lt;p&gt;Riegel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to the OS.bee Software Factory documentation Wiki.&lt;br /&gt;
&lt;br /&gt;
Here you can find public availabe documentation around the OS.bee Software Factory and the Eclipse Open Standard Business Platform (OSBP).&lt;br /&gt;
&lt;br /&gt;
==OS.bee==&lt;br /&gt;
&lt;br /&gt;
[[OS.bee Software Factory Unique Selling Propositions]]&lt;br /&gt;
&lt;br /&gt;
[[OS.bee Software Factory Installation Neon]]&lt;br /&gt;
&lt;br /&gt;
[[OS.bee Software Factory Samples]]&lt;br /&gt;
&lt;br /&gt;
[[OS.bee Software Factory Documentation]]&lt;br /&gt;
&lt;br /&gt;
[[OS.bee Software Factory Release Notes]]&lt;br /&gt;
&lt;br /&gt;
[[OS.bee Addons Documentation]]&lt;br /&gt;
&lt;br /&gt;
[[OS.bee Apps Documentation]]&lt;br /&gt;
&lt;br /&gt;
[[OS.bee API Documentation]]&lt;br /&gt;
&lt;br /&gt;
[[OS.bee Documentation for Designer]]&lt;br /&gt;
&lt;br /&gt;
[[OS.bee used licenses]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Consult the [//meta.wikimedia.org/wiki/Help:Contents User's Guide] for information on using the wiki software.&lt;br /&gt;
&lt;br /&gt;
== Getting started ==&lt;br /&gt;
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]&lt;br /&gt;
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]&lt;br /&gt;
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]&lt;br /&gt;
* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]&lt;/div&gt;</summary>
		<author><name>Riegel</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=OS.bee_peripherals_for_JavaPOS&amp;diff=3189</id>
		<title>OS.bee peripherals for JavaPOS</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=OS.bee_peripherals_for_JavaPOS&amp;diff=3189"/>
				<updated>2018-05-04T09:56:07Z</updated>
		
		<summary type="html">&lt;p&gt;Riegel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== OS.bee peripherals for JavaPOS ==&lt;br /&gt;
&lt;br /&gt;
OS.bee integrates the framework JavaPOS [http://www.javapos.com/]. Purpose of this framework is to abstract peripheral units like printers, displays, dispenser from their physical properties and to present an application interface to Java applications. For each unit it is necessary to define its abstract properties and communication protocol. Each vendor of pripheral units for POS systems comes with his own configuration tool. But all of them end up with a xml file describing all peripheral units available to a single OS.bee application server. The name of this configuration file is not important. For the moment it is not possible to mix units of different vendors in a single file as they put their physical hardware information inside the file while using their individal setup program. OS.bee can only use a single xml file at a time. The path must be entered in OS.bee preferences of IDE using Window-&amp;gt;Preferences-&amp;gt;OSBP Application Configuration. Don't forget to select the right product to be configured.&lt;br /&gt;
&lt;br /&gt;
[[File:JavaPOS_Preferences.png]]&lt;br /&gt;
&lt;br /&gt;
=== Epson Peripheral Units ===&lt;br /&gt;
&lt;br /&gt;
First download the following zip and unpack it in a suitable directory.&lt;br /&gt;
[[http://download.osbee.org/downloads/drivers/epson/EPSON_JavaPOS_ADK_1143.zip Epson Windows Driver and Setup Download]]&lt;br /&gt;
From the directory EPSON_JavaPOS_ADK_1143 start the executable EPSON_JavaPOS_1.14.3.exe and follow the instructions of the program.&lt;br /&gt;
&lt;br /&gt;
If you follow the default settings of the installer, you end up with a directory structure epson/JavaPOS/SetupPOS. Here you start SetupPOS.bat as Administrator. For every peripheral unit you want to connect to OS.bee you must add an entry according to the requirements noted in the respective vendor's documentation. This program creates a xml file. The name is not important, but must be entered in the preferences in OS.bee under &amp;quot;External Data&amp;quot; (see section above).&lt;br /&gt;
&lt;br /&gt;
Here is a sample xml file for a typical Epson configuration:&lt;br /&gt;
[[http://download.osbee.org/downloads/drivers/epson/pos.xml Epson Sample Configuration Download]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== WACOM Signature pad ===&lt;br /&gt;
&lt;br /&gt;
OS.bee Software Factory supports the use of [http://www.wacom.com/en-gb/enterprise/business-solutions/hardware/signature-pads signature pads] from Wacom.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Installation prequistits ====&lt;br /&gt;
&lt;br /&gt;
Supported OS: '''Windows'''&lt;br /&gt;
&lt;br /&gt;
You have to install the driver for the signature pad on the machine you want to run the OS.bee application.&lt;br /&gt;
&lt;br /&gt;
[[http://download.osbee.org/downloads/drivers/wacom/Wacom-STU-Driver-5.2.1.0.exe Windows Driver Installer Download]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Copyright Notice ==&lt;br /&gt;
{{Copyright Notice}}&lt;/div&gt;</summary>
		<author><name>Riegel</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=File:JavaPOS_Preferences.png&amp;diff=3188</id>
		<title>File:JavaPOS Preferences.png</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=File:JavaPOS_Preferences.png&amp;diff=3188"/>
				<updated>2018-05-04T08:42:11Z</updated>
		
		<summary type="html">&lt;p&gt;Riegel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Riegel</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=OS.bee_Documentation_for_Designer&amp;diff=3026</id>
		<title>OS.bee Documentation for Designer</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=OS.bee_Documentation_for_Designer&amp;diff=3026"/>
				<updated>2018-03-28T07:00:27Z</updated>
		
		<summary type="html">&lt;p&gt;Riegel: /* OS.bee Documentation for Designer */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=OS.bee Documentation for Designer=&lt;br /&gt;
Here are frequently asked questions from designers which are not mentioned by other Documentation. In this Page, you could find the answer to your question.&lt;br /&gt;
&lt;br /&gt;
==Get Started==&lt;br /&gt;
&lt;br /&gt;
===Pitfalls with new Eclipse installations===&lt;br /&gt;
Be aware that when installing a new Eclipse environment to look at the preferences for DS Annotations and check the box &amp;quot;Generate descriptors from annotated sources&amp;quot; as OS.bee makes heavy use of automatically generated component descriptors in the OSGI-INF directory. It is unchecked by default for incomprehensible reasons.&lt;br /&gt;
&lt;br /&gt;
[[File:ds_annotations.png|center|frame|]]&lt;br /&gt;
&lt;br /&gt;
Don't forget to set your target platform correctly as described in the [http://download.osbee.org/documentation/index.php/OS.bee_Software_Factory_Installation_Neon#Set_the_Target_Platform_for_the_OS.bee_Software_Factory installation guide].&lt;br /&gt;
&lt;br /&gt;
===Eclipse Installation / Installation SWF / New Project from GIT===&lt;br /&gt;
&lt;br /&gt;
Question: &lt;br /&gt;
 &lt;br /&gt;
Using Eclispe Neon, execution of Installation Software-Factory as described in the Installation notes, Connect to a GIT Archiv, After Building Workspace the application is not valid (see Screen-Shot)&lt;br /&gt;
Try to clean the Project was not successful.&lt;br /&gt;
&lt;br /&gt;
[[File:xx.png|center|frame|''Figure x: xxx'']]&lt;br /&gt;
&lt;br /&gt;
Answer:&lt;br /&gt;
&lt;br /&gt;
The version of the installed Software Factory and the version needed for the project do not match.&lt;br /&gt;
&lt;br /&gt;
Please install the appropriate Software Factory version.&lt;br /&gt;
&lt;br /&gt;
===cvs2app - question regarding ENUM types===&lt;br /&gt;
&lt;br /&gt;
Question: &lt;br /&gt;
 &lt;br /&gt;
cvs2app is mentioned in the documentation &amp;quot;App up in 5 minutes&amp;quot; and gives the possibility to create one app directly out of the csv file.  &lt;br /&gt;
One of the first steps is to create an entity, which is generated based on the information on the first line (which contains the column names).&lt;br /&gt;
In consequence I have 2 questions regarding ENUMS: &lt;br /&gt;
&lt;br /&gt;
* Is it possible to create an entity ENUM out the csv - FILE? &lt;br /&gt;
&lt;br /&gt;
* Is it possible to use an existing ENUM entity during the creation of the app? &lt;br /&gt;
&lt;br /&gt;
For example: &lt;br /&gt;
&lt;br /&gt;
in the entity there is already a definition:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 enum type_ps {&lt;br /&gt;
            PROCESS_DESCRIPTION, ORGANISATIONAL&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and the csvfile looks as follows: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
ticket_type_number;ticket_type_description;ticket_type_ps_type&lt;br /&gt;
1;CRS handling;PROCESS_DESCRIPTION&lt;br /&gt;
2;Administrative;ORGANISATIONAL&lt;br /&gt;
3;Delivery package;ORGANISATIONAL&lt;br /&gt;
4;Software behaviour;PROCESS_DESCRIPTION&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Answer:&lt;br /&gt;
&lt;br /&gt;
Yes it is possible. When using the latest version (from feb 2018), it is possible to supply various meta-information to each column. One meta-info is the hint to the application builder that this column is meant to be a ENUM. By default it wouldn't be possible to guess that fact.&lt;br /&gt;
&lt;br /&gt;
===Launch Application from Eclipse (very slow)===&lt;br /&gt;
&lt;br /&gt;
Question:  &lt;br /&gt;
	&lt;br /&gt;
When starting the Application from within the Eclipse it took very long time until the application is up.&lt;br /&gt;
Are there some settings to be controlled?&lt;br /&gt;
&lt;br /&gt;
Answer:&lt;br /&gt;
&lt;br /&gt;
If you experience very slow performance with Eclipse itself as well as the application you launch from Eclipse it might be a good idea to check the virus scanner you have installed.&lt;br /&gt;
Some virus scanners check all the files inside the Eclipse installation directory, the Eclipse workspace and the GIT repository which might lead to extreme slow performance.&lt;br /&gt;
Ask your Administrator how to avoid this. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Structure of the documentation page===&lt;br /&gt;
&lt;br /&gt;
In the [http://download.osbee.org/documentation/index.php/OS.bee_Software_Factory_Documentation OS.bee Software Factory Documentation] page, there are 3 Headlines used to structure the page:&lt;br /&gt;
1.) OS.bee DSL Documentation&lt;br /&gt;
2.) Other OS.bee-Specific Solutions&lt;br /&gt;
3.) OS.bee Third-Party Software Solutions&lt;br /&gt;
	&lt;br /&gt;
At the end of Chapter one there are some helpful hints to work with eclipse. To start with Eclipse and the SWF these hints could be very useful. &lt;br /&gt;
One more hint: &lt;br /&gt;
to Use STRG-Shift-O to organize the import inside the DSL.&lt;br /&gt;
&lt;br /&gt;
==Modeling==&lt;br /&gt;
&lt;br /&gt;
==Core Dev==&lt;br /&gt;
&lt;br /&gt;
==Apps==&lt;/div&gt;</summary>
		<author><name>Riegel</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Perspective_DSL&amp;diff=3017</id>
		<title>Perspective DSL</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Perspective_DSL&amp;diff=3017"/>
				<updated>2018-02-26T16:12:15Z</updated>
		
		<summary type="html">&lt;p&gt;Riegel: /* part */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
Os.bee Applications which are generated using the OS.bee software factory have by default a front end based on the E4-UI-Model. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:PerspectiveDSL_01.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As you can recognize on the above graphics the main elements of theE4-Model are:&lt;br /&gt;
&lt;br /&gt;
* Perspective.  A perspective is a container for a set of UI graphic elements, like sash, part stack, part, area, etc. Perspectives can be used to store different arrangements of UI graphic elements. Each Workbench window contains one or more perspectives. A perspective defines the initial set and layout of views in the Workbench window. Each perspective provides a set of functionality aimed at accomplishing a specific type of task or works with specific types of resources.&lt;br /&gt;
&lt;br /&gt;
* Sash. A sash is a UI graphic elements container, and it displays all its children at the same time either horizontally or vertically aligned. Default is vertically aligned.&lt;br /&gt;
&lt;br /&gt;
* Part. A Part is a container for a view. Parts are user interface components which allow you to navigate and modify data.  &lt;br /&gt;
&lt;br /&gt;
* Part stack. A part stack contains a stack of parts showing the content of one part while displaying only the headers of the other parts.&lt;br /&gt;
&lt;br /&gt;
* View. A view is used to work on a set of data, which might be a hierarchical structure. If data is changed via the view, this change is directly applied to the underlying data structure. A predefined view could be a chart, a dialog, a grid, an organigram, a report, a select table, a table or a topology in OS.bee.&lt;br /&gt;
&lt;br /&gt;
==Perspective DSL==&lt;br /&gt;
&lt;br /&gt;
The PerspectiveDSL is used to build the ui for Os.bee Application. &lt;br /&gt;
&lt;br /&gt;
You can find instances of these elements in Os.bee Applications as follows: &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:PerspectiveDSL_02.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The main semantic elements of the PerspectiveDSL are:&lt;br /&gt;
&lt;br /&gt;
* “package” - the root element that contains all the other elements. A model can contain multiple packages. &lt;br /&gt;
&lt;br /&gt;
* “perspective” - define the perspective details, e.g. perspective name, the description… &lt;br /&gt;
&lt;br /&gt;
* “sashContainer” - define the main element sash container for the perspective. &lt;br /&gt;
&lt;br /&gt;
* “partStack” -  define the main element part stack for the perspective.&lt;br /&gt;
&lt;br /&gt;
* “part” -  the main element part for the perspective.&lt;br /&gt;
&lt;br /&gt;
* “view” -  define the part view of the perspective, it can be report, dialog, table, chart …&lt;br /&gt;
&lt;br /&gt;
===Syntax===&lt;br /&gt;
&lt;br /&gt;
====package definition====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
package &amp;lt;package name&amp;gt; [{&lt;br /&gt;
	perspective &amp;lt;perspective name&amp;gt;  . . .&lt;br /&gt;
. . .&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
One or more than one perspective could be defined in the same package.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
package net.osbee.sample.foodmart.perspectives {&lt;br /&gt;
	perspective Employee . . .&lt;br /&gt;
&lt;br /&gt;
	perspective Supplier . . .&lt;br /&gt;
&lt;br /&gt;
	perspective Products . . .&lt;br /&gt;
&lt;br /&gt;
	. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example &amp;lt;code&amp;gt;perspective&amp;lt;/code&amp;gt; Employee, &amp;lt;code&amp;gt;perspective&amp;lt;/code&amp;gt; Supplier, &amp;lt;code&amp;gt;perspective&amp;lt;/code&amp;gt; Products and also other perspectives are defined in the same &amp;lt;code&amp;gt;package&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
====perspective====&lt;br /&gt;
&lt;br /&gt;
This is the main part of this model. All the perspective details can be defined here.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
perspective &amp;lt;perspective name&amp;gt; [described by &amp;lt;description&amp;gt;]&lt;br /&gt;
	[process &amp;lt;blip.blip name&amp;gt; usertask &amp;lt;blip.BlipUserTask name&amp;gt;]&lt;br /&gt;
	([iconURI &amp;lt;iconURI&amp;gt;] &lt;br /&gt;
     &amp;amp;&lt;br /&gt;
	 [accessibility &amp;lt;accessibilityPhrase&amp;gt;] &lt;br /&gt;
     &amp;amp;&lt;br /&gt;
	 [toolbar &amp;lt;action.ActionToolbar&amp;gt;])&lt;br /&gt;
	{ &lt;br /&gt;
PerspectiveElement &lt;br /&gt;
		. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;described by&amp;lt;/code&amp;gt; is optional; you can use this keyword to define the description of this perspective.&lt;br /&gt;
&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;process. . . usertask. . . &amp;lt;/code&amp;gt; is optional, which define the blip process and blip usertask from predefined blipDSL for this perspective.&lt;br /&gt;
&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;iconURI&amp;lt;/code&amp;gt; is optional, it define the identifier for a resource, e.g. icon file.&lt;br /&gt;
&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;accessibility&amp;lt;/code&amp;gt; is optional, it can be any string; this field is provided as a way to inform accessibility screen readers with extra information. The intent is that the reader should 'say' this phrase as well as what it would normally emit given the widget hierarchy. A screen reader is an essential piece of software for a blind or visually impaired person. Simply put, a screen reader transmits whatever text is displayed on the computer screen into a form that a visually impaired user can process (usually tactile, auditory or a combination of both). While the most basic screen readers will not help blind users navigate a computer, those with additional features can give people with visual impairment much more independence.&lt;br /&gt;
&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;toolbar&amp;lt;/code&amp;gt; is optional, which define the action tool bar from predefined [[Action DSL]]. Graphical control elements are defined, on which on-screen buttons, icons, menus, or other input or output elements are placed.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
perspective Employee described by &amp;quot;Employee maintenance&amp;quot; iconURI &amp;quot;employee&amp;quot; {&lt;br /&gt;
. . .&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
perspective ProductMaintenanceSelect process ProductMaintenance usertask SelectSomeProducts toolbar HandleTask iconURI &amp;quot;information&amp;quot; {&lt;br /&gt;
	. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the next sections, the important elements and keywords of perspective will be introduced one by one.&lt;br /&gt;
&lt;br /&gt;
====PerspectiveElement====&lt;br /&gt;
&lt;br /&gt;
Keyword &amp;lt;code&amp;gt;PerspectiveElement&amp;lt;/code&amp;gt; is used to define the main elements of the perspective.&lt;br /&gt;
&lt;br /&gt;
The main elements are sash container, part stack and part.&lt;br /&gt;
&lt;br /&gt;
=====sashContainer=====&lt;br /&gt;
&lt;br /&gt;
Keyword &amp;lt;code&amp;gt;sashContainer&amp;lt;/code&amp;gt; is used to define the main element sash container of perspective. &lt;br /&gt;
&lt;br /&gt;
A sash container displays all its children at the same time either horizontally or vertically aligned.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
sashContainer &amp;lt;PerspectiveSashContainer ID&amp;gt;&lt;br /&gt;
	[orientation horizontal|vertical] &lt;br /&gt;
    &amp;amp;&lt;br /&gt;
	[selectedElement &amp;lt;PerspectiveElement ID&amp;gt;]&lt;br /&gt;
    &amp;amp;&lt;br /&gt;
	[spaceVolume &amp;lt;containerData STRING&amp;gt;] &lt;br /&gt;
    &amp;amp;&lt;br /&gt;
	[accessibility &amp;lt;accessibilityPhrase STRING&amp;gt;]&lt;br /&gt;
	{ &lt;br /&gt;
PerspectiveElement &lt;br /&gt;
. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;orientation&amp;lt;/code&amp;gt; is optional, it can be horizontal or vertical, and default value is vertical.&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;selectedElement&amp;lt;/code&amp;gt; is optional; you can select one of the next level perspective element here and which is selected will be shown in the first place.&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;spaceVolume&amp;lt;/code&amp;gt; is optional, it redefine the space volume of this sash container in screen. A number will be defined to representing the relative size of this container.&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;accessibility&amp;lt;/code&amp;gt; is optional, it can be any string; this field is provided as a way to inform accessibility screen readers with extra information. The intent is that the reader should 'say' this phrase as well as what it would normally emit given the widget hierarchy. A screen reader is an essential piece of software for a blind or visually impaired person. Simply put, a screen reader transmits whatever text is displayed on the computer screen into a form that a visually impaired user can process (usually tactile, auditory or a combination of both). While the most basic screen readers will not help blind users navigate a computer, those with additional features can give people with visual impairment much more independence.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
perspective Employee described by &amp;quot;Employee maintenance&amp;quot; iconURI &amp;quot;employee&amp;quot; {&lt;br /&gt;
	sashContainer outer orientation vertical {&lt;br /&gt;
		sashContainer top orientation horizontal {&lt;br /&gt;
			. . .&lt;br /&gt;
		}&lt;br /&gt;
		sashContainer bottom orientation horizontal {&lt;br /&gt;
			. . .&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example, in the first place, the &amp;lt;code&amp;gt;sash container&amp;lt;/code&amp;gt; '''''outer''''' is defined, in this sash container, 2 second level &amp;lt;code&amp;gt;sash containers&amp;lt;/code&amp;gt; are defined as horizontal, they are '''''top''''' and '''''bottom'''''.&lt;br /&gt;
&lt;br /&gt;
=====partStack=====&lt;br /&gt;
&lt;br /&gt;
Keyword &amp;lt;code&amp;gt;partStack&amp;lt;/code&amp;gt; is used to define the main element part stack of perspective.&lt;br /&gt;
&lt;br /&gt;
A part stack contains a stack of parts showing the contents of one part while displaying only the headers of the other parts.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
partStack &amp;lt;PerspectivePartStack ID&amp;gt;&lt;br /&gt;
	[selectedElement &amp;lt;PerspectivePart ID&amp;gt;]&lt;br /&gt;
    &amp;amp;&lt;br /&gt;
	[spaceVolume &amp;lt;containerData STRING&amp;gt;] &lt;br /&gt;
    &amp;amp;&lt;br /&gt;
	[accessibility &amp;lt;accessibilityPhrase STRING&amp;gt;]&lt;br /&gt;
	{&lt;br /&gt;
PerspectiveElement &lt;br /&gt;
. . .&lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;selectedElement&amp;lt;/code&amp;gt;  is optional; you can select the next level perspective element here and which is selected will be shown in the first place.&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;spaceVolume&amp;lt;/code&amp;gt;  is optional, it redefine the space volume of this part stack in screen. A number will be defined to representing the relative size of this part stack.&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;accessibility&amp;lt;/code&amp;gt;  is optional, it can be any string; this field is provided as a way to inform accessibility screen readers with extra information. The intent is that the reader should 'say' this phrase as well as what it would normally emit given the widget hierarchy. A screen reader is an essential piece of software for a blind or visually impaired person. Simply put, a screen reader transmits whatever text is displayed on the computer screen into a form that a visually impaired user can process (usually tactile, auditory or a combination of both). While the most basic screen readers will not help blind users navigate a computer, those with additional features can give people with visual impairment much more independence.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
perspective Employee described by &amp;quot;Employee maintenance&amp;quot; iconURI &amp;quot;employee&amp;quot; {&lt;br /&gt;
	sashContainer outer orientation vertical {&lt;br /&gt;
		sashContainer top orientation horizontal {&lt;br /&gt;
			. . .&lt;br /&gt;
		}&lt;br /&gt;
		sashContainer bottom orientation horizontal {&lt;br /&gt;
			partStack EmployeeStack spaceVolume &amp;quot;70&amp;quot; {&lt;br /&gt;
				. . .&lt;br /&gt;
			}&lt;br /&gt;
			partStack Payroll spaceVolume &amp;quot;30&amp;quot; {&lt;br /&gt;
				. . .&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example, 2 &amp;lt;code&amp;gt;part stacks&amp;lt;/code&amp;gt; are defined under &amp;lt;code&amp;gt;sash container&amp;lt;/code&amp;gt; '''''bottom''''', they are '''''EmployeeStack''''' and '''''Payroll'''''. The sizes of them are redefined here, '''''EmployeeStack''''' takes 70% of the screen width and '''''payroll''''' takes the rest 30%. &lt;br /&gt;
&lt;br /&gt;
=====part=====&lt;br /&gt;
&lt;br /&gt;
Keyword part is used to define the main element part of perspective.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
part &amp;lt;PerspectivePart ID&amp;gt;&lt;br /&gt;
	[described by &amp;lt;description String&amp;gt;] &lt;br /&gt;
    &amp;amp;&lt;br /&gt;
	[spaceVolume &amp;lt;containerData STRING&amp;gt;] &lt;br /&gt;
    &amp;amp;&lt;br /&gt;
	[accessibility &amp;lt;accessibilityPhrase STRING&amp;gt;] &lt;br /&gt;
    &amp;amp;&lt;br /&gt;
	[iconURI &amp;lt;iconURI string&amp;gt;] &lt;br /&gt;
    &amp;amp;&lt;br /&gt;
	[view  select &amp;lt;table.Table&amp;gt; | table &amp;lt;table.Table&amp;gt;&lt;br /&gt;
| chart &amp;lt;chart.Chart&amp;gt; | report &amp;lt;report.Report&amp;gt;&lt;br /&gt;
| organigram &amp;lt;organization.Organization&amp;gt;&lt;br /&gt;
| topology &amp;lt;topology.Topology&amp;gt;&lt;br /&gt;
| dialog &amp;lt;dialog.Dialog&amp;gt; | grid &amp;lt;table.Table&amp;gt;&lt;br /&gt;
 ] &lt;br /&gt;
    &amp;amp;&lt;br /&gt;
	[isClosable]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;described by&amp;lt;/code&amp;gt;  is optional; you can use this keyword to define the description of this part.&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;spaceVolume&amp;lt;/code&amp;gt;  is optional, it redefine the space volume of this part in screen. A number will be defined to representing the relative size of this part.&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;accessibility&amp;lt;/code&amp;gt;  is optional, it can be any string; this field is provided as a way to inform accessibility screen readers with extra information. The intent is that the reader should 'say' this phrase as well as what it would normally emit given the widget hierarchy. A screen reader is an essential piece of software for a blind or visually impaired person. Simply put, a screen reader transmits whatever text is displayed on the computer screen into a form that a visually impaired user can process (usually tactile, auditory or a combination of both). While the most basic screen readers will not help blind users navigate a computer, those with additional features can give people with visual impairment much more independence.&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;iconURI&amp;lt;/code&amp;gt;  is optional, it define the identifier for a resource, e.g. icon file&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;view&amp;lt;/code&amp;gt;  is optional, it defines the predefined view of this part, it can be report, dialog, table, chart, organigram, topology.&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;isClosable&amp;lt;/code&amp;gt;  is optional; it will allow the user to close this part when this keyword is selected.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
perspective Employee described by &amp;quot;Employee maintenance&amp;quot; iconURI &amp;quot;employee&amp;quot; {&lt;br /&gt;
	sashContainer outer orientation vertical {&lt;br /&gt;
		sashContainer top orientation horizontal {&lt;br /&gt;
			part Orga spaceVolume &amp;quot;40&amp;quot; view organigram FoodMart&lt;br /&gt;
			part Employees spaceVolume &amp;quot;20&amp;quot; view table Employees&lt;br /&gt;
			part EmployeeDialog spaceVolume &amp;quot;40&amp;quot; view dialog Employee&lt;br /&gt;
		}&lt;br /&gt;
		. . .&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example, 3 &amp;lt;code&amp;gt;parts&amp;lt;/code&amp;gt; are defined under &amp;lt;code&amp;gt;sash container&amp;lt;/code&amp;gt; '''''top''''', they are '''''Orga''''', '''''Employees''''' and '''''EmployeeDialog'''''. The sizes of them are redefined here, '''''Orga''''' and '''''EmployeeDialog''''' take each 40% of the screen width and '''''Employees''''' takes the remaining 20%.  The view of '''''Orga''''' is the predefined &amp;lt;code&amp;gt;organigram&amp;lt;/code&amp;gt; '''''FoodMart'''''; the view of '''''Employees''''' is the predefined &amp;lt;code&amp;gt;table&amp;lt;/code&amp;gt; '''''Employee'''''; and the view of '''''EmployeeDialog''''' is the predefined &amp;lt;code&amp;gt;dialog&amp;lt;/code&amp;gt; '''''Employee'''''.&lt;br /&gt;
&lt;br /&gt;
== Copyright Notice ==&lt;br /&gt;
{{Copyright Notice}}&lt;/div&gt;</summary>
		<author><name>Riegel</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Perspective_DSL&amp;diff=3016</id>
		<title>Perspective DSL</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Perspective_DSL&amp;diff=3016"/>
				<updated>2018-02-26T16:11:32Z</updated>
		
		<summary type="html">&lt;p&gt;Riegel: /* part */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
Os.bee Applications which are generated using the OS.bee software factory have by default a front end based on the E4-UI-Model. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:PerspectiveDSL_01.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As you can recognize on the above graphics the main elements of theE4-Model are:&lt;br /&gt;
&lt;br /&gt;
* Perspective.  A perspective is a container for a set of UI graphic elements, like sash, part stack, part, area, etc. Perspectives can be used to store different arrangements of UI graphic elements. Each Workbench window contains one or more perspectives. A perspective defines the initial set and layout of views in the Workbench window. Each perspective provides a set of functionality aimed at accomplishing a specific type of task or works with specific types of resources.&lt;br /&gt;
&lt;br /&gt;
* Sash. A sash is a UI graphic elements container, and it displays all its children at the same time either horizontally or vertically aligned. Default is vertically aligned.&lt;br /&gt;
&lt;br /&gt;
* Part. A Part is a container for a view. Parts are user interface components which allow you to navigate and modify data.  &lt;br /&gt;
&lt;br /&gt;
* Part stack. A part stack contains a stack of parts showing the content of one part while displaying only the headers of the other parts.&lt;br /&gt;
&lt;br /&gt;
* View. A view is used to work on a set of data, which might be a hierarchical structure. If data is changed via the view, this change is directly applied to the underlying data structure. A predefined view could be a chart, a dialog, a grid, an organigram, a report, a select table, a table or a topology in OS.bee.&lt;br /&gt;
&lt;br /&gt;
==Perspective DSL==&lt;br /&gt;
&lt;br /&gt;
The PerspectiveDSL is used to build the ui for Os.bee Application. &lt;br /&gt;
&lt;br /&gt;
You can find instances of these elements in Os.bee Applications as follows: &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:PerspectiveDSL_02.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The main semantic elements of the PerspectiveDSL are:&lt;br /&gt;
&lt;br /&gt;
* “package” - the root element that contains all the other elements. A model can contain multiple packages. &lt;br /&gt;
&lt;br /&gt;
* “perspective” - define the perspective details, e.g. perspective name, the description… &lt;br /&gt;
&lt;br /&gt;
* “sashContainer” - define the main element sash container for the perspective. &lt;br /&gt;
&lt;br /&gt;
* “partStack” -  define the main element part stack for the perspective.&lt;br /&gt;
&lt;br /&gt;
* “part” -  the main element part for the perspective.&lt;br /&gt;
&lt;br /&gt;
* “view” -  define the part view of the perspective, it can be report, dialog, table, chart …&lt;br /&gt;
&lt;br /&gt;
===Syntax===&lt;br /&gt;
&lt;br /&gt;
====package definition====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
package &amp;lt;package name&amp;gt; [{&lt;br /&gt;
	perspective &amp;lt;perspective name&amp;gt;  . . .&lt;br /&gt;
. . .&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
One or more than one perspective could be defined in the same package.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
package net.osbee.sample.foodmart.perspectives {&lt;br /&gt;
	perspective Employee . . .&lt;br /&gt;
&lt;br /&gt;
	perspective Supplier . . .&lt;br /&gt;
&lt;br /&gt;
	perspective Products . . .&lt;br /&gt;
&lt;br /&gt;
	. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example &amp;lt;code&amp;gt;perspective&amp;lt;/code&amp;gt; Employee, &amp;lt;code&amp;gt;perspective&amp;lt;/code&amp;gt; Supplier, &amp;lt;code&amp;gt;perspective&amp;lt;/code&amp;gt; Products and also other perspectives are defined in the same &amp;lt;code&amp;gt;package&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
====perspective====&lt;br /&gt;
&lt;br /&gt;
This is the main part of this model. All the perspective details can be defined here.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
perspective &amp;lt;perspective name&amp;gt; [described by &amp;lt;description&amp;gt;]&lt;br /&gt;
	[process &amp;lt;blip.blip name&amp;gt; usertask &amp;lt;blip.BlipUserTask name&amp;gt;]&lt;br /&gt;
	([iconURI &amp;lt;iconURI&amp;gt;] &lt;br /&gt;
     &amp;amp;&lt;br /&gt;
	 [accessibility &amp;lt;accessibilityPhrase&amp;gt;] &lt;br /&gt;
     &amp;amp;&lt;br /&gt;
	 [toolbar &amp;lt;action.ActionToolbar&amp;gt;])&lt;br /&gt;
	{ &lt;br /&gt;
PerspectiveElement &lt;br /&gt;
		. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;described by&amp;lt;/code&amp;gt; is optional; you can use this keyword to define the description of this perspective.&lt;br /&gt;
&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;process. . . usertask. . . &amp;lt;/code&amp;gt; is optional, which define the blip process and blip usertask from predefined blipDSL for this perspective.&lt;br /&gt;
&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;iconURI&amp;lt;/code&amp;gt; is optional, it define the identifier for a resource, e.g. icon file.&lt;br /&gt;
&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;accessibility&amp;lt;/code&amp;gt; is optional, it can be any string; this field is provided as a way to inform accessibility screen readers with extra information. The intent is that the reader should 'say' this phrase as well as what it would normally emit given the widget hierarchy. A screen reader is an essential piece of software for a blind or visually impaired person. Simply put, a screen reader transmits whatever text is displayed on the computer screen into a form that a visually impaired user can process (usually tactile, auditory or a combination of both). While the most basic screen readers will not help blind users navigate a computer, those with additional features can give people with visual impairment much more independence.&lt;br /&gt;
&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;toolbar&amp;lt;/code&amp;gt; is optional, which define the action tool bar from predefined [[Action DSL]]. Graphical control elements are defined, on which on-screen buttons, icons, menus, or other input or output elements are placed.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
perspective Employee described by &amp;quot;Employee maintenance&amp;quot; iconURI &amp;quot;employee&amp;quot; {&lt;br /&gt;
. . .&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
perspective ProductMaintenanceSelect process ProductMaintenance usertask SelectSomeProducts toolbar HandleTask iconURI &amp;quot;information&amp;quot; {&lt;br /&gt;
	. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the next sections, the important elements and keywords of perspective will be introduced one by one.&lt;br /&gt;
&lt;br /&gt;
====PerspectiveElement====&lt;br /&gt;
&lt;br /&gt;
Keyword &amp;lt;code&amp;gt;PerspectiveElement&amp;lt;/code&amp;gt; is used to define the main elements of the perspective.&lt;br /&gt;
&lt;br /&gt;
The main elements are sash container, part stack and part.&lt;br /&gt;
&lt;br /&gt;
=====sashContainer=====&lt;br /&gt;
&lt;br /&gt;
Keyword &amp;lt;code&amp;gt;sashContainer&amp;lt;/code&amp;gt; is used to define the main element sash container of perspective. &lt;br /&gt;
&lt;br /&gt;
A sash container displays all its children at the same time either horizontally or vertically aligned.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
sashContainer &amp;lt;PerspectiveSashContainer ID&amp;gt;&lt;br /&gt;
	[orientation horizontal|vertical] &lt;br /&gt;
    &amp;amp;&lt;br /&gt;
	[selectedElement &amp;lt;PerspectiveElement ID&amp;gt;]&lt;br /&gt;
    &amp;amp;&lt;br /&gt;
	[spaceVolume &amp;lt;containerData STRING&amp;gt;] &lt;br /&gt;
    &amp;amp;&lt;br /&gt;
	[accessibility &amp;lt;accessibilityPhrase STRING&amp;gt;]&lt;br /&gt;
	{ &lt;br /&gt;
PerspectiveElement &lt;br /&gt;
. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;orientation&amp;lt;/code&amp;gt; is optional, it can be horizontal or vertical, and default value is vertical.&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;selectedElement&amp;lt;/code&amp;gt; is optional; you can select one of the next level perspective element here and which is selected will be shown in the first place.&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;spaceVolume&amp;lt;/code&amp;gt; is optional, it redefine the space volume of this sash container in screen. A number will be defined to representing the relative size of this container.&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;accessibility&amp;lt;/code&amp;gt; is optional, it can be any string; this field is provided as a way to inform accessibility screen readers with extra information. The intent is that the reader should 'say' this phrase as well as what it would normally emit given the widget hierarchy. A screen reader is an essential piece of software for a blind or visually impaired person. Simply put, a screen reader transmits whatever text is displayed on the computer screen into a form that a visually impaired user can process (usually tactile, auditory or a combination of both). While the most basic screen readers will not help blind users navigate a computer, those with additional features can give people with visual impairment much more independence.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
perspective Employee described by &amp;quot;Employee maintenance&amp;quot; iconURI &amp;quot;employee&amp;quot; {&lt;br /&gt;
	sashContainer outer orientation vertical {&lt;br /&gt;
		sashContainer top orientation horizontal {&lt;br /&gt;
			. . .&lt;br /&gt;
		}&lt;br /&gt;
		sashContainer bottom orientation horizontal {&lt;br /&gt;
			. . .&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example, in the first place, the &amp;lt;code&amp;gt;sash container&amp;lt;/code&amp;gt; '''''outer''''' is defined, in this sash container, 2 second level &amp;lt;code&amp;gt;sash containers&amp;lt;/code&amp;gt; are defined as horizontal, they are '''''top''''' and '''''bottom'''''.&lt;br /&gt;
&lt;br /&gt;
=====partStack=====&lt;br /&gt;
&lt;br /&gt;
Keyword &amp;lt;code&amp;gt;partStack&amp;lt;/code&amp;gt; is used to define the main element part stack of perspective.&lt;br /&gt;
&lt;br /&gt;
A part stack contains a stack of parts showing the contents of one part while displaying only the headers of the other parts.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
partStack &amp;lt;PerspectivePartStack ID&amp;gt;&lt;br /&gt;
	[selectedElement &amp;lt;PerspectivePart ID&amp;gt;]&lt;br /&gt;
    &amp;amp;&lt;br /&gt;
	[spaceVolume &amp;lt;containerData STRING&amp;gt;] &lt;br /&gt;
    &amp;amp;&lt;br /&gt;
	[accessibility &amp;lt;accessibilityPhrase STRING&amp;gt;]&lt;br /&gt;
	{&lt;br /&gt;
PerspectiveElement &lt;br /&gt;
. . .&lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;selectedElement&amp;lt;/code&amp;gt;  is optional; you can select the next level perspective element here and which is selected will be shown in the first place.&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;spaceVolume&amp;lt;/code&amp;gt;  is optional, it redefine the space volume of this part stack in screen. A number will be defined to representing the relative size of this part stack.&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;accessibility&amp;lt;/code&amp;gt;  is optional, it can be any string; this field is provided as a way to inform accessibility screen readers with extra information. The intent is that the reader should 'say' this phrase as well as what it would normally emit given the widget hierarchy. A screen reader is an essential piece of software for a blind or visually impaired person. Simply put, a screen reader transmits whatever text is displayed on the computer screen into a form that a visually impaired user can process (usually tactile, auditory or a combination of both). While the most basic screen readers will not help blind users navigate a computer, those with additional features can give people with visual impairment much more independence.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
perspective Employee described by &amp;quot;Employee maintenance&amp;quot; iconURI &amp;quot;employee&amp;quot; {&lt;br /&gt;
	sashContainer outer orientation vertical {&lt;br /&gt;
		sashContainer top orientation horizontal {&lt;br /&gt;
			. . .&lt;br /&gt;
		}&lt;br /&gt;
		sashContainer bottom orientation horizontal {&lt;br /&gt;
			partStack EmployeeStack spaceVolume &amp;quot;70&amp;quot; {&lt;br /&gt;
				. . .&lt;br /&gt;
			}&lt;br /&gt;
			partStack Payroll spaceVolume &amp;quot;30&amp;quot; {&lt;br /&gt;
				. . .&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example, 2 &amp;lt;code&amp;gt;part stacks&amp;lt;/code&amp;gt; are defined under &amp;lt;code&amp;gt;sash container&amp;lt;/code&amp;gt; '''''bottom''''', they are '''''EmployeeStack''''' and '''''Payroll'''''. The sizes of them are redefined here, '''''EmployeeStack''''' takes 70% of the screen width and '''''payroll''''' takes the rest 30%. &lt;br /&gt;
&lt;br /&gt;
=====part=====&lt;br /&gt;
&lt;br /&gt;
Keyword part is used to define the main element part of perspective.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
part &amp;lt;PerspectivePart ID&amp;gt;&lt;br /&gt;
	[described by &amp;lt;description String&amp;gt;] &lt;br /&gt;
    &amp;amp;&lt;br /&gt;
	[spaceVolume &amp;lt;containerData STRING&amp;gt;] &lt;br /&gt;
    &amp;amp;&lt;br /&gt;
	[accessibility &amp;lt;accessibilityPhrase STRING&amp;gt;] &lt;br /&gt;
    &amp;amp;&lt;br /&gt;
	[iconURI &amp;lt;iconURI string&amp;gt;] &lt;br /&gt;
    &amp;amp;&lt;br /&gt;
	[view  select &amp;lt;table.Table&amp;gt; | table &amp;lt;table.Table&amp;gt;&lt;br /&gt;
| chart &amp;lt;chart.Chart&amp;gt; | report &amp;lt;report.Report&amp;gt;&lt;br /&gt;
| organigram &amp;lt;organization.Organization&amp;gt;&lt;br /&gt;
| topology &amp;lt;topology.Topology&amp;gt;&lt;br /&gt;
| dialog &amp;lt;dialog.Dialog&amp;gt; | grid &amp;lt;table.Table&amp;gt;&lt;br /&gt;
 ] &lt;br /&gt;
    &amp;amp;&lt;br /&gt;
	[isClosable]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;described by&amp;lt;/code&amp;gt;  is optional; you can use this keyword to define the description of this part.&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;spaceVolume&amp;lt;/code&amp;gt;  is optional, it redefine the space volume of this part in screen. A number will be defined to representing the relative size of this part.&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;accessibility&amp;lt;/code&amp;gt;  is optional, it can be any string; this field is provided as a way to inform accessibility screen readers with extra information. The intent is that the reader should 'say' this phrase as well as what it would normally emit given the widget hierarchy. A screen reader is an essential piece of software for a blind or visually impaired person. Simply put, a screen reader transmits whatever text is displayed on the computer screen into a form that a visually impaired user can process (usually tactile, auditory or a combination of both). While the most basic screen readers will not help blind users navigate a computer, those with additional features can give people with visual impairment much more independence.&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;iconURI&amp;lt;/code&amp;gt;  is optional, it define the identifier for a resource, e.g. icon file&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;view&amp;lt;/code&amp;gt;  is optional, it defines the predefined view of this part, it can be report, dialog, table, chart, organigram, topology, bpmn.&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;isClosable&amp;lt;/code&amp;gt;  is optional; it will allow the user to close this part when this keyword is selected.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
perspective Employee described by &amp;quot;Employee maintenance&amp;quot; iconURI &amp;quot;employee&amp;quot; {&lt;br /&gt;
	sashContainer outer orientation vertical {&lt;br /&gt;
		sashContainer top orientation horizontal {&lt;br /&gt;
			part Orga spaceVolume &amp;quot;40&amp;quot; view organigram FoodMart&lt;br /&gt;
			part Employees spaceVolume &amp;quot;20&amp;quot; view table Employees&lt;br /&gt;
			part EmployeeDialog spaceVolume &amp;quot;40&amp;quot; view dialog Employee&lt;br /&gt;
		}&lt;br /&gt;
		. . .&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example, 3 &amp;lt;code&amp;gt;parts&amp;lt;/code&amp;gt; are defined under &amp;lt;code&amp;gt;sash container&amp;lt;/code&amp;gt; '''''top''''', they are '''''Orga''''', '''''Employees''''' and '''''EmployeeDialog'''''. The sizes of them are redefined here, '''''Orga''''' and '''''EmployeeDialog''''' take each 40% of the screen width and '''''Employees''''' takes the remaining 20%.  The view of '''''Orga''''' is the predefined &amp;lt;code&amp;gt;organigram&amp;lt;/code&amp;gt; '''''FoodMart'''''; the view of '''''Employees''''' is the predefined &amp;lt;code&amp;gt;table&amp;lt;/code&amp;gt; '''''Employee'''''; and the view of '''''EmployeeDialog''''' is the predefined &amp;lt;code&amp;gt;dialog&amp;lt;/code&amp;gt; '''''Employee'''''.&lt;br /&gt;
&lt;br /&gt;
== Copyright Notice ==&lt;br /&gt;
{{Copyright Notice}}&lt;/div&gt;</summary>
		<author><name>Riegel</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Perspective_DSL&amp;diff=3015</id>
		<title>Perspective DSL</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Perspective_DSL&amp;diff=3015"/>
				<updated>2018-02-26T16:11:08Z</updated>
		
		<summary type="html">&lt;p&gt;Riegel: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
Os.bee Applications which are generated using the OS.bee software factory have by default a front end based on the E4-UI-Model. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:PerspectiveDSL_01.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As you can recognize on the above graphics the main elements of theE4-Model are:&lt;br /&gt;
&lt;br /&gt;
* Perspective.  A perspective is a container for a set of UI graphic elements, like sash, part stack, part, area, etc. Perspectives can be used to store different arrangements of UI graphic elements. Each Workbench window contains one or more perspectives. A perspective defines the initial set and layout of views in the Workbench window. Each perspective provides a set of functionality aimed at accomplishing a specific type of task or works with specific types of resources.&lt;br /&gt;
&lt;br /&gt;
* Sash. A sash is a UI graphic elements container, and it displays all its children at the same time either horizontally or vertically aligned. Default is vertically aligned.&lt;br /&gt;
&lt;br /&gt;
* Part. A Part is a container for a view. Parts are user interface components which allow you to navigate and modify data.  &lt;br /&gt;
&lt;br /&gt;
* Part stack. A part stack contains a stack of parts showing the content of one part while displaying only the headers of the other parts.&lt;br /&gt;
&lt;br /&gt;
* View. A view is used to work on a set of data, which might be a hierarchical structure. If data is changed via the view, this change is directly applied to the underlying data structure. A predefined view could be a chart, a dialog, a grid, an organigram, a report, a select table, a table or a topology in OS.bee.&lt;br /&gt;
&lt;br /&gt;
==Perspective DSL==&lt;br /&gt;
&lt;br /&gt;
The PerspectiveDSL is used to build the ui for Os.bee Application. &lt;br /&gt;
&lt;br /&gt;
You can find instances of these elements in Os.bee Applications as follows: &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:PerspectiveDSL_02.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The main semantic elements of the PerspectiveDSL are:&lt;br /&gt;
&lt;br /&gt;
* “package” - the root element that contains all the other elements. A model can contain multiple packages. &lt;br /&gt;
&lt;br /&gt;
* “perspective” - define the perspective details, e.g. perspective name, the description… &lt;br /&gt;
&lt;br /&gt;
* “sashContainer” - define the main element sash container for the perspective. &lt;br /&gt;
&lt;br /&gt;
* “partStack” -  define the main element part stack for the perspective.&lt;br /&gt;
&lt;br /&gt;
* “part” -  the main element part for the perspective.&lt;br /&gt;
&lt;br /&gt;
* “view” -  define the part view of the perspective, it can be report, dialog, table, chart …&lt;br /&gt;
&lt;br /&gt;
===Syntax===&lt;br /&gt;
&lt;br /&gt;
====package definition====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
package &amp;lt;package name&amp;gt; [{&lt;br /&gt;
	perspective &amp;lt;perspective name&amp;gt;  . . .&lt;br /&gt;
. . .&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
One or more than one perspective could be defined in the same package.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
package net.osbee.sample.foodmart.perspectives {&lt;br /&gt;
	perspective Employee . . .&lt;br /&gt;
&lt;br /&gt;
	perspective Supplier . . .&lt;br /&gt;
&lt;br /&gt;
	perspective Products . . .&lt;br /&gt;
&lt;br /&gt;
	. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example &amp;lt;code&amp;gt;perspective&amp;lt;/code&amp;gt; Employee, &amp;lt;code&amp;gt;perspective&amp;lt;/code&amp;gt; Supplier, &amp;lt;code&amp;gt;perspective&amp;lt;/code&amp;gt; Products and also other perspectives are defined in the same &amp;lt;code&amp;gt;package&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
====perspective====&lt;br /&gt;
&lt;br /&gt;
This is the main part of this model. All the perspective details can be defined here.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
perspective &amp;lt;perspective name&amp;gt; [described by &amp;lt;description&amp;gt;]&lt;br /&gt;
	[process &amp;lt;blip.blip name&amp;gt; usertask &amp;lt;blip.BlipUserTask name&amp;gt;]&lt;br /&gt;
	([iconURI &amp;lt;iconURI&amp;gt;] &lt;br /&gt;
     &amp;amp;&lt;br /&gt;
	 [accessibility &amp;lt;accessibilityPhrase&amp;gt;] &lt;br /&gt;
     &amp;amp;&lt;br /&gt;
	 [toolbar &amp;lt;action.ActionToolbar&amp;gt;])&lt;br /&gt;
	{ &lt;br /&gt;
PerspectiveElement &lt;br /&gt;
		. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;described by&amp;lt;/code&amp;gt; is optional; you can use this keyword to define the description of this perspective.&lt;br /&gt;
&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;process. . . usertask. . . &amp;lt;/code&amp;gt; is optional, which define the blip process and blip usertask from predefined blipDSL for this perspective.&lt;br /&gt;
&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;iconURI&amp;lt;/code&amp;gt; is optional, it define the identifier for a resource, e.g. icon file.&lt;br /&gt;
&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;accessibility&amp;lt;/code&amp;gt; is optional, it can be any string; this field is provided as a way to inform accessibility screen readers with extra information. The intent is that the reader should 'say' this phrase as well as what it would normally emit given the widget hierarchy. A screen reader is an essential piece of software for a blind or visually impaired person. Simply put, a screen reader transmits whatever text is displayed on the computer screen into a form that a visually impaired user can process (usually tactile, auditory or a combination of both). While the most basic screen readers will not help blind users navigate a computer, those with additional features can give people with visual impairment much more independence.&lt;br /&gt;
&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;toolbar&amp;lt;/code&amp;gt; is optional, which define the action tool bar from predefined [[Action DSL]]. Graphical control elements are defined, on which on-screen buttons, icons, menus, or other input or output elements are placed.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
perspective Employee described by &amp;quot;Employee maintenance&amp;quot; iconURI &amp;quot;employee&amp;quot; {&lt;br /&gt;
. . .&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
perspective ProductMaintenanceSelect process ProductMaintenance usertask SelectSomeProducts toolbar HandleTask iconURI &amp;quot;information&amp;quot; {&lt;br /&gt;
	. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the next sections, the important elements and keywords of perspective will be introduced one by one.&lt;br /&gt;
&lt;br /&gt;
====PerspectiveElement====&lt;br /&gt;
&lt;br /&gt;
Keyword &amp;lt;code&amp;gt;PerspectiveElement&amp;lt;/code&amp;gt; is used to define the main elements of the perspective.&lt;br /&gt;
&lt;br /&gt;
The main elements are sash container, part stack and part.&lt;br /&gt;
&lt;br /&gt;
=====sashContainer=====&lt;br /&gt;
&lt;br /&gt;
Keyword &amp;lt;code&amp;gt;sashContainer&amp;lt;/code&amp;gt; is used to define the main element sash container of perspective. &lt;br /&gt;
&lt;br /&gt;
A sash container displays all its children at the same time either horizontally or vertically aligned.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
sashContainer &amp;lt;PerspectiveSashContainer ID&amp;gt;&lt;br /&gt;
	[orientation horizontal|vertical] &lt;br /&gt;
    &amp;amp;&lt;br /&gt;
	[selectedElement &amp;lt;PerspectiveElement ID&amp;gt;]&lt;br /&gt;
    &amp;amp;&lt;br /&gt;
	[spaceVolume &amp;lt;containerData STRING&amp;gt;] &lt;br /&gt;
    &amp;amp;&lt;br /&gt;
	[accessibility &amp;lt;accessibilityPhrase STRING&amp;gt;]&lt;br /&gt;
	{ &lt;br /&gt;
PerspectiveElement &lt;br /&gt;
. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;orientation&amp;lt;/code&amp;gt; is optional, it can be horizontal or vertical, and default value is vertical.&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;selectedElement&amp;lt;/code&amp;gt; is optional; you can select one of the next level perspective element here and which is selected will be shown in the first place.&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;spaceVolume&amp;lt;/code&amp;gt; is optional, it redefine the space volume of this sash container in screen. A number will be defined to representing the relative size of this container.&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;accessibility&amp;lt;/code&amp;gt; is optional, it can be any string; this field is provided as a way to inform accessibility screen readers with extra information. The intent is that the reader should 'say' this phrase as well as what it would normally emit given the widget hierarchy. A screen reader is an essential piece of software for a blind or visually impaired person. Simply put, a screen reader transmits whatever text is displayed on the computer screen into a form that a visually impaired user can process (usually tactile, auditory or a combination of both). While the most basic screen readers will not help blind users navigate a computer, those with additional features can give people with visual impairment much more independence.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
perspective Employee described by &amp;quot;Employee maintenance&amp;quot; iconURI &amp;quot;employee&amp;quot; {&lt;br /&gt;
	sashContainer outer orientation vertical {&lt;br /&gt;
		sashContainer top orientation horizontal {&lt;br /&gt;
			. . .&lt;br /&gt;
		}&lt;br /&gt;
		sashContainer bottom orientation horizontal {&lt;br /&gt;
			. . .&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example, in the first place, the &amp;lt;code&amp;gt;sash container&amp;lt;/code&amp;gt; '''''outer''''' is defined, in this sash container, 2 second level &amp;lt;code&amp;gt;sash containers&amp;lt;/code&amp;gt; are defined as horizontal, they are '''''top''''' and '''''bottom'''''.&lt;br /&gt;
&lt;br /&gt;
=====partStack=====&lt;br /&gt;
&lt;br /&gt;
Keyword &amp;lt;code&amp;gt;partStack&amp;lt;/code&amp;gt; is used to define the main element part stack of perspective.&lt;br /&gt;
&lt;br /&gt;
A part stack contains a stack of parts showing the contents of one part while displaying only the headers of the other parts.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
partStack &amp;lt;PerspectivePartStack ID&amp;gt;&lt;br /&gt;
	[selectedElement &amp;lt;PerspectivePart ID&amp;gt;]&lt;br /&gt;
    &amp;amp;&lt;br /&gt;
	[spaceVolume &amp;lt;containerData STRING&amp;gt;] &lt;br /&gt;
    &amp;amp;&lt;br /&gt;
	[accessibility &amp;lt;accessibilityPhrase STRING&amp;gt;]&lt;br /&gt;
	{&lt;br /&gt;
PerspectiveElement &lt;br /&gt;
. . .&lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;selectedElement&amp;lt;/code&amp;gt;  is optional; you can select the next level perspective element here and which is selected will be shown in the first place.&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;spaceVolume&amp;lt;/code&amp;gt;  is optional, it redefine the space volume of this part stack in screen. A number will be defined to representing the relative size of this part stack.&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;accessibility&amp;lt;/code&amp;gt;  is optional, it can be any string; this field is provided as a way to inform accessibility screen readers with extra information. The intent is that the reader should 'say' this phrase as well as what it would normally emit given the widget hierarchy. A screen reader is an essential piece of software for a blind or visually impaired person. Simply put, a screen reader transmits whatever text is displayed on the computer screen into a form that a visually impaired user can process (usually tactile, auditory or a combination of both). While the most basic screen readers will not help blind users navigate a computer, those with additional features can give people with visual impairment much more independence.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
perspective Employee described by &amp;quot;Employee maintenance&amp;quot; iconURI &amp;quot;employee&amp;quot; {&lt;br /&gt;
	sashContainer outer orientation vertical {&lt;br /&gt;
		sashContainer top orientation horizontal {&lt;br /&gt;
			. . .&lt;br /&gt;
		}&lt;br /&gt;
		sashContainer bottom orientation horizontal {&lt;br /&gt;
			partStack EmployeeStack spaceVolume &amp;quot;70&amp;quot; {&lt;br /&gt;
				. . .&lt;br /&gt;
			}&lt;br /&gt;
			partStack Payroll spaceVolume &amp;quot;30&amp;quot; {&lt;br /&gt;
				. . .&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example, 2 &amp;lt;code&amp;gt;part stacks&amp;lt;/code&amp;gt; are defined under &amp;lt;code&amp;gt;sash container&amp;lt;/code&amp;gt; '''''bottom''''', they are '''''EmployeeStack''''' and '''''Payroll'''''. The sizes of them are redefined here, '''''EmployeeStack''''' takes 70% of the screen width and '''''payroll''''' takes the rest 30%. &lt;br /&gt;
&lt;br /&gt;
=====part=====&lt;br /&gt;
&lt;br /&gt;
Keyword part is used to define the main element part of perspective.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
part &amp;lt;PerspectivePart ID&amp;gt;&lt;br /&gt;
	[described by &amp;lt;description String&amp;gt;] &lt;br /&gt;
    &amp;amp;&lt;br /&gt;
	[spaceVolume &amp;lt;containerData STRING&amp;gt;] &lt;br /&gt;
    &amp;amp;&lt;br /&gt;
	[accessibility &amp;lt;accessibilityPhrase STRING&amp;gt;] &lt;br /&gt;
    &amp;amp;&lt;br /&gt;
	[iconURI &amp;lt;iconURI string&amp;gt;] &lt;br /&gt;
    &amp;amp;&lt;br /&gt;
	[view  select &amp;lt;table.Table&amp;gt; | table &amp;lt;table.Table&amp;gt;&lt;br /&gt;
| chart &amp;lt;chart.Chart&amp;gt; | report &amp;lt;report.Report&amp;gt;&lt;br /&gt;
| organigram &amp;lt;organization.Organization&amp;gt;&lt;br /&gt;
| topology &amp;lt;topology.Topology&amp;gt;&lt;br /&gt;
| dialog &amp;lt;dialog.Dialog&amp;gt; | bpmn | grid &amp;lt;table.Table&amp;gt;&lt;br /&gt;
 ] &lt;br /&gt;
    &amp;amp;&lt;br /&gt;
	[isClosable]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;described by&amp;lt;/code&amp;gt;  is optional; you can use this keyword to define the description of this part.&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;spaceVolume&amp;lt;/code&amp;gt;  is optional, it redefine the space volume of this part in screen. A number will be defined to representing the relative size of this part.&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;accessibility&amp;lt;/code&amp;gt;  is optional, it can be any string; this field is provided as a way to inform accessibility screen readers with extra information. The intent is that the reader should 'say' this phrase as well as what it would normally emit given the widget hierarchy. A screen reader is an essential piece of software for a blind or visually impaired person. Simply put, a screen reader transmits whatever text is displayed on the computer screen into a form that a visually impaired user can process (usually tactile, auditory or a combination of both). While the most basic screen readers will not help blind users navigate a computer, those with additional features can give people with visual impairment much more independence.&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;iconURI&amp;lt;/code&amp;gt;  is optional, it define the identifier for a resource, e.g. icon file&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;view&amp;lt;/code&amp;gt;  is optional, it defines the predefined view of this part, it can be report, dialog, table, chart, organigram, topology, bpmn.&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;isClosable&amp;lt;/code&amp;gt;  is optional; it will allow the user to close this part when this keyword is selected.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
perspective Employee described by &amp;quot;Employee maintenance&amp;quot; iconURI &amp;quot;employee&amp;quot; {&lt;br /&gt;
	sashContainer outer orientation vertical {&lt;br /&gt;
		sashContainer top orientation horizontal {&lt;br /&gt;
			part Orga spaceVolume &amp;quot;40&amp;quot; view organigram FoodMart&lt;br /&gt;
			part Employees spaceVolume &amp;quot;20&amp;quot; view table Employees&lt;br /&gt;
			part EmployeeDialog spaceVolume &amp;quot;40&amp;quot; view dialog Employee&lt;br /&gt;
		}&lt;br /&gt;
		. . .&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example, 3 &amp;lt;code&amp;gt;parts&amp;lt;/code&amp;gt; are defined under &amp;lt;code&amp;gt;sash container&amp;lt;/code&amp;gt; '''''top''''', they are '''''Orga''''', '''''Employees''''' and '''''EmployeeDialog'''''. The sizes of them are redefined here, '''''Orga''''' and '''''EmployeeDialog''''' take each 40% of the screen width and '''''Employees''''' takes the remaining 20%.  The view of '''''Orga''''' is the predefined &amp;lt;code&amp;gt;organigram&amp;lt;/code&amp;gt; '''''FoodMart'''''; the view of '''''Employees''''' is the predefined &amp;lt;code&amp;gt;table&amp;lt;/code&amp;gt; '''''Employee'''''; and the view of '''''EmployeeDialog''''' is the predefined &amp;lt;code&amp;gt;dialog&amp;lt;/code&amp;gt; '''''Employee'''''.&lt;br /&gt;
&lt;br /&gt;
== Copyright Notice ==&lt;br /&gt;
{{Copyright Notice}}&lt;/div&gt;</summary>
		<author><name>Riegel</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Eclipse_4_Application_Model&amp;diff=2634</id>
		<title>Eclipse 4 Application Model</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Eclipse_4_Application_Model&amp;diff=2634"/>
				<updated>2017-10-19T09:20:44Z</updated>
		
		<summary type="html">&lt;p&gt;Riegel: /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Description==&lt;br /&gt;
OS.bee acts like an Eclipse 4 application, therefore the foundation is the E4 application model. &lt;br /&gt;
[[File:E4ApplicationModel.png|center|frame|''Figure 1: E4 application model.'']]&lt;br /&gt;
OS.bee is not a RCP application but renders on browsers as a web application using the [https://vaadin.com/ Vaadin framework]. To achieve this, a bridging framework works between the E4 application model and Vaadin. The framework is called [http://semanticsoft.github.io/vaaclipse/ Vaaclipse].&lt;br /&gt;
[[File:E4browser.png|center|frame|''Figure 2: OS.bee E4 application model in a browser.'']]&lt;br /&gt;
The presented &amp;quot;Foodmart&amp;quot; example is based on [https://mondrian.pentaho.com/documentation/installation.php Pentaho's Mondrian] scheme and data. The data of the chart is generated by a cube created with the [[Cube DSL|''Cube DSL Model'']]&lt;/div&gt;</summary>
		<author><name>Riegel</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Eclipse_4_Application_Model&amp;diff=2633</id>
		<title>Eclipse 4 Application Model</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Eclipse_4_Application_Model&amp;diff=2633"/>
				<updated>2017-10-19T09:18:09Z</updated>
		
		<summary type="html">&lt;p&gt;Riegel: /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Description==&lt;br /&gt;
OS.bee acts like an Eclipse 4 application, therefore the foundation is the E4 application model. &lt;br /&gt;
[[File:E4ApplicationModel.png|center|frame|''Figure 1: E4 application model.'']]&lt;br /&gt;
OS.bee is not a RCP application but renders on browsers as a web application using the [https://vaadin.com/ Vaadin framework]. To achieve this, a bridging framework works between the E4 application model and Vaadin. The framework is called [http://semanticsoft.github.io/vaaclipse/ Vaaclipse].&lt;br /&gt;
[[File:E4browser.png|center|frame|''Figure 2: OS.bee E4 application model in a browser.'']]&lt;br /&gt;
The shown &amp;quot;Foodmart&amp;quot; example is based on [https://mondrian.pentaho.com/documentation/installation.php Pentaho's Mondrian] scheme and data.&lt;/div&gt;</summary>
		<author><name>Riegel</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Eclipse_4_Application_Model&amp;diff=2632</id>
		<title>Eclipse 4 Application Model</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Eclipse_4_Application_Model&amp;diff=2632"/>
				<updated>2017-10-19T09:14:19Z</updated>
		
		<summary type="html">&lt;p&gt;Riegel: /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Description==&lt;br /&gt;
OS.bee acts like an Eclipse 4 application, therefore the foundation is the E4 application model. &lt;br /&gt;
[[File:E4ApplicationModel.png|center|frame|''Figure 1: E4 application model.'']]&lt;br /&gt;
OS.bee is not a RCP application but renders on browsers as a web application using the [https://vaadin.com/ Vaadin framework]. To achieve this, a bridging framework works between the E4 application model and Vaadin. The framework is called [http://semanticsoft.github.io/vaaclipse/ Vaaclipse].&lt;br /&gt;
[[File:E4browser.png|center|frame|''Figure 2: OS.bee E4 application model in a browser.'']]&lt;/div&gt;</summary>
		<author><name>Riegel</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Eclipse_4_Application_Model&amp;diff=2631</id>
		<title>Eclipse 4 Application Model</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Eclipse_4_Application_Model&amp;diff=2631"/>
				<updated>2017-10-19T09:13:43Z</updated>
		
		<summary type="html">&lt;p&gt;Riegel: /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Description==&lt;br /&gt;
OS.bee acts like an Eclipse 4 application, therefore the foundation is the E4 application model. &lt;br /&gt;
[[File:E4ApplicationModel.png|center|frame|''Figure 1: E4 application model.'']]&lt;br /&gt;
OS.bee is not a RCP application but renders on browsers as a web application using the [https://vaadin.com/ Vaadin framework]. To achieve this a bridging framework works between the E4 application model and Vaadin. The framework is called [http://semanticsoft.github.io/vaaclipse/ Vaaclipse].&lt;br /&gt;
[[File:E4browser.png|center|frame|''Figure 2: OS.bee E4 application model in a browser.'']]&lt;/div&gt;</summary>
		<author><name>Riegel</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Eclipse_4_Application_Model&amp;diff=2629</id>
		<title>Eclipse 4 Application Model</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Eclipse_4_Application_Model&amp;diff=2629"/>
				<updated>2017-10-19T08:31:40Z</updated>
		
		<summary type="html">&lt;p&gt;Riegel: /* Purpose */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Description==&lt;br /&gt;
OS.bee acts like an Eclipse 4 application, the foundation is therefore the E4 application model. &lt;br /&gt;
[[File:E4ApplicationModel.png|center|frame|''Figure 1: E4 application model.'']]&lt;br /&gt;
OS.bee is not a RCP application but renders on browsers as a web application using the [https://vaadin.com/ Vaadin framework]. To achieve this a bridging framework works between the E4 application model and Vaadin. The framework is called [http://semanticsoft.github.io/vaaclipse/ Vaaclipse].&lt;br /&gt;
[[File:E4browser.png|center|frame|''Figure 2: OS.bee E4 application model in a browser.'']]&lt;/div&gt;</summary>
		<author><name>Riegel</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=File:E4browser.png&amp;diff=2628</id>
		<title>File:E4browser.png</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=File:E4browser.png&amp;diff=2628"/>
				<updated>2017-10-19T08:30:22Z</updated>
		
		<summary type="html">&lt;p&gt;Riegel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Riegel</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Eclipse_4_Application_Model&amp;diff=2627</id>
		<title>Eclipse 4 Application Model</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Eclipse_4_Application_Model&amp;diff=2627"/>
				<updated>2017-10-19T08:29:22Z</updated>
		
		<summary type="html">&lt;p&gt;Riegel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Purpose==&lt;br /&gt;
OS.bee acts like an Eclipse 4 application, the foundation is therefore the E4 application model. &lt;br /&gt;
[[File:E4ApplicationModel.png|center|frame|''Figure 1: E4 application model.'']]&lt;br /&gt;
OS.bee is not a RCP application but renders on browsers as a web application using the [https://vaadin.com/ Vaadin framework]. To achieve this a bridging framework works between the E4 application model and Vaadin. The framework is called [http://semanticsoft.github.io/vaaclipse/ Vaaclipse].&lt;br /&gt;
[[File:E4browser.png|center|frame|''Figure 2: OS.bee E4 application model in a browser.'']]&lt;/div&gt;</summary>
		<author><name>Riegel</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Eclipse_4_Application_Model&amp;diff=2626</id>
		<title>Eclipse 4 Application Model</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Eclipse_4_Application_Model&amp;diff=2626"/>
				<updated>2017-10-19T07:53:55Z</updated>
		
		<summary type="html">&lt;p&gt;Riegel: /* Purpose */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Purpose==&lt;br /&gt;
OS.bee acts like an Eclipse 4 application, the foundation is therefore the E4 application model. &lt;br /&gt;
[[File:E4ApplicationModel.png|center|frame|''Figure 1: E4 application model.'']]&lt;br /&gt;
OS.bee is not a RCP application but renders on browsers as a web application using the [https://vaadin.com/ Vaadin framework]. To achieve this a bridging framework works between the E4 application model and Vaadin. The framework is called [http://semanticsoft.github.io/vaaclipse/ Vaaclipse].&lt;/div&gt;</summary>
		<author><name>Riegel</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Eclipse_4_Application_Model&amp;diff=2625</id>
		<title>Eclipse 4 Application Model</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Eclipse_4_Application_Model&amp;diff=2625"/>
				<updated>2017-10-19T07:42:36Z</updated>
		
		<summary type="html">&lt;p&gt;Riegel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Purpose==&lt;br /&gt;
OS.bee acts like an Eclipse 4 application, the foundation is therefore the E4 application model. &lt;br /&gt;
[[File:E4ApplicationModel.png|center|frame|''Figure 1: E4 application model.'']]&lt;br /&gt;
OS.bee is not a RCP application but renders on browsers as a web application using the Vaadin framework. To achieve this a bridging framework works between the E4 application model and Vaadin. The framework is called Vaaclipse.&lt;/div&gt;</summary>
		<author><name>Riegel</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Eclipse_4_Application_Model&amp;diff=2624</id>
		<title>Eclipse 4 Application Model</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Eclipse_4_Application_Model&amp;diff=2624"/>
				<updated>2017-10-19T07:41:55Z</updated>
		
		<summary type="html">&lt;p&gt;Riegel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Purpose==&lt;br /&gt;
Like every Eclipse 4 application, the foundation is the application model. &lt;br /&gt;
[[File:E4ApplicationModel.png|center|frame|''Figure 1: E4 application model.'']]&lt;br /&gt;
OS.bee is not a RCP application but renders on browsers as a web application using the Vaadin framework. To achieve this a bridging framework works between the E4 application model and Vaadin. The framework is called Vaaclipse.&lt;/div&gt;</summary>
		<author><name>Riegel</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=File:E4ApplicationModel.png&amp;diff=2623</id>
		<title>File:E4ApplicationModel.png</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=File:E4ApplicationModel.png&amp;diff=2623"/>
				<updated>2017-10-19T07:41:38Z</updated>
		
		<summary type="html">&lt;p&gt;Riegel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Riegel</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Eclipse_4_Application_Model&amp;diff=2622</id>
		<title>Eclipse 4 Application Model</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Eclipse_4_Application_Model&amp;diff=2622"/>
				<updated>2017-10-19T07:38:42Z</updated>
		
		<summary type="html">&lt;p&gt;Riegel: Created page with &amp;quot;==Purpose== Like every Eclipse 4 application, the foundation is the application model.  ''Figure 1: E4 application model.'' OS.bee...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Purpose==&lt;br /&gt;
Like every Eclipse 4 application, the foundation is the application model. &lt;br /&gt;
[[File:E4ApplicationModel.pdf|center|frame|''Figure 1: E4 application model.'']]&lt;br /&gt;
OS.bee is not a RCP application but renders on browsers as a web application using the Vaadin framework. To achieve this a bridging framework works between the E4 application model and Vaadin. The framework is called Vaaclipse.&lt;/div&gt;</summary>
		<author><name>Riegel</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=OS.bee_Software_Factory_Documentation&amp;diff=2621</id>
		<title>OS.bee Software Factory Documentation</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=OS.bee_Software_Factory_Documentation&amp;diff=2621"/>
				<updated>2017-10-19T07:30:05Z</updated>
		
		<summary type="html">&lt;p&gt;Riegel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=OS.bee DSL Documentation=&lt;br /&gt;
The ''OS.bee Software Factory'' is composed of various domain specific languages (DSLs), which are described in detail on the following pages.&lt;br /&gt;
&lt;br /&gt;
==[[Datatype DSL]]==&lt;br /&gt;
The [[Datatype DSL]] is, beside the Entity DSL, one of the most basic DSL for the Software Factory. It provides you with the most common used basic (atomic) datatypes by mapping them. It also allows you to define new simple and complex datatypes. As mentioned above the creation of entities via the [[Entity DSL]] is pivotal in order to create applications with the OSBP Software Factory. Therefore the Datatype DSL is in that manner a central milestone.&lt;br /&gt;
&lt;br /&gt;
Several custom datatypes will also be described in detail in this chapter. &lt;br /&gt;
&lt;br /&gt;
==[[Entity DSL]]==&lt;br /&gt;
The [[Entity DSL]] is,  beside Datatypes, the basic DSL for the Software Factory. It allows you, through the creation of entity model files, to describe the entity relationship models that will be used to create, read, update and delete content on a persistence level, such as with an SQL database.&lt;br /&gt;
&lt;br /&gt;
==[[DTO DSL]]==&lt;br /&gt;
The [[DTO DSL]] handles data transfer objects in order to transfer data between processes. It uses the [[Entity DSL]].&lt;br /&gt;
&lt;br /&gt;
==[[Chart DSL]]==&lt;br /&gt;
The [[Chart DSL]] provides Vaadin dCharts.&lt;br /&gt;
&lt;br /&gt;
==[[Cube DSL]]==&lt;br /&gt;
The [[Cube DSL]] provides MDX access to Mondrian OLAP Cubes.&lt;br /&gt;
&lt;br /&gt;
==[[Datamart DSL]]==&lt;br /&gt;
A datamart is a condensed and more focused version of a data warehouse that reflects the regulations and process specifications of each business unit within an organization.  Each datamart is dedicated to a specific business function or region.&lt;br /&gt;
&lt;br /&gt;
==[[Dialog DSL]]==&lt;br /&gt;
The [[Dialog DSL]] generates the [https://vaadin.com/home Vaadin] UI&lt;br /&gt;
&lt;br /&gt;
==[[Datainterchange DSL]]==&lt;br /&gt;
The [[Datainterchange DSL]] provides import and export functionalities. While all the basic components and interfaces for its usage are defined inside its API package, extended (commercial) features are implemented and based on the [https://www.smooks.org/ Smooks] framework.&lt;br /&gt;
&lt;br /&gt;
==[[Report DSL]]==&lt;br /&gt;
The [[Report DSL]] generates the [https://vaadin.com/home Vaadin] UI and the [http://developer.actuate.com/about/ BIRT] report module.&lt;br /&gt;
&lt;br /&gt;
==[[Table DSL ]]==&lt;br /&gt;
The [[Table DSL]] generates the [https://vaadin.com/home Vaadin] table UI.&lt;br /&gt;
&lt;br /&gt;
==[[Topology DSL ]]==&lt;br /&gt;
The [[Topology DSL]] generates [https://d3js.org/ D3.js], a JavaScript library for manipulating documents based on data, to generate the visualization of topology charts.   Data used is [https://github.com/topojson topojson], an extension of [http://geojson.org/ GeoJSON] that encodes topology and the corresponding UI components.&lt;br /&gt;
&lt;br /&gt;
==[[UI DSL ]]==&lt;br /&gt;
The UI DSL describes the user interface of an OS.bee application.&lt;br /&gt;
&lt;br /&gt;
==[[Entitymock DSL]]==&lt;br /&gt;
The [[Entitymock DSL]] generates mock data for entity models automatically upon initialization.&lt;br /&gt;
&lt;br /&gt;
==[[Statemachine DSL]]==&lt;br /&gt;
The [[Statemachine DSL]] adds behavior to user interfaces.  Instances of this DSL interconnect UI instances, FunctionLibrary instances, persistence layers and peripheral devices, and therefore act as controllers in a multiple Model-View-Controller environment.  There is no limitation of how many statemachine instances control a single business application.&lt;br /&gt;
&lt;br /&gt;
==[[Authorization DSL]]==&lt;br /&gt;
&lt;br /&gt;
AuthorizationDSL is used to authorize the roles at runtime.&lt;br /&gt;
&lt;br /&gt;
==[[Organization DSL]]==&lt;br /&gt;
&lt;br /&gt;
OrganizationDSL is used to define the organizations and their positions.&lt;br /&gt;
&lt;br /&gt;
==[[Perspective DSL]]==&lt;br /&gt;
&lt;br /&gt;
Os.bee Applications which are generated using the OS.bee software factory have by default a front end based on the E4-UI-Model.&lt;br /&gt;
&lt;br /&gt;
==[[Action DSL]]==&lt;br /&gt;
&lt;br /&gt;
The Action DSL defines actions that change the OS.bee data models for tasks, select workloads, dialogs, reports, charts, workflows, datainterchange, user interface and functions.&lt;br /&gt;
&lt;br /&gt;
==[[Message DSL]]==&lt;br /&gt;
&lt;br /&gt;
The Message DSL centralizes the contents and definitions of all possible output messages, that will be shown inside the application and make them available to other DSL models, such as the [[Action DSL]].&lt;br /&gt;
&lt;br /&gt;
==[[Menu DSL]]==&lt;br /&gt;
&lt;br /&gt;
Menu model is used for the UI menu definition.&lt;br /&gt;
&lt;br /&gt;
==[[Strategy DSL]]==&lt;br /&gt;
&lt;br /&gt;
==[[How to add pictures]]==&lt;br /&gt;
&lt;br /&gt;
==[[Eclipse 4 Application Model]]==&lt;br /&gt;
&lt;br /&gt;
All UI elements use the E4 model and embed into the E4 service environment. &lt;br /&gt;
&lt;br /&gt;
=Other OS.bee-Specific Solutions=&lt;br /&gt;
The ''OS.bee Software Factory'' also provides other solutions, which are described in detail on the following pages.&lt;br /&gt;
&lt;br /&gt;
==[[Themes]]==&lt;br /&gt;
&lt;br /&gt;
=OS.bee Third-Party Software Solutions=&lt;br /&gt;
OS.bee also uses products of other software vendors (third-party products) that are based on open-source products.&lt;br /&gt;
&lt;br /&gt;
==[[Peripheral Devices]]==&lt;/div&gt;</summary>
		<author><name>Riegel</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=OS.bee_Software_Factory_Documentation&amp;diff=2620</id>
		<title>OS.bee Software Factory Documentation</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=OS.bee_Software_Factory_Documentation&amp;diff=2620"/>
				<updated>2017-10-19T07:29:40Z</updated>
		
		<summary type="html">&lt;p&gt;Riegel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=OS.bee DSL Documentation=&lt;br /&gt;
The ''OS.bee Software Factory'' is composed of various domain specific languages (DSLs), which are described in detail on the following pages.&lt;br /&gt;
&lt;br /&gt;
==[[Datatype DSL]]==&lt;br /&gt;
The [[Datatype DSL]] is, beside the Entity DSL, one of the most basic DSL for the Software Factory. It provides you with the most common used basic (atomic) datatypes by mapping them. It also allows you to define new simple and complex datatypes. As mentioned above the creation of entities via the [[Entity DSL]] is pivotal in order to create applications with the OSBP Software Factory. Therefore the Datatype DSL is in that manner a central milestone.&lt;br /&gt;
&lt;br /&gt;
Several custom datatypes will also be described in detail in this chapter. &lt;br /&gt;
&lt;br /&gt;
==[[Entity DSL]]==&lt;br /&gt;
The [[Entity DSL]] is,  beside Datatypes, the basic DSL for the Software Factory. It allows you, through the creation of entity model files, to describe the entity relationship models that will be used to create, read, update and delete content on a persistence level, such as with an SQL database.&lt;br /&gt;
&lt;br /&gt;
==[[DTO DSL]]==&lt;br /&gt;
The [[DTO DSL]] handles data transfer objects in order to transfer data between processes. It uses the [[Entity DSL]].&lt;br /&gt;
&lt;br /&gt;
==[[Chart DSL]]==&lt;br /&gt;
The [[Chart DSL]] provides Vaadin dCharts.&lt;br /&gt;
&lt;br /&gt;
==[[Cube DSL]]==&lt;br /&gt;
The [[Cube DSL]] provides MDX access to Mondrian OLAP Cubes.&lt;br /&gt;
&lt;br /&gt;
==[[Datamart DSL]]==&lt;br /&gt;
A datamart is a condensed and more focused version of a data warehouse that reflects the regulations and process specifications of each business unit within an organization.  Each datamart is dedicated to a specific business function or region.&lt;br /&gt;
&lt;br /&gt;
==[[Dialog DSL]]==&lt;br /&gt;
The [[Dialog DSL]] generates the [https://vaadin.com/home Vaadin] UI&lt;br /&gt;
&lt;br /&gt;
==[[Datainterchange DSL]]==&lt;br /&gt;
The [[Datainterchange DSL]] provides import and export functionalities. While all the basic components and interfaces for its usage are defined inside its API package, extended (commercial) features are implemented and based on the [https://www.smooks.org/ Smooks] framework.&lt;br /&gt;
&lt;br /&gt;
==[[Report DSL]]==&lt;br /&gt;
The [[Report DSL]] generates the [https://vaadin.com/home Vaadin] UI and the [http://developer.actuate.com/about/ BIRT] report module.&lt;br /&gt;
&lt;br /&gt;
==[[Table DSL ]]==&lt;br /&gt;
The [[Table DSL]] generates the [https://vaadin.com/home Vaadin] table UI.&lt;br /&gt;
&lt;br /&gt;
==[[Topology DSL ]]==&lt;br /&gt;
The [[Topology DSL]] generates [https://d3js.org/ D3.js], a JavaScript library for manipulating documents based on data, to generate the visualization of topology charts.   Data used is [https://github.com/topojson topojson], an extension of [http://geojson.org/ GeoJSON] that encodes topology and the corresponding UI components.&lt;br /&gt;
&lt;br /&gt;
==[[UI DSL ]]==&lt;br /&gt;
The UI DSL describes the user interface of an OS.bee application.&lt;br /&gt;
&lt;br /&gt;
==[[Entitymock DSL]]==&lt;br /&gt;
The [[Entitymock DSL]] generates mock data for entity models automatically upon initialization.&lt;br /&gt;
&lt;br /&gt;
==[[Statemachine DSL]]==&lt;br /&gt;
The [[Statemachine DSL]] adds behavior to user interfaces.  Instances of this DSL interconnect UI instances, FunctionLibrary instances, persistence layers and peripheral devices, and therefore act as controllers in a multiple Model-View-Controller environment.  There is no limitation of how many statemachine instances control a single business application.&lt;br /&gt;
&lt;br /&gt;
==[[Authorization DSL]]==&lt;br /&gt;
&lt;br /&gt;
AuthorizationDSL is used to authorize the roles at runtime.&lt;br /&gt;
&lt;br /&gt;
==[[Organization DSL]]==&lt;br /&gt;
&lt;br /&gt;
OrganizationDSL is used to define the organizations and their positions.&lt;br /&gt;
&lt;br /&gt;
==[[Perspective DSL]]==&lt;br /&gt;
&lt;br /&gt;
Os.bee Applications which are generated using the OS.bee software factory have by default a front end based on the E4-UI-Model.&lt;br /&gt;
&lt;br /&gt;
==[[Action DSL]]==&lt;br /&gt;
&lt;br /&gt;
The Action DSL defines actions that change the OS.bee data models for tasks, select workloads, dialogs, reports, charts, workflows, datainterchange, user interface and functions.&lt;br /&gt;
&lt;br /&gt;
==[[Message DSL]]==&lt;br /&gt;
&lt;br /&gt;
The Message DSL centralizes the contents and definitions of all possible output messages, that will be shown inside the application and make them available to other DSL models, such as the [[Action DSL]].&lt;br /&gt;
&lt;br /&gt;
==[[Menu DSL]]==&lt;br /&gt;
&lt;br /&gt;
Menu model is used for the UI menu definition.&lt;br /&gt;
&lt;br /&gt;
==[[Strategy DSL]]==&lt;br /&gt;
&lt;br /&gt;
==[[How to add pictures]]==&lt;br /&gt;
&lt;br /&gt;
==[[Eclipse 4 Application Model]]&lt;br /&gt;
&lt;br /&gt;
All UI elements use the E4 model and embed into the E4 service environment. &lt;br /&gt;
&lt;br /&gt;
=Other OS.bee-Specific Solutions=&lt;br /&gt;
The ''OS.bee Software Factory'' also provides other solutions, which are described in detail on the following pages.&lt;br /&gt;
&lt;br /&gt;
==[[Themes]]==&lt;br /&gt;
&lt;br /&gt;
=OS.bee Third-Party Software Solutions=&lt;br /&gt;
OS.bee also uses products of other software vendors (third-party products) that are based on open-source products.&lt;br /&gt;
&lt;br /&gt;
==[[Peripheral Devices]]==&lt;/div&gt;</summary>
		<author><name>Riegel</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=OS.bee_Software_Factory_Documentation&amp;diff=2618</id>
		<title>OS.bee Software Factory Documentation</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=OS.bee_Software_Factory_Documentation&amp;diff=2618"/>
				<updated>2017-10-19T07:02:33Z</updated>
		
		<summary type="html">&lt;p&gt;Riegel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=OS.bee DSL Documentation=&lt;br /&gt;
The ''OS.bee Software Factory'' is composed of various domain specific languages (DSLs), which are described in detail on the following pages.&lt;br /&gt;
&lt;br /&gt;
==[[Datatype DSL]]==&lt;br /&gt;
The [[Datatype DSL]] is, beside the Entity DSL, one of the most basic DSL for the Software Factory. It provides you with the most common used basic (atomic) datatypes by mapping them. It also allows you to define new simple and complex datatypes. As mentioned above the creation of entities via the [[Entity DSL]] is pivotal in order to create applications with the OSBP Software Factory. Therefore the Datatype DSL is in that manner a central milestone.&lt;br /&gt;
&lt;br /&gt;
Several custom datatypes will also be described in detail in this chapter. &lt;br /&gt;
&lt;br /&gt;
==[[Entity DSL]]==&lt;br /&gt;
The [[Entity DSL]] is,  beside Datatypes, the basic DSL for the Software Factory. It allows you, through the creation of entity model files, to describe the entity relationship models that will be used to create, read, update and delete content on a persistence level, such as with an SQL database.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==[[DTO DSL]]==&lt;br /&gt;
The [[DTO DSL]] handles data transfer objects in order to transfer data between processes. It uses the [[Entity DSL]].&lt;br /&gt;
&lt;br /&gt;
==[[Chart DSL]]==&lt;br /&gt;
The [[Chart DSL]] provides Vaadin dCharts.&lt;br /&gt;
&lt;br /&gt;
==[[Cube DSL]]==&lt;br /&gt;
The [[Cube DSL]] provides MDX access to Mondrian OLAP Cubes.&lt;br /&gt;
&lt;br /&gt;
==[[Datamart DSL]]==&lt;br /&gt;
A datamart is a condensed and more focused version of a data warehouse that reflects the regulations and process specifications of each business unit within an organization.  Each datamart is dedicated to a specific business function or region.&lt;br /&gt;
&lt;br /&gt;
==[[Dialog DSL]]==&lt;br /&gt;
The [[Dialog DSL]] generates the [https://vaadin.com/home Vaadin] UI&lt;br /&gt;
&lt;br /&gt;
==[[Datainterchange DSL]]==&lt;br /&gt;
The [[Datainterchange DSL]] provides import and export functionalities. While all the basic components and interfaces for its usage are defined inside its API package, extended (commercial) features are implemented and based on the [https://www.smooks.org/ Smooks] framework.&lt;br /&gt;
&lt;br /&gt;
==[[Report DSL]]==&lt;br /&gt;
The [[Report DSL]] generates the [https://vaadin.com/home Vaadin] UI and the [http://developer.actuate.com/about/ BIRT] report module.&lt;br /&gt;
&lt;br /&gt;
==[[Table DSL ]]==&lt;br /&gt;
The [[Table DSL]] generates the [https://vaadin.com/home Vaadin] table UI.&lt;br /&gt;
&lt;br /&gt;
==[[Topology DSL ]]==&lt;br /&gt;
The [[Topology DSL]] generates [https://d3js.org/ D3.js], a JavaScript library for manipulating documents based on data, to generate the visualization of topology charts.   Data used is [https://github.com/topojson topojson], an extension of [http://geojson.org/ GeoJSON] that encodes topology and the corresponding UI components.&lt;br /&gt;
&lt;br /&gt;
==[[UI DSL ]]==&lt;br /&gt;
The UI DSL describes the user interface of an OS.bee application.&lt;br /&gt;
&lt;br /&gt;
==[[Entitymock DSL]]==&lt;br /&gt;
The [[Entitymock DSL]] generates mock data for entity models automatically upon initialization.&lt;br /&gt;
&lt;br /&gt;
==[[Statemachine DSL]]==&lt;br /&gt;
The [[Statemachine DSL]] adds behavior to user interfaces.  Instances of this DSL interconnect UI instances, FunctionLibrary instances, persistence layers and peripheral devices, and therefore act as controllers in a multiple Model-View-Controller environment.  There is no limitation of how many statemachine instances control a single business application.&lt;br /&gt;
&lt;br /&gt;
==[[Authorization DSL]]==&lt;br /&gt;
&lt;br /&gt;
AuthorizationDSL is used to authorize the roles at runtime.&lt;br /&gt;
&lt;br /&gt;
==[[Organization DSL]]==&lt;br /&gt;
&lt;br /&gt;
OrganizationDSL is used to define the organizations and their positions.&lt;br /&gt;
&lt;br /&gt;
==[[Perspective DSL]]==&lt;br /&gt;
&lt;br /&gt;
Os.bee Applications which are generated using the OS.bee software factory have by default a front end based on the E4-UI-Model.&lt;br /&gt;
&lt;br /&gt;
==[[Action DSL]]==&lt;br /&gt;
&lt;br /&gt;
The Action DSL defines actions that change the OS.bee data models for tasks, select workloads, dialogs, reports, charts, workflows, datainterchange, user interface and functions.&lt;br /&gt;
&lt;br /&gt;
==[[Message DSL]]==&lt;br /&gt;
&lt;br /&gt;
The Message DSL centralizes the contents and definitions of all possible output messages, that will be shown inside the application and make them available to other DSL models, such as the [[Action DSL]].&lt;br /&gt;
&lt;br /&gt;
==[[Menu DSL]]==&lt;br /&gt;
&lt;br /&gt;
Menu model is used for the UI menu definition.&lt;br /&gt;
&lt;br /&gt;
==[[Strategy DSL]]==&lt;br /&gt;
&lt;br /&gt;
==[[How to add pictures]]==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Other OS.bee-Specific Solutions=&lt;br /&gt;
The ''OS.bee Software Factory'' also provides other solutions, which are described in detail on the following pages.&lt;br /&gt;
&lt;br /&gt;
==[[Themes]]==&lt;br /&gt;
&lt;br /&gt;
=OS.bee Third-Party Software Solutions=&lt;br /&gt;
OS.bee also uses products of other software vendors (third-party products) that are based on open-source products.&lt;br /&gt;
&lt;br /&gt;
==[[Peripheral Devices]]==&lt;/div&gt;</summary>
		<author><name>Riegel</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=AutowireHelper&amp;diff=2616</id>
		<title>AutowireHelper</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=AutowireHelper&amp;diff=2616"/>
				<updated>2017-10-19T06:54:45Z</updated>
		
		<summary type="html">&lt;p&gt;Riegel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purpose of an AutowireHelper is the model to model transformation of a [[Entity DSL|''Entity DSL Model'']] or a [[DTO DSL|''DTO DSL Model'']] to an ecview model. An ecview model represents the model for a dialog. It either can be generated by an AutowireHelper or is created by using the [[UI DSL|''UI DSL Model'']] manually. This enables the system to create user interfaces automatically according to the underlying entity. As entity model changes, dialogs using the autobinding keyword and referencing the associated DTO do the same. An autowiring implements rules how to interprete data types and structural information to a valid ecview model. AutowireHelper uses metadata associated with the [[Entity DSL|''Entity DSL Model'']] or [[Datatype DSL|''Datatype DSL Model'']] supplied as properties to modify the transformation behaviour. The generated ecview model is persisted as xmi file and will be interpreted during runtime by a renderer consuming the model. The resulting dialog follows the E4 annotation style and embeds as a view to be placed in an E4 MPart. The placment is done by using [[Perspective DSL|''Perspective DSL Model'']].&lt;br /&gt;
&lt;br /&gt;
To include a custom autowire helper as delegate for the Service to use an entry in the plugin.xml is required.&lt;br /&gt;
See the following code as template:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;?eclipse version=&amp;quot;3.4&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;plugin&amp;gt;&lt;br /&gt;
     &amp;lt;extension&lt;br /&gt;
           point=&amp;quot;org.lunifera.ecview.dsl.autowireDelegate&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;autowireDelegate&lt;br /&gt;
              autowireDelegateClass=&amp;quot;de.compex.autowirehelper.AutowireHelper&amp;quot;&lt;br /&gt;
              id=&amp;quot;de.compex.autowireHelper.autowireDelegate&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;/autowireDelegate&amp;gt;&lt;br /&gt;
     &amp;lt;/extension&amp;gt;&lt;br /&gt;
&amp;lt;/plugin&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Riegel</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=AutowireHelper&amp;diff=2615</id>
		<title>AutowireHelper</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=AutowireHelper&amp;diff=2615"/>
				<updated>2017-10-19T06:50:54Z</updated>
		
		<summary type="html">&lt;p&gt;Riegel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purpose of an AutowireHelper is the model to model transformation of a entity model or a DTO model to an ecview model. An ecview model represents the model for a dialog. It either can be generated by an AutowireHelper or manually by using the ui model. This enables the system to create user interfaces automatically according to the underlying entity. As entity model changes, dialogs using the autobinding keyword and referencing the associated DTO do the same. An autowiring implements rules how to interprete data types and structural information to a valid ecview model. AutowireHelper uses metadata associated with the entity model to modify the transformation behaviour. The generated ecview model is persisted as xmi file and will be interpreted during runtime by a renderer consuming the model. The resulting dialog follows the E4 annotation style and embeds as a view to be placed in an E4 MPart. The placment is done by using [[Perspective DSL|''Perspective DSL Model'']].&lt;br /&gt;
&lt;br /&gt;
To include a custom autowire helper as delegate for the Service to use an entry in the plugin.xml is required.&lt;br /&gt;
See the following code as template:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;?eclipse version=&amp;quot;3.4&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;plugin&amp;gt;&lt;br /&gt;
     &amp;lt;extension&lt;br /&gt;
           point=&amp;quot;org.lunifera.ecview.dsl.autowireDelegate&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;autowireDelegate&lt;br /&gt;
              autowireDelegateClass=&amp;quot;de.compex.autowirehelper.AutowireHelper&amp;quot;&lt;br /&gt;
              id=&amp;quot;de.compex.autowireHelper.autowireDelegate&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;/autowireDelegate&amp;gt;&lt;br /&gt;
     &amp;lt;/extension&amp;gt;&lt;br /&gt;
&amp;lt;/plugin&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Riegel</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=AutowireHelper&amp;diff=2614</id>
		<title>AutowireHelper</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=AutowireHelper&amp;diff=2614"/>
				<updated>2017-10-19T06:49:47Z</updated>
		
		<summary type="html">&lt;p&gt;Riegel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purpose of an AutowireHelper is the model to model transformation of a entity model or a DTO model to an ecview model. An ecview model represents the model for a dialog. It either can be generated by an AutowireHelper or manually by using the ui model. This enables the system to create user interfaces automatically according to the underlying entity. As entity model changes, dialogs using the autobinding keyword and referencing the associated DTO do the same. An autowiring implements rules how to interprete data types and structural information to a valid ecview model. AutowireHelper uses metadata associated with the entity model to modify the transformation behaviour. The generated ecview model is persisted as xmi file and will be interpreted during runtime by a renderer consuming the model. The resulting dialog follows the E4 annotation style and embeds as a view to be placed in an E4 MPart. The placment is done by using Perspective DSL.&lt;br /&gt;
&lt;br /&gt;
To include a custom autowire helper as delegate for the Service to use an entry in the plugin.xml is required.&lt;br /&gt;
See the following code as template:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;?eclipse version=&amp;quot;3.4&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;plugin&amp;gt;&lt;br /&gt;
     &amp;lt;extension&lt;br /&gt;
           point=&amp;quot;org.lunifera.ecview.dsl.autowireDelegate&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;autowireDelegate&lt;br /&gt;
              autowireDelegateClass=&amp;quot;de.compex.autowirehelper.AutowireHelper&amp;quot;&lt;br /&gt;
              id=&amp;quot;de.compex.autowireHelper.autowireDelegate&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;/autowireDelegate&amp;gt;&lt;br /&gt;
     &amp;lt;/extension&amp;gt;&lt;br /&gt;
&amp;lt;/plugin&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Riegel</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=AutowireHelper&amp;diff=2613</id>
		<title>AutowireHelper</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=AutowireHelper&amp;diff=2613"/>
				<updated>2017-10-19T06:45:09Z</updated>
		
		<summary type="html">&lt;p&gt;Riegel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purpose of an AutowireHelper is the model to model transformation of a entity model or a DTO model to an ecview model. An ecview model represents the model for a dialog. It either can be generated by an AutowireHelper or manually by using the ui model. This enables the system to create user interfaces automatically according to the underlying entity. As entity model changes, dialogs using the autobinding keyword and referencing the associated DTO do the same. An autowiring implements rules how to interprete data types and structural information to a valid ecview model. AutowireHelper uses metadata associated with the entity model to modify the transformation behaviour.&lt;br /&gt;
&lt;br /&gt;
To include a custom autowire helper as delegate for the Service to use an entry in the plugin.xml is required.&lt;br /&gt;
See the following code as template:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;?eclipse version=&amp;quot;3.4&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;plugin&amp;gt;&lt;br /&gt;
     &amp;lt;extension&lt;br /&gt;
           point=&amp;quot;org.lunifera.ecview.dsl.autowireDelegate&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;autowireDelegate&lt;br /&gt;
              autowireDelegateClass=&amp;quot;de.compex.autowirehelper.AutowireHelper&amp;quot;&lt;br /&gt;
              id=&amp;quot;de.compex.autowireHelper.autowireDelegate&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;/autowireDelegate&amp;gt;&lt;br /&gt;
     &amp;lt;/extension&amp;gt;&lt;br /&gt;
&amp;lt;/plugin&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Riegel</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Statemachine_DSL&amp;diff=2485</id>
		<title>Statemachine DSL</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Statemachine_DSL&amp;diff=2485"/>
				<updated>2017-09-27T08:50:50Z</updated>
		
		<summary type="html">&lt;p&gt;Riegel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
=== State Machine ===&lt;br /&gt;
&lt;br /&gt;
'''State Machine''' or '''extended finite-state machine (EFSM)''' is a mathematical model of computation and represents an abstract machine that can be in exactly one of a finite number of states at any given time. The State Machine can change from one ''state'' to another in response to external ''events''. The change from one state to another is called a ''transition''. A EFSM is defined by a list of its states, its ''initial state'', and the conditions for each transition. The condition for a transition is called ''guard''. There can be many guards protecting a transition to be triggered. Every guard is joined with a logical AND operation, so every guard must evaluate to true, to trigger a protected transition. Data operations can occur before a transition. They are called ''actions''. Actions prepare the indicated state of the transition, calculate things or display information.&lt;br /&gt;
The StatemachineDSL described in the following implements an EFSM where the FSM-block is represented by ''states'', the A-block is called ''actions'' and the E-block is called ''guards''.&lt;br /&gt;
&lt;br /&gt;
=== Further reading ===&lt;br /&gt;
&lt;br /&gt;
https://en.wikipedia.org/wiki/Finite-state_machine&lt;br /&gt;
&lt;br /&gt;
https://en.wikipedia.org/wiki/Extended_finite-state_machine&lt;br /&gt;
&lt;br /&gt;
https://en.wikipedia.org/wiki/UML_state_machine&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Statemachine DSL ==&lt;br /&gt;
Statemachine DSL implements the state pattern (https://en.wikipedia.org/wiki/State_pattern) and interconnects UI model, FunctionLibrary, DTO and peripheral services like JavaPOS, ZVT protocol and others.&lt;br /&gt;
&lt;br /&gt;
The main semantic elements of the StatemachineDSL are:&lt;br /&gt;
*'''package''' - The root element that contains all the other elements. A model can contain multiple packages. &lt;br /&gt;
*'''import''' declarations - Used to import external models or other Java classes.&lt;br /&gt;
*'''statemachine''' - The container for the implementation of the EFSM following the state pattern.&lt;br /&gt;
*'''events''' -  Contains all user defined events.&lt;br /&gt;
*'''event''' - Defines a single event by id. Events build the interconnection elements between controls and transitions.&lt;br /&gt;
*'''controls''' - The container for all type of beans (https://en.wikipedia.org/wiki/JavaBeans) to be controlled by the state machine.&lt;br /&gt;
*'''scheduler''' - A type of bean that can be triggered to emit a defined event after a defined delay.&lt;br /&gt;
*'''keypad''' - A type of bean that builds a keypad containing one or more buttons to emit a defined event when pressed.&lt;br /&gt;
*'''fields''' - A type of bean that holds data of input fields or labels from UI.&lt;br /&gt;
*'''dataProvider''' - A type of bean that retrieves and stores data based on DTO.&lt;br /&gt;
*'''peripheral''' - A type of bean that controls input/output operations with peripheral units. Peripheral units can be printers, displays or other external devices following the JavaPOS standard (http://www.javapos.com/). Peripheral units can also emit events representing its current state or error.&lt;br /&gt;
*'''attribute''' - Defines different types for usage with control.&lt;br /&gt;
*'''states''' - The container for all state definitions of this state machine.&lt;br /&gt;
*'''state''' - A single state the machine can be at a point in time.&lt;br /&gt;
*'''triggers''' - The container for all possible event processing blocks inside a state.&lt;br /&gt;
*'''trigger''' - The action block following this trigger will be executed when one of its events occur.&lt;br /&gt;
*'''actions''' - The container for all process instructions to be done in sequence inside this block. Optionally an action block can follow a transition.&lt;br /&gt;
*'''transistion''' - The transition will be executed when all actions of this block were processed successfully.&lt;br /&gt;
*'''guards''' - The container for guards protecting the following transistion.&lt;br /&gt;
*'''guard''' - A condition that must evaluate to true that the following transistion will be processed.&lt;br /&gt;
&lt;br /&gt;
====Syntax====&lt;br /&gt;
&lt;br /&gt;
=====package definition=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
package &amp;lt;package name&amp;gt;  {&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====statemachinee=====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Copyright Notice ==&lt;br /&gt;
{{Copyright Notice}}&lt;/div&gt;</summary>
		<author><name>Riegel</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Statemachine_DSL&amp;diff=2484</id>
		<title>Statemachine DSL</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Statemachine_DSL&amp;diff=2484"/>
				<updated>2017-09-27T08:50:19Z</updated>
		
		<summary type="html">&lt;p&gt;Riegel: /* package definition */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
=== State Machine ===&lt;br /&gt;
&lt;br /&gt;
'''State Machine''' or '''extended finite-state machine (EFSM)''' is a mathematical model of computation and represents an abstract machine that can be in exactly one of a finite number of states at any given time. The State Machine can change from one ''state'' to another in response to external ''events''. The change from one state to another is called a ''transition''. A EFSM is defined by a list of its states, its ''initial state'', and the conditions for each transition. The condition for a transition is called ''guard''. There can be many guards protecting a transition to be triggered. Every guard is joined with a logical AND operation, so every guard must evaluate to true, to trigger a protected transition. Data operations can occur before a transition. They are called ''actions''. Actions prepare the indicated state of the transition, calculate things or display information.&lt;br /&gt;
The StatemachineDSL described in the following implements an EFSM where the FSM-block is represented by ''states'', the A-block is called ''actions'' and the E-block is called ''guards''.&lt;br /&gt;
&lt;br /&gt;
=== Further reading ===&lt;br /&gt;
&lt;br /&gt;
https://en.wikipedia.org/wiki/Finite-state_machine&lt;br /&gt;
&lt;br /&gt;
https://en.wikipedia.org/wiki/Extended_finite-state_machine&lt;br /&gt;
&lt;br /&gt;
https://en.wikipedia.org/wiki/UML_state_machine&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Statemachine DSL ==&lt;br /&gt;
Statemachine DSL implements the state pattern (https://en.wikipedia.org/wiki/State_pattern) and interconnects UI model, FunctionLibrary, DTO and peripheral services like JavaPOS, ZVT protocol and others.&lt;br /&gt;
&lt;br /&gt;
The main semantic elements of the StatemachineDSL are:&lt;br /&gt;
*'''package''' - The root element that contains all the other elements. A model can contain multiple packages. &lt;br /&gt;
*'''import''' declarations - Used to import external models or other Java classes.&lt;br /&gt;
*'''statemachine''' - The container for the implementation of the EFSM following the state pattern.&lt;br /&gt;
*'''events''' -  Contains all user defined events.&lt;br /&gt;
*'''event''' - Defines a single event by id. Events build the interconnection elements between controls and transitions.&lt;br /&gt;
*'''controls''' - The container for all type of beans (https://en.wikipedia.org/wiki/JavaBeans) to be controlled by the state machine.&lt;br /&gt;
*'''scheduler''' - A type of bean that can be triggered to emit a defined event after a defined delay.&lt;br /&gt;
*'''keypad''' - A type of bean that builds a keypad containing one or more buttons to emit a defined event when pressed.&lt;br /&gt;
*'''fields''' - A type of bean that holds data of input fields or labels from UI.&lt;br /&gt;
*'''dataProvider''' - A type of bean that retrieves and stores data based on DTO.&lt;br /&gt;
*'''peripheral''' - A type of bean that controls input/output operations with peripheral units. Peripheral units can be printers, displays or other external devices following the JavaPOS standard (http://www.javapos.com/). Peripheral units can also emit events representing its current state or error.&lt;br /&gt;
*'''attribute''' - Defines different types for usage with control.&lt;br /&gt;
*'''states''' - The container for all state definitions of this state machine.&lt;br /&gt;
*'''state''' - A single state the machine can be at a point in time.&lt;br /&gt;
*'''triggers''' - The container for all possible event processing blocks inside a state.&lt;br /&gt;
*'''trigger''' - The action block following this trigger will be executed when one of its events occur.&lt;br /&gt;
*'''actions''' - The container for all process instructions to be done in sequence inside this block. Optionally an action block can follow a transition.&lt;br /&gt;
*'''transistion''' - The transition will be executed when all actions of this block were processed successfully.&lt;br /&gt;
*'''guards''' - The container for guards protecting the following transistion.&lt;br /&gt;
*'''guard''' - A condition that must evaluate to true that the following transistion will be processed.&lt;br /&gt;
&lt;br /&gt;
====Syntax====&lt;br /&gt;
&lt;br /&gt;
=====package definition=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
package &amp;lt;package name&amp;gt;  {&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====table=====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Copyright Notice ==&lt;br /&gt;
{{Copyright Notice}}&lt;/div&gt;</summary>
		<author><name>Riegel</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Statemachine_DSL&amp;diff=2482</id>
		<title>Statemachine DSL</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Statemachine_DSL&amp;diff=2482"/>
				<updated>2017-09-27T07:01:39Z</updated>
		
		<summary type="html">&lt;p&gt;Riegel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
=== State Machine ===&lt;br /&gt;
&lt;br /&gt;
'''State Machine''' or '''extended finite-state machine (EFSM)''' is a mathematical model of computation and represents an abstract machine that can be in exactly one of a finite number of states at any given time. The State Machine can change from one ''state'' to another in response to external ''events''. The change from one state to another is called a ''transition''. A EFSM is defined by a list of its states, its ''initial state'', and the conditions for each transition. The condition for a transition is called ''guard''. There can be many guards protecting a transition to be triggered. Every guard is joined with a logical AND operation, so every guard must evaluate to true, to trigger a protected transition. Data operations can occur before a transition. They are called ''actions''. Actions prepare the indicated state of the transition, calculate things or display information.&lt;br /&gt;
The StatemachineDSL described in the following implements an EFSM where the FSM-block is represented by ''states'', the A-block is called ''actions'' and the E-block is called ''guards''.&lt;br /&gt;
&lt;br /&gt;
=== Further reading ===&lt;br /&gt;
&lt;br /&gt;
https://en.wikipedia.org/wiki/Finite-state_machine&lt;br /&gt;
&lt;br /&gt;
https://en.wikipedia.org/wiki/Extended_finite-state_machine&lt;br /&gt;
&lt;br /&gt;
https://en.wikipedia.org/wiki/UML_state_machine&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Statemachine DSL ==&lt;br /&gt;
Statemachine DSL implements the state pattern (https://en.wikipedia.org/wiki/State_pattern) and interconnects UI model, FunctionLibrary, DTO and peripheral services like JavaPOS, ZVT protocol and others.&lt;br /&gt;
&lt;br /&gt;
The main semantic elements of the StatemachineDSL are:&lt;br /&gt;
*'''package''' - The root element that contains all the other elements. A model can contain multiple packages. &lt;br /&gt;
*'''import''' declarations - Used to import external models or other Java classes.&lt;br /&gt;
*'''statemachine''' - The container for the implementation of the EFSM following the state pattern.&lt;br /&gt;
*'''events''' -  Contains all user defined events.&lt;br /&gt;
*'''event''' - Defines a single event by id. Events build the interconnection elements between controls and transitions.&lt;br /&gt;
*'''controls''' - The container for all type of beans (https://en.wikipedia.org/wiki/JavaBeans) to be controlled by the state machine.&lt;br /&gt;
*'''scheduler''' - A type of bean that can be triggered to emit a defined event after a defined delay.&lt;br /&gt;
*'''keypad''' - A type of bean that builds a keypad containing one or more buttons to emit a defined event when pressed.&lt;br /&gt;
*'''fields''' - A type of bean that holds data of input fields or labels from UI.&lt;br /&gt;
*'''dataProvider''' - A type of bean that retrieves and stores data based on DTO.&lt;br /&gt;
*'''peripheral''' - A type of bean that controls input/output operations with peripheral units. Peripheral units can be printers, displays or other external devices following the JavaPOS standard (http://www.javapos.com/). Peripheral units can also emit events representing its current state or error.&lt;br /&gt;
*'''attribute''' - Defines different types for usage with control.&lt;br /&gt;
*'''states''' - The container for all state definitions of this state machine.&lt;br /&gt;
*'''state''' - A single state the machine can be at a point in time.&lt;br /&gt;
*'''triggers''' - The container for all possible event processing blocks inside a state.&lt;br /&gt;
*'''trigger''' - The action block following this trigger will be executed when one of its events occur.&lt;br /&gt;
*'''actions''' - The container for all process instructions to be done in sequence inside this block. Optionally an action block can follow a transition.&lt;br /&gt;
*'''transistion''' - The transition will be executed when all actions of this block were processed successfully.&lt;br /&gt;
*'''guards''' - The container for guards protecting the following transistion.&lt;br /&gt;
*'''guard''' - A condition that must evaluate to true that the following transistion will be processed.&lt;br /&gt;
&lt;br /&gt;
====Syntax====&lt;br /&gt;
&lt;br /&gt;
=====package definition=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
package &amp;lt;package name&amp;gt;  {&lt;br /&gt;
    import &amp;lt;import models/class name&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    table ... [using datamart &amp;lt;datamart name&amp;gt;&lt;br /&gt;
    {&lt;br /&gt;
        axis...[details{...}]&lt;br /&gt;
        [events{...}]&lt;br /&gt;
        [actions{...}]&lt;br /&gt;
    }]&lt;br /&gt;
    ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====table=====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Copyright Notice ==&lt;br /&gt;
{{Copyright Notice}}&lt;/div&gt;</summary>
		<author><name>Riegel</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=File:Git-Preferences.png&amp;diff=1832</id>
		<title>File:Git-Preferences.png</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=File:Git-Preferences.png&amp;diff=1832"/>
				<updated>2017-06-27T11:51:17Z</updated>
		
		<summary type="html">&lt;p&gt;Riegel: Riegel uploaded a new version of File:Git-Preferences.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Riegel</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=OS.bee_Software_Factory_Installation_Neon&amp;diff=1831</id>
		<title>OS.bee Software Factory Installation Neon</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=OS.bee_Software_Factory_Installation_Neon&amp;diff=1831"/>
				<updated>2017-06-27T11:49:18Z</updated>
		
		<summary type="html">&lt;p&gt;Riegel: /* Set preferences in Eclipse */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== General information ==&lt;br /&gt;
=== Copyright Notice ===&lt;br /&gt;
{{Copyright Notice}}&lt;br /&gt;
&lt;br /&gt;
=== License information ===&lt;br /&gt;
&lt;br /&gt;
{{License information}}&lt;br /&gt;
&lt;br /&gt;
== Installation of the Software Factory ==&lt;br /&gt;
&lt;br /&gt;
=== Before you start ===&lt;br /&gt;
&lt;br /&gt;
==== Java Version ====&lt;br /&gt;
&lt;br /&gt;
To be able to use the OS.bee Software Factory, you need to have the right Java version installed.&lt;br /&gt;
&lt;br /&gt;
On Windows, this is '''Java JDK 8 64bit''' [http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html#javasejdk Java SE Downloads].  If you have Java installed, there is generally a Java icon on the control panel which will enable you to find out the current version.&lt;br /&gt;
&lt;br /&gt;
==== Eclipse Version ====&lt;br /&gt;
&lt;br /&gt;
To be able to use the OS.bee Software Factory, you need to have the correct Eclipse Neon version installed.&lt;br /&gt;
You can use [https://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/neon/3/eclipse-dsl-neon-3-win32-x86_64.zip&amp;amp;mirror_id=1190 Eclipse Neon 3 DSL Developers].&lt;br /&gt;
Download and extract it to a folder location of your choosing. On Windows, we recommend '''C:\'''. This results in the installation folder '''C:\eclipse'''. This will be the assumed Eclipse installation folder for the rest of this document.&lt;br /&gt;
&lt;br /&gt;
To be able to launch Eclipse easily, create a shortcut to the program '''C:\eclipse\eclipse.exe''' on the computer's desktop . Be sure to add the parameter &amp;lt;code&amp;gt;-data /path/to/your/workspace&amp;lt;/code&amp;gt; to the shortcut's invocation of Eclipse in order to start in the correct workspace in the future.  Otherwise, you will be prompted to specify a workspace each time you start Eclipse. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Make the following change to the '''eclipse.ini''' file found in the '''C:\eclipse''' folder:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
-Xmx4096m&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This line allocates extra memory for Eclipse to use.&lt;br /&gt;
&lt;br /&gt;
A resulting '''eclipse.ini''' file for a Windows installation might look like this:&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;existing lines above&amp;gt;&lt;br /&gt;
 -Xms128m&lt;br /&gt;
 -Xmx4096m&lt;br /&gt;
&lt;br /&gt;
==== OS.bee P2 Repository ====&lt;br /&gt;
&lt;br /&gt;
'''At the moment, the installation is only possible if you have access to the internal network. Use this --&amp;gt; [http://ccngiw2.compex.de/downloads/p2/osbee/neon/latest/ link] directly in Eclipse.'''&lt;br /&gt;
&lt;br /&gt;
=== Installation of the OS.bee Software Factory ===&lt;br /&gt;
&lt;br /&gt;
# Start the new Eclipse installation and select or define a workspace. It is important that each Eclipse installation is assigned to its own workspace.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:Workspace1.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Go to the menu bar and select Help -&amp;gt; Install New Software....&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:NeonOsbeeInstall01.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Get the link to the repository from the [http://www.osbee.org/free-download/ download page], as described above, and paste it into the field labeled '''Work with:'''. Then press '''Enter''' to make Eclipse load the content of the repository.&amp;lt;br&amp;gt; &amp;lt;br&amp;gt;[[File:OSbeeInstall05.PNG|600px]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Open the &amp;quot;OS.bee Software Factory&amp;quot; group, select the &amp;quot;OS.bee Software Factory&amp;quot; and click on '''Next'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:NeonOsbeeInstall02.png|600px]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# If during installation you encounter this just hit '''Next'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:NeonOsbeeInstall99.png|600px]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# In the installation dialog, confirm the software to be installed by clicking on '''Next'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:NeonOsbeeInstall03.png|600px]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Accept the terms of the license aggreement after reading them carefully, and then confirm the dialog by clicking on '''Finish'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:NeonOsbeeInstall04.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# The installation will now start. This may take a while, depending on your internet connection speed.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:NeonOsbeeInstall05.png|600px]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# After the software has been downloaded, confirm the &amp;quot;Security Warning&amp;quot; dialog by clicking on '''OK'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:InstallUnsignedCodeWarning.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# You will then be prompted to '''restart''' Eclipse. Please do so.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:NeonOsbeeInstall06.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Set the Target Platform for the OS.bee Software Factory===&lt;br /&gt;
&lt;br /&gt;
# Check if the workspace you are using is the one you selected above when first opening Eclipse. If not, open the right one.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Set the target platform here: Menu -&amp;gt; Window -&amp;gt; Preferences -&amp;gt; Plug-in Development -&amp;gt; Target Platform.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Click on '''Add...''' to add a new target definition.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:NeonOsbeeInstall07.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Select &amp;quot;Default: ...&amp;quot; and click on '''Next'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:NeonOsbeeInstall08.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Click on '''Add...''' to add content, select &amp;quot;Software Site&amp;quot; and click on '''Next'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:NeonOsbeeInstall09.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Use the same URL previously saved to the clipboard for the Software Site.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Open the group '''OS.bee Softwarefactory''', select '''OS.bee Softwarefactory Targetplatform (DON'T INSTALL...)''',&amp;lt;br&amp;gt;'''uncheck''' the '''Include required software''' checkbox and click on '''Finish'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:NeonOsbeeInstall10.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Change to register '''Content'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#* Enter '''x.a''' in the filter and deactivate the following bundles in the resulting target definition:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;javax.annotation version 1.2&amp;lt;br&amp;gt;javax.annotation.source version 1.2&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:NeonOsbeeInstall11.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#* Enter '''guava''' in the filter and deactivate the following bundle in the resulting target definition:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;com.google.guava version 21.0&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:NeonOsbeeInstall17.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#* Enter '''antlr''' in the filter and deactivate the following bundle in the resulting target definition:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;org.antlr.runtime version 4.3&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;and click on finish.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:NeonOsbeeInstall18.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# '''Do not forget to activate your newly created target definition! '''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:NeonOsbeeInstall12.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Restart Eclipse. You can use Menu -&amp;gt; File -&amp;gt; Restart to do so.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Set preferences in Eclipse ===&lt;br /&gt;
==== Git settings ====&lt;br /&gt;
Be sure to uncheck the automatic git-ignore for derived files, else generated files will not be checked in:&lt;br /&gt;
&amp;lt;br&amp;gt; [[File:Git-Preferences.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DS Annotations ====&lt;br /&gt;
# It is neccessary to activate the generation of descriptors based on DS Annotations&amp;lt;br&amp;gt;&lt;br /&gt;
# Go to Window / Preferences in your Eclipse IDE&amp;lt;br&amp;gt;&lt;br /&gt;
# Activate the &amp;quot;Generate descriptors from annotaded sources&amp;quot;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:NeonOsbeeInstall13.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Go to Window / Preferences in your Eclipse IDE, filter for &amp;quot;java&amp;quot; and go to '''Installed JREs''' and click on '''Search...'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:NeonOsbeeInstall14.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== JDK Settings ====&lt;br /&gt;
# Locate your JDK (On Windows it's usually under &amp;lt;code&amp;gt;C:\Program FIles\Java\...&amp;lt;/code&amp;gt;) and hit '''OK''' &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:NeonOsbeeInstall15.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Select the newly added JDK and hit '''Apply''', then '''OK''' &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:NeonOsbeeInstall16.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Maven Settings ====&lt;br /&gt;
&lt;br /&gt;
'''For developers only!'''&lt;br /&gt;
&lt;br /&gt;
Maven requires some settings in a file called &amp;lt;code&amp;gt;settings.xml&amp;lt;/code&amp;gt;. The file is usually expected by Eclipse to be located in the .m2 directory in the Users home directory. &lt;br /&gt;
&lt;br /&gt;
# You can start with the following content of the settings.xml (don't forget to replace the '''xxxx''' with the appropriate repo names):&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;settings xmlns=&amp;quot;http://maven.apache.org/SETTINGS/1.0.0&amp;quot;&lt;br /&gt;
	xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&lt;br /&gt;
	xsi:schemaLocation=&amp;quot;http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;!-- TODO: adapt the local path to your personal favourite --&amp;gt;&lt;br /&gt;
	&amp;lt;localRepository&amp;gt;c:/maven/.m2/repository&amp;lt;/localRepository&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;mirrors&amp;gt;&lt;br /&gt;
		&amp;lt;!-- mirror | Specifies a repository mirror site to use instead of a given &lt;br /&gt;
			repository. The repository that | this mirror serves has an ID that matches &lt;br /&gt;
			the mirrorOf element of this mirror. IDs are used | for inheritance and direct &lt;br /&gt;
			lookup purposes, and must be unique across the set of mirrors. | &amp;lt;mirror&amp;gt; &lt;br /&gt;
			&amp;lt;id&amp;gt;mirrorId&amp;lt;/id&amp;gt; &amp;lt;mirrorOf&amp;gt;repositoryId&amp;lt;/mirrorOf&amp;gt; &amp;lt;name&amp;gt;Human Readable &lt;br /&gt;
			Name for this Mirror.&amp;lt;/name&amp;gt; &amp;lt;url&amp;gt;http://my.repository.com/repo/path&amp;lt;/url&amp;gt; &lt;br /&gt;
			&amp;lt;/mirror&amp;gt; --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;!-- not working mirrors p2: Gemini DBaccess maven: central.maven.org, --&amp;gt;&lt;br /&gt;
		&amp;lt;mirror&amp;gt;&lt;br /&gt;
			&amp;lt;id&amp;gt;Apache Mirror&amp;lt;/id&amp;gt;&lt;br /&gt;
			&amp;lt;mirrorOf&amp;gt;apache-nexus-snapshots&amp;lt;/mirrorOf&amp;gt;&lt;br /&gt;
			&amp;lt;url&amp;gt;http://www-eu.apache.org/dist/&amp;lt;/url&amp;gt;&lt;br /&gt;
		&amp;lt;/mirror&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;/mirrors&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;!-- profiles | This is a list of profiles which can be activated in a variety &lt;br /&gt;
		of ways, and which can modify | the build process. Profiles provided in the &lt;br /&gt;
		settings.xml are intended to provide local machine- | specific paths and &lt;br /&gt;
		repository locations which allow the build to work in the local environment. &lt;br /&gt;
		| | For example, if you have an integration testing plugin - like cactus &lt;br /&gt;
		- that needs to know where | your Tomcat instance is installed, you can provide &lt;br /&gt;
		a variable here such that the variable is | dereferenced during the build &lt;br /&gt;
		process to configure the cactus plugin. | | As noted above, profiles can &lt;br /&gt;
		be activated in a variety of ways. One way - the activeProfiles | section &lt;br /&gt;
		of this document (settings.xml) - will be discussed later. Another way essentially &lt;br /&gt;
		| relies on the detection of a system property, either matching a particular &lt;br /&gt;
		value for the property, | or merely testing its existence. Profiles can also &lt;br /&gt;
		be activated by JDK version prefix, where a | value of '1.4' might activate &lt;br /&gt;
		a profile when the build is executed on a JDK version of '1.4.2_07'. | Finally, &lt;br /&gt;
		the list of active profiles can be specified directly from the command line. &lt;br /&gt;
		| | NOTE: For profiles defined in the settings.xml, you are restricted to &lt;br /&gt;
		specifying only artifact | repositories, plugin repositories, and free-form &lt;br /&gt;
		properties to be used as configuration | variables for plugins in the POM. &lt;br /&gt;
		| | --&amp;gt;&lt;br /&gt;
	&amp;lt;profiles&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;profile&amp;gt;&lt;br /&gt;
			&amp;lt;id&amp;gt;osbp-dev&amp;lt;/id&amp;gt;&lt;br /&gt;
			&amp;lt;activation&amp;gt;&lt;br /&gt;
				&amp;lt;activeByDefault&amp;gt;true&amp;lt;/activeByDefault&amp;gt;&lt;br /&gt;
			&amp;lt;/activation&amp;gt;&lt;br /&gt;
			&amp;lt;properties&amp;gt;&lt;br /&gt;
				&amp;lt;osbp.build.ignore.license&amp;gt;false&amp;lt;/osbp.build.ignore.license&amp;gt;&lt;br /&gt;
				&amp;lt;osbp.build.verbose.license&amp;gt;true&amp;lt;/osbp.build.verbose.license&amp;gt;&lt;br /&gt;
&lt;br /&gt;
				&amp;lt;osbp.skip.javadoc&amp;gt;false&amp;lt;/osbp.skip.javadoc&amp;gt;&lt;br /&gt;
				&amp;lt;osbp.javadoc.failOnError&amp;gt;false&amp;lt;/osbp.javadoc.failOnError&amp;gt;&lt;br /&gt;
&lt;br /&gt;
				&amp;lt;osbp.skip.test&amp;gt;true&amp;lt;/osbp.skip.test&amp;gt;&lt;br /&gt;
&lt;br /&gt;
				&amp;lt;osbp.build.branch&amp;gt;latest&amp;lt;/osbp.build.branch&amp;gt;&lt;br /&gt;
				&amp;lt;osbp.developer.home&amp;gt;C:${file.separator}osbee${file.separator}downloads${file.separator}&amp;lt;/osbp.developer.home&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
				&amp;lt;osbee.build.ignore.license&amp;gt;false&amp;lt;/osbee.build.ignore.license&amp;gt;&lt;br /&gt;
				&amp;lt;osbee.build.verbose.license&amp;gt;true&amp;lt;/osbee.build.verbose.license&amp;gt;&lt;br /&gt;
&lt;br /&gt;
				&amp;lt;osbee.developer.home&amp;gt;${osbp.developer.home}&amp;lt;/osbee.developer.home&amp;gt;&lt;br /&gt;
				&amp;lt;osbee.build.branch&amp;gt;${osbp.build.branch}&amp;lt;/osbee.build.branch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
				&amp;lt;distribution.server.baseurl&amp;gt;http://my.own.nexus.local&amp;lt;/distribution.server.baseurl&amp;gt;&lt;br /&gt;
				&amp;lt;!-- where to deploy the release artifacts --&amp;gt;&lt;br /&gt;
				&amp;lt;distribution.repository.release.url&amp;gt;${distribution.server.baseurl}:8086/nexus/content/repositories/developer-releases/&amp;lt;/distribution.repository.release.url&amp;gt;&lt;br /&gt;
				&amp;lt;!-- where to deploy the snapshot artifacts --&amp;gt;&lt;br /&gt;
				&amp;lt;distribution.repository.snapshot.url&amp;gt;${distribution.server.baseurl}:8086/nexus/content/repositories/developer-snapshots/&amp;lt;/distribution.repository.snapshot.url&amp;gt;&lt;br /&gt;
				&amp;lt;osbp.p2&amp;gt;http://download.osbee.org/downloads/p2/osbp/neon/xxxx&amp;lt;/osbp.p2&amp;gt;&lt;br /&gt;
				&amp;lt;org.osbee.p2&amp;gt;http://download.osbee.org/downloads/p2/osbee/neon/xxxx&amp;lt;/org.osbee.p2&amp;gt;&lt;br /&gt;
				&amp;lt;net.osbee.p2&amp;gt;http://download.osbee.org/downloads/p2/osbee/neon/xxxx&amp;lt;/net.osbee.p2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
				&amp;lt;osbee.helpdesk.product.download.folder&amp;gt;${osbp.developer.home}products${file.separator}helpdesk&amp;lt;/osbee.helpdesk.product.download.folder&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			&amp;lt;/properties&amp;gt;&lt;br /&gt;
&lt;br /&gt;
			&amp;lt;pluginRepositories&amp;gt;&lt;br /&gt;
				&amp;lt;pluginRepository&amp;gt;&lt;br /&gt;
					&amp;lt;id&amp;gt;compex-nexus-release&amp;lt;/id&amp;gt;&lt;br /&gt;
					&amp;lt;name&amp;gt;Compex Nexus Release&amp;lt;/name&amp;gt;&lt;br /&gt;
					&amp;lt;url&amp;gt;http://download.osbee.org:8086/nexus/content/repositories/osbp-master-clean-releases/&lt;br /&gt;
					&amp;lt;/url&amp;gt;&lt;br /&gt;
					&amp;lt;releases&amp;gt;&lt;br /&gt;
						&amp;lt;enabled&amp;gt;true&amp;lt;/enabled&amp;gt;&lt;br /&gt;
					&amp;lt;/releases&amp;gt;&lt;br /&gt;
					&amp;lt;snapshots&amp;gt;&lt;br /&gt;
						&amp;lt;enabled&amp;gt;false&amp;lt;/enabled&amp;gt;&lt;br /&gt;
					&amp;lt;/snapshots&amp;gt;&lt;br /&gt;
				&amp;lt;/pluginRepository&amp;gt;&lt;br /&gt;
				&amp;lt;pluginRepository&amp;gt;&lt;br /&gt;
					&amp;lt;id&amp;gt;compex-snapshots&amp;lt;/id&amp;gt;&lt;br /&gt;
					&amp;lt;name&amp;gt;Compex Snapshots&amp;lt;/name&amp;gt;&lt;br /&gt;
					&amp;lt;url&amp;gt;http://download.osbee.org:8086/nexus/content/repositories/osbp-master-clean-snapshots/&lt;br /&gt;
					&amp;lt;/url&amp;gt;&lt;br /&gt;
					&amp;lt;releases&amp;gt;&lt;br /&gt;
						&amp;lt;enabled&amp;gt;false&amp;lt;/enabled&amp;gt;&lt;br /&gt;
					&amp;lt;/releases&amp;gt;&lt;br /&gt;
					&amp;lt;snapshots&amp;gt;&lt;br /&gt;
						&amp;lt;updatePolicy&amp;gt;always&amp;lt;/updatePolicy&amp;gt;&lt;br /&gt;
						&amp;lt;enabled&amp;gt;true&amp;lt;/enabled&amp;gt;&lt;br /&gt;
					&amp;lt;/snapshots&amp;gt;&lt;br /&gt;
				&amp;lt;/pluginRepository&amp;gt;&lt;br /&gt;
			&amp;lt;/pluginRepositories&amp;gt;&lt;br /&gt;
&lt;br /&gt;
			&amp;lt;repositories&amp;gt;&lt;br /&gt;
				&amp;lt;repository&amp;gt;&lt;br /&gt;
					&amp;lt;id&amp;gt;compex-nexus-snapshots&amp;lt;/id&amp;gt;&lt;br /&gt;
					&amp;lt;name&amp;gt;Compex Nexus Snapshots&amp;lt;/name&amp;gt;&lt;br /&gt;
					&amp;lt;url&amp;gt;http://download.osbee.org:8086/nexus/content/repositories/osbp-master-clean-snapshots/&lt;br /&gt;
					&amp;lt;/url&amp;gt;&lt;br /&gt;
					&amp;lt;releases&amp;gt;&lt;br /&gt;
						&amp;lt;enabled&amp;gt;false&amp;lt;/enabled&amp;gt;&lt;br /&gt;
					&amp;lt;/releases&amp;gt;&lt;br /&gt;
					&amp;lt;snapshots&amp;gt;&lt;br /&gt;
						&amp;lt;updatePolicy&amp;gt;always&amp;lt;/updatePolicy&amp;gt;&lt;br /&gt;
						&amp;lt;enabled&amp;gt;true&amp;lt;/enabled&amp;gt;&lt;br /&gt;
					&amp;lt;/snapshots&amp;gt;&lt;br /&gt;
				&amp;lt;/repository&amp;gt;&lt;br /&gt;
				&amp;lt;repository&amp;gt;&lt;br /&gt;
					&amp;lt;id&amp;gt;compex-nexus-release&amp;lt;/id&amp;gt;&lt;br /&gt;
					&amp;lt;name&amp;gt;Compex Nexus Release&amp;lt;/name&amp;gt;&lt;br /&gt;
					&amp;lt;url&amp;gt;http://download.osbee.org:8086/nexus/content/repositories/osbp-master-clean-releases/&lt;br /&gt;
					&amp;lt;/url&amp;gt;&lt;br /&gt;
					&amp;lt;releases&amp;gt;&lt;br /&gt;
						&amp;lt;enabled&amp;gt;true&amp;lt;/enabled&amp;gt;&lt;br /&gt;
					&amp;lt;/releases&amp;gt;&lt;br /&gt;
					&amp;lt;snapshots&amp;gt;&lt;br /&gt;
						&amp;lt;enabled&amp;gt;true&amp;lt;/enabled&amp;gt;&lt;br /&gt;
					&amp;lt;/snapshots&amp;gt;&lt;br /&gt;
				&amp;lt;/repository&amp;gt;&lt;br /&gt;
&lt;br /&gt;
				&amp;lt;repository&amp;gt;&lt;br /&gt;
					&amp;lt;id&amp;gt;Compex Internal P2 OSbee&amp;lt;/id&amp;gt;&lt;br /&gt;
					&amp;lt;!-- use the URL you installed the softwarefactory from --&amp;gt;&lt;br /&gt;
					&amp;lt;url&amp;gt;http://download.osbee.org/downloads/p2/osbee/neon/xxxxx&lt;br /&gt;
					&amp;lt;/url&amp;gt;&lt;br /&gt;
					&amp;lt;layout&amp;gt;p2&amp;lt;/layout&amp;gt;&lt;br /&gt;
				&amp;lt;/repository&amp;gt;&lt;br /&gt;
			&amp;lt;/repositories&amp;gt;&lt;br /&gt;
		&amp;lt;/profile&amp;gt;&lt;br /&gt;
	&amp;lt;/profiles&amp;gt;&lt;br /&gt;
	&amp;lt;!-- activeProfiles | List of profiles that are active for all builds. | &lt;br /&gt;
		&amp;lt;activeProfiles&amp;gt; &amp;lt;activeProfile&amp;gt;alwaysActiveProfile&amp;lt;/activeProfile&amp;gt; &amp;lt;activeProfile&amp;gt;anotherAlwaysActiveProfile&amp;lt;/activeProfile&amp;gt; &lt;br /&gt;
		&amp;lt;/activeProfiles&amp;gt; --&amp;gt;&lt;br /&gt;
 &amp;lt;/settings&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# go to the Eclipse preferences / Maven / User Settings and enter the path to the settings.xml in the '''User settings''' section.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can now continue with [[OS.bee Software Factory Samples]]&lt;/div&gt;</summary>
		<author><name>Riegel</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=File:Git-Preferences.png&amp;diff=1830</id>
		<title>File:Git-Preferences.png</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=File:Git-Preferences.png&amp;diff=1830"/>
				<updated>2017-06-27T11:45:58Z</updated>
		
		<summary type="html">&lt;p&gt;Riegel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Riegel</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Peripheral_Devices&amp;diff=1603</id>
		<title>Peripheral Devices</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Peripheral_Devices&amp;diff=1603"/>
				<updated>2017-04-26T14:36:15Z</updated>
		
		<summary type="html">&lt;p&gt;Riegel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Epson Cash Register Peripherals=&lt;br /&gt;
If you want to work with Epson-Seiko cash register peripherals some extra steps are necessary:&lt;br /&gt;
* Download and unzip the ADK from the following site: [https://download.epson-biz.com/modules/pos/index.php?page=single_soft&amp;amp;cid=5405&amp;amp;scat=40&amp;amp;pcat=3 Epson Biz]&lt;br /&gt;
* You must pass a registration process on the Epson site&lt;br /&gt;
* Install the ADK&lt;br /&gt;
* From the start menu launch SetupPos and configure the physical hardware according to the Epson manuals&lt;br /&gt;
[[File:EpsonSetupPOS.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* Save the configuration and note the path to the configuration file. The content of this xml file looks something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE JposEntries PUBLIC &amp;quot;-//JavaPOS//DTD//EN&amp;quot;&lt;br /&gt;
                             &amp;quot;jpos/res/jcl.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;JposEntries&amp;gt;&lt;br /&gt;
&amp;lt;!--Saved by JavaPOS jpos.config/loader (JCL) version 2.2.0 on 26.04.17 16:15--&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;JposEntry logicalName=&amp;quot;CashDrawer&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;creation factoryClass=&amp;quot;jp.co.epson.uposcommon.creator.EpsonJposServiceInstanceFactory&amp;quot; serviceClass=&amp;quot;jp.co.epson.upos.H6000IV.drw.StandardService&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;vendor name=&amp;quot;SEIKO EPSON&amp;quot; url=&amp;quot;http://www.epson.com&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;jpos category=&amp;quot;CashDrawer&amp;quot; version=&amp;quot;1.14&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;product description=&amp;quot;EPSON Standard CashDrawer Device Service&amp;quot; name=&amp;quot;EPSON Services for JavaPOS(TM) Standard&amp;quot; url=&amp;quot;http://www.epson.com&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;!--Other non JavaPOS required property (mostly vendor properties and bus specific properties i.e. RS232 )--&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;OutputTimeout&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;500&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;epson.trace.file&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;trace.log&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;OutputBufferSize&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;4096&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;PinNumber&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;OfflineExecutionDevice&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;ConfigurationFile&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;epson/xml/Setting/TM-H6000IVSetting.xml&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;WriteThreadInterval&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;-1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;TransmitRetryTime&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;DeviceID&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;36&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;SupportStatistics&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;QueuingOfflineTimeout&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1000&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;MultiDrawerStatusSupport&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;EPurasSupport&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;TRUE&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;ReceiveRetryTime&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;25&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;TransmitTimeout&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;5000&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;Parity&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;StopBits&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;MemorySwitch&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;FlowType&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;InputTimeout&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;PulseOFFTime&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;400&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;LogicalPortName&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;ESDPRT001&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;StatusThreadInterval&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;DefaultSlpClampTime&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;LogicalPortInterfaceName&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;EPuras&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;OfflineRetryIntervalTime&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;25&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;BitLength&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;8&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;OfflineCount&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;PortType&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;InitializeThreadTime&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1000&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;PortInterfaceName&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;Serial&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;PhysicalPrinterName&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;TM-H6000IV&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;LogObject&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;PulseONTime&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;ForceSend&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;PulseStep&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;DeviceDesc&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;EPSON Standard CashDrawer&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;PortName&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;COM1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;OpenPulseLevel&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;OpenWaitTimeout&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;5000&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;ReceiveTimeout&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1000&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;InitializeResponseTimeout&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1000&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;InputBufferSize&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;84&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;OfflineExecutionInitializeSetting&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;PhysicalDevice&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;Standard&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;Upos.Spec_c&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;ReadThreadInterval&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;-1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;BaudRate&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;19200&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;epson.tracing&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;DeviceType&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;epson.trace.max.size&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1000&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;Upos.USB_Serial&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/JposEntry&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;JposEntry logicalName=&amp;quot;LineDisplay&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;creation factoryClass=&amp;quot;jp.co.epson.uposcommon.creator.EpsonJposServiceInstanceFactory&amp;quot; serviceClass=&amp;quot;jp.co.epson.upos.H6000IV.disp.DMD110Service&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;vendor name=&amp;quot;SEIKO EPSON&amp;quot; url=&amp;quot;http://www.epson.com&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;jpos category=&amp;quot;LineDisplay&amp;quot; version=&amp;quot;1.14&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;product description=&amp;quot;Unknown Product Description&amp;quot; name=&amp;quot;EPSON Services for JavaPOS(TM) Standard&amp;quot; url=&amp;quot;http://www.epson.com&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;!--Other non JavaPOS required property (mostly vendor properties and bus specific properties i.e. RS232 )--&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;OutputTimeout&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;500&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;epson.trace.file&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;trace.log&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;OutputBufferSize&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;4096&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;OfflineExecutionDevice&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;ConfigurationFile&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;epson/xml/Setting/DM-D110(v1_14_0001)Setting.xml&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;WriteThreadInterval&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;-1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;TransmitRetryTime&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;DeviceID&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;36&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;SupportStatistics&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;QueuingOfflineTimeout&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1000&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;EPurasSupport&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;TRUE&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;ReceiveRetryTime&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;25&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;TransmitTimeout&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;5000&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;Parity&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;StopBits&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;MemorySwitch&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;FlowType&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;InputTimeout&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;CharacterMode&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;LogicalPortName&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;ESDPRT001&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;StatusThreadInterval&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;DefaultSlpClampTime&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;LogicalPortInterfaceName&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;EPuras&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;OfflineRetryIntervalTime&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;25&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;BitLength&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;8&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;OfflineCount&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;PortType&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;InitializeThreadTime&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1000&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;ConnectionType&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;GraphicWindowLogicalArea&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;PortInterfaceName&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;Serial&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;PhysicalPrinterName&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;TM-H6000IV&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;LogObject&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;DirectIOEventTimeout&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;5000&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;DeviceDesc&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;EPSON DM-D110 LineDisplay&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;PortName&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;COM1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;ReceiveTimeout&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1000&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;InitializeResponseTimeout&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1000&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;InputBufferSize&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;84&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;TwoByteCharacter&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;OfflineExecutionInitializeSetting&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;PhysicalDevice&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;DM-D110&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;Upos.Spec_c&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;ReadThreadInterval&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;-1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;BaudRate&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;19200&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;epson.tracing&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;DeviceType&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;epson.trace.max.size&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1000&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;Upos.USB_Serial&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;PrinterConfigurationFile&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;epson/xml/Setting/TM-H6000IVSetting.xml&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/JposEntry&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;JposEntry logicalName=&amp;quot;POSPrinter&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;creation factoryClass=&amp;quot;jp.co.epson.uposcommon.creator.EpsonJposServiceInstanceFactory&amp;quot; serviceClass=&amp;quot;jp.co.epson.upos.H6000IV.pntr.H6000IVService&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;vendor name=&amp;quot;SEIKO EPSON&amp;quot; url=&amp;quot;http://www.epson.com&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;jpos category=&amp;quot;POSPrinter&amp;quot; version=&amp;quot;1.14&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;product description=&amp;quot;EPSON TM-H6000IV Printer Device Service&amp;quot; name=&amp;quot;EPSON Services for JavaPOS(TM) Standard&amp;quot; url=&amp;quot;http://www.epson.com&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;!--Other non JavaPOS required property (mostly vendor properties and bus specific properties i.e. RS232 )--&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;FlowType&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;Halftone&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;PhysicalPrinterName&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;TM-H6000IV&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;NVRAMControlLevel&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;LogicalPortName&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;ESDPRT001&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;Stamp&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;OutputCompleteType&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;StatusThreadInterval&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;OutputTimeout&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;500&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;PortType&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;epson.trace.detail.file&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;detail.log&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;OutputBufferSize&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;4096&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;UsedNVRAM&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;FirmRecordLog&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;ReceiveTimeout&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1000&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;SlpReverseEject&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;PortName&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;COM1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;OfflineRetryIntervalTime&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;25&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;Upos.USB_Serial&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;DefaultSlpClampTime&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;500&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;OfflineExecutionDevice&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;epson.trace.file&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;trace.log&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;StopBits&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;AsyncProcessingSize&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;RecCharactersPerLine&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;42&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;KanjiTwoWaysPrint&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;PulseStep&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;PortInterfaceName&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;Serial&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;GradationMethod&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;OfflineExecutionInitializeSetting&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;U375Compatible&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;BitLength&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;8&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;Parity&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;preCutterFunction&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;epson.tracing&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;epson.trace.max.size&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1000&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;RecPaperSize&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;80&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;DeviceDesc&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;EPSON TM-H6000IV POSPrinter&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;PageModeExt&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;RecLineSpacing&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;30&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;SupportStatistics&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;FirmProgressRange&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;10&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;OutputErrorOption&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;EndorseLineSpacing&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;10&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;SupportFirmware&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;DeviceID&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;36&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;SlipPaperType&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;InputTimeout&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;SlipCharactersPerLine&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;45&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;AutoPowerOff&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;SlpMoreColumns&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;RecPaperType&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;MemorySwitch&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;ReadThreadInterval&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;-1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;QueuingOfflineTimeout&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1000&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;InitializeThreadTime&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1000&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;TwoColor&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;BaudRate&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;19200&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;TwoByteCharacter&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;FirmLogFileSize&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1000&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;Peeler&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;DefaultCodePage&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;997&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;epson.trace.detail.max.size&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;ConfigurationFile&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;epson/xml/Setting/TM-H6000IVSetting.xml&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;DeviceType&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;Custom1Color&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0xFF0000&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;preEndorseFunction&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;Upos.Spec_c&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;LogicalPortInterfaceName&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;EPuras&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;FirmNotifyAllProgressEvents&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;InitializeResponseTimeout&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1000&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;ReceiveRetryTime&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;25&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;UsedInterCharacterSet&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;PrinterTransmitTimeout&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;30000&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;RecMoreColumns&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;EndorseFontMode&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;WriteThreadInterval&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;-1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;preORCBFunction&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;EndorseCharactersPerLine&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;40&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;RecNearEndSensor&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;LogObject&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;Cutter&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;PhysicalDevice&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;TM-H6000IV&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;UsedPeeler&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;FirmLogFileName&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;Firmware.log&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;InputBufferSize&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;84&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;TransmitTimeout&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;5000&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;SlipLineSpacing&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;12&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;EPurasSupport&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;TRUE&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;OfflineCount&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;TransmitRetryTime&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;DirectIOEventTimeout&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;5000&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;prop name=&amp;quot;epson.trace.detail.info&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/JposEntry&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
&amp;lt;/JposEntries&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* In Eclipse open Window-&amp;gt;Preferences-&amp;gt;OSBP Application Configuration&lt;br /&gt;
* Select the product to be configured in the field Product Configuration&lt;br /&gt;
[[File:ProductConfiguration1.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* In the tab External Data Sources put the noted path in the field JavaPOS Configuration&lt;br /&gt;
[[File:ProductConfiguration2.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Riegel</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Peripheral_Devices&amp;diff=1601</id>
		<title>Peripheral Devices</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Peripheral_Devices&amp;diff=1601"/>
				<updated>2017-04-26T14:30:40Z</updated>
		
		<summary type="html">&lt;p&gt;Riegel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Epson Cash Register Peripherals=&lt;br /&gt;
If you want to work with Epson-Seiko cash register peripherals some extra steps are necessary:&lt;br /&gt;
* Download and unzip the ADK from the following site: [https://download.epson-biz.com/modules/pos/index.php?page=single_soft&amp;amp;cid=5405&amp;amp;scat=40&amp;amp;pcat=3 Epson Biz]&lt;br /&gt;
* You must pass a registration process on the Epson site&lt;br /&gt;
* Install the ADK&lt;br /&gt;
* From the start menu launch SetupPos and configure the physical hardware according to the Epson manuals&lt;br /&gt;
[[File:EpsonSetupPOS.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* Save the configuration and note the path to the configuration file&lt;br /&gt;
	&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
	&amp;lt;!DOCTYPE JposEntries PUBLIC &amp;quot;-//JavaPOS//DTD//EN&amp;quot;&lt;br /&gt;
								 &amp;quot;jpos/res/jcl.dtd&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;JposEntries&amp;gt;&lt;br /&gt;
	&amp;lt;!--Saved by JavaPOS jpos.config/loader (JCL) version 2.2.0 on 26.04.17 16:15--&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
		&amp;lt;JposEntry logicalName=&amp;quot;CashDrawer&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;creation factoryClass=&amp;quot;jp.co.epson.uposcommon.creator.EpsonJposServiceInstanceFactory&amp;quot; serviceClass=&amp;quot;jp.co.epson.upos.H6000IV.drw.StandardService&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;vendor name=&amp;quot;SEIKO EPSON&amp;quot; url=&amp;quot;http://www.epson.com&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;jpos category=&amp;quot;CashDrawer&amp;quot; version=&amp;quot;1.14&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;product description=&amp;quot;EPSON Standard CashDrawer Device Service&amp;quot; name=&amp;quot;EPSON Services for JavaPOS(TM) Standard&amp;quot; url=&amp;quot;http://www.epson.com&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
			&amp;lt;!--Other non JavaPOS required property (mostly vendor properties and bus specific properties i.e. RS232 )--&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;OutputTimeout&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;500&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;epson.trace.file&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;trace.log&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;OutputBufferSize&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;4096&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;PinNumber&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;OfflineExecutionDevice&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;ConfigurationFile&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;epson/xml/Setting/TM-H6000IVSetting.xml&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;WriteThreadInterval&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;-1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;TransmitRetryTime&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;DeviceID&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;36&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;SupportStatistics&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;QueuingOfflineTimeout&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1000&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;MultiDrawerStatusSupport&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;EPurasSupport&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;TRUE&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;ReceiveRetryTime&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;25&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;TransmitTimeout&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;5000&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;Parity&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;StopBits&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;MemorySwitch&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;FlowType&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;InputTimeout&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;PulseOFFTime&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;400&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;LogicalPortName&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;ESDPRT001&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;StatusThreadInterval&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;DefaultSlpClampTime&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;LogicalPortInterfaceName&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;EPuras&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;OfflineRetryIntervalTime&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;25&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;BitLength&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;8&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;OfflineCount&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;PortType&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;InitializeThreadTime&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1000&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;PortInterfaceName&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;Serial&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;PhysicalPrinterName&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;TM-H6000IV&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;LogObject&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;PulseONTime&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;ForceSend&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;PulseStep&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;DeviceDesc&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;EPSON Standard CashDrawer&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;PortName&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;COM1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;OpenPulseLevel&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;OpenWaitTimeout&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;5000&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;ReceiveTimeout&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1000&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;InitializeResponseTimeout&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1000&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;InputBufferSize&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;84&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;OfflineExecutionInitializeSetting&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;PhysicalDevice&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;Standard&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;Upos.Spec_c&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;ReadThreadInterval&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;-1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;BaudRate&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;19200&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;epson.tracing&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;DeviceType&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;epson.trace.max.size&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1000&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;Upos.USB_Serial&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;/JposEntry&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
		&lt;br /&gt;
		&amp;lt;JposEntry logicalName=&amp;quot;LineDisplay&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;creation factoryClass=&amp;quot;jp.co.epson.uposcommon.creator.EpsonJposServiceInstanceFactory&amp;quot; serviceClass=&amp;quot;jp.co.epson.upos.H6000IV.disp.DMD110Service&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;vendor name=&amp;quot;SEIKO EPSON&amp;quot; url=&amp;quot;http://www.epson.com&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;jpos category=&amp;quot;LineDisplay&amp;quot; version=&amp;quot;1.14&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;product description=&amp;quot;Unknown Product Description&amp;quot; name=&amp;quot;EPSON Services for JavaPOS(TM) Standard&amp;quot; url=&amp;quot;http://www.epson.com&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
			&amp;lt;!--Other non JavaPOS required property (mostly vendor properties and bus specific properties i.e. RS232 )--&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;OutputTimeout&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;500&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;epson.trace.file&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;trace.log&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;OutputBufferSize&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;4096&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;OfflineExecutionDevice&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;ConfigurationFile&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;epson/xml/Setting/DM-D110(v1_14_0001)Setting.xml&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;WriteThreadInterval&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;-1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;TransmitRetryTime&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;DeviceID&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;36&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;SupportStatistics&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;QueuingOfflineTimeout&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1000&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;EPurasSupport&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;TRUE&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;ReceiveRetryTime&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;25&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;TransmitTimeout&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;5000&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;Parity&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;StopBits&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;MemorySwitch&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;FlowType&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;InputTimeout&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;CharacterMode&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;LogicalPortName&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;ESDPRT001&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;StatusThreadInterval&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;DefaultSlpClampTime&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;LogicalPortInterfaceName&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;EPuras&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;OfflineRetryIntervalTime&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;25&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;BitLength&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;8&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;OfflineCount&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;PortType&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;InitializeThreadTime&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1000&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;ConnectionType&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;GraphicWindowLogicalArea&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;PortInterfaceName&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;Serial&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;PhysicalPrinterName&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;TM-H6000IV&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;LogObject&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;DirectIOEventTimeout&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;5000&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;DeviceDesc&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;EPSON DM-D110 LineDisplay&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;PortName&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;COM1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;ReceiveTimeout&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1000&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;InitializeResponseTimeout&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1000&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;InputBufferSize&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;84&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;TwoByteCharacter&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;OfflineExecutionInitializeSetting&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;PhysicalDevice&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;DM-D110&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;Upos.Spec_c&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;ReadThreadInterval&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;-1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;BaudRate&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;19200&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;epson.tracing&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;DeviceType&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;epson.trace.max.size&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1000&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;Upos.USB_Serial&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;PrinterConfigurationFile&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;epson/xml/Setting/TM-H6000IVSetting.xml&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;/JposEntry&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
		&lt;br /&gt;
		&amp;lt;JposEntry logicalName=&amp;quot;POSPrinter&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;creation factoryClass=&amp;quot;jp.co.epson.uposcommon.creator.EpsonJposServiceInstanceFactory&amp;quot; serviceClass=&amp;quot;jp.co.epson.upos.H6000IV.pntr.H6000IVService&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;vendor name=&amp;quot;SEIKO EPSON&amp;quot; url=&amp;quot;http://www.epson.com&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;jpos category=&amp;quot;POSPrinter&amp;quot; version=&amp;quot;1.14&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;product description=&amp;quot;EPSON TM-H6000IV Printer Device Service&amp;quot; name=&amp;quot;EPSON Services for JavaPOS(TM) Standard&amp;quot; url=&amp;quot;http://www.epson.com&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
			&amp;lt;!--Other non JavaPOS required property (mostly vendor properties and bus specific properties i.e. RS232 )--&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;FlowType&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;Halftone&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;PhysicalPrinterName&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;TM-H6000IV&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;NVRAMControlLevel&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;LogicalPortName&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;ESDPRT001&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;Stamp&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;OutputCompleteType&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;StatusThreadInterval&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;OutputTimeout&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;500&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;PortType&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;epson.trace.detail.file&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;detail.log&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;OutputBufferSize&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;4096&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;UsedNVRAM&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;FirmRecordLog&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;ReceiveTimeout&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1000&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;SlpReverseEject&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;PortName&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;COM1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;OfflineRetryIntervalTime&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;25&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;Upos.USB_Serial&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;DefaultSlpClampTime&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;500&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;OfflineExecutionDevice&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;epson.trace.file&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;trace.log&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;StopBits&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;AsyncProcessingSize&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;RecCharactersPerLine&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;42&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;KanjiTwoWaysPrint&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;PulseStep&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;PortInterfaceName&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;Serial&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;GradationMethod&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;OfflineExecutionInitializeSetting&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;U375Compatible&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;BitLength&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;8&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;Parity&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;preCutterFunction&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;epson.tracing&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;epson.trace.max.size&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1000&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;RecPaperSize&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;80&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;DeviceDesc&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;EPSON TM-H6000IV POSPrinter&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;PageModeExt&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;RecLineSpacing&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;30&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;SupportStatistics&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;FirmProgressRange&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;10&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;OutputErrorOption&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;EndorseLineSpacing&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;10&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;SupportFirmware&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;DeviceID&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;36&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;SlipPaperType&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;InputTimeout&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;SlipCharactersPerLine&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;45&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;AutoPowerOff&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;SlpMoreColumns&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;RecPaperType&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;MemorySwitch&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;ReadThreadInterval&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;-1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;QueuingOfflineTimeout&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1000&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;InitializeThreadTime&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1000&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;TwoColor&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;BaudRate&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;19200&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;TwoByteCharacter&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;FirmLogFileSize&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1000&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;Peeler&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;DefaultCodePage&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;997&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;epson.trace.detail.max.size&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;ConfigurationFile&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;epson/xml/Setting/TM-H6000IVSetting.xml&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;DeviceType&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;Custom1Color&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0xFF0000&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;preEndorseFunction&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;Upos.Spec_c&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;LogicalPortInterfaceName&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;EPuras&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;FirmNotifyAllProgressEvents&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;InitializeResponseTimeout&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1000&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;ReceiveRetryTime&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;25&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;UsedInterCharacterSet&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;PrinterTransmitTimeout&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;30000&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;RecMoreColumns&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;EndorseFontMode&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;WriteThreadInterval&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;-1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;preORCBFunction&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;EndorseCharactersPerLine&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;40&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;RecNearEndSensor&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;LogObject&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;Cutter&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;PhysicalDevice&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;TM-H6000IV&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;UsedPeeler&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;FirmLogFileName&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;Firmware.log&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;InputBufferSize&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;84&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;TransmitTimeout&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;5000&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;SlipLineSpacing&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;12&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;EPurasSupport&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;TRUE&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;OfflineCount&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;TransmitRetryTime&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;DirectIOEventTimeout&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;5000&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;prop name=&amp;quot;epson.trace.detail.info&amp;quot; type=&amp;quot;String&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;/JposEntry&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
	&amp;lt;/JposEntries&amp;gt;&lt;br /&gt;
* In Eclipse open Window-&amp;gt;Preferences-&amp;gt;OSBP Application Configuration&lt;br /&gt;
* Select the product to be configured in the field Product Configuration&lt;br /&gt;
[[File:ProductConfiguration1.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* In the tab External Data Sources put the noted path in the field JavaPOS Configuration&lt;br /&gt;
[[File:ProductConfiguration2.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Riegel</name></author>	</entry>

	</feed>