Difference between revisions of "Data Interchange DSL"

From OS.bee documentation
Jump to: navigation, search
(Configuration Settings / Smooks Framework (A small introduction))
(Blanked the page)
 
Line 1: Line 1:
A general introduction and some high-level concepts for OSBP DSLs can be found in [[OSBP DSL Documentation]].
 
  
Please note that you can only make use of the Datainterchange DSL by downloading its packages from the [http://dev.osbee.org/free-download/ download section] of our [http://dev.osbee.org/home/ website].
 
 
==Purpose==
 
 
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.
 
 
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.
 
 
==Overview==
 
 
[[File:Datainterchange.png|center|frame|''Figure 1: - Data Interchange Structure.'']]
 
 
 
 
As shown in Figure 1, 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 WorkerThreadRunnable 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.
 
 
==Data Interchange Model File==
 
 
Datainterchange DSL model files end with the <code>.data</code> extension. Data Interchange models may be split into several <code>.data</code> files, as long as they have the same package declaration.
 
 
 
===Reserved Keywords===
 
In the following we’ll dive deeper into the description and the usage of Datainterchange related and reserved keywords.
 
 
====import====
 
In the import section are all entities to be found - as full qualified names – that are currently used in the DSL and automatically imported/added (OXImportDeclaration) by editing it.
 
 
<syntaxhighlight lang="java">
 
 
import ns net.osbee.sample.<ApplicationName>.entities.SampleEntity1
 
import ns net.osbee.sample.<ApplicationName>.entities.SampleEntity2
 
import ns net.osbee.sample.<ApplicationName>.entities.SampleEntity3
 
 
</syntaxhighlight>
 
 
====package====
 
 
Datainterchange DSL model files must start with a package declaration. Packages are the root element of the DSL grammar and must be defined as follow package <PackageName> for example
 
 
<syntaxhighlight lang="java">
 
package net.osbee.sample.ApplicationName.datainterchanges { }
 
</syntaxhighlight>
 
 
Data Interchange models may be split into several .data files, as long as they have the same package declaration.
 
 
 
<syntaxhighlight lang="java">
 
package net.osbee.sample.<applicationname>.datainterchanges title "<titletext>" {
 
    interchange <interchangename> persist file
 
    <fileformat> "<filepath>" [<further specifications>]
 
    beans {
 
        <entity relationships>
 
    }
 
}
 
</syntaxhighlight>
 
 
====titel====
 
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 the title DataInterchange
 
 
<syntaxhighlight lang="java">
 
package net.osbee.sample.foodmart.datainterchanges title "DataInterchange" {}
 
</syntaxhighlight>
 
 
You can get more details about the TriggerView in the section below.
 
 
====interchange====
 
All interchange units have to be defined in the package followed by the Entity they are referencing/applied to.
 
 
<syntaxhighlight lang="java">
 
interchange <SampleInterchangeUnitName> <EntityManagerMode> <FileFormat> {}
 
</syntaxhighlight>
 
 
====describedBy====
 
With this keyword you get to set the optional description of an interchange unit as shown below.
 
 
<syntaxhighlight lang="java">
 
interchange <SampleInterchangeUnitName> describedBy "This is a description of the Datainterchange DSL Unit EntityName" … {}
 
</syntaxhighlight>
 
 
====persist, merge, remove====
 
With those keywords defined inside the Enum Entity Manager Mode, you set how the data have to be process by inserting then into a database.
 
<syntaxhighlight lang="java">
 
interchange <SampleInterchangeUnitName> <EntityManagerMode> … {}
 
</syntaxhighlight>
 
Example 1:  <syntaxhighlight lang="java">interchange SampleInterchangeUnit1 merge … {}</syntaxhighlight>
 
Example 2:  <syntaxhighlight lang="java">interchange SampleInterchangeUnit2 persist … {}</syntaxhighlight>
 
Example 3:  <syntaxhighlight lang="java">interchange SampleInterchangeUnit3 remove … {}</syntaxhighlight>
 
 
====file====
 
With the keyword file you are able to set the file format of the files you intent to process with you interchange unit.
 
 
<syntaxhighlight lang="java">interchange <SampleInterchangeUnitName> <EntityManagerMode> file <FileNameFormat> {}</syntaxhighlight>
 
 
 
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.
 
Example 1:  <syntaxhighlight lang="java">interchange SampleInterchangeUnit1 merge file CSV "C:/temp/testFile.csv” {}</syntaxhighlight>
 
Example 2:  <syntaxhighlight lang="java">interchange SampleInterchangeUnit2 persist file XML "C:/temp/testFile.xml” {}</syntaxhighlight>
 
Example 3:  <syntaxhighlight lang="java">interchange SampleInterchangeUnit3 merge file EDI "C:/temp/testFile.edi” {}</syntaxhighlight>
 
 
After choosing the file format you can either give the file name as a String value in a double quote "..." as shown here above, or hold Ctrl+Space to get the option of opening a File Chooser/Picker to specify the file you want to work with.
 
 
[[File:FileChooser.jpg|center|frame|''Figure 2: File Chooser'']]
 
 
====elementSize====
 
With the keyword elementSize followed by a number between 0 and 100 ?  you set the average size of the file (or set of data).
 
Example:  <syntaxhighlight lang="java">interchange SampleInterchangeUnitName merge elementSize 50 file CSV "C:/temp/testFile.csv” {}</syntaxhighlight>
 
 
====delimiter====
 
With the keyword delimiter you set the delimiter/separation character of the file.
 
Example:  <syntaxhighlight lang="java">interchange SampleInterchangeUnitName merge elementSize 50 file CSV "C:/temp/testFile.csv” delimiter ";" {}</syntaxhighlight>
 
 
 
====skipLines====
 
With the keyword skipLines followed by a number you specify the number of line to be skipped or not to be considered in the processing of the selected file.
 
Example:  <syntaxhighlight lang="java">interchange SampleInterchangeUnitName merge elementSize 50 file CSV "C:/temp/testFile.csv” delimiter ";" skipLines 1 {}</syntaxhighlight>
 
 
====report====
 
 
 
 
====indent====
 
 
====quoteCharacter====
 
 
 
====strict====
 
 
====beans====
 
 
====entity====
 
With the keyword '''entity''' you specify the Entity on what the interchange unit is based on.
 
 
Example:  <syntaxhighlight lang="java">interchange SampleInterchangeUnit1 merge elementSize 50 file CSV "C:/temp/testFile.csv” delimiter ";" skipLines 1 {
 
entity SampleEntity1 … {}
 
}</syntaxhighlight>
 
 
For more information about Entities you can review the corresponding [http://download.osbee.org/documentation/index.php/Entity_DSL#Entities Entity DSL documentation].
 
 
====createOn====
 
 
====element====
 
 
====expression -> assign | copy | with...as====
 
 
====format====
 
 
====keys -> key====
 
 
====list====
 
 
====mapping -> map...to====
 
 
====lookup====
 
 
====marker====
 
 
==Enums==
 
 
'''Enums''' are an abstraction of the Java <code>enum</code>. They compile to <code>enum</code> classes and can be used as properties in entities and beans.
 
 
[[File:Entity-18.png|center|frame|''Figure 3: Defining <code>enums</code> allows using them as variables in entities and beans.'']]
 
 
The Datainterchange DSL provides 3 Enum types that can be used: ''PredefinedBeanEnum'', ''PredefinedBeanTypeEnum'', ''ProgessBarStyleEnum'' and the ''EntityManagerMode''.
 
 
 
===PredefinedBeanEnum===
 
Contains the definition of the values '''<code>now(NowDate) | start(StartDate) | UUID(UniversallyUniqueIdentifier)</code>''' used for ...
 
===PredefinedBeanTypeEnum===
 
Contains the definition of the values '''<code>Date(Date) | Millis(Milliseconds) | Nanos(Nanoseconds) | random(Random) | execContext(ExecuteContext)</code>''' used for ...
 
===ProgessBarStyleEnum===
 
Contains the definition of the values '''<code>none(none) | normal(normal) | important(important)</code>''' used for setting the style of a progressbar.
 
===EntityManagerMode===
 
Contains the definition of the values '''<code>persist(persist) | merge(merge) | remove(remove)</code>''' used for specifying the Entity Manager Mode in order to decide how to manage data inside a database before committing any changes.
 
 
==Configuration Settings / Smooks Framework (A small introduction)==
 
 
The OS.bee implementation of Data Interchange interface is based on [http://www.smooks.org/ 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.
 
 
Smooks relies on a proper configuration file for the import / export process, these config files are generated by the datainterchange DSL automatically. Here is a brief introduction of how the generated Smooks configuration files work.
 
 
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:
 
<syntaxhighlight lang="xml" line='line'>
 
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
<smooks-resource-list xmlns="http://www.milyn.org/xsd/smooks-1.1.xsd" xmlns:csv="http://www.milyn.org/xsd/smooks/csv-1.2.xsd" xmlns:dao="http://www.milyn.org/xsd/smooks/persistence-1.2.xsd" xmlns:jb="http://www.milyn.org/xsd/smooks/javabean-1.2.xsd">
 
    <jb:bean beanId="McurrencyNameStream" class="net.osbee.sample.foodmart.entities.McurrencyNameStream" createOnElement="/csv-set">
 
        <jb:expression property="importDate">PTIME.nowDate</jb:expression>
 
        <jb:wiring beanIdRef="McurrencyName" setterMethod="addToCurrencyNames"/>
 
    </jb:bean>
 
    <jb:bean beanId="McurrencyName" class="net.osbee.sample.foodmart.entities.McurrencyName" createOnElement="/csv-set/csv-record">
 
        <jb:value data="/csv-set/csv-record/isoCode" decoder="String" property="isoCode"/>
 
        <jb:value data="/csv-set/csv-record/name" decoder="String" property="name"/>
 
        <jb:value data="/csv-set/csv-record/countries" decoder="String" property="countries"/>
 
    </jb:bean>
 
    <csv:reader fields="isoCode,name,countries" indent="false" separator=";" skipLines="1"/>
 
    <params>
 
        <param name="stream.filter.type">SAX</param>
 
        <param name="inputType">input.csv</param>
 
        <param name="smooks.visitors.sort">false</param>
 
        <param name="input.csv" type="input.type.actived">C:/git/net.osbee.sample.foodmart/net.osbee.sample.foodmart.datainterchange/smooks-resources/ISOCurrencyCodes081507.csv</param>
 
    </params>
 
</smooks-resource-list>
 
</syntaxhighlight>
 
 
==Annotations==
 
 
==Comments==
 
 
==Smooks (Extended)==
 
just links???
 
 
==WorkerThread (Runnable)==
 
[http://download.osbee.org/downloads/javadoc/osbee-master-clean/org.eclipse.osbp.xtext.datainterchange.feature/apidocs/ Javadoc]
 
 
==TriggerView & Executorservice==
 
 
==DSL Inferrer==
 
 
==DSL Scope Provider==
 
 
==DSL Proposal Provider==
 
 
==DSL Validator==
 
 
== Copyright Notice ==
 
{{Copyright Notice}}
 

Latest revision as of 06:47, 7 August 2017