catch up with development
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..9a7071f
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,53 @@
+bin/
+.*.jar
+**/resources/VAADIN/widgetsets
+**/resources/VAADIN/gwt-unitCache
+**/WebContent/VAADIN/widgetsets
+**/localTarget
+**/build
+**/WebContent/WEB-INF/lib
+.DS_Store
+**/target
+*.java._trace
+/build.runtime-web.kepler.latest.log.properties
+**/log
+**/org.eclipse.osbp.runtime.web.doc/contents/
+**/org.eclipse.osbp.runtime.web.doc/website/
+**/org.eclipse.osbp.runtime.web.vaadin.components/resources/
+**/org.eclipse.osbp.runtime.web.vaadin.components/gwt-unitCache/
+**/git.properties
+git.properties
+
+**/target/
+**/.metadata/
+
+**/emf-gen/**/.gitignore
+**/src-gen/**/.gitignore
+**/git.properties
+**/*.java._trace
+**/*.log
+**/*.log.properties
+
+**/bin/
+**/build/
+*.class
+*.ctrl
+**/Debug/
+.DS_Store
+*.ear
+*.war
+
+**/*.actionbin
+**/*.blipbin
+**/*.chartbin
+**/*.cubebin
+**/*.datatypebin
+**/*.dtobin
+**/*.entitybin
+**/*.servicebin
+**/*.tablebin
+**/*.uibin
+**/*.uisemanticbin
+**/*.xtendbin
+**/*.xtextbin
+
diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/README.md b/README.md
deleted file mode 100644
index 692c4de..0000000
--- a/README.md
+++ /dev/null
@@ -1,4 +0,0 @@
-lunifera-web
-============
-
-Bundles for runtime web.
\ No newline at end of file
diff --git a/eclipse-launchers/lunifera-runtime-web - P2 Kepler - Build and Deploy Temp.launch b/eclipse-launchers/lunifera-runtime-web - P2 Kepler - Build and Deploy Temp.launch
deleted file mode 100644
index 1dabfc2..0000000
--- a/eclipse-launchers/lunifera-runtime-web - P2 Kepler - Build and Deploy Temp.launch
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<launchConfiguration type="org.eclipse.m2e.Maven2LaunchConfigurationType">
-<booleanAttribute key="M2_DEBUG_OUTPUT" value="false"/>
-<stringAttribute key="M2_GOALS" value="clean verify -Dlunifera.build.uses.local.composite.p2 -Dlunifera.build.uses.remote.composite.p2 -Dlunifera.deploy.to.local.composit"/>
-<booleanAttribute key="M2_NON_RECURSIVE" value="false"/>
-<booleanAttribute key="M2_OFFLINE" value="false"/>
-<stringAttribute key="M2_PROFILES" value="lunifera.build.p2"/>
-<listAttribute key="M2_PROPERTIES"/>
-<stringAttribute key="M2_RUNTIME" value="EMBEDDED"/>
-<booleanAttribute key="M2_SKIP_TESTS" value="false"/>
-<booleanAttribute key="M2_UPDATE_SNAPSHOTS" value="false"/>
-<booleanAttribute key="M2_WORKSPACE_RESOLUTION" value="false"/>
-<stringAttribute key="org.eclipse.debug.ui.ATTR_CONSOLE_ENCODING" value="UTF-8"/>
-<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
-<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
-</listAttribute>
-<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
-<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-XX:MaxPermSize=256m"/>
-<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${workspace_loc:/org.eclipse.osbp.runtime.web}"/>
-</launchConfiguration>
diff --git a/eclipse-launchers/lunifera-runtime-web - P2 Kepler - Build and Deploy.launch b/eclipse-launchers/lunifera-runtime-web - P2 Kepler - Build and Deploy.launch
deleted file mode 100644
index bf264fb..0000000
--- a/eclipse-launchers/lunifera-runtime-web - P2 Kepler - Build and Deploy.launch
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<launchConfiguration type="org.eclipse.m2e.Maven2LaunchConfigurationType">
-<booleanAttribute key="M2_DEBUG_OUTPUT" value="false"/>
-<stringAttribute key="M2_GOALS" value="clean verify -Dlunifera.deploy.to.local.composite.p2"/>
-<booleanAttribute key="M2_NON_RECURSIVE" value="false"/>
-<booleanAttribute key="M2_OFFLINE" value="false"/>
-<stringAttribute key="M2_PROFILES" value="lunifera.build.p2"/>
-<listAttribute key="M2_PROPERTIES"/>
-<stringAttribute key="M2_RUNTIME" value="EMBEDDED"/>
-<booleanAttribute key="M2_SKIP_TESTS" value="false"/>
-<booleanAttribute key="M2_UPDATE_SNAPSHOTS" value="false"/>
-<booleanAttribute key="M2_WORKSPACE_RESOLUTION" value="false"/>
-<stringAttribute key="org.eclipse.debug.ui.ATTR_CONSOLE_ENCODING" value="UTF-8"/>
-<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
-<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
-</listAttribute>
-<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
-<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-XX:MaxPermSize=256m"/>
-<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${workspace_loc:/org.eclipse.osbp.runtime.web}"/>
-</launchConfiguration>
diff --git a/eclipse-launchers/lunifera-runtime-web - P2 Kepler - Build skiping tests.launch b/eclipse-launchers/lunifera-runtime-web - P2 Kepler - Build skiping tests.launch
deleted file mode 100644
index cfc8a21..0000000
--- a/eclipse-launchers/lunifera-runtime-web - P2 Kepler - Build skiping tests.launch
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<launchConfiguration type="org.eclipse.m2e.Maven2LaunchConfigurationType">
-<booleanAttribute key="M2_DEBUG_OUTPUT" value="false"/>
-<stringAttribute key="M2_GOALS" value="clean verify -fn"/>
-<booleanAttribute key="M2_NON_RECURSIVE" value="false"/>
-<booleanAttribute key="M2_OFFLINE" value="false"/>
-<stringAttribute key="M2_PROFILES" value="lunifera.build.p2"/>
-<listAttribute key="M2_PROPERTIES"/>
-<stringAttribute key="M2_RUNTIME" value="EMBEDDED"/>
-<booleanAttribute key="M2_SKIP_TESTS" value="true"/>
-<booleanAttribute key="M2_UPDATE_SNAPSHOTS" value="false"/>
-<booleanAttribute key="M2_WORKSPACE_RESOLUTION" value="false"/>
-<stringAttribute key="org.eclipse.debug.core.ATTR_REFRESH_SCOPE" value="${workspace}"/>
-<stringAttribute key="org.eclipse.debug.ui.ATTR_CONSOLE_ENCODING" value="UTF-8"/>
-<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
-<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
-</listAttribute>
-<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
-<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-XX:MaxPermSize=256m"/>
-<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${workspace_loc:/org.eclipse.osbp.runtime.web}"/>
-</launchConfiguration>
diff --git a/eclipse-launchers/lunifera-runtime-web - P2 Kepler - Build.launch b/eclipse-launchers/lunifera-runtime-web - P2 Kepler - Build.launch
deleted file mode 100644
index bf264fb..0000000
--- a/eclipse-launchers/lunifera-runtime-web - P2 Kepler - Build.launch
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<launchConfiguration type="org.eclipse.m2e.Maven2LaunchConfigurationType">
-<booleanAttribute key="M2_DEBUG_OUTPUT" value="false"/>
-<stringAttribute key="M2_GOALS" value="clean verify -Dlunifera.deploy.to.local.composite.p2"/>
-<booleanAttribute key="M2_NON_RECURSIVE" value="false"/>
-<booleanAttribute key="M2_OFFLINE" value="false"/>
-<stringAttribute key="M2_PROFILES" value="lunifera.build.p2"/>
-<listAttribute key="M2_PROPERTIES"/>
-<stringAttribute key="M2_RUNTIME" value="EMBEDDED"/>
-<booleanAttribute key="M2_SKIP_TESTS" value="false"/>
-<booleanAttribute key="M2_UPDATE_SNAPSHOTS" value="false"/>
-<booleanAttribute key="M2_WORKSPACE_RESOLUTION" value="false"/>
-<stringAttribute key="org.eclipse.debug.ui.ATTR_CONSOLE_ENCODING" value="UTF-8"/>
-<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
-<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
-</listAttribute>
-<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
-<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-XX:MaxPermSize=256m"/>
-<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${workspace_loc:/org.eclipse.osbp.runtime.web}"/>
-</launchConfiguration>
diff --git a/jenkins.build.config.xml b/jenkins.build.config.xml
index 02ff6a1..925d886 100644
--- a/jenkins.build.config.xml
+++ b/jenkins.build.config.xml
@@ -16,8 +16,11 @@
<!-- DO NOT EDIT BELOW THIS LINE -->
<jenkins.build.dependencies>
+ <jenkins.build.dependency>org.eclipse.osbp.blob</jenkins.build.dependency>
<jenkins.build.dependency>org.eclipse.osbp.dsl</jenkins.build.dependency>
<jenkins.build.dependency>org.eclipse.osbp.ecview.core</jenkins.build.dependency>
+ <jenkins.build.dependency>org.eclipse.osbp.ecview.extension.api</jenkins.build.dependency>
+ <jenkins.build.dependency>org.eclipse.osbp.jpa.services</jenkins.build.dependency>
<jenkins.build.dependency>org.eclipse.osbp.runtime</jenkins.build.dependency>
</jenkins.build.dependencies>
</jenkins>
diff --git a/org.eclipse.osbp.runtime.tests/.classpath b/org.eclipse.osbp.runtime.tests/.classpath
new file mode 100644
index 0000000..4ff52d4
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/.classpath
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="src" path="src-gen"/>
+ <classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/org.eclipse.osbp.runtime.tests/.project b/org.eclipse.osbp.runtime.tests/.project
new file mode 100644
index 0000000..4724223
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/.project
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.osbp.runtime.tests</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.osbp.ide.core.ui.shared.OSBPModelEnhancingBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.osbp.ide.core.ui.shared.OSBPI18nBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ds.core.builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.sonarlint.eclipse.core.sonarlintBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.m2e.core.maven2Builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
+ <nature>org.eclipse.m2e.core.maven2Nature</nature>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.babel.editor.rbeNature</nature>
+ <nature>org.eclipse.osbp.ide.core.ui.shared.OSBPNature</nature>
+ </natures>
+</projectDescription>
diff --git a/org.eclipse.osbp.runtime.tests/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.runtime.tests/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.runtime.tests/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.osbp.runtime.tests/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..0c68a61
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/org.eclipse.osbp.runtime.tests/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.runtime.tests/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.runtime.tests/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.runtime.tests/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..19e3115
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,11 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+BuilderConfiguration.is_project_specific=true
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.emf-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.runtime.web.target/LICENSE.txt b/org.eclipse.osbp.runtime.tests/LICENSE.txt
similarity index 100%
rename from org.eclipse.osbp.runtime.web.target/LICENSE.txt
rename to org.eclipse.osbp.runtime.tests/LICENSE.txt
diff --git a/org.eclipse.osbp.runtime.tests/META-INF/MANIFEST.MF b/org.eclipse.osbp.runtime.tests/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..05b9546
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/META-INF/MANIFEST.MF
@@ -0,0 +1,53 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: org.eclipse.osbp.runtime.tests
+Bundle-SymbolicName: org.eclipse.osbp.runtime.tests;singleton:=true
+Bundle-Version: 0.9.0.qualifier
+Bundle-ClassPath: .
+Require-Bundle: org.junit;bundle-version="4.10.0",
+ org.knowhowlab.osgi.testing.assertions;bundle-version="[1.3.0,1.3.1)",
+ org.knowhowlab.osgi.testing.utils;bundle-version="[1.2.2,1.2.3)",
+ com.vaadin.shared;bundle-version="[7.7.6,7.8.0)",
+ com.vaadin.server;bundle-version="[7.7.6,7.8.0)",
+ org.eclipse.osbp.runtime.web.vaadin.common;bundle-version="[0.9.0,0.10.0)",
+ org.eclipse.osbp.runtime.web.ecview.presentation.vaadin;bundle-version="[0.9.0,0.10.0)",
+ org.eclipse.osbp.runtime.web.vaadin.databinding;bundle-version="[0.9.0,0.10.0)",
+ org.eclipse.osbp.runtime.web.vaadin.components;bundle-version="[0.9.0,0.10.0)",
+ org.eclipse.emf.databinding;bundle-version="1.3.0",
+ org.eclipse.core.runtime,
+ org.eclipse.emf.ecore;visibility:=reexport,
+ org.eclipse.osbp.ecview.core.common;bundle-version="[0.9.0,0.10.0)",
+ org.eclipse.osbp.ecview.core.common.editparts.emf;bundle-version="[0.9.0,0.10.0)",
+ org.eclipse.osbp.ecview.core.common.model;bundle-version="[0.9.0,0.10.0)",
+ org.eclipse.osbp.ecview.core.databinding.beans;bundle-version="[0.9.0,0.10.0)",
+ org.eclipse.osbp.ecview.core.databinding.emf;bundle-version="[0.9.0,0.10.0)",
+ org.eclipse.osbp.ecview.core.extension.editparts.emf;bundle-version="[0.9.0,0.10.0)",
+ org.eclipse.osbp.ecview.core.ui.presentation.common;bundle-version="[0.9.0,0.10.0)",
+ org.eclipse.osbp.ecview.core.util.emf;bundle-version="[0.9.0,0.10.0)",
+ org.eclipse.osbp.runtime.common;bundle-version="[0.9.0,0.10.0)",
+ org.jsoup;bundle-version="1.7.2",
+ org.eclipse.osbp.runtime.web.vaadin.components.widget;bundle-version="[0.9.0,0.10.0)",
+ org.slf4j.api;bundle-version="1.7.2",
+ org.eclipse.osbp.runtime.designer.api;bundle-version="[0.9.0,0.10.0)",
+ org.eclipse.equinox.ds;bundle-version="1.4.200",
+ javax.persistence,
+ javax.validation.api;bundle-version="1.1.0",
+ org.eclipse.osbp.dsl.dto.lib;bundle-version="0.9.0",
+ org.eclipse.xtext.xbase.lib;bundle-version="2.11.0",
+ org.eclipse.osbp.dsl.datatype.lib;bundle-version="0.9.0",
+ org.eclipse.persistence.core,
+ org.eclipse.persistence.jpa;bundle-version="2.6.1",
+ org.apache.derby;bundle-version="10.11.1"
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-Vendor: Eclipse OSBP
+Bundle-Localization: plugin
+Import-Package: javax.servlet;version="2.6.0",
+ javax.servlet.http;version="2.6.0",
+ org.osgi.framework;version="1.7.0",
+ org.osgi.service.cm;version="1.4.0",
+ org.osgi.service.component;version="1.2.0",
+ org.osgi.service.http;version="1.2.1"
+Bundle-ActivationPolicy: lazy
+Bundle-Activator: org.eclipse.osbp.runtime.tests.Activator
+Service-Component: OSGI-INF/*.xml
+
diff --git a/org.eclipse.osbp.runtime.tests/META-INF/persistence.xml b/org.eclipse.osbp.runtime.tests/META-INF/persistence.xml
new file mode 100644
index 0000000..0b31730
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/META-INF/persistence.xml
@@ -0,0 +1,27 @@
+<persistence xmlns="http://java.sun.com/xml/ns/persistence"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/persistence persistence_1_0.xsd"
+ version="1.0">
+ <persistence-unit name="DEFAULT"
+ transaction-type="RESOURCE_LOCAL">
+ <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
+ <class>org.osbp.tests.entities.BaseID</class>
+ <class>org.osbp.tests.entities.BaseUUID</class>
+ <class>org.osbp.tests.entities.DtoTestParent</class>
+ <class>org.osbp.tests.entities.DtoTestChildContainment</class>
+ <class>org.osbp.tests.entities.DtoTestChildCrossRef</class>
+ <class>org.osbp.tests.entities.Mcustomer</class>
+ <class>org.osbp.tests.entities.CashRegister</class>
+ <class>org.osbp.tests.entities.CashSlip</class>
+ <class>org.osbp.tests.entities.CashPosition</class>
+ <class>org.osbp.tests.entities.CashPayment</class>
+ <class>org.osbp.tests.entities.CashPaymentMethod</class>
+ <class>org.osbp.tests.entities.CompanyRelationType</class>
+ <class>org.osbp.tests.entities.CompanyGroup</class>
+ <class>org.osbp.tests.entities.Company</class>
+ <class>org.osbp.tests.entities.Address</class>
+ <class>org.osbp.tests.entities.Department</class>
+
+ <exclude-unlisted-classes>true</exclude-unlisted-classes>
+ </persistence-unit>
+</persistence>
diff --git a/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.mapper.AddressDtoMapper.xml b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.mapper.AddressDtoMapper.xml
new file mode 100644
index 0000000..4f1004a
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.mapper.AddressDtoMapper.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.osbp.tests.dtos.mapper.addressdtomapper">
+ <implementation class="org.osbp.tests.dtos.mapper.AddressDtoMapper"/>
+ <service>
+ <provide interface="org.eclipse.osbp.dsl.dto.lib.IMapper"/>
+ </service>
+
+ <property name="fordto.from.entity" type="String" value="org.osbp.tests.entities.Address"/>
+ <property name="fordto.to.dto" type="String">org.osbp.tests.dtos.AddressDto
+ org.osbp.tests.dtos.BaseUUIDDto
+ </property>
+
+ <property name="forentity.from.dto" type="String" value="org.osbp.tests.dtos.AddressDto"/>
+ <property name="forentity.to.entity" type="String">org.osbp.tests.entities.Address
+ org.osbp.tests.entities.BaseUUID
+ </property>
+
+ <property name="service.pid" type="String" value="org.osbp.tests.dtos.mapper.addressdtomapper"/>
+ <reference name="mapperAccess" interface="org.eclipse.osbp.dsl.dto.lib.IMapperAccess"
+ cardinality="1..1" policy="static" bind="bindMapperAccess" unbind="unbindMapperAccess"/>
+</scr:component>
diff --git a/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.mapper.BaseIDDtoMapper.xml b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.mapper.BaseIDDtoMapper.xml
new file mode 100644
index 0000000..88dcd7a
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.mapper.BaseIDDtoMapper.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.osbp.tests.dtos.mapper.baseiddtomapper">
+ <implementation class="org.osbp.tests.dtos.mapper.BaseIDDtoMapper"/>
+ <service>
+ <provide interface="org.eclipse.osbp.dsl.dto.lib.IMapper"/>
+ </service>
+
+ <property name="fordto.from.entity" type="String" value="org.osbp.tests.entities.BaseID"/>
+ <property name="fordto.to.dto" type="String" value="org.osbp.tests.dtos.BaseIDDto"/>
+
+ <property name="forentity.from.dto" type="String" value="org.osbp.tests.dtos.BaseIDDto"/>
+ <property name="forentity.to.entity" type="String" value="org.osbp.tests.entities.BaseID"/>
+
+ <property name="service.pid" type="String" value="org.osbp.tests.dtos.mapper.baseiddtomapper"/>
+ <reference name="mapperAccess" interface="org.eclipse.osbp.dsl.dto.lib.IMapperAccess"
+ cardinality="1..1" policy="static" bind="bindMapperAccess" unbind="unbindMapperAccess"/>
+</scr:component>
diff --git a/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.mapper.BaseUUIDDtoMapper.xml b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.mapper.BaseUUIDDtoMapper.xml
new file mode 100644
index 0000000..9d43636
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.mapper.BaseUUIDDtoMapper.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.osbp.tests.dtos.mapper.baseuuiddtomapper">
+ <implementation class="org.osbp.tests.dtos.mapper.BaseUUIDDtoMapper"/>
+ <service>
+ <provide interface="org.eclipse.osbp.dsl.dto.lib.IMapper"/>
+ </service>
+
+ <property name="fordto.from.entity" type="String" value="org.osbp.tests.entities.BaseUUID"/>
+ <property name="fordto.to.dto" type="String" value="org.osbp.tests.dtos.BaseUUIDDto"/>
+
+ <property name="forentity.from.dto" type="String" value="org.osbp.tests.dtos.BaseUUIDDto"/>
+ <property name="forentity.to.entity" type="String" value="org.osbp.tests.entities.BaseUUID"/>
+
+ <property name="service.pid" type="String" value="org.osbp.tests.dtos.mapper.baseuuiddtomapper"/>
+ <reference name="mapperAccess" interface="org.eclipse.osbp.dsl.dto.lib.IMapperAccess"
+ cardinality="1..1" policy="static" bind="bindMapperAccess" unbind="unbindMapperAccess"/>
+</scr:component>
diff --git a/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.mapper.CashPaymentDtoMapper.xml b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.mapper.CashPaymentDtoMapper.xml
new file mode 100644
index 0000000..625230f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.mapper.CashPaymentDtoMapper.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.osbp.tests.dtos.mapper.cashpaymentdtomapper">
+ <implementation class="org.osbp.tests.dtos.mapper.CashPaymentDtoMapper"/>
+ <service>
+ <provide interface="org.eclipse.osbp.dsl.dto.lib.IMapper"/>
+ </service>
+
+ <property name="fordto.from.entity" type="String" value="org.osbp.tests.entities.CashPayment"/>
+ <property name="fordto.to.dto" type="String">org.osbp.tests.dtos.CashPaymentDto
+ org.osbp.tests.dtos.BaseUUIDDto
+ </property>
+
+ <property name="forentity.from.dto" type="String" value="org.osbp.tests.dtos.CashPaymentDto"/>
+ <property name="forentity.to.entity" type="String">org.osbp.tests.entities.CashPayment
+ org.osbp.tests.entities.BaseUUID
+ </property>
+
+ <property name="service.pid" type="String" value="org.osbp.tests.dtos.mapper.cashpaymentdtomapper"/>
+ <reference name="mapperAccess" interface="org.eclipse.osbp.dsl.dto.lib.IMapperAccess"
+ cardinality="1..1" policy="static" bind="bindMapperAccess" unbind="unbindMapperAccess"/>
+</scr:component>
diff --git a/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.mapper.CashPaymentMethodDtoMapper.xml b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.mapper.CashPaymentMethodDtoMapper.xml
new file mode 100644
index 0000000..1ea8910
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.mapper.CashPaymentMethodDtoMapper.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.osbp.tests.dtos.mapper.cashpaymentmethoddtomapper">
+ <implementation class="org.osbp.tests.dtos.mapper.CashPaymentMethodDtoMapper"/>
+ <service>
+ <provide interface="org.eclipse.osbp.dsl.dto.lib.IMapper"/>
+ </service>
+
+ <property name="fordto.from.entity" type="String" value="org.osbp.tests.entities.CashPaymentMethod"/>
+ <property name="fordto.to.dto" type="String">org.osbp.tests.dtos.CashPaymentMethodDto
+ org.osbp.tests.dtos.BaseUUIDDto
+ </property>
+
+ <property name="forentity.from.dto" type="String" value="org.osbp.tests.dtos.CashPaymentMethodDto"/>
+ <property name="forentity.to.entity" type="String">org.osbp.tests.entities.CashPaymentMethod
+ org.osbp.tests.entities.BaseUUID
+ </property>
+
+ <property name="service.pid" type="String" value="org.osbp.tests.dtos.mapper.cashpaymentmethoddtomapper"/>
+ <reference name="mapperAccess" interface="org.eclipse.osbp.dsl.dto.lib.IMapperAccess"
+ cardinality="1..1" policy="static" bind="bindMapperAccess" unbind="unbindMapperAccess"/>
+</scr:component>
diff --git a/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.mapper.CashPositionDtoMapper.xml b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.mapper.CashPositionDtoMapper.xml
new file mode 100644
index 0000000..0ff4670
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.mapper.CashPositionDtoMapper.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.osbp.tests.dtos.mapper.cashpositiondtomapper">
+ <implementation class="org.osbp.tests.dtos.mapper.CashPositionDtoMapper"/>
+ <service>
+ <provide interface="org.eclipse.osbp.dsl.dto.lib.IMapper"/>
+ </service>
+
+ <property name="fordto.from.entity" type="String" value="org.osbp.tests.entities.CashPosition"/>
+ <property name="fordto.to.dto" type="String">org.osbp.tests.dtos.CashPositionDto
+ org.osbp.tests.dtos.BaseUUIDDto
+ </property>
+
+ <property name="forentity.from.dto" type="String" value="org.osbp.tests.dtos.CashPositionDto"/>
+ <property name="forentity.to.entity" type="String">org.osbp.tests.entities.CashPosition
+ org.osbp.tests.entities.BaseUUID
+ </property>
+
+ <property name="service.pid" type="String" value="org.osbp.tests.dtos.mapper.cashpositiondtomapper"/>
+ <reference name="mapperAccess" interface="org.eclipse.osbp.dsl.dto.lib.IMapperAccess"
+ cardinality="1..1" policy="static" bind="bindMapperAccess" unbind="unbindMapperAccess"/>
+</scr:component>
diff --git a/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.mapper.CashRegisterDtoMapper.xml b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.mapper.CashRegisterDtoMapper.xml
new file mode 100644
index 0000000..966e897
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.mapper.CashRegisterDtoMapper.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.osbp.tests.dtos.mapper.cashregisterdtomapper">
+ <implementation class="org.osbp.tests.dtos.mapper.CashRegisterDtoMapper"/>
+ <service>
+ <provide interface="org.eclipse.osbp.dsl.dto.lib.IMapper"/>
+ </service>
+
+ <property name="fordto.from.entity" type="String" value="org.osbp.tests.entities.CashRegister"/>
+ <property name="fordto.to.dto" type="String">org.osbp.tests.dtos.CashRegisterDto
+ org.osbp.tests.dtos.BaseUUIDDto
+ </property>
+
+ <property name="forentity.from.dto" type="String" value="org.osbp.tests.dtos.CashRegisterDto"/>
+ <property name="forentity.to.entity" type="String">org.osbp.tests.entities.CashRegister
+ org.osbp.tests.entities.BaseUUID
+ </property>
+
+ <property name="service.pid" type="String" value="org.osbp.tests.dtos.mapper.cashregisterdtomapper"/>
+ <reference name="mapperAccess" interface="org.eclipse.osbp.dsl.dto.lib.IMapperAccess"
+ cardinality="1..1" policy="static" bind="bindMapperAccess" unbind="unbindMapperAccess"/>
+</scr:component>
diff --git a/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.mapper.CashSlipDtoMapper.xml b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.mapper.CashSlipDtoMapper.xml
new file mode 100644
index 0000000..541e8cf
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.mapper.CashSlipDtoMapper.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.osbp.tests.dtos.mapper.cashslipdtomapper">
+ <implementation class="org.osbp.tests.dtos.mapper.CashSlipDtoMapper"/>
+ <service>
+ <provide interface="org.eclipse.osbp.dsl.dto.lib.IMapper"/>
+ </service>
+
+ <property name="fordto.from.entity" type="String" value="org.osbp.tests.entities.CashSlip"/>
+ <property name="fordto.to.dto" type="String">org.osbp.tests.dtos.CashSlipDto
+ org.osbp.tests.dtos.BaseUUIDDto
+ </property>
+
+ <property name="forentity.from.dto" type="String" value="org.osbp.tests.dtos.CashSlipDto"/>
+ <property name="forentity.to.entity" type="String">org.osbp.tests.entities.CashSlip
+ org.osbp.tests.entities.BaseUUID
+ </property>
+
+ <property name="service.pid" type="String" value="org.osbp.tests.dtos.mapper.cashslipdtomapper"/>
+ <reference name="mapperAccess" interface="org.eclipse.osbp.dsl.dto.lib.IMapperAccess"
+ cardinality="1..1" policy="static" bind="bindMapperAccess" unbind="unbindMapperAccess"/>
+</scr:component>
diff --git a/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.mapper.CompanyDtoMapper.xml b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.mapper.CompanyDtoMapper.xml
new file mode 100644
index 0000000..50ef61d
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.mapper.CompanyDtoMapper.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.osbp.tests.dtos.mapper.companydtomapper">
+ <implementation class="org.osbp.tests.dtos.mapper.CompanyDtoMapper"/>
+ <service>
+ <provide interface="org.eclipse.osbp.dsl.dto.lib.IMapper"/>
+ </service>
+
+ <property name="fordto.from.entity" type="String" value="org.osbp.tests.entities.Company"/>
+ <property name="fordto.to.dto" type="String">org.osbp.tests.dtos.CompanyDto
+ org.osbp.tests.dtos.BaseUUIDDto
+ </property>
+
+ <property name="forentity.from.dto" type="String" value="org.osbp.tests.dtos.CompanyDto"/>
+ <property name="forentity.to.entity" type="String">org.osbp.tests.entities.Company
+ org.osbp.tests.entities.BaseUUID
+ </property>
+
+ <property name="service.pid" type="String" value="org.osbp.tests.dtos.mapper.companydtomapper"/>
+ <reference name="mapperAccess" interface="org.eclipse.osbp.dsl.dto.lib.IMapperAccess"
+ cardinality="1..1" policy="static" bind="bindMapperAccess" unbind="unbindMapperAccess"/>
+</scr:component>
diff --git a/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.mapper.CompanyGroupDtoMapper.xml b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.mapper.CompanyGroupDtoMapper.xml
new file mode 100644
index 0000000..5c55a8a
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.mapper.CompanyGroupDtoMapper.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.osbp.tests.dtos.mapper.companygroupdtomapper">
+ <implementation class="org.osbp.tests.dtos.mapper.CompanyGroupDtoMapper"/>
+ <service>
+ <provide interface="org.eclipse.osbp.dsl.dto.lib.IMapper"/>
+ </service>
+
+ <property name="fordto.from.entity" type="String" value="org.osbp.tests.entities.CompanyGroup"/>
+ <property name="fordto.to.dto" type="String">org.osbp.tests.dtos.CompanyGroupDto
+ org.osbp.tests.dtos.BaseUUIDDto
+ </property>
+
+ <property name="forentity.from.dto" type="String" value="org.osbp.tests.dtos.CompanyGroupDto"/>
+ <property name="forentity.to.entity" type="String">org.osbp.tests.entities.CompanyGroup
+ org.osbp.tests.entities.BaseUUID
+ </property>
+
+ <property name="service.pid" type="String" value="org.osbp.tests.dtos.mapper.companygroupdtomapper"/>
+ <reference name="mapperAccess" interface="org.eclipse.osbp.dsl.dto.lib.IMapperAccess"
+ cardinality="1..1" policy="static" bind="bindMapperAccess" unbind="unbindMapperAccess"/>
+</scr:component>
diff --git a/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.mapper.CompanyRelationTypeDtoMapper.xml b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.mapper.CompanyRelationTypeDtoMapper.xml
new file mode 100644
index 0000000..6d56e74
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.mapper.CompanyRelationTypeDtoMapper.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.osbp.tests.dtos.mapper.companyrelationtypedtomapper">
+ <implementation class="org.osbp.tests.dtos.mapper.CompanyRelationTypeDtoMapper"/>
+ <service>
+ <provide interface="org.eclipse.osbp.dsl.dto.lib.IMapper"/>
+ </service>
+
+ <property name="fordto.from.entity" type="String" value="org.osbp.tests.entities.CompanyRelationType"/>
+ <property name="fordto.to.dto" type="String">org.osbp.tests.dtos.CompanyRelationTypeDto
+ org.osbp.tests.dtos.BaseUUIDDto
+ </property>
+
+ <property name="forentity.from.dto" type="String" value="org.osbp.tests.dtos.CompanyRelationTypeDto"/>
+ <property name="forentity.to.entity" type="String">org.osbp.tests.entities.CompanyRelationType
+ org.osbp.tests.entities.BaseUUID
+ </property>
+
+ <property name="service.pid" type="String" value="org.osbp.tests.dtos.mapper.companyrelationtypedtomapper"/>
+ <reference name="mapperAccess" interface="org.eclipse.osbp.dsl.dto.lib.IMapperAccess"
+ cardinality="1..1" policy="static" bind="bindMapperAccess" unbind="unbindMapperAccess"/>
+</scr:component>
diff --git a/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.mapper.DepartmentDtoMapper.xml b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.mapper.DepartmentDtoMapper.xml
new file mode 100644
index 0000000..41a1eab
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.mapper.DepartmentDtoMapper.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.osbp.tests.dtos.mapper.departmentdtomapper">
+ <implementation class="org.osbp.tests.dtos.mapper.DepartmentDtoMapper"/>
+ <service>
+ <provide interface="org.eclipse.osbp.dsl.dto.lib.IMapper"/>
+ </service>
+
+ <property name="fordto.from.entity" type="String" value="org.osbp.tests.entities.Department"/>
+ <property name="fordto.to.dto" type="String">org.osbp.tests.dtos.DepartmentDto
+ org.osbp.tests.dtos.BaseUUIDDto
+ </property>
+
+ <property name="forentity.from.dto" type="String" value="org.osbp.tests.dtos.DepartmentDto"/>
+ <property name="forentity.to.entity" type="String">org.osbp.tests.entities.Department
+ org.osbp.tests.entities.BaseUUID
+ </property>
+
+ <property name="service.pid" type="String" value="org.osbp.tests.dtos.mapper.departmentdtomapper"/>
+ <reference name="mapperAccess" interface="org.eclipse.osbp.dsl.dto.lib.IMapperAccess"
+ cardinality="1..1" policy="static" bind="bindMapperAccess" unbind="unbindMapperAccess"/>
+</scr:component>
diff --git a/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.mapper.DtoTestBeanDtoMapper.xml b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.mapper.DtoTestBeanDtoMapper.xml
new file mode 100644
index 0000000..4970e9f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.mapper.DtoTestBeanDtoMapper.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.osbp.tests.dtos.mapper.dtotestbeandtomapper">
+ <implementation class="org.osbp.tests.dtos.mapper.DtoTestBeanDtoMapper"/>
+ <service>
+ <provide interface="org.eclipse.osbp.dsl.dto.lib.IMapper"/>
+ </service>
+
+ <property name="fordto.from.entity" type="String" value="org.osbp.tests.entities.DtoTestBean"/>
+ <property name="fordto.to.dto" type="String" value="org.osbp.tests.dtos.DtoTestBeanDto"/>
+
+ <property name="forentity.from.dto" type="String" value="org.osbp.tests.dtos.DtoTestBeanDto"/>
+ <property name="forentity.to.entity" type="String" value="org.osbp.tests.entities.DtoTestBean"/>
+
+ <property name="service.pid" type="String" value="org.osbp.tests.dtos.mapper.dtotestbeandtomapper"/>
+ <reference name="mapperAccess" interface="org.eclipse.osbp.dsl.dto.lib.IMapperAccess"
+ cardinality="1..1" policy="static" bind="bindMapperAccess" unbind="unbindMapperAccess"/>
+</scr:component>
diff --git a/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.mapper.DtoTestChildContainmentDtoMapper.xml b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.mapper.DtoTestChildContainmentDtoMapper.xml
new file mode 100644
index 0000000..9157456
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.mapper.DtoTestChildContainmentDtoMapper.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.osbp.tests.dtos.mapper.dtotestchildcontainmentdtomapper">
+ <implementation class="org.osbp.tests.dtos.mapper.DtoTestChildContainmentDtoMapper"/>
+ <service>
+ <provide interface="org.eclipse.osbp.dsl.dto.lib.IMapper"/>
+ </service>
+
+ <property name="fordto.from.entity" type="String" value="org.osbp.tests.entities.DtoTestChildContainment"/>
+ <property name="fordto.to.dto" type="String">org.osbp.tests.dtos.DtoTestChildContainmentDto
+ org.osbp.tests.dtos.BaseUUIDDto
+ </property>
+
+ <property name="forentity.from.dto" type="String" value="org.osbp.tests.dtos.DtoTestChildContainmentDto"/>
+ <property name="forentity.to.entity" type="String">org.osbp.tests.entities.DtoTestChildContainment
+ org.osbp.tests.entities.BaseUUID
+ </property>
+
+ <property name="service.pid" type="String" value="org.osbp.tests.dtos.mapper.dtotestchildcontainmentdtomapper"/>
+ <reference name="mapperAccess" interface="org.eclipse.osbp.dsl.dto.lib.IMapperAccess"
+ cardinality="1..1" policy="static" bind="bindMapperAccess" unbind="unbindMapperAccess"/>
+</scr:component>
diff --git a/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.mapper.DtoTestChildCrossRefDtoMapper.xml b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.mapper.DtoTestChildCrossRefDtoMapper.xml
new file mode 100644
index 0000000..5ef89fc
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.mapper.DtoTestChildCrossRefDtoMapper.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.osbp.tests.dtos.mapper.dtotestchildcrossrefdtomapper">
+ <implementation class="org.osbp.tests.dtos.mapper.DtoTestChildCrossRefDtoMapper"/>
+ <service>
+ <provide interface="org.eclipse.osbp.dsl.dto.lib.IMapper"/>
+ </service>
+
+ <property name="fordto.from.entity" type="String" value="org.osbp.tests.entities.DtoTestChildCrossRef"/>
+ <property name="fordto.to.dto" type="String">org.osbp.tests.dtos.DtoTestChildCrossRefDto
+ org.osbp.tests.dtos.BaseUUIDDto
+ </property>
+
+ <property name="forentity.from.dto" type="String" value="org.osbp.tests.dtos.DtoTestChildCrossRefDto"/>
+ <property name="forentity.to.entity" type="String">org.osbp.tests.entities.DtoTestChildCrossRef
+ org.osbp.tests.entities.BaseUUID
+ </property>
+
+ <property name="service.pid" type="String" value="org.osbp.tests.dtos.mapper.dtotestchildcrossrefdtomapper"/>
+ <reference name="mapperAccess" interface="org.eclipse.osbp.dsl.dto.lib.IMapperAccess"
+ cardinality="1..1" policy="static" bind="bindMapperAccess" unbind="unbindMapperAccess"/>
+</scr:component>
diff --git a/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.mapper.DtoTestParentDtoMapper.xml b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.mapper.DtoTestParentDtoMapper.xml
new file mode 100644
index 0000000..43f1a01
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.mapper.DtoTestParentDtoMapper.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.osbp.tests.dtos.mapper.dtotestparentdtomapper">
+ <implementation class="org.osbp.tests.dtos.mapper.DtoTestParentDtoMapper"/>
+ <service>
+ <provide interface="org.eclipse.osbp.dsl.dto.lib.IMapper"/>
+ </service>
+
+ <property name="fordto.from.entity" type="String" value="org.osbp.tests.entities.DtoTestParent"/>
+ <property name="fordto.to.dto" type="String">org.osbp.tests.dtos.DtoTestParentDto
+ org.osbp.tests.dtos.BaseUUIDDto
+ </property>
+
+ <property name="forentity.from.dto" type="String" value="org.osbp.tests.dtos.DtoTestParentDto"/>
+ <property name="forentity.to.entity" type="String">org.osbp.tests.entities.DtoTestParent
+ org.osbp.tests.entities.BaseUUID
+ </property>
+
+ <property name="service.pid" type="String" value="org.osbp.tests.dtos.mapper.dtotestparentdtomapper"/>
+ <reference name="mapperAccess" interface="org.eclipse.osbp.dsl.dto.lib.IMapperAccess"
+ cardinality="1..1" policy="static" bind="bindMapperAccess" unbind="unbindMapperAccess"/>
+</scr:component>
diff --git a/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.mapper.McustomerDtoMapper.xml b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.mapper.McustomerDtoMapper.xml
new file mode 100644
index 0000000..b3a5e12
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.mapper.McustomerDtoMapper.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.osbp.tests.dtos.mapper.mcustomerdtomapper">
+ <implementation class="org.osbp.tests.dtos.mapper.McustomerDtoMapper"/>
+ <service>
+ <provide interface="org.eclipse.osbp.dsl.dto.lib.IMapper"/>
+ </service>
+
+ <property name="fordto.from.entity" type="String" value="org.osbp.tests.entities.Mcustomer"/>
+ <property name="fordto.to.dto" type="String">org.osbp.tests.dtos.McustomerDto
+ org.osbp.tests.dtos.BaseIDDto
+ </property>
+
+ <property name="forentity.from.dto" type="String" value="org.osbp.tests.dtos.McustomerDto"/>
+ <property name="forentity.to.entity" type="String">org.osbp.tests.entities.Mcustomer
+ org.osbp.tests.entities.BaseID
+ </property>
+
+ <property name="service.pid" type="String" value="org.osbp.tests.dtos.mapper.mcustomerdtomapper"/>
+ <reference name="mapperAccess" interface="org.eclipse.osbp.dsl.dto.lib.IMapperAccess"
+ cardinality="1..1" policy="static" bind="bindMapperAccess" unbind="unbindMapperAccess"/>
+</scr:component>
diff --git a/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.service.AddressDtoService.xml b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.service.AddressDtoService.xml
new file mode 100644
index 0000000..3651507
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.service.AddressDtoService.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.osbp.tests.dtos.service.addressdtoservice">
+ <implementation class="org.osbp.tests.dtos.service.AddressDtoService"/>
+ <service>
+ <provide interface="org.eclipse.osbp.runtime.common.filter.IDTOService"/>
+ </service>
+ <property name="dto" type="String" value="org.osbp.tests.dtos.AddressDto"/>
+ <property name="service.pid" type="String" value="org.osbp.tests.dtos.service.addressdtoservice"/>
+<reference name="emf" interface="javax.persistence.EntityManagerFactory" cardinality="1..1"
+ policy="dynamic" bind="bindEmf" unbind="unbindEmf" />
+<reference name="mapperAccess" interface="org.eclipse.osbp.dsl.dto.lib.IMapperAccess" cardinality="1..1"
+ policy="dynamic" bind="bindMapperAccess" unbind="unbindMapperAccess"/>
+<reference name="filterEnhancers" interface="org.eclipse.osbp.runtime.common.filter.IFilterEnhancer" cardinality="0..n"
+ policy="dynamic" bind="addFilterEnhancer" unbind="removeFilterEnhancer"/>
+<reference name="sessionManager" interface="org.eclipse.osbp.runtime.common.session.ISessionManager" cardinality="1..1"
+ policy="dynamic" bind="bindSessionManager" unbind="unbindSessionManager"/>
+</scr:component>
diff --git a/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.service.BaseIDDtoService.xml b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.service.BaseIDDtoService.xml
new file mode 100644
index 0000000..5d1f611
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.service.BaseIDDtoService.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.osbp.tests.dtos.service.baseiddtoservice">
+ <implementation class="org.osbp.tests.dtos.service.BaseIDDtoService"/>
+ <service>
+ <provide interface="org.eclipse.osbp.runtime.common.filter.IDTOService"/>
+ </service>
+ <property name="dto" type="String" value="org.osbp.tests.dtos.BaseIDDto"/>
+ <property name="service.pid" type="String" value="org.osbp.tests.dtos.service.baseiddtoservice"/>
+<reference name="emf" interface="javax.persistence.EntityManagerFactory" cardinality="1..1"
+ policy="dynamic" bind="bindEmf" unbind="unbindEmf" />
+<reference name="mapperAccess" interface="org.eclipse.osbp.dsl.dto.lib.IMapperAccess" cardinality="1..1"
+ policy="dynamic" bind="bindMapperAccess" unbind="unbindMapperAccess"/>
+<reference name="filterEnhancers" interface="org.eclipse.osbp.runtime.common.filter.IFilterEnhancer" cardinality="0..n"
+ policy="dynamic" bind="addFilterEnhancer" unbind="removeFilterEnhancer"/>
+<reference name="sessionManager" interface="org.eclipse.osbp.runtime.common.session.ISessionManager" cardinality="1..1"
+ policy="dynamic" bind="bindSessionManager" unbind="unbindSessionManager"/>
+</scr:component>
diff --git a/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.service.BaseUUIDDtoService.xml b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.service.BaseUUIDDtoService.xml
new file mode 100644
index 0000000..77002af
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.service.BaseUUIDDtoService.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.osbp.tests.dtos.service.baseuuiddtoservice">
+ <implementation class="org.osbp.tests.dtos.service.BaseUUIDDtoService"/>
+ <service>
+ <provide interface="org.eclipse.osbp.runtime.common.filter.IDTOService"/>
+ </service>
+ <property name="dto" type="String" value="org.osbp.tests.dtos.BaseUUIDDto"/>
+ <property name="service.pid" type="String" value="org.osbp.tests.dtos.service.baseuuiddtoservice"/>
+<reference name="emf" interface="javax.persistence.EntityManagerFactory" cardinality="1..1"
+ policy="dynamic" bind="bindEmf" unbind="unbindEmf" />
+<reference name="mapperAccess" interface="org.eclipse.osbp.dsl.dto.lib.IMapperAccess" cardinality="1..1"
+ policy="dynamic" bind="bindMapperAccess" unbind="unbindMapperAccess"/>
+<reference name="filterEnhancers" interface="org.eclipse.osbp.runtime.common.filter.IFilterEnhancer" cardinality="0..n"
+ policy="dynamic" bind="addFilterEnhancer" unbind="removeFilterEnhancer"/>
+<reference name="sessionManager" interface="org.eclipse.osbp.runtime.common.session.ISessionManager" cardinality="1..1"
+ policy="dynamic" bind="bindSessionManager" unbind="unbindSessionManager"/>
+</scr:component>
diff --git a/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.service.CashPaymentDtoService.xml b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.service.CashPaymentDtoService.xml
new file mode 100644
index 0000000..fd323f0
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.service.CashPaymentDtoService.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.osbp.tests.dtos.service.cashpaymentdtoservice">
+ <implementation class="org.osbp.tests.dtos.service.CashPaymentDtoService"/>
+ <service>
+ <provide interface="org.eclipse.osbp.runtime.common.filter.IDTOService"/>
+ </service>
+ <property name="dto" type="String" value="org.osbp.tests.dtos.CashPaymentDto"/>
+ <property name="service.pid" type="String" value="org.osbp.tests.dtos.service.cashpaymentdtoservice"/>
+<reference name="emf" interface="javax.persistence.EntityManagerFactory" cardinality="1..1"
+ policy="dynamic" bind="bindEmf" unbind="unbindEmf" />
+<reference name="mapperAccess" interface="org.eclipse.osbp.dsl.dto.lib.IMapperAccess" cardinality="1..1"
+ policy="dynamic" bind="bindMapperAccess" unbind="unbindMapperAccess"/>
+<reference name="filterEnhancers" interface="org.eclipse.osbp.runtime.common.filter.IFilterEnhancer" cardinality="0..n"
+ policy="dynamic" bind="addFilterEnhancer" unbind="removeFilterEnhancer"/>
+<reference name="sessionManager" interface="org.eclipse.osbp.runtime.common.session.ISessionManager" cardinality="1..1"
+ policy="dynamic" bind="bindSessionManager" unbind="unbindSessionManager"/>
+</scr:component>
diff --git a/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.service.CashPaymentMethodDtoService.xml b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.service.CashPaymentMethodDtoService.xml
new file mode 100644
index 0000000..c86e181
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.service.CashPaymentMethodDtoService.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.osbp.tests.dtos.service.cashpaymentmethoddtoservice">
+ <implementation class="org.osbp.tests.dtos.service.CashPaymentMethodDtoService"/>
+ <service>
+ <provide interface="org.eclipse.osbp.runtime.common.filter.IDTOService"/>
+ </service>
+ <property name="dto" type="String" value="org.osbp.tests.dtos.CashPaymentMethodDto"/>
+ <property name="service.pid" type="String" value="org.osbp.tests.dtos.service.cashpaymentmethoddtoservice"/>
+<reference name="emf" interface="javax.persistence.EntityManagerFactory" cardinality="1..1"
+ policy="dynamic" bind="bindEmf" unbind="unbindEmf" />
+<reference name="mapperAccess" interface="org.eclipse.osbp.dsl.dto.lib.IMapperAccess" cardinality="1..1"
+ policy="dynamic" bind="bindMapperAccess" unbind="unbindMapperAccess"/>
+<reference name="filterEnhancers" interface="org.eclipse.osbp.runtime.common.filter.IFilterEnhancer" cardinality="0..n"
+ policy="dynamic" bind="addFilterEnhancer" unbind="removeFilterEnhancer"/>
+<reference name="sessionManager" interface="org.eclipse.osbp.runtime.common.session.ISessionManager" cardinality="1..1"
+ policy="dynamic" bind="bindSessionManager" unbind="unbindSessionManager"/>
+</scr:component>
diff --git a/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.service.CashPositionDtoService.xml b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.service.CashPositionDtoService.xml
new file mode 100644
index 0000000..a29ee10
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.service.CashPositionDtoService.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.osbp.tests.dtos.service.cashpositiondtoservice">
+ <implementation class="org.osbp.tests.dtos.service.CashPositionDtoService"/>
+ <service>
+ <provide interface="org.eclipse.osbp.runtime.common.filter.IDTOService"/>
+ </service>
+ <property name="dto" type="String" value="org.osbp.tests.dtos.CashPositionDto"/>
+ <property name="service.pid" type="String" value="org.osbp.tests.dtos.service.cashpositiondtoservice"/>
+<reference name="emf" interface="javax.persistence.EntityManagerFactory" cardinality="1..1"
+ policy="dynamic" bind="bindEmf" unbind="unbindEmf" />
+<reference name="mapperAccess" interface="org.eclipse.osbp.dsl.dto.lib.IMapperAccess" cardinality="1..1"
+ policy="dynamic" bind="bindMapperAccess" unbind="unbindMapperAccess"/>
+<reference name="filterEnhancers" interface="org.eclipse.osbp.runtime.common.filter.IFilterEnhancer" cardinality="0..n"
+ policy="dynamic" bind="addFilterEnhancer" unbind="removeFilterEnhancer"/>
+<reference name="sessionManager" interface="org.eclipse.osbp.runtime.common.session.ISessionManager" cardinality="1..1"
+ policy="dynamic" bind="bindSessionManager" unbind="unbindSessionManager"/>
+</scr:component>
diff --git a/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.service.CashRegisterDtoService.xml b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.service.CashRegisterDtoService.xml
new file mode 100644
index 0000000..b82f938
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.service.CashRegisterDtoService.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.osbp.tests.dtos.service.cashregisterdtoservice">
+ <implementation class="org.osbp.tests.dtos.service.CashRegisterDtoService"/>
+ <service>
+ <provide interface="org.eclipse.osbp.runtime.common.filter.IDTOService"/>
+ </service>
+ <property name="dto" type="String" value="org.osbp.tests.dtos.CashRegisterDto"/>
+ <property name="service.pid" type="String" value="org.osbp.tests.dtos.service.cashregisterdtoservice"/>
+<reference name="emf" interface="javax.persistence.EntityManagerFactory" cardinality="1..1"
+ policy="dynamic" bind="bindEmf" unbind="unbindEmf" />
+<reference name="mapperAccess" interface="org.eclipse.osbp.dsl.dto.lib.IMapperAccess" cardinality="1..1"
+ policy="dynamic" bind="bindMapperAccess" unbind="unbindMapperAccess"/>
+<reference name="filterEnhancers" interface="org.eclipse.osbp.runtime.common.filter.IFilterEnhancer" cardinality="0..n"
+ policy="dynamic" bind="addFilterEnhancer" unbind="removeFilterEnhancer"/>
+<reference name="sessionManager" interface="org.eclipse.osbp.runtime.common.session.ISessionManager" cardinality="1..1"
+ policy="dynamic" bind="bindSessionManager" unbind="unbindSessionManager"/>
+</scr:component>
diff --git a/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.service.CashSlipDtoService.xml b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.service.CashSlipDtoService.xml
new file mode 100644
index 0000000..910fa01
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.service.CashSlipDtoService.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.osbp.tests.dtos.service.cashslipdtoservice">
+ <implementation class="org.osbp.tests.dtos.service.CashSlipDtoService"/>
+ <service>
+ <provide interface="org.eclipse.osbp.runtime.common.filter.IDTOService"/>
+ </service>
+ <property name="dto" type="String" value="org.osbp.tests.dtos.CashSlipDto"/>
+ <property name="service.pid" type="String" value="org.osbp.tests.dtos.service.cashslipdtoservice"/>
+<reference name="emf" interface="javax.persistence.EntityManagerFactory" cardinality="1..1"
+ policy="dynamic" bind="bindEmf" unbind="unbindEmf" />
+<reference name="mapperAccess" interface="org.eclipse.osbp.dsl.dto.lib.IMapperAccess" cardinality="1..1"
+ policy="dynamic" bind="bindMapperAccess" unbind="unbindMapperAccess"/>
+<reference name="filterEnhancers" interface="org.eclipse.osbp.runtime.common.filter.IFilterEnhancer" cardinality="0..n"
+ policy="dynamic" bind="addFilterEnhancer" unbind="removeFilterEnhancer"/>
+<reference name="sessionManager" interface="org.eclipse.osbp.runtime.common.session.ISessionManager" cardinality="1..1"
+ policy="dynamic" bind="bindSessionManager" unbind="unbindSessionManager"/>
+</scr:component>
diff --git a/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.service.CompanyDtoService.xml b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.service.CompanyDtoService.xml
new file mode 100644
index 0000000..0a54b09
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.service.CompanyDtoService.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.osbp.tests.dtos.service.companydtoservice">
+ <implementation class="org.osbp.tests.dtos.service.CompanyDtoService"/>
+ <service>
+ <provide interface="org.eclipse.osbp.runtime.common.filter.IDTOService"/>
+ </service>
+ <property name="dto" type="String" value="org.osbp.tests.dtos.CompanyDto"/>
+ <property name="service.pid" type="String" value="org.osbp.tests.dtos.service.companydtoservice"/>
+<reference name="emf" interface="javax.persistence.EntityManagerFactory" cardinality="1..1"
+ policy="dynamic" bind="bindEmf" unbind="unbindEmf" />
+<reference name="mapperAccess" interface="org.eclipse.osbp.dsl.dto.lib.IMapperAccess" cardinality="1..1"
+ policy="dynamic" bind="bindMapperAccess" unbind="unbindMapperAccess"/>
+<reference name="filterEnhancers" interface="org.eclipse.osbp.runtime.common.filter.IFilterEnhancer" cardinality="0..n"
+ policy="dynamic" bind="addFilterEnhancer" unbind="removeFilterEnhancer"/>
+<reference name="sessionManager" interface="org.eclipse.osbp.runtime.common.session.ISessionManager" cardinality="1..1"
+ policy="dynamic" bind="bindSessionManager" unbind="unbindSessionManager"/>
+</scr:component>
diff --git a/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.service.CompanyGroupDtoService.xml b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.service.CompanyGroupDtoService.xml
new file mode 100644
index 0000000..494d99a
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.service.CompanyGroupDtoService.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.osbp.tests.dtos.service.companygroupdtoservice">
+ <implementation class="org.osbp.tests.dtos.service.CompanyGroupDtoService"/>
+ <service>
+ <provide interface="org.eclipse.osbp.runtime.common.filter.IDTOService"/>
+ </service>
+ <property name="dto" type="String" value="org.osbp.tests.dtos.CompanyGroupDto"/>
+ <property name="service.pid" type="String" value="org.osbp.tests.dtos.service.companygroupdtoservice"/>
+<reference name="emf" interface="javax.persistence.EntityManagerFactory" cardinality="1..1"
+ policy="dynamic" bind="bindEmf" unbind="unbindEmf" />
+<reference name="mapperAccess" interface="org.eclipse.osbp.dsl.dto.lib.IMapperAccess" cardinality="1..1"
+ policy="dynamic" bind="bindMapperAccess" unbind="unbindMapperAccess"/>
+<reference name="filterEnhancers" interface="org.eclipse.osbp.runtime.common.filter.IFilterEnhancer" cardinality="0..n"
+ policy="dynamic" bind="addFilterEnhancer" unbind="removeFilterEnhancer"/>
+<reference name="sessionManager" interface="org.eclipse.osbp.runtime.common.session.ISessionManager" cardinality="1..1"
+ policy="dynamic" bind="bindSessionManager" unbind="unbindSessionManager"/>
+</scr:component>
diff --git a/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.service.CompanyRelationTypeDtoService.xml b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.service.CompanyRelationTypeDtoService.xml
new file mode 100644
index 0000000..fe0be54
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.service.CompanyRelationTypeDtoService.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.osbp.tests.dtos.service.companyrelationtypedtoservice">
+ <implementation class="org.osbp.tests.dtos.service.CompanyRelationTypeDtoService"/>
+ <service>
+ <provide interface="org.eclipse.osbp.runtime.common.filter.IDTOService"/>
+ </service>
+ <property name="dto" type="String" value="org.osbp.tests.dtos.CompanyRelationTypeDto"/>
+ <property name="service.pid" type="String" value="org.osbp.tests.dtos.service.companyrelationtypedtoservice"/>
+<reference name="emf" interface="javax.persistence.EntityManagerFactory" cardinality="1..1"
+ policy="dynamic" bind="bindEmf" unbind="unbindEmf" />
+<reference name="mapperAccess" interface="org.eclipse.osbp.dsl.dto.lib.IMapperAccess" cardinality="1..1"
+ policy="dynamic" bind="bindMapperAccess" unbind="unbindMapperAccess"/>
+<reference name="filterEnhancers" interface="org.eclipse.osbp.runtime.common.filter.IFilterEnhancer" cardinality="0..n"
+ policy="dynamic" bind="addFilterEnhancer" unbind="removeFilterEnhancer"/>
+<reference name="sessionManager" interface="org.eclipse.osbp.runtime.common.session.ISessionManager" cardinality="1..1"
+ policy="dynamic" bind="bindSessionManager" unbind="unbindSessionManager"/>
+</scr:component>
diff --git a/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.service.DepartmentDtoService.xml b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.service.DepartmentDtoService.xml
new file mode 100644
index 0000000..005bf31
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.service.DepartmentDtoService.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.osbp.tests.dtos.service.departmentdtoservice">
+ <implementation class="org.osbp.tests.dtos.service.DepartmentDtoService"/>
+ <service>
+ <provide interface="org.eclipse.osbp.runtime.common.filter.IDTOService"/>
+ </service>
+ <property name="dto" type="String" value="org.osbp.tests.dtos.DepartmentDto"/>
+ <property name="service.pid" type="String" value="org.osbp.tests.dtos.service.departmentdtoservice"/>
+<reference name="emf" interface="javax.persistence.EntityManagerFactory" cardinality="1..1"
+ policy="dynamic" bind="bindEmf" unbind="unbindEmf" />
+<reference name="mapperAccess" interface="org.eclipse.osbp.dsl.dto.lib.IMapperAccess" cardinality="1..1"
+ policy="dynamic" bind="bindMapperAccess" unbind="unbindMapperAccess"/>
+<reference name="filterEnhancers" interface="org.eclipse.osbp.runtime.common.filter.IFilterEnhancer" cardinality="0..n"
+ policy="dynamic" bind="addFilterEnhancer" unbind="removeFilterEnhancer"/>
+<reference name="sessionManager" interface="org.eclipse.osbp.runtime.common.session.ISessionManager" cardinality="1..1"
+ policy="dynamic" bind="bindSessionManager" unbind="unbindSessionManager"/>
+</scr:component>
diff --git a/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.service.DtoTestChildContainmentDtoService.xml b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.service.DtoTestChildContainmentDtoService.xml
new file mode 100644
index 0000000..2ea45ec
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.service.DtoTestChildContainmentDtoService.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.osbp.tests.dtos.service.dtotestchildcontainmentdtoservice">
+ <implementation class="org.osbp.tests.dtos.service.DtoTestChildContainmentDtoService"/>
+ <service>
+ <provide interface="org.eclipse.osbp.runtime.common.filter.IDTOService"/>
+ </service>
+ <property name="dto" type="String" value="org.osbp.tests.dtos.DtoTestChildContainmentDto"/>
+ <property name="service.pid" type="String" value="org.osbp.tests.dtos.service.dtotestchildcontainmentdtoservice"/>
+<reference name="emf" interface="javax.persistence.EntityManagerFactory" cardinality="1..1"
+ policy="dynamic" bind="bindEmf" unbind="unbindEmf" />
+<reference name="mapperAccess" interface="org.eclipse.osbp.dsl.dto.lib.IMapperAccess" cardinality="1..1"
+ policy="dynamic" bind="bindMapperAccess" unbind="unbindMapperAccess"/>
+<reference name="filterEnhancers" interface="org.eclipse.osbp.runtime.common.filter.IFilterEnhancer" cardinality="0..n"
+ policy="dynamic" bind="addFilterEnhancer" unbind="removeFilterEnhancer"/>
+<reference name="sessionManager" interface="org.eclipse.osbp.runtime.common.session.ISessionManager" cardinality="1..1"
+ policy="dynamic" bind="bindSessionManager" unbind="unbindSessionManager"/>
+</scr:component>
diff --git a/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.service.DtoTestChildCrossRefDtoService.xml b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.service.DtoTestChildCrossRefDtoService.xml
new file mode 100644
index 0000000..595518f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.service.DtoTestChildCrossRefDtoService.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.osbp.tests.dtos.service.dtotestchildcrossrefdtoservice">
+ <implementation class="org.osbp.tests.dtos.service.DtoTestChildCrossRefDtoService"/>
+ <service>
+ <provide interface="org.eclipse.osbp.runtime.common.filter.IDTOService"/>
+ </service>
+ <property name="dto" type="String" value="org.osbp.tests.dtos.DtoTestChildCrossRefDto"/>
+ <property name="service.pid" type="String" value="org.osbp.tests.dtos.service.dtotestchildcrossrefdtoservice"/>
+<reference name="emf" interface="javax.persistence.EntityManagerFactory" cardinality="1..1"
+ policy="dynamic" bind="bindEmf" unbind="unbindEmf" />
+<reference name="mapperAccess" interface="org.eclipse.osbp.dsl.dto.lib.IMapperAccess" cardinality="1..1"
+ policy="dynamic" bind="bindMapperAccess" unbind="unbindMapperAccess"/>
+<reference name="filterEnhancers" interface="org.eclipse.osbp.runtime.common.filter.IFilterEnhancer" cardinality="0..n"
+ policy="dynamic" bind="addFilterEnhancer" unbind="removeFilterEnhancer"/>
+<reference name="sessionManager" interface="org.eclipse.osbp.runtime.common.session.ISessionManager" cardinality="1..1"
+ policy="dynamic" bind="bindSessionManager" unbind="unbindSessionManager"/>
+</scr:component>
diff --git a/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.service.DtoTestParentDtoService.xml b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.service.DtoTestParentDtoService.xml
new file mode 100644
index 0000000..a67affe
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.service.DtoTestParentDtoService.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.osbp.tests.dtos.service.dtotestparentdtoservice">
+ <implementation class="org.osbp.tests.dtos.service.DtoTestParentDtoService"/>
+ <service>
+ <provide interface="org.eclipse.osbp.runtime.common.filter.IDTOService"/>
+ </service>
+ <property name="dto" type="String" value="org.osbp.tests.dtos.DtoTestParentDto"/>
+ <property name="service.pid" type="String" value="org.osbp.tests.dtos.service.dtotestparentdtoservice"/>
+<reference name="emf" interface="javax.persistence.EntityManagerFactory" cardinality="1..1"
+ policy="dynamic" bind="bindEmf" unbind="unbindEmf" />
+<reference name="mapperAccess" interface="org.eclipse.osbp.dsl.dto.lib.IMapperAccess" cardinality="1..1"
+ policy="dynamic" bind="bindMapperAccess" unbind="unbindMapperAccess"/>
+<reference name="filterEnhancers" interface="org.eclipse.osbp.runtime.common.filter.IFilterEnhancer" cardinality="0..n"
+ policy="dynamic" bind="addFilterEnhancer" unbind="removeFilterEnhancer"/>
+<reference name="sessionManager" interface="org.eclipse.osbp.runtime.common.session.ISessionManager" cardinality="1..1"
+ policy="dynamic" bind="bindSessionManager" unbind="unbindSessionManager"/>
+</scr:component>
diff --git a/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.service.McustomerDtoService.xml b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.service.McustomerDtoService.xml
new file mode 100644
index 0000000..6201431
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/OSGI-INF/org.osbp.tests.dtos.service.McustomerDtoService.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.osbp.tests.dtos.service.mcustomerdtoservice">
+ <implementation class="org.osbp.tests.dtos.service.McustomerDtoService"/>
+ <service>
+ <provide interface="org.eclipse.osbp.runtime.common.filter.IDTOService"/>
+ </service>
+ <property name="dto" type="String" value="org.osbp.tests.dtos.McustomerDto"/>
+ <property name="service.pid" type="String" value="org.osbp.tests.dtos.service.mcustomerdtoservice"/>
+<reference name="emf" interface="javax.persistence.EntityManagerFactory" cardinality="1..1"
+ policy="dynamic" bind="bindEmf" unbind="unbindEmf" />
+<reference name="mapperAccess" interface="org.eclipse.osbp.dsl.dto.lib.IMapperAccess" cardinality="1..1"
+ policy="dynamic" bind="bindMapperAccess" unbind="unbindMapperAccess"/>
+<reference name="filterEnhancers" interface="org.eclipse.osbp.runtime.common.filter.IFilterEnhancer" cardinality="0..n"
+ policy="dynamic" bind="addFilterEnhancer" unbind="removeFilterEnhancer"/>
+<reference name="sessionManager" interface="org.eclipse.osbp.runtime.common.session.ISessionManager" cardinality="1..1"
+ policy="dynamic" bind="bindSessionManager" unbind="unbindSessionManager"/>
+</scr:component>
diff --git a/org.eclipse.osbp.runtime.tests/build.properties b/org.eclipse.osbp.runtime.tests/build.properties
new file mode 100644
index 0000000..5bef6ac
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/build.properties
@@ -0,0 +1,9 @@
+output.. = target/classes/
+bin.includes = .,\
+ META-INF/,\
+ plugin.xml,\
+ plugin.properties,\
+ LICENSE.txt
+jars.compile.order = .
+source.. = src/
+src.includes = LICENSE.txt
diff --git a/org.eclipse.osbp.runtime.tests/createDDL_ddlGeneration.jdbc b/org.eclipse.osbp.runtime.tests/createDDL_ddlGeneration.jdbc
new file mode 100644
index 0000000..313f3cd
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/createDDL_ddlGeneration.jdbc
@@ -0,0 +1,29 @@
+CREATE TABLE MCUSTOMER (ID INTEGER NOT NULL, ACCOUNT_NUM BIGINT, ADDRESS1 VARCHAR(255), ADDRESS2 VARCHAR(255), ADDRESS3 VARCHAR(255), ADDRESS4 VARCHAR(255), BIRTHDATE DATE, CITY VARCHAR(255), COUNTRY VARCHAR(255), DATE_ACCNT_OPENED VARCHAR(255), EDUCATION VARCHAR(255), FNAME VARCHAR(255), FULLNAME VARCHAR(255), GENDER VARCHAR(255), HOUSEOWNER VARCHAR(255), LNAME VARCHAR(255), MARITAL_STATUS VARCHAR(255), MEMBER_CARD VARCHAR(255), MI VARCHAR(255), NUM_CARS_OWNED INTEGER, NUM_CHILDREN_AT_HOME INTEGER, OCCUPATION VARCHAR(255), PHONE1 VARCHAR(255), PHONE2 VARCHAR(255), POSTAL_CODE VARCHAR(255), STATE_PROVINCE VARCHAR(255), TEST VARCHAR(255), TOTAL_CHILDREN INTEGER, YEARLY_INCOME VARCHAR(255), PRIMARY KEY (ID))
+CREATE TABLE CASH_REGISTER (ID VARCHAR(255) NOT NULL, CURRENT_DAY VARCHAR(255), IP VARCHAR(255), LOCATION VARCHAR(255), NUM VARCHAR(255), PRIMARY KEY (ID))
+CREATE UNIQUE INDEX cashIpIndex ON CASH_REGISTER (ip)
+CREATE UNIQUE INDEX cashNumIndex ON CASH_REGISTER (num)
+CREATE TABLE CASH_SLIP (ID VARCHAR(255) NOT NULL, CASHIER VARCHAR(255), CURRENT_DAY VARCHAR(255), NOW TIMESTAMP, PAYED SMALLINT DEFAULT 0, SERIAL BIGINT, TOTAL FLOAT, CUSTOMER_ID INTEGER, REGISTER_ID VARCHAR(255), PRIMARY KEY (ID))
+CREATE INDEX currentDay_index ON CASH_SLIP (currentDay)
+CREATE INDEX serial_index ON CASH_SLIP (currentDay, serial)
+CREATE TABLE CASH_POSITION (ID VARCHAR(255) NOT NULL, AMOUNT FLOAT, NOW TIMESTAMP, PRICE FLOAT, QUANTITY FLOAT, SLIP_ID VARCHAR(255), PRIMARY KEY (ID))
+CREATE TABLE CASH_PAYMENT (ID VARCHAR(255) NOT NULL, NOW TIMESTAMP, PAYED FLOAT, METHOD_OF_PAYMENT_ID VARCHAR(255), SLIP_ID VARCHAR(255), PRIMARY KEY (ID))
+CREATE TABLE CASH_PAYMENT_METHOD (ID VARCHAR(255) NOT NULL, CREDIT SMALLINT DEFAULT 0, IMAGE_NAME VARCHAR(255), LOWER_LIMIT FLOAT, NAME VARCHAR(255), NUM VARCHAR(255), PRIMARY KEY (ID))
+CREATE UNIQUE INDEX paymentNumIndex ON CASH_PAYMENT_METHOD (num)
+CREATE TABLE COMPANY_RELATION_TYPE (ID VARCHAR(255) NOT NULL, DESCRIPTION VARCHAR(255), NAME VARCHAR(255), PRIMARY KEY (ID))
+CREATE TABLE COMPANY_GROUP (ID VARCHAR(255) NOT NULL, DESCRIPTION VARCHAR(255), NAME VARCHAR(255), MAIN_COMPANY_ID VARCHAR(255), PRIMARY KEY (ID))
+CREATE TABLE COMPANY (ID VARCHAR(255) NOT NULL, DESCRIPTION VARCHAR(255), NAME VARCHAR(255), COMPANY_GROUP_ID VARCHAR(255), RELATION_TYPE_ID VARCHAR(255), PRIMARY KEY (ID))
+CREATE TABLE ADDRESS (ID VARCHAR(255) NOT NULL, ADDRESS1 VARCHAR(255), ADDRESS2 VARCHAR(255), CITY VARCHAR(255), COUNTRY VARCHAR(255), EMAIL VARCHAR(255), LANDLINE VARCHAR(255), MOBILE VARCHAR(255), POSTAL_CODE VARCHAR(255), STATE_PROVINCE VARCHAR(255), COMPANY_ID VARCHAR(255), DEPARTMENT_ID VARCHAR(255), PRIMARY KEY (ID))
+CREATE TABLE DEPARTMENT (ID VARCHAR(255) NOT NULL, DEFAULT_YEARLY_INCOME FLOAT, DESCRIPTION VARCHAR(255), NAME VARCHAR(255), COMPANY_ID VARCHAR(255), PRIMARY KEY (ID))
+ALTER TABLE CASH_SLIP ADD CONSTRAINT CASHSLIPREGISTERID FOREIGN KEY (REGISTER_ID) REFERENCES CASH_REGISTER (ID)
+ALTER TABLE CASH_SLIP ADD CONSTRAINT CASHSLIPCUSTOMERID FOREIGN KEY (CUSTOMER_ID) REFERENCES MCUSTOMER (ID)
+ALTER TABLE CASH_POSITION ADD CONSTRAINT CASHPOSITIONSLIPID FOREIGN KEY (SLIP_ID) REFERENCES CASH_SLIP (ID)
+ALTER TABLE CASH_PAYMENT ADD CONSTRAINT CSHPYMNMTHDFPYMNTD FOREIGN KEY (METHOD_OF_PAYMENT_ID) REFERENCES CASH_PAYMENT_METHOD (ID)
+ALTER TABLE CASH_PAYMENT ADD CONSTRAINT CASHPAYMENTSLIP_ID FOREIGN KEY (SLIP_ID) REFERENCES CASH_SLIP (ID)
+ALTER TABLE COMPANY_GROUP ADD CONSTRAINT CMPNYGRUPMNCMPNYID FOREIGN KEY (MAIN_COMPANY_ID) REFERENCES COMPANY (ID)
+ALTER TABLE COMPANY ADD CONSTRAINT CMPNYCMPANYGROUPID FOREIGN KEY (COMPANY_GROUP_ID) REFERENCES COMPANY_GROUP (ID)
+ALTER TABLE COMPANY ADD CONSTRAINT CMPANYRLTIONTYPEID FOREIGN KEY (RELATION_TYPE_ID) REFERENCES COMPANY_RELATION_TYPE (ID)
+ALTER TABLE ADDRESS ADD CONSTRAINT ADDRESS_COMPANY_ID FOREIGN KEY (COMPANY_ID) REFERENCES COMPANY (ID)
+ALTER TABLE ADDRESS ADD CONSTRAINT DDRESSDEPARTMENTID FOREIGN KEY (DEPARTMENT_ID) REFERENCES DEPARTMENT (ID)
+ALTER TABLE DEPARTMENT ADD CONSTRAINT DPARTMENTCOMPANYID FOREIGN KEY (COMPANY_ID) REFERENCES COMPANY (ID)
+CREATE TABLE SEQUENCE (SEQ_NAME VARCHAR(50) NOT NULL, SEQ_COUNT DECIMAL(15), PRIMARY KEY (SEQ_NAME))
+INSERT INTO SEQUENCE(SEQ_NAME, SEQ_COUNT) values ('SEQ_GEN', 0)
diff --git a/org.eclipse.osbp.runtime.tests/dropDDL_ddlGeneration.jdbc b/org.eclipse.osbp.runtime.tests/dropDDL_ddlGeneration.jdbc
new file mode 100644
index 0000000..d6290be
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/dropDDL_ddlGeneration.jdbc
@@ -0,0 +1,28 @@
+ALTER TABLE CASH_SLIP DROP CONSTRAINT CASHSLIPREGISTERID
+ALTER TABLE CASH_SLIP DROP CONSTRAINT CASHSLIPCUSTOMERID
+ALTER TABLE CASH_POSITION DROP CONSTRAINT CASHPOSITIONSLIPID
+ALTER TABLE CASH_PAYMENT DROP CONSTRAINT CSHPYMNMTHDFPYMNTD
+ALTER TABLE CASH_PAYMENT DROP CONSTRAINT CASHPAYMENTSLIP_ID
+ALTER TABLE COMPANY_GROUP DROP CONSTRAINT CMPNYGRUPMNCMPNYID
+ALTER TABLE COMPANY DROP CONSTRAINT CMPNYCMPANYGROUPID
+ALTER TABLE COMPANY DROP CONSTRAINT CMPANYRLTIONTYPEID
+ALTER TABLE ADDRESS DROP CONSTRAINT ADDRESS_COMPANY_ID
+ALTER TABLE ADDRESS DROP CONSTRAINT DDRESSDEPARTMENTID
+ALTER TABLE DEPARTMENT DROP CONSTRAINT DPARTMENTCOMPANYID
+DROP TABLE MCUSTOMER
+DROP INDEX cashIpIndex
+DROP INDEX cashNumIndex
+DROP TABLE CASH_REGISTER
+DROP INDEX currentDay_index
+DROP INDEX serial_index
+DROP TABLE CASH_SLIP
+DROP TABLE CASH_POSITION
+DROP TABLE CASH_PAYMENT
+DROP INDEX paymentNumIndex
+DROP TABLE CASH_PAYMENT_METHOD
+DROP TABLE COMPANY_RELATION_TYPE
+DROP TABLE COMPANY_GROUP
+DROP TABLE COMPANY
+DROP TABLE ADDRESS
+DROP TABLE DEPARTMENT
+DELETE FROM SEQUENCE WHERE SEQ_NAME = 'SEQ_GEN'
diff --git a/org.eclipse.osbp.runtime.tests/emfmodel/model.ecore b/org.eclipse.osbp.runtime.tests/emfmodel/model.ecore
new file mode 100644
index 0000000..8c8a081
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/emfmodel/model.ecore
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="model" nsURI="http://www.osbp.org/vaadin/presentation/tests"
+ nsPrefix="model">
+ <eClassifiers xsi:type="ecore:EClass" name="EmfFoo">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="EmfBar">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="myfoo" eType="#//EmfFoo"
+ containment="true"/>
+ </eClassifiers>
+</ecore:EPackage>
diff --git a/org.eclipse.osbp.runtime.tests/emfmodel/model.genmodel b/org.eclipse.osbp.runtime.tests/emfmodel/model.genmodel
new file mode 100644
index 0000000..9681efe
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/emfmodel/model.genmodel
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<genmodel:GenModel xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"
+ xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" modelDirectory="/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests/src"
+ modelPluginID="org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests" modelName="Model"
+ rootExtendsClass="org.eclipse.emf.ecore.impl.MinimalEObjectImpl$Container" importerID="org.eclipse.emf.importer.ecore"
+ complianceLevel="6.0" copyrightFields="false" operationReflection="true" importOrganizing="true">
+ <foreignModel>model.ecore</foreignModel>
+ <genPackages prefix="Model" basePackage="org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests.emf"
+ disposableProviderFactory="true" ecorePackage="model.ecore#/">
+ <genClasses ecoreClass="model.ecore#//Foo">
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute model.ecore#//Foo/name"/>
+ </genClasses>
+ <genClasses ecoreClass="model.ecore#//Bar">
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute model.ecore#//Bar/name"/>
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference model.ecore#//Bar/myfoos"/>
+ </genClasses>
+ </genPackages>
+</genmodel:GenModel>
diff --git a/org.eclipse.osbp.runtime.tests/i18n/I18N.properties b/org.eclipse.osbp.runtime.tests/i18n/I18N.properties
new file mode 100644
index 0000000..4996311
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/i18n/I18N.properties
@@ -0,0 +1,117 @@
+#default
+account_num=account_num
+activation_time=activation_time
+actual_owner=actual_owner
+addon=addon
+addons=addons
+address=address
+address1=address1
+address2=address2
+address3=address3
+address4=address4
+amount=amount
+beanx=beanx
+birthdate=birthdate
+car=car
+cash_payment=cash_payment
+cash_payment_method=cash_payment_method
+cash_position=cash_position
+cash_register=cash_register
+cash_slip=cash_slip
+cashier=cashier
+city=city
+companies=companies
+company=company
+company_group=company_group
+company_relation_type=company_relation_type
+container=container
+containment_childs=containment_childs
+country=country
+created_by=created_by
+created_on=created_on
+credit=credit
+cross_ref_child=cross_ref_child
+cross_ref_childs=cross_ref_childs
+current_day=current_day
+customer=customer
+cycles1=cycles1
+cycles2=cycles2
+date_accnt_opened=date_accnt_opened
+default_yearly_income=default_yearly_income
+department=department
+departments=departments
+description=description
+dto_test_bean=dto_test_bean
+dto_test_child_containment=dto_test_child_containment
+dto_test_child_cross_ref=dto_test_child_cross_ref
+dto_test_parent=dto_test_parent
+education=education
+email=email
+expiration_time=expiration_time
+finishing_date=finishing_date
+firstname=firstname
+fname=fname
+foo=foo
+fullname=fullname
+gender=gender
+home_address=home_address
+houseowner=houseowner
+id=id
+image_name=image_name
+ip=ip
+landline=landline
+lastname=lastname
+lname=lname
+location=location
+lower_limit=lower_limit
+main_company=main_company
+marital_status=marital_status
+mcustomer=mcustomer
+member_card=member_card
+method_of_payment=method_of_payment
+mi=mi
+mobile=mobile
+name=name
+now=now
+num=num
+num_cars_owned=num_cars_owned
+num_children_at_home=num_children_at_home
+number=number
+occupation=occupation
+owner=owner
+owns_cars=owns_cars
+parent=parent
+payed=payed
+payments=payments
+person=person
+phone1=phone1
+phone2=phone2
+positions=positions
+postal_code=postal_code
+postalcode=postalcode
+price=price
+priority=priority
+process_id=process_id
+process_instance_id=process_instance_id
+process_session_id=process_session_id
+quantity=quantity
+register=register
+relation_type=relation_type
+serial=serial
+slip=slip
+slips=slips
+state_province=state_province
+status=status
+streetname=streetname
+string=string
+subject=subject
+task_id=task_id
+test=test
+to_cycle1=to_cycle1
+to_cycle2=to_cycle2
+total=total
+total_children=total_children
+uuid=uuid
+when=when
+work_address=work_address
+yearly_income=yearly_income
diff --git a/org.eclipse.osbp.runtime.tests/i18n/I18N_de.properties b/org.eclipse.osbp.runtime.tests/i18n/I18N_de.properties
new file mode 100644
index 0000000..647739a
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/i18n/I18N_de.properties
@@ -0,0 +1,117 @@
+#de
+account_num=Account number
+activation_time=Activation time
+actual_owner=Actual owner
+addon=Addon
+addons=Addons
+address=Address
+address1=Address1
+address2=Address2
+address3=Address3
+address4=Address4
+amount=Amount
+beanx=Beanx
+birthdate=Birthdate
+car=Car
+cash_payment=Cash payment
+cash_payment_method=Cash payment method
+cash_position=Cash position
+cash_register=Cash register
+cash_slip=Cash slip
+cashier=Cashier
+city=City
+companies=Companies
+company=Company
+company_group=Company group
+company_relation_type=Company relation type
+container=Container
+containment_childs=Containment childs
+country=Country
+created_by=Created by
+created_on=Created on
+credit=Credit
+cross_ref_child=Cross reference child
+cross_ref_childs=Cross reference childs
+current_day=Current day
+customer=Customer
+cycles1=Cycles1
+cycles2=Cycles2
+date_accnt_opened=Date account opened
+default_yearly_income=Default yearly income
+department=Department
+departments=Departments
+description=Description
+dto_test_bean=Dto test bean
+dto_test_child_containment=Dto test child containment
+dto_test_child_cross_ref=Dto test child cross reference
+dto_test_parent=Dto test parent
+education=Education
+email=Email
+expiration_time=Expiration time
+finishing_date=Finishing date
+firstname=Firstname
+fname=Fname
+foo=Foo
+fullname=Fullname
+gender=Gender
+home_address=Home address
+houseowner=Houseowner
+id=Identifier
+image_name=Image name
+ip=Ip
+landline=Landline
+lastname=Lastname
+lname=Lname
+location=Location
+lower_limit=Lower limit
+main_company=Main company
+marital_status=Marital status
+mcustomer=Mcustomer
+member_card=Member card
+method_of_payment=Method of payment
+mi=Mi
+mobile=Mobile
+name=Name
+now=Now
+num=Number
+num_cars_owned=Number cars owned
+num_children_at_home=Number children at home
+number=Number
+occupation=Occupation
+owner=Owner
+owns_cars=Owns cars
+parent=Parent
+payed=Payed
+payments=Payments
+person=Person
+phone1=Phone1
+phone2=Phone2
+positions=Positions
+postal_code=Postal code
+postalcode=Postalcode
+price=Price
+priority=Priority
+process_id=Process identifier
+process_instance_id=Process instance identifier
+process_session_id=Process session identifier
+quantity=Quantity
+register=Register
+relation_type=Relation type
+serial=Serial
+slip=Slip
+slips=Slips
+state_province=State province
+status=Status
+streetname=Streetname
+string=String
+subject=Subject
+task_id=Task identifier
+test=Test
+to_cycle1=To cycle1
+to_cycle2=To cycle2
+total=Total
+total_children=Total children
+uuid=Uuid
+when=When
+work_address=Work address
+yearly_income=Yearly income
diff --git a/org.eclipse.osbp.runtime.tests/i18n/I18N_de_AT.properties b/org.eclipse.osbp.runtime.tests/i18n/I18N_de_AT.properties
new file mode 100644
index 0000000..6c73e1d
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/i18n/I18N_de_AT.properties
@@ -0,0 +1 @@
+#de_AT
diff --git a/org.eclipse.osbp.runtime.tests/i18n/I18N_en.properties b/org.eclipse.osbp.runtime.tests/i18n/I18N_en.properties
new file mode 100644
index 0000000..2d6e363
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/i18n/I18N_en.properties
@@ -0,0 +1,117 @@
+#en
+account_num=Account number
+activation_time=Activation time
+actual_owner=Actual owner
+addon=Addon
+addons=Addons
+address=Address
+address1=Address1
+address2=Address2
+address3=Address3
+address4=Address4
+amount=Amount
+beanx=Beanx
+birthdate=Birthdate
+car=Car
+cash_payment=Cash payment
+cash_payment_method=Cash payment method
+cash_position=Cash position
+cash_register=Cash register
+cash_slip=Cash slip
+cashier=Cashier
+city=City
+companies=Companies
+company=Company
+company_group=Company group
+company_relation_type=Company relation type
+container=Container
+containment_childs=Containment childs
+country=Country
+created_by=Created by
+created_on=Created on
+credit=Credit
+cross_ref_child=Cross reference child
+cross_ref_childs=Cross reference childs
+current_day=Current day
+customer=Customer
+cycles1=Cycles1
+cycles2=Cycles2
+date_accnt_opened=Date account opened
+default_yearly_income=Default yearly income
+department=Department
+departments=Departments
+description=Description
+dto_test_bean=Dto test bean
+dto_test_child_containment=Dto test child containment
+dto_test_child_cross_ref=Dto test child cross reference
+dto_test_parent=Dto test parent
+education=Education
+email=Email
+expiration_time=Expiration time
+finishing_date=Finishing date
+firstname=Firstname
+fname=Fname
+foo=Foo
+fullname=Fullname
+gender=Gender
+home_address=Home address
+houseowner=Houseowner
+id=Identifier
+image_name=Image name
+ip=Ip
+landline=Landline
+lastname=Lastname
+lname=Lname
+location=Location
+lower_limit=Lower limit
+main_company=Main company
+marital_status=Marital status
+mcustomer=Mcustomer
+member_card=Member card
+method_of_payment=Method of payment
+mi=Mi
+mobile=Mobile
+name=Name
+now=Now
+num=Number
+num_cars_owned=Number cars owned
+num_children_at_home=Number children at home
+number=Number
+occupation=Occupation
+owner=Owner
+owns_cars=Owns cars
+parent=Parent
+payed=Payed
+payments=Payments
+person=Person
+phone1=Phone1
+phone2=Phone2
+positions=Positions
+postal_code=Postal code
+postalcode=Postalcode
+price=Price
+priority=Priority
+process_id=Process identifier
+process_instance_id=Process instance identifier
+process_session_id=Process session identifier
+quantity=Quantity
+register=Register
+relation_type=Relation type
+serial=Serial
+slip=Slip
+slips=Slips
+state_province=State province
+status=Status
+streetname=Streetname
+string=String
+subject=Subject
+task_id=Task identifier
+test=Test
+to_cycle1=To cycle1
+to_cycle2=To cycle2
+total=Total
+total_children=Total children
+uuid=Uuid
+when=When
+work_address=Work address
+yearly_income=Yearly income
diff --git a/org.eclipse.osbp.runtime.tests/i18n/I18N_en_US.properties b/org.eclipse.osbp.runtime.tests/i18n/I18N_en_US.properties
new file mode 100644
index 0000000..d89e21c
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/i18n/I18N_en_US.properties
@@ -0,0 +1 @@
+#en_US
diff --git a/org.eclipse.osbp.runtime.tests/i18n/I18N_fr.properties b/org.eclipse.osbp.runtime.tests/i18n/I18N_fr.properties
new file mode 100644
index 0000000..a84da83
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/i18n/I18N_fr.properties
@@ -0,0 +1 @@
+#fr
diff --git a/org.eclipse.osbp.runtime.tests/models/mysmartshop.datatype b/org.eclipse.osbp.runtime.tests/models/mysmartshop.datatype
new file mode 100644
index 0000000..1ef90d2
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/models/mysmartshop.datatype
@@ -0,0 +1,162 @@
+/******************************************************************
+ * *
+ * Copyright (C) - Loetz GmbH&Co.KG, 69115 Heidelberg, Germany
+ * *
+ * This source was created by OSBP Softwarefactory Wizard! *
+ * *
+ * OSBP is (C) - Loetz GmbH&Co.KG, 69115 Heidelberg, Germany *
+ * *
+ *================================================================*
+ * *
+ * @file $HeadURL$
+ * @version $Revision$
+ * @date $Date$
+ * @author $Author$
+ * *
+ ******************************************************************/
+
+/**
+ * Copyright (c) 2011, 2014 - Lunifera GmbH (Gross Enzersdorf), Loetz GmbH&Co.KG (Heidelberg)
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Florian Pirchner - Initial implementation
+ */
+
+package org.osbp.mysmartshop.datatypes {
+
+ datatype Timestamp dateType timestamp
+ datatype PaymentMethod jvmType String
+ datatype boolean jvmType java.lang.Boolean as primitive;
+ datatype short jvmType java.lang.Short as primitive;
+ datatype int jvmType java.lang.Integer as primitive;
+ datatype long jvmType java.lang.Long as primitive;
+ datatype double jvmType java.lang.Double as primitive;
+ datatype float jvmType java.lang.Float as primitive;
+ datatype character jvmType java.lang.Character as primitive;
+ datatype byte jvmType java.lang.Byte as primitive;
+
+ datatype Boolean jvmType java.lang.Boolean;
+ datatype Short jvmType java.lang.Short;
+ datatype Int jvmType java.lang.Integer;
+ datatype Long jvmType java.lang.Long;
+ datatype Double jvmType java.lang.Double;
+ datatype Float jvmType java.lang.Float;
+ datatype Character jvmType java.lang.Character;
+ datatype Byte jvmType java.lang.Byte;
+ datatype BigDecimal jvmType java.math.BigDecimal;
+
+ datatype String jvmType java.lang.String;
+ datatype BlobMapping jvmType java.lang.String
+ properties (
+ key="Blob" value="2"
+ /**
+ * value="0" name="unnormalized" resolution="unknown"
+ * value="1" name="small" resolution="16x16"
+ * value="2" name="mid" resolution="64x64"
+ * value="3" name="portrait" resolution="64x128"
+ * value="4" name="landscape" resolution="128x64"
+ * value="5" name="big" resolution="200x-1"
+ *
+ */
+ );
+
+ datatype notnullString jvmType String isNotNull [severity=error]
+ datatype Date dateType date;
+ datatype Price jvmType Double properties(key="decimalformat" value="###,##0.00 ¤");
+ datatype DateOnly dateType date properties(key = "Date" value = "Day");
+ datatype BirthDate dateType date isNotNull isPast [severity=error] properties(key = "Date" value = "Day");
+ datatype Time dateType time;
+ datatype blobtype as blob;
+ datatype clobtype as blob;
+ datatype NumberToUomo jvmType java.lang.Double;
+ datatype TextArea jvmType java.lang.String properties(key = "TextArea" value = "5"); // used for TextArea
+
+ /**
+ * The RichText_Short datatype represents the attribute as a RichTextArea.
+ * The max length of the input depends on the underlying database.
+ * If you need to hold bigger data, then use the #RichText_Long.
+ */
+ datatype RichText_Short jvmType String
+ properties(key = "type" value = "richTextArea");
+ /**
+ * The RichText datatype represents the attribute as a RichTextArea.
+ * The type in the data model will be a Blob.
+ */
+ datatype RichText_Long as blob
+ properties(key = "type" value = "richTextArea");
+ /**
+ * The Password datatype represents the attribute as a PasswordField.
+ * The type in the data model will be a String.
+ */
+ datatype Password jvmType String
+ properties(key = "type" value = "password");
+
+ /**
+ * The MaskedText datatype represents the attribute as a MaskedTextField.
+ * The type in the data model will be a String.<br>
+ * If you are using this datatype, then you need to add a map property to the entity / dto attiribute.<br>
+ * Eg: <br>
+ * <code>var MaskedText text properties (key="mask" value="UUU-###")</code>
+ */
+ datatype MaskedText jvmType String
+ properties(key = "type" value = "maskedText");
+
+ /**
+ * The MaskedDecimal datatype represents the attribute as a MaskedDecimalField.
+ * The type in the data model will be a Number.<br>
+ * If you are using this datatype, then you need to add a map property to the entity / dto attiribute.<br>
+ * Eg: <br>
+ * <code>var MaskedDecimal dec properties (key="mask" value="#,#00.000")</code>
+ */
+ datatype MaskedText jvmType String
+ properties(key = "type" value = "maskedDecimal");
+
+ /**
+ * The MaskedText datatype represents the attribute as a MaskedTextField.
+ * The type in the data model will be a String.
+ */
+ datatype MaskedDecimal jvmType String
+ properties(key = "type" value = "maskedDecimal");
+
+ datatype PriceCustomDecimal jvmType java.lang.Double as primitive
+ properties (
+ key="functionCss" value="org.osbp.mysmartshop.functionlibrary.CssStyler.priceEndCss99",
+ key="functionConverter" value="org.osbp.mysmartshop.functionlibrary.Formatter.currencyFormatter"
+ );
+
+ datatype LengthCustomDecimal jvmType java.lang.Double as primitive
+ properties (
+ key="functionCss" value="org.osbp.mysmartshop.functionlibrary.CssStyler.priceEndCss95",
+ key="functionConverter" value="org.osbp.mysmartshop.functionlibrary.UomoConverter"
+ );
+
+ datatype LengthMetricCustomDecimal jvmType java.lang.Double as primitive
+ properties (
+ key="functionCss" value="org.osbp.mysmartshop.functionlibrary.CssStyler.priceEndCss95",
+ key="functionConverter" value="org.osbp.mysmartshop.functionlibrary.UomoCMConverter"
+ );
+
+ datatype LengthCMMetricCustomDecimal jvmType java.lang.Double as primitive
+ properties (
+ key="functionConverter" value="org.osbp.mysmartshop.functionlibrary.UomoCMMetricConverter"
+ );
+
+ datatype MassGRAMMetricCustomDecimal jvmType java.lang.Double as primitive
+ properties (
+ key="functionConverter" value="org.osbp.mysmartshop.functionlibrary.UomoGRAMMetricConverter"
+ );
+
+// // UOMo data types, which are available through de.compex.utils.uomo
+// datatype Length jvmType org.eclipse.uomo.units.impl.BaseAmount<org.unitsofmeasurement.quantity.Length>;
+// datatype Area jvmType org.eclipse.uomo.units.impl.BaseAmount<org.unitsofmeasurement.quantity.Area>;
+// datatype Volume jvmType org.eclipse.uomo.units.impl.BaseAmount<org.unitsofmeasurement.quantity.Volume>;
+// datatype Mass jvmType org.eclipse.uomo.units.impl.BaseAmount<org.unitsofmeasurement.quantity.Mass>;
+// // joda money types
+// datatype Money jvmType org.joda.money.Money;
+// datatype BigMoney jvmType org.joda.money.BigMoney;
+
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.runtime.tests/models/mysmartshop.dto b/org.eclipse.osbp.runtime.tests/models/mysmartshop.dto
new file mode 100644
index 0000000..4a26227
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/models/mysmartshop.dto
@@ -0,0 +1,186 @@
+import ns org.osbp.tests.entities.BaseID
+import ns org.osbp.tests.entities.BaseUUID
+import ns org.osbp.tests.entities.DtoTestParent
+import ns org.osbp.tests.entities.DtoTestChildContainment
+import ns org.osbp.tests.entities.DtoTestChildCrossRef
+import ns org.osbp.tests.entities.DtoTestBean
+import ns org.osbp.tests.entities.Mcustomer
+import ns org.osbp.tests.entities.CashRegister
+import ns org.osbp.tests.entities.CashSlip
+import ns org.osbp.tests.entities.CashPosition
+import ns org.osbp.tests.entities.CashPayment
+import ns org.osbp.tests.entities.CashPaymentMethod
+import ns org.osbp.tests.entities.CompanyRelationType
+import ns org.osbp.tests.entities.CompanyGroup
+import ns org.osbp.tests.entities.Company
+import ns org.osbp.tests.entities.Address
+import ns org.osbp.tests.entities.Department
+package org.osbp.tests.dtos {
+ autoDto BaseIDDto wraps BaseID {
+
+ inherit var ^id
+ }
+
+ autoDto BaseUUIDDto wraps BaseUUID {
+
+ inherit var ^id
+ }
+
+ autoDto DtoTestParentDto extends BaseUUIDDto wraps DtoTestParent {
+
+ inherit var string
+ inherit ref containmentChilds mapto DtoTestChildContainmentDto
+ inherit ref crossRefChilds mapto DtoTestChildCrossRefDto
+ inherit ref crossRefChild mapto DtoTestChildCrossRefDto
+ inherit var beanx mapto DtoTestBeanDto
+ }
+
+ autoDto DtoTestChildContainmentDto extends BaseUUIDDto wraps DtoTestChildContainment {
+
+ inherit ref container mapto DtoTestParentDto
+ }
+
+ autoDto DtoTestChildCrossRefDto extends BaseUUIDDto wraps DtoTestChildCrossRef {
+
+ inherit ref container mapto DtoTestParentDto
+ }
+
+ autoDto DtoTestBeanDto wraps DtoTestBean {
+
+ inherit var foo
+ inherit ref crossRefChild mapto DtoTestChildCrossRefDto
+ }
+
+ autoDto McustomerDto extends BaseIDDto wraps Mcustomer {
+
+ inherit var account_num
+ inherit var lname
+ inherit var fname
+ inherit var mi
+ inherit var address1
+ inherit var address2
+ inherit var address3
+ inherit var address4
+ inherit var city
+ inherit var state_province
+ inherit var postal_code
+ inherit var country
+ inherit var phone1
+ inherit var phone2
+ inherit var birthdate
+ inherit var marital_status
+ inherit var yearly_income
+ inherit var gender
+ inherit var total_children
+ inherit var num_children_at_home
+ inherit var education
+ inherit var date_accnt_opened
+ inherit var member_card
+ inherit var occupation
+ inherit var houseowner
+ inherit var num_cars_owned
+ inherit var fullname
+ inherit var test
+ inherit ref slips mapto CashSlipDto
+ inherit var foo
+ }
+
+ autoDto CashRegisterDto extends BaseUUIDDto wraps CashRegister {
+
+ inherit var num
+ inherit var ip
+ inherit var location
+ inherit var currentDay
+ inherit ref slips mapto CashSlipDto
+ }
+
+ autoDto CashSlipDto extends BaseUUIDDto wraps CashSlip {
+
+ inherit var currentDay
+ inherit var now
+ inherit var cashier
+ inherit var total
+ inherit var serial
+ inherit var payed
+ inherit ref positions mapto CashPositionDto
+ inherit ref customer mapto McustomerDto
+ inherit ref register mapto CashRegisterDto
+ inherit ref payments mapto CashPaymentDto
+ }
+
+ autoDto CashPositionDto extends BaseUUIDDto wraps CashPosition {
+
+ inherit var now
+ inherit var quantity
+ inherit var price
+ inherit var amount
+ inherit ref slip mapto CashSlipDto
+ }
+
+ autoDto CashPaymentDto extends BaseUUIDDto wraps CashPayment {
+
+ inherit var now
+ inherit var payed
+ inherit ref slip mapto CashSlipDto
+ inherit ref methodOfPayment mapto CashPaymentMethodDto
+ }
+
+ autoDto CashPaymentMethodDto extends BaseUUIDDto wraps CashPaymentMethod {
+
+ inherit var num
+ inherit var name
+ inherit var credit
+ inherit var imageName
+ inherit var lowerLimit
+ inherit ref payments mapto CashPaymentDto
+ }
+
+ autoDto CompanyRelationTypeDto extends BaseUUIDDto wraps CompanyRelationType {
+
+ inherit var name
+ inherit var description
+ }
+
+ autoDto CompanyGroupDto extends BaseUUIDDto wraps CompanyGroup {
+
+ inherit var name
+ inherit var description
+ inherit ref main_company mapto CompanyDto
+ inherit ref companies mapto CompanyDto
+ }
+
+ autoDto CompanyDto extends BaseUUIDDto wraps Company {
+
+ inherit ref company_group mapto CompanyGroupDto
+ inherit var name
+ inherit var description
+ inherit ref relation_type mapto CompanyRelationTypeDto
+ inherit ref address mapto AddressDto
+ inherit ref departments mapto DepartmentDto
+ }
+
+ autoDto AddressDto extends BaseUUIDDto wraps Address {
+
+ inherit ref company mapto CompanyDto
+ inherit ref department mapto DepartmentDto
+ inherit var address1
+ inherit var address2
+ inherit var city
+ inherit var state_province
+ inherit var postal_code
+ inherit var country
+ inherit var email
+ inherit var landline
+ inherit var mobile
+ }
+
+ autoDto DepartmentDto extends BaseUUIDDto wraps Department {
+
+ inherit ref company mapto CompanyDto
+ inherit var name
+ inherit var description
+ inherit ref address mapto AddressDto
+ inherit var default_yearly_income
+ }
+
+ }
\ No newline at end of file
diff --git a/org.eclipse.osbp.runtime.tests/models/mysmartshop.entity b/org.eclipse.osbp.runtime.tests/models/mysmartshop.entity
new file mode 100644
index 0000000..f197dc7
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/models/mysmartshop.entity
@@ -0,0 +1,257 @@
+import java.text.DateFormat
+import java.text.SimpleDateFormat
+import javax.persistence.GeneratedValue
+import ns org.osbp.mysmartshop.datatypes.Boolean
+import ns org.osbp.mysmartshop.datatypes.Date
+import ns org.osbp.mysmartshop.datatypes.PaymentMethod
+import ns org.osbp.mysmartshop.datatypes.Price
+import ns org.osbp.mysmartshop.datatypes.String
+import ns org.osbp.mysmartshop.datatypes.Timestamp
+import ns org.osbp.mysmartshop.datatypes.boolean
+import ns org.osbp.mysmartshop.datatypes.double
+import ns org.osbp.mysmartshop.datatypes.int
+import ns org.osbp.mysmartshop.datatypes.long
+
+/******************************************************************
+ * *
+ * Copyright (C) - Loetz GmbH&Co.KG, 69115 Heidelberg, Germany
+ * *
+ * This source was created by OSBP Softwarefactory Wizard! *
+ * *
+ * OSBP is (C) - Loetz GmbH&Co.KG, 69115 Heidelberg, Germany *
+ * *
+ *================================================================*
+ * *
+ * @file $HeadURL$
+ * @version $Revision$
+ * @date $Date$
+ * @author $Author$
+ * *
+ ******************************************************************/
+package org.osbp.tests.entities {
+
+ mapped superclass BaseID {
+ id int id;
+ }
+
+ mapped superclass BaseUUID {
+ uuid String id;
+ }
+
+ entity DtoTestParent extends BaseUUID {
+
+ var String string;
+
+ ref cascade DtoTestChildContainment [*] containmentChilds opposite container
+
+ ref DtoTestChildCrossRef [*] crossRefChilds opposite container
+ ref DtoTestChildCrossRef crossRefChild
+
+ var DtoTestBean beanx;
+ }
+
+ entity DtoTestChildContainment extends BaseUUID {
+ ref DtoTestParent container opposite containmentChilds
+ }
+
+ entity DtoTestChildCrossRef extends BaseUUID {
+ ref DtoTestParent container opposite crossRefChilds
+ }
+
+ bean DtoTestBean {
+ var String foo;
+ ref DtoTestChildCrossRef crossRefChild;
+ }
+
+ entity Mcustomer extends BaseID {
+ var long account_num
+ var String lname
+ var String fname
+ var String mi
+ var String address1
+ var String address2
+ var String address3
+ var String address4
+ var String city
+ var String state_province
+ var String postal_code
+ var String country
+ var String phone1
+ var String phone2
+ var Date birthdate
+ var String marital_status
+ var String yearly_income
+ var String gender
+ var int total_children
+ var int num_children_at_home
+ var String education
+ var String date_accnt_opened
+ var String member_card
+ var String occupation
+ var String houseowner
+ var int num_cars_owned
+ domainKey String fullname
+ var String test
+ ref CashSlip [*] slips opposite customer
+
+ derived String foo {
+ return country + "_" + city
+ }
+ }
+
+ cacheable entity CashRegister extends BaseUUID {
+ domainKey String num
+ var String ip
+ var String location
+ var String currentDay
+ ref CashSlip [*] slips opposite register
+
+ unique index cashIpIndex {
+ ip
+ }
+
+ unique index cashNumIndex {
+ num
+ }
+
+ }
+
+ entity CashSlip extends BaseUUID {
+ var String currentDay
+ var Timestamp now
+ var String cashier
+ var Price total
+ @javax.persistence.GeneratedValue
+ var long serial
+ var boolean payed
+ ref cascade CashPosition [*] positions opposite slip
+ ref Mcustomer customer opposite slips
+ ref CashRegister register opposite slips
+ ref cascade CashPayment [*] payments opposite slip
+ def String when() {
+ if(now !== null)
+ {
+ return java.text.SimpleDateFormat.getDateInstance(java.text.DateFormat.SHORT).format(now)
+ } return ""
+ }
+
+ index currentDay_index {
+ currentDay
+ }
+
+ index serial_index {
+ currentDay , serial
+ }
+
+ }
+
+ entity CashPosition extends BaseUUID {
+ var Timestamp now
+ var double quantity
+ var Price price
+ var Price amount
+ ref CashSlip slip opposite positions
+ }
+
+ entity CashPayment extends BaseUUID {
+ var Timestamp now
+ var Price payed
+ ref CashSlip slip opposite payments
+ ref CashPaymentMethod methodOfPayment opposite payments
+ }
+
+ entity CashPaymentMethod extends BaseUUID {
+ domainKey String num
+ domainDescription String name
+ var Boolean credit
+ var PaymentMethod imageName
+ var double lowerLimit
+ ref CashPayment [*] payments opposite methodOfPayment
+
+ unique index paymentNumIndex {
+ num
+ }
+
+ }
+
+ /** relation of the company to the owner - not the user - of this personal information manager */
+ entity CompanyRelationType extends BaseUUID {
+ /** short name for this relation type */
+ domainKey String name;
+ /** more detailed description */
+ var String description;
+ }
+
+ /** a company group consisting of a group of companies, from one is defined as the main company */
+ entity CompanyGroup extends BaseUUID {
+ /** name of the company group */
+ domainKey String name;
+ /** more detailed description with usable information for the PIM owner */
+ var String description;
+ /** the main company */
+ ref Company main_company;
+ /** group of companies */
+ ref Company [*] companies opposite company_group;
+ }
+
+ /** a company */
+ entity Company extends BaseUUID {
+ /** the company group if any */
+ ref CompanyGroup company_group opposite companies;
+ /** name of the company */
+ domainKey String name;
+ /** more detailed description with usable information for the PIM owner */
+ var String description;
+ /** relation of the company to the PIM owner */
+ ref CompanyRelationType relation_type;
+ /** any number of addresses */
+ ref cascade Address [*] address opposite company;
+ /** departments of this company */
+ ref cascade Department [*] departments opposite company;
+ }
+
+ /** an address */
+ entity Address extends BaseUUID {
+ /** if address for a company, the company is given */
+ ref Company company opposite address;
+ /** if address for a department, the address is given */
+ ref Department department opposite address;
+ /** if address for a person, the person is given */
+ // ref cascade PostalAddress[*] postal_adresses opposite address;
+ /** address field 1 */
+ var String address1;
+ /** address field 2 */
+ var String address2;
+ /** city */
+ var String city;
+ /** state province */
+ var String state_province;
+ /** postal code */
+ var String postal_code;
+ /** country */
+ var String country;
+ // ref cascade Email[*] emails opposite address;
+ /** email */
+ var String email;
+ // ref cascade Phone[*] phones opposite address;
+ /** landline (Festnetznummer) */
+ var String landline;
+ /** mobile */
+ var String mobile;
+ }
+
+ /** a companies department */
+ entity Department extends BaseUUID {
+ /** the company */
+ ref Company company opposite departments;
+ /** name of the department */
+ domainKey String name;
+ /** more detailed description with usable information for the PIM owner */
+ var String description;
+ /** any number of addresses */
+ ref cascade Address [*] address opposite department;
+ /** any number of employees */
+ var double default_yearly_income;
+ }
+
+ }
\ No newline at end of file
diff --git a/org.eclipse.osbp.runtime.tests/models/mysmartshop.service b/org.eclipse.osbp.runtime.tests/models/mysmartshop.service
new file mode 100644
index 0000000..8e97139
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/models/mysmartshop.service
@@ -0,0 +1,34 @@
+import ns org.osbp.tests.dtos.BaseIDDto
+import ns org.osbp.tests.dtos.BaseUUIDDto
+import ns org.osbp.tests.dtos.DtoTestParentDto
+import ns org.osbp.tests.dtos.DtoTestChildContainmentDto
+import ns org.osbp.tests.dtos.DtoTestChildCrossRefDto
+import ns org.osbp.tests.dtos.McustomerDto
+import ns org.osbp.tests.dtos.CashRegisterDto
+import ns org.osbp.tests.dtos.CashSlipDto
+import ns org.osbp.tests.dtos.CashPositionDto
+import ns org.osbp.tests.dtos.CashPaymentDto
+import ns org.osbp.tests.dtos.CashPaymentMethodDto
+import ns org.osbp.tests.dtos.CompanyRelationTypeDto
+import ns org.osbp.tests.dtos.CompanyGroupDto
+import ns org.osbp.tests.dtos.CompanyDto
+import ns org.osbp.tests.dtos.AddressDto
+import ns org.osbp.tests.dtos.DepartmentDto
+package org.osbp.tests.dtos.service {
+ dtoservice BaseIDDtoService provides BaseIDDto {
+ } dtoservice BaseUUIDDtoService provides BaseUUIDDto {
+ } dtoservice DtoTestParentDtoService provides DtoTestParentDto {
+ } dtoservice DtoTestChildContainmentDtoService provides DtoTestChildContainmentDto {
+ } dtoservice DtoTestChildCrossRefDtoService provides DtoTestChildCrossRefDto {
+ } dtoservice McustomerDtoService provides McustomerDto {
+ } dtoservice CashRegisterDtoService provides CashRegisterDto {
+ } dtoservice CashSlipDtoService provides CashSlipDto {
+ } dtoservice CashPositionDtoService provides CashPositionDto {
+ } dtoservice CashPaymentDtoService provides CashPaymentDto {
+ } dtoservice CashPaymentMethodDtoService provides CashPaymentMethodDto {
+ } dtoservice CompanyRelationTypeDtoService provides CompanyRelationTypeDto {
+ } dtoservice CompanyGroupDtoService provides CompanyGroupDto {
+ } dtoservice CompanyDtoService provides CompanyDto {
+ } dtoservice AddressDtoService provides AddressDto {
+ } dtoservice DepartmentDtoService provides DepartmentDto {
+ } }
\ No newline at end of file
diff --git a/org.eclipse.osbp.runtime.tests/plugin.properties b/org.eclipse.osbp.runtime.tests/plugin.properties
new file mode 100644
index 0000000..24680b9
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/plugin.properties
@@ -0,0 +1,4 @@
+#
+
+pluginName = Model Model
+providerName = www.example.org
diff --git a/org.eclipse.osbp.runtime.tests/plugin.xml b/org.eclipse.osbp.runtime.tests/plugin.xml
new file mode 100644
index 0000000..36f8abb
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/plugin.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+-->
+
+<plugin>
+
+ <extension point="org.eclipse.emf.ecore.generated_package">
+ <!-- @generated model -->
+ <package
+ uri="http://www.osbp.org/vaadin/presentation/tests"
+ class="org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests.emf.model.ModelPackage"
+ genModel="emfmodel/model.genmodel"/>
+ </extension>
+
+</plugin>
diff --git a/org.eclipse.osbp.runtime.tests/pom.xml b/org.eclipse.osbp.runtime.tests/pom.xml
new file mode 100644
index 0000000..db127a4
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/pom.xml
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--#======================================================================= -->
+<!--# Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany). -->
+<!--# All rights reserved. This program and the accompanying materials -->
+<!--# are made available under the terms of the Eclipse Public License v1.0 -->
+<!--# which accompanies this distribution, and is available at -->
+<!--# http://www.eclipse.org/legal/epl-v10.html -->
+<!--# -->
+<!--# Contributors: -->
+<!--# Florian Pirchner - initial API and implementation -->
+<!--#======================================================================= -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.eclipse.osbp.runtime.web</groupId>
+ <artifactId>org.eclipse.osbp.runtime.web.aggregator</artifactId>
+ <version>0.9.0-SNAPSHOT</version>
+ <relativePath>..</relativePath>
+ </parent>
+ <artifactId>org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests</artifactId>
+ <packaging>eclipse-test-plugin</packaging>
+
+ <reporting>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <configuration>
+ <skip>true</skip>
+ </configuration>
+ </plugin>
+ </plugins>
+ </reporting>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <configuration>
+ <skip>true</skip>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-surefire-plugin</artifactId>
+ <configuration>
+ <includes>
+ <include>**/*Test.class</include>
+ <include>**/*Tests.class</include>
+ </includes>
+ <failIfNoTests>false</failIfNoTests>
+ <showEclipseLog>true</showEclipseLog>
+ <!-- <argLine>${ui.test.vmargs}</argLine> -->
+ <bundleStartLevel>
+ <bundle>
+ <id>org.eclipse.osgi</id>
+ <level>-1</level>
+ <autoStart>true</autoStart>
+ </bundle>
+ <bundle>
+ <id>org.eclipse.equinox.common</id>
+ <level>1</level>
+ <autoStart>true</autoStart>
+ </bundle>
+ <bundle>
+ <id>org.eclipse.equinox.ds</id>
+ <level>2</level>
+ <autoStart>true</autoStart>
+ </bundle>
+ <bundle>
+ <id>org.eclipse.equinox.log</id>
+ <level>1</level>
+ <autoStart>true</autoStart>
+ </bundle>
+ <bundle>
+ <id>org.eclipse.osgi.services</id>
+ <level>1</level>
+ <autoStart>true</autoStart>
+ </bundle>
+ <bundle>
+ <id>org.eclipse.osbp.ecview.core.common.editparts.emf</id>
+ <level>4</level>
+ <autoStart>true</autoStart>
+ </bundle>
+ <bundle>
+ <id>org.eclipse.osbp.ecview.core.extension.editparts.emf</id>
+ <level>4</level>
+ <autoStart>true</autoStart>
+ </bundle>
+ <bundle>
+ <id>org.eclipse.osbp.runtime.web.ecview.presentation.vaadin</id>
+ <level>4</level>
+ <autoStart>true</autoStart>
+ </bundle>
+ <bundle>
+ <id>org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests</id>
+ <level>4</level>
+ <autoStart>true</autoStart>
+ </bundle>
+ </bundleStartLevel>
+
+ <dependencies>
+ <!-- Plugins -->
+ <dependency>
+ <type>eclipse-plugin</type>
+ <artifactId>org.eclipse.equinox.ds</artifactId>
+ <version>0.0.0</version>
+ </dependency>
+ <dependency>
+ <type>eclipse-plugin</type>
+ <artifactId>org.eclipse.equinox.util</artifactId>
+ <version>0.0.0</version>
+ </dependency>
+ </dependencies>
+
+ <useUIHarness>false</useUIHarness>
+ <useUIThread>false</useUIThread>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+ <properties>
+ <osbp.skip.javadoc>true</osbp.skip.javadoc>
+ </properties>
+</project>
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/AddressDto.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/AddressDto.java
new file mode 100644
index 0000000..ec42bee
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/AddressDto.java
@@ -0,0 +1,322 @@
+package org.osbp.tests.dtos;
+
+import java.beans.PropertyChangeListener;
+import java.io.Serializable;
+import org.eclipse.osbp.dsl.common.datatypes.IDto;
+import org.eclipse.osbp.runtime.common.annotations.Dispose;
+import org.eclipse.osbp.runtime.common.annotations.DomainReference;
+import org.osbp.tests.dtos.BaseUUIDDto;
+import org.osbp.tests.dtos.CompanyDto;
+import org.osbp.tests.dtos.DepartmentDto;
+
+@SuppressWarnings("all")
+public class AddressDto extends BaseUUIDDto implements IDto, Serializable, PropertyChangeListener {
+ @DomainReference
+ private CompanyDto company;
+
+ @DomainReference
+ private DepartmentDto department;
+
+ private String address1;
+
+ private String address2;
+
+ private String city;
+
+ private String state_province;
+
+ private String postal_code;
+
+ private String country;
+
+ private String email;
+
+ private String landline;
+
+ private String mobile;
+
+ public AddressDto() {
+ installLazyCollections();
+ }
+
+ /**
+ * Installs lazy collection resolving for entity {@link Address} to the dto {@link AddressDto}.
+ *
+ */
+ protected void installLazyCollections() {
+ super.installLazyCollections();
+ }
+
+ /**
+ * Checks whether the object is disposed.
+ * @throws RuntimeException if the object is disposed.
+ */
+ private void checkDisposed() {
+ if (isDisposed()) {
+ throw new RuntimeException("Object already disposed: " + this);
+ }
+ }
+
+ /**
+ * Calling dispose will destroy that instance. The internal state will be
+ * set to 'disposed' and methods of that object must not be used anymore.
+ * Each call will result in runtime exceptions.<br/>
+ * If this object keeps composition containments, these will be disposed too.
+ * So the whole composition containment tree will be disposed on calling this method.
+ */
+ @Dispose
+ public void dispose() {
+ if (isDisposed()) {
+ return;
+ }
+ super.dispose();
+ }
+
+ /**
+ * Returns the company property or <code>null</code> if not present.
+ */
+ public CompanyDto getCompany() {
+ return this.company;
+ }
+
+ /**
+ * Sets the <code>company</code> property to this instance.
+ * Since the reference has an opposite reference, the opposite <code>CompanyDto#
+ * address</code> of the <code>company</code> will be handled automatically and no
+ * further coding is required to keep them in sync.<p>
+ * See {@link CompanyDto#setAddress(CompanyDto)
+ *
+ * @param company - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setCompany(final CompanyDto company) {
+ checkDisposed();
+ if (this.company != null) {
+ this.company.internalRemoveFromAddress(this);
+ }
+
+ internalSetCompany(company);
+
+ if (this.company != null) {
+ this.company.internalAddToAddress(this);
+ }
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalSetCompany(final CompanyDto company) {
+ firePropertyChange("company", this.company, this.company = company);
+ }
+
+ /**
+ * Returns the department property or <code>null</code> if not present.
+ */
+ public DepartmentDto getDepartment() {
+ return this.department;
+ }
+
+ /**
+ * Sets the <code>department</code> property to this instance.
+ * Since the reference has an opposite reference, the opposite <code>DepartmentDto#
+ * address</code> of the <code>department</code> will be handled automatically and no
+ * further coding is required to keep them in sync.<p>
+ * See {@link DepartmentDto#setAddress(DepartmentDto)
+ *
+ * @param department - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setDepartment(final DepartmentDto department) {
+ checkDisposed();
+ if (this.department != null) {
+ this.department.internalRemoveFromAddress(this);
+ }
+
+ internalSetDepartment(department);
+
+ if (this.department != null) {
+ this.department.internalAddToAddress(this);
+ }
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalSetDepartment(final DepartmentDto department) {
+ firePropertyChange("department", this.department, this.department = department);
+ }
+
+ /**
+ * Returns the address1 property or <code>null</code> if not present.
+ */
+ public String getAddress1() {
+ return this.address1;
+ }
+
+ /**
+ * Sets the <code>address1</code> property to this instance.
+ *
+ * @param address1 - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setAddress1(final String address1) {
+ firePropertyChange("address1", this.address1, this.address1 = address1 );
+ }
+
+ /**
+ * Returns the address2 property or <code>null</code> if not present.
+ */
+ public String getAddress2() {
+ return this.address2;
+ }
+
+ /**
+ * Sets the <code>address2</code> property to this instance.
+ *
+ * @param address2 - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setAddress2(final String address2) {
+ firePropertyChange("address2", this.address2, this.address2 = address2 );
+ }
+
+ /**
+ * Returns the city property or <code>null</code> if not present.
+ */
+ public String getCity() {
+ return this.city;
+ }
+
+ /**
+ * Sets the <code>city</code> property to this instance.
+ *
+ * @param city - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setCity(final String city) {
+ firePropertyChange("city", this.city, this.city = city );
+ }
+
+ /**
+ * Returns the state_province property or <code>null</code> if not present.
+ */
+ public String getState_province() {
+ return this.state_province;
+ }
+
+ /**
+ * Sets the <code>state_province</code> property to this instance.
+ *
+ * @param state_province - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setState_province(final String state_province) {
+ firePropertyChange("state_province", this.state_province, this.state_province = state_province );
+ }
+
+ /**
+ * Returns the postal_code property or <code>null</code> if not present.
+ */
+ public String getPostal_code() {
+ return this.postal_code;
+ }
+
+ /**
+ * Sets the <code>postal_code</code> property to this instance.
+ *
+ * @param postal_code - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setPostal_code(final String postal_code) {
+ firePropertyChange("postal_code", this.postal_code, this.postal_code = postal_code );
+ }
+
+ /**
+ * Returns the country property or <code>null</code> if not present.
+ */
+ public String getCountry() {
+ return this.country;
+ }
+
+ /**
+ * Sets the <code>country</code> property to this instance.
+ *
+ * @param country - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setCountry(final String country) {
+ firePropertyChange("country", this.country, this.country = country );
+ }
+
+ /**
+ * Returns the email property or <code>null</code> if not present.
+ */
+ public String getEmail() {
+ return this.email;
+ }
+
+ /**
+ * Sets the <code>email</code> property to this instance.
+ *
+ * @param email - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setEmail(final String email) {
+ firePropertyChange("email", this.email, this.email = email );
+ }
+
+ /**
+ * Returns the landline property or <code>null</code> if not present.
+ */
+ public String getLandline() {
+ return this.landline;
+ }
+
+ /**
+ * Sets the <code>landline</code> property to this instance.
+ *
+ * @param landline - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setLandline(final String landline) {
+ firePropertyChange("landline", this.landline, this.landline = landline );
+ }
+
+ /**
+ * Returns the mobile property or <code>null</code> if not present.
+ */
+ public String getMobile() {
+ return this.mobile;
+ }
+
+ /**
+ * Sets the <code>mobile</code> property to this instance.
+ *
+ * @param mobile - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setMobile(final String mobile) {
+ firePropertyChange("mobile", this.mobile, this.mobile = mobile );
+ }
+
+ public void propertyChange(final java.beans.PropertyChangeEvent event) {
+ Object source = event.getSource();
+
+ // forward the event from embeddable beans to all listeners. So the parent of the embeddable
+ // bean will become notified and its dirty state can be handled properly
+ {
+ super.propertyChange(event);
+ }
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/BaseIDDto.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/BaseIDDto.java
new file mode 100644
index 0000000..579d44c
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/BaseIDDto.java
@@ -0,0 +1,152 @@
+package org.osbp.tests.dtos;
+
+import java.beans.PropertyChangeListener;
+import java.beans.PropertyChangeSupport;
+import java.io.Serializable;
+import org.eclipse.osbp.dsl.common.datatypes.IDto;
+import org.eclipse.osbp.runtime.common.annotations.Dispose;
+import org.eclipse.osbp.runtime.common.annotations.Id;
+
+@SuppressWarnings("all")
+public class BaseIDDto implements IDto, Serializable, PropertyChangeListener {
+ private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this);
+
+ @Dispose
+ private boolean disposed;
+
+ @Id
+ private int id;
+
+ public BaseIDDto() {
+ installLazyCollections();
+ }
+
+ /**
+ * Installs lazy collection resolving for entity {@link BaseID} to the dto {@link BaseIDDto}.
+ *
+ */
+ protected void installLazyCollections() {
+
+ }
+
+ /**
+ * @return true, if the object is disposed.
+ * Disposed means, that it is prepared for garbage collection and may not be used anymore.
+ * Accessing objects that are already disposed will cause runtime exceptions.
+ *
+ */
+ public boolean isDisposed() {
+ return this.disposed;
+ }
+
+ /**
+ * @see PropertyChangeSupport#addPropertyChangeListener(PropertyChangeListener)
+ */
+ public void addPropertyChangeListener(final PropertyChangeListener listener) {
+ propertyChangeSupport.addPropertyChangeListener(listener);
+ }
+
+ /**
+ * @see PropertyChangeSupport#addPropertyChangeListener(String, PropertyChangeListener)
+ */
+ public void addPropertyChangeListener(final String propertyName, final PropertyChangeListener listener) {
+ propertyChangeSupport.addPropertyChangeListener(propertyName, listener);
+ }
+
+ /**
+ * @see PropertyChangeSupport#removePropertyChangeListener(PropertyChangeListener)
+ */
+ public void removePropertyChangeListener(final PropertyChangeListener listener) {
+ propertyChangeSupport.removePropertyChangeListener(listener);
+ }
+
+ /**
+ * @see PropertyChangeSupport#removePropertyChangeListener(String, PropertyChangeListener)
+ */
+ public void removePropertyChangeListener(final String propertyName, final PropertyChangeListener listener) {
+ propertyChangeSupport.removePropertyChangeListener(propertyName, listener);
+ }
+
+ /**
+ * @see PropertyChangeSupport#firePropertyChange(String, Object, Object)
+ */
+ public void firePropertyChange(final String propertyName, final Object oldValue, final Object newValue) {
+ propertyChangeSupport.firePropertyChange(propertyName, oldValue, newValue);
+ }
+
+ /**
+ * Checks whether the object is disposed.
+ * @throws RuntimeException if the object is disposed.
+ */
+ private void checkDisposed() {
+ if (isDisposed()) {
+ throw new RuntimeException("Object already disposed: " + this);
+ }
+ }
+
+ /**
+ * Calling dispose will destroy that instance. The internal state will be
+ * set to 'disposed' and methods of that object must not be used anymore.
+ * Each call will result in runtime exceptions.<br/>
+ * If this object keeps composition containments, these will be disposed too.
+ * So the whole composition containment tree will be disposed on calling this method.
+ */
+ @Dispose
+ public void dispose() {
+ if (isDisposed()) {
+ return;
+ }
+ firePropertyChange("disposed", this.disposed, this.disposed = true);
+ }
+
+ /**
+ * Returns the id property or <code>null</code> if not present.
+ */
+ public int getId() {
+ return this.id;
+ }
+
+ /**
+ * Sets the <code>id</code> property to this instance.
+ *
+ * @param id - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setId(final int id) {
+ firePropertyChange("id", this.id, this.id = id );
+ installLazyCollections();
+ }
+
+ @Override
+ public boolean equals(final Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ BaseIDDto other = (BaseIDDto) obj;
+ if (other.id != this.id)
+ return false;
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int prime = 31;
+ int result = 1;
+ result = prime * result + this.id;
+ return result;
+ }
+
+ public void propertyChange(final java.beans.PropertyChangeEvent event) {
+ Object source = event.getSource();
+
+ // forward the event from embeddable beans to all listeners. So the parent of the embeddable
+ // bean will become notified and its dirty state can be handled properly
+ {
+ // no super class available to forward event
+ }
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/BaseUUIDDto.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/BaseUUIDDto.java
new file mode 100644
index 0000000..6375c28
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/BaseUUIDDto.java
@@ -0,0 +1,155 @@
+package org.osbp.tests.dtos;
+
+import java.beans.PropertyChangeListener;
+import java.beans.PropertyChangeSupport;
+import java.io.Serializable;
+import org.eclipse.osbp.dsl.common.datatypes.IDto;
+import org.eclipse.osbp.runtime.common.annotations.Dispose;
+import org.eclipse.osbp.runtime.common.annotations.Id;
+
+@SuppressWarnings("all")
+public class BaseUUIDDto implements IDto, Serializable, PropertyChangeListener {
+ private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this);
+
+ @Dispose
+ private boolean disposed;
+
+ @Id
+ private String id = java.util.UUID.randomUUID().toString();
+
+ public BaseUUIDDto() {
+ installLazyCollections();
+ }
+
+ /**
+ * Installs lazy collection resolving for entity {@link BaseUUID} to the dto {@link BaseUUIDDto}.
+ *
+ */
+ protected void installLazyCollections() {
+
+ }
+
+ /**
+ * @return true, if the object is disposed.
+ * Disposed means, that it is prepared for garbage collection and may not be used anymore.
+ * Accessing objects that are already disposed will cause runtime exceptions.
+ *
+ */
+ public boolean isDisposed() {
+ return this.disposed;
+ }
+
+ /**
+ * @see PropertyChangeSupport#addPropertyChangeListener(PropertyChangeListener)
+ */
+ public void addPropertyChangeListener(final PropertyChangeListener listener) {
+ propertyChangeSupport.addPropertyChangeListener(listener);
+ }
+
+ /**
+ * @see PropertyChangeSupport#addPropertyChangeListener(String, PropertyChangeListener)
+ */
+ public void addPropertyChangeListener(final String propertyName, final PropertyChangeListener listener) {
+ propertyChangeSupport.addPropertyChangeListener(propertyName, listener);
+ }
+
+ /**
+ * @see PropertyChangeSupport#removePropertyChangeListener(PropertyChangeListener)
+ */
+ public void removePropertyChangeListener(final PropertyChangeListener listener) {
+ propertyChangeSupport.removePropertyChangeListener(listener);
+ }
+
+ /**
+ * @see PropertyChangeSupport#removePropertyChangeListener(String, PropertyChangeListener)
+ */
+ public void removePropertyChangeListener(final String propertyName, final PropertyChangeListener listener) {
+ propertyChangeSupport.removePropertyChangeListener(propertyName, listener);
+ }
+
+ /**
+ * @see PropertyChangeSupport#firePropertyChange(String, Object, Object)
+ */
+ public void firePropertyChange(final String propertyName, final Object oldValue, final Object newValue) {
+ propertyChangeSupport.firePropertyChange(propertyName, oldValue, newValue);
+ }
+
+ /**
+ * Checks whether the object is disposed.
+ * @throws RuntimeException if the object is disposed.
+ */
+ private void checkDisposed() {
+ if (isDisposed()) {
+ throw new RuntimeException("Object already disposed: " + this);
+ }
+ }
+
+ /**
+ * Calling dispose will destroy that instance. The internal state will be
+ * set to 'disposed' and methods of that object must not be used anymore.
+ * Each call will result in runtime exceptions.<br/>
+ * If this object keeps composition containments, these will be disposed too.
+ * So the whole composition containment tree will be disposed on calling this method.
+ */
+ @Dispose
+ public void dispose() {
+ if (isDisposed()) {
+ return;
+ }
+ firePropertyChange("disposed", this.disposed, this.disposed = true);
+ }
+
+ /**
+ * Returns the id property or <code>null</code> if not present.
+ */
+ public String getId() {
+ return this.id;
+ }
+
+ /**
+ * Sets the <code>id</code> property to this instance.
+ *
+ * @param id - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setId(final String id) {
+ firePropertyChange("id", this.id, this.id = id );
+ installLazyCollections();
+ }
+
+ @Override
+ public boolean equals(final Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ BaseUUIDDto other = (BaseUUIDDto) obj;
+ if (this.id == null) {
+ if (other.id != null)
+ return false;
+ } else if (!this.id.equals(other.id))
+ return false;
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int prime = 31;
+ int result = 1;
+ result = prime * result + ((this.id== null) ? 0 : this.id.hashCode());
+ return result;
+ }
+
+ public void propertyChange(final java.beans.PropertyChangeEvent event) {
+ Object source = event.getSource();
+
+ // forward the event from embeddable beans to all listeners. So the parent of the embeddable
+ // bean will become notified and its dirty state can be handled properly
+ {
+ // no super class available to forward event
+ }
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/CashPaymentDto.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/CashPaymentDto.java
new file mode 100644
index 0000000..2034c58
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/CashPaymentDto.java
@@ -0,0 +1,188 @@
+package org.osbp.tests.dtos;
+
+import java.beans.PropertyChangeListener;
+import java.io.Serializable;
+import java.util.Date;
+import javax.validation.Valid;
+import org.eclipse.osbp.dsl.common.datatypes.IDto;
+import org.eclipse.osbp.runtime.common.annotations.Dispose;
+import org.eclipse.osbp.runtime.common.annotations.DomainReference;
+import org.eclipse.osbp.runtime.common.annotations.Properties;
+import org.eclipse.osbp.runtime.common.annotations.Property;
+import org.osbp.tests.dtos.BaseUUIDDto;
+import org.osbp.tests.dtos.CashPaymentMethodDto;
+import org.osbp.tests.dtos.CashSlipDto;
+
+@SuppressWarnings("all")
+public class CashPaymentDto extends BaseUUIDDto implements IDto, Serializable, PropertyChangeListener {
+ @Valid
+ private Date now;
+
+ @Properties(properties = @Property(key = "decimalformat", value = "###,##0.00 ¤"))
+ private Double payed;
+
+ @DomainReference
+ private CashSlipDto slip;
+
+ @DomainReference
+ private CashPaymentMethodDto methodOfPayment;
+
+ public CashPaymentDto() {
+ installLazyCollections();
+ }
+
+ /**
+ * Installs lazy collection resolving for entity {@link CashPayment} to the dto {@link CashPaymentDto}.
+ *
+ */
+ protected void installLazyCollections() {
+ super.installLazyCollections();
+ }
+
+ /**
+ * Checks whether the object is disposed.
+ * @throws RuntimeException if the object is disposed.
+ */
+ private void checkDisposed() {
+ if (isDisposed()) {
+ throw new RuntimeException("Object already disposed: " + this);
+ }
+ }
+
+ /**
+ * Calling dispose will destroy that instance. The internal state will be
+ * set to 'disposed' and methods of that object must not be used anymore.
+ * Each call will result in runtime exceptions.<br/>
+ * If this object keeps composition containments, these will be disposed too.
+ * So the whole composition containment tree will be disposed on calling this method.
+ */
+ @Dispose
+ public void dispose() {
+ if (isDisposed()) {
+ return;
+ }
+ super.dispose();
+ }
+
+ /**
+ * Returns the now property or <code>null</code> if not present.
+ */
+ public Date getNow() {
+ return this.now;
+ }
+
+ /**
+ * Sets the <code>now</code> property to this instance.
+ *
+ * @param now - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setNow(final Date now) {
+ firePropertyChange("now", this.now, this.now = now );
+ }
+
+ /**
+ * Returns the payed property or <code>null</code> if not present.
+ */
+ public Double getPayed() {
+ return this.payed;
+ }
+
+ /**
+ * Sets the <code>payed</code> property to this instance.
+ *
+ * @param payed - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setPayed(final Double payed) {
+ firePropertyChange("payed", this.payed, this.payed = payed );
+ }
+
+ /**
+ * Returns the slip property or <code>null</code> if not present.
+ */
+ public CashSlipDto getSlip() {
+ return this.slip;
+ }
+
+ /**
+ * Sets the <code>slip</code> property to this instance.
+ * Since the reference has an opposite reference, the opposite <code>CashSlipDto#
+ * payments</code> of the <code>slip</code> will be handled automatically and no
+ * further coding is required to keep them in sync.<p>
+ * See {@link CashSlipDto#setPayments(CashSlipDto)
+ *
+ * @param slip - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setSlip(final CashSlipDto slip) {
+ checkDisposed();
+ if (this.slip != null) {
+ this.slip.internalRemoveFromPayments(this);
+ }
+
+ internalSetSlip(slip);
+
+ if (this.slip != null) {
+ this.slip.internalAddToPayments(this);
+ }
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalSetSlip(final CashSlipDto slip) {
+ firePropertyChange("slip", this.slip, this.slip = slip);
+ }
+
+ /**
+ * Returns the methodOfPayment property or <code>null</code> if not present.
+ */
+ public CashPaymentMethodDto getMethodOfPayment() {
+ return this.methodOfPayment;
+ }
+
+ /**
+ * Sets the <code>methodOfPayment</code> property to this instance.
+ * Since the reference has an opposite reference, the opposite <code>CashPaymentMethodDto#
+ * payments</code> of the <code>methodOfPayment</code> will be handled automatically and no
+ * further coding is required to keep them in sync.<p>
+ * See {@link CashPaymentMethodDto#setPayments(CashPaymentMethodDto)
+ *
+ * @param methodOfPayment - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setMethodOfPayment(final CashPaymentMethodDto methodOfPayment) {
+ checkDisposed();
+ if (this.methodOfPayment != null) {
+ this.methodOfPayment.internalRemoveFromPayments(this);
+ }
+
+ internalSetMethodOfPayment(methodOfPayment);
+
+ if (this.methodOfPayment != null) {
+ this.methodOfPayment.internalAddToPayments(this);
+ }
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalSetMethodOfPayment(final CashPaymentMethodDto methodOfPayment) {
+ firePropertyChange("methodOfPayment", this.methodOfPayment, this.methodOfPayment = methodOfPayment);
+ }
+
+ public void propertyChange(final java.beans.PropertyChangeEvent event) {
+ Object source = event.getSource();
+
+ // forward the event from embeddable beans to all listeners. So the parent of the embeddable
+ // bean will become notified and its dirty state can be handled properly
+ {
+ super.propertyChange(event);
+ }
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/CashPaymentMethodDto.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/CashPaymentMethodDto.java
new file mode 100644
index 0000000..6cc6158
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/CashPaymentMethodDto.java
@@ -0,0 +1,279 @@
+package org.osbp.tests.dtos;
+
+import java.beans.PropertyChangeListener;
+import java.io.Serializable;
+import java.util.Collections;
+import java.util.List;
+import org.eclipse.osbp.dsl.common.datatypes.IDto;
+import org.eclipse.osbp.runtime.common.annotations.Dispose;
+import org.eclipse.osbp.runtime.common.annotations.DomainDescription;
+import org.eclipse.osbp.runtime.common.annotations.DomainKey;
+import org.eclipse.osbp.runtime.common.annotations.DomainReference;
+import org.osbp.tests.dtos.BaseUUIDDto;
+import org.osbp.tests.dtos.CashPaymentDto;
+
+@SuppressWarnings("all")
+public class CashPaymentMethodDto extends BaseUUIDDto implements IDto, Serializable, PropertyChangeListener {
+ @DomainKey
+ private String num;
+
+ @DomainDescription
+ private String name;
+
+ private Boolean credit;
+
+ private String imageName;
+
+ private double lowerLimit;
+
+ @DomainReference
+ private List<CashPaymentDto> payments;
+
+ public CashPaymentMethodDto() {
+ installLazyCollections();
+ }
+
+ /**
+ * Installs lazy collection resolving for entity {@link CashPaymentMethod} to the dto {@link CashPaymentMethodDto}.
+ *
+ */
+ protected void installLazyCollections() {
+ super.installLazyCollections();
+ payments = new org.eclipse.osbp.dsl.dto.lib.OppositeDtoList<>(
+ org.eclipse.osbp.dsl.dto.lib.MappingContext.getCurrent(),
+ CashPaymentDto.class, "methodOfPayment.id",
+ (java.util.function.Supplier<Object> & Serializable) () -> this.getId());
+ }
+
+ /**
+ * Checks whether the object is disposed.
+ * @throws RuntimeException if the object is disposed.
+ */
+ private void checkDisposed() {
+ if (isDisposed()) {
+ throw new RuntimeException("Object already disposed: " + this);
+ }
+ }
+
+ /**
+ * Calling dispose will destroy that instance. The internal state will be
+ * set to 'disposed' and methods of that object must not be used anymore.
+ * Each call will result in runtime exceptions.<br/>
+ * If this object keeps composition containments, these will be disposed too.
+ * So the whole composition containment tree will be disposed on calling this method.
+ */
+ @Dispose
+ public void dispose() {
+ if (isDisposed()) {
+ return;
+ }
+ super.dispose();
+ }
+
+ /**
+ * Returns the num property or <code>null</code> if not present.
+ */
+ public String getNum() {
+ return this.num;
+ }
+
+ /**
+ * Sets the <code>num</code> property to this instance.
+ *
+ * @param num - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setNum(final String num) {
+ firePropertyChange("num", this.num, this.num = num );
+ }
+
+ /**
+ * Returns the name property or <code>null</code> if not present.
+ */
+ public String getName() {
+ return this.name;
+ }
+
+ /**
+ * Sets the <code>name</code> property to this instance.
+ *
+ * @param name - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setName(final String name) {
+ firePropertyChange("name", this.name, this.name = name );
+ }
+
+ /**
+ * Returns the credit property or <code>null</code> if not present.
+ */
+ public Boolean getCredit() {
+ return this.credit;
+ }
+
+ /**
+ * Sets the <code>credit</code> property to this instance.
+ *
+ * @param credit - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setCredit(final Boolean credit) {
+ firePropertyChange("credit", this.credit, this.credit = credit );
+ }
+
+ /**
+ * Returns the imageName property or <code>null</code> if not present.
+ */
+ public String getImageName() {
+ return this.imageName;
+ }
+
+ /**
+ * Sets the <code>imageName</code> property to this instance.
+ *
+ * @param imageName - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setImageName(final String imageName) {
+ firePropertyChange("imageName", this.imageName, this.imageName = imageName );
+ }
+
+ /**
+ * Returns the lowerLimit property or <code>null</code> if not present.
+ */
+ public double getLowerLimit() {
+ return this.lowerLimit;
+ }
+
+ /**
+ * Sets the <code>lowerLimit</code> property to this instance.
+ *
+ * @param lowerLimit - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setLowerLimit(final double lowerLimit) {
+ firePropertyChange("lowerLimit", this.lowerLimit, this.lowerLimit = lowerLimit );
+ }
+
+ /**
+ * Returns an unmodifiable list of payments.
+ */
+ public List<CashPaymentDto> getPayments() {
+ return Collections.unmodifiableList(internalGetPayments());
+ }
+
+ /**
+ * Returns the list of <code>CashPaymentDto</code>s thereby lazy initializing it. For internal use only!
+ *
+ * @return list - the resulting list
+ *
+ */
+ public List<CashPaymentDto> internalGetPayments() {
+ if (this.payments == null) {
+ this.payments = new java.util.ArrayList<CashPaymentDto>();
+ }
+ return this.payments;
+ }
+
+ /**
+ * Adds the given cashPaymentDto to this object. <p>
+ * Since the reference is a composition reference, the opposite reference <code>CashPaymentDto#methodOfPayment</code> of the <code>cashPaymentDto</code> will be handled automatically and no further coding is required to keep them in sync.<p>
+ * See {@link CashPaymentDto#setMethodOfPayment(CashPaymentDto)}.
+ *
+ * @param cashPaymentDto - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void addToPayments(final CashPaymentDto cashPaymentDto) {
+ checkDisposed();
+
+ cashPaymentDto.setMethodOfPayment(this);
+ }
+
+ /**
+ * Removes the given cashPaymentDto from this object. <p>
+ *
+ * @param cashPaymentDto - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void removeFromPayments(final CashPaymentDto cashPaymentDto) {
+ checkDisposed();
+
+ cashPaymentDto.setMethodOfPayment(null);
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalAddToPayments(final CashPaymentDto cashPaymentDto) {
+
+ if(!internalGetPayments().contains(cashPaymentDto)) {
+ if(!org.eclipse.osbp.dsl.dto.lib.MappingContext.isMappingMode()) {
+ // collections will become resolved! We need to send a delta notification.
+ List<CashPaymentDto> oldList = new java.util.ArrayList<>(internalGetPayments());
+ internalGetPayments().add(cashPaymentDto);
+ firePropertyChange("payments", oldList, internalGetPayments());
+ } else {
+ // in mapping mode, we do NOT resolve any collection
+ internalGetPayments().add(cashPaymentDto);
+ }
+ }
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalRemoveFromPayments(final CashPaymentDto cashPaymentDto) {
+ if(!org.eclipse.osbp.dsl.dto.lib.MappingContext.isMappingMode()) {
+ // collections will become resolved! We need to send a delta notification.
+ List<CashPaymentDto> oldList = new java.util.ArrayList<>(internalGetPayments());
+ internalGetPayments().remove(cashPaymentDto);
+ firePropertyChange("payments", oldList, internalGetPayments());
+ }else{
+ // in mapping mode, we do NOT resolve any collection
+ internalGetPayments().remove(cashPaymentDto);
+ }
+ }
+
+ /**
+ * Sets the <code>payments</code> property to this instance.
+ * Since the reference has an opposite reference, the opposite <code>CashPaymentDto#
+ * methodOfPayment</code> of the <code>payments</code> will be handled automatically and no
+ * further coding is required to keep them in sync.<p>
+ * See {@link CashPaymentDto#setMethodOfPayment(CashPaymentDto)
+ *
+ * @param payments - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setPayments(final List<CashPaymentDto> payments) {
+ checkDisposed();
+ for (CashPaymentDto dto : internalGetPayments().toArray(new CashPaymentDto[this.payments.size()])) {
+ removeFromPayments(dto);
+ }
+
+ if(payments == null) {
+ return;
+ }
+
+ for (CashPaymentDto dto : payments) {
+ addToPayments(dto);
+ }
+ }
+
+ public void propertyChange(final java.beans.PropertyChangeEvent event) {
+ Object source = event.getSource();
+
+ // forward the event from embeddable beans to all listeners. So the parent of the embeddable
+ // bean will become notified and its dirty state can be handled properly
+ {
+ super.propertyChange(event);
+ }
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/CashPositionDto.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/CashPositionDto.java
new file mode 100644
index 0000000..3ff1e17
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/CashPositionDto.java
@@ -0,0 +1,187 @@
+package org.osbp.tests.dtos;
+
+import java.beans.PropertyChangeListener;
+import java.io.Serializable;
+import java.util.Date;
+import javax.validation.Valid;
+import org.eclipse.osbp.dsl.common.datatypes.IDto;
+import org.eclipse.osbp.runtime.common.annotations.Dispose;
+import org.eclipse.osbp.runtime.common.annotations.DomainReference;
+import org.eclipse.osbp.runtime.common.annotations.Properties;
+import org.eclipse.osbp.runtime.common.annotations.Property;
+import org.osbp.tests.dtos.BaseUUIDDto;
+import org.osbp.tests.dtos.CashSlipDto;
+
+@SuppressWarnings("all")
+public class CashPositionDto extends BaseUUIDDto implements IDto, Serializable, PropertyChangeListener {
+ @Valid
+ private Date now;
+
+ private double quantity;
+
+ @Properties(properties = @Property(key = "decimalformat", value = "###,##0.00 ¤"))
+ private Double price;
+
+ @Properties(properties = @Property(key = "decimalformat", value = "###,##0.00 ¤"))
+ private Double amount;
+
+ @DomainReference
+ private CashSlipDto slip;
+
+ public CashPositionDto() {
+ installLazyCollections();
+ }
+
+ /**
+ * Installs lazy collection resolving for entity {@link CashPosition} to the dto {@link CashPositionDto}.
+ *
+ */
+ protected void installLazyCollections() {
+ super.installLazyCollections();
+ }
+
+ /**
+ * Checks whether the object is disposed.
+ * @throws RuntimeException if the object is disposed.
+ */
+ private void checkDisposed() {
+ if (isDisposed()) {
+ throw new RuntimeException("Object already disposed: " + this);
+ }
+ }
+
+ /**
+ * Calling dispose will destroy that instance. The internal state will be
+ * set to 'disposed' and methods of that object must not be used anymore.
+ * Each call will result in runtime exceptions.<br/>
+ * If this object keeps composition containments, these will be disposed too.
+ * So the whole composition containment tree will be disposed on calling this method.
+ */
+ @Dispose
+ public void dispose() {
+ if (isDisposed()) {
+ return;
+ }
+ super.dispose();
+ }
+
+ /**
+ * Returns the now property or <code>null</code> if not present.
+ */
+ public Date getNow() {
+ return this.now;
+ }
+
+ /**
+ * Sets the <code>now</code> property to this instance.
+ *
+ * @param now - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setNow(final Date now) {
+ firePropertyChange("now", this.now, this.now = now );
+ }
+
+ /**
+ * Returns the quantity property or <code>null</code> if not present.
+ */
+ public double getQuantity() {
+ return this.quantity;
+ }
+
+ /**
+ * Sets the <code>quantity</code> property to this instance.
+ *
+ * @param quantity - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setQuantity(final double quantity) {
+ firePropertyChange("quantity", this.quantity, this.quantity = quantity );
+ }
+
+ /**
+ * Returns the price property or <code>null</code> if not present.
+ */
+ public Double getPrice() {
+ return this.price;
+ }
+
+ /**
+ * Sets the <code>price</code> property to this instance.
+ *
+ * @param price - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setPrice(final Double price) {
+ firePropertyChange("price", this.price, this.price = price );
+ }
+
+ /**
+ * Returns the amount property or <code>null</code> if not present.
+ */
+ public Double getAmount() {
+ return this.amount;
+ }
+
+ /**
+ * Sets the <code>amount</code> property to this instance.
+ *
+ * @param amount - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setAmount(final Double amount) {
+ firePropertyChange("amount", this.amount, this.amount = amount );
+ }
+
+ /**
+ * Returns the slip property or <code>null</code> if not present.
+ */
+ public CashSlipDto getSlip() {
+ return this.slip;
+ }
+
+ /**
+ * Sets the <code>slip</code> property to this instance.
+ * Since the reference has an opposite reference, the opposite <code>CashSlipDto#
+ * positions</code> of the <code>slip</code> will be handled automatically and no
+ * further coding is required to keep them in sync.<p>
+ * See {@link CashSlipDto#setPositions(CashSlipDto)
+ *
+ * @param slip - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setSlip(final CashSlipDto slip) {
+ checkDisposed();
+ if (this.slip != null) {
+ this.slip.internalRemoveFromPositions(this);
+ }
+
+ internalSetSlip(slip);
+
+ if (this.slip != null) {
+ this.slip.internalAddToPositions(this);
+ }
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalSetSlip(final CashSlipDto slip) {
+ firePropertyChange("slip", this.slip, this.slip = slip);
+ }
+
+ public void propertyChange(final java.beans.PropertyChangeEvent event) {
+ Object source = event.getSource();
+
+ // forward the event from embeddable beans to all listeners. So the parent of the embeddable
+ // bean will become notified and its dirty state can be handled properly
+ {
+ super.propertyChange(event);
+ }
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/CashRegisterDto.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/CashRegisterDto.java
new file mode 100644
index 0000000..121c83a
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/CashRegisterDto.java
@@ -0,0 +1,257 @@
+package org.osbp.tests.dtos;
+
+import java.beans.PropertyChangeListener;
+import java.io.Serializable;
+import java.util.Collections;
+import java.util.List;
+import org.eclipse.osbp.dsl.common.datatypes.IDto;
+import org.eclipse.osbp.runtime.common.annotations.Dispose;
+import org.eclipse.osbp.runtime.common.annotations.DomainKey;
+import org.eclipse.osbp.runtime.common.annotations.DomainReference;
+import org.osbp.tests.dtos.BaseUUIDDto;
+import org.osbp.tests.dtos.CashSlipDto;
+
+@SuppressWarnings("all")
+public class CashRegisterDto extends BaseUUIDDto implements IDto, Serializable, PropertyChangeListener {
+ @DomainKey
+ private String num;
+
+ private String ip;
+
+ private String location;
+
+ private String currentDay;
+
+ @DomainReference
+ private List<CashSlipDto> slips;
+
+ public CashRegisterDto() {
+ installLazyCollections();
+ }
+
+ /**
+ * Installs lazy collection resolving for entity {@link CashRegister} to the dto {@link CashRegisterDto}.
+ *
+ */
+ protected void installLazyCollections() {
+ super.installLazyCollections();
+ slips = new org.eclipse.osbp.dsl.dto.lib.OppositeDtoList<>(
+ org.eclipse.osbp.dsl.dto.lib.MappingContext.getCurrent(),
+ CashSlipDto.class, "register.id",
+ (java.util.function.Supplier<Object> & Serializable) () -> this.getId());
+ }
+
+ /**
+ * Checks whether the object is disposed.
+ * @throws RuntimeException if the object is disposed.
+ */
+ private void checkDisposed() {
+ if (isDisposed()) {
+ throw new RuntimeException("Object already disposed: " + this);
+ }
+ }
+
+ /**
+ * Calling dispose will destroy that instance. The internal state will be
+ * set to 'disposed' and methods of that object must not be used anymore.
+ * Each call will result in runtime exceptions.<br/>
+ * If this object keeps composition containments, these will be disposed too.
+ * So the whole composition containment tree will be disposed on calling this method.
+ */
+ @Dispose
+ public void dispose() {
+ if (isDisposed()) {
+ return;
+ }
+ super.dispose();
+ }
+
+ /**
+ * Returns the num property or <code>null</code> if not present.
+ */
+ public String getNum() {
+ return this.num;
+ }
+
+ /**
+ * Sets the <code>num</code> property to this instance.
+ *
+ * @param num - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setNum(final String num) {
+ firePropertyChange("num", this.num, this.num = num );
+ }
+
+ /**
+ * Returns the ip property or <code>null</code> if not present.
+ */
+ public String getIp() {
+ return this.ip;
+ }
+
+ /**
+ * Sets the <code>ip</code> property to this instance.
+ *
+ * @param ip - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setIp(final String ip) {
+ firePropertyChange("ip", this.ip, this.ip = ip );
+ }
+
+ /**
+ * Returns the location property or <code>null</code> if not present.
+ */
+ public String getLocation() {
+ return this.location;
+ }
+
+ /**
+ * Sets the <code>location</code> property to this instance.
+ *
+ * @param location - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setLocation(final String location) {
+ firePropertyChange("location", this.location, this.location = location );
+ }
+
+ /**
+ * Returns the currentDay property or <code>null</code> if not present.
+ */
+ public String getCurrentDay() {
+ return this.currentDay;
+ }
+
+ /**
+ * Sets the <code>currentDay</code> property to this instance.
+ *
+ * @param currentDay - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setCurrentDay(final String currentDay) {
+ firePropertyChange("currentDay", this.currentDay, this.currentDay = currentDay );
+ }
+
+ /**
+ * Returns an unmodifiable list of slips.
+ */
+ public List<CashSlipDto> getSlips() {
+ return Collections.unmodifiableList(internalGetSlips());
+ }
+
+ /**
+ * Returns the list of <code>CashSlipDto</code>s thereby lazy initializing it. For internal use only!
+ *
+ * @return list - the resulting list
+ *
+ */
+ public List<CashSlipDto> internalGetSlips() {
+ if (this.slips == null) {
+ this.slips = new java.util.ArrayList<CashSlipDto>();
+ }
+ return this.slips;
+ }
+
+ /**
+ * Adds the given cashSlipDto to this object. <p>
+ * Since the reference is a composition reference, the opposite reference <code>CashSlipDto#register</code> of the <code>cashSlipDto</code> will be handled automatically and no further coding is required to keep them in sync.<p>
+ * See {@link CashSlipDto#setRegister(CashSlipDto)}.
+ *
+ * @param cashSlipDto - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void addToSlips(final CashSlipDto cashSlipDto) {
+ checkDisposed();
+
+ cashSlipDto.setRegister(this);
+ }
+
+ /**
+ * Removes the given cashSlipDto from this object. <p>
+ *
+ * @param cashSlipDto - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void removeFromSlips(final CashSlipDto cashSlipDto) {
+ checkDisposed();
+
+ cashSlipDto.setRegister(null);
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalAddToSlips(final CashSlipDto cashSlipDto) {
+
+ if(!internalGetSlips().contains(cashSlipDto)) {
+ if(!org.eclipse.osbp.dsl.dto.lib.MappingContext.isMappingMode()) {
+ // collections will become resolved! We need to send a delta notification.
+ List<CashSlipDto> oldList = new java.util.ArrayList<>(internalGetSlips());
+ internalGetSlips().add(cashSlipDto);
+ firePropertyChange("slips", oldList, internalGetSlips());
+ } else {
+ // in mapping mode, we do NOT resolve any collection
+ internalGetSlips().add(cashSlipDto);
+ }
+ }
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalRemoveFromSlips(final CashSlipDto cashSlipDto) {
+ if(!org.eclipse.osbp.dsl.dto.lib.MappingContext.isMappingMode()) {
+ // collections will become resolved! We need to send a delta notification.
+ List<CashSlipDto> oldList = new java.util.ArrayList<>(internalGetSlips());
+ internalGetSlips().remove(cashSlipDto);
+ firePropertyChange("slips", oldList, internalGetSlips());
+ }else{
+ // in mapping mode, we do NOT resolve any collection
+ internalGetSlips().remove(cashSlipDto);
+ }
+ }
+
+ /**
+ * Sets the <code>slips</code> property to this instance.
+ * Since the reference has an opposite reference, the opposite <code>CashSlipDto#
+ * register</code> of the <code>slips</code> will be handled automatically and no
+ * further coding is required to keep them in sync.<p>
+ * See {@link CashSlipDto#setRegister(CashSlipDto)
+ *
+ * @param slips - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setSlips(final List<CashSlipDto> slips) {
+ checkDisposed();
+ for (CashSlipDto dto : internalGetSlips().toArray(new CashSlipDto[this.slips.size()])) {
+ removeFromSlips(dto);
+ }
+
+ if(slips == null) {
+ return;
+ }
+
+ for (CashSlipDto dto : slips) {
+ addToSlips(dto);
+ }
+ }
+
+ public void propertyChange(final java.beans.PropertyChangeEvent event) {
+ Object source = event.getSource();
+
+ // forward the event from embeddable beans to all listeners. So the parent of the embeddable
+ // bean will become notified and its dirty state can be handled properly
+ {
+ super.propertyChange(event);
+ }
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/CashSlipDto.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/CashSlipDto.java
new file mode 100644
index 0000000..90c5911
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/CashSlipDto.java
@@ -0,0 +1,521 @@
+package org.osbp.tests.dtos;
+
+import java.beans.PropertyChangeListener;
+import java.io.Serializable;
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+import javax.validation.Valid;
+import org.eclipse.osbp.dsl.common.datatypes.IDto;
+import org.eclipse.osbp.runtime.common.annotations.Dispose;
+import org.eclipse.osbp.runtime.common.annotations.DomainReference;
+import org.eclipse.osbp.runtime.common.annotations.Properties;
+import org.eclipse.osbp.runtime.common.annotations.Property;
+import org.osbp.tests.dtos.BaseUUIDDto;
+import org.osbp.tests.dtos.CashPaymentDto;
+import org.osbp.tests.dtos.CashPositionDto;
+import org.osbp.tests.dtos.CashRegisterDto;
+import org.osbp.tests.dtos.McustomerDto;
+
+@SuppressWarnings("all")
+public class CashSlipDto extends BaseUUIDDto implements IDto, Serializable, PropertyChangeListener {
+ private String currentDay;
+
+ @Valid
+ private Date now;
+
+ private String cashier;
+
+ @Properties(properties = @Property(key = "decimalformat", value = "###,##0.00 ¤"))
+ private Double total;
+
+ private long serial;
+
+ private boolean payed;
+
+ @DomainReference
+ @Valid
+ private List<CashPositionDto> positions;
+
+ @DomainReference
+ private McustomerDto customer;
+
+ @DomainReference
+ private CashRegisterDto register;
+
+ @DomainReference
+ @Valid
+ private List<CashPaymentDto> payments;
+
+ public CashSlipDto() {
+ installLazyCollections();
+ }
+
+ /**
+ * Installs lazy collection resolving for entity {@link CashSlip} to the dto {@link CashSlipDto}.
+ *
+ */
+ protected void installLazyCollections() {
+ super.installLazyCollections();
+ positions = new org.eclipse.osbp.dsl.dto.lib.OppositeContainmentDtoList<>(
+ org.eclipse.osbp.dsl.dto.lib.MappingContext.getCurrent(),
+ CashPositionDto.class, "slip.id",
+ (java.util.function.Supplier<Object> & Serializable) () -> this.getId());
+ payments = new org.eclipse.osbp.dsl.dto.lib.OppositeContainmentDtoList<>(
+ org.eclipse.osbp.dsl.dto.lib.MappingContext.getCurrent(),
+ CashPaymentDto.class, "slip.id",
+ (java.util.function.Supplier<Object> & Serializable) () -> this.getId());
+ }
+
+ /**
+ * Checks whether the object is disposed.
+ * @throws RuntimeException if the object is disposed.
+ */
+ private void checkDisposed() {
+ if (isDisposed()) {
+ throw new RuntimeException("Object already disposed: " + this);
+ }
+ }
+
+ /**
+ * Calling dispose will destroy that instance. The internal state will be
+ * set to 'disposed' and methods of that object must not be used anymore.
+ * Each call will result in runtime exceptions.<br/>
+ * If this object keeps composition containments, these will be disposed too.
+ * So the whole composition containment tree will be disposed on calling this method.
+ */
+ @Dispose
+ public void dispose() {
+ if (isDisposed()) {
+ return;
+ }
+ try {
+ // Dispose all the composition references.
+ if (this.positions != null) {
+ for (CashPositionDto cashPositionDto : this.positions) {
+ cashPositionDto.dispose();
+ }
+ this.positions = null;
+ }
+ if (this.payments != null) {
+ for (CashPaymentDto cashPaymentDto : this.payments) {
+ cashPaymentDto.dispose();
+ }
+ this.payments = null;
+ }
+
+ }
+ finally {
+ super.dispose();
+ }
+
+ }
+
+ /**
+ * Returns the currentDay property or <code>null</code> if not present.
+ */
+ public String getCurrentDay() {
+ return this.currentDay;
+ }
+
+ /**
+ * Sets the <code>currentDay</code> property to this instance.
+ *
+ * @param currentDay - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setCurrentDay(final String currentDay) {
+ firePropertyChange("currentDay", this.currentDay, this.currentDay = currentDay );
+ }
+
+ /**
+ * Returns the now property or <code>null</code> if not present.
+ */
+ public Date getNow() {
+ return this.now;
+ }
+
+ /**
+ * Sets the <code>now</code> property to this instance.
+ *
+ * @param now - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setNow(final Date now) {
+ firePropertyChange("now", this.now, this.now = now );
+ }
+
+ /**
+ * Returns the cashier property or <code>null</code> if not present.
+ */
+ public String getCashier() {
+ return this.cashier;
+ }
+
+ /**
+ * Sets the <code>cashier</code> property to this instance.
+ *
+ * @param cashier - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setCashier(final String cashier) {
+ firePropertyChange("cashier", this.cashier, this.cashier = cashier );
+ }
+
+ /**
+ * Returns the total property or <code>null</code> if not present.
+ */
+ public Double getTotal() {
+ return this.total;
+ }
+
+ /**
+ * Sets the <code>total</code> property to this instance.
+ *
+ * @param total - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setTotal(final Double total) {
+ firePropertyChange("total", this.total, this.total = total );
+ }
+
+ /**
+ * Returns the serial property or <code>null</code> if not present.
+ */
+ public long getSerial() {
+ return this.serial;
+ }
+
+ /**
+ * Sets the <code>serial</code> property to this instance.
+ *
+ * @param serial - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setSerial(final long serial) {
+ firePropertyChange("serial", this.serial, this.serial = serial );
+ }
+
+ /**
+ * Returns the payed property or <code>null</code> if not present.
+ */
+ public boolean getPayed() {
+ return this.payed;
+ }
+
+ /**
+ * Sets the <code>payed</code> property to this instance.
+ *
+ * @param payed - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setPayed(final boolean payed) {
+ firePropertyChange("payed", this.payed, this.payed = payed );
+ }
+
+ /**
+ * Returns an unmodifiable list of positions.
+ */
+ public List<CashPositionDto> getPositions() {
+ return Collections.unmodifiableList(internalGetPositions());
+ }
+
+ /**
+ * Returns the list of <code>CashPositionDto</code>s thereby lazy initializing it. For internal use only!
+ *
+ * @return list - the resulting list
+ *
+ */
+ public List<CashPositionDto> internalGetPositions() {
+ if (this.positions == null) {
+ this.positions = new java.util.ArrayList<CashPositionDto>();
+ }
+ return this.positions;
+ }
+
+ /**
+ * Adds the given cashPositionDto to this object. <p>
+ * Since the reference is a composition reference, the opposite reference <code>CashPositionDto#slip</code> of the <code>cashPositionDto</code> will be handled automatically and no further coding is required to keep them in sync.<p>
+ * See {@link CashPositionDto#setSlip(CashPositionDto)}.
+ *
+ * @param cashPositionDto - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void addToPositions(final CashPositionDto cashPositionDto) {
+ checkDisposed();
+
+ cashPositionDto.setSlip(this);
+ }
+
+ /**
+ * Removes the given cashPositionDto from this object. <p>
+ *
+ * @param cashPositionDto - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void removeFromPositions(final CashPositionDto cashPositionDto) {
+ checkDisposed();
+
+ cashPositionDto.setSlip(null);
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalAddToPositions(final CashPositionDto cashPositionDto) {
+
+ if(!internalGetPositions().contains(cashPositionDto)) {
+ if(!org.eclipse.osbp.dsl.dto.lib.MappingContext.isMappingMode()) {
+ // collections will become resolved! We need to send a delta notification.
+ List<CashPositionDto> oldList = new java.util.ArrayList<>(internalGetPositions());
+ internalGetPositions().add(cashPositionDto);
+ firePropertyChange("positions", oldList, internalGetPositions());
+ } else {
+ // in mapping mode, we do NOT resolve any collection
+ internalGetPositions().add(cashPositionDto);
+ }
+ }
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalRemoveFromPositions(final CashPositionDto cashPositionDto) {
+ if(!org.eclipse.osbp.dsl.dto.lib.MappingContext.isMappingMode()) {
+ // collections will become resolved! We need to send a delta notification.
+ List<CashPositionDto> oldList = new java.util.ArrayList<>(internalGetPositions());
+ internalGetPositions().remove(cashPositionDto);
+ firePropertyChange("positions", oldList, internalGetPositions());
+ }else{
+ // in mapping mode, we do NOT resolve any collection
+ internalGetPositions().remove(cashPositionDto);
+ }
+ }
+
+ /**
+ * Sets the <code>positions</code> property to this instance.
+ * Since the reference has an opposite reference, the opposite <code>CashPositionDto#
+ * slip</code> of the <code>positions</code> will be handled automatically and no
+ * further coding is required to keep them in sync.<p>
+ * See {@link CashPositionDto#setSlip(CashPositionDto)
+ *
+ * @param positions - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setPositions(final List<CashPositionDto> positions) {
+ checkDisposed();
+ for (CashPositionDto dto : internalGetPositions().toArray(new CashPositionDto[this.positions.size()])) {
+ removeFromPositions(dto);
+ }
+
+ if(positions == null) {
+ return;
+ }
+
+ for (CashPositionDto dto : positions) {
+ addToPositions(dto);
+ }
+ }
+
+ /**
+ * Returns the customer property or <code>null</code> if not present.
+ */
+ public McustomerDto getCustomer() {
+ return this.customer;
+ }
+
+ /**
+ * Sets the <code>customer</code> property to this instance.
+ * Since the reference has an opposite reference, the opposite <code>McustomerDto#
+ * slips</code> of the <code>customer</code> will be handled automatically and no
+ * further coding is required to keep them in sync.<p>
+ * See {@link McustomerDto#setSlips(McustomerDto)
+ *
+ * @param customer - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setCustomer(final McustomerDto customer) {
+ checkDisposed();
+ if (this.customer != null) {
+ this.customer.internalRemoveFromSlips(this);
+ }
+
+ internalSetCustomer(customer);
+
+ if (this.customer != null) {
+ this.customer.internalAddToSlips(this);
+ }
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalSetCustomer(final McustomerDto customer) {
+ firePropertyChange("customer", this.customer, this.customer = customer);
+ }
+
+ /**
+ * Returns the register property or <code>null</code> if not present.
+ */
+ public CashRegisterDto getRegister() {
+ return this.register;
+ }
+
+ /**
+ * Sets the <code>register</code> property to this instance.
+ * Since the reference has an opposite reference, the opposite <code>CashRegisterDto#
+ * slips</code> of the <code>register</code> will be handled automatically and no
+ * further coding is required to keep them in sync.<p>
+ * See {@link CashRegisterDto#setSlips(CashRegisterDto)
+ *
+ * @param register - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setRegister(final CashRegisterDto register) {
+ checkDisposed();
+ if (this.register != null) {
+ this.register.internalRemoveFromSlips(this);
+ }
+
+ internalSetRegister(register);
+
+ if (this.register != null) {
+ this.register.internalAddToSlips(this);
+ }
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalSetRegister(final CashRegisterDto register) {
+ firePropertyChange("register", this.register, this.register = register);
+ }
+
+ /**
+ * Returns an unmodifiable list of payments.
+ */
+ public List<CashPaymentDto> getPayments() {
+ return Collections.unmodifiableList(internalGetPayments());
+ }
+
+ /**
+ * Returns the list of <code>CashPaymentDto</code>s thereby lazy initializing it. For internal use only!
+ *
+ * @return list - the resulting list
+ *
+ */
+ public List<CashPaymentDto> internalGetPayments() {
+ if (this.payments == null) {
+ this.payments = new java.util.ArrayList<CashPaymentDto>();
+ }
+ return this.payments;
+ }
+
+ /**
+ * Adds the given cashPaymentDto to this object. <p>
+ * Since the reference is a composition reference, the opposite reference <code>CashPaymentDto#slip</code> of the <code>cashPaymentDto</code> will be handled automatically and no further coding is required to keep them in sync.<p>
+ * See {@link CashPaymentDto#setSlip(CashPaymentDto)}.
+ *
+ * @param cashPaymentDto - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void addToPayments(final CashPaymentDto cashPaymentDto) {
+ checkDisposed();
+
+ cashPaymentDto.setSlip(this);
+ }
+
+ /**
+ * Removes the given cashPaymentDto from this object. <p>
+ *
+ * @param cashPaymentDto - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void removeFromPayments(final CashPaymentDto cashPaymentDto) {
+ checkDisposed();
+
+ cashPaymentDto.setSlip(null);
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalAddToPayments(final CashPaymentDto cashPaymentDto) {
+
+ if(!internalGetPayments().contains(cashPaymentDto)) {
+ if(!org.eclipse.osbp.dsl.dto.lib.MappingContext.isMappingMode()) {
+ // collections will become resolved! We need to send a delta notification.
+ List<CashPaymentDto> oldList = new java.util.ArrayList<>(internalGetPayments());
+ internalGetPayments().add(cashPaymentDto);
+ firePropertyChange("payments", oldList, internalGetPayments());
+ } else {
+ // in mapping mode, we do NOT resolve any collection
+ internalGetPayments().add(cashPaymentDto);
+ }
+ }
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalRemoveFromPayments(final CashPaymentDto cashPaymentDto) {
+ if(!org.eclipse.osbp.dsl.dto.lib.MappingContext.isMappingMode()) {
+ // collections will become resolved! We need to send a delta notification.
+ List<CashPaymentDto> oldList = new java.util.ArrayList<>(internalGetPayments());
+ internalGetPayments().remove(cashPaymentDto);
+ firePropertyChange("payments", oldList, internalGetPayments());
+ }else{
+ // in mapping mode, we do NOT resolve any collection
+ internalGetPayments().remove(cashPaymentDto);
+ }
+ }
+
+ /**
+ * Sets the <code>payments</code> property to this instance.
+ * Since the reference has an opposite reference, the opposite <code>CashPaymentDto#
+ * slip</code> of the <code>payments</code> will be handled automatically and no
+ * further coding is required to keep them in sync.<p>
+ * See {@link CashPaymentDto#setSlip(CashPaymentDto)
+ *
+ * @param payments - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setPayments(final List<CashPaymentDto> payments) {
+ checkDisposed();
+ for (CashPaymentDto dto : internalGetPayments().toArray(new CashPaymentDto[this.payments.size()])) {
+ removeFromPayments(dto);
+ }
+
+ if(payments == null) {
+ return;
+ }
+
+ for (CashPaymentDto dto : payments) {
+ addToPayments(dto);
+ }
+ }
+
+ public void propertyChange(final java.beans.PropertyChangeEvent event) {
+ Object source = event.getSource();
+
+ // forward the event from embeddable beans to all listeners. So the parent of the embeddable
+ // bean will become notified and its dirty state can be handled properly
+ {
+ super.propertyChange(event);
+ }
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/CompanyDto.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/CompanyDto.java
new file mode 100644
index 0000000..6ab9c97
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/CompanyDto.java
@@ -0,0 +1,419 @@
+package org.osbp.tests.dtos;
+
+import java.beans.PropertyChangeListener;
+import java.io.Serializable;
+import java.util.Collections;
+import java.util.List;
+import javax.validation.Valid;
+import org.eclipse.osbp.dsl.common.datatypes.IDto;
+import org.eclipse.osbp.runtime.common.annotations.Dispose;
+import org.eclipse.osbp.runtime.common.annotations.DomainKey;
+import org.eclipse.osbp.runtime.common.annotations.DomainReference;
+import org.osbp.tests.dtos.AddressDto;
+import org.osbp.tests.dtos.BaseUUIDDto;
+import org.osbp.tests.dtos.CompanyGroupDto;
+import org.osbp.tests.dtos.CompanyRelationTypeDto;
+import org.osbp.tests.dtos.DepartmentDto;
+
+@SuppressWarnings("all")
+public class CompanyDto extends BaseUUIDDto implements IDto, Serializable, PropertyChangeListener {
+ @DomainReference
+ private CompanyGroupDto company_group;
+
+ @DomainKey
+ private String name;
+
+ private String description;
+
+ @DomainReference
+ private CompanyRelationTypeDto relation_type;
+
+ @DomainReference
+ @Valid
+ private List<AddressDto> address;
+
+ @DomainReference
+ @Valid
+ private List<DepartmentDto> departments;
+
+ public CompanyDto() {
+ installLazyCollections();
+ }
+
+ /**
+ * Installs lazy collection resolving for entity {@link Company} to the dto {@link CompanyDto}.
+ *
+ */
+ protected void installLazyCollections() {
+ super.installLazyCollections();
+ address = new org.eclipse.osbp.dsl.dto.lib.OppositeContainmentDtoList<>(
+ org.eclipse.osbp.dsl.dto.lib.MappingContext.getCurrent(),
+ AddressDto.class, "company.id",
+ (java.util.function.Supplier<Object> & Serializable) () -> this.getId());
+ departments = new org.eclipse.osbp.dsl.dto.lib.OppositeContainmentDtoList<>(
+ org.eclipse.osbp.dsl.dto.lib.MappingContext.getCurrent(),
+ DepartmentDto.class, "company.id",
+ (java.util.function.Supplier<Object> & Serializable) () -> this.getId());
+ }
+
+ /**
+ * Checks whether the object is disposed.
+ * @throws RuntimeException if the object is disposed.
+ */
+ private void checkDisposed() {
+ if (isDisposed()) {
+ throw new RuntimeException("Object already disposed: " + this);
+ }
+ }
+
+ /**
+ * Calling dispose will destroy that instance. The internal state will be
+ * set to 'disposed' and methods of that object must not be used anymore.
+ * Each call will result in runtime exceptions.<br/>
+ * If this object keeps composition containments, these will be disposed too.
+ * So the whole composition containment tree will be disposed on calling this method.
+ */
+ @Dispose
+ public void dispose() {
+ if (isDisposed()) {
+ return;
+ }
+ try {
+ // Dispose all the composition references.
+ if (this.address != null) {
+ for (AddressDto addressDto : this.address) {
+ addressDto.dispose();
+ }
+ this.address = null;
+ }
+ if (this.departments != null) {
+ for (DepartmentDto departmentDto : this.departments) {
+ departmentDto.dispose();
+ }
+ this.departments = null;
+ }
+
+ }
+ finally {
+ super.dispose();
+ }
+
+ }
+
+ /**
+ * Returns the company_group property or <code>null</code> if not present.
+ */
+ public CompanyGroupDto getCompany_group() {
+ return this.company_group;
+ }
+
+ /**
+ * Sets the <code>company_group</code> property to this instance.
+ * Since the reference has an opposite reference, the opposite <code>CompanyGroupDto#
+ * companies</code> of the <code>company_group</code> will be handled automatically and no
+ * further coding is required to keep them in sync.<p>
+ * See {@link CompanyGroupDto#setCompanies(CompanyGroupDto)
+ *
+ * @param company_group - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setCompany_group(final CompanyGroupDto company_group) {
+ checkDisposed();
+ if (this.company_group != null) {
+ this.company_group.internalRemoveFromCompanies(this);
+ }
+
+ internalSetCompany_group(company_group);
+
+ if (this.company_group != null) {
+ this.company_group.internalAddToCompanies(this);
+ }
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalSetCompany_group(final CompanyGroupDto company_group) {
+ firePropertyChange("company_group", this.company_group, this.company_group = company_group);
+ }
+
+ /**
+ * Returns the name property or <code>null</code> if not present.
+ */
+ public String getName() {
+ return this.name;
+ }
+
+ /**
+ * Sets the <code>name</code> property to this instance.
+ *
+ * @param name - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setName(final String name) {
+ firePropertyChange("name", this.name, this.name = name );
+ }
+
+ /**
+ * Returns the description property or <code>null</code> if not present.
+ */
+ public String getDescription() {
+ return this.description;
+ }
+
+ /**
+ * Sets the <code>description</code> property to this instance.
+ *
+ * @param description - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setDescription(final String description) {
+ firePropertyChange("description", this.description, this.description = description );
+ }
+
+ /**
+ * Returns the relation_type property or <code>null</code> if not present.
+ */
+ public CompanyRelationTypeDto getRelation_type() {
+ return this.relation_type;
+ }
+
+ /**
+ * Sets the <code>relation_type</code> property to this instance.
+ *
+ * @param relation_type - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setRelation_type(final CompanyRelationTypeDto relation_type) {
+ checkDisposed();
+ firePropertyChange("relation_type", this.relation_type, this.relation_type = relation_type);
+ }
+
+ /**
+ * Returns an unmodifiable list of address.
+ */
+ public List<AddressDto> getAddress() {
+ return Collections.unmodifiableList(internalGetAddress());
+ }
+
+ /**
+ * Returns the list of <code>AddressDto</code>s thereby lazy initializing it. For internal use only!
+ *
+ * @return list - the resulting list
+ *
+ */
+ public List<AddressDto> internalGetAddress() {
+ if (this.address == null) {
+ this.address = new java.util.ArrayList<AddressDto>();
+ }
+ return this.address;
+ }
+
+ /**
+ * Adds the given addressDto to this object. <p>
+ * Since the reference is a composition reference, the opposite reference <code>AddressDto#company</code> of the <code>addressDto</code> will be handled automatically and no further coding is required to keep them in sync.<p>
+ * See {@link AddressDto#setCompany(AddressDto)}.
+ *
+ * @param addressDto - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void addToAddress(final AddressDto addressDto) {
+ checkDisposed();
+
+ addressDto.setCompany(this);
+ }
+
+ /**
+ * Removes the given addressDto from this object. <p>
+ *
+ * @param addressDto - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void removeFromAddress(final AddressDto addressDto) {
+ checkDisposed();
+
+ addressDto.setCompany(null);
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalAddToAddress(final AddressDto addressDto) {
+
+ if(!internalGetAddress().contains(addressDto)) {
+ if(!org.eclipse.osbp.dsl.dto.lib.MappingContext.isMappingMode()) {
+ // collections will become resolved! We need to send a delta notification.
+ List<AddressDto> oldList = new java.util.ArrayList<>(internalGetAddress());
+ internalGetAddress().add(addressDto);
+ firePropertyChange("address", oldList, internalGetAddress());
+ } else {
+ // in mapping mode, we do NOT resolve any collection
+ internalGetAddress().add(addressDto);
+ }
+ }
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalRemoveFromAddress(final AddressDto addressDto) {
+ if(!org.eclipse.osbp.dsl.dto.lib.MappingContext.isMappingMode()) {
+ // collections will become resolved! We need to send a delta notification.
+ List<AddressDto> oldList = new java.util.ArrayList<>(internalGetAddress());
+ internalGetAddress().remove(addressDto);
+ firePropertyChange("address", oldList, internalGetAddress());
+ }else{
+ // in mapping mode, we do NOT resolve any collection
+ internalGetAddress().remove(addressDto);
+ }
+ }
+
+ /**
+ * Sets the <code>address</code> property to this instance.
+ * Since the reference has an opposite reference, the opposite <code>AddressDto#
+ * company</code> of the <code>address</code> will be handled automatically and no
+ * further coding is required to keep them in sync.<p>
+ * See {@link AddressDto#setCompany(AddressDto)
+ *
+ * @param address - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setAddress(final List<AddressDto> address) {
+ checkDisposed();
+ for (AddressDto dto : internalGetAddress().toArray(new AddressDto[this.address.size()])) {
+ removeFromAddress(dto);
+ }
+
+ if(address == null) {
+ return;
+ }
+
+ for (AddressDto dto : address) {
+ addToAddress(dto);
+ }
+ }
+
+ /**
+ * Returns an unmodifiable list of departments.
+ */
+ public List<DepartmentDto> getDepartments() {
+ return Collections.unmodifiableList(internalGetDepartments());
+ }
+
+ /**
+ * Returns the list of <code>DepartmentDto</code>s thereby lazy initializing it. For internal use only!
+ *
+ * @return list - the resulting list
+ *
+ */
+ public List<DepartmentDto> internalGetDepartments() {
+ if (this.departments == null) {
+ this.departments = new java.util.ArrayList<DepartmentDto>();
+ }
+ return this.departments;
+ }
+
+ /**
+ * Adds the given departmentDto to this object. <p>
+ * Since the reference is a composition reference, the opposite reference <code>DepartmentDto#company</code> of the <code>departmentDto</code> will be handled automatically and no further coding is required to keep them in sync.<p>
+ * See {@link DepartmentDto#setCompany(DepartmentDto)}.
+ *
+ * @param departmentDto - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void addToDepartments(final DepartmentDto departmentDto) {
+ checkDisposed();
+
+ departmentDto.setCompany(this);
+ }
+
+ /**
+ * Removes the given departmentDto from this object. <p>
+ *
+ * @param departmentDto - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void removeFromDepartments(final DepartmentDto departmentDto) {
+ checkDisposed();
+
+ departmentDto.setCompany(null);
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalAddToDepartments(final DepartmentDto departmentDto) {
+
+ if(!internalGetDepartments().contains(departmentDto)) {
+ if(!org.eclipse.osbp.dsl.dto.lib.MappingContext.isMappingMode()) {
+ // collections will become resolved! We need to send a delta notification.
+ List<DepartmentDto> oldList = new java.util.ArrayList<>(internalGetDepartments());
+ internalGetDepartments().add(departmentDto);
+ firePropertyChange("departments", oldList, internalGetDepartments());
+ } else {
+ // in mapping mode, we do NOT resolve any collection
+ internalGetDepartments().add(departmentDto);
+ }
+ }
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalRemoveFromDepartments(final DepartmentDto departmentDto) {
+ if(!org.eclipse.osbp.dsl.dto.lib.MappingContext.isMappingMode()) {
+ // collections will become resolved! We need to send a delta notification.
+ List<DepartmentDto> oldList = new java.util.ArrayList<>(internalGetDepartments());
+ internalGetDepartments().remove(departmentDto);
+ firePropertyChange("departments", oldList, internalGetDepartments());
+ }else{
+ // in mapping mode, we do NOT resolve any collection
+ internalGetDepartments().remove(departmentDto);
+ }
+ }
+
+ /**
+ * Sets the <code>departments</code> property to this instance.
+ * Since the reference has an opposite reference, the opposite <code>DepartmentDto#
+ * company</code> of the <code>departments</code> will be handled automatically and no
+ * further coding is required to keep them in sync.<p>
+ * See {@link DepartmentDto#setCompany(DepartmentDto)
+ *
+ * @param departments - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setDepartments(final List<DepartmentDto> departments) {
+ checkDisposed();
+ for (DepartmentDto dto : internalGetDepartments().toArray(new DepartmentDto[this.departments.size()])) {
+ removeFromDepartments(dto);
+ }
+
+ if(departments == null) {
+ return;
+ }
+
+ for (DepartmentDto dto : departments) {
+ addToDepartments(dto);
+ }
+ }
+
+ public void propertyChange(final java.beans.PropertyChangeEvent event) {
+ Object source = event.getSource();
+
+ // forward the event from embeddable beans to all listeners. So the parent of the embeddable
+ // bean will become notified and its dirty state can be handled properly
+ {
+ super.propertyChange(event);
+ }
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/CompanyGroupDto.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/CompanyGroupDto.java
new file mode 100644
index 0000000..a126cc1
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/CompanyGroupDto.java
@@ -0,0 +1,239 @@
+package org.osbp.tests.dtos;
+
+import java.beans.PropertyChangeListener;
+import java.io.Serializable;
+import java.util.Collections;
+import java.util.List;
+import org.eclipse.osbp.dsl.common.datatypes.IDto;
+import org.eclipse.osbp.runtime.common.annotations.Dispose;
+import org.eclipse.osbp.runtime.common.annotations.DomainKey;
+import org.eclipse.osbp.runtime.common.annotations.DomainReference;
+import org.osbp.tests.dtos.BaseUUIDDto;
+import org.osbp.tests.dtos.CompanyDto;
+
+@SuppressWarnings("all")
+public class CompanyGroupDto extends BaseUUIDDto implements IDto, Serializable, PropertyChangeListener {
+ @DomainKey
+ private String name;
+
+ private String description;
+
+ @DomainReference
+ private CompanyDto main_company;
+
+ @DomainReference
+ private List<CompanyDto> companies;
+
+ public CompanyGroupDto() {
+ installLazyCollections();
+ }
+
+ /**
+ * Installs lazy collection resolving for entity {@link CompanyGroup} to the dto {@link CompanyGroupDto}.
+ *
+ */
+ protected void installLazyCollections() {
+ super.installLazyCollections();
+ companies = new org.eclipse.osbp.dsl.dto.lib.OppositeDtoList<>(
+ org.eclipse.osbp.dsl.dto.lib.MappingContext.getCurrent(),
+ CompanyDto.class, "company_group.id",
+ (java.util.function.Supplier<Object> & Serializable) () -> this.getId());
+ }
+
+ /**
+ * Checks whether the object is disposed.
+ * @throws RuntimeException if the object is disposed.
+ */
+ private void checkDisposed() {
+ if (isDisposed()) {
+ throw new RuntimeException("Object already disposed: " + this);
+ }
+ }
+
+ /**
+ * Calling dispose will destroy that instance. The internal state will be
+ * set to 'disposed' and methods of that object must not be used anymore.
+ * Each call will result in runtime exceptions.<br/>
+ * If this object keeps composition containments, these will be disposed too.
+ * So the whole composition containment tree will be disposed on calling this method.
+ */
+ @Dispose
+ public void dispose() {
+ if (isDisposed()) {
+ return;
+ }
+ super.dispose();
+ }
+
+ /**
+ * Returns the name property or <code>null</code> if not present.
+ */
+ public String getName() {
+ return this.name;
+ }
+
+ /**
+ * Sets the <code>name</code> property to this instance.
+ *
+ * @param name - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setName(final String name) {
+ firePropertyChange("name", this.name, this.name = name );
+ }
+
+ /**
+ * Returns the description property or <code>null</code> if not present.
+ */
+ public String getDescription() {
+ return this.description;
+ }
+
+ /**
+ * Sets the <code>description</code> property to this instance.
+ *
+ * @param description - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setDescription(final String description) {
+ firePropertyChange("description", this.description, this.description = description );
+ }
+
+ /**
+ * Returns the main_company property or <code>null</code> if not present.
+ */
+ public CompanyDto getMain_company() {
+ return this.main_company;
+ }
+
+ /**
+ * Sets the <code>main_company</code> property to this instance.
+ *
+ * @param main_company - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setMain_company(final CompanyDto main_company) {
+ checkDisposed();
+ firePropertyChange("main_company", this.main_company, this.main_company = main_company);
+ }
+
+ /**
+ * Returns an unmodifiable list of companies.
+ */
+ public List<CompanyDto> getCompanies() {
+ return Collections.unmodifiableList(internalGetCompanies());
+ }
+
+ /**
+ * Returns the list of <code>CompanyDto</code>s thereby lazy initializing it. For internal use only!
+ *
+ * @return list - the resulting list
+ *
+ */
+ public List<CompanyDto> internalGetCompanies() {
+ if (this.companies == null) {
+ this.companies = new java.util.ArrayList<CompanyDto>();
+ }
+ return this.companies;
+ }
+
+ /**
+ * Adds the given companyDto to this object. <p>
+ * Since the reference is a composition reference, the opposite reference <code>CompanyDto#company_group</code> of the <code>companyDto</code> will be handled automatically and no further coding is required to keep them in sync.<p>
+ * See {@link CompanyDto#setCompany_group(CompanyDto)}.
+ *
+ * @param companyDto - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void addToCompanies(final CompanyDto companyDto) {
+ checkDisposed();
+
+ companyDto.setCompany_group(this);
+ }
+
+ /**
+ * Removes the given companyDto from this object. <p>
+ *
+ * @param companyDto - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void removeFromCompanies(final CompanyDto companyDto) {
+ checkDisposed();
+
+ companyDto.setCompany_group(null);
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalAddToCompanies(final CompanyDto companyDto) {
+
+ if(!internalGetCompanies().contains(companyDto)) {
+ if(!org.eclipse.osbp.dsl.dto.lib.MappingContext.isMappingMode()) {
+ // collections will become resolved! We need to send a delta notification.
+ List<CompanyDto> oldList = new java.util.ArrayList<>(internalGetCompanies());
+ internalGetCompanies().add(companyDto);
+ firePropertyChange("companies", oldList, internalGetCompanies());
+ } else {
+ // in mapping mode, we do NOT resolve any collection
+ internalGetCompanies().add(companyDto);
+ }
+ }
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalRemoveFromCompanies(final CompanyDto companyDto) {
+ if(!org.eclipse.osbp.dsl.dto.lib.MappingContext.isMappingMode()) {
+ // collections will become resolved! We need to send a delta notification.
+ List<CompanyDto> oldList = new java.util.ArrayList<>(internalGetCompanies());
+ internalGetCompanies().remove(companyDto);
+ firePropertyChange("companies", oldList, internalGetCompanies());
+ }else{
+ // in mapping mode, we do NOT resolve any collection
+ internalGetCompanies().remove(companyDto);
+ }
+ }
+
+ /**
+ * Sets the <code>companies</code> property to this instance.
+ * Since the reference has an opposite reference, the opposite <code>CompanyDto#
+ * company_group</code> of the <code>companies</code> will be handled automatically and no
+ * further coding is required to keep them in sync.<p>
+ * See {@link CompanyDto#setCompany_group(CompanyDto)
+ *
+ * @param companies - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setCompanies(final List<CompanyDto> companies) {
+ checkDisposed();
+ for (CompanyDto dto : internalGetCompanies().toArray(new CompanyDto[this.companies.size()])) {
+ removeFromCompanies(dto);
+ }
+
+ if(companies == null) {
+ return;
+ }
+
+ for (CompanyDto dto : companies) {
+ addToCompanies(dto);
+ }
+ }
+
+ public void propertyChange(final java.beans.PropertyChangeEvent event) {
+ Object source = event.getSource();
+
+ // forward the event from embeddable beans to all listeners. So the parent of the embeddable
+ // bean will become notified and its dirty state can be handled properly
+ {
+ super.propertyChange(event);
+ }
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/CompanyRelationTypeDto.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/CompanyRelationTypeDto.java
new file mode 100644
index 0000000..7852dc8
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/CompanyRelationTypeDto.java
@@ -0,0 +1,99 @@
+package org.osbp.tests.dtos;
+
+import java.beans.PropertyChangeListener;
+import java.io.Serializable;
+import org.eclipse.osbp.dsl.common.datatypes.IDto;
+import org.eclipse.osbp.runtime.common.annotations.Dispose;
+import org.eclipse.osbp.runtime.common.annotations.DomainKey;
+import org.osbp.tests.dtos.BaseUUIDDto;
+
+@SuppressWarnings("all")
+public class CompanyRelationTypeDto extends BaseUUIDDto implements IDto, Serializable, PropertyChangeListener {
+ @DomainKey
+ private String name;
+
+ private String description;
+
+ public CompanyRelationTypeDto() {
+ installLazyCollections();
+ }
+
+ /**
+ * Installs lazy collection resolving for entity {@link CompanyRelationType} to the dto {@link CompanyRelationTypeDto}.
+ *
+ */
+ protected void installLazyCollections() {
+ super.installLazyCollections();
+ }
+
+ /**
+ * Checks whether the object is disposed.
+ * @throws RuntimeException if the object is disposed.
+ */
+ private void checkDisposed() {
+ if (isDisposed()) {
+ throw new RuntimeException("Object already disposed: " + this);
+ }
+ }
+
+ /**
+ * Calling dispose will destroy that instance. The internal state will be
+ * set to 'disposed' and methods of that object must not be used anymore.
+ * Each call will result in runtime exceptions.<br/>
+ * If this object keeps composition containments, these will be disposed too.
+ * So the whole composition containment tree will be disposed on calling this method.
+ */
+ @Dispose
+ public void dispose() {
+ if (isDisposed()) {
+ return;
+ }
+ super.dispose();
+ }
+
+ /**
+ * Returns the name property or <code>null</code> if not present.
+ */
+ public String getName() {
+ return this.name;
+ }
+
+ /**
+ * Sets the <code>name</code> property to this instance.
+ *
+ * @param name - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setName(final String name) {
+ firePropertyChange("name", this.name, this.name = name );
+ }
+
+ /**
+ * Returns the description property or <code>null</code> if not present.
+ */
+ public String getDescription() {
+ return this.description;
+ }
+
+ /**
+ * Sets the <code>description</code> property to this instance.
+ *
+ * @param description - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setDescription(final String description) {
+ firePropertyChange("description", this.description, this.description = description );
+ }
+
+ public void propertyChange(final java.beans.PropertyChangeEvent event) {
+ Object source = event.getSource();
+
+ // forward the event from embeddable beans to all listeners. So the parent of the embeddable
+ // bean will become notified and its dirty state can be handled properly
+ {
+ super.propertyChange(event);
+ }
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/DepartmentDto.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/DepartmentDto.java
new file mode 100644
index 0000000..b398612
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/DepartmentDto.java
@@ -0,0 +1,294 @@
+package org.osbp.tests.dtos;
+
+import java.beans.PropertyChangeListener;
+import java.io.Serializable;
+import java.util.Collections;
+import java.util.List;
+import javax.validation.Valid;
+import org.eclipse.osbp.dsl.common.datatypes.IDto;
+import org.eclipse.osbp.runtime.common.annotations.Dispose;
+import org.eclipse.osbp.runtime.common.annotations.DomainKey;
+import org.eclipse.osbp.runtime.common.annotations.DomainReference;
+import org.osbp.tests.dtos.AddressDto;
+import org.osbp.tests.dtos.BaseUUIDDto;
+import org.osbp.tests.dtos.CompanyDto;
+
+@SuppressWarnings("all")
+public class DepartmentDto extends BaseUUIDDto implements IDto, Serializable, PropertyChangeListener {
+ @DomainReference
+ private CompanyDto company;
+
+ @DomainKey
+ private String name;
+
+ private String description;
+
+ @DomainReference
+ @Valid
+ private List<AddressDto> address;
+
+ private double default_yearly_income;
+
+ public DepartmentDto() {
+ installLazyCollections();
+ }
+
+ /**
+ * Installs lazy collection resolving for entity {@link Department} to the dto {@link DepartmentDto}.
+ *
+ */
+ protected void installLazyCollections() {
+ super.installLazyCollections();
+ address = new org.eclipse.osbp.dsl.dto.lib.OppositeContainmentDtoList<>(
+ org.eclipse.osbp.dsl.dto.lib.MappingContext.getCurrent(),
+ AddressDto.class, "department.id",
+ (java.util.function.Supplier<Object> & Serializable) () -> this.getId());
+ }
+
+ /**
+ * Checks whether the object is disposed.
+ * @throws RuntimeException if the object is disposed.
+ */
+ private void checkDisposed() {
+ if (isDisposed()) {
+ throw new RuntimeException("Object already disposed: " + this);
+ }
+ }
+
+ /**
+ * Calling dispose will destroy that instance. The internal state will be
+ * set to 'disposed' and methods of that object must not be used anymore.
+ * Each call will result in runtime exceptions.<br/>
+ * If this object keeps composition containments, these will be disposed too.
+ * So the whole composition containment tree will be disposed on calling this method.
+ */
+ @Dispose
+ public void dispose() {
+ if (isDisposed()) {
+ return;
+ }
+ try {
+ // Dispose all the composition references.
+ if (this.address != null) {
+ for (AddressDto addressDto : this.address) {
+ addressDto.dispose();
+ }
+ this.address = null;
+ }
+
+ }
+ finally {
+ super.dispose();
+ }
+
+ }
+
+ /**
+ * Returns the company property or <code>null</code> if not present.
+ */
+ public CompanyDto getCompany() {
+ return this.company;
+ }
+
+ /**
+ * Sets the <code>company</code> property to this instance.
+ * Since the reference has an opposite reference, the opposite <code>CompanyDto#
+ * departments</code> of the <code>company</code> will be handled automatically and no
+ * further coding is required to keep them in sync.<p>
+ * See {@link CompanyDto#setDepartments(CompanyDto)
+ *
+ * @param company - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setCompany(final CompanyDto company) {
+ checkDisposed();
+ if (this.company != null) {
+ this.company.internalRemoveFromDepartments(this);
+ }
+
+ internalSetCompany(company);
+
+ if (this.company != null) {
+ this.company.internalAddToDepartments(this);
+ }
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalSetCompany(final CompanyDto company) {
+ firePropertyChange("company", this.company, this.company = company);
+ }
+
+ /**
+ * Returns the name property or <code>null</code> if not present.
+ */
+ public String getName() {
+ return this.name;
+ }
+
+ /**
+ * Sets the <code>name</code> property to this instance.
+ *
+ * @param name - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setName(final String name) {
+ firePropertyChange("name", this.name, this.name = name );
+ }
+
+ /**
+ * Returns the description property or <code>null</code> if not present.
+ */
+ public String getDescription() {
+ return this.description;
+ }
+
+ /**
+ * Sets the <code>description</code> property to this instance.
+ *
+ * @param description - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setDescription(final String description) {
+ firePropertyChange("description", this.description, this.description = description );
+ }
+
+ /**
+ * Returns an unmodifiable list of address.
+ */
+ public List<AddressDto> getAddress() {
+ return Collections.unmodifiableList(internalGetAddress());
+ }
+
+ /**
+ * Returns the list of <code>AddressDto</code>s thereby lazy initializing it. For internal use only!
+ *
+ * @return list - the resulting list
+ *
+ */
+ public List<AddressDto> internalGetAddress() {
+ if (this.address == null) {
+ this.address = new java.util.ArrayList<AddressDto>();
+ }
+ return this.address;
+ }
+
+ /**
+ * Adds the given addressDto to this object. <p>
+ * Since the reference is a composition reference, the opposite reference <code>AddressDto#department</code> of the <code>addressDto</code> will be handled automatically and no further coding is required to keep them in sync.<p>
+ * See {@link AddressDto#setDepartment(AddressDto)}.
+ *
+ * @param addressDto - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void addToAddress(final AddressDto addressDto) {
+ checkDisposed();
+
+ addressDto.setDepartment(this);
+ }
+
+ /**
+ * Removes the given addressDto from this object. <p>
+ *
+ * @param addressDto - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void removeFromAddress(final AddressDto addressDto) {
+ checkDisposed();
+
+ addressDto.setDepartment(null);
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalAddToAddress(final AddressDto addressDto) {
+
+ if(!internalGetAddress().contains(addressDto)) {
+ if(!org.eclipse.osbp.dsl.dto.lib.MappingContext.isMappingMode()) {
+ // collections will become resolved! We need to send a delta notification.
+ List<AddressDto> oldList = new java.util.ArrayList<>(internalGetAddress());
+ internalGetAddress().add(addressDto);
+ firePropertyChange("address", oldList, internalGetAddress());
+ } else {
+ // in mapping mode, we do NOT resolve any collection
+ internalGetAddress().add(addressDto);
+ }
+ }
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalRemoveFromAddress(final AddressDto addressDto) {
+ if(!org.eclipse.osbp.dsl.dto.lib.MappingContext.isMappingMode()) {
+ // collections will become resolved! We need to send a delta notification.
+ List<AddressDto> oldList = new java.util.ArrayList<>(internalGetAddress());
+ internalGetAddress().remove(addressDto);
+ firePropertyChange("address", oldList, internalGetAddress());
+ }else{
+ // in mapping mode, we do NOT resolve any collection
+ internalGetAddress().remove(addressDto);
+ }
+ }
+
+ /**
+ * Sets the <code>address</code> property to this instance.
+ * Since the reference has an opposite reference, the opposite <code>AddressDto#
+ * department</code> of the <code>address</code> will be handled automatically and no
+ * further coding is required to keep them in sync.<p>
+ * See {@link AddressDto#setDepartment(AddressDto)
+ *
+ * @param address - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setAddress(final List<AddressDto> address) {
+ checkDisposed();
+ for (AddressDto dto : internalGetAddress().toArray(new AddressDto[this.address.size()])) {
+ removeFromAddress(dto);
+ }
+
+ if(address == null) {
+ return;
+ }
+
+ for (AddressDto dto : address) {
+ addToAddress(dto);
+ }
+ }
+
+ /**
+ * Returns the default_yearly_income property or <code>null</code> if not present.
+ */
+ public double getDefault_yearly_income() {
+ return this.default_yearly_income;
+ }
+
+ /**
+ * Sets the <code>default_yearly_income</code> property to this instance.
+ *
+ * @param default_yearly_income - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setDefault_yearly_income(final double default_yearly_income) {
+ firePropertyChange("default_yearly_income", this.default_yearly_income, this.default_yearly_income = default_yearly_income );
+ }
+
+ public void propertyChange(final java.beans.PropertyChangeEvent event) {
+ Object source = event.getSource();
+
+ // forward the event from embeddable beans to all listeners. So the parent of the embeddable
+ // bean will become notified and its dirty state can be handled properly
+ {
+ super.propertyChange(event);
+ }
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/DtoTestBeanDto.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/DtoTestBeanDto.java
new file mode 100644
index 0000000..bc54ee4
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/DtoTestBeanDto.java
@@ -0,0 +1,151 @@
+package org.osbp.tests.dtos;
+
+import java.beans.PropertyChangeListener;
+import java.beans.PropertyChangeSupport;
+import java.io.Serializable;
+import org.eclipse.osbp.dsl.common.datatypes.IDto;
+import org.eclipse.osbp.runtime.common.annotations.Dispose;
+import org.eclipse.osbp.runtime.common.annotations.DomainReference;
+import org.osbp.tests.dtos.DtoTestChildCrossRefDto;
+
+@SuppressWarnings("all")
+public class DtoTestBeanDto implements IDto, Serializable, PropertyChangeListener {
+ private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this);
+
+ @Dispose
+ private boolean disposed;
+
+ private String foo;
+
+ @DomainReference
+ private DtoTestChildCrossRefDto crossRefChild;
+
+ public DtoTestBeanDto() {
+ installLazyCollections();
+ }
+
+ /**
+ * Installs lazy collection resolving for entity {@link DtoTestBean} to the dto {@link DtoTestBeanDto}.
+ *
+ */
+ protected void installLazyCollections() {
+
+ }
+
+ /**
+ * @return true, if the object is disposed.
+ * Disposed means, that it is prepared for garbage collection and may not be used anymore.
+ * Accessing objects that are already disposed will cause runtime exceptions.
+ *
+ */
+ public boolean isDisposed() {
+ return this.disposed;
+ }
+
+ /**
+ * @see PropertyChangeSupport#addPropertyChangeListener(PropertyChangeListener)
+ */
+ public void addPropertyChangeListener(final PropertyChangeListener listener) {
+ propertyChangeSupport.addPropertyChangeListener(listener);
+ }
+
+ /**
+ * @see PropertyChangeSupport#addPropertyChangeListener(String, PropertyChangeListener)
+ */
+ public void addPropertyChangeListener(final String propertyName, final PropertyChangeListener listener) {
+ propertyChangeSupport.addPropertyChangeListener(propertyName, listener);
+ }
+
+ /**
+ * @see PropertyChangeSupport#removePropertyChangeListener(PropertyChangeListener)
+ */
+ public void removePropertyChangeListener(final PropertyChangeListener listener) {
+ propertyChangeSupport.removePropertyChangeListener(listener);
+ }
+
+ /**
+ * @see PropertyChangeSupport#removePropertyChangeListener(String, PropertyChangeListener)
+ */
+ public void removePropertyChangeListener(final String propertyName, final PropertyChangeListener listener) {
+ propertyChangeSupport.removePropertyChangeListener(propertyName, listener);
+ }
+
+ /**
+ * @see PropertyChangeSupport#firePropertyChange(String, Object, Object)
+ */
+ public void firePropertyChange(final String propertyName, final Object oldValue, final Object newValue) {
+ propertyChangeSupport.firePropertyChange(propertyName, oldValue, newValue);
+ }
+
+ /**
+ * Checks whether the object is disposed.
+ * @throws RuntimeException if the object is disposed.
+ */
+ private void checkDisposed() {
+ if (isDisposed()) {
+ throw new RuntimeException("Object already disposed: " + this);
+ }
+ }
+
+ /**
+ * Calling dispose will destroy that instance. The internal state will be
+ * set to 'disposed' and methods of that object must not be used anymore.
+ * Each call will result in runtime exceptions.<br/>
+ * If this object keeps composition containments, these will be disposed too.
+ * So the whole composition containment tree will be disposed on calling this method.
+ */
+ @Dispose
+ public void dispose() {
+ if (isDisposed()) {
+ return;
+ }
+ firePropertyChange("disposed", this.disposed, this.disposed = true);
+ }
+
+ /**
+ * Returns the foo property or <code>null</code> if not present.
+ */
+ public String getFoo() {
+ return this.foo;
+ }
+
+ /**
+ * Sets the <code>foo</code> property to this instance.
+ *
+ * @param foo - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setFoo(final String foo) {
+ firePropertyChange("foo", this.foo, this.foo = foo );
+ }
+
+ /**
+ * Returns the crossRefChild property or <code>null</code> if not present.
+ */
+ public DtoTestChildCrossRefDto getCrossRefChild() {
+ return this.crossRefChild;
+ }
+
+ /**
+ * Sets the <code>crossRefChild</code> property to this instance.
+ *
+ * @param crossRefChild - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setCrossRefChild(final DtoTestChildCrossRefDto crossRefChild) {
+ checkDisposed();
+ firePropertyChange("crossRefChild", this.crossRefChild, this.crossRefChild = crossRefChild);
+ }
+
+ public void propertyChange(final java.beans.PropertyChangeEvent event) {
+ Object source = event.getSource();
+
+ // forward the event from embeddable beans to all listeners. So the parent of the embeddable
+ // bean will become notified and its dirty state can be handled properly
+ {
+ // no super class available to forward event
+ }
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/DtoTestChildContainmentDto.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/DtoTestChildContainmentDto.java
new file mode 100644
index 0000000..255f3aa
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/DtoTestChildContainmentDto.java
@@ -0,0 +1,100 @@
+package org.osbp.tests.dtos;
+
+import java.beans.PropertyChangeListener;
+import java.io.Serializable;
+import org.eclipse.osbp.dsl.common.datatypes.IDto;
+import org.eclipse.osbp.runtime.common.annotations.Dispose;
+import org.eclipse.osbp.runtime.common.annotations.DomainReference;
+import org.osbp.tests.dtos.BaseUUIDDto;
+import org.osbp.tests.dtos.DtoTestParentDto;
+
+@SuppressWarnings("all")
+public class DtoTestChildContainmentDto extends BaseUUIDDto implements IDto, Serializable, PropertyChangeListener {
+ @DomainReference
+ private DtoTestParentDto container;
+
+ public DtoTestChildContainmentDto() {
+ installLazyCollections();
+ }
+
+ /**
+ * Installs lazy collection resolving for entity {@link DtoTestChildContainment} to the dto {@link DtoTestChildContainmentDto}.
+ *
+ */
+ protected void installLazyCollections() {
+ super.installLazyCollections();
+ }
+
+ /**
+ * Checks whether the object is disposed.
+ * @throws RuntimeException if the object is disposed.
+ */
+ private void checkDisposed() {
+ if (isDisposed()) {
+ throw new RuntimeException("Object already disposed: " + this);
+ }
+ }
+
+ /**
+ * Calling dispose will destroy that instance. The internal state will be
+ * set to 'disposed' and methods of that object must not be used anymore.
+ * Each call will result in runtime exceptions.<br/>
+ * If this object keeps composition containments, these will be disposed too.
+ * So the whole composition containment tree will be disposed on calling this method.
+ */
+ @Dispose
+ public void dispose() {
+ if (isDisposed()) {
+ return;
+ }
+ super.dispose();
+ }
+
+ /**
+ * Returns the container property or <code>null</code> if not present.
+ */
+ public DtoTestParentDto getContainer() {
+ return this.container;
+ }
+
+ /**
+ * Sets the <code>container</code> property to this instance.
+ * Since the reference has an opposite reference, the opposite <code>DtoTestParentDto#
+ * containmentChilds</code> of the <code>container</code> will be handled automatically and no
+ * further coding is required to keep them in sync.<p>
+ * See {@link DtoTestParentDto#setContainmentChilds(DtoTestParentDto)
+ *
+ * @param container - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setContainer(final DtoTestParentDto container) {
+ checkDisposed();
+ if (this.container != null) {
+ this.container.internalRemoveFromContainmentChilds(this);
+ }
+
+ internalSetContainer(container);
+
+ if (this.container != null) {
+ this.container.internalAddToContainmentChilds(this);
+ }
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalSetContainer(final DtoTestParentDto container) {
+ firePropertyChange("container", this.container, this.container = container);
+ }
+
+ public void propertyChange(final java.beans.PropertyChangeEvent event) {
+ Object source = event.getSource();
+
+ // forward the event from embeddable beans to all listeners. So the parent of the embeddable
+ // bean will become notified and its dirty state can be handled properly
+ {
+ super.propertyChange(event);
+ }
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/DtoTestChildCrossRefDto.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/DtoTestChildCrossRefDto.java
new file mode 100644
index 0000000..fb3f583
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/DtoTestChildCrossRefDto.java
@@ -0,0 +1,100 @@
+package org.osbp.tests.dtos;
+
+import java.beans.PropertyChangeListener;
+import java.io.Serializable;
+import org.eclipse.osbp.dsl.common.datatypes.IDto;
+import org.eclipse.osbp.runtime.common.annotations.Dispose;
+import org.eclipse.osbp.runtime.common.annotations.DomainReference;
+import org.osbp.tests.dtos.BaseUUIDDto;
+import org.osbp.tests.dtos.DtoTestParentDto;
+
+@SuppressWarnings("all")
+public class DtoTestChildCrossRefDto extends BaseUUIDDto implements IDto, Serializable, PropertyChangeListener {
+ @DomainReference
+ private DtoTestParentDto container;
+
+ public DtoTestChildCrossRefDto() {
+ installLazyCollections();
+ }
+
+ /**
+ * Installs lazy collection resolving for entity {@link DtoTestChildCrossRef} to the dto {@link DtoTestChildCrossRefDto}.
+ *
+ */
+ protected void installLazyCollections() {
+ super.installLazyCollections();
+ }
+
+ /**
+ * Checks whether the object is disposed.
+ * @throws RuntimeException if the object is disposed.
+ */
+ private void checkDisposed() {
+ if (isDisposed()) {
+ throw new RuntimeException("Object already disposed: " + this);
+ }
+ }
+
+ /**
+ * Calling dispose will destroy that instance. The internal state will be
+ * set to 'disposed' and methods of that object must not be used anymore.
+ * Each call will result in runtime exceptions.<br/>
+ * If this object keeps composition containments, these will be disposed too.
+ * So the whole composition containment tree will be disposed on calling this method.
+ */
+ @Dispose
+ public void dispose() {
+ if (isDisposed()) {
+ return;
+ }
+ super.dispose();
+ }
+
+ /**
+ * Returns the container property or <code>null</code> if not present.
+ */
+ public DtoTestParentDto getContainer() {
+ return this.container;
+ }
+
+ /**
+ * Sets the <code>container</code> property to this instance.
+ * Since the reference has an opposite reference, the opposite <code>DtoTestParentDto#
+ * crossRefChilds</code> of the <code>container</code> will be handled automatically and no
+ * further coding is required to keep them in sync.<p>
+ * See {@link DtoTestParentDto#setCrossRefChilds(DtoTestParentDto)
+ *
+ * @param container - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setContainer(final DtoTestParentDto container) {
+ checkDisposed();
+ if (this.container != null) {
+ this.container.internalRemoveFromCrossRefChilds(this);
+ }
+
+ internalSetContainer(container);
+
+ if (this.container != null) {
+ this.container.internalAddToCrossRefChilds(this);
+ }
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalSetContainer(final DtoTestParentDto container) {
+ firePropertyChange("container", this.container, this.container = container);
+ }
+
+ public void propertyChange(final java.beans.PropertyChangeEvent event) {
+ Object source = event.getSource();
+
+ // forward the event from embeddable beans to all listeners. So the parent of the embeddable
+ // bean will become notified and its dirty state can be handled properly
+ {
+ super.propertyChange(event);
+ }
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/DtoTestParentDto.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/DtoTestParentDto.java
new file mode 100644
index 0000000..92773e2
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/DtoTestParentDto.java
@@ -0,0 +1,385 @@
+package org.osbp.tests.dtos;
+
+import java.beans.PropertyChangeListener;
+import java.io.Serializable;
+import java.util.Collections;
+import java.util.List;
+import javax.validation.Valid;
+import org.eclipse.osbp.dsl.common.datatypes.IDto;
+import org.eclipse.osbp.runtime.common.annotations.Dispose;
+import org.eclipse.osbp.runtime.common.annotations.DomainReference;
+import org.osbp.tests.dtos.BaseUUIDDto;
+import org.osbp.tests.dtos.DtoTestBeanDto;
+import org.osbp.tests.dtos.DtoTestChildContainmentDto;
+import org.osbp.tests.dtos.DtoTestChildCrossRefDto;
+
+@SuppressWarnings("all")
+public class DtoTestParentDto extends BaseUUIDDto implements IDto, Serializable, PropertyChangeListener {
+ private String string;
+
+ @DomainReference
+ @Valid
+ private List<DtoTestChildContainmentDto> containmentChilds;
+
+ @DomainReference
+ private List<DtoTestChildCrossRefDto> crossRefChilds;
+
+ @DomainReference
+ private DtoTestChildCrossRefDto crossRefChild;
+
+ @Valid
+ private DtoTestBeanDto beanx;
+
+ public DtoTestParentDto() {
+ installLazyCollections();
+ }
+
+ /**
+ * Installs lazy collection resolving for entity {@link DtoTestParent} to the dto {@link DtoTestParentDto}.
+ *
+ */
+ protected void installLazyCollections() {
+ super.installLazyCollections();
+ containmentChilds = new org.eclipse.osbp.dsl.dto.lib.OppositeContainmentDtoList<>(
+ org.eclipse.osbp.dsl.dto.lib.MappingContext.getCurrent(),
+ DtoTestChildContainmentDto.class, "container.id",
+ (java.util.function.Supplier<Object> & Serializable) () -> this.getId());
+ crossRefChilds = new org.eclipse.osbp.dsl.dto.lib.OppositeDtoList<>(
+ org.eclipse.osbp.dsl.dto.lib.MappingContext.getCurrent(),
+ DtoTestChildCrossRefDto.class, "container.id",
+ (java.util.function.Supplier<Object> & Serializable) () -> this.getId());
+ }
+
+ /**
+ * Checks whether the object is disposed.
+ * @throws RuntimeException if the object is disposed.
+ */
+ private void checkDisposed() {
+ if (isDisposed()) {
+ throw new RuntimeException("Object already disposed: " + this);
+ }
+ }
+
+ /**
+ * Calling dispose will destroy that instance. The internal state will be
+ * set to 'disposed' and methods of that object must not be used anymore.
+ * Each call will result in runtime exceptions.<br/>
+ * If this object keeps composition containments, these will be disposed too.
+ * So the whole composition containment tree will be disposed on calling this method.
+ */
+ @Dispose
+ public void dispose() {
+ if (isDisposed()) {
+ return;
+ }
+ try {
+ // Dispose all the composition references.
+ if (this.containmentChilds != null) {
+ for (DtoTestChildContainmentDto dtoTestChildContainmentDto : this.containmentChilds) {
+ dtoTestChildContainmentDto.dispose();
+ }
+ this.containmentChilds = null;
+ }
+
+ }
+ finally {
+ super.dispose();
+ }
+
+ }
+
+ /**
+ * Returns the string property or <code>null</code> if not present.
+ */
+ public String getString() {
+ return this.string;
+ }
+
+ /**
+ * Sets the <code>string</code> property to this instance.
+ *
+ * @param string - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setString(final String string) {
+ firePropertyChange("string", this.string, this.string = string );
+ }
+
+ /**
+ * Returns an unmodifiable list of containmentChilds.
+ */
+ public List<DtoTestChildContainmentDto> getContainmentChilds() {
+ return Collections.unmodifiableList(internalGetContainmentChilds());
+ }
+
+ /**
+ * Returns the list of <code>DtoTestChildContainmentDto</code>s thereby lazy initializing it. For internal use only!
+ *
+ * @return list - the resulting list
+ *
+ */
+ public List<DtoTestChildContainmentDto> internalGetContainmentChilds() {
+ if (this.containmentChilds == null) {
+ this.containmentChilds = new java.util.ArrayList<DtoTestChildContainmentDto>();
+ }
+ return this.containmentChilds;
+ }
+
+ /**
+ * Adds the given dtoTestChildContainmentDto to this object. <p>
+ * Since the reference is a composition reference, the opposite reference <code>DtoTestChildContainmentDto#container</code> of the <code>dtoTestChildContainmentDto</code> will be handled automatically and no further coding is required to keep them in sync.<p>
+ * See {@link DtoTestChildContainmentDto#setContainer(DtoTestChildContainmentDto)}.
+ *
+ * @param dtoTestChildContainmentDto - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void addToContainmentChilds(final DtoTestChildContainmentDto dtoTestChildContainmentDto) {
+ checkDisposed();
+
+ dtoTestChildContainmentDto.setContainer(this);
+ }
+
+ /**
+ * Removes the given dtoTestChildContainmentDto from this object. <p>
+ *
+ * @param dtoTestChildContainmentDto - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void removeFromContainmentChilds(final DtoTestChildContainmentDto dtoTestChildContainmentDto) {
+ checkDisposed();
+
+ dtoTestChildContainmentDto.setContainer(null);
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalAddToContainmentChilds(final DtoTestChildContainmentDto dtoTestChildContainmentDto) {
+
+ if(!internalGetContainmentChilds().contains(dtoTestChildContainmentDto)) {
+ if(!org.eclipse.osbp.dsl.dto.lib.MappingContext.isMappingMode()) {
+ // collections will become resolved! We need to send a delta notification.
+ List<DtoTestChildContainmentDto> oldList = new java.util.ArrayList<>(internalGetContainmentChilds());
+ internalGetContainmentChilds().add(dtoTestChildContainmentDto);
+ firePropertyChange("containmentChilds", oldList, internalGetContainmentChilds());
+ } else {
+ // in mapping mode, we do NOT resolve any collection
+ internalGetContainmentChilds().add(dtoTestChildContainmentDto);
+ }
+ }
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalRemoveFromContainmentChilds(final DtoTestChildContainmentDto dtoTestChildContainmentDto) {
+ if(!org.eclipse.osbp.dsl.dto.lib.MappingContext.isMappingMode()) {
+ // collections will become resolved! We need to send a delta notification.
+ List<DtoTestChildContainmentDto> oldList = new java.util.ArrayList<>(internalGetContainmentChilds());
+ internalGetContainmentChilds().remove(dtoTestChildContainmentDto);
+ firePropertyChange("containmentChilds", oldList, internalGetContainmentChilds());
+ }else{
+ // in mapping mode, we do NOT resolve any collection
+ internalGetContainmentChilds().remove(dtoTestChildContainmentDto);
+ }
+ }
+
+ /**
+ * Sets the <code>containmentChilds</code> property to this instance.
+ * Since the reference has an opposite reference, the opposite <code>DtoTestChildContainmentDto#
+ * container</code> of the <code>containmentChilds</code> will be handled automatically and no
+ * further coding is required to keep them in sync.<p>
+ * See {@link DtoTestChildContainmentDto#setContainer(DtoTestChildContainmentDto)
+ *
+ * @param containmentChilds - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setContainmentChilds(final List<DtoTestChildContainmentDto> containmentChilds) {
+ checkDisposed();
+ for (DtoTestChildContainmentDto dto : internalGetContainmentChilds().toArray(new DtoTestChildContainmentDto[this.containmentChilds.size()])) {
+ removeFromContainmentChilds(dto);
+ }
+
+ if(containmentChilds == null) {
+ return;
+ }
+
+ for (DtoTestChildContainmentDto dto : containmentChilds) {
+ addToContainmentChilds(dto);
+ }
+ }
+
+ /**
+ * Returns an unmodifiable list of crossRefChilds.
+ */
+ public List<DtoTestChildCrossRefDto> getCrossRefChilds() {
+ return Collections.unmodifiableList(internalGetCrossRefChilds());
+ }
+
+ /**
+ * Returns the list of <code>DtoTestChildCrossRefDto</code>s thereby lazy initializing it. For internal use only!
+ *
+ * @return list - the resulting list
+ *
+ */
+ public List<DtoTestChildCrossRefDto> internalGetCrossRefChilds() {
+ if (this.crossRefChilds == null) {
+ this.crossRefChilds = new java.util.ArrayList<DtoTestChildCrossRefDto>();
+ }
+ return this.crossRefChilds;
+ }
+
+ /**
+ * Adds the given dtoTestChildCrossRefDto to this object. <p>
+ * Since the reference is a composition reference, the opposite reference <code>DtoTestChildCrossRefDto#container</code> of the <code>dtoTestChildCrossRefDto</code> will be handled automatically and no further coding is required to keep them in sync.<p>
+ * See {@link DtoTestChildCrossRefDto#setContainer(DtoTestChildCrossRefDto)}.
+ *
+ * @param dtoTestChildCrossRefDto - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void addToCrossRefChilds(final DtoTestChildCrossRefDto dtoTestChildCrossRefDto) {
+ checkDisposed();
+
+ dtoTestChildCrossRefDto.setContainer(this);
+ }
+
+ /**
+ * Removes the given dtoTestChildCrossRefDto from this object. <p>
+ *
+ * @param dtoTestChildCrossRefDto - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void removeFromCrossRefChilds(final DtoTestChildCrossRefDto dtoTestChildCrossRefDto) {
+ checkDisposed();
+
+ dtoTestChildCrossRefDto.setContainer(null);
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalAddToCrossRefChilds(final DtoTestChildCrossRefDto dtoTestChildCrossRefDto) {
+
+ if(!internalGetCrossRefChilds().contains(dtoTestChildCrossRefDto)) {
+ if(!org.eclipse.osbp.dsl.dto.lib.MappingContext.isMappingMode()) {
+ // collections will become resolved! We need to send a delta notification.
+ List<DtoTestChildCrossRefDto> oldList = new java.util.ArrayList<>(internalGetCrossRefChilds());
+ internalGetCrossRefChilds().add(dtoTestChildCrossRefDto);
+ firePropertyChange("crossRefChilds", oldList, internalGetCrossRefChilds());
+ } else {
+ // in mapping mode, we do NOT resolve any collection
+ internalGetCrossRefChilds().add(dtoTestChildCrossRefDto);
+ }
+ }
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalRemoveFromCrossRefChilds(final DtoTestChildCrossRefDto dtoTestChildCrossRefDto) {
+ if(!org.eclipse.osbp.dsl.dto.lib.MappingContext.isMappingMode()) {
+ // collections will become resolved! We need to send a delta notification.
+ List<DtoTestChildCrossRefDto> oldList = new java.util.ArrayList<>(internalGetCrossRefChilds());
+ internalGetCrossRefChilds().remove(dtoTestChildCrossRefDto);
+ firePropertyChange("crossRefChilds", oldList, internalGetCrossRefChilds());
+ }else{
+ // in mapping mode, we do NOT resolve any collection
+ internalGetCrossRefChilds().remove(dtoTestChildCrossRefDto);
+ }
+ }
+
+ /**
+ * Sets the <code>crossRefChilds</code> property to this instance.
+ * Since the reference has an opposite reference, the opposite <code>DtoTestChildCrossRefDto#
+ * container</code> of the <code>crossRefChilds</code> will be handled automatically and no
+ * further coding is required to keep them in sync.<p>
+ * See {@link DtoTestChildCrossRefDto#setContainer(DtoTestChildCrossRefDto)
+ *
+ * @param crossRefChilds - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setCrossRefChilds(final List<DtoTestChildCrossRefDto> crossRefChilds) {
+ checkDisposed();
+ for (DtoTestChildCrossRefDto dto : internalGetCrossRefChilds().toArray(new DtoTestChildCrossRefDto[this.crossRefChilds.size()])) {
+ removeFromCrossRefChilds(dto);
+ }
+
+ if(crossRefChilds == null) {
+ return;
+ }
+
+ for (DtoTestChildCrossRefDto dto : crossRefChilds) {
+ addToCrossRefChilds(dto);
+ }
+ }
+
+ /**
+ * Returns the crossRefChild property or <code>null</code> if not present.
+ */
+ public DtoTestChildCrossRefDto getCrossRefChild() {
+ return this.crossRefChild;
+ }
+
+ /**
+ * Sets the <code>crossRefChild</code> property to this instance.
+ *
+ * @param crossRefChild - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setCrossRefChild(final DtoTestChildCrossRefDto crossRefChild) {
+ checkDisposed();
+ firePropertyChange("crossRefChild", this.crossRefChild, this.crossRefChild = crossRefChild);
+ }
+
+ /**
+ * Returns the beanx property.
+ */
+ public DtoTestBeanDto getBeanx() {
+ if(this.beanx== null){
+ this.beanx = new DtoTestBeanDto();
+ }
+ return this.beanx;
+ }
+
+ /**
+ * Sets the <code>beanx</code> property to this instance.
+ *
+ * @param beanx - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setBeanx(final DtoTestBeanDto beanx) {
+ // ensure that embedded beans will notify their parent about changes
+ // so their dirty state can be handled properly
+ if (this.beanx != null) {
+ this.beanx.removePropertyChangeListener(this);
+ }
+
+ firePropertyChange("beanx", this.beanx, this.beanx = beanx );
+
+ if (this.beanx != null) {
+ this.beanx.addPropertyChangeListener(this);
+ }
+ }
+
+ public void propertyChange(final java.beans.PropertyChangeEvent event) {
+ Object source = event.getSource();
+
+ // forward the event from embeddable beans to all listeners. So the parent of the embeddable
+ // bean will become notified and its dirty state can be handled properly
+ if(source == beanx){
+ firePropertyChange("beanx" + "_" + event.getPropertyName(), event.getOldValue(), event.getNewValue());
+ } else
+ {
+ super.propertyChange(event);
+ }
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/McustomerDto.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/McustomerDto.java
new file mode 100644
index 0000000..8ed33a0
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/McustomerDto.java
@@ -0,0 +1,760 @@
+package org.osbp.tests.dtos;
+
+import java.beans.PropertyChangeListener;
+import java.io.Serializable;
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+import javax.validation.Valid;
+import org.eclipse.osbp.dsl.common.datatypes.IDto;
+import org.eclipse.osbp.runtime.common.annotations.Dispose;
+import org.eclipse.osbp.runtime.common.annotations.DomainKey;
+import org.eclipse.osbp.runtime.common.annotations.DomainReference;
+import org.osbp.tests.dtos.BaseIDDto;
+import org.osbp.tests.dtos.CashSlipDto;
+
+@SuppressWarnings("all")
+public class McustomerDto extends BaseIDDto implements IDto, Serializable, PropertyChangeListener {
+ private long account_num;
+
+ private String lname;
+
+ private String fname;
+
+ private String mi;
+
+ private String address1;
+
+ private String address2;
+
+ private String address3;
+
+ private String address4;
+
+ private String city;
+
+ private String state_province;
+
+ private String postal_code;
+
+ private String country;
+
+ private String phone1;
+
+ private String phone2;
+
+ @Valid
+ private Date birthdate;
+
+ private String marital_status;
+
+ private String yearly_income;
+
+ private String gender;
+
+ private int total_children;
+
+ private int num_children_at_home;
+
+ private String education;
+
+ private String date_accnt_opened;
+
+ private String member_card;
+
+ private String occupation;
+
+ private String houseowner;
+
+ private int num_cars_owned;
+
+ @DomainKey
+ private String fullname;
+
+ private String test;
+
+ @DomainReference
+ private List<CashSlipDto> slips;
+
+ private String foo;
+
+ public McustomerDto() {
+ installLazyCollections();
+ }
+
+ /**
+ * Installs lazy collection resolving for entity {@link Mcustomer} to the dto {@link McustomerDto}.
+ *
+ */
+ protected void installLazyCollections() {
+ super.installLazyCollections();
+ slips = new org.eclipse.osbp.dsl.dto.lib.OppositeDtoList<>(
+ org.eclipse.osbp.dsl.dto.lib.MappingContext.getCurrent(),
+ CashSlipDto.class, "customer.id",
+ (java.util.function.Supplier<Object> & Serializable) () -> this.getId());
+ }
+
+ /**
+ * Checks whether the object is disposed.
+ * @throws RuntimeException if the object is disposed.
+ */
+ private void checkDisposed() {
+ if (isDisposed()) {
+ throw new RuntimeException("Object already disposed: " + this);
+ }
+ }
+
+ /**
+ * Calling dispose will destroy that instance. The internal state will be
+ * set to 'disposed' and methods of that object must not be used anymore.
+ * Each call will result in runtime exceptions.<br/>
+ * If this object keeps composition containments, these will be disposed too.
+ * So the whole composition containment tree will be disposed on calling this method.
+ */
+ @Dispose
+ public void dispose() {
+ if (isDisposed()) {
+ return;
+ }
+ super.dispose();
+ }
+
+ /**
+ * Returns the account_num property or <code>null</code> if not present.
+ */
+ public long getAccount_num() {
+ return this.account_num;
+ }
+
+ /**
+ * Sets the <code>account_num</code> property to this instance.
+ *
+ * @param account_num - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setAccount_num(final long account_num) {
+ firePropertyChange("account_num", this.account_num, this.account_num = account_num );
+ }
+
+ /**
+ * Returns the lname property or <code>null</code> if not present.
+ */
+ public String getLname() {
+ return this.lname;
+ }
+
+ /**
+ * Sets the <code>lname</code> property to this instance.
+ *
+ * @param lname - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setLname(final String lname) {
+ firePropertyChange("lname", this.lname, this.lname = lname );
+ }
+
+ /**
+ * Returns the fname property or <code>null</code> if not present.
+ */
+ public String getFname() {
+ return this.fname;
+ }
+
+ /**
+ * Sets the <code>fname</code> property to this instance.
+ *
+ * @param fname - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setFname(final String fname) {
+ firePropertyChange("fname", this.fname, this.fname = fname );
+ }
+
+ /**
+ * Returns the mi property or <code>null</code> if not present.
+ */
+ public String getMi() {
+ return this.mi;
+ }
+
+ /**
+ * Sets the <code>mi</code> property to this instance.
+ *
+ * @param mi - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setMi(final String mi) {
+ firePropertyChange("mi", this.mi, this.mi = mi );
+ }
+
+ /**
+ * Returns the address1 property or <code>null</code> if not present.
+ */
+ public String getAddress1() {
+ return this.address1;
+ }
+
+ /**
+ * Sets the <code>address1</code> property to this instance.
+ *
+ * @param address1 - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setAddress1(final String address1) {
+ firePropertyChange("address1", this.address1, this.address1 = address1 );
+ }
+
+ /**
+ * Returns the address2 property or <code>null</code> if not present.
+ */
+ public String getAddress2() {
+ return this.address2;
+ }
+
+ /**
+ * Sets the <code>address2</code> property to this instance.
+ *
+ * @param address2 - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setAddress2(final String address2) {
+ firePropertyChange("address2", this.address2, this.address2 = address2 );
+ }
+
+ /**
+ * Returns the address3 property or <code>null</code> if not present.
+ */
+ public String getAddress3() {
+ return this.address3;
+ }
+
+ /**
+ * Sets the <code>address3</code> property to this instance.
+ *
+ * @param address3 - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setAddress3(final String address3) {
+ firePropertyChange("address3", this.address3, this.address3 = address3 );
+ }
+
+ /**
+ * Returns the address4 property or <code>null</code> if not present.
+ */
+ public String getAddress4() {
+ return this.address4;
+ }
+
+ /**
+ * Sets the <code>address4</code> property to this instance.
+ *
+ * @param address4 - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setAddress4(final String address4) {
+ firePropertyChange("address4", this.address4, this.address4 = address4 );
+ }
+
+ /**
+ * Returns the city property or <code>null</code> if not present.
+ */
+ public String getCity() {
+ return this.city;
+ }
+
+ /**
+ * Sets the <code>city</code> property to this instance.
+ *
+ * @param city - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setCity(final String city) {
+ firePropertyChange("city", this.city, this.city = city );
+ }
+
+ /**
+ * Returns the state_province property or <code>null</code> if not present.
+ */
+ public String getState_province() {
+ return this.state_province;
+ }
+
+ /**
+ * Sets the <code>state_province</code> property to this instance.
+ *
+ * @param state_province - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setState_province(final String state_province) {
+ firePropertyChange("state_province", this.state_province, this.state_province = state_province );
+ }
+
+ /**
+ * Returns the postal_code property or <code>null</code> if not present.
+ */
+ public String getPostal_code() {
+ return this.postal_code;
+ }
+
+ /**
+ * Sets the <code>postal_code</code> property to this instance.
+ *
+ * @param postal_code - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setPostal_code(final String postal_code) {
+ firePropertyChange("postal_code", this.postal_code, this.postal_code = postal_code );
+ }
+
+ /**
+ * Returns the country property or <code>null</code> if not present.
+ */
+ public String getCountry() {
+ return this.country;
+ }
+
+ /**
+ * Sets the <code>country</code> property to this instance.
+ *
+ * @param country - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setCountry(final String country) {
+ firePropertyChange("country", this.country, this.country = country );
+ }
+
+ /**
+ * Returns the phone1 property or <code>null</code> if not present.
+ */
+ public String getPhone1() {
+ return this.phone1;
+ }
+
+ /**
+ * Sets the <code>phone1</code> property to this instance.
+ *
+ * @param phone1 - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setPhone1(final String phone1) {
+ firePropertyChange("phone1", this.phone1, this.phone1 = phone1 );
+ }
+
+ /**
+ * Returns the phone2 property or <code>null</code> if not present.
+ */
+ public String getPhone2() {
+ return this.phone2;
+ }
+
+ /**
+ * Sets the <code>phone2</code> property to this instance.
+ *
+ * @param phone2 - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setPhone2(final String phone2) {
+ firePropertyChange("phone2", this.phone2, this.phone2 = phone2 );
+ }
+
+ /**
+ * Returns the birthdate property or <code>null</code> if not present.
+ */
+ public Date getBirthdate() {
+ return this.birthdate;
+ }
+
+ /**
+ * Sets the <code>birthdate</code> property to this instance.
+ *
+ * @param birthdate - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setBirthdate(final Date birthdate) {
+ firePropertyChange("birthdate", this.birthdate, this.birthdate = birthdate );
+ }
+
+ /**
+ * Returns the marital_status property or <code>null</code> if not present.
+ */
+ public String getMarital_status() {
+ return this.marital_status;
+ }
+
+ /**
+ * Sets the <code>marital_status</code> property to this instance.
+ *
+ * @param marital_status - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setMarital_status(final String marital_status) {
+ firePropertyChange("marital_status", this.marital_status, this.marital_status = marital_status );
+ }
+
+ /**
+ * Returns the yearly_income property or <code>null</code> if not present.
+ */
+ public String getYearly_income() {
+ return this.yearly_income;
+ }
+
+ /**
+ * Sets the <code>yearly_income</code> property to this instance.
+ *
+ * @param yearly_income - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setYearly_income(final String yearly_income) {
+ firePropertyChange("yearly_income", this.yearly_income, this.yearly_income = yearly_income );
+ }
+
+ /**
+ * Returns the gender property or <code>null</code> if not present.
+ */
+ public String getGender() {
+ return this.gender;
+ }
+
+ /**
+ * Sets the <code>gender</code> property to this instance.
+ *
+ * @param gender - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setGender(final String gender) {
+ firePropertyChange("gender", this.gender, this.gender = gender );
+ }
+
+ /**
+ * Returns the total_children property or <code>null</code> if not present.
+ */
+ public int getTotal_children() {
+ return this.total_children;
+ }
+
+ /**
+ * Sets the <code>total_children</code> property to this instance.
+ *
+ * @param total_children - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setTotal_children(final int total_children) {
+ firePropertyChange("total_children", this.total_children, this.total_children = total_children );
+ }
+
+ /**
+ * Returns the num_children_at_home property or <code>null</code> if not present.
+ */
+ public int getNum_children_at_home() {
+ return this.num_children_at_home;
+ }
+
+ /**
+ * Sets the <code>num_children_at_home</code> property to this instance.
+ *
+ * @param num_children_at_home - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setNum_children_at_home(final int num_children_at_home) {
+ firePropertyChange("num_children_at_home", this.num_children_at_home, this.num_children_at_home = num_children_at_home );
+ }
+
+ /**
+ * Returns the education property or <code>null</code> if not present.
+ */
+ public String getEducation() {
+ return this.education;
+ }
+
+ /**
+ * Sets the <code>education</code> property to this instance.
+ *
+ * @param education - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setEducation(final String education) {
+ firePropertyChange("education", this.education, this.education = education );
+ }
+
+ /**
+ * Returns the date_accnt_opened property or <code>null</code> if not present.
+ */
+ public String getDate_accnt_opened() {
+ return this.date_accnt_opened;
+ }
+
+ /**
+ * Sets the <code>date_accnt_opened</code> property to this instance.
+ *
+ * @param date_accnt_opened - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setDate_accnt_opened(final String date_accnt_opened) {
+ firePropertyChange("date_accnt_opened", this.date_accnt_opened, this.date_accnt_opened = date_accnt_opened );
+ }
+
+ /**
+ * Returns the member_card property or <code>null</code> if not present.
+ */
+ public String getMember_card() {
+ return this.member_card;
+ }
+
+ /**
+ * Sets the <code>member_card</code> property to this instance.
+ *
+ * @param member_card - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setMember_card(final String member_card) {
+ firePropertyChange("member_card", this.member_card, this.member_card = member_card );
+ }
+
+ /**
+ * Returns the occupation property or <code>null</code> if not present.
+ */
+ public String getOccupation() {
+ return this.occupation;
+ }
+
+ /**
+ * Sets the <code>occupation</code> property to this instance.
+ *
+ * @param occupation - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setOccupation(final String occupation) {
+ firePropertyChange("occupation", this.occupation, this.occupation = occupation );
+ }
+
+ /**
+ * Returns the houseowner property or <code>null</code> if not present.
+ */
+ public String getHouseowner() {
+ return this.houseowner;
+ }
+
+ /**
+ * Sets the <code>houseowner</code> property to this instance.
+ *
+ * @param houseowner - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setHouseowner(final String houseowner) {
+ firePropertyChange("houseowner", this.houseowner, this.houseowner = houseowner );
+ }
+
+ /**
+ * Returns the num_cars_owned property or <code>null</code> if not present.
+ */
+ public int getNum_cars_owned() {
+ return this.num_cars_owned;
+ }
+
+ /**
+ * Sets the <code>num_cars_owned</code> property to this instance.
+ *
+ * @param num_cars_owned - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setNum_cars_owned(final int num_cars_owned) {
+ firePropertyChange("num_cars_owned", this.num_cars_owned, this.num_cars_owned = num_cars_owned );
+ }
+
+ /**
+ * Returns the fullname property or <code>null</code> if not present.
+ */
+ public String getFullname() {
+ return this.fullname;
+ }
+
+ /**
+ * Sets the <code>fullname</code> property to this instance.
+ *
+ * @param fullname - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setFullname(final String fullname) {
+ firePropertyChange("fullname", this.fullname, this.fullname = fullname );
+ }
+
+ /**
+ * Returns the test property or <code>null</code> if not present.
+ */
+ public String getTest() {
+ return this.test;
+ }
+
+ /**
+ * Sets the <code>test</code> property to this instance.
+ *
+ * @param test - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setTest(final String test) {
+ firePropertyChange("test", this.test, this.test = test );
+ }
+
+ /**
+ * Returns an unmodifiable list of slips.
+ */
+ public List<CashSlipDto> getSlips() {
+ return Collections.unmodifiableList(internalGetSlips());
+ }
+
+ /**
+ * Returns the list of <code>CashSlipDto</code>s thereby lazy initializing it. For internal use only!
+ *
+ * @return list - the resulting list
+ *
+ */
+ public List<CashSlipDto> internalGetSlips() {
+ if (this.slips == null) {
+ this.slips = new java.util.ArrayList<CashSlipDto>();
+ }
+ return this.slips;
+ }
+
+ /**
+ * Adds the given cashSlipDto to this object. <p>
+ * Since the reference is a composition reference, the opposite reference <code>CashSlipDto#customer</code> of the <code>cashSlipDto</code> will be handled automatically and no further coding is required to keep them in sync.<p>
+ * See {@link CashSlipDto#setCustomer(CashSlipDto)}.
+ *
+ * @param cashSlipDto - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void addToSlips(final CashSlipDto cashSlipDto) {
+ checkDisposed();
+
+ cashSlipDto.setCustomer(this);
+ }
+
+ /**
+ * Removes the given cashSlipDto from this object. <p>
+ *
+ * @param cashSlipDto - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void removeFromSlips(final CashSlipDto cashSlipDto) {
+ checkDisposed();
+
+ cashSlipDto.setCustomer(null);
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalAddToSlips(final CashSlipDto cashSlipDto) {
+
+ if(!internalGetSlips().contains(cashSlipDto)) {
+ if(!org.eclipse.osbp.dsl.dto.lib.MappingContext.isMappingMode()) {
+ // collections will become resolved! We need to send a delta notification.
+ List<CashSlipDto> oldList = new java.util.ArrayList<>(internalGetSlips());
+ internalGetSlips().add(cashSlipDto);
+ firePropertyChange("slips", oldList, internalGetSlips());
+ } else {
+ // in mapping mode, we do NOT resolve any collection
+ internalGetSlips().add(cashSlipDto);
+ }
+ }
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalRemoveFromSlips(final CashSlipDto cashSlipDto) {
+ if(!org.eclipse.osbp.dsl.dto.lib.MappingContext.isMappingMode()) {
+ // collections will become resolved! We need to send a delta notification.
+ List<CashSlipDto> oldList = new java.util.ArrayList<>(internalGetSlips());
+ internalGetSlips().remove(cashSlipDto);
+ firePropertyChange("slips", oldList, internalGetSlips());
+ }else{
+ // in mapping mode, we do NOT resolve any collection
+ internalGetSlips().remove(cashSlipDto);
+ }
+ }
+
+ /**
+ * Sets the <code>slips</code> property to this instance.
+ * Since the reference has an opposite reference, the opposite <code>CashSlipDto#
+ * customer</code> of the <code>slips</code> will be handled automatically and no
+ * further coding is required to keep them in sync.<p>
+ * See {@link CashSlipDto#setCustomer(CashSlipDto)
+ *
+ * @param slips - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setSlips(final List<CashSlipDto> slips) {
+ checkDisposed();
+ for (CashSlipDto dto : internalGetSlips().toArray(new CashSlipDto[this.slips.size()])) {
+ removeFromSlips(dto);
+ }
+
+ if(slips == null) {
+ return;
+ }
+
+ for (CashSlipDto dto : slips) {
+ addToSlips(dto);
+ }
+ }
+
+ /**
+ * Returns the foo property or <code>null</code> if not present.
+ */
+ public String getFoo() {
+ return this.foo;
+ }
+
+ /**
+ * Sets the <code>foo</code> property to this instance.
+ *
+ * @param foo - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setFoo(final String foo) {
+ firePropertyChange("foo", this.foo, this.foo = foo );
+ }
+
+ public void propertyChange(final java.beans.PropertyChangeEvent event) {
+ Object source = event.getSource();
+
+ // forward the event from embeddable beans to all listeners. So the parent of the embeddable
+ // bean will become notified and its dirty state can be handled properly
+ {
+ super.propertyChange(event);
+ }
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/mapper/AddressDtoMapper.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/mapper/AddressDtoMapper.java
new file mode 100644
index 0000000..02dbc5f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/mapper/AddressDtoMapper.java
@@ -0,0 +1,467 @@
+package org.osbp.tests.dtos.mapper;
+
+import org.eclipse.osbp.dsl.dto.lib.MappingContext;
+import org.osbp.tests.dtos.AddressDto;
+import org.osbp.tests.dtos.CompanyDto;
+import org.osbp.tests.dtos.DepartmentDto;
+import org.osbp.tests.dtos.mapper.BaseUUIDDtoMapper;
+import org.osbp.tests.entities.Address;
+import org.osbp.tests.entities.Company;
+import org.osbp.tests.entities.Department;
+
+/**
+ * This class maps the dto {@link AddressDto} to and from the entity {@link Address}.
+ *
+ */
+@SuppressWarnings("all")
+public class AddressDtoMapper<DTO extends AddressDto, ENTITY extends Address> extends BaseUUIDDtoMapper<DTO, ENTITY> {
+ /**
+ * Creates a new instance of the entity
+ */
+ public Address createEntity() {
+ return new Address();
+ }
+
+ /**
+ * Creates a new instance of the dto
+ */
+ public AddressDto createDto() {
+ return new AddressDto();
+ }
+
+ /**
+ * Maps the entity {@link Address} to the dto {@link AddressDto}.
+ *
+ * @param dto - The target dto
+ * @param entity - The source entity
+ * @param context - The context to get information about depth,...
+ *
+ */
+ public void mapToDTO(final AddressDto dto, final Address entity, final MappingContext context) {
+ if(context == null){
+ throw new IllegalArgumentException("Please pass a context!");
+ }
+ context.register(createDtoHash(entity), dto);
+
+ super.mapToDTO(dto, entity, context);
+
+ dto.setCompany(toDto_company(entity, context));
+ dto.setDepartment(toDto_department(entity, context));
+ dto.setAddress1(toDto_address1(entity, context));
+ dto.setAddress2(toDto_address2(entity, context));
+ dto.setCity(toDto_city(entity, context));
+ dto.setState_province(toDto_state_province(entity, context));
+ dto.setPostal_code(toDto_postal_code(entity, context));
+ dto.setCountry(toDto_country(entity, context));
+ dto.setEmail(toDto_email(entity, context));
+ dto.setLandline(toDto_landline(entity, context));
+ dto.setMobile(toDto_mobile(entity, context));
+ }
+
+ /**
+ * Maps the dto {@link AddressDto} to the entity {@link Address}.
+ *
+ * @param dto - The source dto
+ * @param entity - The target entity
+ * @param context - The context to get information about depth,...
+ *
+ */
+ public void mapToEntity(final AddressDto dto, final Address entity, final MappingContext context) {
+ if(context == null){
+ throw new IllegalArgumentException("Please pass a context!");
+ }
+
+ context.register(createEntityHash(dto), entity);
+ context.registerMappingRoot(createEntityHash(dto), dto);
+ super.mapToEntity(dto, entity, context);
+
+ entity.setCompany(toEntity_company(dto, entity, context));
+ entity.setDepartment(toEntity_department(dto, entity, context));
+ entity.setAddress1(toEntity_address1(dto, entity, context));
+ entity.setAddress2(toEntity_address2(dto, entity, context));
+ entity.setCity(toEntity_city(dto, entity, context));
+ entity.setState_province(toEntity_state_province(dto, entity, context));
+ entity.setPostal_code(toEntity_postal_code(dto, entity, context));
+ entity.setCountry(toEntity_country(dto, entity, context));
+ entity.setEmail(toEntity_email(dto, entity, context));
+ entity.setLandline(toEntity_landline(dto, entity, context));
+ entity.setMobile(toEntity_mobile(dto, entity, context));
+ }
+
+ /**
+ * Maps the property company from the given entity to the dto.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped dto
+ *
+ */
+ protected CompanyDto toDto_company(final Address in, final MappingContext context) {
+ if(in.getCompany() != null) {
+ // find a mapper that knows how to map the concrete input type.
+ org.eclipse.osbp.dsl.dto.lib.IMapper<CompanyDto, Company> mapper = (org.eclipse.osbp.dsl.dto.lib.IMapper<CompanyDto, Company>) getToDtoMapper(CompanyDto.class, in.getCompany().getClass());
+ if(mapper == null) {
+ throw new IllegalStateException("Mapper must not be null!");
+ }
+ CompanyDto dto = null;
+ dto = context.get(mapper.createDtoHash(in.getCompany()));
+ if(dto != null) {
+ if(context.isRefresh()){
+ mapper.mapToDTO(dto, in.getCompany(), context);
+ }
+ return dto;
+ }
+
+ context.increaseLevel();
+ dto = mapper.createDto();
+ mapper.mapToDTO(dto, in.getCompany(), context);
+ context.decreaseLevel();
+ return dto;
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Maps the property company from the given dto to the entity.
+ *
+ * @param in - The source dto
+ * @param parentEntity - The parent entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped entity
+ *
+ */
+ protected Company toEntity_company(final AddressDto in, final Address parentEntity, final MappingContext context) {
+ if(in.getCompany() != null) {
+ // find a mapper that knows how to map the concrete input type.
+ org.eclipse.osbp.dsl.dto.lib.IMapper<CompanyDto, Company> mapper = (org.eclipse.osbp.dsl.dto.lib.IMapper<CompanyDto, Company>) getToEntityMapper(in.getCompany().getClass(), Company.class);
+ if(mapper == null) {
+ throw new IllegalStateException("Mapper must not be null!");
+ }
+
+ Company entity = null;
+ entity = context.get(mapper.createEntityHash(in.getCompany()));
+ if(entity != null) {
+ return entity;
+ } else {
+ entity = (Company) context
+ .findEntityByEntityManager(Company.class, in.getCompany().getId());
+ if (entity != null) {
+ context.register(mapper.createEntityHash(in.getCompany()), entity);
+ return entity;
+ }
+ }
+
+ entity = mapper.createEntity();
+ mapper.mapToEntity(in.getCompany(), entity, context);
+ return entity;
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Maps the property department from the given entity to the dto.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped dto
+ *
+ */
+ protected DepartmentDto toDto_department(final Address in, final MappingContext context) {
+ if(in.getDepartment() != null) {
+ // find a mapper that knows how to map the concrete input type.
+ org.eclipse.osbp.dsl.dto.lib.IMapper<DepartmentDto, Department> mapper = (org.eclipse.osbp.dsl.dto.lib.IMapper<DepartmentDto, Department>) getToDtoMapper(DepartmentDto.class, in.getDepartment().getClass());
+ if(mapper == null) {
+ throw new IllegalStateException("Mapper must not be null!");
+ }
+ DepartmentDto dto = null;
+ dto = context.get(mapper.createDtoHash(in.getDepartment()));
+ if(dto != null) {
+ if(context.isRefresh()){
+ mapper.mapToDTO(dto, in.getDepartment(), context);
+ }
+ return dto;
+ }
+
+ context.increaseLevel();
+ dto = mapper.createDto();
+ mapper.mapToDTO(dto, in.getDepartment(), context);
+ context.decreaseLevel();
+ return dto;
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Maps the property department from the given dto to the entity.
+ *
+ * @param in - The source dto
+ * @param parentEntity - The parent entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped entity
+ *
+ */
+ protected Department toEntity_department(final AddressDto in, final Address parentEntity, final MappingContext context) {
+ if(in.getDepartment() != null) {
+ // find a mapper that knows how to map the concrete input type.
+ org.eclipse.osbp.dsl.dto.lib.IMapper<DepartmentDto, Department> mapper = (org.eclipse.osbp.dsl.dto.lib.IMapper<DepartmentDto, Department>) getToEntityMapper(in.getDepartment().getClass(), Department.class);
+ if(mapper == null) {
+ throw new IllegalStateException("Mapper must not be null!");
+ }
+
+ Department entity = null;
+ entity = context.get(mapper.createEntityHash(in.getDepartment()));
+ if(entity != null) {
+ return entity;
+ } else {
+ entity = (Department) context
+ .findEntityByEntityManager(Department.class, in.getDepartment().getId());
+ if (entity != null) {
+ context.register(mapper.createEntityHash(in.getDepartment()), entity);
+ return entity;
+ }
+ }
+
+ entity = mapper.createEntity();
+ mapper.mapToEntity(in.getDepartment(), entity, context);
+ return entity;
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Maps the property address1 from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toDto_address1(final Address in, final MappingContext context) {
+ return in.getAddress1();
+ }
+
+ /**
+ * Maps the property address1 from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toEntity_address1(final AddressDto in, final Address parentEntity, final MappingContext context) {
+ return in.getAddress1();
+ }
+
+ /**
+ * Maps the property address2 from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toDto_address2(final Address in, final MappingContext context) {
+ return in.getAddress2();
+ }
+
+ /**
+ * Maps the property address2 from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toEntity_address2(final AddressDto in, final Address parentEntity, final MappingContext context) {
+ return in.getAddress2();
+ }
+
+ /**
+ * Maps the property city from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toDto_city(final Address in, final MappingContext context) {
+ return in.getCity();
+ }
+
+ /**
+ * Maps the property city from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toEntity_city(final AddressDto in, final Address parentEntity, final MappingContext context) {
+ return in.getCity();
+ }
+
+ /**
+ * Maps the property state_province from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toDto_state_province(final Address in, final MappingContext context) {
+ return in.getState_province();
+ }
+
+ /**
+ * Maps the property state_province from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toEntity_state_province(final AddressDto in, final Address parentEntity, final MappingContext context) {
+ return in.getState_province();
+ }
+
+ /**
+ * Maps the property postal_code from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toDto_postal_code(final Address in, final MappingContext context) {
+ return in.getPostal_code();
+ }
+
+ /**
+ * Maps the property postal_code from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toEntity_postal_code(final AddressDto in, final Address parentEntity, final MappingContext context) {
+ return in.getPostal_code();
+ }
+
+ /**
+ * Maps the property country from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toDto_country(final Address in, final MappingContext context) {
+ return in.getCountry();
+ }
+
+ /**
+ * Maps the property country from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toEntity_country(final AddressDto in, final Address parentEntity, final MappingContext context) {
+ return in.getCountry();
+ }
+
+ /**
+ * Maps the property email from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toDto_email(final Address in, final MappingContext context) {
+ return in.getEmail();
+ }
+
+ /**
+ * Maps the property email from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toEntity_email(final AddressDto in, final Address parentEntity, final MappingContext context) {
+ return in.getEmail();
+ }
+
+ /**
+ * Maps the property landline from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toDto_landline(final Address in, final MappingContext context) {
+ return in.getLandline();
+ }
+
+ /**
+ * Maps the property landline from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toEntity_landline(final AddressDto in, final Address parentEntity, final MappingContext context) {
+ return in.getLandline();
+ }
+
+ /**
+ * Maps the property mobile from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toDto_mobile(final Address in, final MappingContext context) {
+ return in.getMobile();
+ }
+
+ /**
+ * Maps the property mobile from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toEntity_mobile(final AddressDto in, final Address parentEntity, final MappingContext context) {
+ return in.getMobile();
+ }
+
+ public String createDtoHash(final Object in) {
+ return org.eclipse.osbp.runtime.common.hash.HashUtil.createObjectWithIdHash(AddressDto.class, in);
+ }
+
+ public String createEntityHash(final Object in) {
+ return org.eclipse.osbp.runtime.common.hash.HashUtil.createObjectWithIdHash(Address.class, in);
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/mapper/BaseIDDtoMapper.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/mapper/BaseIDDtoMapper.java
new file mode 100644
index 0000000..35fb8e6
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/mapper/BaseIDDtoMapper.java
@@ -0,0 +1,141 @@
+package org.osbp.tests.dtos.mapper;
+
+import org.eclipse.osbp.dsl.dto.lib.IMapper;
+import org.eclipse.osbp.dsl.dto.lib.IMapperAccess;
+import org.eclipse.osbp.dsl.dto.lib.MappingContext;
+import org.osbp.tests.dtos.BaseIDDto;
+import org.osbp.tests.entities.BaseID;
+
+/**
+ * This class maps the dto {@link BaseIDDto} to and from the entity {@link BaseID}.
+ *
+ */
+@SuppressWarnings("all")
+public class BaseIDDtoMapper<DTO extends BaseIDDto, ENTITY extends BaseID> implements IMapper<DTO, ENTITY> {
+ private IMapperAccess mapperAccess;
+
+ /**
+ * Returns the mapper instance that may map between the given dto and entity. Or <code>null</code> if no mapper is available.
+ *
+ * @param dtoClass - the class of the dto that should be mapped
+ * @param entityClass - the class of the entity that should be mapped
+ * @return the mapper instance or <code>null</code>
+ */
+ protected <D, E> IMapper<D, E> getToDtoMapper(final Class<D> dtoClass, final Class<E> entityClass) {
+ return mapperAccess.getToDtoMapper(dtoClass, entityClass);
+ }
+
+ /**
+ * Returns the mapper instance that may map between the given dto and entity. Or <code>null</code> if no mapper is available.
+ *
+ * @param dtoClass - the class of the dto that should be mapped
+ * @param entityClass - the class of the entity that should be mapped
+ * @return the mapper instance or <code>null</code>
+ */
+ protected <D, E> IMapper<D, E> getToEntityMapper(final Class<D> dtoClass, final Class<E> entityClass) {
+ return mapperAccess.getToEntityMapper(dtoClass, entityClass);
+ }
+
+ /**
+ * Called by OSGi-DS. Binds the mapper access service.
+ *
+ * @param service - The mapper access service
+ *
+ */
+ protected void bindMapperAccess(final IMapperAccess mapperAccess) {
+ this.mapperAccess = mapperAccess;
+ }
+
+ /**
+ * Called by OSGi-DS. Binds the mapper access service.
+ *
+ * @param service - The mapper access service
+ *
+ */
+ protected void unbindMapperAccess(final IMapperAccess mapperAccess) {
+ this.mapperAccess = null;
+ }
+
+ /**
+ * Creates a new instance of the entity
+ */
+ public BaseID createEntity() {
+ return new BaseID();
+ }
+
+ /**
+ * Creates a new instance of the dto
+ */
+ public BaseIDDto createDto() {
+ return new BaseIDDto();
+ }
+
+ /**
+ * Maps the entity {@link BaseID} to the dto {@link BaseIDDto}.
+ *
+ * @param dto - The target dto
+ * @param entity - The source entity
+ * @param context - The context to get information about depth,...
+ *
+ */
+ public void mapToDTO(final BaseIDDto dto, final BaseID entity, final MappingContext context) {
+ if(context == null){
+ throw new IllegalArgumentException("Please pass a context!");
+ }
+ context.register(createDtoHash(entity), dto);
+
+ dto.setId(toDto_id(entity, context));
+ }
+
+ /**
+ * Maps the dto {@link BaseIDDto} to the entity {@link BaseID}.
+ *
+ * @param dto - The source dto
+ * @param entity - The target entity
+ * @param context - The context to get information about depth,...
+ *
+ */
+ public void mapToEntity(final BaseIDDto dto, final BaseID entity, final MappingContext context) {
+ if(context == null){
+ throw new IllegalArgumentException("Please pass a context!");
+ }
+
+ context.register(createEntityHash(dto), entity);
+ context.registerMappingRoot(createEntityHash(dto), dto);
+
+ entity.setId(toEntity_id(dto, entity, context));
+ }
+
+ /**
+ * Maps the property id from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected int toDto_id(final BaseID in, final MappingContext context) {
+ return in.getId();
+ }
+
+ /**
+ * Maps the property id from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected int toEntity_id(final BaseIDDto in, final BaseID parentEntity, final MappingContext context) {
+ return in.getId();
+ }
+
+ public String createDtoHash(final Object in) {
+ return org.eclipse.osbp.runtime.common.hash.HashUtil.createObjectWithIdHash(BaseIDDto.class, in);
+ }
+
+ public String createEntityHash(final Object in) {
+ return org.eclipse.osbp.runtime.common.hash.HashUtil.createObjectWithIdHash(BaseID.class, in);
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/mapper/BaseUUIDDtoMapper.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/mapper/BaseUUIDDtoMapper.java
new file mode 100644
index 0000000..693f468
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/mapper/BaseUUIDDtoMapper.java
@@ -0,0 +1,141 @@
+package org.osbp.tests.dtos.mapper;
+
+import org.eclipse.osbp.dsl.dto.lib.IMapper;
+import org.eclipse.osbp.dsl.dto.lib.IMapperAccess;
+import org.eclipse.osbp.dsl.dto.lib.MappingContext;
+import org.osbp.tests.dtos.BaseUUIDDto;
+import org.osbp.tests.entities.BaseUUID;
+
+/**
+ * This class maps the dto {@link BaseUUIDDto} to and from the entity {@link BaseUUID}.
+ *
+ */
+@SuppressWarnings("all")
+public class BaseUUIDDtoMapper<DTO extends BaseUUIDDto, ENTITY extends BaseUUID> implements IMapper<DTO, ENTITY> {
+ private IMapperAccess mapperAccess;
+
+ /**
+ * Returns the mapper instance that may map between the given dto and entity. Or <code>null</code> if no mapper is available.
+ *
+ * @param dtoClass - the class of the dto that should be mapped
+ * @param entityClass - the class of the entity that should be mapped
+ * @return the mapper instance or <code>null</code>
+ */
+ protected <D, E> IMapper<D, E> getToDtoMapper(final Class<D> dtoClass, final Class<E> entityClass) {
+ return mapperAccess.getToDtoMapper(dtoClass, entityClass);
+ }
+
+ /**
+ * Returns the mapper instance that may map between the given dto and entity. Or <code>null</code> if no mapper is available.
+ *
+ * @param dtoClass - the class of the dto that should be mapped
+ * @param entityClass - the class of the entity that should be mapped
+ * @return the mapper instance or <code>null</code>
+ */
+ protected <D, E> IMapper<D, E> getToEntityMapper(final Class<D> dtoClass, final Class<E> entityClass) {
+ return mapperAccess.getToEntityMapper(dtoClass, entityClass);
+ }
+
+ /**
+ * Called by OSGi-DS. Binds the mapper access service.
+ *
+ * @param service - The mapper access service
+ *
+ */
+ protected void bindMapperAccess(final IMapperAccess mapperAccess) {
+ this.mapperAccess = mapperAccess;
+ }
+
+ /**
+ * Called by OSGi-DS. Binds the mapper access service.
+ *
+ * @param service - The mapper access service
+ *
+ */
+ protected void unbindMapperAccess(final IMapperAccess mapperAccess) {
+ this.mapperAccess = null;
+ }
+
+ /**
+ * Creates a new instance of the entity
+ */
+ public BaseUUID createEntity() {
+ return new BaseUUID();
+ }
+
+ /**
+ * Creates a new instance of the dto
+ */
+ public BaseUUIDDto createDto() {
+ return new BaseUUIDDto();
+ }
+
+ /**
+ * Maps the entity {@link BaseUUID} to the dto {@link BaseUUIDDto}.
+ *
+ * @param dto - The target dto
+ * @param entity - The source entity
+ * @param context - The context to get information about depth,...
+ *
+ */
+ public void mapToDTO(final BaseUUIDDto dto, final BaseUUID entity, final MappingContext context) {
+ if(context == null){
+ throw new IllegalArgumentException("Please pass a context!");
+ }
+ context.register(createDtoHash(entity), dto);
+
+ dto.setId(toDto_id(entity, context));
+ }
+
+ /**
+ * Maps the dto {@link BaseUUIDDto} to the entity {@link BaseUUID}.
+ *
+ * @param dto - The source dto
+ * @param entity - The target entity
+ * @param context - The context to get information about depth,...
+ *
+ */
+ public void mapToEntity(final BaseUUIDDto dto, final BaseUUID entity, final MappingContext context) {
+ if(context == null){
+ throw new IllegalArgumentException("Please pass a context!");
+ }
+
+ context.register(createEntityHash(dto), entity);
+ context.registerMappingRoot(createEntityHash(dto), dto);
+
+ entity.setId(toEntity_id(dto, entity, context));
+ }
+
+ /**
+ * Maps the property id from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toDto_id(final BaseUUID in, final MappingContext context) {
+ return in.getId();
+ }
+
+ /**
+ * Maps the property id from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toEntity_id(final BaseUUIDDto in, final BaseUUID parentEntity, final MappingContext context) {
+ return in.getId();
+ }
+
+ public String createDtoHash(final Object in) {
+ return org.eclipse.osbp.runtime.common.hash.HashUtil.createObjectWithIdHash(BaseUUIDDto.class, in);
+ }
+
+ public String createEntityHash(final Object in) {
+ return org.eclipse.osbp.runtime.common.hash.HashUtil.createObjectWithIdHash(BaseUUID.class, in);
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/mapper/CashPaymentDtoMapper.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/mapper/CashPaymentDtoMapper.java
new file mode 100644
index 0000000..046fc2d
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/mapper/CashPaymentDtoMapper.java
@@ -0,0 +1,279 @@
+package org.osbp.tests.dtos.mapper;
+
+import java.util.Date;
+import org.eclipse.osbp.dsl.dto.lib.MappingContext;
+import org.osbp.tests.dtos.CashPaymentDto;
+import org.osbp.tests.dtos.CashPaymentMethodDto;
+import org.osbp.tests.dtos.CashSlipDto;
+import org.osbp.tests.dtos.mapper.BaseUUIDDtoMapper;
+import org.osbp.tests.entities.CashPayment;
+import org.osbp.tests.entities.CashPaymentMethod;
+import org.osbp.tests.entities.CashSlip;
+
+/**
+ * This class maps the dto {@link CashPaymentDto} to and from the entity {@link CashPayment}.
+ *
+ */
+@SuppressWarnings("all")
+public class CashPaymentDtoMapper<DTO extends CashPaymentDto, ENTITY extends CashPayment> extends BaseUUIDDtoMapper<DTO, ENTITY> {
+ /**
+ * Creates a new instance of the entity
+ */
+ public CashPayment createEntity() {
+ return new CashPayment();
+ }
+
+ /**
+ * Creates a new instance of the dto
+ */
+ public CashPaymentDto createDto() {
+ return new CashPaymentDto();
+ }
+
+ /**
+ * Maps the entity {@link CashPayment} to the dto {@link CashPaymentDto}.
+ *
+ * @param dto - The target dto
+ * @param entity - The source entity
+ * @param context - The context to get information about depth,...
+ *
+ */
+ public void mapToDTO(final CashPaymentDto dto, final CashPayment entity, final MappingContext context) {
+ if(context == null){
+ throw new IllegalArgumentException("Please pass a context!");
+ }
+ context.register(createDtoHash(entity), dto);
+
+ super.mapToDTO(dto, entity, context);
+
+ dto.setNow(toDto_now(entity, context));
+ dto.setPayed(toDto_payed(entity, context));
+ dto.setSlip(toDto_slip(entity, context));
+ dto.setMethodOfPayment(toDto_methodOfPayment(entity, context));
+ }
+
+ /**
+ * Maps the dto {@link CashPaymentDto} to the entity {@link CashPayment}.
+ *
+ * @param dto - The source dto
+ * @param entity - The target entity
+ * @param context - The context to get information about depth,...
+ *
+ */
+ public void mapToEntity(final CashPaymentDto dto, final CashPayment entity, final MappingContext context) {
+ if(context == null){
+ throw new IllegalArgumentException("Please pass a context!");
+ }
+
+ context.register(createEntityHash(dto), entity);
+ context.registerMappingRoot(createEntityHash(dto), dto);
+ super.mapToEntity(dto, entity, context);
+
+ entity.setNow(toEntity_now(dto, entity, context));
+ entity.setPayed(toEntity_payed(dto, entity, context));
+ entity.setSlip(toEntity_slip(dto, entity, context));
+ entity.setMethodOfPayment(toEntity_methodOfPayment(dto, entity, context));
+ }
+
+ /**
+ * Maps the property now from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected Date toDto_now(final CashPayment in, final MappingContext context) {
+ return in.getNow();
+ }
+
+ /**
+ * Maps the property now from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected Date toEntity_now(final CashPaymentDto in, final CashPayment parentEntity, final MappingContext context) {
+ return in.getNow();
+ }
+
+ /**
+ * Maps the property payed from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected Double toDto_payed(final CashPayment in, final MappingContext context) {
+ return in.getPayed();
+ }
+
+ /**
+ * Maps the property payed from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected Double toEntity_payed(final CashPaymentDto in, final CashPayment parentEntity, final MappingContext context) {
+ return in.getPayed();
+ }
+
+ /**
+ * Maps the property slip from the given entity to the dto.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped dto
+ *
+ */
+ protected CashSlipDto toDto_slip(final CashPayment in, final MappingContext context) {
+ if(in.getSlip() != null) {
+ // find a mapper that knows how to map the concrete input type.
+ org.eclipse.osbp.dsl.dto.lib.IMapper<CashSlipDto, CashSlip> mapper = (org.eclipse.osbp.dsl.dto.lib.IMapper<CashSlipDto, CashSlip>) getToDtoMapper(CashSlipDto.class, in.getSlip().getClass());
+ if(mapper == null) {
+ throw new IllegalStateException("Mapper must not be null!");
+ }
+ CashSlipDto dto = null;
+ dto = context.get(mapper.createDtoHash(in.getSlip()));
+ if(dto != null) {
+ if(context.isRefresh()){
+ mapper.mapToDTO(dto, in.getSlip(), context);
+ }
+ return dto;
+ }
+
+ context.increaseLevel();
+ dto = mapper.createDto();
+ mapper.mapToDTO(dto, in.getSlip(), context);
+ context.decreaseLevel();
+ return dto;
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Maps the property slip from the given dto to the entity.
+ *
+ * @param in - The source dto
+ * @param parentEntity - The parent entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped entity
+ *
+ */
+ protected CashSlip toEntity_slip(final CashPaymentDto in, final CashPayment parentEntity, final MappingContext context) {
+ if(in.getSlip() != null) {
+ // find a mapper that knows how to map the concrete input type.
+ org.eclipse.osbp.dsl.dto.lib.IMapper<CashSlipDto, CashSlip> mapper = (org.eclipse.osbp.dsl.dto.lib.IMapper<CashSlipDto, CashSlip>) getToEntityMapper(in.getSlip().getClass(), CashSlip.class);
+ if(mapper == null) {
+ throw new IllegalStateException("Mapper must not be null!");
+ }
+
+ CashSlip entity = null;
+ entity = context.get(mapper.createEntityHash(in.getSlip()));
+ if(entity != null) {
+ return entity;
+ } else {
+ entity = (CashSlip) context
+ .findEntityByEntityManager(CashSlip.class, in.getSlip().getId());
+ if (entity != null) {
+ context.register(mapper.createEntityHash(in.getSlip()), entity);
+ return entity;
+ }
+ }
+
+ entity = mapper.createEntity();
+ mapper.mapToEntity(in.getSlip(), entity, context);
+ return entity;
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Maps the property methodOfPayment from the given entity to the dto.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped dto
+ *
+ */
+ protected CashPaymentMethodDto toDto_methodOfPayment(final CashPayment in, final MappingContext context) {
+ if(in.getMethodOfPayment() != null) {
+ // find a mapper that knows how to map the concrete input type.
+ org.eclipse.osbp.dsl.dto.lib.IMapper<CashPaymentMethodDto, CashPaymentMethod> mapper = (org.eclipse.osbp.dsl.dto.lib.IMapper<CashPaymentMethodDto, CashPaymentMethod>) getToDtoMapper(CashPaymentMethodDto.class, in.getMethodOfPayment().getClass());
+ if(mapper == null) {
+ throw new IllegalStateException("Mapper must not be null!");
+ }
+ CashPaymentMethodDto dto = null;
+ dto = context.get(mapper.createDtoHash(in.getMethodOfPayment()));
+ if(dto != null) {
+ if(context.isRefresh()){
+ mapper.mapToDTO(dto, in.getMethodOfPayment(), context);
+ }
+ return dto;
+ }
+
+ context.increaseLevel();
+ dto = mapper.createDto();
+ mapper.mapToDTO(dto, in.getMethodOfPayment(), context);
+ context.decreaseLevel();
+ return dto;
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Maps the property methodOfPayment from the given dto to the entity.
+ *
+ * @param in - The source dto
+ * @param parentEntity - The parent entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped entity
+ *
+ */
+ protected CashPaymentMethod toEntity_methodOfPayment(final CashPaymentDto in, final CashPayment parentEntity, final MappingContext context) {
+ if(in.getMethodOfPayment() != null) {
+ // find a mapper that knows how to map the concrete input type.
+ org.eclipse.osbp.dsl.dto.lib.IMapper<CashPaymentMethodDto, CashPaymentMethod> mapper = (org.eclipse.osbp.dsl.dto.lib.IMapper<CashPaymentMethodDto, CashPaymentMethod>) getToEntityMapper(in.getMethodOfPayment().getClass(), CashPaymentMethod.class);
+ if(mapper == null) {
+ throw new IllegalStateException("Mapper must not be null!");
+ }
+
+ CashPaymentMethod entity = null;
+ entity = context.get(mapper.createEntityHash(in.getMethodOfPayment()));
+ if(entity != null) {
+ return entity;
+ } else {
+ entity = (CashPaymentMethod) context
+ .findEntityByEntityManager(CashPaymentMethod.class, in.getMethodOfPayment().getId());
+ if (entity != null) {
+ context.register(mapper.createEntityHash(in.getMethodOfPayment()), entity);
+ return entity;
+ }
+ }
+
+ entity = mapper.createEntity();
+ mapper.mapToEntity(in.getMethodOfPayment(), entity, context);
+ return entity;
+ } else {
+ return null;
+ }
+ }
+
+ public String createDtoHash(final Object in) {
+ return org.eclipse.osbp.runtime.common.hash.HashUtil.createObjectWithIdHash(CashPaymentDto.class, in);
+ }
+
+ public String createEntityHash(final Object in) {
+ return org.eclipse.osbp.runtime.common.hash.HashUtil.createObjectWithIdHash(CashPayment.class, in);
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/mapper/CashPaymentMethodDtoMapper.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/mapper/CashPaymentMethodDtoMapper.java
new file mode 100644
index 0000000..fdce801
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/mapper/CashPaymentMethodDtoMapper.java
@@ -0,0 +1,254 @@
+package org.osbp.tests.dtos.mapper;
+
+import java.util.List;
+import org.eclipse.osbp.dsl.dto.lib.MappingContext;
+import org.osbp.tests.dtos.CashPaymentDto;
+import org.osbp.tests.dtos.CashPaymentMethodDto;
+import org.osbp.tests.dtos.mapper.BaseUUIDDtoMapper;
+import org.osbp.tests.entities.CashPayment;
+import org.osbp.tests.entities.CashPaymentMethod;
+
+/**
+ * This class maps the dto {@link CashPaymentMethodDto} to and from the entity {@link CashPaymentMethod}.
+ *
+ */
+@SuppressWarnings("all")
+public class CashPaymentMethodDtoMapper<DTO extends CashPaymentMethodDto, ENTITY extends CashPaymentMethod> extends BaseUUIDDtoMapper<DTO, ENTITY> {
+ /**
+ * Creates a new instance of the entity
+ */
+ public CashPaymentMethod createEntity() {
+ return new CashPaymentMethod();
+ }
+
+ /**
+ * Creates a new instance of the dto
+ */
+ public CashPaymentMethodDto createDto() {
+ return new CashPaymentMethodDto();
+ }
+
+ /**
+ * Maps the entity {@link CashPaymentMethod} to the dto {@link CashPaymentMethodDto}.
+ *
+ * @param dto - The target dto
+ * @param entity - The source entity
+ * @param context - The context to get information about depth,...
+ *
+ */
+ public void mapToDTO(final CashPaymentMethodDto dto, final CashPaymentMethod entity, final MappingContext context) {
+ if(context == null){
+ throw new IllegalArgumentException("Please pass a context!");
+ }
+ context.register(createDtoHash(entity), dto);
+
+ super.mapToDTO(dto, entity, context);
+
+ dto.setNum(toDto_num(entity, context));
+ dto.setName(toDto_name(entity, context));
+ dto.setCredit(toDto_credit(entity, context));
+ dto.setImageName(toDto_imageName(entity, context));
+ dto.setLowerLimit(toDto_lowerLimit(entity, context));
+ }
+
+ /**
+ * Maps the dto {@link CashPaymentMethodDto} to the entity {@link CashPaymentMethod}.
+ *
+ * @param dto - The source dto
+ * @param entity - The target entity
+ * @param context - The context to get information about depth,...
+ *
+ */
+ public void mapToEntity(final CashPaymentMethodDto dto, final CashPaymentMethod entity, final MappingContext context) {
+ if(context == null){
+ throw new IllegalArgumentException("Please pass a context!");
+ }
+
+ context.register(createEntityHash(dto), entity);
+ context.registerMappingRoot(createEntityHash(dto), dto);
+ super.mapToEntity(dto, entity, context);
+
+ entity.setNum(toEntity_num(dto, entity, context));
+ entity.setName(toEntity_name(dto, entity, context));
+ entity.setCredit(toEntity_credit(dto, entity, context));
+ entity.setImageName(toEntity_imageName(dto, entity, context));
+ entity.setLowerLimit(toEntity_lowerLimit(dto, entity, context));
+ toEntity_payments(dto, entity, context);
+ }
+
+ /**
+ * Maps the property num from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toDto_num(final CashPaymentMethod in, final MappingContext context) {
+ return in.getNum();
+ }
+
+ /**
+ * Maps the property num from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toEntity_num(final CashPaymentMethodDto in, final CashPaymentMethod parentEntity, final MappingContext context) {
+ return in.getNum();
+ }
+
+ /**
+ * Maps the property name from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toDto_name(final CashPaymentMethod in, final MappingContext context) {
+ return in.getName();
+ }
+
+ /**
+ * Maps the property name from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toEntity_name(final CashPaymentMethodDto in, final CashPaymentMethod parentEntity, final MappingContext context) {
+ return in.getName();
+ }
+
+ /**
+ * Maps the property credit from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected Boolean toDto_credit(final CashPaymentMethod in, final MappingContext context) {
+ return in.getCredit();
+ }
+
+ /**
+ * Maps the property credit from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected Boolean toEntity_credit(final CashPaymentMethodDto in, final CashPaymentMethod parentEntity, final MappingContext context) {
+ return in.getCredit();
+ }
+
+ /**
+ * Maps the property imageName from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toDto_imageName(final CashPaymentMethod in, final MappingContext context) {
+ return in.getImageName();
+ }
+
+ /**
+ * Maps the property imageName from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toEntity_imageName(final CashPaymentMethodDto in, final CashPaymentMethod parentEntity, final MappingContext context) {
+ return in.getImageName();
+ }
+
+ /**
+ * Maps the property lowerLimit from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected double toDto_lowerLimit(final CashPaymentMethod in, final MappingContext context) {
+ return in.getLowerLimit();
+ }
+
+ /**
+ * Maps the property lowerLimit from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected double toEntity_lowerLimit(final CashPaymentMethodDto in, final CashPaymentMethod parentEntity, final MappingContext context) {
+ return in.getLowerLimit();
+ }
+
+ /**
+ * Maps the property payments from the given entity to the dto.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return A list of mapped dtos
+ *
+ */
+ protected List<CashPaymentDto> toDto_payments(final CashPaymentMethod in, final MappingContext context) {
+ // nothing to do here. Mapping is done by OppositeLists
+ return null;
+ }
+
+ /**
+ * Maps the property payments from the given dto to the entity.
+ *
+ * @param in - The source dto
+ * @param parentEntity - The parent entity
+ * @param context - The context to get information about depth,...
+ * @return A list of mapped entities
+ *
+ */
+ protected List<CashPayment> toEntity_payments(final CashPaymentMethodDto in, final CashPaymentMethod parentEntity, final MappingContext context) {
+ org.eclipse.osbp.dsl.dto.lib.IMapper<CashPaymentDto, CashPayment> mapper = getToEntityMapper(CashPaymentDto.class, CashPayment.class);
+ if(mapper == null) {
+ throw new IllegalStateException("Mapper must not be null!");
+ }
+
+ org.eclipse.osbp.dsl.dto.lib.IEntityMappingList<CashPaymentDto> childsList =
+ (org.eclipse.osbp.dsl.dto.lib.IEntityMappingList<CashPaymentDto>) in.internalGetPayments();
+
+ // if entities are being added, then they are passed to
+ // #addToContainerChilds of the parent entity. So the container ref is setup
+ // properly!
+ // if entities are being removed, then they are passed to the
+ // #internalRemoveFromChilds method of the parent entity. So they are
+ // removed directly from the list of entities.
+ childsList.mapToEntity(mapper,
+ parentEntity::addToPayments,
+ parentEntity::internalRemoveFromPayments);
+ return null;
+ }
+
+ public String createDtoHash(final Object in) {
+ return org.eclipse.osbp.runtime.common.hash.HashUtil.createObjectWithIdHash(CashPaymentMethodDto.class, in);
+ }
+
+ public String createEntityHash(final Object in) {
+ return org.eclipse.osbp.runtime.common.hash.HashUtil.createObjectWithIdHash(CashPaymentMethod.class, in);
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/mapper/CashPositionDtoMapper.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/mapper/CashPositionDtoMapper.java
new file mode 100644
index 0000000..0eaaea0
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/mapper/CashPositionDtoMapper.java
@@ -0,0 +1,257 @@
+package org.osbp.tests.dtos.mapper;
+
+import java.util.Date;
+import org.eclipse.osbp.dsl.dto.lib.MappingContext;
+import org.osbp.tests.dtos.CashPositionDto;
+import org.osbp.tests.dtos.CashSlipDto;
+import org.osbp.tests.dtos.mapper.BaseUUIDDtoMapper;
+import org.osbp.tests.entities.CashPosition;
+import org.osbp.tests.entities.CashSlip;
+
+/**
+ * This class maps the dto {@link CashPositionDto} to and from the entity {@link CashPosition}.
+ *
+ */
+@SuppressWarnings("all")
+public class CashPositionDtoMapper<DTO extends CashPositionDto, ENTITY extends CashPosition> extends BaseUUIDDtoMapper<DTO, ENTITY> {
+ /**
+ * Creates a new instance of the entity
+ */
+ public CashPosition createEntity() {
+ return new CashPosition();
+ }
+
+ /**
+ * Creates a new instance of the dto
+ */
+ public CashPositionDto createDto() {
+ return new CashPositionDto();
+ }
+
+ /**
+ * Maps the entity {@link CashPosition} to the dto {@link CashPositionDto}.
+ *
+ * @param dto - The target dto
+ * @param entity - The source entity
+ * @param context - The context to get information about depth,...
+ *
+ */
+ public void mapToDTO(final CashPositionDto dto, final CashPosition entity, final MappingContext context) {
+ if(context == null){
+ throw new IllegalArgumentException("Please pass a context!");
+ }
+ context.register(createDtoHash(entity), dto);
+
+ super.mapToDTO(dto, entity, context);
+
+ dto.setNow(toDto_now(entity, context));
+ dto.setQuantity(toDto_quantity(entity, context));
+ dto.setPrice(toDto_price(entity, context));
+ dto.setAmount(toDto_amount(entity, context));
+ dto.setSlip(toDto_slip(entity, context));
+ }
+
+ /**
+ * Maps the dto {@link CashPositionDto} to the entity {@link CashPosition}.
+ *
+ * @param dto - The source dto
+ * @param entity - The target entity
+ * @param context - The context to get information about depth,...
+ *
+ */
+ public void mapToEntity(final CashPositionDto dto, final CashPosition entity, final MappingContext context) {
+ if(context == null){
+ throw new IllegalArgumentException("Please pass a context!");
+ }
+
+ context.register(createEntityHash(dto), entity);
+ context.registerMappingRoot(createEntityHash(dto), dto);
+ super.mapToEntity(dto, entity, context);
+
+ entity.setNow(toEntity_now(dto, entity, context));
+ entity.setQuantity(toEntity_quantity(dto, entity, context));
+ entity.setPrice(toEntity_price(dto, entity, context));
+ entity.setAmount(toEntity_amount(dto, entity, context));
+ entity.setSlip(toEntity_slip(dto, entity, context));
+ }
+
+ /**
+ * Maps the property now from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected Date toDto_now(final CashPosition in, final MappingContext context) {
+ return in.getNow();
+ }
+
+ /**
+ * Maps the property now from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected Date toEntity_now(final CashPositionDto in, final CashPosition parentEntity, final MappingContext context) {
+ return in.getNow();
+ }
+
+ /**
+ * Maps the property quantity from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected double toDto_quantity(final CashPosition in, final MappingContext context) {
+ return in.getQuantity();
+ }
+
+ /**
+ * Maps the property quantity from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected double toEntity_quantity(final CashPositionDto in, final CashPosition parentEntity, final MappingContext context) {
+ return in.getQuantity();
+ }
+
+ /**
+ * Maps the property price from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected Double toDto_price(final CashPosition in, final MappingContext context) {
+ return in.getPrice();
+ }
+
+ /**
+ * Maps the property price from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected Double toEntity_price(final CashPositionDto in, final CashPosition parentEntity, final MappingContext context) {
+ return in.getPrice();
+ }
+
+ /**
+ * Maps the property amount from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected Double toDto_amount(final CashPosition in, final MappingContext context) {
+ return in.getAmount();
+ }
+
+ /**
+ * Maps the property amount from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected Double toEntity_amount(final CashPositionDto in, final CashPosition parentEntity, final MappingContext context) {
+ return in.getAmount();
+ }
+
+ /**
+ * Maps the property slip from the given entity to the dto.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped dto
+ *
+ */
+ protected CashSlipDto toDto_slip(final CashPosition in, final MappingContext context) {
+ if(in.getSlip() != null) {
+ // find a mapper that knows how to map the concrete input type.
+ org.eclipse.osbp.dsl.dto.lib.IMapper<CashSlipDto, CashSlip> mapper = (org.eclipse.osbp.dsl.dto.lib.IMapper<CashSlipDto, CashSlip>) getToDtoMapper(CashSlipDto.class, in.getSlip().getClass());
+ if(mapper == null) {
+ throw new IllegalStateException("Mapper must not be null!");
+ }
+ CashSlipDto dto = null;
+ dto = context.get(mapper.createDtoHash(in.getSlip()));
+ if(dto != null) {
+ if(context.isRefresh()){
+ mapper.mapToDTO(dto, in.getSlip(), context);
+ }
+ return dto;
+ }
+
+ context.increaseLevel();
+ dto = mapper.createDto();
+ mapper.mapToDTO(dto, in.getSlip(), context);
+ context.decreaseLevel();
+ return dto;
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Maps the property slip from the given dto to the entity.
+ *
+ * @param in - The source dto
+ * @param parentEntity - The parent entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped entity
+ *
+ */
+ protected CashSlip toEntity_slip(final CashPositionDto in, final CashPosition parentEntity, final MappingContext context) {
+ if(in.getSlip() != null) {
+ // find a mapper that knows how to map the concrete input type.
+ org.eclipse.osbp.dsl.dto.lib.IMapper<CashSlipDto, CashSlip> mapper = (org.eclipse.osbp.dsl.dto.lib.IMapper<CashSlipDto, CashSlip>) getToEntityMapper(in.getSlip().getClass(), CashSlip.class);
+ if(mapper == null) {
+ throw new IllegalStateException("Mapper must not be null!");
+ }
+
+ CashSlip entity = null;
+ entity = context.get(mapper.createEntityHash(in.getSlip()));
+ if(entity != null) {
+ return entity;
+ } else {
+ entity = (CashSlip) context
+ .findEntityByEntityManager(CashSlip.class, in.getSlip().getId());
+ if (entity != null) {
+ context.register(mapper.createEntityHash(in.getSlip()), entity);
+ return entity;
+ }
+ }
+
+ entity = mapper.createEntity();
+ mapper.mapToEntity(in.getSlip(), entity, context);
+ return entity;
+ } else {
+ return null;
+ }
+ }
+
+ public String createDtoHash(final Object in) {
+ return org.eclipse.osbp.runtime.common.hash.HashUtil.createObjectWithIdHash(CashPositionDto.class, in);
+ }
+
+ public String createEntityHash(final Object in) {
+ return org.eclipse.osbp.runtime.common.hash.HashUtil.createObjectWithIdHash(CashPosition.class, in);
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/mapper/CashRegisterDtoMapper.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/mapper/CashRegisterDtoMapper.java
new file mode 100644
index 0000000..03a3321
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/mapper/CashRegisterDtoMapper.java
@@ -0,0 +1,227 @@
+package org.osbp.tests.dtos.mapper;
+
+import java.util.List;
+import org.eclipse.osbp.dsl.dto.lib.MappingContext;
+import org.osbp.tests.dtos.CashRegisterDto;
+import org.osbp.tests.dtos.CashSlipDto;
+import org.osbp.tests.dtos.mapper.BaseUUIDDtoMapper;
+import org.osbp.tests.entities.CashRegister;
+import org.osbp.tests.entities.CashSlip;
+
+/**
+ * This class maps the dto {@link CashRegisterDto} to and from the entity {@link CashRegister}.
+ *
+ */
+@SuppressWarnings("all")
+public class CashRegisterDtoMapper<DTO extends CashRegisterDto, ENTITY extends CashRegister> extends BaseUUIDDtoMapper<DTO, ENTITY> {
+ /**
+ * Creates a new instance of the entity
+ */
+ public CashRegister createEntity() {
+ return new CashRegister();
+ }
+
+ /**
+ * Creates a new instance of the dto
+ */
+ public CashRegisterDto createDto() {
+ return new CashRegisterDto();
+ }
+
+ /**
+ * Maps the entity {@link CashRegister} to the dto {@link CashRegisterDto}.
+ *
+ * @param dto - The target dto
+ * @param entity - The source entity
+ * @param context - The context to get information about depth,...
+ *
+ */
+ public void mapToDTO(final CashRegisterDto dto, final CashRegister entity, final MappingContext context) {
+ if(context == null){
+ throw new IllegalArgumentException("Please pass a context!");
+ }
+ context.register(createDtoHash(entity), dto);
+
+ super.mapToDTO(dto, entity, context);
+
+ dto.setNum(toDto_num(entity, context));
+ dto.setIp(toDto_ip(entity, context));
+ dto.setLocation(toDto_location(entity, context));
+ dto.setCurrentDay(toDto_currentDay(entity, context));
+ }
+
+ /**
+ * Maps the dto {@link CashRegisterDto} to the entity {@link CashRegister}.
+ *
+ * @param dto - The source dto
+ * @param entity - The target entity
+ * @param context - The context to get information about depth,...
+ *
+ */
+ public void mapToEntity(final CashRegisterDto dto, final CashRegister entity, final MappingContext context) {
+ if(context == null){
+ throw new IllegalArgumentException("Please pass a context!");
+ }
+
+ context.register(createEntityHash(dto), entity);
+ context.registerMappingRoot(createEntityHash(dto), dto);
+ super.mapToEntity(dto, entity, context);
+
+ entity.setNum(toEntity_num(dto, entity, context));
+ entity.setIp(toEntity_ip(dto, entity, context));
+ entity.setLocation(toEntity_location(dto, entity, context));
+ entity.setCurrentDay(toEntity_currentDay(dto, entity, context));
+ toEntity_slips(dto, entity, context);
+ }
+
+ /**
+ * Maps the property num from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toDto_num(final CashRegister in, final MappingContext context) {
+ return in.getNum();
+ }
+
+ /**
+ * Maps the property num from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toEntity_num(final CashRegisterDto in, final CashRegister parentEntity, final MappingContext context) {
+ return in.getNum();
+ }
+
+ /**
+ * Maps the property ip from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toDto_ip(final CashRegister in, final MappingContext context) {
+ return in.getIp();
+ }
+
+ /**
+ * Maps the property ip from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toEntity_ip(final CashRegisterDto in, final CashRegister parentEntity, final MappingContext context) {
+ return in.getIp();
+ }
+
+ /**
+ * Maps the property location from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toDto_location(final CashRegister in, final MappingContext context) {
+ return in.getLocation();
+ }
+
+ /**
+ * Maps the property location from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toEntity_location(final CashRegisterDto in, final CashRegister parentEntity, final MappingContext context) {
+ return in.getLocation();
+ }
+
+ /**
+ * Maps the property currentDay from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toDto_currentDay(final CashRegister in, final MappingContext context) {
+ return in.getCurrentDay();
+ }
+
+ /**
+ * Maps the property currentDay from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toEntity_currentDay(final CashRegisterDto in, final CashRegister parentEntity, final MappingContext context) {
+ return in.getCurrentDay();
+ }
+
+ /**
+ * Maps the property slips from the given entity to the dto.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return A list of mapped dtos
+ *
+ */
+ protected List<CashSlipDto> toDto_slips(final CashRegister in, final MappingContext context) {
+ // nothing to do here. Mapping is done by OppositeLists
+ return null;
+ }
+
+ /**
+ * Maps the property slips from the given dto to the entity.
+ *
+ * @param in - The source dto
+ * @param parentEntity - The parent entity
+ * @param context - The context to get information about depth,...
+ * @return A list of mapped entities
+ *
+ */
+ protected List<CashSlip> toEntity_slips(final CashRegisterDto in, final CashRegister parentEntity, final MappingContext context) {
+ org.eclipse.osbp.dsl.dto.lib.IMapper<CashSlipDto, CashSlip> mapper = getToEntityMapper(CashSlipDto.class, CashSlip.class);
+ if(mapper == null) {
+ throw new IllegalStateException("Mapper must not be null!");
+ }
+
+ org.eclipse.osbp.dsl.dto.lib.IEntityMappingList<CashSlipDto> childsList =
+ (org.eclipse.osbp.dsl.dto.lib.IEntityMappingList<CashSlipDto>) in.internalGetSlips();
+
+ // if entities are being added, then they are passed to
+ // #addToContainerChilds of the parent entity. So the container ref is setup
+ // properly!
+ // if entities are being removed, then they are passed to the
+ // #internalRemoveFromChilds method of the parent entity. So they are
+ // removed directly from the list of entities.
+ childsList.mapToEntity(mapper,
+ parentEntity::addToSlips,
+ parentEntity::internalRemoveFromSlips);
+ return null;
+ }
+
+ public String createDtoHash(final Object in) {
+ return org.eclipse.osbp.runtime.common.hash.HashUtil.createObjectWithIdHash(CashRegisterDto.class, in);
+ }
+
+ public String createEntityHash(final Object in) {
+ return org.eclipse.osbp.runtime.common.hash.HashUtil.createObjectWithIdHash(CashRegister.class, in);
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/mapper/CashSlipDtoMapper.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/mapper/CashSlipDtoMapper.java
new file mode 100644
index 0000000..2faeacc
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/mapper/CashSlipDtoMapper.java
@@ -0,0 +1,480 @@
+package org.osbp.tests.dtos.mapper;
+
+import java.util.Date;
+import java.util.List;
+import org.eclipse.osbp.dsl.dto.lib.MappingContext;
+import org.osbp.tests.dtos.CashPaymentDto;
+import org.osbp.tests.dtos.CashPositionDto;
+import org.osbp.tests.dtos.CashRegisterDto;
+import org.osbp.tests.dtos.CashSlipDto;
+import org.osbp.tests.dtos.McustomerDto;
+import org.osbp.tests.dtos.mapper.BaseUUIDDtoMapper;
+import org.osbp.tests.entities.CashPayment;
+import org.osbp.tests.entities.CashPosition;
+import org.osbp.tests.entities.CashRegister;
+import org.osbp.tests.entities.CashSlip;
+import org.osbp.tests.entities.Mcustomer;
+
+/**
+ * This class maps the dto {@link CashSlipDto} to and from the entity {@link CashSlip}.
+ *
+ */
+@SuppressWarnings("all")
+public class CashSlipDtoMapper<DTO extends CashSlipDto, ENTITY extends CashSlip> extends BaseUUIDDtoMapper<DTO, ENTITY> {
+ /**
+ * Creates a new instance of the entity
+ */
+ public CashSlip createEntity() {
+ return new CashSlip();
+ }
+
+ /**
+ * Creates a new instance of the dto
+ */
+ public CashSlipDto createDto() {
+ return new CashSlipDto();
+ }
+
+ /**
+ * Maps the entity {@link CashSlip} to the dto {@link CashSlipDto}.
+ *
+ * @param dto - The target dto
+ * @param entity - The source entity
+ * @param context - The context to get information about depth,...
+ *
+ */
+ public void mapToDTO(final CashSlipDto dto, final CashSlip entity, final MappingContext context) {
+ if(context == null){
+ throw new IllegalArgumentException("Please pass a context!");
+ }
+ context.register(createDtoHash(entity), dto);
+
+ super.mapToDTO(dto, entity, context);
+
+ dto.setCurrentDay(toDto_currentDay(entity, context));
+ dto.setNow(toDto_now(entity, context));
+ dto.setCashier(toDto_cashier(entity, context));
+ dto.setTotal(toDto_total(entity, context));
+ dto.setSerial(toDto_serial(entity, context));
+ dto.setPayed(toDto_payed(entity, context));
+ dto.setCustomer(toDto_customer(entity, context));
+ dto.setRegister(toDto_register(entity, context));
+ }
+
+ /**
+ * Maps the dto {@link CashSlipDto} to the entity {@link CashSlip}.
+ *
+ * @param dto - The source dto
+ * @param entity - The target entity
+ * @param context - The context to get information about depth,...
+ *
+ */
+ public void mapToEntity(final CashSlipDto dto, final CashSlip entity, final MappingContext context) {
+ if(context == null){
+ throw new IllegalArgumentException("Please pass a context!");
+ }
+
+ context.register(createEntityHash(dto), entity);
+ context.registerMappingRoot(createEntityHash(dto), dto);
+ super.mapToEntity(dto, entity, context);
+
+ entity.setCurrentDay(toEntity_currentDay(dto, entity, context));
+ entity.setNow(toEntity_now(dto, entity, context));
+ entity.setCashier(toEntity_cashier(dto, entity, context));
+ entity.setTotal(toEntity_total(dto, entity, context));
+ entity.setSerial(toEntity_serial(dto, entity, context));
+ entity.setPayed(toEntity_payed(dto, entity, context));
+ toEntity_positions(dto, entity, context);
+ entity.setCustomer(toEntity_customer(dto, entity, context));
+ entity.setRegister(toEntity_register(dto, entity, context));
+ toEntity_payments(dto, entity, context);
+ }
+
+ /**
+ * Maps the property currentDay from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toDto_currentDay(final CashSlip in, final MappingContext context) {
+ return in.getCurrentDay();
+ }
+
+ /**
+ * Maps the property currentDay from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toEntity_currentDay(final CashSlipDto in, final CashSlip parentEntity, final MappingContext context) {
+ return in.getCurrentDay();
+ }
+
+ /**
+ * Maps the property now from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected Date toDto_now(final CashSlip in, final MappingContext context) {
+ return in.getNow();
+ }
+
+ /**
+ * Maps the property now from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected Date toEntity_now(final CashSlipDto in, final CashSlip parentEntity, final MappingContext context) {
+ return in.getNow();
+ }
+
+ /**
+ * Maps the property cashier from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toDto_cashier(final CashSlip in, final MappingContext context) {
+ return in.getCashier();
+ }
+
+ /**
+ * Maps the property cashier from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toEntity_cashier(final CashSlipDto in, final CashSlip parentEntity, final MappingContext context) {
+ return in.getCashier();
+ }
+
+ /**
+ * Maps the property total from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected Double toDto_total(final CashSlip in, final MappingContext context) {
+ return in.getTotal();
+ }
+
+ /**
+ * Maps the property total from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected Double toEntity_total(final CashSlipDto in, final CashSlip parentEntity, final MappingContext context) {
+ return in.getTotal();
+ }
+
+ /**
+ * Maps the property serial from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected long toDto_serial(final CashSlip in, final MappingContext context) {
+ return in.getSerial();
+ }
+
+ /**
+ * Maps the property serial from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected long toEntity_serial(final CashSlipDto in, final CashSlip parentEntity, final MappingContext context) {
+ return in.getSerial();
+ }
+
+ /**
+ * Maps the property payed from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected boolean toDto_payed(final CashSlip in, final MappingContext context) {
+ return in.getPayed();
+ }
+
+ /**
+ * Maps the property payed from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected boolean toEntity_payed(final CashSlipDto in, final CashSlip parentEntity, final MappingContext context) {
+ return in.getPayed();
+ }
+
+ /**
+ * Maps the property positions from the given entity to the dto.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return A list of mapped dtos
+ *
+ */
+ protected List<CashPositionDto> toDto_positions(final CashSlip in, final MappingContext context) {
+ // nothing to do here. Mapping is done by OppositeLists
+ return null;
+ }
+
+ /**
+ * Maps the property positions from the given dto to the entity.
+ *
+ * @param in - The source dto
+ * @param parentEntity - The parent entity
+ * @param context - The context to get information about depth,...
+ * @return A list of mapped entities
+ *
+ */
+ protected List<CashPosition> toEntity_positions(final CashSlipDto in, final CashSlip parentEntity, final MappingContext context) {
+ org.eclipse.osbp.dsl.dto.lib.IMapper<CashPositionDto, CashPosition> mapper = getToEntityMapper(CashPositionDto.class, CashPosition.class);
+ if(mapper == null) {
+ throw new IllegalStateException("Mapper must not be null!");
+ }
+
+ org.eclipse.osbp.dsl.dto.lib.IEntityMappingList<CashPositionDto> childsList =
+ (org.eclipse.osbp.dsl.dto.lib.IEntityMappingList<CashPositionDto>) in.internalGetPositions();
+
+ // if entities are being added, then they are passed to
+ // #addToContainerChilds of the parent entity. So the container ref is setup
+ // properly!
+ // if entities are being removed, then they are passed to the
+ // #internalRemoveFromChilds method of the parent entity. So they are
+ // removed directly from the list of entities.
+ childsList.mapToEntity(mapper,
+ parentEntity::addToPositions,
+ parentEntity::internalRemoveFromPositions);
+ return null;
+ }
+
+ /**
+ * Maps the property customer from the given entity to the dto.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped dto
+ *
+ */
+ protected McustomerDto toDto_customer(final CashSlip in, final MappingContext context) {
+ if(in.getCustomer() != null) {
+ // find a mapper that knows how to map the concrete input type.
+ org.eclipse.osbp.dsl.dto.lib.IMapper<McustomerDto, Mcustomer> mapper = (org.eclipse.osbp.dsl.dto.lib.IMapper<McustomerDto, Mcustomer>) getToDtoMapper(McustomerDto.class, in.getCustomer().getClass());
+ if(mapper == null) {
+ throw new IllegalStateException("Mapper must not be null!");
+ }
+ McustomerDto dto = null;
+ dto = context.get(mapper.createDtoHash(in.getCustomer()));
+ if(dto != null) {
+ if(context.isRefresh()){
+ mapper.mapToDTO(dto, in.getCustomer(), context);
+ }
+ return dto;
+ }
+
+ context.increaseLevel();
+ dto = mapper.createDto();
+ mapper.mapToDTO(dto, in.getCustomer(), context);
+ context.decreaseLevel();
+ return dto;
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Maps the property customer from the given dto to the entity.
+ *
+ * @param in - The source dto
+ * @param parentEntity - The parent entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped entity
+ *
+ */
+ protected Mcustomer toEntity_customer(final CashSlipDto in, final CashSlip parentEntity, final MappingContext context) {
+ if(in.getCustomer() != null) {
+ // find a mapper that knows how to map the concrete input type.
+ org.eclipse.osbp.dsl.dto.lib.IMapper<McustomerDto, Mcustomer> mapper = (org.eclipse.osbp.dsl.dto.lib.IMapper<McustomerDto, Mcustomer>) getToEntityMapper(in.getCustomer().getClass(), Mcustomer.class);
+ if(mapper == null) {
+ throw new IllegalStateException("Mapper must not be null!");
+ }
+
+ Mcustomer entity = null;
+ entity = context.get(mapper.createEntityHash(in.getCustomer()));
+ if(entity != null) {
+ return entity;
+ } else {
+ entity = (Mcustomer) context
+ .findEntityByEntityManager(Mcustomer.class, in.getCustomer().getId());
+ if (entity != null) {
+ context.register(mapper.createEntityHash(in.getCustomer()), entity);
+ return entity;
+ }
+ }
+
+ entity = mapper.createEntity();
+ mapper.mapToEntity(in.getCustomer(), entity, context);
+ return entity;
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Maps the property register from the given entity to the dto.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped dto
+ *
+ */
+ protected CashRegisterDto toDto_register(final CashSlip in, final MappingContext context) {
+ if(in.getRegister() != null) {
+ // find a mapper that knows how to map the concrete input type.
+ org.eclipse.osbp.dsl.dto.lib.IMapper<CashRegisterDto, CashRegister> mapper = (org.eclipse.osbp.dsl.dto.lib.IMapper<CashRegisterDto, CashRegister>) getToDtoMapper(CashRegisterDto.class, in.getRegister().getClass());
+ if(mapper == null) {
+ throw new IllegalStateException("Mapper must not be null!");
+ }
+ CashRegisterDto dto = null;
+ dto = context.get(mapper.createDtoHash(in.getRegister()));
+ if(dto != null) {
+ if(context.isRefresh()){
+ mapper.mapToDTO(dto, in.getRegister(), context);
+ }
+ return dto;
+ }
+
+ context.increaseLevel();
+ dto = mapper.createDto();
+ mapper.mapToDTO(dto, in.getRegister(), context);
+ context.decreaseLevel();
+ return dto;
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Maps the property register from the given dto to the entity.
+ *
+ * @param in - The source dto
+ * @param parentEntity - The parent entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped entity
+ *
+ */
+ protected CashRegister toEntity_register(final CashSlipDto in, final CashSlip parentEntity, final MappingContext context) {
+ if(in.getRegister() != null) {
+ // find a mapper that knows how to map the concrete input type.
+ org.eclipse.osbp.dsl.dto.lib.IMapper<CashRegisterDto, CashRegister> mapper = (org.eclipse.osbp.dsl.dto.lib.IMapper<CashRegisterDto, CashRegister>) getToEntityMapper(in.getRegister().getClass(), CashRegister.class);
+ if(mapper == null) {
+ throw new IllegalStateException("Mapper must not be null!");
+ }
+
+ CashRegister entity = null;
+ entity = context.get(mapper.createEntityHash(in.getRegister()));
+ if(entity != null) {
+ return entity;
+ } else {
+ entity = (CashRegister) context
+ .findEntityByEntityManager(CashRegister.class, in.getRegister().getId());
+ if (entity != null) {
+ context.register(mapper.createEntityHash(in.getRegister()), entity);
+ return entity;
+ }
+ }
+
+ entity = mapper.createEntity();
+ mapper.mapToEntity(in.getRegister(), entity, context);
+ return entity;
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Maps the property payments from the given entity to the dto.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return A list of mapped dtos
+ *
+ */
+ protected List<CashPaymentDto> toDto_payments(final CashSlip in, final MappingContext context) {
+ // nothing to do here. Mapping is done by OppositeLists
+ return null;
+ }
+
+ /**
+ * Maps the property payments from the given dto to the entity.
+ *
+ * @param in - The source dto
+ * @param parentEntity - The parent entity
+ * @param context - The context to get information about depth,...
+ * @return A list of mapped entities
+ *
+ */
+ protected List<CashPayment> toEntity_payments(final CashSlipDto in, final CashSlip parentEntity, final MappingContext context) {
+ org.eclipse.osbp.dsl.dto.lib.IMapper<CashPaymentDto, CashPayment> mapper = getToEntityMapper(CashPaymentDto.class, CashPayment.class);
+ if(mapper == null) {
+ throw new IllegalStateException("Mapper must not be null!");
+ }
+
+ org.eclipse.osbp.dsl.dto.lib.IEntityMappingList<CashPaymentDto> childsList =
+ (org.eclipse.osbp.dsl.dto.lib.IEntityMappingList<CashPaymentDto>) in.internalGetPayments();
+
+ // if entities are being added, then they are passed to
+ // #addToContainerChilds of the parent entity. So the container ref is setup
+ // properly!
+ // if entities are being removed, then they are passed to the
+ // #internalRemoveFromChilds method of the parent entity. So they are
+ // removed directly from the list of entities.
+ childsList.mapToEntity(mapper,
+ parentEntity::addToPayments,
+ parentEntity::internalRemoveFromPayments);
+ return null;
+ }
+
+ public String createDtoHash(final Object in) {
+ return org.eclipse.osbp.runtime.common.hash.HashUtil.createObjectWithIdHash(CashSlipDto.class, in);
+ }
+
+ public String createEntityHash(final Object in) {
+ return org.eclipse.osbp.runtime.common.hash.HashUtil.createObjectWithIdHash(CashSlip.class, in);
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/mapper/CompanyDtoMapper.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/mapper/CompanyDtoMapper.java
new file mode 100644
index 0000000..c0001ec
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/mapper/CompanyDtoMapper.java
@@ -0,0 +1,371 @@
+package org.osbp.tests.dtos.mapper;
+
+import java.util.List;
+import org.eclipse.osbp.dsl.dto.lib.MappingContext;
+import org.osbp.tests.dtos.AddressDto;
+import org.osbp.tests.dtos.CompanyDto;
+import org.osbp.tests.dtos.CompanyGroupDto;
+import org.osbp.tests.dtos.CompanyRelationTypeDto;
+import org.osbp.tests.dtos.DepartmentDto;
+import org.osbp.tests.dtos.mapper.BaseUUIDDtoMapper;
+import org.osbp.tests.entities.Address;
+import org.osbp.tests.entities.Company;
+import org.osbp.tests.entities.CompanyGroup;
+import org.osbp.tests.entities.CompanyRelationType;
+import org.osbp.tests.entities.Department;
+
+/**
+ * This class maps the dto {@link CompanyDto} to and from the entity {@link Company}.
+ *
+ */
+@SuppressWarnings("all")
+public class CompanyDtoMapper<DTO extends CompanyDto, ENTITY extends Company> extends BaseUUIDDtoMapper<DTO, ENTITY> {
+ /**
+ * Creates a new instance of the entity
+ */
+ public Company createEntity() {
+ return new Company();
+ }
+
+ /**
+ * Creates a new instance of the dto
+ */
+ public CompanyDto createDto() {
+ return new CompanyDto();
+ }
+
+ /**
+ * Maps the entity {@link Company} to the dto {@link CompanyDto}.
+ *
+ * @param dto - The target dto
+ * @param entity - The source entity
+ * @param context - The context to get information about depth,...
+ *
+ */
+ public void mapToDTO(final CompanyDto dto, final Company entity, final MappingContext context) {
+ if(context == null){
+ throw new IllegalArgumentException("Please pass a context!");
+ }
+ context.register(createDtoHash(entity), dto);
+
+ super.mapToDTO(dto, entity, context);
+
+ dto.setCompany_group(toDto_company_group(entity, context));
+ dto.setName(toDto_name(entity, context));
+ dto.setDescription(toDto_description(entity, context));
+ dto.setRelation_type(toDto_relation_type(entity, context));
+ }
+
+ /**
+ * Maps the dto {@link CompanyDto} to the entity {@link Company}.
+ *
+ * @param dto - The source dto
+ * @param entity - The target entity
+ * @param context - The context to get information about depth,...
+ *
+ */
+ public void mapToEntity(final CompanyDto dto, final Company entity, final MappingContext context) {
+ if(context == null){
+ throw new IllegalArgumentException("Please pass a context!");
+ }
+
+ context.register(createEntityHash(dto), entity);
+ context.registerMappingRoot(createEntityHash(dto), dto);
+ super.mapToEntity(dto, entity, context);
+
+ entity.setCompany_group(toEntity_company_group(dto, entity, context));
+ entity.setName(toEntity_name(dto, entity, context));
+ entity.setDescription(toEntity_description(dto, entity, context));
+ entity.setRelation_type(toEntity_relation_type(dto, entity, context));
+ toEntity_address(dto, entity, context);
+ toEntity_departments(dto, entity, context);
+ }
+
+ /**
+ * Maps the property company_group from the given entity to the dto.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped dto
+ *
+ */
+ protected CompanyGroupDto toDto_company_group(final Company in, final MappingContext context) {
+ if(in.getCompany_group() != null) {
+ // find a mapper that knows how to map the concrete input type.
+ org.eclipse.osbp.dsl.dto.lib.IMapper<CompanyGroupDto, CompanyGroup> mapper = (org.eclipse.osbp.dsl.dto.lib.IMapper<CompanyGroupDto, CompanyGroup>) getToDtoMapper(CompanyGroupDto.class, in.getCompany_group().getClass());
+ if(mapper == null) {
+ throw new IllegalStateException("Mapper must not be null!");
+ }
+ CompanyGroupDto dto = null;
+ dto = context.get(mapper.createDtoHash(in.getCompany_group()));
+ if(dto != null) {
+ if(context.isRefresh()){
+ mapper.mapToDTO(dto, in.getCompany_group(), context);
+ }
+ return dto;
+ }
+
+ context.increaseLevel();
+ dto = mapper.createDto();
+ mapper.mapToDTO(dto, in.getCompany_group(), context);
+ context.decreaseLevel();
+ return dto;
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Maps the property company_group from the given dto to the entity.
+ *
+ * @param in - The source dto
+ * @param parentEntity - The parent entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped entity
+ *
+ */
+ protected CompanyGroup toEntity_company_group(final CompanyDto in, final Company parentEntity, final MappingContext context) {
+ if(in.getCompany_group() != null) {
+ // find a mapper that knows how to map the concrete input type.
+ org.eclipse.osbp.dsl.dto.lib.IMapper<CompanyGroupDto, CompanyGroup> mapper = (org.eclipse.osbp.dsl.dto.lib.IMapper<CompanyGroupDto, CompanyGroup>) getToEntityMapper(in.getCompany_group().getClass(), CompanyGroup.class);
+ if(mapper == null) {
+ throw new IllegalStateException("Mapper must not be null!");
+ }
+
+ CompanyGroup entity = null;
+ entity = context.get(mapper.createEntityHash(in.getCompany_group()));
+ if(entity != null) {
+ return entity;
+ } else {
+ entity = (CompanyGroup) context
+ .findEntityByEntityManager(CompanyGroup.class, in.getCompany_group().getId());
+ if (entity != null) {
+ context.register(mapper.createEntityHash(in.getCompany_group()), entity);
+ return entity;
+ }
+ }
+
+ entity = mapper.createEntity();
+ mapper.mapToEntity(in.getCompany_group(), entity, context);
+ return entity;
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Maps the property name from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toDto_name(final Company in, final MappingContext context) {
+ return in.getName();
+ }
+
+ /**
+ * Maps the property name from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toEntity_name(final CompanyDto in, final Company parentEntity, final MappingContext context) {
+ return in.getName();
+ }
+
+ /**
+ * Maps the property description from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toDto_description(final Company in, final MappingContext context) {
+ return in.getDescription();
+ }
+
+ /**
+ * Maps the property description from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toEntity_description(final CompanyDto in, final Company parentEntity, final MappingContext context) {
+ return in.getDescription();
+ }
+
+ /**
+ * Maps the property relation_type from the given entity to the dto.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped dto
+ *
+ */
+ protected CompanyRelationTypeDto toDto_relation_type(final Company in, final MappingContext context) {
+ if(in.getRelation_type() != null) {
+ // find a mapper that knows how to map the concrete input type.
+ org.eclipse.osbp.dsl.dto.lib.IMapper<CompanyRelationTypeDto, CompanyRelationType> mapper = (org.eclipse.osbp.dsl.dto.lib.IMapper<CompanyRelationTypeDto, CompanyRelationType>) getToDtoMapper(CompanyRelationTypeDto.class, in.getRelation_type().getClass());
+ if(mapper == null) {
+ throw new IllegalStateException("Mapper must not be null!");
+ }
+ CompanyRelationTypeDto dto = null;
+ dto = context.get(mapper.createDtoHash(in.getRelation_type()));
+ if(dto != null) {
+ if(context.isRefresh()){
+ mapper.mapToDTO(dto, in.getRelation_type(), context);
+ }
+ return dto;
+ }
+
+ context.increaseLevel();
+ dto = mapper.createDto();
+ mapper.mapToDTO(dto, in.getRelation_type(), context);
+ context.decreaseLevel();
+ return dto;
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Maps the property relation_type from the given dto to the entity.
+ *
+ * @param in - The source dto
+ * @param parentEntity - The parent entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped entity
+ *
+ */
+ protected CompanyRelationType toEntity_relation_type(final CompanyDto in, final Company parentEntity, final MappingContext context) {
+ if(in.getRelation_type() != null) {
+ // find a mapper that knows how to map the concrete input type.
+ org.eclipse.osbp.dsl.dto.lib.IMapper<CompanyRelationTypeDto, CompanyRelationType> mapper = (org.eclipse.osbp.dsl.dto.lib.IMapper<CompanyRelationTypeDto, CompanyRelationType>) getToEntityMapper(in.getRelation_type().getClass(), CompanyRelationType.class);
+ if(mapper == null) {
+ throw new IllegalStateException("Mapper must not be null!");
+ }
+
+ CompanyRelationType entity = null;
+ entity = context.get(mapper.createEntityHash(in.getRelation_type()));
+ if(entity != null) {
+ return entity;
+ } else {
+ entity = (CompanyRelationType) context
+ .findEntityByEntityManager(CompanyRelationType.class, in.getRelation_type().getId());
+ if (entity != null) {
+ context.register(mapper.createEntityHash(in.getRelation_type()), entity);
+ return entity;
+ }
+ }
+
+ entity = mapper.createEntity();
+ mapper.mapToEntity(in.getRelation_type(), entity, context);
+ return entity;
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Maps the property address from the given entity to the dto.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return A list of mapped dtos
+ *
+ */
+ protected List<AddressDto> toDto_address(final Company in, final MappingContext context) {
+ // nothing to do here. Mapping is done by OppositeLists
+ return null;
+ }
+
+ /**
+ * Maps the property address from the given dto to the entity.
+ *
+ * @param in - The source dto
+ * @param parentEntity - The parent entity
+ * @param context - The context to get information about depth,...
+ * @return A list of mapped entities
+ *
+ */
+ protected List<Address> toEntity_address(final CompanyDto in, final Company parentEntity, final MappingContext context) {
+ org.eclipse.osbp.dsl.dto.lib.IMapper<AddressDto, Address> mapper = getToEntityMapper(AddressDto.class, Address.class);
+ if(mapper == null) {
+ throw new IllegalStateException("Mapper must not be null!");
+ }
+
+ org.eclipse.osbp.dsl.dto.lib.IEntityMappingList<AddressDto> childsList =
+ (org.eclipse.osbp.dsl.dto.lib.IEntityMappingList<AddressDto>) in.internalGetAddress();
+
+ // if entities are being added, then they are passed to
+ // #addToContainerChilds of the parent entity. So the container ref is setup
+ // properly!
+ // if entities are being removed, then they are passed to the
+ // #internalRemoveFromChilds method of the parent entity. So they are
+ // removed directly from the list of entities.
+ childsList.mapToEntity(mapper,
+ parentEntity::addToAddress,
+ parentEntity::internalRemoveFromAddress);
+ return null;
+ }
+
+ /**
+ * Maps the property departments from the given entity to the dto.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return A list of mapped dtos
+ *
+ */
+ protected List<DepartmentDto> toDto_departments(final Company in, final MappingContext context) {
+ // nothing to do here. Mapping is done by OppositeLists
+ return null;
+ }
+
+ /**
+ * Maps the property departments from the given dto to the entity.
+ *
+ * @param in - The source dto
+ * @param parentEntity - The parent entity
+ * @param context - The context to get information about depth,...
+ * @return A list of mapped entities
+ *
+ */
+ protected List<Department> toEntity_departments(final CompanyDto in, final Company parentEntity, final MappingContext context) {
+ org.eclipse.osbp.dsl.dto.lib.IMapper<DepartmentDto, Department> mapper = getToEntityMapper(DepartmentDto.class, Department.class);
+ if(mapper == null) {
+ throw new IllegalStateException("Mapper must not be null!");
+ }
+
+ org.eclipse.osbp.dsl.dto.lib.IEntityMappingList<DepartmentDto> childsList =
+ (org.eclipse.osbp.dsl.dto.lib.IEntityMappingList<DepartmentDto>) in.internalGetDepartments();
+
+ // if entities are being added, then they are passed to
+ // #addToContainerChilds of the parent entity. So the container ref is setup
+ // properly!
+ // if entities are being removed, then they are passed to the
+ // #internalRemoveFromChilds method of the parent entity. So they are
+ // removed directly from the list of entities.
+ childsList.mapToEntity(mapper,
+ parentEntity::addToDepartments,
+ parentEntity::internalRemoveFromDepartments);
+ return null;
+ }
+
+ public String createDtoHash(final Object in) {
+ return org.eclipse.osbp.runtime.common.hash.HashUtil.createObjectWithIdHash(CompanyDto.class, in);
+ }
+
+ public String createEntityHash(final Object in) {
+ return org.eclipse.osbp.runtime.common.hash.HashUtil.createObjectWithIdHash(Company.class, in);
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/mapper/CompanyGroupDtoMapper.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/mapper/CompanyGroupDtoMapper.java
new file mode 100644
index 0000000..acc13b7
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/mapper/CompanyGroupDtoMapper.java
@@ -0,0 +1,247 @@
+package org.osbp.tests.dtos.mapper;
+
+import java.util.List;
+import org.eclipse.osbp.dsl.dto.lib.MappingContext;
+import org.osbp.tests.dtos.CompanyDto;
+import org.osbp.tests.dtos.CompanyGroupDto;
+import org.osbp.tests.dtos.mapper.BaseUUIDDtoMapper;
+import org.osbp.tests.entities.Company;
+import org.osbp.tests.entities.CompanyGroup;
+
+/**
+ * This class maps the dto {@link CompanyGroupDto} to and from the entity {@link CompanyGroup}.
+ *
+ */
+@SuppressWarnings("all")
+public class CompanyGroupDtoMapper<DTO extends CompanyGroupDto, ENTITY extends CompanyGroup> extends BaseUUIDDtoMapper<DTO, ENTITY> {
+ /**
+ * Creates a new instance of the entity
+ */
+ public CompanyGroup createEntity() {
+ return new CompanyGroup();
+ }
+
+ /**
+ * Creates a new instance of the dto
+ */
+ public CompanyGroupDto createDto() {
+ return new CompanyGroupDto();
+ }
+
+ /**
+ * Maps the entity {@link CompanyGroup} to the dto {@link CompanyGroupDto}.
+ *
+ * @param dto - The target dto
+ * @param entity - The source entity
+ * @param context - The context to get information about depth,...
+ *
+ */
+ public void mapToDTO(final CompanyGroupDto dto, final CompanyGroup entity, final MappingContext context) {
+ if(context == null){
+ throw new IllegalArgumentException("Please pass a context!");
+ }
+ context.register(createDtoHash(entity), dto);
+
+ super.mapToDTO(dto, entity, context);
+
+ dto.setName(toDto_name(entity, context));
+ dto.setDescription(toDto_description(entity, context));
+ dto.setMain_company(toDto_main_company(entity, context));
+ }
+
+ /**
+ * Maps the dto {@link CompanyGroupDto} to the entity {@link CompanyGroup}.
+ *
+ * @param dto - The source dto
+ * @param entity - The target entity
+ * @param context - The context to get information about depth,...
+ *
+ */
+ public void mapToEntity(final CompanyGroupDto dto, final CompanyGroup entity, final MappingContext context) {
+ if(context == null){
+ throw new IllegalArgumentException("Please pass a context!");
+ }
+
+ context.register(createEntityHash(dto), entity);
+ context.registerMappingRoot(createEntityHash(dto), dto);
+ super.mapToEntity(dto, entity, context);
+
+ entity.setName(toEntity_name(dto, entity, context));
+ entity.setDescription(toEntity_description(dto, entity, context));
+ entity.setMain_company(toEntity_main_company(dto, entity, context));
+ toEntity_companies(dto, entity, context);
+ }
+
+ /**
+ * Maps the property name from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toDto_name(final CompanyGroup in, final MappingContext context) {
+ return in.getName();
+ }
+
+ /**
+ * Maps the property name from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toEntity_name(final CompanyGroupDto in, final CompanyGroup parentEntity, final MappingContext context) {
+ return in.getName();
+ }
+
+ /**
+ * Maps the property description from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toDto_description(final CompanyGroup in, final MappingContext context) {
+ return in.getDescription();
+ }
+
+ /**
+ * Maps the property description from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toEntity_description(final CompanyGroupDto in, final CompanyGroup parentEntity, final MappingContext context) {
+ return in.getDescription();
+ }
+
+ /**
+ * Maps the property main_company from the given entity to the dto.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped dto
+ *
+ */
+ protected CompanyDto toDto_main_company(final CompanyGroup in, final MappingContext context) {
+ if(in.getMain_company() != null) {
+ // find a mapper that knows how to map the concrete input type.
+ org.eclipse.osbp.dsl.dto.lib.IMapper<CompanyDto, Company> mapper = (org.eclipse.osbp.dsl.dto.lib.IMapper<CompanyDto, Company>) getToDtoMapper(CompanyDto.class, in.getMain_company().getClass());
+ if(mapper == null) {
+ throw new IllegalStateException("Mapper must not be null!");
+ }
+ CompanyDto dto = null;
+ dto = context.get(mapper.createDtoHash(in.getMain_company()));
+ if(dto != null) {
+ if(context.isRefresh()){
+ mapper.mapToDTO(dto, in.getMain_company(), context);
+ }
+ return dto;
+ }
+
+ context.increaseLevel();
+ dto = mapper.createDto();
+ mapper.mapToDTO(dto, in.getMain_company(), context);
+ context.decreaseLevel();
+ return dto;
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Maps the property main_company from the given dto to the entity.
+ *
+ * @param in - The source dto
+ * @param parentEntity - The parent entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped entity
+ *
+ */
+ protected Company toEntity_main_company(final CompanyGroupDto in, final CompanyGroup parentEntity, final MappingContext context) {
+ if(in.getMain_company() != null) {
+ // find a mapper that knows how to map the concrete input type.
+ org.eclipse.osbp.dsl.dto.lib.IMapper<CompanyDto, Company> mapper = (org.eclipse.osbp.dsl.dto.lib.IMapper<CompanyDto, Company>) getToEntityMapper(in.getMain_company().getClass(), Company.class);
+ if(mapper == null) {
+ throw new IllegalStateException("Mapper must not be null!");
+ }
+
+ Company entity = null;
+ entity = context.get(mapper.createEntityHash(in.getMain_company()));
+ if(entity != null) {
+ return entity;
+ } else {
+ entity = (Company) context
+ .findEntityByEntityManager(Company.class, in.getMain_company().getId());
+ if (entity != null) {
+ context.register(mapper.createEntityHash(in.getMain_company()), entity);
+ return entity;
+ }
+ }
+
+ entity = mapper.createEntity();
+ mapper.mapToEntity(in.getMain_company(), entity, context);
+ return entity;
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Maps the property companies from the given entity to the dto.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return A list of mapped dtos
+ *
+ */
+ protected List<CompanyDto> toDto_companies(final CompanyGroup in, final MappingContext context) {
+ // nothing to do here. Mapping is done by OppositeLists
+ return null;
+ }
+
+ /**
+ * Maps the property companies from the given dto to the entity.
+ *
+ * @param in - The source dto
+ * @param parentEntity - The parent entity
+ * @param context - The context to get information about depth,...
+ * @return A list of mapped entities
+ *
+ */
+ protected List<Company> toEntity_companies(final CompanyGroupDto in, final CompanyGroup parentEntity, final MappingContext context) {
+ org.eclipse.osbp.dsl.dto.lib.IMapper<CompanyDto, Company> mapper = getToEntityMapper(CompanyDto.class, Company.class);
+ if(mapper == null) {
+ throw new IllegalStateException("Mapper must not be null!");
+ }
+
+ org.eclipse.osbp.dsl.dto.lib.IEntityMappingList<CompanyDto> childsList =
+ (org.eclipse.osbp.dsl.dto.lib.IEntityMappingList<CompanyDto>) in.internalGetCompanies();
+
+ // if entities are being added, then they are passed to
+ // #addToContainerChilds of the parent entity. So the container ref is setup
+ // properly!
+ // if entities are being removed, then they are passed to the
+ // #internalRemoveFromChilds method of the parent entity. So they are
+ // removed directly from the list of entities.
+ childsList.mapToEntity(mapper,
+ parentEntity::addToCompanies,
+ parentEntity::internalRemoveFromCompanies);
+ return null;
+ }
+
+ public String createDtoHash(final Object in) {
+ return org.eclipse.osbp.runtime.common.hash.HashUtil.createObjectWithIdHash(CompanyGroupDto.class, in);
+ }
+
+ public String createEntityHash(final Object in) {
+ return org.eclipse.osbp.runtime.common.hash.HashUtil.createObjectWithIdHash(CompanyGroup.class, in);
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/mapper/CompanyRelationTypeDtoMapper.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/mapper/CompanyRelationTypeDtoMapper.java
new file mode 100644
index 0000000..a8d71aa
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/mapper/CompanyRelationTypeDtoMapper.java
@@ -0,0 +1,126 @@
+package org.osbp.tests.dtos.mapper;
+
+import org.eclipse.osbp.dsl.dto.lib.MappingContext;
+import org.osbp.tests.dtos.CompanyRelationTypeDto;
+import org.osbp.tests.dtos.mapper.BaseUUIDDtoMapper;
+import org.osbp.tests.entities.CompanyRelationType;
+
+/**
+ * This class maps the dto {@link CompanyRelationTypeDto} to and from the entity {@link CompanyRelationType}.
+ *
+ */
+@SuppressWarnings("all")
+public class CompanyRelationTypeDtoMapper<DTO extends CompanyRelationTypeDto, ENTITY extends CompanyRelationType> extends BaseUUIDDtoMapper<DTO, ENTITY> {
+ /**
+ * Creates a new instance of the entity
+ */
+ public CompanyRelationType createEntity() {
+ return new CompanyRelationType();
+ }
+
+ /**
+ * Creates a new instance of the dto
+ */
+ public CompanyRelationTypeDto createDto() {
+ return new CompanyRelationTypeDto();
+ }
+
+ /**
+ * Maps the entity {@link CompanyRelationType} to the dto {@link CompanyRelationTypeDto}.
+ *
+ * @param dto - The target dto
+ * @param entity - The source entity
+ * @param context - The context to get information about depth,...
+ *
+ */
+ public void mapToDTO(final CompanyRelationTypeDto dto, final CompanyRelationType entity, final MappingContext context) {
+ if(context == null){
+ throw new IllegalArgumentException("Please pass a context!");
+ }
+ context.register(createDtoHash(entity), dto);
+
+ super.mapToDTO(dto, entity, context);
+
+ dto.setName(toDto_name(entity, context));
+ dto.setDescription(toDto_description(entity, context));
+ }
+
+ /**
+ * Maps the dto {@link CompanyRelationTypeDto} to the entity {@link CompanyRelationType}.
+ *
+ * @param dto - The source dto
+ * @param entity - The target entity
+ * @param context - The context to get information about depth,...
+ *
+ */
+ public void mapToEntity(final CompanyRelationTypeDto dto, final CompanyRelationType entity, final MappingContext context) {
+ if(context == null){
+ throw new IllegalArgumentException("Please pass a context!");
+ }
+
+ context.register(createEntityHash(dto), entity);
+ context.registerMappingRoot(createEntityHash(dto), dto);
+ super.mapToEntity(dto, entity, context);
+
+ entity.setName(toEntity_name(dto, entity, context));
+ entity.setDescription(toEntity_description(dto, entity, context));
+ }
+
+ /**
+ * Maps the property name from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toDto_name(final CompanyRelationType in, final MappingContext context) {
+ return in.getName();
+ }
+
+ /**
+ * Maps the property name from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toEntity_name(final CompanyRelationTypeDto in, final CompanyRelationType parentEntity, final MappingContext context) {
+ return in.getName();
+ }
+
+ /**
+ * Maps the property description from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toDto_description(final CompanyRelationType in, final MappingContext context) {
+ return in.getDescription();
+ }
+
+ /**
+ * Maps the property description from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toEntity_description(final CompanyRelationTypeDto in, final CompanyRelationType parentEntity, final MappingContext context) {
+ return in.getDescription();
+ }
+
+ public String createDtoHash(final Object in) {
+ return org.eclipse.osbp.runtime.common.hash.HashUtil.createObjectWithIdHash(CompanyRelationTypeDto.class, in);
+ }
+
+ public String createEntityHash(final Object in) {
+ return org.eclipse.osbp.runtime.common.hash.HashUtil.createObjectWithIdHash(CompanyRelationType.class, in);
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/mapper/DepartmentDtoMapper.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/mapper/DepartmentDtoMapper.java
new file mode 100644
index 0000000..34abcb8
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/mapper/DepartmentDtoMapper.java
@@ -0,0 +1,276 @@
+package org.osbp.tests.dtos.mapper;
+
+import java.util.List;
+import org.eclipse.osbp.dsl.dto.lib.MappingContext;
+import org.osbp.tests.dtos.AddressDto;
+import org.osbp.tests.dtos.CompanyDto;
+import org.osbp.tests.dtos.DepartmentDto;
+import org.osbp.tests.dtos.mapper.BaseUUIDDtoMapper;
+import org.osbp.tests.entities.Address;
+import org.osbp.tests.entities.Company;
+import org.osbp.tests.entities.Department;
+
+/**
+ * This class maps the dto {@link DepartmentDto} to and from the entity {@link Department}.
+ *
+ */
+@SuppressWarnings("all")
+public class DepartmentDtoMapper<DTO extends DepartmentDto, ENTITY extends Department> extends BaseUUIDDtoMapper<DTO, ENTITY> {
+ /**
+ * Creates a new instance of the entity
+ */
+ public Department createEntity() {
+ return new Department();
+ }
+
+ /**
+ * Creates a new instance of the dto
+ */
+ public DepartmentDto createDto() {
+ return new DepartmentDto();
+ }
+
+ /**
+ * Maps the entity {@link Department} to the dto {@link DepartmentDto}.
+ *
+ * @param dto - The target dto
+ * @param entity - The source entity
+ * @param context - The context to get information about depth,...
+ *
+ */
+ public void mapToDTO(final DepartmentDto dto, final Department entity, final MappingContext context) {
+ if(context == null){
+ throw new IllegalArgumentException("Please pass a context!");
+ }
+ context.register(createDtoHash(entity), dto);
+
+ super.mapToDTO(dto, entity, context);
+
+ dto.setCompany(toDto_company(entity, context));
+ dto.setName(toDto_name(entity, context));
+ dto.setDescription(toDto_description(entity, context));
+ dto.setDefault_yearly_income(toDto_default_yearly_income(entity, context));
+ }
+
+ /**
+ * Maps the dto {@link DepartmentDto} to the entity {@link Department}.
+ *
+ * @param dto - The source dto
+ * @param entity - The target entity
+ * @param context - The context to get information about depth,...
+ *
+ */
+ public void mapToEntity(final DepartmentDto dto, final Department entity, final MappingContext context) {
+ if(context == null){
+ throw new IllegalArgumentException("Please pass a context!");
+ }
+
+ context.register(createEntityHash(dto), entity);
+ context.registerMappingRoot(createEntityHash(dto), dto);
+ super.mapToEntity(dto, entity, context);
+
+ entity.setCompany(toEntity_company(dto, entity, context));
+ entity.setName(toEntity_name(dto, entity, context));
+ entity.setDescription(toEntity_description(dto, entity, context));
+ toEntity_address(dto, entity, context);
+ entity.setDefault_yearly_income(toEntity_default_yearly_income(dto, entity, context));
+ }
+
+ /**
+ * Maps the property company from the given entity to the dto.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped dto
+ *
+ */
+ protected CompanyDto toDto_company(final Department in, final MappingContext context) {
+ if(in.getCompany() != null) {
+ // find a mapper that knows how to map the concrete input type.
+ org.eclipse.osbp.dsl.dto.lib.IMapper<CompanyDto, Company> mapper = (org.eclipse.osbp.dsl.dto.lib.IMapper<CompanyDto, Company>) getToDtoMapper(CompanyDto.class, in.getCompany().getClass());
+ if(mapper == null) {
+ throw new IllegalStateException("Mapper must not be null!");
+ }
+ CompanyDto dto = null;
+ dto = context.get(mapper.createDtoHash(in.getCompany()));
+ if(dto != null) {
+ if(context.isRefresh()){
+ mapper.mapToDTO(dto, in.getCompany(), context);
+ }
+ return dto;
+ }
+
+ context.increaseLevel();
+ dto = mapper.createDto();
+ mapper.mapToDTO(dto, in.getCompany(), context);
+ context.decreaseLevel();
+ return dto;
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Maps the property company from the given dto to the entity.
+ *
+ * @param in - The source dto
+ * @param parentEntity - The parent entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped entity
+ *
+ */
+ protected Company toEntity_company(final DepartmentDto in, final Department parentEntity, final MappingContext context) {
+ if(in.getCompany() != null) {
+ // find a mapper that knows how to map the concrete input type.
+ org.eclipse.osbp.dsl.dto.lib.IMapper<CompanyDto, Company> mapper = (org.eclipse.osbp.dsl.dto.lib.IMapper<CompanyDto, Company>) getToEntityMapper(in.getCompany().getClass(), Company.class);
+ if(mapper == null) {
+ throw new IllegalStateException("Mapper must not be null!");
+ }
+
+ Company entity = null;
+ entity = context.get(mapper.createEntityHash(in.getCompany()));
+ if(entity != null) {
+ return entity;
+ } else {
+ entity = (Company) context
+ .findEntityByEntityManager(Company.class, in.getCompany().getId());
+ if (entity != null) {
+ context.register(mapper.createEntityHash(in.getCompany()), entity);
+ return entity;
+ }
+ }
+
+ entity = mapper.createEntity();
+ mapper.mapToEntity(in.getCompany(), entity, context);
+ return entity;
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Maps the property name from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toDto_name(final Department in, final MappingContext context) {
+ return in.getName();
+ }
+
+ /**
+ * Maps the property name from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toEntity_name(final DepartmentDto in, final Department parentEntity, final MappingContext context) {
+ return in.getName();
+ }
+
+ /**
+ * Maps the property description from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toDto_description(final Department in, final MappingContext context) {
+ return in.getDescription();
+ }
+
+ /**
+ * Maps the property description from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toEntity_description(final DepartmentDto in, final Department parentEntity, final MappingContext context) {
+ return in.getDescription();
+ }
+
+ /**
+ * Maps the property address from the given entity to the dto.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return A list of mapped dtos
+ *
+ */
+ protected List<AddressDto> toDto_address(final Department in, final MappingContext context) {
+ // nothing to do here. Mapping is done by OppositeLists
+ return null;
+ }
+
+ /**
+ * Maps the property address from the given dto to the entity.
+ *
+ * @param in - The source dto
+ * @param parentEntity - The parent entity
+ * @param context - The context to get information about depth,...
+ * @return A list of mapped entities
+ *
+ */
+ protected List<Address> toEntity_address(final DepartmentDto in, final Department parentEntity, final MappingContext context) {
+ org.eclipse.osbp.dsl.dto.lib.IMapper<AddressDto, Address> mapper = getToEntityMapper(AddressDto.class, Address.class);
+ if(mapper == null) {
+ throw new IllegalStateException("Mapper must not be null!");
+ }
+
+ org.eclipse.osbp.dsl.dto.lib.IEntityMappingList<AddressDto> childsList =
+ (org.eclipse.osbp.dsl.dto.lib.IEntityMappingList<AddressDto>) in.internalGetAddress();
+
+ // if entities are being added, then they are passed to
+ // #addToContainerChilds of the parent entity. So the container ref is setup
+ // properly!
+ // if entities are being removed, then they are passed to the
+ // #internalRemoveFromChilds method of the parent entity. So they are
+ // removed directly from the list of entities.
+ childsList.mapToEntity(mapper,
+ parentEntity::addToAddress,
+ parentEntity::internalRemoveFromAddress);
+ return null;
+ }
+
+ /**
+ * Maps the property default_yearly_income from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected double toDto_default_yearly_income(final Department in, final MappingContext context) {
+ return in.getDefault_yearly_income();
+ }
+
+ /**
+ * Maps the property default_yearly_income from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected double toEntity_default_yearly_income(final DepartmentDto in, final Department parentEntity, final MappingContext context) {
+ return in.getDefault_yearly_income();
+ }
+
+ public String createDtoHash(final Object in) {
+ return org.eclipse.osbp.runtime.common.hash.HashUtil.createObjectWithIdHash(DepartmentDto.class, in);
+ }
+
+ public String createEntityHash(final Object in) {
+ return org.eclipse.osbp.runtime.common.hash.HashUtil.createObjectWithIdHash(Department.class, in);
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/mapper/DtoTestBeanDtoMapper.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/mapper/DtoTestBeanDtoMapper.java
new file mode 100644
index 0000000..a7c9934
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/mapper/DtoTestBeanDtoMapper.java
@@ -0,0 +1,213 @@
+package org.osbp.tests.dtos.mapper;
+
+import org.eclipse.osbp.dsl.dto.lib.IMapper;
+import org.eclipse.osbp.dsl.dto.lib.IMapperAccess;
+import org.eclipse.osbp.dsl.dto.lib.MappingContext;
+import org.osbp.tests.dtos.DtoTestBeanDto;
+import org.osbp.tests.dtos.DtoTestChildCrossRefDto;
+import org.osbp.tests.entities.DtoTestBean;
+import org.osbp.tests.entities.DtoTestChildCrossRef;
+
+/**
+ * This class maps the dto {@link DtoTestBeanDto} to and from the entity {@link DtoTestBean}.
+ *
+ */
+@SuppressWarnings("all")
+public class DtoTestBeanDtoMapper<DTO extends DtoTestBeanDto, ENTITY extends DtoTestBean> implements IMapper<DTO, ENTITY> {
+ private IMapperAccess mapperAccess;
+
+ /**
+ * Returns the mapper instance that may map between the given dto and entity. Or <code>null</code> if no mapper is available.
+ *
+ * @param dtoClass - the class of the dto that should be mapped
+ * @param entityClass - the class of the entity that should be mapped
+ * @return the mapper instance or <code>null</code>
+ */
+ protected <D, E> IMapper<D, E> getToDtoMapper(final Class<D> dtoClass, final Class<E> entityClass) {
+ return mapperAccess.getToDtoMapper(dtoClass, entityClass);
+ }
+
+ /**
+ * Returns the mapper instance that may map between the given dto and entity. Or <code>null</code> if no mapper is available.
+ *
+ * @param dtoClass - the class of the dto that should be mapped
+ * @param entityClass - the class of the entity that should be mapped
+ * @return the mapper instance or <code>null</code>
+ */
+ protected <D, E> IMapper<D, E> getToEntityMapper(final Class<D> dtoClass, final Class<E> entityClass) {
+ return mapperAccess.getToEntityMapper(dtoClass, entityClass);
+ }
+
+ /**
+ * Called by OSGi-DS. Binds the mapper access service.
+ *
+ * @param service - The mapper access service
+ *
+ */
+ protected void bindMapperAccess(final IMapperAccess mapperAccess) {
+ this.mapperAccess = mapperAccess;
+ }
+
+ /**
+ * Called by OSGi-DS. Binds the mapper access service.
+ *
+ * @param service - The mapper access service
+ *
+ */
+ protected void unbindMapperAccess(final IMapperAccess mapperAccess) {
+ this.mapperAccess = null;
+ }
+
+ /**
+ * Creates a new instance of the entity
+ */
+ public DtoTestBean createEntity() {
+ return new DtoTestBean();
+ }
+
+ /**
+ * Creates a new instance of the dto
+ */
+ public DtoTestBeanDto createDto() {
+ return new DtoTestBeanDto();
+ }
+
+ /**
+ * Maps the entity {@link DtoTestBean} to the dto {@link DtoTestBeanDto}.
+ *
+ * @param dto - The target dto
+ * @param entity - The source entity
+ * @param context - The context to get information about depth,...
+ *
+ */
+ public void mapToDTO(final DtoTestBeanDto dto, final DtoTestBean entity, final MappingContext context) {
+ if(context == null){
+ throw new IllegalArgumentException("Please pass a context!");
+ }
+ dto.setFoo(toDto_foo(entity, context));
+ dto.setCrossRefChild(toDto_crossRefChild(entity, context));
+ }
+
+ /**
+ * Maps the dto {@link DtoTestBeanDto} to the entity {@link DtoTestBean}.
+ *
+ * @param dto - The source dto
+ * @param entity - The target entity
+ * @param context - The context to get information about depth,...
+ *
+ */
+ public void mapToEntity(final DtoTestBeanDto dto, final DtoTestBean entity, final MappingContext context) {
+ if(context == null){
+ throw new IllegalArgumentException("Please pass a context!");
+ }
+
+
+ entity.setFoo(toEntity_foo(dto, entity, context));
+ entity.setCrossRefChild(toEntity_crossRefChild(dto, entity, context));
+ }
+
+ /**
+ * Maps the property foo from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toDto_foo(final DtoTestBean in, final MappingContext context) {
+ return in.getFoo();
+ }
+
+ /**
+ * Maps the property foo from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toEntity_foo(final DtoTestBeanDto in, final DtoTestBean parentEntity, final MappingContext context) {
+ return in.getFoo();
+ }
+
+ /**
+ * Maps the property crossRefChild from the given entity to the dto.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped dto
+ *
+ */
+ protected DtoTestChildCrossRefDto toDto_crossRefChild(final DtoTestBean in, final MappingContext context) {
+ if(in.getCrossRefChild() != null) {
+ // find a mapper that knows how to map the concrete input type.
+ org.eclipse.osbp.dsl.dto.lib.IMapper<DtoTestChildCrossRefDto, DtoTestChildCrossRef> mapper = (org.eclipse.osbp.dsl.dto.lib.IMapper<DtoTestChildCrossRefDto, DtoTestChildCrossRef>) getToDtoMapper(DtoTestChildCrossRefDto.class, in.getCrossRefChild().getClass());
+ if(mapper == null) {
+ throw new IllegalStateException("Mapper must not be null!");
+ }
+ DtoTestChildCrossRefDto dto = null;
+ dto = context.get(mapper.createDtoHash(in.getCrossRefChild()));
+ if(dto != null) {
+ if(context.isRefresh()){
+ mapper.mapToDTO(dto, in.getCrossRefChild(), context);
+ }
+ return dto;
+ }
+
+ context.increaseLevel();
+ dto = mapper.createDto();
+ mapper.mapToDTO(dto, in.getCrossRefChild(), context);
+ context.decreaseLevel();
+ return dto;
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Maps the property crossRefChild from the given dto to the entity.
+ *
+ * @param in - The source dto
+ * @param parentEntity - The parent entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped entity
+ *
+ */
+ protected DtoTestChildCrossRef toEntity_crossRefChild(final DtoTestBeanDto in, final DtoTestBean parentEntity, final MappingContext context) {
+ if(in.getCrossRefChild() != null) {
+ // find a mapper that knows how to map the concrete input type.
+ org.eclipse.osbp.dsl.dto.lib.IMapper<DtoTestChildCrossRefDto, DtoTestChildCrossRef> mapper = (org.eclipse.osbp.dsl.dto.lib.IMapper<DtoTestChildCrossRefDto, DtoTestChildCrossRef>) getToEntityMapper(in.getCrossRefChild().getClass(), DtoTestChildCrossRef.class);
+ if(mapper == null) {
+ throw new IllegalStateException("Mapper must not be null!");
+ }
+
+ DtoTestChildCrossRef entity = null;
+ entity = context.get(mapper.createEntityHash(in.getCrossRefChild()));
+ if(entity != null) {
+ return entity;
+ } else {
+ entity = (DtoTestChildCrossRef) context
+ .findEntityByEntityManager(DtoTestChildCrossRef.class, in.getCrossRefChild().getId());
+ if (entity != null) {
+ context.register(mapper.createEntityHash(in.getCrossRefChild()), entity);
+ return entity;
+ }
+ }
+
+ entity = mapper.createEntity();
+ mapper.mapToEntity(in.getCrossRefChild(), entity, context);
+ return entity;
+ } else {
+ return null;
+ }
+ }
+
+ public String createDtoHash(final Object in) {
+ throw new UnsupportedOperationException("No id attribute available");
+ }
+
+ public String createEntityHash(final Object in) {
+ throw new UnsupportedOperationException("No id attribute available");
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/mapper/DtoTestChildContainmentDtoMapper.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/mapper/DtoTestChildContainmentDtoMapper.java
new file mode 100644
index 0000000..faf5246
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/mapper/DtoTestChildContainmentDtoMapper.java
@@ -0,0 +1,148 @@
+package org.osbp.tests.dtos.mapper;
+
+import org.eclipse.osbp.dsl.dto.lib.MappingContext;
+import org.osbp.tests.dtos.DtoTestChildContainmentDto;
+import org.osbp.tests.dtos.DtoTestParentDto;
+import org.osbp.tests.dtos.mapper.BaseUUIDDtoMapper;
+import org.osbp.tests.entities.DtoTestChildContainment;
+import org.osbp.tests.entities.DtoTestParent;
+
+/**
+ * This class maps the dto {@link DtoTestChildContainmentDto} to and from the entity {@link DtoTestChildContainment}.
+ *
+ */
+@SuppressWarnings("all")
+public class DtoTestChildContainmentDtoMapper<DTO extends DtoTestChildContainmentDto, ENTITY extends DtoTestChildContainment> extends BaseUUIDDtoMapper<DTO, ENTITY> {
+ /**
+ * Creates a new instance of the entity
+ */
+ public DtoTestChildContainment createEntity() {
+ return new DtoTestChildContainment();
+ }
+
+ /**
+ * Creates a new instance of the dto
+ */
+ public DtoTestChildContainmentDto createDto() {
+ return new DtoTestChildContainmentDto();
+ }
+
+ /**
+ * Maps the entity {@link DtoTestChildContainment} to the dto {@link DtoTestChildContainmentDto}.
+ *
+ * @param dto - The target dto
+ * @param entity - The source entity
+ * @param context - The context to get information about depth,...
+ *
+ */
+ public void mapToDTO(final DtoTestChildContainmentDto dto, final DtoTestChildContainment entity, final MappingContext context) {
+ if(context == null){
+ throw new IllegalArgumentException("Please pass a context!");
+ }
+ context.register(createDtoHash(entity), dto);
+
+ super.mapToDTO(dto, entity, context);
+
+ dto.setContainer(toDto_container(entity, context));
+ }
+
+ /**
+ * Maps the dto {@link DtoTestChildContainmentDto} to the entity {@link DtoTestChildContainment}.
+ *
+ * @param dto - The source dto
+ * @param entity - The target entity
+ * @param context - The context to get information about depth,...
+ *
+ */
+ public void mapToEntity(final DtoTestChildContainmentDto dto, final DtoTestChildContainment entity, final MappingContext context) {
+ if(context == null){
+ throw new IllegalArgumentException("Please pass a context!");
+ }
+
+ context.register(createEntityHash(dto), entity);
+ context.registerMappingRoot(createEntityHash(dto), dto);
+ super.mapToEntity(dto, entity, context);
+
+ entity.setContainer(toEntity_container(dto, entity, context));
+ }
+
+ /**
+ * Maps the property container from the given entity to the dto.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped dto
+ *
+ */
+ protected DtoTestParentDto toDto_container(final DtoTestChildContainment in, final MappingContext context) {
+ if(in.getContainer() != null) {
+ // find a mapper that knows how to map the concrete input type.
+ org.eclipse.osbp.dsl.dto.lib.IMapper<DtoTestParentDto, DtoTestParent> mapper = (org.eclipse.osbp.dsl.dto.lib.IMapper<DtoTestParentDto, DtoTestParent>) getToDtoMapper(DtoTestParentDto.class, in.getContainer().getClass());
+ if(mapper == null) {
+ throw new IllegalStateException("Mapper must not be null!");
+ }
+ DtoTestParentDto dto = null;
+ dto = context.get(mapper.createDtoHash(in.getContainer()));
+ if(dto != null) {
+ if(context.isRefresh()){
+ mapper.mapToDTO(dto, in.getContainer(), context);
+ }
+ return dto;
+ }
+
+ context.increaseLevel();
+ dto = mapper.createDto();
+ mapper.mapToDTO(dto, in.getContainer(), context);
+ context.decreaseLevel();
+ return dto;
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Maps the property container from the given dto to the entity.
+ *
+ * @param in - The source dto
+ * @param parentEntity - The parent entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped entity
+ *
+ */
+ protected DtoTestParent toEntity_container(final DtoTestChildContainmentDto in, final DtoTestChildContainment parentEntity, final MappingContext context) {
+ if(in.getContainer() != null) {
+ // find a mapper that knows how to map the concrete input type.
+ org.eclipse.osbp.dsl.dto.lib.IMapper<DtoTestParentDto, DtoTestParent> mapper = (org.eclipse.osbp.dsl.dto.lib.IMapper<DtoTestParentDto, DtoTestParent>) getToEntityMapper(in.getContainer().getClass(), DtoTestParent.class);
+ if(mapper == null) {
+ throw new IllegalStateException("Mapper must not be null!");
+ }
+
+ DtoTestParent entity = null;
+ entity = context.get(mapper.createEntityHash(in.getContainer()));
+ if(entity != null) {
+ return entity;
+ } else {
+ entity = (DtoTestParent) context
+ .findEntityByEntityManager(DtoTestParent.class, in.getContainer().getId());
+ if (entity != null) {
+ context.register(mapper.createEntityHash(in.getContainer()), entity);
+ return entity;
+ }
+ }
+
+ entity = mapper.createEntity();
+ mapper.mapToEntity(in.getContainer(), entity, context);
+ return entity;
+ } else {
+ return null;
+ }
+ }
+
+ public String createDtoHash(final Object in) {
+ return org.eclipse.osbp.runtime.common.hash.HashUtil.createObjectWithIdHash(DtoTestChildContainmentDto.class, in);
+ }
+
+ public String createEntityHash(final Object in) {
+ return org.eclipse.osbp.runtime.common.hash.HashUtil.createObjectWithIdHash(DtoTestChildContainment.class, in);
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/mapper/DtoTestChildCrossRefDtoMapper.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/mapper/DtoTestChildCrossRefDtoMapper.java
new file mode 100644
index 0000000..0dd4358
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/mapper/DtoTestChildCrossRefDtoMapper.java
@@ -0,0 +1,148 @@
+package org.osbp.tests.dtos.mapper;
+
+import org.eclipse.osbp.dsl.dto.lib.MappingContext;
+import org.osbp.tests.dtos.DtoTestChildCrossRefDto;
+import org.osbp.tests.dtos.DtoTestParentDto;
+import org.osbp.tests.dtos.mapper.BaseUUIDDtoMapper;
+import org.osbp.tests.entities.DtoTestChildCrossRef;
+import org.osbp.tests.entities.DtoTestParent;
+
+/**
+ * This class maps the dto {@link DtoTestChildCrossRefDto} to and from the entity {@link DtoTestChildCrossRef}.
+ *
+ */
+@SuppressWarnings("all")
+public class DtoTestChildCrossRefDtoMapper<DTO extends DtoTestChildCrossRefDto, ENTITY extends DtoTestChildCrossRef> extends BaseUUIDDtoMapper<DTO, ENTITY> {
+ /**
+ * Creates a new instance of the entity
+ */
+ public DtoTestChildCrossRef createEntity() {
+ return new DtoTestChildCrossRef();
+ }
+
+ /**
+ * Creates a new instance of the dto
+ */
+ public DtoTestChildCrossRefDto createDto() {
+ return new DtoTestChildCrossRefDto();
+ }
+
+ /**
+ * Maps the entity {@link DtoTestChildCrossRef} to the dto {@link DtoTestChildCrossRefDto}.
+ *
+ * @param dto - The target dto
+ * @param entity - The source entity
+ * @param context - The context to get information about depth,...
+ *
+ */
+ public void mapToDTO(final DtoTestChildCrossRefDto dto, final DtoTestChildCrossRef entity, final MappingContext context) {
+ if(context == null){
+ throw new IllegalArgumentException("Please pass a context!");
+ }
+ context.register(createDtoHash(entity), dto);
+
+ super.mapToDTO(dto, entity, context);
+
+ dto.setContainer(toDto_container(entity, context));
+ }
+
+ /**
+ * Maps the dto {@link DtoTestChildCrossRefDto} to the entity {@link DtoTestChildCrossRef}.
+ *
+ * @param dto - The source dto
+ * @param entity - The target entity
+ * @param context - The context to get information about depth,...
+ *
+ */
+ public void mapToEntity(final DtoTestChildCrossRefDto dto, final DtoTestChildCrossRef entity, final MappingContext context) {
+ if(context == null){
+ throw new IllegalArgumentException("Please pass a context!");
+ }
+
+ context.register(createEntityHash(dto), entity);
+ context.registerMappingRoot(createEntityHash(dto), dto);
+ super.mapToEntity(dto, entity, context);
+
+ entity.setContainer(toEntity_container(dto, entity, context));
+ }
+
+ /**
+ * Maps the property container from the given entity to the dto.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped dto
+ *
+ */
+ protected DtoTestParentDto toDto_container(final DtoTestChildCrossRef in, final MappingContext context) {
+ if(in.getContainer() != null) {
+ // find a mapper that knows how to map the concrete input type.
+ org.eclipse.osbp.dsl.dto.lib.IMapper<DtoTestParentDto, DtoTestParent> mapper = (org.eclipse.osbp.dsl.dto.lib.IMapper<DtoTestParentDto, DtoTestParent>) getToDtoMapper(DtoTestParentDto.class, in.getContainer().getClass());
+ if(mapper == null) {
+ throw new IllegalStateException("Mapper must not be null!");
+ }
+ DtoTestParentDto dto = null;
+ dto = context.get(mapper.createDtoHash(in.getContainer()));
+ if(dto != null) {
+ if(context.isRefresh()){
+ mapper.mapToDTO(dto, in.getContainer(), context);
+ }
+ return dto;
+ }
+
+ context.increaseLevel();
+ dto = mapper.createDto();
+ mapper.mapToDTO(dto, in.getContainer(), context);
+ context.decreaseLevel();
+ return dto;
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Maps the property container from the given dto to the entity.
+ *
+ * @param in - The source dto
+ * @param parentEntity - The parent entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped entity
+ *
+ */
+ protected DtoTestParent toEntity_container(final DtoTestChildCrossRefDto in, final DtoTestChildCrossRef parentEntity, final MappingContext context) {
+ if(in.getContainer() != null) {
+ // find a mapper that knows how to map the concrete input type.
+ org.eclipse.osbp.dsl.dto.lib.IMapper<DtoTestParentDto, DtoTestParent> mapper = (org.eclipse.osbp.dsl.dto.lib.IMapper<DtoTestParentDto, DtoTestParent>) getToEntityMapper(in.getContainer().getClass(), DtoTestParent.class);
+ if(mapper == null) {
+ throw new IllegalStateException("Mapper must not be null!");
+ }
+
+ DtoTestParent entity = null;
+ entity = context.get(mapper.createEntityHash(in.getContainer()));
+ if(entity != null) {
+ return entity;
+ } else {
+ entity = (DtoTestParent) context
+ .findEntityByEntityManager(DtoTestParent.class, in.getContainer().getId());
+ if (entity != null) {
+ context.register(mapper.createEntityHash(in.getContainer()), entity);
+ return entity;
+ }
+ }
+
+ entity = mapper.createEntity();
+ mapper.mapToEntity(in.getContainer(), entity, context);
+ return entity;
+ } else {
+ return null;
+ }
+ }
+
+ public String createDtoHash(final Object in) {
+ return org.eclipse.osbp.runtime.common.hash.HashUtil.createObjectWithIdHash(DtoTestChildCrossRefDto.class, in);
+ }
+
+ public String createEntityHash(final Object in) {
+ return org.eclipse.osbp.runtime.common.hash.HashUtil.createObjectWithIdHash(DtoTestChildCrossRef.class, in);
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/mapper/DtoTestParentDtoMapper.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/mapper/DtoTestParentDtoMapper.java
new file mode 100644
index 0000000..ea92a50
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/mapper/DtoTestParentDtoMapper.java
@@ -0,0 +1,322 @@
+package org.osbp.tests.dtos.mapper;
+
+import java.util.List;
+import org.eclipse.osbp.dsl.dto.lib.MappingContext;
+import org.osbp.tests.dtos.DtoTestBeanDto;
+import org.osbp.tests.dtos.DtoTestChildContainmentDto;
+import org.osbp.tests.dtos.DtoTestChildCrossRefDto;
+import org.osbp.tests.dtos.DtoTestParentDto;
+import org.osbp.tests.dtos.mapper.BaseUUIDDtoMapper;
+import org.osbp.tests.entities.DtoTestBean;
+import org.osbp.tests.entities.DtoTestChildContainment;
+import org.osbp.tests.entities.DtoTestChildCrossRef;
+import org.osbp.tests.entities.DtoTestParent;
+
+/**
+ * This class maps the dto {@link DtoTestParentDto} to and from the entity {@link DtoTestParent}.
+ *
+ */
+@SuppressWarnings("all")
+public class DtoTestParentDtoMapper<DTO extends DtoTestParentDto, ENTITY extends DtoTestParent> extends BaseUUIDDtoMapper<DTO, ENTITY> {
+ /**
+ * Creates a new instance of the entity
+ */
+ public DtoTestParent createEntity() {
+ return new DtoTestParent();
+ }
+
+ /**
+ * Creates a new instance of the dto
+ */
+ public DtoTestParentDto createDto() {
+ return new DtoTestParentDto();
+ }
+
+ /**
+ * Maps the entity {@link DtoTestParent} to the dto {@link DtoTestParentDto}.
+ *
+ * @param dto - The target dto
+ * @param entity - The source entity
+ * @param context - The context to get information about depth,...
+ *
+ */
+ public void mapToDTO(final DtoTestParentDto dto, final DtoTestParent entity, final MappingContext context) {
+ if(context == null){
+ throw new IllegalArgumentException("Please pass a context!");
+ }
+ context.register(createDtoHash(entity), dto);
+
+ super.mapToDTO(dto, entity, context);
+
+ dto.setString(toDto_string(entity, context));
+ dto.setCrossRefChild(toDto_crossRefChild(entity, context));
+ dto.setBeanx(toDto_beanx(entity, context));
+ }
+
+ /**
+ * Maps the dto {@link DtoTestParentDto} to the entity {@link DtoTestParent}.
+ *
+ * @param dto - The source dto
+ * @param entity - The target entity
+ * @param context - The context to get information about depth,...
+ *
+ */
+ public void mapToEntity(final DtoTestParentDto dto, final DtoTestParent entity, final MappingContext context) {
+ if(context == null){
+ throw new IllegalArgumentException("Please pass a context!");
+ }
+
+ context.register(createEntityHash(dto), entity);
+ context.registerMappingRoot(createEntityHash(dto), dto);
+ super.mapToEntity(dto, entity, context);
+
+ entity.setString(toEntity_string(dto, entity, context));
+ toEntity_containmentChilds(dto, entity, context);
+ toEntity_crossRefChilds(dto, entity, context);
+ entity.setCrossRefChild(toEntity_crossRefChild(dto, entity, context));
+ entity.setBeanx(toEntity_beanx(dto, entity, context));
+ }
+
+ /**
+ * Maps the property string from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toDto_string(final DtoTestParent in, final MappingContext context) {
+ return in.getString();
+ }
+
+ /**
+ * Maps the property string from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toEntity_string(final DtoTestParentDto in, final DtoTestParent parentEntity, final MappingContext context) {
+ return in.getString();
+ }
+
+ /**
+ * Maps the property containmentChilds from the given entity to the dto.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return A list of mapped dtos
+ *
+ */
+ protected List<DtoTestChildContainmentDto> toDto_containmentChilds(final DtoTestParent in, final MappingContext context) {
+ // nothing to do here. Mapping is done by OppositeLists
+ return null;
+ }
+
+ /**
+ * Maps the property containmentChilds from the given dto to the entity.
+ *
+ * @param in - The source dto
+ * @param parentEntity - The parent entity
+ * @param context - The context to get information about depth,...
+ * @return A list of mapped entities
+ *
+ */
+ protected List<DtoTestChildContainment> toEntity_containmentChilds(final DtoTestParentDto in, final DtoTestParent parentEntity, final MappingContext context) {
+ org.eclipse.osbp.dsl.dto.lib.IMapper<DtoTestChildContainmentDto, DtoTestChildContainment> mapper = getToEntityMapper(DtoTestChildContainmentDto.class, DtoTestChildContainment.class);
+ if(mapper == null) {
+ throw new IllegalStateException("Mapper must not be null!");
+ }
+
+ org.eclipse.osbp.dsl.dto.lib.IEntityMappingList<DtoTestChildContainmentDto> childsList =
+ (org.eclipse.osbp.dsl.dto.lib.IEntityMappingList<DtoTestChildContainmentDto>) in.internalGetContainmentChilds();
+
+ // if entities are being added, then they are passed to
+ // #addToContainerChilds of the parent entity. So the container ref is setup
+ // properly!
+ // if entities are being removed, then they are passed to the
+ // #internalRemoveFromChilds method of the parent entity. So they are
+ // removed directly from the list of entities.
+ childsList.mapToEntity(mapper,
+ parentEntity::addToContainmentChilds,
+ parentEntity::internalRemoveFromContainmentChilds);
+ return null;
+ }
+
+ /**
+ * Maps the property crossRefChilds from the given entity to the dto.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return A list of mapped dtos
+ *
+ */
+ protected List<DtoTestChildCrossRefDto> toDto_crossRefChilds(final DtoTestParent in, final MappingContext context) {
+ // nothing to do here. Mapping is done by OppositeLists
+ return null;
+ }
+
+ /**
+ * Maps the property crossRefChilds from the given dto to the entity.
+ *
+ * @param in - The source dto
+ * @param parentEntity - The parent entity
+ * @param context - The context to get information about depth,...
+ * @return A list of mapped entities
+ *
+ */
+ protected List<DtoTestChildCrossRef> toEntity_crossRefChilds(final DtoTestParentDto in, final DtoTestParent parentEntity, final MappingContext context) {
+ org.eclipse.osbp.dsl.dto.lib.IMapper<DtoTestChildCrossRefDto, DtoTestChildCrossRef> mapper = getToEntityMapper(DtoTestChildCrossRefDto.class, DtoTestChildCrossRef.class);
+ if(mapper == null) {
+ throw new IllegalStateException("Mapper must not be null!");
+ }
+
+ org.eclipse.osbp.dsl.dto.lib.IEntityMappingList<DtoTestChildCrossRefDto> childsList =
+ (org.eclipse.osbp.dsl.dto.lib.IEntityMappingList<DtoTestChildCrossRefDto>) in.internalGetCrossRefChilds();
+
+ // if entities are being added, then they are passed to
+ // #addToContainerChilds of the parent entity. So the container ref is setup
+ // properly!
+ // if entities are being removed, then they are passed to the
+ // #internalRemoveFromChilds method of the parent entity. So they are
+ // removed directly from the list of entities.
+ childsList.mapToEntity(mapper,
+ parentEntity::addToCrossRefChilds,
+ parentEntity::internalRemoveFromCrossRefChilds);
+ return null;
+ }
+
+ /**
+ * Maps the property crossRefChild from the given entity to the dto.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped dto
+ *
+ */
+ protected DtoTestChildCrossRefDto toDto_crossRefChild(final DtoTestParent in, final MappingContext context) {
+ if(in.getCrossRefChild() != null) {
+ // find a mapper that knows how to map the concrete input type.
+ org.eclipse.osbp.dsl.dto.lib.IMapper<DtoTestChildCrossRefDto, DtoTestChildCrossRef> mapper = (org.eclipse.osbp.dsl.dto.lib.IMapper<DtoTestChildCrossRefDto, DtoTestChildCrossRef>) getToDtoMapper(DtoTestChildCrossRefDto.class, in.getCrossRefChild().getClass());
+ if(mapper == null) {
+ throw new IllegalStateException("Mapper must not be null!");
+ }
+ DtoTestChildCrossRefDto dto = null;
+ dto = context.get(mapper.createDtoHash(in.getCrossRefChild()));
+ if(dto != null) {
+ if(context.isRefresh()){
+ mapper.mapToDTO(dto, in.getCrossRefChild(), context);
+ }
+ return dto;
+ }
+
+ context.increaseLevel();
+ dto = mapper.createDto();
+ mapper.mapToDTO(dto, in.getCrossRefChild(), context);
+ context.decreaseLevel();
+ return dto;
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Maps the property crossRefChild from the given dto to the entity.
+ *
+ * @param in - The source dto
+ * @param parentEntity - The parent entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped entity
+ *
+ */
+ protected DtoTestChildCrossRef toEntity_crossRefChild(final DtoTestParentDto in, final DtoTestParent parentEntity, final MappingContext context) {
+ if(in.getCrossRefChild() != null) {
+ // find a mapper that knows how to map the concrete input type.
+ org.eclipse.osbp.dsl.dto.lib.IMapper<DtoTestChildCrossRefDto, DtoTestChildCrossRef> mapper = (org.eclipse.osbp.dsl.dto.lib.IMapper<DtoTestChildCrossRefDto, DtoTestChildCrossRef>) getToEntityMapper(in.getCrossRefChild().getClass(), DtoTestChildCrossRef.class);
+ if(mapper == null) {
+ throw new IllegalStateException("Mapper must not be null!");
+ }
+
+ DtoTestChildCrossRef entity = null;
+ entity = context.get(mapper.createEntityHash(in.getCrossRefChild()));
+ if(entity != null) {
+ return entity;
+ } else {
+ entity = (DtoTestChildCrossRef) context
+ .findEntityByEntityManager(DtoTestChildCrossRef.class, in.getCrossRefChild().getId());
+ if (entity != null) {
+ context.register(mapper.createEntityHash(in.getCrossRefChild()), entity);
+ return entity;
+ }
+ }
+
+ entity = mapper.createEntity();
+ mapper.mapToEntity(in.getCrossRefChild(), entity, context);
+ return entity;
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Maps the property beanx from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected DtoTestBeanDto toDto_beanx(final DtoTestParent in, final MappingContext context) {
+ if(in.getBeanx() != null) {
+ // find a mapper that knows how to map the concrete input type.
+ org.eclipse.osbp.dsl.dto.lib.IMapper<DtoTestBeanDto, DtoTestBean> mapper = (org.eclipse.osbp.dsl.dto.lib.IMapper<DtoTestBeanDto, DtoTestBean>) getToDtoMapper(DtoTestBeanDto.class, in.getBeanx().getClass());
+ if(mapper == null) {
+ throw new IllegalStateException("Mapper must not be null!");
+ }
+
+ DtoTestBeanDto dto = null;
+ context.increaseLevel();
+ dto = mapper.createDto();
+ mapper.mapToDTO(dto, in.getBeanx(), context);
+ context.decreaseLevel();
+ return dto;
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Maps the property beanx from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected DtoTestBean toEntity_beanx(final DtoTestParentDto in, final DtoTestParent parentEntity, final MappingContext context) {
+ if(in.getBeanx() != null) {
+ // find a mapper that knows how to map the concrete input type.
+ org.eclipse.osbp.dsl.dto.lib.IMapper<DtoTestBeanDto, DtoTestBean> mapper = (org.eclipse.osbp.dsl.dto.lib.IMapper<DtoTestBeanDto, DtoTestBean>) getToEntityMapper(in.getBeanx().getClass(), DtoTestBean.class);
+ if(mapper == null) {
+ throw new IllegalStateException("Mapper must not be null!");
+ }
+
+ DtoTestBean entity = mapper.createEntity();
+ mapper.mapToEntity(in.getBeanx(), entity, context);
+ return entity;
+ } else {
+ return null;
+ }
+ }
+
+ public String createDtoHash(final Object in) {
+ return org.eclipse.osbp.runtime.common.hash.HashUtil.createObjectWithIdHash(DtoTestParentDto.class, in);
+ }
+
+ public String createEntityHash(final Object in) {
+ return org.eclipse.osbp.runtime.common.hash.HashUtil.createObjectWithIdHash(DtoTestParent.class, in);
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/mapper/McustomerDtoMapper.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/mapper/McustomerDtoMapper.java
new file mode 100644
index 0000000..7f8b12a
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/mapper/McustomerDtoMapper.java
@@ -0,0 +1,902 @@
+package org.osbp.tests.dtos.mapper;
+
+import java.util.Date;
+import java.util.List;
+import org.eclipse.osbp.dsl.dto.lib.MappingContext;
+import org.osbp.tests.dtos.CashSlipDto;
+import org.osbp.tests.dtos.McustomerDto;
+import org.osbp.tests.dtos.mapper.BaseIDDtoMapper;
+import org.osbp.tests.entities.CashSlip;
+import org.osbp.tests.entities.Mcustomer;
+
+/**
+ * This class maps the dto {@link McustomerDto} to and from the entity {@link Mcustomer}.
+ *
+ */
+@SuppressWarnings("all")
+public class McustomerDtoMapper<DTO extends McustomerDto, ENTITY extends Mcustomer> extends BaseIDDtoMapper<DTO, ENTITY> {
+ /**
+ * Creates a new instance of the entity
+ */
+ public Mcustomer createEntity() {
+ return new Mcustomer();
+ }
+
+ /**
+ * Creates a new instance of the dto
+ */
+ public McustomerDto createDto() {
+ return new McustomerDto();
+ }
+
+ /**
+ * Maps the entity {@link Mcustomer} to the dto {@link McustomerDto}.
+ *
+ * @param dto - The target dto
+ * @param entity - The source entity
+ * @param context - The context to get information about depth,...
+ *
+ */
+ public void mapToDTO(final McustomerDto dto, final Mcustomer entity, final MappingContext context) {
+ if(context == null){
+ throw new IllegalArgumentException("Please pass a context!");
+ }
+ context.register(createDtoHash(entity), dto);
+
+ super.mapToDTO(dto, entity, context);
+
+ dto.setAccount_num(toDto_account_num(entity, context));
+ dto.setLname(toDto_lname(entity, context));
+ dto.setFname(toDto_fname(entity, context));
+ dto.setMi(toDto_mi(entity, context));
+ dto.setAddress1(toDto_address1(entity, context));
+ dto.setAddress2(toDto_address2(entity, context));
+ dto.setAddress3(toDto_address3(entity, context));
+ dto.setAddress4(toDto_address4(entity, context));
+ dto.setCity(toDto_city(entity, context));
+ dto.setState_province(toDto_state_province(entity, context));
+ dto.setPostal_code(toDto_postal_code(entity, context));
+ dto.setCountry(toDto_country(entity, context));
+ dto.setPhone1(toDto_phone1(entity, context));
+ dto.setPhone2(toDto_phone2(entity, context));
+ dto.setBirthdate(toDto_birthdate(entity, context));
+ dto.setMarital_status(toDto_marital_status(entity, context));
+ dto.setYearly_income(toDto_yearly_income(entity, context));
+ dto.setGender(toDto_gender(entity, context));
+ dto.setTotal_children(toDto_total_children(entity, context));
+ dto.setNum_children_at_home(toDto_num_children_at_home(entity, context));
+ dto.setEducation(toDto_education(entity, context));
+ dto.setDate_accnt_opened(toDto_date_accnt_opened(entity, context));
+ dto.setMember_card(toDto_member_card(entity, context));
+ dto.setOccupation(toDto_occupation(entity, context));
+ dto.setHouseowner(toDto_houseowner(entity, context));
+ dto.setNum_cars_owned(toDto_num_cars_owned(entity, context));
+ dto.setFullname(toDto_fullname(entity, context));
+ dto.setTest(toDto_test(entity, context));
+ dto.setFoo(toDto_foo(entity, context));
+ }
+
+ /**
+ * Maps the dto {@link McustomerDto} to the entity {@link Mcustomer}.
+ *
+ * @param dto - The source dto
+ * @param entity - The target entity
+ * @param context - The context to get information about depth,...
+ *
+ */
+ public void mapToEntity(final McustomerDto dto, final Mcustomer entity, final MappingContext context) {
+ if(context == null){
+ throw new IllegalArgumentException("Please pass a context!");
+ }
+
+ context.register(createEntityHash(dto), entity);
+ context.registerMappingRoot(createEntityHash(dto), dto);
+ super.mapToEntity(dto, entity, context);
+
+ entity.setAccount_num(toEntity_account_num(dto, entity, context));
+ entity.setLname(toEntity_lname(dto, entity, context));
+ entity.setFname(toEntity_fname(dto, entity, context));
+ entity.setMi(toEntity_mi(dto, entity, context));
+ entity.setAddress1(toEntity_address1(dto, entity, context));
+ entity.setAddress2(toEntity_address2(dto, entity, context));
+ entity.setAddress3(toEntity_address3(dto, entity, context));
+ entity.setAddress4(toEntity_address4(dto, entity, context));
+ entity.setCity(toEntity_city(dto, entity, context));
+ entity.setState_province(toEntity_state_province(dto, entity, context));
+ entity.setPostal_code(toEntity_postal_code(dto, entity, context));
+ entity.setCountry(toEntity_country(dto, entity, context));
+ entity.setPhone1(toEntity_phone1(dto, entity, context));
+ entity.setPhone2(toEntity_phone2(dto, entity, context));
+ entity.setBirthdate(toEntity_birthdate(dto, entity, context));
+ entity.setMarital_status(toEntity_marital_status(dto, entity, context));
+ entity.setYearly_income(toEntity_yearly_income(dto, entity, context));
+ entity.setGender(toEntity_gender(dto, entity, context));
+ entity.setTotal_children(toEntity_total_children(dto, entity, context));
+ entity.setNum_children_at_home(toEntity_num_children_at_home(dto, entity, context));
+ entity.setEducation(toEntity_education(dto, entity, context));
+ entity.setDate_accnt_opened(toEntity_date_accnt_opened(dto, entity, context));
+ entity.setMember_card(toEntity_member_card(dto, entity, context));
+ entity.setOccupation(toEntity_occupation(dto, entity, context));
+ entity.setHouseowner(toEntity_houseowner(dto, entity, context));
+ entity.setNum_cars_owned(toEntity_num_cars_owned(dto, entity, context));
+ entity.setFullname(toEntity_fullname(dto, entity, context));
+ entity.setTest(toEntity_test(dto, entity, context));
+ toEntity_slips(dto, entity, context);
+ }
+
+ /**
+ * Maps the property account_num from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected long toDto_account_num(final Mcustomer in, final MappingContext context) {
+ return in.getAccount_num();
+ }
+
+ /**
+ * Maps the property account_num from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected long toEntity_account_num(final McustomerDto in, final Mcustomer parentEntity, final MappingContext context) {
+ return in.getAccount_num();
+ }
+
+ /**
+ * Maps the property lname from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toDto_lname(final Mcustomer in, final MappingContext context) {
+ return in.getLname();
+ }
+
+ /**
+ * Maps the property lname from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toEntity_lname(final McustomerDto in, final Mcustomer parentEntity, final MappingContext context) {
+ return in.getLname();
+ }
+
+ /**
+ * Maps the property fname from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toDto_fname(final Mcustomer in, final MappingContext context) {
+ return in.getFname();
+ }
+
+ /**
+ * Maps the property fname from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toEntity_fname(final McustomerDto in, final Mcustomer parentEntity, final MappingContext context) {
+ return in.getFname();
+ }
+
+ /**
+ * Maps the property mi from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toDto_mi(final Mcustomer in, final MappingContext context) {
+ return in.getMi();
+ }
+
+ /**
+ * Maps the property mi from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toEntity_mi(final McustomerDto in, final Mcustomer parentEntity, final MappingContext context) {
+ return in.getMi();
+ }
+
+ /**
+ * Maps the property address1 from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toDto_address1(final Mcustomer in, final MappingContext context) {
+ return in.getAddress1();
+ }
+
+ /**
+ * Maps the property address1 from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toEntity_address1(final McustomerDto in, final Mcustomer parentEntity, final MappingContext context) {
+ return in.getAddress1();
+ }
+
+ /**
+ * Maps the property address2 from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toDto_address2(final Mcustomer in, final MappingContext context) {
+ return in.getAddress2();
+ }
+
+ /**
+ * Maps the property address2 from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toEntity_address2(final McustomerDto in, final Mcustomer parentEntity, final MappingContext context) {
+ return in.getAddress2();
+ }
+
+ /**
+ * Maps the property address3 from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toDto_address3(final Mcustomer in, final MappingContext context) {
+ return in.getAddress3();
+ }
+
+ /**
+ * Maps the property address3 from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toEntity_address3(final McustomerDto in, final Mcustomer parentEntity, final MappingContext context) {
+ return in.getAddress3();
+ }
+
+ /**
+ * Maps the property address4 from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toDto_address4(final Mcustomer in, final MappingContext context) {
+ return in.getAddress4();
+ }
+
+ /**
+ * Maps the property address4 from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toEntity_address4(final McustomerDto in, final Mcustomer parentEntity, final MappingContext context) {
+ return in.getAddress4();
+ }
+
+ /**
+ * Maps the property city from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toDto_city(final Mcustomer in, final MappingContext context) {
+ return in.getCity();
+ }
+
+ /**
+ * Maps the property city from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toEntity_city(final McustomerDto in, final Mcustomer parentEntity, final MappingContext context) {
+ return in.getCity();
+ }
+
+ /**
+ * Maps the property state_province from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toDto_state_province(final Mcustomer in, final MappingContext context) {
+ return in.getState_province();
+ }
+
+ /**
+ * Maps the property state_province from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toEntity_state_province(final McustomerDto in, final Mcustomer parentEntity, final MappingContext context) {
+ return in.getState_province();
+ }
+
+ /**
+ * Maps the property postal_code from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toDto_postal_code(final Mcustomer in, final MappingContext context) {
+ return in.getPostal_code();
+ }
+
+ /**
+ * Maps the property postal_code from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toEntity_postal_code(final McustomerDto in, final Mcustomer parentEntity, final MappingContext context) {
+ return in.getPostal_code();
+ }
+
+ /**
+ * Maps the property country from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toDto_country(final Mcustomer in, final MappingContext context) {
+ return in.getCountry();
+ }
+
+ /**
+ * Maps the property country from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toEntity_country(final McustomerDto in, final Mcustomer parentEntity, final MappingContext context) {
+ return in.getCountry();
+ }
+
+ /**
+ * Maps the property phone1 from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toDto_phone1(final Mcustomer in, final MappingContext context) {
+ return in.getPhone1();
+ }
+
+ /**
+ * Maps the property phone1 from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toEntity_phone1(final McustomerDto in, final Mcustomer parentEntity, final MappingContext context) {
+ return in.getPhone1();
+ }
+
+ /**
+ * Maps the property phone2 from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toDto_phone2(final Mcustomer in, final MappingContext context) {
+ return in.getPhone2();
+ }
+
+ /**
+ * Maps the property phone2 from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toEntity_phone2(final McustomerDto in, final Mcustomer parentEntity, final MappingContext context) {
+ return in.getPhone2();
+ }
+
+ /**
+ * Maps the property birthdate from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected Date toDto_birthdate(final Mcustomer in, final MappingContext context) {
+ return in.getBirthdate();
+ }
+
+ /**
+ * Maps the property birthdate from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected Date toEntity_birthdate(final McustomerDto in, final Mcustomer parentEntity, final MappingContext context) {
+ return in.getBirthdate();
+ }
+
+ /**
+ * Maps the property marital_status from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toDto_marital_status(final Mcustomer in, final MappingContext context) {
+ return in.getMarital_status();
+ }
+
+ /**
+ * Maps the property marital_status from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toEntity_marital_status(final McustomerDto in, final Mcustomer parentEntity, final MappingContext context) {
+ return in.getMarital_status();
+ }
+
+ /**
+ * Maps the property yearly_income from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toDto_yearly_income(final Mcustomer in, final MappingContext context) {
+ return in.getYearly_income();
+ }
+
+ /**
+ * Maps the property yearly_income from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toEntity_yearly_income(final McustomerDto in, final Mcustomer parentEntity, final MappingContext context) {
+ return in.getYearly_income();
+ }
+
+ /**
+ * Maps the property gender from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toDto_gender(final Mcustomer in, final MappingContext context) {
+ return in.getGender();
+ }
+
+ /**
+ * Maps the property gender from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toEntity_gender(final McustomerDto in, final Mcustomer parentEntity, final MappingContext context) {
+ return in.getGender();
+ }
+
+ /**
+ * Maps the property total_children from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected int toDto_total_children(final Mcustomer in, final MappingContext context) {
+ return in.getTotal_children();
+ }
+
+ /**
+ * Maps the property total_children from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected int toEntity_total_children(final McustomerDto in, final Mcustomer parentEntity, final MappingContext context) {
+ return in.getTotal_children();
+ }
+
+ /**
+ * Maps the property num_children_at_home from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected int toDto_num_children_at_home(final Mcustomer in, final MappingContext context) {
+ return in.getNum_children_at_home();
+ }
+
+ /**
+ * Maps the property num_children_at_home from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected int toEntity_num_children_at_home(final McustomerDto in, final Mcustomer parentEntity, final MappingContext context) {
+ return in.getNum_children_at_home();
+ }
+
+ /**
+ * Maps the property education from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toDto_education(final Mcustomer in, final MappingContext context) {
+ return in.getEducation();
+ }
+
+ /**
+ * Maps the property education from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toEntity_education(final McustomerDto in, final Mcustomer parentEntity, final MappingContext context) {
+ return in.getEducation();
+ }
+
+ /**
+ * Maps the property date_accnt_opened from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toDto_date_accnt_opened(final Mcustomer in, final MappingContext context) {
+ return in.getDate_accnt_opened();
+ }
+
+ /**
+ * Maps the property date_accnt_opened from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toEntity_date_accnt_opened(final McustomerDto in, final Mcustomer parentEntity, final MappingContext context) {
+ return in.getDate_accnt_opened();
+ }
+
+ /**
+ * Maps the property member_card from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toDto_member_card(final Mcustomer in, final MappingContext context) {
+ return in.getMember_card();
+ }
+
+ /**
+ * Maps the property member_card from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toEntity_member_card(final McustomerDto in, final Mcustomer parentEntity, final MappingContext context) {
+ return in.getMember_card();
+ }
+
+ /**
+ * Maps the property occupation from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toDto_occupation(final Mcustomer in, final MappingContext context) {
+ return in.getOccupation();
+ }
+
+ /**
+ * Maps the property occupation from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toEntity_occupation(final McustomerDto in, final Mcustomer parentEntity, final MappingContext context) {
+ return in.getOccupation();
+ }
+
+ /**
+ * Maps the property houseowner from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toDto_houseowner(final Mcustomer in, final MappingContext context) {
+ return in.getHouseowner();
+ }
+
+ /**
+ * Maps the property houseowner from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toEntity_houseowner(final McustomerDto in, final Mcustomer parentEntity, final MappingContext context) {
+ return in.getHouseowner();
+ }
+
+ /**
+ * Maps the property num_cars_owned from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected int toDto_num_cars_owned(final Mcustomer in, final MappingContext context) {
+ return in.getNum_cars_owned();
+ }
+
+ /**
+ * Maps the property num_cars_owned from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected int toEntity_num_cars_owned(final McustomerDto in, final Mcustomer parentEntity, final MappingContext context) {
+ return in.getNum_cars_owned();
+ }
+
+ /**
+ * Maps the property fullname from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toDto_fullname(final Mcustomer in, final MappingContext context) {
+ return in.getFullname();
+ }
+
+ /**
+ * Maps the property fullname from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toEntity_fullname(final McustomerDto in, final Mcustomer parentEntity, final MappingContext context) {
+ return in.getFullname();
+ }
+
+ /**
+ * Maps the property test from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toDto_test(final Mcustomer in, final MappingContext context) {
+ return in.getTest();
+ }
+
+ /**
+ * Maps the property test from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toEntity_test(final McustomerDto in, final Mcustomer parentEntity, final MappingContext context) {
+ return in.getTest();
+ }
+
+ /**
+ * Maps the property slips from the given entity to the dto.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return A list of mapped dtos
+ *
+ */
+ protected List<CashSlipDto> toDto_slips(final Mcustomer in, final MappingContext context) {
+ // nothing to do here. Mapping is done by OppositeLists
+ return null;
+ }
+
+ /**
+ * Maps the property slips from the given dto to the entity.
+ *
+ * @param in - The source dto
+ * @param parentEntity - The parent entity
+ * @param context - The context to get information about depth,...
+ * @return A list of mapped entities
+ *
+ */
+ protected List<CashSlip> toEntity_slips(final McustomerDto in, final Mcustomer parentEntity, final MappingContext context) {
+ org.eclipse.osbp.dsl.dto.lib.IMapper<CashSlipDto, CashSlip> mapper = getToEntityMapper(CashSlipDto.class, CashSlip.class);
+ if(mapper == null) {
+ throw new IllegalStateException("Mapper must not be null!");
+ }
+
+ org.eclipse.osbp.dsl.dto.lib.IEntityMappingList<CashSlipDto> childsList =
+ (org.eclipse.osbp.dsl.dto.lib.IEntityMappingList<CashSlipDto>) in.internalGetSlips();
+
+ // if entities are being added, then they are passed to
+ // #addToContainerChilds of the parent entity. So the container ref is setup
+ // properly!
+ // if entities are being removed, then they are passed to the
+ // #internalRemoveFromChilds method of the parent entity. So they are
+ // removed directly from the list of entities.
+ childsList.mapToEntity(mapper,
+ parentEntity::addToSlips,
+ parentEntity::internalRemoveFromSlips);
+ return null;
+ }
+
+ /**
+ * Maps the property foo from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toDto_foo(final Mcustomer in, final MappingContext context) {
+ return in.getFoo();
+ }
+
+ /**
+ * Maps the property foo from the given entity to dto property.
+ *
+ * @param in - The source entity
+ * @param parentEntity - The parentEntity
+ * @param context - The context to get information about depth,...
+ * @return the mapped value
+ *
+ */
+ protected String toEntity_foo(final McustomerDto in, final Mcustomer parentEntity, final MappingContext context) {
+ return in.getFoo();
+ }
+
+ public String createDtoHash(final Object in) {
+ return org.eclipse.osbp.runtime.common.hash.HashUtil.createObjectWithIdHash(McustomerDto.class, in);
+ }
+
+ public String createEntityHash(final Object in) {
+ return org.eclipse.osbp.runtime.common.hash.HashUtil.createObjectWithIdHash(Mcustomer.class, in);
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/service/AddressDtoService.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/service/AddressDtoService.java
new file mode 100644
index 0000000..ef881fd
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/service/AddressDtoService.java
@@ -0,0 +1,20 @@
+package org.osbp.tests.dtos.service;
+
+import org.eclipse.osbp.dsl.dto.lib.services.impl.AbstractDTOService;
+import org.osbp.tests.dtos.AddressDto;
+import org.osbp.tests.entities.Address;
+
+@SuppressWarnings("all")
+public class AddressDtoService extends AbstractDTOService<AddressDto, Address> {
+ public Class<AddressDto> getDtoClass() {
+ return AddressDto.class;
+ }
+
+ public Class<Address> getEntityClass() {
+ return Address.class;
+ }
+
+ public Object getId(final AddressDto dto) {
+ return dto.getId();
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/service/BaseIDDtoService.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/service/BaseIDDtoService.java
new file mode 100644
index 0000000..f4604a8
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/service/BaseIDDtoService.java
@@ -0,0 +1,20 @@
+package org.osbp.tests.dtos.service;
+
+import org.eclipse.osbp.dsl.dto.lib.services.impl.AbstractDTOService;
+import org.osbp.tests.dtos.BaseIDDto;
+import org.osbp.tests.entities.BaseID;
+
+@SuppressWarnings("all")
+public class BaseIDDtoService extends AbstractDTOService<BaseIDDto, BaseID> {
+ public Class<BaseIDDto> getDtoClass() {
+ return BaseIDDto.class;
+ }
+
+ public Class<BaseID> getEntityClass() {
+ return BaseID.class;
+ }
+
+ public Object getId(final BaseIDDto dto) {
+ return dto.getId();
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/service/BaseUUIDDtoService.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/service/BaseUUIDDtoService.java
new file mode 100644
index 0000000..44b886e
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/service/BaseUUIDDtoService.java
@@ -0,0 +1,20 @@
+package org.osbp.tests.dtos.service;
+
+import org.eclipse.osbp.dsl.dto.lib.services.impl.AbstractDTOService;
+import org.osbp.tests.dtos.BaseUUIDDto;
+import org.osbp.tests.entities.BaseUUID;
+
+@SuppressWarnings("all")
+public class BaseUUIDDtoService extends AbstractDTOService<BaseUUIDDto, BaseUUID> {
+ public Class<BaseUUIDDto> getDtoClass() {
+ return BaseUUIDDto.class;
+ }
+
+ public Class<BaseUUID> getEntityClass() {
+ return BaseUUID.class;
+ }
+
+ public Object getId(final BaseUUIDDto dto) {
+ return dto.getId();
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/service/CashPaymentDtoService.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/service/CashPaymentDtoService.java
new file mode 100644
index 0000000..63fd282
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/service/CashPaymentDtoService.java
@@ -0,0 +1,20 @@
+package org.osbp.tests.dtos.service;
+
+import org.eclipse.osbp.dsl.dto.lib.services.impl.AbstractDTOService;
+import org.osbp.tests.dtos.CashPaymentDto;
+import org.osbp.tests.entities.CashPayment;
+
+@SuppressWarnings("all")
+public class CashPaymentDtoService extends AbstractDTOService<CashPaymentDto, CashPayment> {
+ public Class<CashPaymentDto> getDtoClass() {
+ return CashPaymentDto.class;
+ }
+
+ public Class<CashPayment> getEntityClass() {
+ return CashPayment.class;
+ }
+
+ public Object getId(final CashPaymentDto dto) {
+ return dto.getId();
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/service/CashPaymentMethodDtoService.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/service/CashPaymentMethodDtoService.java
new file mode 100644
index 0000000..a37ddd7
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/service/CashPaymentMethodDtoService.java
@@ -0,0 +1,20 @@
+package org.osbp.tests.dtos.service;
+
+import org.eclipse.osbp.dsl.dto.lib.services.impl.AbstractDTOService;
+import org.osbp.tests.dtos.CashPaymentMethodDto;
+import org.osbp.tests.entities.CashPaymentMethod;
+
+@SuppressWarnings("all")
+public class CashPaymentMethodDtoService extends AbstractDTOService<CashPaymentMethodDto, CashPaymentMethod> {
+ public Class<CashPaymentMethodDto> getDtoClass() {
+ return CashPaymentMethodDto.class;
+ }
+
+ public Class<CashPaymentMethod> getEntityClass() {
+ return CashPaymentMethod.class;
+ }
+
+ public Object getId(final CashPaymentMethodDto dto) {
+ return dto.getId();
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/service/CashPositionDtoService.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/service/CashPositionDtoService.java
new file mode 100644
index 0000000..a584227
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/service/CashPositionDtoService.java
@@ -0,0 +1,20 @@
+package org.osbp.tests.dtos.service;
+
+import org.eclipse.osbp.dsl.dto.lib.services.impl.AbstractDTOService;
+import org.osbp.tests.dtos.CashPositionDto;
+import org.osbp.tests.entities.CashPosition;
+
+@SuppressWarnings("all")
+public class CashPositionDtoService extends AbstractDTOService<CashPositionDto, CashPosition> {
+ public Class<CashPositionDto> getDtoClass() {
+ return CashPositionDto.class;
+ }
+
+ public Class<CashPosition> getEntityClass() {
+ return CashPosition.class;
+ }
+
+ public Object getId(final CashPositionDto dto) {
+ return dto.getId();
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/service/CashRegisterDtoService.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/service/CashRegisterDtoService.java
new file mode 100644
index 0000000..abe076a
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/service/CashRegisterDtoService.java
@@ -0,0 +1,20 @@
+package org.osbp.tests.dtos.service;
+
+import org.eclipse.osbp.dsl.dto.lib.services.impl.AbstractDTOService;
+import org.osbp.tests.dtos.CashRegisterDto;
+import org.osbp.tests.entities.CashRegister;
+
+@SuppressWarnings("all")
+public class CashRegisterDtoService extends AbstractDTOService<CashRegisterDto, CashRegister> {
+ public Class<CashRegisterDto> getDtoClass() {
+ return CashRegisterDto.class;
+ }
+
+ public Class<CashRegister> getEntityClass() {
+ return CashRegister.class;
+ }
+
+ public Object getId(final CashRegisterDto dto) {
+ return dto.getId();
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/service/CashSlipDtoService.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/service/CashSlipDtoService.java
new file mode 100644
index 0000000..342019a
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/service/CashSlipDtoService.java
@@ -0,0 +1,20 @@
+package org.osbp.tests.dtos.service;
+
+import org.eclipse.osbp.dsl.dto.lib.services.impl.AbstractDTOService;
+import org.osbp.tests.dtos.CashSlipDto;
+import org.osbp.tests.entities.CashSlip;
+
+@SuppressWarnings("all")
+public class CashSlipDtoService extends AbstractDTOService<CashSlipDto, CashSlip> {
+ public Class<CashSlipDto> getDtoClass() {
+ return CashSlipDto.class;
+ }
+
+ public Class<CashSlip> getEntityClass() {
+ return CashSlip.class;
+ }
+
+ public Object getId(final CashSlipDto dto) {
+ return dto.getId();
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/service/CompanyDtoService.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/service/CompanyDtoService.java
new file mode 100644
index 0000000..c117891
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/service/CompanyDtoService.java
@@ -0,0 +1,20 @@
+package org.osbp.tests.dtos.service;
+
+import org.eclipse.osbp.dsl.dto.lib.services.impl.AbstractDTOService;
+import org.osbp.tests.dtos.CompanyDto;
+import org.osbp.tests.entities.Company;
+
+@SuppressWarnings("all")
+public class CompanyDtoService extends AbstractDTOService<CompanyDto, Company> {
+ public Class<CompanyDto> getDtoClass() {
+ return CompanyDto.class;
+ }
+
+ public Class<Company> getEntityClass() {
+ return Company.class;
+ }
+
+ public Object getId(final CompanyDto dto) {
+ return dto.getId();
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/service/CompanyGroupDtoService.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/service/CompanyGroupDtoService.java
new file mode 100644
index 0000000..a290320
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/service/CompanyGroupDtoService.java
@@ -0,0 +1,20 @@
+package org.osbp.tests.dtos.service;
+
+import org.eclipse.osbp.dsl.dto.lib.services.impl.AbstractDTOService;
+import org.osbp.tests.dtos.CompanyGroupDto;
+import org.osbp.tests.entities.CompanyGroup;
+
+@SuppressWarnings("all")
+public class CompanyGroupDtoService extends AbstractDTOService<CompanyGroupDto, CompanyGroup> {
+ public Class<CompanyGroupDto> getDtoClass() {
+ return CompanyGroupDto.class;
+ }
+
+ public Class<CompanyGroup> getEntityClass() {
+ return CompanyGroup.class;
+ }
+
+ public Object getId(final CompanyGroupDto dto) {
+ return dto.getId();
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/service/CompanyRelationTypeDtoService.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/service/CompanyRelationTypeDtoService.java
new file mode 100644
index 0000000..546e361
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/service/CompanyRelationTypeDtoService.java
@@ -0,0 +1,20 @@
+package org.osbp.tests.dtos.service;
+
+import org.eclipse.osbp.dsl.dto.lib.services.impl.AbstractDTOService;
+import org.osbp.tests.dtos.CompanyRelationTypeDto;
+import org.osbp.tests.entities.CompanyRelationType;
+
+@SuppressWarnings("all")
+public class CompanyRelationTypeDtoService extends AbstractDTOService<CompanyRelationTypeDto, CompanyRelationType> {
+ public Class<CompanyRelationTypeDto> getDtoClass() {
+ return CompanyRelationTypeDto.class;
+ }
+
+ public Class<CompanyRelationType> getEntityClass() {
+ return CompanyRelationType.class;
+ }
+
+ public Object getId(final CompanyRelationTypeDto dto) {
+ return dto.getId();
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/service/DepartmentDtoService.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/service/DepartmentDtoService.java
new file mode 100644
index 0000000..7d872ab
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/service/DepartmentDtoService.java
@@ -0,0 +1,20 @@
+package org.osbp.tests.dtos.service;
+
+import org.eclipse.osbp.dsl.dto.lib.services.impl.AbstractDTOService;
+import org.osbp.tests.dtos.DepartmentDto;
+import org.osbp.tests.entities.Department;
+
+@SuppressWarnings("all")
+public class DepartmentDtoService extends AbstractDTOService<DepartmentDto, Department> {
+ public Class<DepartmentDto> getDtoClass() {
+ return DepartmentDto.class;
+ }
+
+ public Class<Department> getEntityClass() {
+ return Department.class;
+ }
+
+ public Object getId(final DepartmentDto dto) {
+ return dto.getId();
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/service/DtoTestChildContainmentDtoService.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/service/DtoTestChildContainmentDtoService.java
new file mode 100644
index 0000000..f9bef74
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/service/DtoTestChildContainmentDtoService.java
@@ -0,0 +1,20 @@
+package org.osbp.tests.dtos.service;
+
+import org.eclipse.osbp.dsl.dto.lib.services.impl.AbstractDTOService;
+import org.osbp.tests.dtos.DtoTestChildContainmentDto;
+import org.osbp.tests.entities.DtoTestChildContainment;
+
+@SuppressWarnings("all")
+public class DtoTestChildContainmentDtoService extends AbstractDTOService<DtoTestChildContainmentDto, DtoTestChildContainment> {
+ public Class<DtoTestChildContainmentDto> getDtoClass() {
+ return DtoTestChildContainmentDto.class;
+ }
+
+ public Class<DtoTestChildContainment> getEntityClass() {
+ return DtoTestChildContainment.class;
+ }
+
+ public Object getId(final DtoTestChildContainmentDto dto) {
+ return dto.getId();
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/service/DtoTestChildCrossRefDtoService.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/service/DtoTestChildCrossRefDtoService.java
new file mode 100644
index 0000000..f711016
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/service/DtoTestChildCrossRefDtoService.java
@@ -0,0 +1,20 @@
+package org.osbp.tests.dtos.service;
+
+import org.eclipse.osbp.dsl.dto.lib.services.impl.AbstractDTOService;
+import org.osbp.tests.dtos.DtoTestChildCrossRefDto;
+import org.osbp.tests.entities.DtoTestChildCrossRef;
+
+@SuppressWarnings("all")
+public class DtoTestChildCrossRefDtoService extends AbstractDTOService<DtoTestChildCrossRefDto, DtoTestChildCrossRef> {
+ public Class<DtoTestChildCrossRefDto> getDtoClass() {
+ return DtoTestChildCrossRefDto.class;
+ }
+
+ public Class<DtoTestChildCrossRef> getEntityClass() {
+ return DtoTestChildCrossRef.class;
+ }
+
+ public Object getId(final DtoTestChildCrossRefDto dto) {
+ return dto.getId();
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/service/DtoTestParentDtoService.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/service/DtoTestParentDtoService.java
new file mode 100644
index 0000000..52cf5ff
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/service/DtoTestParentDtoService.java
@@ -0,0 +1,20 @@
+package org.osbp.tests.dtos.service;
+
+import org.eclipse.osbp.dsl.dto.lib.services.impl.AbstractDTOService;
+import org.osbp.tests.dtos.DtoTestParentDto;
+import org.osbp.tests.entities.DtoTestParent;
+
+@SuppressWarnings("all")
+public class DtoTestParentDtoService extends AbstractDTOService<DtoTestParentDto, DtoTestParent> {
+ public Class<DtoTestParentDto> getDtoClass() {
+ return DtoTestParentDto.class;
+ }
+
+ public Class<DtoTestParent> getEntityClass() {
+ return DtoTestParent.class;
+ }
+
+ public Object getId(final DtoTestParentDto dto) {
+ return dto.getId();
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/service/McustomerDtoService.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/service/McustomerDtoService.java
new file mode 100644
index 0000000..60426ac
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/dtos/service/McustomerDtoService.java
@@ -0,0 +1,20 @@
+package org.osbp.tests.dtos.service;
+
+import org.eclipse.osbp.dsl.dto.lib.services.impl.AbstractDTOService;
+import org.osbp.tests.dtos.McustomerDto;
+import org.osbp.tests.entities.Mcustomer;
+
+@SuppressWarnings("all")
+public class McustomerDtoService extends AbstractDTOService<McustomerDto, Mcustomer> {
+ public Class<McustomerDto> getDtoClass() {
+ return McustomerDto.class;
+ }
+
+ public Class<Mcustomer> getEntityClass() {
+ return Mcustomer.class;
+ }
+
+ public Object getId(final McustomerDto dto) {
+ return dto.getId();
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/entities/Address.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/entities/Address.java
new file mode 100644
index 0000000..d9dd69b
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/entities/Address.java
@@ -0,0 +1,363 @@
+/**
+ * Copyright (C) - Loetz GmbH&Co.KG, 69115 Heidelberg, Germany
+ *
+ * This source was created by OSBP Softwarefactory Wizard!
+ *
+ * OSBP is (C) - Loetz GmbH&Co.KG, 69115 Heidelberg, Germany
+ *
+ * ================================================================
+ *
+ * @file $HeadURL$
+ * @version $Revision$
+ * @date $Date$
+ * @author $Author$
+ */
+package org.osbp.tests.entities;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.PreRemove;
+import javax.persistence.Table;
+import org.eclipse.osbp.dsl.common.datatypes.IEntity;
+import org.eclipse.osbp.runtime.common.annotations.Dispose;
+import org.osbp.tests.entities.BaseUUID;
+import org.osbp.tests.entities.Company;
+import org.osbp.tests.entities.Department;
+
+/**
+ * an address
+ */
+@Entity
+@Table(name = "ADDRESS")
+@SuppressWarnings("all")
+public class Address extends BaseUUID implements IEntity {
+ /**
+ * if address for a company, the company is given
+ */
+ @ManyToOne(fetch = FetchType.LAZY, cascade = { CascadeType.DETACH, CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH })
+ @JoinColumn(name = "COMPANY_ID")
+ private Company company;
+
+ /**
+ * if address for a department, the address is given
+ */
+ @ManyToOne(fetch = FetchType.LAZY, cascade = { CascadeType.DETACH, CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH })
+ @JoinColumn(name = "DEPARTMENT_ID")
+ private Department department;
+
+ /**
+ * address field 1
+ */
+ @Column(name = "ADDRESS1")
+ private String address1;
+
+ /**
+ * address field 2
+ */
+ @Column(name = "ADDRESS2")
+ private String address2;
+
+ /**
+ * city
+ */
+ @Column(name = "CITY")
+ private String city;
+
+ /**
+ * state province
+ */
+ @Column(name = "STATE_PROVINCE")
+ private String state_province;
+
+ /**
+ * postal code
+ */
+ @Column(name = "POSTAL_CODE")
+ private String postal_code;
+
+ /**
+ * country
+ */
+ @Column(name = "COUNTRY")
+ private String country;
+
+ /**
+ * email
+ */
+ @Column(name = "EMAIL")
+ private String email;
+
+ /**
+ * landline (Festnetznummer)
+ */
+ @Column(name = "LANDLINE")
+ private String landline;
+
+ /**
+ * mobile
+ */
+ @Column(name = "MOBILE")
+ private String mobile;
+
+ /**
+ * Checks whether the object is disposed.
+ * @throws RuntimeException if the object is disposed.
+ */
+ private void checkDisposed() {
+ if (isDisposed()) {
+ throw new RuntimeException("Object already disposed: " + this);
+ }
+ }
+
+ /**
+ * Calling dispose will destroy that instance. The internal state will be
+ * set to 'disposed' and methods of that object must not be used anymore.
+ * Each call will result in runtime exceptions.<br>
+ * If this object keeps composition containments, these will be disposed too.
+ * So the whole composition containment tree will be disposed on calling this method.
+ */
+ @Dispose
+ public void dispose() {
+ if (isDisposed()) {
+ return;
+ }
+ try {
+ // Dispose all the composition references.
+ if (this.company != null) {
+ this.company.dispose();
+ this.company = null;
+ }
+ if (this.department != null) {
+ this.department.dispose();
+ this.department = null;
+ }
+
+ }
+ finally {
+ super.dispose();
+ }
+
+ }
+
+ /**
+ * @return Returns the company property or <code>null</code> if not present.
+ */
+ public Company getCompany() {
+ checkDisposed();
+ return this.company;
+ }
+
+ /**
+ * Sets the company property to this instance.
+ * Since the reference is a container reference, the opposite reference (Company.address)
+ * of the company will be handled automatically and no further coding is required to keep them in sync.
+ * See {@link Company#setAddress(Company)}.
+ */
+ public void setCompany(final Company company) {
+ checkDisposed();
+ if (this.company != null) {
+ this.company.internalRemoveFromAddress(this);
+ }
+ internalSetCompany(company);
+ if (this.company != null) {
+ this.company.internalAddToAddress(this);
+ }
+
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalSetCompany(final Company company) {
+ this.company = company;
+ }
+
+ /**
+ * @return Returns the department property or <code>null</code> if not present.
+ */
+ public Department getDepartment() {
+ checkDisposed();
+ return this.department;
+ }
+
+ /**
+ * Sets the department property to this instance.
+ * Since the reference is a container reference, the opposite reference (Department.address)
+ * of the department will be handled automatically and no further coding is required to keep them in sync.
+ * See {@link Department#setAddress(Department)}.
+ */
+ public void setDepartment(final Department department) {
+ checkDisposed();
+ if (this.department != null) {
+ this.department.internalRemoveFromAddress(this);
+ }
+ internalSetDepartment(department);
+ if (this.department != null) {
+ this.department.internalAddToAddress(this);
+ }
+
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalSetDepartment(final Department department) {
+ this.department = department;
+ }
+
+ /**
+ * @return Returns the address1 property or <code>null</code> if not present.
+ */
+ public String getAddress1() {
+ checkDisposed();
+ return this.address1;
+ }
+
+ /**
+ * Sets the address1 property to this instance.
+ */
+ public void setAddress1(final String address1) {
+ checkDisposed();
+ this.address1 = address1;
+ }
+
+ /**
+ * @return Returns the address2 property or <code>null</code> if not present.
+ */
+ public String getAddress2() {
+ checkDisposed();
+ return this.address2;
+ }
+
+ /**
+ * Sets the address2 property to this instance.
+ */
+ public void setAddress2(final String address2) {
+ checkDisposed();
+ this.address2 = address2;
+ }
+
+ /**
+ * @return Returns the city property or <code>null</code> if not present.
+ */
+ public String getCity() {
+ checkDisposed();
+ return this.city;
+ }
+
+ /**
+ * Sets the city property to this instance.
+ */
+ public void setCity(final String city) {
+ checkDisposed();
+ this.city = city;
+ }
+
+ /**
+ * @return Returns the state_province property or <code>null</code> if not present.
+ */
+ public String getState_province() {
+ checkDisposed();
+ return this.state_province;
+ }
+
+ /**
+ * Sets the state_province property to this instance.
+ */
+ public void setState_province(final String state_province) {
+ checkDisposed();
+ this.state_province = state_province;
+ }
+
+ /**
+ * @return Returns the postal_code property or <code>null</code> if not present.
+ */
+ public String getPostal_code() {
+ checkDisposed();
+ return this.postal_code;
+ }
+
+ /**
+ * Sets the postal_code property to this instance.
+ */
+ public void setPostal_code(final String postal_code) {
+ checkDisposed();
+ this.postal_code = postal_code;
+ }
+
+ /**
+ * @return Returns the country property or <code>null</code> if not present.
+ */
+ public String getCountry() {
+ checkDisposed();
+ return this.country;
+ }
+
+ /**
+ * Sets the country property to this instance.
+ */
+ public void setCountry(final String country) {
+ checkDisposed();
+ this.country = country;
+ }
+
+ /**
+ * @return Returns the email property or <code>null</code> if not present.
+ */
+ public String getEmail() {
+ checkDisposed();
+ return this.email;
+ }
+
+ /**
+ * Sets the email property to this instance.
+ */
+ public void setEmail(final String email) {
+ checkDisposed();
+ this.email = email;
+ }
+
+ /**
+ * @return Returns the landline property or <code>null</code> if not present.
+ */
+ public String getLandline() {
+ checkDisposed();
+ return this.landline;
+ }
+
+ /**
+ * Sets the landline property to this instance.
+ */
+ public void setLandline(final String landline) {
+ checkDisposed();
+ this.landline = landline;
+ }
+
+ /**
+ * @return Returns the mobile property or <code>null</code> if not present.
+ */
+ public String getMobile() {
+ checkDisposed();
+ return this.mobile;
+ }
+
+ /**
+ * Sets the mobile property to this instance.
+ */
+ public void setMobile(final String mobile) {
+ checkDisposed();
+ this.mobile = mobile;
+ }
+
+ /**
+ * Iterates all cross references and removes them from the parent to avoid ConstraintViolationException
+ */
+ @PreRemove
+ protected void preRemove() {
+
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/entities/BaseID.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/entities/BaseID.java
new file mode 100644
index 0000000..f989dc8
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/entities/BaseID.java
@@ -0,0 +1,117 @@
+/**
+ * Copyright (C) - Loetz GmbH&Co.KG, 69115 Heidelberg, Germany
+ *
+ * This source was created by OSBP Softwarefactory Wizard!
+ *
+ * OSBP is (C) - Loetz GmbH&Co.KG, 69115 Heidelberg, Germany
+ *
+ * ================================================================
+ *
+ * @file $HeadURL$
+ * @version $Revision$
+ * @date $Date$
+ * @author $Author$
+ */
+package org.osbp.tests.entities;
+
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.MappedSuperclass;
+import javax.persistence.PreRemove;
+import javax.persistence.Transient;
+import org.eclipse.osbp.dsl.common.datatypes.IEntity;
+import org.eclipse.osbp.runtime.common.annotations.Dispose;
+
+@MappedSuperclass
+@SuppressWarnings("all")
+public class BaseID implements IEntity {
+ @Transient
+ @Dispose
+ private boolean disposed;
+
+ @Id
+ @GeneratedValue
+ private int id;
+
+ /**
+ * @return true, if the object is disposed.
+ * Disposed means, that it is prepared for garbage collection and may not be used anymore.
+ * Accessing objects that are already disposed will cause runtime exceptions.
+ *
+ */
+ @Dispose
+ public boolean isDisposed() {
+ return this.disposed;
+ }
+
+ /**
+ * Checks whether the object is disposed.
+ * @throws RuntimeException if the object is disposed.
+ */
+ private void checkDisposed() {
+ if (isDisposed()) {
+ throw new RuntimeException("Object already disposed: " + this);
+ }
+ }
+
+ /**
+ * Calling dispose will destroy that instance. The internal state will be
+ * set to 'disposed' and methods of that object must not be used anymore.
+ * Each call will result in runtime exceptions.<br>
+ * If this object keeps composition containments, these will be disposed too.
+ * So the whole composition containment tree will be disposed on calling this method.
+ */
+ @Dispose
+ public void dispose() {
+ if (isDisposed()) {
+ return;
+ }
+ disposed = true;
+ }
+
+ /**
+ * @return Returns the id property or <code>null</code> if not present.
+ */
+ public int getId() {
+ checkDisposed();
+ return this.id;
+ }
+
+ /**
+ * Sets the id property to this instance.
+ */
+ public void setId(final int id) {
+ checkDisposed();
+ this.id = id;
+ }
+
+ @Override
+ public boolean equals(final Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ BaseID other = (BaseID) obj;
+ if (other.id != this.id)
+ return false;
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int prime = 31;
+ int result = 1;
+ result = prime * result + this.id;
+ return result;
+ }
+
+ /**
+ * Iterates all cross references and removes them from the parent to avoid ConstraintViolationException
+ */
+ @PreRemove
+ protected void preRemove() {
+
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/entities/BaseUUID.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/entities/BaseUUID.java
new file mode 100644
index 0000000..ecd0d3a
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/entities/BaseUUID.java
@@ -0,0 +1,118 @@
+/**
+ * Copyright (C) - Loetz GmbH&Co.KG, 69115 Heidelberg, Germany
+ *
+ * This source was created by OSBP Softwarefactory Wizard!
+ *
+ * OSBP is (C) - Loetz GmbH&Co.KG, 69115 Heidelberg, Germany
+ *
+ * ================================================================
+ *
+ * @file $HeadURL$
+ * @version $Revision$
+ * @date $Date$
+ * @author $Author$
+ */
+package org.osbp.tests.entities;
+
+import javax.persistence.Id;
+import javax.persistence.MappedSuperclass;
+import javax.persistence.PreRemove;
+import javax.persistence.Transient;
+import org.eclipse.osbp.dsl.common.datatypes.IEntity;
+import org.eclipse.osbp.runtime.common.annotations.Dispose;
+
+@MappedSuperclass
+@SuppressWarnings("all")
+public class BaseUUID implements IEntity {
+ @Transient
+ @Dispose
+ private boolean disposed;
+
+ @Id
+ private String id = java.util.UUID.randomUUID().toString();
+
+ /**
+ * @return true, if the object is disposed.
+ * Disposed means, that it is prepared for garbage collection and may not be used anymore.
+ * Accessing objects that are already disposed will cause runtime exceptions.
+ *
+ */
+ @Dispose
+ public boolean isDisposed() {
+ return this.disposed;
+ }
+
+ /**
+ * Checks whether the object is disposed.
+ * @throws RuntimeException if the object is disposed.
+ */
+ private void checkDisposed() {
+ if (isDisposed()) {
+ throw new RuntimeException("Object already disposed: " + this);
+ }
+ }
+
+ /**
+ * Calling dispose will destroy that instance. The internal state will be
+ * set to 'disposed' and methods of that object must not be used anymore.
+ * Each call will result in runtime exceptions.<br>
+ * If this object keeps composition containments, these will be disposed too.
+ * So the whole composition containment tree will be disposed on calling this method.
+ */
+ @Dispose
+ public void dispose() {
+ if (isDisposed()) {
+ return;
+ }
+ disposed = true;
+ }
+
+ /**
+ * @return Returns the id property or <code>null</code> if not present.
+ */
+ public String getId() {
+ checkDisposed();
+ return this.id;
+ }
+
+ /**
+ * Sets the id property to this instance.
+ */
+ public void setId(final String id) {
+ checkDisposed();
+ this.id = id;
+ }
+
+ @Override
+ public boolean equals(final Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ BaseUUID other = (BaseUUID) obj;
+ if (this.id == null) {
+ if (other.id != null)
+ return false;
+ } else if (!this.id.equals(other.id))
+ return false;
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int prime = 31;
+ int result = 1;
+ result = prime * result + ((this.id== null) ? 0 : this.id.hashCode());
+ return result;
+ }
+
+ /**
+ * Iterates all cross references and removes them from the parent to avoid ConstraintViolationException
+ */
+ @PreRemove
+ protected void preRemove() {
+
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/entities/CashPayment.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/entities/CashPayment.java
new file mode 100644
index 0000000..337e855
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/entities/CashPayment.java
@@ -0,0 +1,199 @@
+/**
+ * Copyright (C) - Loetz GmbH&Co.KG, 69115 Heidelberg, Germany
+ *
+ * This source was created by OSBP Softwarefactory Wizard!
+ *
+ * OSBP is (C) - Loetz GmbH&Co.KG, 69115 Heidelberg, Germany
+ *
+ * ================================================================
+ *
+ * @file $HeadURL$
+ * @version $Revision$
+ * @date $Date$
+ * @author $Author$
+ */
+package org.osbp.tests.entities;
+
+import java.util.Date;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.PreRemove;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+import javax.validation.Valid;
+import org.eclipse.osbp.dsl.common.datatypes.IEntity;
+import org.eclipse.osbp.runtime.common.annotations.Dispose;
+import org.eclipse.osbp.runtime.common.annotations.Properties;
+import org.eclipse.osbp.runtime.common.annotations.Property;
+import org.osbp.tests.entities.BaseUUID;
+import org.osbp.tests.entities.CashPaymentMethod;
+import org.osbp.tests.entities.CashSlip;
+
+@Entity
+@Table(name = "CASH_PAYMENT")
+@SuppressWarnings("all")
+public class CashPayment extends BaseUUID implements IEntity {
+ @Column(name = "NOW")
+ @Temporal(value = TemporalType.TIMESTAMP)
+ @Valid
+ private Date now;
+
+ @Column(name = "PAYED")
+ @Properties(properties = @Property(key = "decimalformat", value = "###,##0.00 ¤"))
+ private Double payed;
+
+ @ManyToOne(fetch = FetchType.LAZY, cascade = { CascadeType.DETACH, CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH })
+ @JoinColumn(name = "SLIP_ID")
+ private CashSlip slip;
+
+ @ManyToOne(fetch = FetchType.LAZY)
+ @JoinColumn(name = "METHOD_OF_PAYMENT_ID")
+ private CashPaymentMethod methodOfPayment;
+
+ /**
+ * Checks whether the object is disposed.
+ * @throws RuntimeException if the object is disposed.
+ */
+ private void checkDisposed() {
+ if (isDisposed()) {
+ throw new RuntimeException("Object already disposed: " + this);
+ }
+ }
+
+ /**
+ * Calling dispose will destroy that instance. The internal state will be
+ * set to 'disposed' and methods of that object must not be used anymore.
+ * Each call will result in runtime exceptions.<br>
+ * If this object keeps composition containments, these will be disposed too.
+ * So the whole composition containment tree will be disposed on calling this method.
+ */
+ @Dispose
+ public void dispose() {
+ if (isDisposed()) {
+ return;
+ }
+ try {
+ // Dispose all the composition references.
+ if (this.slip != null) {
+ this.slip.dispose();
+ this.slip = null;
+ }
+
+ }
+ finally {
+ super.dispose();
+ }
+
+ }
+
+ /**
+ * @return Returns the now property or <code>null</code> if not present.
+ */
+ public Date getNow() {
+ checkDisposed();
+ return this.now;
+ }
+
+ /**
+ * Sets the now property to this instance.
+ */
+ public void setNow(final Date now) {
+ checkDisposed();
+ this.now = now;
+ }
+
+ /**
+ * @return Returns the payed property or <code>null</code> if not present.
+ */
+ public Double getPayed() {
+ checkDisposed();
+ return this.payed;
+ }
+
+ /**
+ * Sets the payed property to this instance.
+ */
+ public void setPayed(final Double payed) {
+ checkDisposed();
+ this.payed = payed;
+ }
+
+ /**
+ * @return Returns the slip property or <code>null</code> if not present.
+ */
+ public CashSlip getSlip() {
+ checkDisposed();
+ return this.slip;
+ }
+
+ /**
+ * Sets the slip property to this instance.
+ * Since the reference is a container reference, the opposite reference (CashSlip.payments)
+ * of the slip will be handled automatically and no further coding is required to keep them in sync.
+ * See {@link CashSlip#setPayments(CashSlip)}.
+ */
+ public void setSlip(final CashSlip slip) {
+ checkDisposed();
+ if (this.slip != null) {
+ this.slip.internalRemoveFromPayments(this);
+ }
+ internalSetSlip(slip);
+ if (this.slip != null) {
+ this.slip.internalAddToPayments(this);
+ }
+
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalSetSlip(final CashSlip slip) {
+ this.slip = slip;
+ }
+
+ /**
+ * @return Returns the methodOfPayment property or <code>null</code> if not present.
+ */
+ public CashPaymentMethod getMethodOfPayment() {
+ checkDisposed();
+ return this.methodOfPayment;
+ }
+
+ /**
+ * Sets the methodOfPayment property to this instance.
+ * Since the reference is a container reference, the opposite reference (CashPaymentMethod.payments)
+ * of the methodOfPayment will be handled automatically and no further coding is required to keep them in sync.
+ * See {@link CashPaymentMethod#setPayments(CashPaymentMethod)}.
+ */
+ public void setMethodOfPayment(final CashPaymentMethod methodOfPayment) {
+ checkDisposed();
+ if (this.methodOfPayment != null) {
+ this.methodOfPayment.internalRemoveFromPayments(this);
+ }
+ internalSetMethodOfPayment(methodOfPayment);
+ if (this.methodOfPayment != null) {
+ this.methodOfPayment.internalAddToPayments(this);
+ }
+
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalSetMethodOfPayment(final CashPaymentMethod methodOfPayment) {
+ this.methodOfPayment = methodOfPayment;
+ }
+
+ /**
+ * Iterates all cross references and removes them from the parent to avoid ConstraintViolationException
+ */
+ @PreRemove
+ protected void preRemove() {
+
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/entities/CashPaymentMethod.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/entities/CashPaymentMethod.java
new file mode 100644
index 0000000..40cc30c
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/entities/CashPaymentMethod.java
@@ -0,0 +1,252 @@
+/**
+ * Copyright (C) - Loetz GmbH&Co.KG, 69115 Heidelberg, Germany
+ *
+ * This source was created by OSBP Softwarefactory Wizard!
+ *
+ * OSBP is (C) - Loetz GmbH&Co.KG, 69115 Heidelberg, Germany
+ *
+ * ================================================================
+ *
+ * @file $HeadURL$
+ * @version $Revision$
+ * @date $Date$
+ * @author $Author$
+ */
+package org.osbp.tests.entities;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Index;
+import javax.persistence.JoinColumn;
+import javax.persistence.OneToMany;
+import javax.persistence.PreRemove;
+import javax.persistence.Table;
+import org.eclipse.osbp.dsl.common.datatypes.IEntity;
+import org.eclipse.osbp.runtime.common.annotations.Dispose;
+import org.eclipse.osbp.runtime.common.annotations.DomainDescription;
+import org.eclipse.osbp.runtime.common.annotations.DomainKey;
+import org.eclipse.persistence.annotations.Noncacheable;
+import org.osbp.tests.entities.BaseUUID;
+import org.osbp.tests.entities.CashPayment;
+
+@Entity
+@Table(name = "CASH_PAYMENT_METHOD", indexes = @Index(name = "paymentNumIndex", unique = true, columnList = "num"))
+@SuppressWarnings("all")
+public class CashPaymentMethod extends BaseUUID implements IEntity {
+ @DomainKey
+ @Column(name = "NUM")
+ private String num;
+
+ @DomainDescription
+ @Column(name = "NAME")
+ private String name;
+
+ @Column(name = "CREDIT")
+ private Boolean credit;
+
+ @Column(name = "IMAGE_NAME")
+ private String imageName;
+
+ @Column(name = "LOWER_LIMIT")
+ private double lowerLimit;
+
+ @JoinColumn(name = "PAYMENTS_ID")
+ @OneToMany(mappedBy = "methodOfPayment")
+ @Noncacheable
+ private List<CashPayment> payments;
+
+ /**
+ * Checks whether the object is disposed.
+ * @throws RuntimeException if the object is disposed.
+ */
+ private void checkDisposed() {
+ if (isDisposed()) {
+ throw new RuntimeException("Object already disposed: " + this);
+ }
+ }
+
+ /**
+ * Calling dispose will destroy that instance. The internal state will be
+ * set to 'disposed' and methods of that object must not be used anymore.
+ * Each call will result in runtime exceptions.<br>
+ * If this object keeps composition containments, these will be disposed too.
+ * So the whole composition containment tree will be disposed on calling this method.
+ */
+ @Dispose
+ public void dispose() {
+ if (isDisposed()) {
+ return;
+ }
+ super.dispose();
+ }
+
+ /**
+ * @return Returns the num property or <code>null</code> if not present.
+ */
+ public String getNum() {
+ checkDisposed();
+ return this.num;
+ }
+
+ /**
+ * Sets the num property to this instance.
+ */
+ public void setNum(final String num) {
+ checkDisposed();
+ this.num = num;
+ }
+
+ /**
+ * @return Returns the name property or <code>null</code> if not present.
+ */
+ public String getName() {
+ checkDisposed();
+ return this.name;
+ }
+
+ /**
+ * Sets the name property to this instance.
+ */
+ public void setName(final String name) {
+ checkDisposed();
+ this.name = name;
+ }
+
+ /**
+ * @return Returns the credit property or <code>null</code> if not present.
+ */
+ public Boolean getCredit() {
+ checkDisposed();
+ return this.credit;
+ }
+
+ /**
+ * Sets the credit property to this instance.
+ */
+ public void setCredit(final Boolean credit) {
+ checkDisposed();
+ this.credit = credit;
+ }
+
+ /**
+ * @return Returns the imageName property or <code>null</code> if not present.
+ */
+ public String getImageName() {
+ checkDisposed();
+ return this.imageName;
+ }
+
+ /**
+ * Sets the imageName property to this instance.
+ */
+ public void setImageName(final String imageName) {
+ checkDisposed();
+ this.imageName = imageName;
+ }
+
+ /**
+ * @return Returns the lowerLimit property or <code>null</code> if not present.
+ */
+ public double getLowerLimit() {
+ checkDisposed();
+ return this.lowerLimit;
+ }
+
+ /**
+ * Sets the lowerLimit property to this instance.
+ */
+ public void setLowerLimit(final double lowerLimit) {
+ checkDisposed();
+ this.lowerLimit = lowerLimit;
+ }
+
+ /**
+ * @return Returns an unmodifiable list of payments.
+ */
+ public List<CashPayment> getPayments() {
+ checkDisposed();
+ return Collections.unmodifiableList(internalGetPayments());
+ }
+
+ /**
+ * Sets the given payments to the object. Currently contained payments instances will be removed.
+ *
+ * @param payments the list of new instances
+ */
+ public void setPayments(final List<CashPayment> payments) {
+ // remove the old cashPayment
+ for(CashPayment oldElement : new ArrayList<CashPayment>(this.internalGetPayments())){
+ removeFromPayments(oldElement);
+ }
+
+ // add the new cashPayment
+ for(CashPayment newElement : payments){
+ addToPayments(newElement);
+ }
+ }
+
+ /**
+ * For internal use only! Returns the list of <code>CashPayment</code>s thereby lazy initializing it.
+ */
+ public List<CashPayment> internalGetPayments() {
+ if (this.payments == null) {
+ this.payments = new ArrayList<CashPayment>();
+ }
+ return this.payments;
+ }
+
+ /**
+ * Adds the given cashPayment to this object. <p>
+ * Since the reference is a composition reference, the opposite reference (CashPayment.methodOfPayment)
+ * of the cashPayment will be handled automatically and no further coding is required to keep them in sync.
+ * See {@link CashPayment#setMethodOfPayment(CashPayment)}.
+ *
+ */
+ public void addToPayments(final CashPayment cashPayment) {
+ checkDisposed();
+ cashPayment.setMethodOfPayment(this);
+ }
+
+ /**
+ * Removes the given cashPayment from this object. <p>
+ *
+ */
+ public void removeFromPayments(final CashPayment cashPayment) {
+ checkDisposed();
+ cashPayment.setMethodOfPayment(null);
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalAddToPayments(final CashPayment cashPayment) {
+ if(cashPayment == null) {
+ return;
+ }
+
+ if(!internalGetPayments().contains(cashPayment)) {
+ internalGetPayments().add(cashPayment);
+ }
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalRemoveFromPayments(final CashPayment cashPayment) {
+ internalGetPayments().remove(cashPayment);
+ }
+
+ /**
+ * Iterates all cross references and removes them from the parent to avoid ConstraintViolationException
+ */
+ @PreRemove
+ protected void preRemove() {
+ // remove the payments
+ for(CashPayment oldElement : new ArrayList<CashPayment>(this.internalGetPayments())){
+ removeFromPayments(oldElement);
+ }
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/entities/CashPosition.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/entities/CashPosition.java
new file mode 100644
index 0000000..b6ff39f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/entities/CashPosition.java
@@ -0,0 +1,200 @@
+/**
+ * Copyright (C) - Loetz GmbH&Co.KG, 69115 Heidelberg, Germany
+ *
+ * This source was created by OSBP Softwarefactory Wizard!
+ *
+ * OSBP is (C) - Loetz GmbH&Co.KG, 69115 Heidelberg, Germany
+ *
+ * ================================================================
+ *
+ * @file $HeadURL$
+ * @version $Revision$
+ * @date $Date$
+ * @author $Author$
+ */
+package org.osbp.tests.entities;
+
+import java.util.Date;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.PreRemove;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+import javax.validation.Valid;
+import org.eclipse.osbp.dsl.common.datatypes.IEntity;
+import org.eclipse.osbp.runtime.common.annotations.Dispose;
+import org.eclipse.osbp.runtime.common.annotations.Properties;
+import org.eclipse.osbp.runtime.common.annotations.Property;
+import org.osbp.tests.entities.BaseUUID;
+import org.osbp.tests.entities.CashSlip;
+
+@Entity
+@Table(name = "CASH_POSITION")
+@SuppressWarnings("all")
+public class CashPosition extends BaseUUID implements IEntity {
+ @Column(name = "NOW")
+ @Temporal(value = TemporalType.TIMESTAMP)
+ @Valid
+ private Date now;
+
+ @Column(name = "QUANTITY")
+ private double quantity;
+
+ @Column(name = "PRICE")
+ @Properties(properties = @Property(key = "decimalformat", value = "###,##0.00 ¤"))
+ private Double price;
+
+ @Column(name = "AMOUNT")
+ @Properties(properties = @Property(key = "decimalformat", value = "###,##0.00 ¤"))
+ private Double amount;
+
+ @ManyToOne(fetch = FetchType.LAZY, cascade = { CascadeType.DETACH, CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH })
+ @JoinColumn(name = "SLIP_ID")
+ private CashSlip slip;
+
+ /**
+ * Checks whether the object is disposed.
+ * @throws RuntimeException if the object is disposed.
+ */
+ private void checkDisposed() {
+ if (isDisposed()) {
+ throw new RuntimeException("Object already disposed: " + this);
+ }
+ }
+
+ /**
+ * Calling dispose will destroy that instance. The internal state will be
+ * set to 'disposed' and methods of that object must not be used anymore.
+ * Each call will result in runtime exceptions.<br>
+ * If this object keeps composition containments, these will be disposed too.
+ * So the whole composition containment tree will be disposed on calling this method.
+ */
+ @Dispose
+ public void dispose() {
+ if (isDisposed()) {
+ return;
+ }
+ try {
+ // Dispose all the composition references.
+ if (this.slip != null) {
+ this.slip.dispose();
+ this.slip = null;
+ }
+
+ }
+ finally {
+ super.dispose();
+ }
+
+ }
+
+ /**
+ * @return Returns the now property or <code>null</code> if not present.
+ */
+ public Date getNow() {
+ checkDisposed();
+ return this.now;
+ }
+
+ /**
+ * Sets the now property to this instance.
+ */
+ public void setNow(final Date now) {
+ checkDisposed();
+ this.now = now;
+ }
+
+ /**
+ * @return Returns the quantity property or <code>null</code> if not present.
+ */
+ public double getQuantity() {
+ checkDisposed();
+ return this.quantity;
+ }
+
+ /**
+ * Sets the quantity property to this instance.
+ */
+ public void setQuantity(final double quantity) {
+ checkDisposed();
+ this.quantity = quantity;
+ }
+
+ /**
+ * @return Returns the price property or <code>null</code> if not present.
+ */
+ public Double getPrice() {
+ checkDisposed();
+ return this.price;
+ }
+
+ /**
+ * Sets the price property to this instance.
+ */
+ public void setPrice(final Double price) {
+ checkDisposed();
+ this.price = price;
+ }
+
+ /**
+ * @return Returns the amount property or <code>null</code> if not present.
+ */
+ public Double getAmount() {
+ checkDisposed();
+ return this.amount;
+ }
+
+ /**
+ * Sets the amount property to this instance.
+ */
+ public void setAmount(final Double amount) {
+ checkDisposed();
+ this.amount = amount;
+ }
+
+ /**
+ * @return Returns the slip property or <code>null</code> if not present.
+ */
+ public CashSlip getSlip() {
+ checkDisposed();
+ return this.slip;
+ }
+
+ /**
+ * Sets the slip property to this instance.
+ * Since the reference is a container reference, the opposite reference (CashSlip.positions)
+ * of the slip will be handled automatically and no further coding is required to keep them in sync.
+ * See {@link CashSlip#setPositions(CashSlip)}.
+ */
+ public void setSlip(final CashSlip slip) {
+ checkDisposed();
+ if (this.slip != null) {
+ this.slip.internalRemoveFromPositions(this);
+ }
+ internalSetSlip(slip);
+ if (this.slip != null) {
+ this.slip.internalAddToPositions(this);
+ }
+
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalSetSlip(final CashSlip slip) {
+ this.slip = slip;
+ }
+
+ /**
+ * Iterates all cross references and removes them from the parent to avoid ConstraintViolationException
+ */
+ @PreRemove
+ protected void preRemove() {
+
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/entities/CashRegister.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/entities/CashRegister.java
new file mode 100644
index 0000000..e9a80da
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/entities/CashRegister.java
@@ -0,0 +1,233 @@
+/**
+ * Copyright (C) - Loetz GmbH&Co.KG, 69115 Heidelberg, Germany
+ *
+ * This source was created by OSBP Softwarefactory Wizard!
+ *
+ * OSBP is (C) - Loetz GmbH&Co.KG, 69115 Heidelberg, Germany
+ *
+ * ================================================================
+ *
+ * @file $HeadURL$
+ * @version $Revision$
+ * @date $Date$
+ * @author $Author$
+ */
+package org.osbp.tests.entities;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import javax.persistence.Cacheable;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Index;
+import javax.persistence.JoinColumn;
+import javax.persistence.OneToMany;
+import javax.persistence.PreRemove;
+import javax.persistence.Table;
+import org.eclipse.osbp.dsl.common.datatypes.IEntity;
+import org.eclipse.osbp.runtime.common.annotations.Dispose;
+import org.eclipse.osbp.runtime.common.annotations.DomainKey;
+import org.eclipse.persistence.annotations.Noncacheable;
+import org.osbp.tests.entities.BaseUUID;
+import org.osbp.tests.entities.CashSlip;
+
+@Entity
+@Table(name = "CASH_REGISTER", indexes = { @Index(name = "cashIpIndex", unique = true, columnList = "ip"), @Index(name = "cashNumIndex", unique = true, columnList = "num") })
+@Cacheable
+@SuppressWarnings("all")
+public class CashRegister extends BaseUUID implements IEntity {
+ @DomainKey
+ @Column(name = "NUM")
+ private String num;
+
+ @Column(name = "IP")
+ private String ip;
+
+ @Column(name = "LOCATION")
+ private String location;
+
+ @Column(name = "CURRENT_DAY")
+ private String currentDay;
+
+ @JoinColumn(name = "SLIPS_ID")
+ @OneToMany(mappedBy = "register")
+ @Noncacheable
+ private List<CashSlip> slips;
+
+ /**
+ * Checks whether the object is disposed.
+ * @throws RuntimeException if the object is disposed.
+ */
+ private void checkDisposed() {
+ if (isDisposed()) {
+ throw new RuntimeException("Object already disposed: " + this);
+ }
+ }
+
+ /**
+ * Calling dispose will destroy that instance. The internal state will be
+ * set to 'disposed' and methods of that object must not be used anymore.
+ * Each call will result in runtime exceptions.<br>
+ * If this object keeps composition containments, these will be disposed too.
+ * So the whole composition containment tree will be disposed on calling this method.
+ */
+ @Dispose
+ public void dispose() {
+ if (isDisposed()) {
+ return;
+ }
+ super.dispose();
+ }
+
+ /**
+ * @return Returns the num property or <code>null</code> if not present.
+ */
+ public String getNum() {
+ checkDisposed();
+ return this.num;
+ }
+
+ /**
+ * Sets the num property to this instance.
+ */
+ public void setNum(final String num) {
+ checkDisposed();
+ this.num = num;
+ }
+
+ /**
+ * @return Returns the ip property or <code>null</code> if not present.
+ */
+ public String getIp() {
+ checkDisposed();
+ return this.ip;
+ }
+
+ /**
+ * Sets the ip property to this instance.
+ */
+ public void setIp(final String ip) {
+ checkDisposed();
+ this.ip = ip;
+ }
+
+ /**
+ * @return Returns the location property or <code>null</code> if not present.
+ */
+ public String getLocation() {
+ checkDisposed();
+ return this.location;
+ }
+
+ /**
+ * Sets the location property to this instance.
+ */
+ public void setLocation(final String location) {
+ checkDisposed();
+ this.location = location;
+ }
+
+ /**
+ * @return Returns the currentDay property or <code>null</code> if not present.
+ */
+ public String getCurrentDay() {
+ checkDisposed();
+ return this.currentDay;
+ }
+
+ /**
+ * Sets the currentDay property to this instance.
+ */
+ public void setCurrentDay(final String currentDay) {
+ checkDisposed();
+ this.currentDay = currentDay;
+ }
+
+ /**
+ * @return Returns an unmodifiable list of slips.
+ */
+ public List<CashSlip> getSlips() {
+ checkDisposed();
+ return Collections.unmodifiableList(internalGetSlips());
+ }
+
+ /**
+ * Sets the given slips to the object. Currently contained slips instances will be removed.
+ *
+ * @param slips the list of new instances
+ */
+ public void setSlips(final List<CashSlip> slips) {
+ // remove the old cashSlip
+ for(CashSlip oldElement : new ArrayList<CashSlip>(this.internalGetSlips())){
+ removeFromSlips(oldElement);
+ }
+
+ // add the new cashSlip
+ for(CashSlip newElement : slips){
+ addToSlips(newElement);
+ }
+ }
+
+ /**
+ * For internal use only! Returns the list of <code>CashSlip</code>s thereby lazy initializing it.
+ */
+ public List<CashSlip> internalGetSlips() {
+ if (this.slips == null) {
+ this.slips = new ArrayList<CashSlip>();
+ }
+ return this.slips;
+ }
+
+ /**
+ * Adds the given cashSlip to this object. <p>
+ * Since the reference is a composition reference, the opposite reference (CashSlip.register)
+ * of the cashSlip will be handled automatically and no further coding is required to keep them in sync.
+ * See {@link CashSlip#setRegister(CashSlip)}.
+ *
+ */
+ public void addToSlips(final CashSlip cashSlip) {
+ checkDisposed();
+ cashSlip.setRegister(this);
+ }
+
+ /**
+ * Removes the given cashSlip from this object. <p>
+ *
+ */
+ public void removeFromSlips(final CashSlip cashSlip) {
+ checkDisposed();
+ cashSlip.setRegister(null);
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalAddToSlips(final CashSlip cashSlip) {
+ if(cashSlip == null) {
+ return;
+ }
+
+ if(!internalGetSlips().contains(cashSlip)) {
+ internalGetSlips().add(cashSlip);
+ }
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalRemoveFromSlips(final CashSlip cashSlip) {
+ internalGetSlips().remove(cashSlip);
+ }
+
+ /**
+ * Iterates all cross references and removes them from the parent to avoid ConstraintViolationException
+ */
+ @PreRemove
+ protected void preRemove() {
+ // remove the slips
+ for(CashSlip oldElement : new ArrayList<CashSlip>(this.internalGetSlips())){
+ removeFromSlips(oldElement);
+ }
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/entities/CashSlip.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/entities/CashSlip.java
new file mode 100644
index 0000000..45c6ed0
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/entities/CashSlip.java
@@ -0,0 +1,472 @@
+/**
+ * Copyright (C) - Loetz GmbH&Co.KG, 69115 Heidelberg, Germany
+ *
+ * This source was created by OSBP Softwarefactory Wizard!
+ *
+ * OSBP is (C) - Loetz GmbH&Co.KG, 69115 Heidelberg, Germany
+ *
+ * ================================================================
+ *
+ * @file $HeadURL$
+ * @version $Revision$
+ * @date $Date$
+ * @author $Author$
+ */
+package org.osbp.tests.entities;
+
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Index;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.OneToMany;
+import javax.persistence.PreRemove;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+import javax.validation.Valid;
+import org.eclipse.osbp.dsl.common.datatypes.IEntity;
+import org.eclipse.osbp.runtime.common.annotations.Dispose;
+import org.eclipse.osbp.runtime.common.annotations.Properties;
+import org.eclipse.osbp.runtime.common.annotations.Property;
+import org.eclipse.persistence.annotations.Noncacheable;
+import org.osbp.tests.entities.BaseUUID;
+import org.osbp.tests.entities.CashPayment;
+import org.osbp.tests.entities.CashPosition;
+import org.osbp.tests.entities.CashRegister;
+import org.osbp.tests.entities.Mcustomer;
+
+@Entity
+@Table(name = "CASH_SLIP", indexes = { @Index(name = "currentDay_index", columnList = "currentDay"), @Index(name = "serial_index", columnList = "currentDay, serial") })
+@SuppressWarnings("all")
+public class CashSlip extends BaseUUID implements IEntity {
+ @Column(name = "CURRENT_DAY")
+ private String currentDay;
+
+ @Column(name = "NOW")
+ @Temporal(value = TemporalType.TIMESTAMP)
+ @Valid
+ private Date now;
+
+ @Column(name = "CASHIER")
+ private String cashier;
+
+ @Column(name = "TOTAL")
+ @Properties(properties = @Property(key = "decimalformat", value = "###,##0.00 ¤"))
+ private Double total;
+
+ @GeneratedValue
+ @Column(name = "SERIAL")
+ private long serial;
+
+ @Column(name = "PAYED")
+ private boolean payed;
+
+ @JoinColumn(name = "POSITIONS_ID")
+ @OneToMany(mappedBy = "slip", cascade = CascadeType.ALL, orphanRemoval = true)
+ @Noncacheable
+ @Valid
+ private List<CashPosition> positions;
+
+ @ManyToOne(fetch = FetchType.LAZY)
+ @JoinColumn(name = "CUSTOMER_ID")
+ private Mcustomer customer;
+
+ @ManyToOne(fetch = FetchType.LAZY)
+ @JoinColumn(name = "REGISTER_ID")
+ private CashRegister register;
+
+ @JoinColumn(name = "PAYMENTS_ID")
+ @OneToMany(mappedBy = "slip", cascade = CascadeType.ALL, orphanRemoval = true)
+ @Noncacheable
+ @Valid
+ private List<CashPayment> payments;
+
+ /**
+ * Checks whether the object is disposed.
+ * @throws RuntimeException if the object is disposed.
+ */
+ private void checkDisposed() {
+ if (isDisposed()) {
+ throw new RuntimeException("Object already disposed: " + this);
+ }
+ }
+
+ /**
+ * Calling dispose will destroy that instance. The internal state will be
+ * set to 'disposed' and methods of that object must not be used anymore.
+ * Each call will result in runtime exceptions.<br>
+ * If this object keeps composition containments, these will be disposed too.
+ * So the whole composition containment tree will be disposed on calling this method.
+ */
+ @Dispose
+ public void dispose() {
+ if (isDisposed()) {
+ return;
+ }
+ try {
+ // Dispose all the composition references.
+ if (this.positions != null) {
+ for (CashPosition cashPosition : this.positions) {
+ cashPosition.dispose();
+ }
+ this.positions = null;
+ }
+ if (this.payments != null) {
+ for (CashPayment cashPayment : this.payments) {
+ cashPayment.dispose();
+ }
+ this.payments = null;
+ }
+
+ }
+ finally {
+ super.dispose();
+ }
+
+ }
+
+ /**
+ * @return Returns the currentDay property or <code>null</code> if not present.
+ */
+ public String getCurrentDay() {
+ checkDisposed();
+ return this.currentDay;
+ }
+
+ /**
+ * Sets the currentDay property to this instance.
+ */
+ public void setCurrentDay(final String currentDay) {
+ checkDisposed();
+ this.currentDay = currentDay;
+ }
+
+ /**
+ * @return Returns the now property or <code>null</code> if not present.
+ */
+ public Date getNow() {
+ checkDisposed();
+ return this.now;
+ }
+
+ /**
+ * Sets the now property to this instance.
+ */
+ public void setNow(final Date now) {
+ checkDisposed();
+ this.now = now;
+ }
+
+ /**
+ * @return Returns the cashier property or <code>null</code> if not present.
+ */
+ public String getCashier() {
+ checkDisposed();
+ return this.cashier;
+ }
+
+ /**
+ * Sets the cashier property to this instance.
+ */
+ public void setCashier(final String cashier) {
+ checkDisposed();
+ this.cashier = cashier;
+ }
+
+ /**
+ * @return Returns the total property or <code>null</code> if not present.
+ */
+ public Double getTotal() {
+ checkDisposed();
+ return this.total;
+ }
+
+ /**
+ * Sets the total property to this instance.
+ */
+ public void setTotal(final Double total) {
+ checkDisposed();
+ this.total = total;
+ }
+
+ /**
+ * @return Returns the serial property or <code>null</code> if not present.
+ */
+ public long getSerial() {
+ checkDisposed();
+ return this.serial;
+ }
+
+ /**
+ * Sets the serial property to this instance.
+ */
+ public void setSerial(final long serial) {
+ checkDisposed();
+ this.serial = serial;
+ }
+
+ /**
+ * @return Returns the payed property or <code>null</code> if not present.
+ */
+ public boolean getPayed() {
+ checkDisposed();
+ return this.payed;
+ }
+
+ /**
+ * Sets the payed property to this instance.
+ */
+ public void setPayed(final boolean payed) {
+ checkDisposed();
+ this.payed = payed;
+ }
+
+ /**
+ * @return Returns an unmodifiable list of positions.
+ */
+ public List<CashPosition> getPositions() {
+ checkDisposed();
+ return Collections.unmodifiableList(internalGetPositions());
+ }
+
+ /**
+ * Sets the given positions to the object. Currently contained positions instances will be removed.
+ *
+ * @param positions the list of new instances
+ */
+ public void setPositions(final List<CashPosition> positions) {
+ // remove the old cashPosition
+ for(CashPosition oldElement : new ArrayList<CashPosition>(this.internalGetPositions())){
+ removeFromPositions(oldElement);
+ }
+
+ // add the new cashPosition
+ for(CashPosition newElement : positions){
+ addToPositions(newElement);
+ }
+ }
+
+ /**
+ * For internal use only! Returns the list of <code>CashPosition</code>s thereby lazy initializing it.
+ */
+ public List<CashPosition> internalGetPositions() {
+ if (this.positions == null) {
+ this.positions = new ArrayList<CashPosition>();
+ }
+ return this.positions;
+ }
+
+ /**
+ * Adds the given cashPosition to this object. <p>
+ * Since the reference is a composition reference, the opposite reference (CashPosition.slip)
+ * of the cashPosition will be handled automatically and no further coding is required to keep them in sync.
+ * See {@link CashPosition#setSlip(CashPosition)}.
+ *
+ */
+ public void addToPositions(final CashPosition cashPosition) {
+ checkDisposed();
+ cashPosition.setSlip(this);
+ }
+
+ /**
+ * Removes the given cashPosition from this object. <p>
+ * Since the reference is a cascading reference, the opposite reference (CashPosition.slip)
+ * of the cashPosition will be handled automatically and no further coding is required to keep them in sync.
+ * See {@link CashPosition#setSlip(CashPosition)}.
+ *
+ */
+ public void removeFromPositions(final CashPosition cashPosition) {
+ checkDisposed();
+ cashPosition.setSlip(null);
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalAddToPositions(final CashPosition cashPosition) {
+ if(cashPosition == null) {
+ return;
+ }
+
+ if(!internalGetPositions().contains(cashPosition)) {
+ internalGetPositions().add(cashPosition);
+ }
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalRemoveFromPositions(final CashPosition cashPosition) {
+ internalGetPositions().remove(cashPosition);
+ }
+
+ /**
+ * @return Returns the customer property or <code>null</code> if not present.
+ */
+ public Mcustomer getCustomer() {
+ checkDisposed();
+ return this.customer;
+ }
+
+ /**
+ * Sets the customer property to this instance.
+ * Since the reference is a container reference, the opposite reference (Mcustomer.slips)
+ * of the customer will be handled automatically and no further coding is required to keep them in sync.
+ * See {@link Mcustomer#setSlips(Mcustomer)}.
+ */
+ public void setCustomer(final Mcustomer customer) {
+ checkDisposed();
+ if (this.customer != null) {
+ this.customer.internalRemoveFromSlips(this);
+ }
+ internalSetCustomer(customer);
+ if (this.customer != null) {
+ this.customer.internalAddToSlips(this);
+ }
+
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalSetCustomer(final Mcustomer customer) {
+ this.customer = customer;
+ }
+
+ /**
+ * @return Returns the register property or <code>null</code> if not present.
+ */
+ public CashRegister getRegister() {
+ checkDisposed();
+ return this.register;
+ }
+
+ /**
+ * Sets the register property to this instance.
+ * Since the reference is a container reference, the opposite reference (CashRegister.slips)
+ * of the register will be handled automatically and no further coding is required to keep them in sync.
+ * See {@link CashRegister#setSlips(CashRegister)}.
+ */
+ public void setRegister(final CashRegister register) {
+ checkDisposed();
+ if (this.register != null) {
+ this.register.internalRemoveFromSlips(this);
+ }
+ internalSetRegister(register);
+ if (this.register != null) {
+ this.register.internalAddToSlips(this);
+ }
+
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalSetRegister(final CashRegister register) {
+ this.register = register;
+ }
+
+ /**
+ * @return Returns an unmodifiable list of payments.
+ */
+ public List<CashPayment> getPayments() {
+ checkDisposed();
+ return Collections.unmodifiableList(internalGetPayments());
+ }
+
+ /**
+ * Sets the given payments to the object. Currently contained payments instances will be removed.
+ *
+ * @param payments the list of new instances
+ */
+ public void setPayments(final List<CashPayment> payments) {
+ // remove the old cashPayment
+ for(CashPayment oldElement : new ArrayList<CashPayment>(this.internalGetPayments())){
+ removeFromPayments(oldElement);
+ }
+
+ // add the new cashPayment
+ for(CashPayment newElement : payments){
+ addToPayments(newElement);
+ }
+ }
+
+ /**
+ * For internal use only! Returns the list of <code>CashPayment</code>s thereby lazy initializing it.
+ */
+ public List<CashPayment> internalGetPayments() {
+ if (this.payments == null) {
+ this.payments = new ArrayList<CashPayment>();
+ }
+ return this.payments;
+ }
+
+ /**
+ * Adds the given cashPayment to this object. <p>
+ * Since the reference is a composition reference, the opposite reference (CashPayment.slip)
+ * of the cashPayment will be handled automatically and no further coding is required to keep them in sync.
+ * See {@link CashPayment#setSlip(CashPayment)}.
+ *
+ */
+ public void addToPayments(final CashPayment cashPayment) {
+ checkDisposed();
+ cashPayment.setSlip(this);
+ }
+
+ /**
+ * Removes the given cashPayment from this object. <p>
+ * Since the reference is a cascading reference, the opposite reference (CashPayment.slip)
+ * of the cashPayment will be handled automatically and no further coding is required to keep them in sync.
+ * See {@link CashPayment#setSlip(CashPayment)}.
+ *
+ */
+ public void removeFromPayments(final CashPayment cashPayment) {
+ checkDisposed();
+ cashPayment.setSlip(null);
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalAddToPayments(final CashPayment cashPayment) {
+ if(cashPayment == null) {
+ return;
+ }
+
+ if(!internalGetPayments().contains(cashPayment)) {
+ internalGetPayments().add(cashPayment);
+ }
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalRemoveFromPayments(final CashPayment cashPayment) {
+ internalGetPayments().remove(cashPayment);
+ }
+
+ public String when() {
+ if ((this.now != null)) {
+ return SimpleDateFormat.getDateInstance(DateFormat.SHORT).format(this.now);
+ }
+ return "";
+ }
+
+ /**
+ * Iterates all cross references and removes them from the parent to avoid ConstraintViolationException
+ */
+ @PreRemove
+ protected void preRemove() {
+
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/entities/Company.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/entities/Company.java
new file mode 100644
index 0000000..17aaae7
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/entities/Company.java
@@ -0,0 +1,382 @@
+/**
+ * Copyright (C) - Loetz GmbH&Co.KG, 69115 Heidelberg, Germany
+ *
+ * This source was created by OSBP Softwarefactory Wizard!
+ *
+ * OSBP is (C) - Loetz GmbH&Co.KG, 69115 Heidelberg, Germany
+ *
+ * ================================================================
+ *
+ * @file $HeadURL$
+ * @version $Revision$
+ * @date $Date$
+ * @author $Author$
+ */
+package org.osbp.tests.entities;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.OneToMany;
+import javax.persistence.PreRemove;
+import javax.persistence.Table;
+import javax.validation.Valid;
+import org.eclipse.osbp.dsl.common.datatypes.IEntity;
+import org.eclipse.osbp.runtime.common.annotations.Dispose;
+import org.eclipse.osbp.runtime.common.annotations.DomainKey;
+import org.eclipse.persistence.annotations.Noncacheable;
+import org.osbp.tests.entities.Address;
+import org.osbp.tests.entities.BaseUUID;
+import org.osbp.tests.entities.CompanyGroup;
+import org.osbp.tests.entities.CompanyRelationType;
+import org.osbp.tests.entities.Department;
+
+/**
+ * a company
+ */
+@Entity
+@Table(name = "COMPANY")
+@SuppressWarnings("all")
+public class Company extends BaseUUID implements IEntity {
+ /**
+ * the company group if any
+ */
+ @ManyToOne(fetch = FetchType.LAZY)
+ @JoinColumn(name = "COMPANY_GROUP_ID")
+ private CompanyGroup company_group;
+
+ /**
+ * name of the company
+ */
+ @DomainKey
+ @Column(name = "NAME")
+ private String name;
+
+ /**
+ * more detailed description with usable information for the PIM owner
+ */
+ @Column(name = "DESCRIPTION")
+ private String description;
+
+ /**
+ * relation of the company to the PIM owner
+ */
+ @ManyToOne(fetch = FetchType.LAZY)
+ @JoinColumn(name = "RELATION_TYPE_ID")
+ private CompanyRelationType relation_type;
+
+ /**
+ * any number of addresses
+ */
+ @JoinColumn(name = "ADDRESS_ID")
+ @OneToMany(mappedBy = "company", cascade = CascadeType.ALL, orphanRemoval = true)
+ @Noncacheable
+ @Valid
+ private List<Address> address;
+
+ /**
+ * departments of this company
+ */
+ @JoinColumn(name = "DEPARTMENTS_ID")
+ @OneToMany(mappedBy = "company", cascade = CascadeType.ALL, orphanRemoval = true)
+ @Noncacheable
+ @Valid
+ private List<Department> departments;
+
+ /**
+ * Checks whether the object is disposed.
+ * @throws RuntimeException if the object is disposed.
+ */
+ private void checkDisposed() {
+ if (isDisposed()) {
+ throw new RuntimeException("Object already disposed: " + this);
+ }
+ }
+
+ /**
+ * Calling dispose will destroy that instance. The internal state will be
+ * set to 'disposed' and methods of that object must not be used anymore.
+ * Each call will result in runtime exceptions.<br>
+ * If this object keeps composition containments, these will be disposed too.
+ * So the whole composition containment tree will be disposed on calling this method.
+ */
+ @Dispose
+ public void dispose() {
+ if (isDisposed()) {
+ return;
+ }
+ try {
+ // Dispose all the composition references.
+ if (this.address != null) {
+ for (Address address : this.address) {
+ address.dispose();
+ }
+ this.address = null;
+ }
+ if (this.departments != null) {
+ for (Department department : this.departments) {
+ department.dispose();
+ }
+ this.departments = null;
+ }
+
+ }
+ finally {
+ super.dispose();
+ }
+
+ }
+
+ /**
+ * @return Returns the company_group property or <code>null</code> if not present.
+ */
+ public CompanyGroup getCompany_group() {
+ checkDisposed();
+ return this.company_group;
+ }
+
+ /**
+ * Sets the company_group property to this instance.
+ * Since the reference is a container reference, the opposite reference (CompanyGroup.companies)
+ * of the company_group will be handled automatically and no further coding is required to keep them in sync.
+ * See {@link CompanyGroup#setCompanies(CompanyGroup)}.
+ */
+ public void setCompany_group(final CompanyGroup company_group) {
+ checkDisposed();
+ if (this.company_group != null) {
+ this.company_group.internalRemoveFromCompanies(this);
+ }
+ internalSetCompany_group(company_group);
+ if (this.company_group != null) {
+ this.company_group.internalAddToCompanies(this);
+ }
+
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalSetCompany_group(final CompanyGroup company_group) {
+ this.company_group = company_group;
+ }
+
+ /**
+ * @return Returns the name property or <code>null</code> if not present.
+ */
+ public String getName() {
+ checkDisposed();
+ return this.name;
+ }
+
+ /**
+ * Sets the name property to this instance.
+ */
+ public void setName(final String name) {
+ checkDisposed();
+ this.name = name;
+ }
+
+ /**
+ * @return Returns the description property or <code>null</code> if not present.
+ */
+ public String getDescription() {
+ checkDisposed();
+ return this.description;
+ }
+
+ /**
+ * Sets the description property to this instance.
+ */
+ public void setDescription(final String description) {
+ checkDisposed();
+ this.description = description;
+ }
+
+ /**
+ * @return Returns the relation_type property or <code>null</code> if not present.
+ */
+ public CompanyRelationType getRelation_type() {
+ checkDisposed();
+ return this.relation_type;
+ }
+
+ /**
+ * Sets the relation_type property to this instance.
+ */
+ public void setRelation_type(final CompanyRelationType relation_type) {
+ checkDisposed();
+ this.relation_type = relation_type;
+ }
+
+ /**
+ * @return Returns an unmodifiable list of address.
+ */
+ public List<Address> getAddress() {
+ checkDisposed();
+ return Collections.unmodifiableList(internalGetAddress());
+ }
+
+ /**
+ * Sets the given address to the object. Currently contained address instances will be removed.
+ *
+ * @param address the list of new instances
+ */
+ public void setAddress(final List<Address> address) {
+ // remove the old address
+ for(Address oldElement : new ArrayList<Address>(this.internalGetAddress())){
+ removeFromAddress(oldElement);
+ }
+
+ // add the new address
+ for(Address newElement : address){
+ addToAddress(newElement);
+ }
+ }
+
+ /**
+ * For internal use only! Returns the list of <code>Address</code>s thereby lazy initializing it.
+ */
+ public List<Address> internalGetAddress() {
+ if (this.address == null) {
+ this.address = new ArrayList<Address>();
+ }
+ return this.address;
+ }
+
+ /**
+ * Adds the given address to this object. <p>
+ * Since the reference is a composition reference, the opposite reference (Address.company)
+ * of the address will be handled automatically and no further coding is required to keep them in sync.
+ * See {@link Address#setCompany(Address)}.
+ *
+ */
+ public void addToAddress(final Address address) {
+ checkDisposed();
+ address.setCompany(this);
+ }
+
+ /**
+ * Removes the given address from this object. <p>
+ * Since the reference is a cascading reference, the opposite reference (Address.company)
+ * of the address will be handled automatically and no further coding is required to keep them in sync.
+ * See {@link Address#setCompany(Address)}.
+ *
+ */
+ public void removeFromAddress(final Address address) {
+ checkDisposed();
+ address.setCompany(null);
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalAddToAddress(final Address address) {
+ if(address == null) {
+ return;
+ }
+
+ if(!internalGetAddress().contains(address)) {
+ internalGetAddress().add(address);
+ }
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalRemoveFromAddress(final Address address) {
+ internalGetAddress().remove(address);
+ }
+
+ /**
+ * @return Returns an unmodifiable list of departments.
+ */
+ public List<Department> getDepartments() {
+ checkDisposed();
+ return Collections.unmodifiableList(internalGetDepartments());
+ }
+
+ /**
+ * Sets the given departments to the object. Currently contained departments instances will be removed.
+ *
+ * @param departments the list of new instances
+ */
+ public void setDepartments(final List<Department> departments) {
+ // remove the old department
+ for(Department oldElement : new ArrayList<Department>(this.internalGetDepartments())){
+ removeFromDepartments(oldElement);
+ }
+
+ // add the new department
+ for(Department newElement : departments){
+ addToDepartments(newElement);
+ }
+ }
+
+ /**
+ * For internal use only! Returns the list of <code>Department</code>s thereby lazy initializing it.
+ */
+ public List<Department> internalGetDepartments() {
+ if (this.departments == null) {
+ this.departments = new ArrayList<Department>();
+ }
+ return this.departments;
+ }
+
+ /**
+ * Adds the given department to this object. <p>
+ * Since the reference is a composition reference, the opposite reference (Department.company)
+ * of the department will be handled automatically and no further coding is required to keep them in sync.
+ * See {@link Department#setCompany(Department)}.
+ *
+ */
+ public void addToDepartments(final Department department) {
+ checkDisposed();
+ department.setCompany(this);
+ }
+
+ /**
+ * Removes the given department from this object. <p>
+ * Since the reference is a cascading reference, the opposite reference (Department.company)
+ * of the department will be handled automatically and no further coding is required to keep them in sync.
+ * See {@link Department#setCompany(Department)}.
+ *
+ */
+ public void removeFromDepartments(final Department department) {
+ checkDisposed();
+ department.setCompany(null);
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalAddToDepartments(final Department department) {
+ if(department == null) {
+ return;
+ }
+
+ if(!internalGetDepartments().contains(department)) {
+ internalGetDepartments().add(department);
+ }
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalRemoveFromDepartments(final Department department) {
+ internalGetDepartments().remove(department);
+ }
+
+ /**
+ * Iterates all cross references and removes them from the parent to avoid ConstraintViolationException
+ */
+ @PreRemove
+ protected void preRemove() {
+
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/entities/CompanyGroup.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/entities/CompanyGroup.java
new file mode 100644
index 0000000..6f9851f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/entities/CompanyGroup.java
@@ -0,0 +1,229 @@
+/**
+ * Copyright (C) - Loetz GmbH&Co.KG, 69115 Heidelberg, Germany
+ *
+ * This source was created by OSBP Softwarefactory Wizard!
+ *
+ * OSBP is (C) - Loetz GmbH&Co.KG, 69115 Heidelberg, Germany
+ *
+ * ================================================================
+ *
+ * @file $HeadURL$
+ * @version $Revision$
+ * @date $Date$
+ * @author $Author$
+ */
+package org.osbp.tests.entities;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.OneToMany;
+import javax.persistence.PreRemove;
+import javax.persistence.Table;
+import org.eclipse.osbp.dsl.common.datatypes.IEntity;
+import org.eclipse.osbp.runtime.common.annotations.Dispose;
+import org.eclipse.osbp.runtime.common.annotations.DomainKey;
+import org.eclipse.persistence.annotations.Noncacheable;
+import org.osbp.tests.entities.BaseUUID;
+import org.osbp.tests.entities.Company;
+
+/**
+ * a company group consisting of a group of companies, from one is defined as the main company
+ */
+@Entity
+@Table(name = "COMPANY_GROUP")
+@SuppressWarnings("all")
+public class CompanyGroup extends BaseUUID implements IEntity {
+ /**
+ * name of the company group
+ */
+ @DomainKey
+ @Column(name = "NAME")
+ private String name;
+
+ /**
+ * more detailed description with usable information for the PIM owner
+ */
+ @Column(name = "DESCRIPTION")
+ private String description;
+
+ /**
+ * the main company
+ */
+ @ManyToOne(fetch = FetchType.LAZY)
+ @JoinColumn(name = "MAIN_COMPANY_ID")
+ private Company main_company;
+
+ /**
+ * group of companies
+ */
+ @JoinColumn(name = "COMPANIES_ID")
+ @OneToMany(mappedBy = "company_group")
+ @Noncacheable
+ private List<Company> companies;
+
+ /**
+ * Checks whether the object is disposed.
+ * @throws RuntimeException if the object is disposed.
+ */
+ private void checkDisposed() {
+ if (isDisposed()) {
+ throw new RuntimeException("Object already disposed: " + this);
+ }
+ }
+
+ /**
+ * Calling dispose will destroy that instance. The internal state will be
+ * set to 'disposed' and methods of that object must not be used anymore.
+ * Each call will result in runtime exceptions.<br>
+ * If this object keeps composition containments, these will be disposed too.
+ * So the whole composition containment tree will be disposed on calling this method.
+ */
+ @Dispose
+ public void dispose() {
+ if (isDisposed()) {
+ return;
+ }
+ super.dispose();
+ }
+
+ /**
+ * @return Returns the name property or <code>null</code> if not present.
+ */
+ public String getName() {
+ checkDisposed();
+ return this.name;
+ }
+
+ /**
+ * Sets the name property to this instance.
+ */
+ public void setName(final String name) {
+ checkDisposed();
+ this.name = name;
+ }
+
+ /**
+ * @return Returns the description property or <code>null</code> if not present.
+ */
+ public String getDescription() {
+ checkDisposed();
+ return this.description;
+ }
+
+ /**
+ * Sets the description property to this instance.
+ */
+ public void setDescription(final String description) {
+ checkDisposed();
+ this.description = description;
+ }
+
+ /**
+ * @return Returns the main_company property or <code>null</code> if not present.
+ */
+ public Company getMain_company() {
+ checkDisposed();
+ return this.main_company;
+ }
+
+ /**
+ * Sets the main_company property to this instance.
+ */
+ public void setMain_company(final Company main_company) {
+ checkDisposed();
+ this.main_company = main_company;
+ }
+
+ /**
+ * @return Returns an unmodifiable list of companies.
+ */
+ public List<Company> getCompanies() {
+ checkDisposed();
+ return Collections.unmodifiableList(internalGetCompanies());
+ }
+
+ /**
+ * Sets the given companies to the object. Currently contained companies instances will be removed.
+ *
+ * @param companies the list of new instances
+ */
+ public void setCompanies(final List<Company> companies) {
+ // remove the old company
+ for(Company oldElement : new ArrayList<Company>(this.internalGetCompanies())){
+ removeFromCompanies(oldElement);
+ }
+
+ // add the new company
+ for(Company newElement : companies){
+ addToCompanies(newElement);
+ }
+ }
+
+ /**
+ * For internal use only! Returns the list of <code>Company</code>s thereby lazy initializing it.
+ */
+ public List<Company> internalGetCompanies() {
+ if (this.companies == null) {
+ this.companies = new ArrayList<Company>();
+ }
+ return this.companies;
+ }
+
+ /**
+ * Adds the given company to this object. <p>
+ * Since the reference is a composition reference, the opposite reference (Company.company_group)
+ * of the company will be handled automatically and no further coding is required to keep them in sync.
+ * See {@link Company#setCompany_group(Company)}.
+ *
+ */
+ public void addToCompanies(final Company company) {
+ checkDisposed();
+ company.setCompany_group(this);
+ }
+
+ /**
+ * Removes the given company from this object. <p>
+ *
+ */
+ public void removeFromCompanies(final Company company) {
+ checkDisposed();
+ company.setCompany_group(null);
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalAddToCompanies(final Company company) {
+ if(company == null) {
+ return;
+ }
+
+ if(!internalGetCompanies().contains(company)) {
+ internalGetCompanies().add(company);
+ }
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalRemoveFromCompanies(final Company company) {
+ internalGetCompanies().remove(company);
+ }
+
+ /**
+ * Iterates all cross references and removes them from the parent to avoid ConstraintViolationException
+ */
+ @PreRemove
+ protected void preRemove() {
+ // remove the companies
+ for(Company oldElement : new ArrayList<Company>(this.internalGetCompanies())){
+ removeFromCompanies(oldElement);
+ }
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/entities/CompanyRelationType.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/entities/CompanyRelationType.java
new file mode 100644
index 0000000..ee69d49
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/entities/CompanyRelationType.java
@@ -0,0 +1,110 @@
+/**
+ * Copyright (C) - Loetz GmbH&Co.KG, 69115 Heidelberg, Germany
+ *
+ * This source was created by OSBP Softwarefactory Wizard!
+ *
+ * OSBP is (C) - Loetz GmbH&Co.KG, 69115 Heidelberg, Germany
+ *
+ * ================================================================
+ *
+ * @file $HeadURL$
+ * @version $Revision$
+ * @date $Date$
+ * @author $Author$
+ */
+package org.osbp.tests.entities;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.PreRemove;
+import javax.persistence.Table;
+import org.eclipse.osbp.dsl.common.datatypes.IEntity;
+import org.eclipse.osbp.runtime.common.annotations.Dispose;
+import org.eclipse.osbp.runtime.common.annotations.DomainKey;
+import org.osbp.tests.entities.BaseUUID;
+
+/**
+ * relation of the company to the owner - not the user - of this personal information manager
+ */
+@Entity
+@Table(name = "COMPANY_RELATION_TYPE")
+@SuppressWarnings("all")
+public class CompanyRelationType extends BaseUUID implements IEntity {
+ /**
+ * short name for this relation type
+ */
+ @DomainKey
+ @Column(name = "NAME")
+ private String name;
+
+ /**
+ * more detailed description
+ */
+ @Column(name = "DESCRIPTION")
+ private String description;
+
+ /**
+ * Checks whether the object is disposed.
+ * @throws RuntimeException if the object is disposed.
+ */
+ private void checkDisposed() {
+ if (isDisposed()) {
+ throw new RuntimeException("Object already disposed: " + this);
+ }
+ }
+
+ /**
+ * Calling dispose will destroy that instance. The internal state will be
+ * set to 'disposed' and methods of that object must not be used anymore.
+ * Each call will result in runtime exceptions.<br>
+ * If this object keeps composition containments, these will be disposed too.
+ * So the whole composition containment tree will be disposed on calling this method.
+ */
+ @Dispose
+ public void dispose() {
+ if (isDisposed()) {
+ return;
+ }
+ super.dispose();
+ }
+
+ /**
+ * @return Returns the name property or <code>null</code> if not present.
+ */
+ public String getName() {
+ checkDisposed();
+ return this.name;
+ }
+
+ /**
+ * Sets the name property to this instance.
+ */
+ public void setName(final String name) {
+ checkDisposed();
+ this.name = name;
+ }
+
+ /**
+ * @return Returns the description property or <code>null</code> if not present.
+ */
+ public String getDescription() {
+ checkDisposed();
+ return this.description;
+ }
+
+ /**
+ * Sets the description property to this instance.
+ */
+ public void setDescription(final String description) {
+ checkDisposed();
+ this.description = description;
+ }
+
+ /**
+ * Iterates all cross references and removes them from the parent to avoid ConstraintViolationException
+ */
+ @PreRemove
+ protected void preRemove() {
+
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/entities/Department.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/entities/Department.java
new file mode 100644
index 0000000..85b9a6f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/entities/Department.java
@@ -0,0 +1,289 @@
+/**
+ * Copyright (C) - Loetz GmbH&Co.KG, 69115 Heidelberg, Germany
+ *
+ * This source was created by OSBP Softwarefactory Wizard!
+ *
+ * OSBP is (C) - Loetz GmbH&Co.KG, 69115 Heidelberg, Germany
+ *
+ * ================================================================
+ *
+ * @file $HeadURL$
+ * @version $Revision$
+ * @date $Date$
+ * @author $Author$
+ */
+package org.osbp.tests.entities;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.OneToMany;
+import javax.persistence.PreRemove;
+import javax.persistence.Table;
+import javax.validation.Valid;
+import org.eclipse.osbp.dsl.common.datatypes.IEntity;
+import org.eclipse.osbp.runtime.common.annotations.Dispose;
+import org.eclipse.osbp.runtime.common.annotations.DomainKey;
+import org.eclipse.persistence.annotations.Noncacheable;
+import org.osbp.tests.entities.Address;
+import org.osbp.tests.entities.BaseUUID;
+import org.osbp.tests.entities.Company;
+
+/**
+ * a companies department
+ */
+@Entity
+@Table(name = "DEPARTMENT")
+@SuppressWarnings("all")
+public class Department extends BaseUUID implements IEntity {
+ /**
+ * the company
+ */
+ @ManyToOne(fetch = FetchType.LAZY, cascade = { CascadeType.DETACH, CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH })
+ @JoinColumn(name = "COMPANY_ID")
+ private Company company;
+
+ /**
+ * name of the department
+ */
+ @DomainKey
+ @Column(name = "NAME")
+ private String name;
+
+ /**
+ * more detailed description with usable information for the PIM owner
+ */
+ @Column(name = "DESCRIPTION")
+ private String description;
+
+ /**
+ * any number of addresses
+ */
+ @JoinColumn(name = "ADDRESS_ID")
+ @OneToMany(mappedBy = "department", cascade = CascadeType.ALL, orphanRemoval = true)
+ @Noncacheable
+ @Valid
+ private List<Address> address;
+
+ /**
+ * any number of employees
+ */
+ @Column(name = "DEFAULT_YEARLY_INCOME")
+ private double default_yearly_income;
+
+ /**
+ * Checks whether the object is disposed.
+ * @throws RuntimeException if the object is disposed.
+ */
+ private void checkDisposed() {
+ if (isDisposed()) {
+ throw new RuntimeException("Object already disposed: " + this);
+ }
+ }
+
+ /**
+ * Calling dispose will destroy that instance. The internal state will be
+ * set to 'disposed' and methods of that object must not be used anymore.
+ * Each call will result in runtime exceptions.<br>
+ * If this object keeps composition containments, these will be disposed too.
+ * So the whole composition containment tree will be disposed on calling this method.
+ */
+ @Dispose
+ public void dispose() {
+ if (isDisposed()) {
+ return;
+ }
+ try {
+ // Dispose all the composition references.
+ if (this.company != null) {
+ this.company.dispose();
+ this.company = null;
+ }
+ if (this.address != null) {
+ for (Address address : this.address) {
+ address.dispose();
+ }
+ this.address = null;
+ }
+
+ }
+ finally {
+ super.dispose();
+ }
+
+ }
+
+ /**
+ * @return Returns the company property or <code>null</code> if not present.
+ */
+ public Company getCompany() {
+ checkDisposed();
+ return this.company;
+ }
+
+ /**
+ * Sets the company property to this instance.
+ * Since the reference is a container reference, the opposite reference (Company.departments)
+ * of the company will be handled automatically and no further coding is required to keep them in sync.
+ * See {@link Company#setDepartments(Company)}.
+ */
+ public void setCompany(final Company company) {
+ checkDisposed();
+ if (this.company != null) {
+ this.company.internalRemoveFromDepartments(this);
+ }
+ internalSetCompany(company);
+ if (this.company != null) {
+ this.company.internalAddToDepartments(this);
+ }
+
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalSetCompany(final Company company) {
+ this.company = company;
+ }
+
+ /**
+ * @return Returns the name property or <code>null</code> if not present.
+ */
+ public String getName() {
+ checkDisposed();
+ return this.name;
+ }
+
+ /**
+ * Sets the name property to this instance.
+ */
+ public void setName(final String name) {
+ checkDisposed();
+ this.name = name;
+ }
+
+ /**
+ * @return Returns the description property or <code>null</code> if not present.
+ */
+ public String getDescription() {
+ checkDisposed();
+ return this.description;
+ }
+
+ /**
+ * Sets the description property to this instance.
+ */
+ public void setDescription(final String description) {
+ checkDisposed();
+ this.description = description;
+ }
+
+ /**
+ * @return Returns an unmodifiable list of address.
+ */
+ public List<Address> getAddress() {
+ checkDisposed();
+ return Collections.unmodifiableList(internalGetAddress());
+ }
+
+ /**
+ * Sets the given address to the object. Currently contained address instances will be removed.
+ *
+ * @param address the list of new instances
+ */
+ public void setAddress(final List<Address> address) {
+ // remove the old address
+ for(Address oldElement : new ArrayList<Address>(this.internalGetAddress())){
+ removeFromAddress(oldElement);
+ }
+
+ // add the new address
+ for(Address newElement : address){
+ addToAddress(newElement);
+ }
+ }
+
+ /**
+ * For internal use only! Returns the list of <code>Address</code>s thereby lazy initializing it.
+ */
+ public List<Address> internalGetAddress() {
+ if (this.address == null) {
+ this.address = new ArrayList<Address>();
+ }
+ return this.address;
+ }
+
+ /**
+ * Adds the given address to this object. <p>
+ * Since the reference is a composition reference, the opposite reference (Address.department)
+ * of the address will be handled automatically and no further coding is required to keep them in sync.
+ * See {@link Address#setDepartment(Address)}.
+ *
+ */
+ public void addToAddress(final Address address) {
+ checkDisposed();
+ address.setDepartment(this);
+ }
+
+ /**
+ * Removes the given address from this object. <p>
+ * Since the reference is a cascading reference, the opposite reference (Address.department)
+ * of the address will be handled automatically and no further coding is required to keep them in sync.
+ * See {@link Address#setDepartment(Address)}.
+ *
+ */
+ public void removeFromAddress(final Address address) {
+ checkDisposed();
+ address.setDepartment(null);
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalAddToAddress(final Address address) {
+ if(address == null) {
+ return;
+ }
+
+ if(!internalGetAddress().contains(address)) {
+ internalGetAddress().add(address);
+ }
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalRemoveFromAddress(final Address address) {
+ internalGetAddress().remove(address);
+ }
+
+ /**
+ * @return Returns the default_yearly_income property or <code>null</code> if not present.
+ */
+ public double getDefault_yearly_income() {
+ checkDisposed();
+ return this.default_yearly_income;
+ }
+
+ /**
+ * Sets the default_yearly_income property to this instance.
+ */
+ public void setDefault_yearly_income(final double default_yearly_income) {
+ checkDisposed();
+ this.default_yearly_income = default_yearly_income;
+ }
+
+ /**
+ * Iterates all cross references and removes them from the parent to avoid ConstraintViolationException
+ */
+ @PreRemove
+ protected void preRemove() {
+
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/entities/DtoTestBean.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/entities/DtoTestBean.java
new file mode 100644
index 0000000..a36ee96
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/entities/DtoTestBean.java
@@ -0,0 +1,109 @@
+/**
+ * Copyright (C) - Loetz GmbH&Co.KG, 69115 Heidelberg, Germany
+ *
+ * This source was created by OSBP Softwarefactory Wizard!
+ *
+ * OSBP is (C) - Loetz GmbH&Co.KG, 69115 Heidelberg, Germany
+ *
+ * ================================================================
+ *
+ * @file $HeadURL$
+ * @version $Revision$
+ * @date $Date$
+ * @author $Author$
+ */
+package org.osbp.tests.entities;
+
+import java.io.Serializable;
+import javax.persistence.Basic;
+import javax.persistence.Embeddable;
+import javax.persistence.FetchType;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Transient;
+import org.eclipse.osbp.dsl.common.datatypes.IBean;
+import org.eclipse.osbp.runtime.common.annotations.Dispose;
+import org.osbp.tests.entities.DtoTestChildCrossRef;
+
+@Embeddable
+@SuppressWarnings("all")
+public class DtoTestBean implements Serializable, IBean {
+ @Transient
+ @Dispose
+ private boolean disposed;
+
+ @Basic
+ private String foo;
+
+ @ManyToOne(fetch = FetchType.LAZY)
+ @JoinColumn(name = "crossRefChild")
+ private DtoTestChildCrossRef crossRefChild;
+
+ /**
+ * @return true, if the object is disposed.
+ * Disposed means, that it is prepared for garbage collection and may not be used anymore.
+ * Accessing objects that are already disposed will cause runtime exceptions.
+ *
+ */
+ @Dispose
+ public boolean isDisposed() {
+ return this.disposed;
+ }
+
+ /**
+ * Checks whether the object is disposed.
+ * @throws RuntimeException if the object is disposed.
+ */
+ private void checkDisposed() {
+ if (isDisposed()) {
+ throw new RuntimeException("Object already disposed: " + this);
+ }
+ }
+
+ /**
+ * Calling dispose will destroy that instance. The internal state will be
+ * set to 'disposed' and methods of that object must not be used anymore.
+ * Each call will result in runtime exceptions.<br>
+ * If this object keeps composition containments, these will be disposed too.
+ * So the whole composition containment tree will be disposed on calling this method.
+ */
+ @Dispose
+ public void dispose() {
+ if (isDisposed()) {
+ return;
+ }
+ disposed = true;
+ }
+
+ /**
+ * @return Returns the foo property or <code>null</code> if not present.
+ */
+ public String getFoo() {
+ checkDisposed();
+ return this.foo;
+ }
+
+ /**
+ * Sets the foo property to this instance.
+ */
+ public void setFoo(final String foo) {
+ checkDisposed();
+ this.foo = foo;
+ }
+
+ /**
+ * @return Returns the crossRefChild property or <code>null</code> if not present.
+ */
+ public DtoTestChildCrossRef getCrossRefChild() {
+ checkDisposed();
+ return this.crossRefChild;
+ }
+
+ /**
+ * Sets the crossRefChild property to this instance.
+ */
+ public void setCrossRefChild(final DtoTestChildCrossRef crossRefChild) {
+ checkDisposed();
+ this.crossRefChild = crossRefChild;
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/entities/DtoTestChildContainment.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/entities/DtoTestChildContainment.java
new file mode 100644
index 0000000..c5a1fa6
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/entities/DtoTestChildContainment.java
@@ -0,0 +1,113 @@
+/**
+ * Copyright (C) - Loetz GmbH&Co.KG, 69115 Heidelberg, Germany
+ *
+ * This source was created by OSBP Softwarefactory Wizard!
+ *
+ * OSBP is (C) - Loetz GmbH&Co.KG, 69115 Heidelberg, Germany
+ *
+ * ================================================================
+ *
+ * @file $HeadURL$
+ * @version $Revision$
+ * @date $Date$
+ * @author $Author$
+ */
+package org.osbp.tests.entities;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.PreRemove;
+import javax.persistence.Table;
+import org.eclipse.osbp.dsl.common.datatypes.IEntity;
+import org.eclipse.osbp.runtime.common.annotations.Dispose;
+import org.osbp.tests.entities.BaseUUID;
+import org.osbp.tests.entities.DtoTestParent;
+
+@Entity
+@Table(name = "DTO_TEST_CHILD_CONTAINMENT")
+@SuppressWarnings("all")
+public class DtoTestChildContainment extends BaseUUID implements IEntity {
+ @ManyToOne(fetch = FetchType.LAZY, cascade = { CascadeType.DETACH, CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH })
+ @JoinColumn(name = "CONTAINER_ID")
+ private DtoTestParent container;
+
+ /**
+ * Checks whether the object is disposed.
+ * @throws RuntimeException if the object is disposed.
+ */
+ private void checkDisposed() {
+ if (isDisposed()) {
+ throw new RuntimeException("Object already disposed: " + this);
+ }
+ }
+
+ /**
+ * Calling dispose will destroy that instance. The internal state will be
+ * set to 'disposed' and methods of that object must not be used anymore.
+ * Each call will result in runtime exceptions.<br>
+ * If this object keeps composition containments, these will be disposed too.
+ * So the whole composition containment tree will be disposed on calling this method.
+ */
+ @Dispose
+ public void dispose() {
+ if (isDisposed()) {
+ return;
+ }
+ try {
+ // Dispose all the composition references.
+ if (this.container != null) {
+ this.container.dispose();
+ this.container = null;
+ }
+
+ }
+ finally {
+ super.dispose();
+ }
+
+ }
+
+ /**
+ * @return Returns the container property or <code>null</code> if not present.
+ */
+ public DtoTestParent getContainer() {
+ checkDisposed();
+ return this.container;
+ }
+
+ /**
+ * Sets the container property to this instance.
+ * Since the reference is a container reference, the opposite reference (DtoTestParent.containmentChilds)
+ * of the container will be handled automatically and no further coding is required to keep them in sync.
+ * See {@link DtoTestParent#setContainmentChilds(DtoTestParent)}.
+ */
+ public void setContainer(final DtoTestParent container) {
+ checkDisposed();
+ if (this.container != null) {
+ this.container.internalRemoveFromContainmentChilds(this);
+ }
+ internalSetContainer(container);
+ if (this.container != null) {
+ this.container.internalAddToContainmentChilds(this);
+ }
+
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalSetContainer(final DtoTestParent container) {
+ this.container = container;
+ }
+
+ /**
+ * Iterates all cross references and removes them from the parent to avoid ConstraintViolationException
+ */
+ @PreRemove
+ protected void preRemove() {
+
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/entities/DtoTestChildCrossRef.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/entities/DtoTestChildCrossRef.java
new file mode 100644
index 0000000..1e4ad15
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/entities/DtoTestChildCrossRef.java
@@ -0,0 +1,101 @@
+/**
+ * Copyright (C) - Loetz GmbH&Co.KG, 69115 Heidelberg, Germany
+ *
+ * This source was created by OSBP Softwarefactory Wizard!
+ *
+ * OSBP is (C) - Loetz GmbH&Co.KG, 69115 Heidelberg, Germany
+ *
+ * ================================================================
+ *
+ * @file $HeadURL$
+ * @version $Revision$
+ * @date $Date$
+ * @author $Author$
+ */
+package org.osbp.tests.entities;
+
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.PreRemove;
+import javax.persistence.Table;
+import org.eclipse.osbp.dsl.common.datatypes.IEntity;
+import org.eclipse.osbp.runtime.common.annotations.Dispose;
+import org.osbp.tests.entities.BaseUUID;
+import org.osbp.tests.entities.DtoTestParent;
+
+@Entity
+@Table(name = "DTO_TEST_CHILD_CROSS_REF")
+@SuppressWarnings("all")
+public class DtoTestChildCrossRef extends BaseUUID implements IEntity {
+ @ManyToOne(fetch = FetchType.LAZY)
+ @JoinColumn(name = "CONTAINER_ID")
+ private DtoTestParent container;
+
+ /**
+ * Checks whether the object is disposed.
+ * @throws RuntimeException if the object is disposed.
+ */
+ private void checkDisposed() {
+ if (isDisposed()) {
+ throw new RuntimeException("Object already disposed: " + this);
+ }
+ }
+
+ /**
+ * Calling dispose will destroy that instance. The internal state will be
+ * set to 'disposed' and methods of that object must not be used anymore.
+ * Each call will result in runtime exceptions.<br>
+ * If this object keeps composition containments, these will be disposed too.
+ * So the whole composition containment tree will be disposed on calling this method.
+ */
+ @Dispose
+ public void dispose() {
+ if (isDisposed()) {
+ return;
+ }
+ super.dispose();
+ }
+
+ /**
+ * @return Returns the container property or <code>null</code> if not present.
+ */
+ public DtoTestParent getContainer() {
+ checkDisposed();
+ return this.container;
+ }
+
+ /**
+ * Sets the container property to this instance.
+ * Since the reference is a container reference, the opposite reference (DtoTestParent.crossRefChilds)
+ * of the container will be handled automatically and no further coding is required to keep them in sync.
+ * See {@link DtoTestParent#setCrossRefChilds(DtoTestParent)}.
+ */
+ public void setContainer(final DtoTestParent container) {
+ checkDisposed();
+ if (this.container != null) {
+ this.container.internalRemoveFromCrossRefChilds(this);
+ }
+ internalSetContainer(container);
+ if (this.container != null) {
+ this.container.internalAddToCrossRefChilds(this);
+ }
+
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalSetContainer(final DtoTestParent container) {
+ this.container = container;
+ }
+
+ /**
+ * Iterates all cross references and removes them from the parent to avoid ConstraintViolationException
+ */
+ @PreRemove
+ protected void preRemove() {
+
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/entities/DtoTestParent.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/entities/DtoTestParent.java
new file mode 100644
index 0000000..7f692fe
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/entities/DtoTestParent.java
@@ -0,0 +1,323 @@
+/**
+ * Copyright (C) - Loetz GmbH&Co.KG, 69115 Heidelberg, Germany
+ *
+ * This source was created by OSBP Softwarefactory Wizard!
+ *
+ * OSBP is (C) - Loetz GmbH&Co.KG, 69115 Heidelberg, Germany
+ *
+ * ================================================================
+ *
+ * @file $HeadURL$
+ * @version $Revision$
+ * @date $Date$
+ * @author $Author$
+ */
+package org.osbp.tests.entities;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import javax.persistence.AssociationOverride;
+import javax.persistence.AssociationOverrides;
+import javax.persistence.AttributeOverride;
+import javax.persistence.AttributeOverrides;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Embedded;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.OneToMany;
+import javax.persistence.PreRemove;
+import javax.persistence.Table;
+import javax.validation.Valid;
+import org.eclipse.osbp.dsl.common.datatypes.IEntity;
+import org.eclipse.osbp.runtime.common.annotations.Dispose;
+import org.eclipse.persistence.annotations.Noncacheable;
+import org.osbp.tests.entities.BaseUUID;
+import org.osbp.tests.entities.DtoTestBean;
+import org.osbp.tests.entities.DtoTestChildContainment;
+import org.osbp.tests.entities.DtoTestChildCrossRef;
+
+@Entity
+@Table(name = "DTO_TEST_PARENT")
+@SuppressWarnings("all")
+public class DtoTestParent extends BaseUUID implements IEntity {
+ @Column(name = "STRING")
+ private String string;
+
+ @JoinColumn(name = "CONTAINMENT_CHILDS_ID")
+ @OneToMany(mappedBy = "container", cascade = CascadeType.ALL, orphanRemoval = true)
+ @Noncacheable
+ @Valid
+ private List<DtoTestChildContainment> containmentChilds;
+
+ @JoinColumn(name = "CROSS_REF_CHILDS_ID")
+ @OneToMany(mappedBy = "container")
+ @Noncacheable
+ private List<DtoTestChildCrossRef> crossRefChilds;
+
+ @ManyToOne(fetch = FetchType.LAZY)
+ @JoinColumn(name = "CROSS_REF_CHILD_ID")
+ private DtoTestChildCrossRef crossRefChild;
+
+ @Embedded
+ @AttributeOverrides(value = @AttributeOverride(name = "foo", column = @Column(name = "BEANX_FOO")))
+ @AssociationOverrides(value = @AssociationOverride(name = "crossRefChild", joinColumns = @JoinColumn(name = "BEANX_CROSSREFCHILD")))
+ @Column(name = "BEANX")
+ @Valid
+ private DtoTestBean beanx;
+
+ /**
+ * Checks whether the object is disposed.
+ * @throws RuntimeException if the object is disposed.
+ */
+ private void checkDisposed() {
+ if (isDisposed()) {
+ throw new RuntimeException("Object already disposed: " + this);
+ }
+ }
+
+ /**
+ * Calling dispose will destroy that instance. The internal state will be
+ * set to 'disposed' and methods of that object must not be used anymore.
+ * Each call will result in runtime exceptions.<br>
+ * If this object keeps composition containments, these will be disposed too.
+ * So the whole composition containment tree will be disposed on calling this method.
+ */
+ @Dispose
+ public void dispose() {
+ if (isDisposed()) {
+ return;
+ }
+ try {
+ // Dispose all the composition references.
+ if (this.containmentChilds != null) {
+ for (DtoTestChildContainment dtoTestChildContainment : this.containmentChilds) {
+ dtoTestChildContainment.dispose();
+ }
+ this.containmentChilds = null;
+ }
+
+ }
+ finally {
+ super.dispose();
+ }
+
+ }
+
+ /**
+ * @return Returns the string property or <code>null</code> if not present.
+ */
+ public String getString() {
+ checkDisposed();
+ return this.string;
+ }
+
+ /**
+ * Sets the string property to this instance.
+ */
+ public void setString(final String string) {
+ checkDisposed();
+ this.string = string;
+ }
+
+ /**
+ * @return Returns an unmodifiable list of containmentChilds.
+ */
+ public List<DtoTestChildContainment> getContainmentChilds() {
+ checkDisposed();
+ return Collections.unmodifiableList(internalGetContainmentChilds());
+ }
+
+ /**
+ * Sets the given containmentChilds to the object. Currently contained containmentChilds instances will be removed.
+ *
+ * @param containmentChilds the list of new instances
+ */
+ public void setContainmentChilds(final List<DtoTestChildContainment> containmentChilds) {
+ // remove the old dtoTestChildContainment
+ for(DtoTestChildContainment oldElement : new ArrayList<DtoTestChildContainment>(this.internalGetContainmentChilds())){
+ removeFromContainmentChilds(oldElement);
+ }
+
+ // add the new dtoTestChildContainment
+ for(DtoTestChildContainment newElement : containmentChilds){
+ addToContainmentChilds(newElement);
+ }
+ }
+
+ /**
+ * For internal use only! Returns the list of <code>DtoTestChildContainment</code>s thereby lazy initializing it.
+ */
+ public List<DtoTestChildContainment> internalGetContainmentChilds() {
+ if (this.containmentChilds == null) {
+ this.containmentChilds = new ArrayList<DtoTestChildContainment>();
+ }
+ return this.containmentChilds;
+ }
+
+ /**
+ * Adds the given dtoTestChildContainment to this object. <p>
+ * Since the reference is a composition reference, the opposite reference (DtoTestChildContainment.container)
+ * of the dtoTestChildContainment will be handled automatically and no further coding is required to keep them in sync.
+ * See {@link DtoTestChildContainment#setContainer(DtoTestChildContainment)}.
+ *
+ */
+ public void addToContainmentChilds(final DtoTestChildContainment dtoTestChildContainment) {
+ checkDisposed();
+ dtoTestChildContainment.setContainer(this);
+ }
+
+ /**
+ * Removes the given dtoTestChildContainment from this object. <p>
+ * Since the reference is a cascading reference, the opposite reference (DtoTestChildContainment.container)
+ * of the dtoTestChildContainment will be handled automatically and no further coding is required to keep them in sync.
+ * See {@link DtoTestChildContainment#setContainer(DtoTestChildContainment)}.
+ *
+ */
+ public void removeFromContainmentChilds(final DtoTestChildContainment dtoTestChildContainment) {
+ checkDisposed();
+ dtoTestChildContainment.setContainer(null);
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalAddToContainmentChilds(final DtoTestChildContainment dtoTestChildContainment) {
+ if(dtoTestChildContainment == null) {
+ return;
+ }
+
+ if(!internalGetContainmentChilds().contains(dtoTestChildContainment)) {
+ internalGetContainmentChilds().add(dtoTestChildContainment);
+ }
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalRemoveFromContainmentChilds(final DtoTestChildContainment dtoTestChildContainment) {
+ internalGetContainmentChilds().remove(dtoTestChildContainment);
+ }
+
+ /**
+ * @return Returns an unmodifiable list of crossRefChilds.
+ */
+ public List<DtoTestChildCrossRef> getCrossRefChilds() {
+ checkDisposed();
+ return Collections.unmodifiableList(internalGetCrossRefChilds());
+ }
+
+ /**
+ * Sets the given crossRefChilds to the object. Currently contained crossRefChilds instances will be removed.
+ *
+ * @param crossRefChilds the list of new instances
+ */
+ public void setCrossRefChilds(final List<DtoTestChildCrossRef> crossRefChilds) {
+ // remove the old dtoTestChildCrossRef
+ for(DtoTestChildCrossRef oldElement : new ArrayList<DtoTestChildCrossRef>(this.internalGetCrossRefChilds())){
+ removeFromCrossRefChilds(oldElement);
+ }
+
+ // add the new dtoTestChildCrossRef
+ for(DtoTestChildCrossRef newElement : crossRefChilds){
+ addToCrossRefChilds(newElement);
+ }
+ }
+
+ /**
+ * For internal use only! Returns the list of <code>DtoTestChildCrossRef</code>s thereby lazy initializing it.
+ */
+ public List<DtoTestChildCrossRef> internalGetCrossRefChilds() {
+ if (this.crossRefChilds == null) {
+ this.crossRefChilds = new ArrayList<DtoTestChildCrossRef>();
+ }
+ return this.crossRefChilds;
+ }
+
+ /**
+ * Adds the given dtoTestChildCrossRef to this object. <p>
+ * Since the reference is a composition reference, the opposite reference (DtoTestChildCrossRef.container)
+ * of the dtoTestChildCrossRef will be handled automatically and no further coding is required to keep them in sync.
+ * See {@link DtoTestChildCrossRef#setContainer(DtoTestChildCrossRef)}.
+ *
+ */
+ public void addToCrossRefChilds(final DtoTestChildCrossRef dtoTestChildCrossRef) {
+ checkDisposed();
+ dtoTestChildCrossRef.setContainer(this);
+ }
+
+ /**
+ * Removes the given dtoTestChildCrossRef from this object. <p>
+ *
+ */
+ public void removeFromCrossRefChilds(final DtoTestChildCrossRef dtoTestChildCrossRef) {
+ checkDisposed();
+ dtoTestChildCrossRef.setContainer(null);
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalAddToCrossRefChilds(final DtoTestChildCrossRef dtoTestChildCrossRef) {
+ if(dtoTestChildCrossRef == null) {
+ return;
+ }
+
+ if(!internalGetCrossRefChilds().contains(dtoTestChildCrossRef)) {
+ internalGetCrossRefChilds().add(dtoTestChildCrossRef);
+ }
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalRemoveFromCrossRefChilds(final DtoTestChildCrossRef dtoTestChildCrossRef) {
+ internalGetCrossRefChilds().remove(dtoTestChildCrossRef);
+ }
+
+ /**
+ * @return Returns the crossRefChild property or <code>null</code> if not present.
+ */
+ public DtoTestChildCrossRef getCrossRefChild() {
+ checkDisposed();
+ return this.crossRefChild;
+ }
+
+ /**
+ * Sets the crossRefChild property to this instance.
+ */
+ public void setCrossRefChild(final DtoTestChildCrossRef crossRefChild) {
+ checkDisposed();
+ this.crossRefChild = crossRefChild;
+ }
+
+ /**
+ * @return Returns the beanx property or <code>null</code> if not present.
+ */
+ public DtoTestBean getBeanx() {
+ checkDisposed();
+ return this.beanx;
+ }
+
+ /**
+ * Sets the beanx property to this instance.
+ */
+ public void setBeanx(final DtoTestBean beanx) {
+ checkDisposed();
+ this.beanx = beanx;
+ }
+
+ /**
+ * Iterates all cross references and removes them from the parent to avoid ConstraintViolationException
+ */
+ @PreRemove
+ protected void preRemove() {
+ // remove the crossRefChilds
+ for(DtoTestChildCrossRef oldElement : new ArrayList<DtoTestChildCrossRef>(this.internalGetCrossRefChilds())){
+ removeFromCrossRefChilds(oldElement);
+ }
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/entities/Mcustomer.java b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/entities/Mcustomer.java
new file mode 100644
index 0000000..be84de9
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src-gen/org/osbp/tests/entities/Mcustomer.java
@@ -0,0 +1,701 @@
+/**
+ * Copyright (C) - Loetz GmbH&Co.KG, 69115 Heidelberg, Germany
+ *
+ * This source was created by OSBP Softwarefactory Wizard!
+ *
+ * OSBP is (C) - Loetz GmbH&Co.KG, 69115 Heidelberg, Germany
+ *
+ * ================================================================
+ *
+ * @file $HeadURL$
+ * @version $Revision$
+ * @date $Date$
+ * @author $Author$
+ */
+package org.osbp.tests.entities;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.OneToMany;
+import javax.persistence.PreRemove;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+import javax.validation.Valid;
+import org.eclipse.osbp.dsl.common.datatypes.IEntity;
+import org.eclipse.osbp.runtime.common.annotations.Dispose;
+import org.eclipse.osbp.runtime.common.annotations.DomainKey;
+import org.eclipse.persistence.annotations.Noncacheable;
+import org.osbp.tests.entities.BaseID;
+import org.osbp.tests.entities.CashSlip;
+
+@Entity
+@Table(name = "MCUSTOMER")
+@SuppressWarnings("all")
+public class Mcustomer extends BaseID implements IEntity {
+ @Column(name = "ACCOUNT_NUM")
+ private long account_num;
+
+ @Column(name = "LNAME")
+ private String lname;
+
+ @Column(name = "FNAME")
+ private String fname;
+
+ @Column(name = "MI")
+ private String mi;
+
+ @Column(name = "ADDRESS1")
+ private String address1;
+
+ @Column(name = "ADDRESS2")
+ private String address2;
+
+ @Column(name = "ADDRESS3")
+ private String address3;
+
+ @Column(name = "ADDRESS4")
+ private String address4;
+
+ @Column(name = "CITY")
+ private String city;
+
+ @Column(name = "STATE_PROVINCE")
+ private String state_province;
+
+ @Column(name = "POSTAL_CODE")
+ private String postal_code;
+
+ @Column(name = "COUNTRY")
+ private String country;
+
+ @Column(name = "PHONE1")
+ private String phone1;
+
+ @Column(name = "PHONE2")
+ private String phone2;
+
+ @Column(name = "BIRTHDATE")
+ @Temporal(value = TemporalType.DATE)
+ @Valid
+ private Date birthdate;
+
+ @Column(name = "MARITAL_STATUS")
+ private String marital_status;
+
+ @Column(name = "YEARLY_INCOME")
+ private String yearly_income;
+
+ @Column(name = "GENDER")
+ private String gender;
+
+ @Column(name = "TOTAL_CHILDREN")
+ private int total_children;
+
+ @Column(name = "NUM_CHILDREN_AT_HOME")
+ private int num_children_at_home;
+
+ @Column(name = "EDUCATION")
+ private String education;
+
+ @Column(name = "DATE_ACCNT_OPENED")
+ private String date_accnt_opened;
+
+ @Column(name = "MEMBER_CARD")
+ private String member_card;
+
+ @Column(name = "OCCUPATION")
+ private String occupation;
+
+ @Column(name = "HOUSEOWNER")
+ private String houseowner;
+
+ @Column(name = "NUM_CARS_OWNED")
+ private int num_cars_owned;
+
+ @DomainKey
+ @Column(name = "FULLNAME")
+ private String fullname;
+
+ @Column(name = "TEST")
+ private String test;
+
+ @JoinColumn(name = "SLIPS_ID")
+ @OneToMany(mappedBy = "customer")
+ @Noncacheable
+ private List<CashSlip> slips;
+
+ /**
+ * Checks whether the object is disposed.
+ * @throws RuntimeException if the object is disposed.
+ */
+ private void checkDisposed() {
+ if (isDisposed()) {
+ throw new RuntimeException("Object already disposed: " + this);
+ }
+ }
+
+ /**
+ * Calling dispose will destroy that instance. The internal state will be
+ * set to 'disposed' and methods of that object must not be used anymore.
+ * Each call will result in runtime exceptions.<br>
+ * If this object keeps composition containments, these will be disposed too.
+ * So the whole composition containment tree will be disposed on calling this method.
+ */
+ @Dispose
+ public void dispose() {
+ if (isDisposed()) {
+ return;
+ }
+ super.dispose();
+ }
+
+ /**
+ * @return Returns the account_num property or <code>null</code> if not present.
+ */
+ public long getAccount_num() {
+ checkDisposed();
+ return this.account_num;
+ }
+
+ /**
+ * Sets the account_num property to this instance.
+ */
+ public void setAccount_num(final long account_num) {
+ checkDisposed();
+ this.account_num = account_num;
+ }
+
+ /**
+ * @return Returns the lname property or <code>null</code> if not present.
+ */
+ public String getLname() {
+ checkDisposed();
+ return this.lname;
+ }
+
+ /**
+ * Sets the lname property to this instance.
+ */
+ public void setLname(final String lname) {
+ checkDisposed();
+ this.lname = lname;
+ }
+
+ /**
+ * @return Returns the fname property or <code>null</code> if not present.
+ */
+ public String getFname() {
+ checkDisposed();
+ return this.fname;
+ }
+
+ /**
+ * Sets the fname property to this instance.
+ */
+ public void setFname(final String fname) {
+ checkDisposed();
+ this.fname = fname;
+ }
+
+ /**
+ * @return Returns the mi property or <code>null</code> if not present.
+ */
+ public String getMi() {
+ checkDisposed();
+ return this.mi;
+ }
+
+ /**
+ * Sets the mi property to this instance.
+ */
+ public void setMi(final String mi) {
+ checkDisposed();
+ this.mi = mi;
+ }
+
+ /**
+ * @return Returns the address1 property or <code>null</code> if not present.
+ */
+ public String getAddress1() {
+ checkDisposed();
+ return this.address1;
+ }
+
+ /**
+ * Sets the address1 property to this instance.
+ */
+ public void setAddress1(final String address1) {
+ checkDisposed();
+ this.address1 = address1;
+ }
+
+ /**
+ * @return Returns the address2 property or <code>null</code> if not present.
+ */
+ public String getAddress2() {
+ checkDisposed();
+ return this.address2;
+ }
+
+ /**
+ * Sets the address2 property to this instance.
+ */
+ public void setAddress2(final String address2) {
+ checkDisposed();
+ this.address2 = address2;
+ }
+
+ /**
+ * @return Returns the address3 property or <code>null</code> if not present.
+ */
+ public String getAddress3() {
+ checkDisposed();
+ return this.address3;
+ }
+
+ /**
+ * Sets the address3 property to this instance.
+ */
+ public void setAddress3(final String address3) {
+ checkDisposed();
+ this.address3 = address3;
+ }
+
+ /**
+ * @return Returns the address4 property or <code>null</code> if not present.
+ */
+ public String getAddress4() {
+ checkDisposed();
+ return this.address4;
+ }
+
+ /**
+ * Sets the address4 property to this instance.
+ */
+ public void setAddress4(final String address4) {
+ checkDisposed();
+ this.address4 = address4;
+ }
+
+ /**
+ * @return Returns the city property or <code>null</code> if not present.
+ */
+ public String getCity() {
+ checkDisposed();
+ return this.city;
+ }
+
+ /**
+ * Sets the city property to this instance.
+ */
+ public void setCity(final String city) {
+ checkDisposed();
+ this.city = city;
+ }
+
+ /**
+ * @return Returns the state_province property or <code>null</code> if not present.
+ */
+ public String getState_province() {
+ checkDisposed();
+ return this.state_province;
+ }
+
+ /**
+ * Sets the state_province property to this instance.
+ */
+ public void setState_province(final String state_province) {
+ checkDisposed();
+ this.state_province = state_province;
+ }
+
+ /**
+ * @return Returns the postal_code property or <code>null</code> if not present.
+ */
+ public String getPostal_code() {
+ checkDisposed();
+ return this.postal_code;
+ }
+
+ /**
+ * Sets the postal_code property to this instance.
+ */
+ public void setPostal_code(final String postal_code) {
+ checkDisposed();
+ this.postal_code = postal_code;
+ }
+
+ /**
+ * @return Returns the country property or <code>null</code> if not present.
+ */
+ public String getCountry() {
+ checkDisposed();
+ return this.country;
+ }
+
+ /**
+ * Sets the country property to this instance.
+ */
+ public void setCountry(final String country) {
+ checkDisposed();
+ this.country = country;
+ }
+
+ /**
+ * @return Returns the phone1 property or <code>null</code> if not present.
+ */
+ public String getPhone1() {
+ checkDisposed();
+ return this.phone1;
+ }
+
+ /**
+ * Sets the phone1 property to this instance.
+ */
+ public void setPhone1(final String phone1) {
+ checkDisposed();
+ this.phone1 = phone1;
+ }
+
+ /**
+ * @return Returns the phone2 property or <code>null</code> if not present.
+ */
+ public String getPhone2() {
+ checkDisposed();
+ return this.phone2;
+ }
+
+ /**
+ * Sets the phone2 property to this instance.
+ */
+ public void setPhone2(final String phone2) {
+ checkDisposed();
+ this.phone2 = phone2;
+ }
+
+ /**
+ * @return Returns the birthdate property or <code>null</code> if not present.
+ */
+ public Date getBirthdate() {
+ checkDisposed();
+ return this.birthdate;
+ }
+
+ /**
+ * Sets the birthdate property to this instance.
+ */
+ public void setBirthdate(final Date birthdate) {
+ checkDisposed();
+ this.birthdate = birthdate;
+ }
+
+ /**
+ * @return Returns the marital_status property or <code>null</code> if not present.
+ */
+ public String getMarital_status() {
+ checkDisposed();
+ return this.marital_status;
+ }
+
+ /**
+ * Sets the marital_status property to this instance.
+ */
+ public void setMarital_status(final String marital_status) {
+ checkDisposed();
+ this.marital_status = marital_status;
+ }
+
+ /**
+ * @return Returns the yearly_income property or <code>null</code> if not present.
+ */
+ public String getYearly_income() {
+ checkDisposed();
+ return this.yearly_income;
+ }
+
+ /**
+ * Sets the yearly_income property to this instance.
+ */
+ public void setYearly_income(final String yearly_income) {
+ checkDisposed();
+ this.yearly_income = yearly_income;
+ }
+
+ /**
+ * @return Returns the gender property or <code>null</code> if not present.
+ */
+ public String getGender() {
+ checkDisposed();
+ return this.gender;
+ }
+
+ /**
+ * Sets the gender property to this instance.
+ */
+ public void setGender(final String gender) {
+ checkDisposed();
+ this.gender = gender;
+ }
+
+ /**
+ * @return Returns the total_children property or <code>null</code> if not present.
+ */
+ public int getTotal_children() {
+ checkDisposed();
+ return this.total_children;
+ }
+
+ /**
+ * Sets the total_children property to this instance.
+ */
+ public void setTotal_children(final int total_children) {
+ checkDisposed();
+ this.total_children = total_children;
+ }
+
+ /**
+ * @return Returns the num_children_at_home property or <code>null</code> if not present.
+ */
+ public int getNum_children_at_home() {
+ checkDisposed();
+ return this.num_children_at_home;
+ }
+
+ /**
+ * Sets the num_children_at_home property to this instance.
+ */
+ public void setNum_children_at_home(final int num_children_at_home) {
+ checkDisposed();
+ this.num_children_at_home = num_children_at_home;
+ }
+
+ /**
+ * @return Returns the education property or <code>null</code> if not present.
+ */
+ public String getEducation() {
+ checkDisposed();
+ return this.education;
+ }
+
+ /**
+ * Sets the education property to this instance.
+ */
+ public void setEducation(final String education) {
+ checkDisposed();
+ this.education = education;
+ }
+
+ /**
+ * @return Returns the date_accnt_opened property or <code>null</code> if not present.
+ */
+ public String getDate_accnt_opened() {
+ checkDisposed();
+ return this.date_accnt_opened;
+ }
+
+ /**
+ * Sets the date_accnt_opened property to this instance.
+ */
+ public void setDate_accnt_opened(final String date_accnt_opened) {
+ checkDisposed();
+ this.date_accnt_opened = date_accnt_opened;
+ }
+
+ /**
+ * @return Returns the member_card property or <code>null</code> if not present.
+ */
+ public String getMember_card() {
+ checkDisposed();
+ return this.member_card;
+ }
+
+ /**
+ * Sets the member_card property to this instance.
+ */
+ public void setMember_card(final String member_card) {
+ checkDisposed();
+ this.member_card = member_card;
+ }
+
+ /**
+ * @return Returns the occupation property or <code>null</code> if not present.
+ */
+ public String getOccupation() {
+ checkDisposed();
+ return this.occupation;
+ }
+
+ /**
+ * Sets the occupation property to this instance.
+ */
+ public void setOccupation(final String occupation) {
+ checkDisposed();
+ this.occupation = occupation;
+ }
+
+ /**
+ * @return Returns the houseowner property or <code>null</code> if not present.
+ */
+ public String getHouseowner() {
+ checkDisposed();
+ return this.houseowner;
+ }
+
+ /**
+ * Sets the houseowner property to this instance.
+ */
+ public void setHouseowner(final String houseowner) {
+ checkDisposed();
+ this.houseowner = houseowner;
+ }
+
+ /**
+ * @return Returns the num_cars_owned property or <code>null</code> if not present.
+ */
+ public int getNum_cars_owned() {
+ checkDisposed();
+ return this.num_cars_owned;
+ }
+
+ /**
+ * Sets the num_cars_owned property to this instance.
+ */
+ public void setNum_cars_owned(final int num_cars_owned) {
+ checkDisposed();
+ this.num_cars_owned = num_cars_owned;
+ }
+
+ /**
+ * @return Returns the fullname property or <code>null</code> if not present.
+ */
+ public String getFullname() {
+ checkDisposed();
+ return this.fullname;
+ }
+
+ /**
+ * Sets the fullname property to this instance.
+ */
+ public void setFullname(final String fullname) {
+ checkDisposed();
+ this.fullname = fullname;
+ }
+
+ /**
+ * @return Returns the test property or <code>null</code> if not present.
+ */
+ public String getTest() {
+ checkDisposed();
+ return this.test;
+ }
+
+ /**
+ * Sets the test property to this instance.
+ */
+ public void setTest(final String test) {
+ checkDisposed();
+ this.test = test;
+ }
+
+ /**
+ * @return Returns an unmodifiable list of slips.
+ */
+ public List<CashSlip> getSlips() {
+ checkDisposed();
+ return Collections.unmodifiableList(internalGetSlips());
+ }
+
+ /**
+ * Sets the given slips to the object. Currently contained slips instances will be removed.
+ *
+ * @param slips the list of new instances
+ */
+ public void setSlips(final List<CashSlip> slips) {
+ // remove the old cashSlip
+ for(CashSlip oldElement : new ArrayList<CashSlip>(this.internalGetSlips())){
+ removeFromSlips(oldElement);
+ }
+
+ // add the new cashSlip
+ for(CashSlip newElement : slips){
+ addToSlips(newElement);
+ }
+ }
+
+ /**
+ * For internal use only! Returns the list of <code>CashSlip</code>s thereby lazy initializing it.
+ */
+ public List<CashSlip> internalGetSlips() {
+ if (this.slips == null) {
+ this.slips = new ArrayList<CashSlip>();
+ }
+ return this.slips;
+ }
+
+ /**
+ * Adds the given cashSlip to this object. <p>
+ * Since the reference is a composition reference, the opposite reference (CashSlip.customer)
+ * of the cashSlip will be handled automatically and no further coding is required to keep them in sync.
+ * See {@link CashSlip#setCustomer(CashSlip)}.
+ *
+ */
+ public void addToSlips(final CashSlip cashSlip) {
+ checkDisposed();
+ cashSlip.setCustomer(this);
+ }
+
+ /**
+ * Removes the given cashSlip from this object. <p>
+ *
+ */
+ public void removeFromSlips(final CashSlip cashSlip) {
+ checkDisposed();
+ cashSlip.setCustomer(null);
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalAddToSlips(final CashSlip cashSlip) {
+ if(cashSlip == null) {
+ return;
+ }
+
+ if(!internalGetSlips().contains(cashSlip)) {
+ internalGetSlips().add(cashSlip);
+ }
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalRemoveFromSlips(final CashSlip cashSlip) {
+ internalGetSlips().remove(cashSlip);
+ }
+
+ /**
+ * Calculates the value for the derived property foo
+ *
+ * @return foo The derived property value
+ */
+ public String getFoo() {
+ return ((this.country + "_") + this.city);
+ }
+
+ /**
+ * Iterates all cross references and removes them from the parent to avoid ConstraintViolationException
+ */
+ @PreRemove
+ protected void preRemove() {
+ // remove the slips
+ for(CashSlip oldElement : new ArrayList<CashSlip>(this.internalGetSlips())){
+ removeFromSlips(oldElement);
+ }
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src/META-INF/persistence.xml b/org.eclipse.osbp.runtime.tests/src/META-INF/persistence.xml
new file mode 100644
index 0000000..252aeed
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src/META-INF/persistence.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<persistence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
+ version="2.0" xmlns="http://java.sun.com/xml/ns/persistence">
+
+ <persistence-unit name="testCarstore"
+ transaction-type="RESOURCE_LOCAL">
+ <class>org.osbp.tests.entities.BaseID</class>
+ <class>org.osbp.tests.entities.BaseUUID</class>
+
+ <class>org.osbp.tests.entities.Mcustomer</class>
+ <class>org.osbp.tests.entities.CashRegister</class>
+ <class>org.osbp.tests.entities.CashSlip</class>
+ <class>org.osbp.tests.entities.CashPosition</class>
+ <class>org.osbp.tests.entities.CashPayment</class>
+ <class>org.osbp.tests.entities.CashPaymentMethod</class>
+
+ <class>org.osbp.tests.entities.CompanyRelationType</class>
+ <class>org.osbp.tests.entities.CompanyGroup</class>
+ <class>org.osbp.tests.entities.Company</class>
+ <class>org.osbp.tests.entities.Address</class>
+ <class>org.osbp.tests.entities.Department</class>
+
+ <properties>
+ <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver" />
+ <property name="javax.persistence.jdbc.url" value="jdbc:derby:memory:model1;create=true" />
+ <property name="javax.persistence.jdbc.user" value="test" />
+ <property name="javax.persistence.jdbc.password" value="test" />
+
+ <!-- EclipseLink should create the database schema automatically -->
+ <property name="eclipselink.ddl-generation" value="drop-and-create-tables" />
+ <property name="eclipselink.create-ddl-jdbc-file-name"
+ value="createDDL_ddlGeneration.jdbc" />
+ <property name="eclipselink.drop-ddl-jdbc-file-name" value="dropDDL_ddlGeneration.jdbc" />
+ <property name="eclipselink.ddl-generation.output-mode"
+ value="both" />
+ <property name="eclipselink.logging.level" value="FINEST" />
+ </properties>
+ </persistence-unit>
+</persistence>
\ No newline at end of file
diff --git a/org.eclipse.osbp.runtime.tests/src/org/eclipse/osbp/runtime/tests/AbstractBean.java b/org.eclipse.osbp.runtime.tests/src/org/eclipse/osbp/runtime/tests/AbstractBean.java
new file mode 100644
index 0000000..cbac52a
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src/org/eclipse/osbp/runtime/tests/AbstractBean.java
@@ -0,0 +1,95 @@
+/**
+ * Copyright (c) 2012, 2015 - Lunifera GmbH (Austria), Loetz GmbH&Co.KG and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Florian Pirchner - initial API and implementation
+ */
+package org.eclipse.osbp.runtime.tests;
+
+import java.beans.PropertyChangeListener;
+import java.beans.PropertyChangeSupport;
+
+/**
+ * Default implementation of value bean. Offerns {@link PropertyChangeSupport}.
+ */
+public class AbstractBean {
+ private final PropertyChangeSupport changeSupport = new PropertyChangeSupport(
+ this);
+
+ public AbstractBean() {
+ }
+
+ /**
+ * Adds the given property change listener to the change support.
+ *
+ * @param listener
+ * Listener to be added
+ * @see java.beans.PropertyChangeSupport#addPropertyChangeListener(java.beans.PropertyChangeListener)
+ */
+ public void addPropertyChangeListener(PropertyChangeListener listener) {
+ changeSupport.addPropertyChangeListener(listener);
+ }
+
+ /**
+ * Adds the given property change listener to the change support.
+ *
+ * @param property
+ * Name of the property
+ * @param listener
+ * Listener to be added
+ * @see java.beans.PropertyChangeSupport#addPropertyChangeListener(java.lang.String,
+ * java.beans.PropertyChangeListener)
+ */
+ public void addPropertyChangeListener(String property,
+ PropertyChangeListener listener) {
+ changeSupport.addPropertyChangeListener(property, listener);
+ }
+
+ /**
+ * Removes the given property change listener from the change support.
+ *
+ * @param listener
+ * Listener to be removed
+ * @see java.beans.PropertyChangeSupport#removePropertyChangeListener(java.beans.PropertyChangeListener)
+ */
+ public void removePropertyChangeListener(PropertyChangeListener listener) {
+ changeSupport.removePropertyChangeListener(listener);
+ }
+
+ /**
+ * Removes the given property change listener from the change support.
+ *
+ * @param property
+ * Name of the property
+ * @param listener
+ * Listener to be removed
+ * @see java.beans.PropertyChangeSupport#removePropertyChangeListener(java.lang.String,
+ * java.beans.PropertyChangeListener)
+ */
+ public void removePropertyChangeListener(String property,
+ PropertyChangeListener listener) {
+ changeSupport.removePropertyChangeListener(property, listener);
+ }
+
+ /**
+ * Fires the property changed event.
+ *
+ * @param property
+ * Name of the property
+ * @param oldValue
+ * The old value
+ * @param newValue
+ * The new value
+ * @see java.beans.PropertyChangeSupport#firePropertyChange(String, Object,
+ * Object)
+ */
+ protected void firePropertyChanged(String property, Object oldValue,
+ Object newValue) {
+ changeSupport.firePropertyChange(property, oldValue, newValue);
+ }
+
+}
diff --git a/org.eclipse.osbp.runtime.tests/src/org/eclipse/osbp/runtime/tests/AbstractJPATest.java b/org.eclipse.osbp.runtime.tests/src/org/eclipse/osbp/runtime/tests/AbstractJPATest.java
new file mode 100644
index 0000000..edf3659
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src/org/eclipse/osbp/runtime/tests/AbstractJPATest.java
@@ -0,0 +1,56 @@
+/**
+ * Copyright (c) 2011, 2014 - Lunifera GmbH (Gross Enzersdorf, Austria), Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.eclipse.osbp.runtime.tests;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
+import javax.persistence.spi.PersistenceProvider;
+import javax.persistence.spi.PersistenceProviderResolver;
+import javax.persistence.spi.PersistenceProviderResolverHolder;
+
+import org.eclipse.persistence.config.PersistenceUnitProperties;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.FrameworkUtil;
+
+public class AbstractJPATest {
+
+ protected Map<String, Object> properties = new HashMap<String, Object>();
+ protected EntityManagerFactory emf;
+
+ public void setUp() throws Exception {
+ PersistenceProviderResolverHolder
+ .setPersistenceProviderResolver(new PersistenceProviderResolver() {
+ private List<PersistenceProvider> providers = new ArrayList<PersistenceProvider>();
+
+ @Override
+ public List<PersistenceProvider> getPersistenceProviders() {
+ org.eclipse.persistence.jpa.PersistenceProvider provider = new org.eclipse.persistence.jpa.PersistenceProvider();
+ providers.add(provider);
+ return providers;
+ }
+
+ @Override
+ public void clearCachedProviders() {
+ providers.clear();
+ }
+ });
+ properties.put(PersistenceUnitProperties.CLASSLOADER, getClass()
+ .getClassLoader());
+
+ emf = Persistence.createEntityManagerFactory(
+ "testCarstore", properties);
+ Bundle bundle = FrameworkUtil.getBundle(AbstractJPATest.class);
+ bundle.getBundleContext().registerService(EntityManagerFactory.class,
+ emf, null);
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src/org/eclipse/osbp/runtime/tests/Activator.java b/org.eclipse.osbp.runtime.tests/src/org/eclipse/osbp/runtime/tests/Activator.java
new file mode 100644
index 0000000..b57ca36
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src/org/eclipse/osbp/runtime/tests/Activator.java
@@ -0,0 +1,97 @@
+/**
+ * Copyright (c) 2012, 2015 Lunifera GmbH (Gross Enzersdorf), Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Florian Pirchner - initial API and implementation
+ */
+package org.eclipse.osbp.runtime.tests;
+
+import javax.persistence.EntityManagerFactory;
+
+import org.knowhowlab.osgi.testing.assertions.BundleAssert;
+import org.knowhowlab.osgi.testing.assertions.ServiceAssert;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.FrameworkUtil;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.ServiceReference;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class Activator implements BundleActivator {
+
+ @SuppressWarnings("unused")
+ private static final Logger logger = LoggerFactory
+ .getLogger(Activator.class);
+
+ private static Activator instance;
+ public static BundleContext context;
+
+ /**
+ * @return the instance
+ */
+ public static Activator getInstance() {
+ return instance;
+ }
+
+ @Override
+ public void start(BundleContext context) throws Exception {
+ Activator.context = context;
+ instance = this;
+
+ BundleAssert.setDefaultBundleContext(context);
+ ServiceAssert.setDefaultBundleContext(context);
+
+ // BundleHelper.ensureSetup();
+ }
+
+ /**
+ * Returns the bundle with the given id.
+ *
+ * @param id
+ * @return
+ */
+ public static Bundle findBundle(String id) {
+ for (Bundle bundle : context.getBundles()) {
+ if (bundle.getSymbolicName().equals(id)) {
+ return bundle;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Returns the entity manager factory or <code>null</code>.
+ *
+ * @return
+ */
+ @SuppressWarnings({ "rawtypes", "unchecked" })
+ public static EntityManagerFactory getEMF() {
+ BundleContext context = FrameworkUtil.getBundle(Activator.class)
+ .getBundleContext();
+ ServiceReference[] refs;
+ try {
+ refs = context.getServiceReferences(
+ EntityManagerFactory.class.getName(),
+ "(osgi.unit.name=dbDerby)");
+ if (refs != null) {
+ return (EntityManagerFactory) context.getService(refs[0]);
+ }
+ } catch (InvalidSyntaxException e) {
+ throw new RuntimeException(e);
+ }
+
+ return null;
+ }
+
+ @Override
+ public void stop(BundleContext context) throws Exception {
+ Activator.context = null;
+ instance = null;
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src/org/eclipse/osbp/runtime/tests/Bar.java b/org.eclipse.osbp.runtime.tests/src/org/eclipse/osbp/runtime/tests/Bar.java
new file mode 100644
index 0000000..d5448c7
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src/org/eclipse/osbp/runtime/tests/Bar.java
@@ -0,0 +1,168 @@
+/**
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation
+ *
+ */
+ package org.eclipse.osbp.runtime.tests;
+
+import java.beans.PropertyChangeListener;
+import java.beans.PropertyChangeSupport;
+import java.io.Serializable;
+
+@SuppressWarnings("serial")
+public class Bar implements Serializable {
+ private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(
+ this);
+
+ private boolean disposed;
+
+ private String name;
+
+ private Foo myfoo;
+
+ /**
+ * Returns true, if the object is disposed. Disposed means, that it is
+ * prepared for garbage collection and may not be used anymore. Accessing
+ * objects that are already disposed will cause runtime exceptions.
+ */
+ public boolean isDisposed() {
+ return this.disposed;
+ }
+
+ /**
+ * @see PropertyChangeSupport#addPropertyChangeListener(PropertyChangeListener)
+ */
+ public void addPropertyChangeListener(final PropertyChangeListener listener) {
+ propertyChangeSupport.addPropertyChangeListener(listener);
+ }
+
+ /**
+ * @see PropertyChangeSupport#addPropertyChangeListener(String,
+ * PropertyChangeListener)
+ */
+ public void addPropertyChangeListener(final String propertyName,
+ final PropertyChangeListener listener) {
+ propertyChangeSupport.addPropertyChangeListener(propertyName, listener);
+ }
+
+ /**
+ * @see PropertyChangeSupport#removePropertyChangeListener(PropertyChangeListener)
+ */
+ public void removePropertyChangeListener(
+ final PropertyChangeListener listener) {
+ propertyChangeSupport.removePropertyChangeListener(listener);
+ }
+
+ /**
+ * @see PropertyChangeSupport#removePropertyChangeListener(String,
+ * PropertyChangeListener)
+ */
+ public void removePropertyChangeListener(final String propertyName,
+ final PropertyChangeListener listener) {
+ propertyChangeSupport.removePropertyChangeListener(propertyName,
+ listener);
+ }
+
+ /**
+ * @see PropertyChangeSupport#firePropertyChange(String, Object, Object)
+ */
+ public void firePropertyChange(final String propertyName,
+ final Object oldValue, final Object newValue) {
+ propertyChangeSupport.firePropertyChange(propertyName, oldValue,
+ newValue);
+ }
+
+ /**
+ * Checks whether the object is disposed.
+ *
+ * @throws RuntimeException
+ * if the object is disposed.
+ */
+ private void checkDisposed() {
+ if (isDisposed()) {
+ throw new RuntimeException("Object already disposed: " + this);
+ }
+ }
+
+ /**
+ * Calling dispose will destroy that instance. The internal state will be
+ * set to 'disposed' and methods of that object must not be used anymore.
+ * Each call will result in runtime exceptions.
+ * If this object keeps composition containments, these will be disposed
+ * too. So the whole composition containment tree will be disposed on
+ * calling this method.
+ */
+ public void dispose() {
+ if (isDisposed()) {
+ return;
+ }
+ disposed = true;
+ }
+
+ /**
+ * Returns the name property or <code>null</code> if not present.
+ */
+ public String getName() {
+ checkDisposed();
+ return this.name;
+ }
+
+ /**
+ * Sets the <code>name</code> property to this instance.
+ *
+ * @param name
+ * - the property
+ * @throws RuntimeException
+ * if instance is <code>disposed</code>
+ *
+ */
+ public void setName(final String name) {
+ firePropertyChange("name", this.name, this.name = name);
+ }
+
+ /**
+ * Returns the myfoo property or <code>null</code> if not present.
+ */
+ public Foo getMyfoo() {
+ checkDisposed();
+ return this.myfoo;
+ }
+
+/**
+ * Sets the <code>myfoo</code> property to this instance.
+ * Since the reference has an opposite reference, the opposite <code>foo#
+ * mybars</code> of the <code>myfoo</code> will be handled automatically and no
+ * further coding is required to keep them in sync.<p>
+ * See {@link foo#setMybars(foo)
+ *
+ * @param myfoo - the property
+ * @throws RuntimeException if instance is <code>disposed</code>
+ *
+ */
+ public void setMyfoo(final Foo myfoo) {
+ checkDisposed();
+ if (this.myfoo != null) {
+ this.myfoo.internalRemoveFromMybars(this);
+ }
+ internalSetMyfoo(myfoo);
+ if (this.myfoo != null) {
+ this.myfoo.internalAddToMybars(this);
+ }
+
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalSetMyfoo(final Foo myfoo) {
+ firePropertyChange("myfoo", this.myfoo, this.myfoo = myfoo);
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src/org/eclipse/osbp/runtime/tests/BarHashById.java b/org.eclipse.osbp.runtime.tests/src/org/eclipse/osbp/runtime/tests/BarHashById.java
new file mode 100644
index 0000000..b6d27f1
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src/org/eclipse/osbp/runtime/tests/BarHashById.java
@@ -0,0 +1,168 @@
+/**
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation
+ *
+ */
+ package org.eclipse.osbp.runtime.tests;
+
+import java.beans.PropertyChangeListener;
+import java.beans.PropertyChangeSupport;
+import java.io.Serializable;
+
+@SuppressWarnings("serial")
+public class BarHashById implements Serializable {
+ private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(
+ this);
+
+ private final String id;
+
+ private boolean disposed;
+
+ private String name;
+
+ public BarHashById(String id) {
+ super();
+ this.id = id;
+ }
+
+ /**
+ * Returns true, if the object is disposed. Disposed means, that it is
+ * prepared for garbage collection and may not be used anymore. Accessing
+ * objects that are already disposed will cause runtime exceptions.
+ */
+ public boolean isDisposed() {
+ return this.disposed;
+ }
+
+ /**
+ * @see PropertyChangeSupport#addPropertyChangeListener(PropertyChangeListener)
+ */
+ public void addPropertyChangeListener(final PropertyChangeListener listener) {
+ propertyChangeSupport.addPropertyChangeListener(listener);
+ }
+
+ /**
+ * @see PropertyChangeSupport#addPropertyChangeListener(String,
+ * PropertyChangeListener)
+ */
+ public void addPropertyChangeListener(final String propertyName,
+ final PropertyChangeListener listener) {
+ propertyChangeSupport.addPropertyChangeListener(propertyName, listener);
+ }
+
+ /**
+ * @see PropertyChangeSupport#removePropertyChangeListener(PropertyChangeListener)
+ */
+ public void removePropertyChangeListener(
+ final PropertyChangeListener listener) {
+ propertyChangeSupport.removePropertyChangeListener(listener);
+ }
+
+ /**
+ * @see PropertyChangeSupport#removePropertyChangeListener(String,
+ * PropertyChangeListener)
+ */
+ public void removePropertyChangeListener(final String propertyName,
+ final PropertyChangeListener listener) {
+ propertyChangeSupport.removePropertyChangeListener(propertyName,
+ listener);
+ }
+
+ /**
+ * @see PropertyChangeSupport#firePropertyChange(String, Object, Object)
+ */
+ public void firePropertyChange(final String propertyName,
+ final Object oldValue, final Object newValue) {
+ propertyChangeSupport.firePropertyChange(propertyName, oldValue,
+ newValue);
+ }
+
+ /**
+ * Checks whether the object is disposed.
+ *
+ * @throws RuntimeException
+ * if the object is disposed.
+ */
+ private void checkDisposed() {
+ if (isDisposed()) {
+ throw new RuntimeException("Object already disposed: " + this);
+ }
+ }
+
+ /**
+ * Calling dispose will destroy that instance. The internal state will be
+ * set to 'disposed' and methods of that object must not be used anymore.
+ * Each call will result in runtime exceptions.
+ * If this object keeps composition containments, these will be disposed
+ * too. So the whole composition containment tree will be disposed on
+ * calling this method.
+ */
+ public void dispose() {
+ if (isDisposed()) {
+ return;
+ }
+ disposed = true;
+ }
+
+ /**
+ * Returns the name property or <code>null</code> if not present.
+ */
+ public String getName() {
+ checkDisposed();
+ return this.name;
+ }
+
+ /**
+ * Sets the <code>name</code> property to this instance.
+ *
+ * @param name
+ * - the property
+ * @throws RuntimeException
+ * if instance is <code>disposed</code>
+ *
+ */
+ public void setName(final String name) {
+ firePropertyChange("name", this.name, this.name = name);
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((id == null) ? 0 : id.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ BarHashById other = (BarHashById) obj;
+ if (disposed != other.disposed)
+ return false;
+ if (id == null) {
+ if (other.id != null)
+ return false;
+ } else if (!id.equals(other.id))
+ return false;
+ if (name == null) {
+ if (other.name != null)
+ return false;
+ } else if (!name.equals(other.name))
+ return false;
+ return true;
+ }
+
+}
diff --git a/org.eclipse.osbp.runtime.tests/src/org/eclipse/osbp/runtime/tests/DefaultUI.java b/org.eclipse.osbp.runtime.tests/src/org/eclipse/osbp/runtime/tests/DefaultUI.java
new file mode 100644
index 0000000..f018b0c
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src/org/eclipse/osbp/runtime/tests/DefaultUI.java
@@ -0,0 +1,161 @@
+/**
+ * Copyright (c) 2012, 2015 Lunifera GmbH (Gross Enzersdorf), Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Florian Pirchner - initial API and implementation
+ */
+package org.eclipse.osbp.runtime.tests;
+
+import java.util.Properties;
+import java.util.concurrent.Future;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
+
+import com.vaadin.server.DeploymentConfiguration;
+import com.vaadin.server.ServiceException;
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.server.VaadinService;
+import com.vaadin.server.VaadinServletService;
+import com.vaadin.server.VaadinSession;
+import com.vaadin.shared.communication.PushMode;
+import com.vaadin.ui.UI;
+import com.vaadin.ui.UIDetachedException;
+
+@SuppressWarnings("serial")
+public class DefaultUI extends UI {
+
+ public DefaultUI() {
+ try {
+ VaadinSession session = new CustomVaadinSession(
+ new VaadinServletService(null, new CustomDeploymentConfiguration()));
+ session.lock();
+ setSession(session);
+ VaadinSession.setCurrent(session);
+ UI.setCurrent(this);
+
+ } catch (ServiceException e) {
+ throw new IllegalArgumentException(e);
+ }
+ }
+
+ @Override
+ public void accessSynchronously(Runnable runnable) throws UIDetachedException {
+ runnable.run();
+ }
+
+ @Override
+ public Future<Void> access(Runnable runnable) {
+ runnable.run();
+ return null;
+ }
+
+ @Override
+ protected void init(VaadinRequest request) {
+
+ }
+
+ private class CustomVaadinSession extends VaadinSession {
+
+ Lock lock = new ReentrantLock();
+
+ public CustomVaadinSession(VaadinService service) {
+ super(service);
+ }
+
+ @Override
+ public Lock getLockInstance() {
+ return lock;
+ }
+
+ }
+
+ private static class CustomDeploymentConfiguration implements DeploymentConfiguration {
+
+ @Override
+ public boolean isProductionMode() {
+ return false;
+ }
+
+ @Override
+ public boolean isXsrfProtectionEnabled() {
+ return false;
+ }
+
+ @Override
+ public boolean isSyncIdCheckEnabled() {
+ return false;
+ }
+
+ @Override
+ public int getResourceCacheTime() {
+ return 0;
+ }
+
+ @Override
+ public int getHeartbeatInterval() {
+ return 0;
+ }
+
+ @Override
+ public boolean isCloseIdleSessions() {
+ return false;
+ }
+
+ @Override
+ public PushMode getPushMode() {
+ return PushMode.DISABLED;
+ }
+
+ @Override
+ public Properties getInitParameters() {
+ return new Properties();
+ }
+
+ @Override
+ public String getApplicationOrSystemProperty(String propertyName, String defaultValue) {
+ return null;
+ }
+
+ @SuppressWarnings("deprecation")
+ @Override
+ public LegacyProperyToStringMode getLegacyPropertyToStringMode() {
+ return LegacyProperyToStringMode.DISABLED;
+ }
+
+ @Override
+ public boolean isSendUrlsAsParameters() {
+ return false;
+ }
+
+ @Override
+ public String getUIClassName() {
+ return null;
+ }
+
+ @Override
+ public String getUIProviderClassName() {
+ return null;
+ }
+
+ @Override
+ public String getWidgetset(String defaultValue) {
+ return null;
+ }
+
+ @Override
+ public String getResourcesPath() {
+ return null;
+ }
+
+ @Override
+ public String getClassLoaderName() {
+ return null;
+ }
+
+ }
+
+}
diff --git a/org.eclipse.osbp.runtime.tests/src/org/eclipse/osbp/runtime/tests/Foo.java b/org.eclipse.osbp.runtime.tests/src/org/eclipse/osbp/runtime/tests/Foo.java
new file mode 100644
index 0000000..d98aeaa
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src/org/eclipse/osbp/runtime/tests/Foo.java
@@ -0,0 +1,218 @@
+/**
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation
+ *
+ */
+ package org.eclipse.osbp.runtime.tests;
+
+import java.beans.PropertyChangeListener;
+import java.beans.PropertyChangeSupport;
+import java.io.Serializable;
+import java.util.Collections;
+import java.util.List;
+
+@SuppressWarnings("serial")
+public class Foo implements Serializable {
+ private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(
+ this);
+
+ private boolean disposed;
+
+ private String name;
+
+ private List<Bar> mybars;
+
+ /**
+ * Returns true, if the object is disposed. Disposed means, that it is
+ * prepared for garbage collection and may not be used anymore. Accessing
+ * objects that are already disposed will cause runtime exceptions.
+ */
+ public boolean isDisposed() {
+ return this.disposed;
+ }
+
+ /**
+ * @see PropertyChangeSupport#addPropertyChangeListener(PropertyChangeListener)
+ */
+ public void addPropertyChangeListener(final PropertyChangeListener listener) {
+ propertyChangeSupport.addPropertyChangeListener(listener);
+ }
+
+ /**
+ * @see PropertyChangeSupport#addPropertyChangeListener(String,
+ * PropertyChangeListener)
+ */
+ public void addPropertyChangeListener(final String propertyName,
+ final PropertyChangeListener listener) {
+ propertyChangeSupport.addPropertyChangeListener(propertyName, listener);
+ }
+
+ /**
+ * @see PropertyChangeSupport#removePropertyChangeListener(PropertyChangeListener)
+ */
+ public void removePropertyChangeListener(
+ final PropertyChangeListener listener) {
+ propertyChangeSupport.removePropertyChangeListener(listener);
+ }
+
+ /**
+ * @see PropertyChangeSupport#removePropertyChangeListener(String,
+ * PropertyChangeListener)
+ */
+ public void removePropertyChangeListener(final String propertyName,
+ final PropertyChangeListener listener) {
+ propertyChangeSupport.removePropertyChangeListener(propertyName,
+ listener);
+ }
+
+ /**
+ * @see PropertyChangeSupport#firePropertyChange(String, Object, Object)
+ */
+ public void firePropertyChange(final String propertyName,
+ final Object oldValue, final Object newValue) {
+ propertyChangeSupport.firePropertyChange(propertyName, oldValue,
+ newValue);
+ }
+
+ /**
+ * Checks whether the object is disposed.
+ *
+ * @throws RuntimeException
+ * if the object is disposed.
+ */
+ private void checkDisposed() {
+ if (isDisposed()) {
+ throw new RuntimeException("Object already disposed: " + this);
+ }
+ }
+
+ /**
+ * Calling dispose will destroy that instance. The internal state will be
+ * set to 'disposed' and methods of that object must not be used anymore.
+ * Each call will result in runtime exceptions.
+ * If this object keeps composition containments, these will be disposed
+ * too. So the whole composition containment tree will be disposed on
+ * calling this method.
+ */
+ public void dispose() {
+ if (isDisposed()) {
+ return;
+ }
+ try {
+ // Dispose all the composition references.
+ if (this.mybars != null) {
+ for (Bar bar : this.mybars) {
+ bar.dispose();
+ }
+ this.mybars = null;
+ }
+
+ } finally {
+ disposed = true;
+ }
+
+ }
+
+ /**
+ * Returns the name property or <code>null</code> if not present.
+ */
+ public String getName() {
+ checkDisposed();
+ return this.name;
+ }
+
+ /**
+ * Sets the <code>name</code> property to this instance.
+ *
+ * @param name
+ * - the property
+ * @throws RuntimeException
+ * if instance is <code>disposed</code>
+ *
+ */
+ public void setName(final String name) {
+ firePropertyChange("name", this.name, this.name = name);
+ }
+
+ /**
+ * Returns an unmodifiable list of mybars.
+ */
+ public List<Bar> getMybars() {
+ checkDisposed();
+ return Collections.unmodifiableList(internalGetMybars());
+ }
+
+ /**
+ * Returns the list of <code>bar</code>s thereby lazy initializing it. For
+ * internal use only!
+ *
+ * @return list - the resulting list
+ *
+ */
+ private List<Bar> internalGetMybars() {
+ if (this.mybars == null) {
+ this.mybars = new java.util.ArrayList<Bar>();
+ }
+ return this.mybars;
+ }
+
+ /**
+ * Adds the given bar to this object.
+ * <p>
+ * Since the reference is a composition reference, the opposite reference
+ * <code>bar#myfoo</code> of the <code>bar</code> will be handled
+ * automatically and no further coding is required to keep them in sync.
+ * <p>
+ * See {@link bar#setMyfoo(bar)}.
+ *
+ * @param bar
+ * - the property
+ * @throws RuntimeException
+ * if instance is <code>disposed</code>
+ *
+ */
+ public void addToMybars(final Bar bar) {
+ checkDisposed();
+ bar.setMyfoo(this);
+ }
+
+ /**
+ * Removes the given bar from this object.
+ * <p>
+ * Since the reference is a cascading reference, the opposite reference
+ * (bar.myfoo) of the bar will be handled automatically and no further
+ * coding is required to keep them in sync. See {@link bar#setMyfoo(bar)}.
+ *
+ * @param bar
+ * - the property
+ * @throws RuntimeException
+ * if instance is <code>disposed</code>
+ *
+ */
+ public void removeFromMybars(final Bar bar) {
+ checkDisposed();
+ bar.setMyfoo(null);
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalAddToMybars(final Bar bar) {
+ internalGetMybars().add(bar);
+ }
+
+ /**
+ * For internal use only!
+ */
+ public void internalRemoveFromMybars(final Bar bar) {
+ internalGetMybars().remove(bar);
+ }
+}
diff --git a/org.eclipse.osbp.runtime.tests/src/org/eclipse/osbp/runtime/tests/ValueBean.java b/org.eclipse.osbp.runtime.tests/src/org/eclipse/osbp/runtime/tests/ValueBean.java
new file mode 100644
index 0000000..7eaddb0
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src/org/eclipse/osbp/runtime/tests/ValueBean.java
@@ -0,0 +1,131 @@
+/**
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation
+ *
+ */
+ package org.eclipse.osbp.runtime.tests;
+
+import java.util.Date;
+
+public class ValueBean extends AbstractBean {
+
+ private String value;
+ private boolean boolValue;
+ private Date dateValue;
+ private int intValue;
+ private long longValue;
+ private double doubleValue;
+ private float floatValue;
+
+ public ValueBean(String value) {
+ super();
+ this.value = value;
+ }
+
+ public ValueBean(boolean value) {
+ super();
+ this.boolValue = value;
+ }
+
+ public ValueBean(Date value) {
+ super();
+ this.dateValue = value;
+ }
+
+ public ValueBean(int value) {
+ super();
+ this.intValue = value;
+ }
+
+ public ValueBean(long value) {
+ super();
+ this.longValue = value;
+ }
+
+ public ValueBean(double value) {
+ super();
+ this.doubleValue = value;
+ }
+
+ public ValueBean(float value) {
+ super();
+ this.floatValue = value;
+ }
+
+ /**
+ * @return the value
+ */
+ public String getValue() {
+ return value;
+ }
+
+ /**
+ * @param value
+ * the value to set
+ */
+ public void setValue(String value) {
+ firePropertyChanged("value", this.value, this.value = value);
+ }
+
+ public boolean isBoolValue() {
+ return boolValue;
+ }
+
+ public void setBoolValue(boolean boolValue) {
+ firePropertyChanged("boolValue", this.boolValue,
+ this.boolValue = boolValue);
+ }
+
+ public Date getDateValue() {
+ return dateValue;
+ }
+
+ public void setDateValue(Date dateValue) {
+ firePropertyChanged("dateValue", this.dateValue,
+ this.dateValue = dateValue);
+ }
+
+ public int getIntValue() {
+ return intValue;
+ }
+
+ public void setIntValue(int intValue) {
+ firePropertyChanged("intValue", this.intValue, this.intValue = intValue);
+ }
+
+ public long getLongValue() {
+ return longValue;
+ }
+
+ public void setLongValue(long longValue) {
+ firePropertyChanged("longValue", this.longValue,
+ this.longValue = longValue);
+ }
+
+ public double getDoubleValue() {
+ return doubleValue;
+ }
+
+ public void setDoubleValue(double doubleValue) {
+ firePropertyChanged("doubleValue", this.doubleValue,
+ this.doubleValue = doubleValue);
+ }
+
+ public float getFloatValue() {
+ return floatValue;
+ }
+
+ public void setFloatValue(float floatValue) {
+ firePropertyChanged("floatValue", this.floatValue,
+ this.floatValue = floatValue);
+ }
+
+}
diff --git a/org.eclipse.osbp.runtime.tests/src/org/eclipse/osbp/runtime/tests/dtoandui/BoundCashTests.java b/org.eclipse.osbp.runtime.tests/src/org/eclipse/osbp/runtime/tests/dtoandui/BoundCashTests.java
new file mode 100644
index 0000000..55e8224
--- /dev/null
+++ b/org.eclipse.osbp.runtime.tests/src/org/eclipse/osbp/runtime/tests/dtoandui/BoundCashTests.java
@@ -0,0 +1,198 @@
+/**
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation
+ *
+ */
+package org.eclipse.osbp.runtime.tests.dtoandui;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.fail;
+
+import java.util.Date;
+
+import org.eclipse.osbp.dsl.dto.lib.impl.DtoServiceAccess;
+import org.eclipse.osbp.ecview.core.common.beans.ISlot;
+import org.eclipse.osbp.ecview.core.common.context.ContextException;
+import org.eclipse.osbp.ecview.core.common.context.IViewContext;
+import org.eclipse.osbp.ecview.core.common.editpart.DelegatingEditPartManager;
+import org.eclipse.osbp.ecview.core.common.model.binding.YBindingSet;
+import org.eclipse.osbp.ecview.core.common.model.core.YBeanSlot;
+import org.eclipse.osbp.ecview.core.common.model.core.YBeanSlotListBindingEndpoint;
+import org.eclipse.osbp.ecview.core.common.model.core.YEmbeddableCollectionEndpoint;
+import org.eclipse.osbp.ecview.core.common.model.core.YView;
+import org.eclipse.osbp.ecview.core.common.presentation.IFieldPresentation;
+import org.eclipse.osbp.ecview.core.extension.model.extension.YGridLayout;
+import org.eclipse.osbp.ecview.core.extension.model.extension.YTable;
+import org.eclipse.osbp.ecview.core.extension.model.extension.util.SimpleExtensionModelFactory;
+import org.eclipse.osbp.ecview.core.ui.core.editparts.extension.ITableEditpart;
+import org.eclipse.osbp.runtime.common.filter.IDTOService;
+import org.eclipse.osbp.runtime.tests.AbstractJPATest;
+import org.eclipse.osbp.runtime.tests.DefaultUI;
+import org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.VaadinRenderer;
+import org.eclipse.osbp.runtime.web.vaadin.databinding.VaadinObservables;
+import org.junit.Test;
+import org.osbp.tests.dtos.CashPositionDto;
+import org.osbp.tests.dtos.CashRegisterDto;
+import org.osbp.tests.dtos.CashSlipDto;
+import org.osbp.tests.dtos.McustomerDto;
+
+import com.vaadin.data.Container.Indexed;
+import com.vaadin.ui.CssLayout;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.UI;
+
+@SuppressWarnings("restriction")
+public class BoundCashTests extends AbstractJPATest {
+
+ private IDTOService<McustomerDto> customerService;
+ private IDTOService<CashRegisterDto> cashRegisterService;
+ private IDTOService<CashSlipDto> cashSlipService;
+ private IDTOService<CashPositionDto> cashSlipPosService;
+
+ private SimpleExtensionModelFactory factory = new SimpleExtensionModelFactory();
+
+ private UI ui = new DefaultUI();
+ private CssLayout rootLayout = new CssLayout();
+ private YTable yTable;
+ private VaadinRenderer renderer;
+ private ITableEditpart table1Editpart;
+ private IViewContext viewContext;
+ private IFieldPresentation<Table> tablePresentation;
+ private Table table;
+ private Indexed indexedDs;
+ private YBindingSet yBindingSet;
+ private McustomerDto cust;
+ private CashSlipDto slip;
+ private CashPositionDto pos1;
+ private CashPositionDto pos2;
+ private YBeanSlot yBeanSlot;
+ private ISlot beanSlot;
+
+ @Override
+ public void setUp() throws Exception {
+ super.setUp();
+
+ customerService = DtoServiceAccess.getService(McustomerDto.class);
+ cashRegisterService = DtoServiceAccess.getService(CashRegisterDto.class);
+ cashSlipService = DtoServiceAccess.getService(CashSlipDto.class);
+ cashSlipPosService = DtoServiceAccess.getService(CashPositionDto.class);
+
+ setupView();
+ createDatamodel();
+
+ // bind the slip
+ beanSlot.setValue(slip);
+ }
+
+ private void setupView() throws ContextException {
+
+ ui.setContent(rootLayout);
+ VaadinObservables.activateRealm(ui);
+
+ // create a view
+ //
+ YView yView = factory.createView();
+ YGridLayout yLayout = factory.createGridLayout();
+ yView.setContent(yLayout);
+ yTable = factory.createTable();
+ yTable.setType(CashPositionDto.class);
+ yLayout.getElements().add(yTable);
+
+ yBindingSet = yView.getOrCreateBindingSet();
+ yBeanSlot = yView.addBeanSlot("ds", CashSlipDto.class);
+
+ YBeanSlotListBindingEndpoint ySlotListBinding = factory.createBeanSlotListBindingEndpoint();
+ ySlotListBinding.setBeanSlot(yBeanSlot);
+ ySlotListBinding.setCollectionType(CashPositionDto.class);
+ ySlotListBinding.setAttributePath("positions");
+
+ YEmbeddableCollectionEndpoint yTableEndpoint = yTable.createCollectionEndpoint();
+ yBindingSet.addBinding(ySlotListBinding, yTableEndpoint);
+
+ renderer = new VaadinRenderer();
+ viewContext = renderer.render(rootLayout, yView, null);
+
+ table1Editpart = DelegatingEditPartManager.getInstance().getEditpart(viewContext, yTable);
+ tablePresentation = table1Editpart.getPresentation();
+ table = (Table) tablePresentation.getWidget();
+
+ indexedDs = (Indexed) table.getContainerDataSource();
+ beanSlot = viewContext.getBeanSlot("ds");
+
+ }
+
+ private void createDatamodel() {
+
+ int custId = 10;
+
+ // create customer
+ cust = new McustomerDto();
+ cust.setId(custId);
+ cust.setFullname("customer1");
+ customerService.update(cust);
+ cust = customerService.get(custId);
+
+ slip = new CashSlipDto();
+ slip.setCashier("Jörg");
+ slip.setCustomer(cust);
+ slip.setNow(new Date());
+ slip.setCurrentDay(new Date().toString());
+ slip.setSerial(10l);
+ // slip.setRegister(cashRegister);
+ slip.setTotal(100d);
+ cashSlipService.update(slip);
+ slip = cashSlipService.get(slip.getId());
+
+ pos1 = new CashPositionDto();
+ pos1.setPrice(1000d);
+ pos1.setQuantity(10d);
+ slip.addToPositions(pos1);
+ cashSlipPosService.update(pos1);
+
+ pos2 = new CashPositionDto();
+ pos2.setPrice(2000d);
+ pos2.setQuantity(20d);
+ slip.addToPositions(pos2);
+ cashSlipPosService.update(pos2);
+ }
+
+ @Test
+ public void testBindCashPosition() throws Exception {
+ setUp();
+
+ assertEquals(2, slip.getPositions().size());
+ assertEquals(2, indexedDs.size());
+
+ CashPositionDto pos3 = new CashPositionDto();
+ pos3.setPrice(3000d);
+ pos3.setQuantity(30d);
+ slip.addToPositions(pos3);
+
+ assertEquals(3, slip.getPositions().size());
+ assertEquals(3, indexedDs.size());
+
+ CashPositionDto pos4 = new CashPositionDto();
+ pos4.setPrice(4000d);
+ pos4.setQuantity(40d);
+ slip.addToPositions(pos4);
+
+ assertEquals(4, slip.getPositions().size());
+ assertEquals(4, indexedDs.size());
+
+ slip.removeFromPositions(pos3);
+
+ assertEquals(3, slip.getPositions().size());
+ assertEquals(3, indexedDs.size());
+ }
+
+}
diff --git a/org.eclipse.osbp.runtime.web.atmosphere.fragment/.classpath b/org.eclipse.osbp.runtime.web.atmosphere.fragment/.classpath
new file mode 100644
index 0000000..43b9862
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.atmosphere.fragment/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/org.eclipse.osbp.runtime.web.atmosphere.fragment/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.runtime.web.atmosphere.fragment/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.atmosphere.fragment/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.runtime.web.atmosphere.fragment/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.osbp.runtime.web.atmosphere.fragment/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..0c68a61
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.atmosphere.fragment/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/org.eclipse.osbp.runtime.web.atmosphere.fragment/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.runtime.web.atmosphere.fragment/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.atmosphere.fragment/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.runtime.web.atmosphere.fragment/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.runtime.web.atmosphere.fragment/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..19e3115
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.atmosphere.fragment/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,11 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+BuilderConfiguration.is_project_specific=true
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.emf-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.runtime.web.atmosphere.fragment/META-INF/MANIFEST.MF b/org.eclipse.osbp.runtime.web.atmosphere.fragment/META-INF/MANIFEST.MF
index ea7f799..004967f 100644
--- a/org.eclipse.osbp.runtime.web.atmosphere.fragment/META-INF/MANIFEST.MF
+++ b/org.eclipse.osbp.runtime.web.atmosphere.fragment/META-INF/MANIFEST.MF
@@ -4,11 +4,11 @@
Bundle-SymbolicName: org.eclipse.osbp.runtime.web.atmosphere.fragment
Bundle-Version: 0.9.0.qualifier
Bundle-Vendor: Eclipse OSBP
-Fragment-Host: com.vaadin.external.atmosphere.runtime;bundle-version="2.2.7.vaadin1"
+Fragment-Host: com.vaadin.external.atmosphere.runtime;bundle-version="2.2.9.vaadin2"
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
-Import-Package: javax.servlet;version="2.6.0",
- javax.servlet.annotation;version="2.6.0",
- javax.servlet.descriptor;version="2.6.0",
- javax.servlet.http;version="2.6.0",
- javax.servlet.resources;version="2.6.0"
-Require-Bundle: org.eclipse.jetty.websocket;bundle-version="8.1.16"
+Require-Bundle: org.eclipse.jetty.websocket.api;bundle-version="9.4.1",
+ javax.servlet;bundle-version="[3.1.0,3.2.0)",
+ org.eclipse.jetty.server;bundle-version="9.4.1",
+ org.eclipse.jetty.websocket.common;bundle-version="9.4.1",
+ org.eclipse.jetty.websocket.server;bundle-version="9.4.1",
+ org.eclipse.jetty.websocket.servlet;bundle-version="9.4.1"
diff --git a/org.eclipse.osbp.runtime.web.common.tests/.classpath b/org.eclipse.osbp.runtime.web.common.tests/.classpath
new file mode 100644
index 0000000..cf36b56
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.common.tests/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src/"/>
+ <classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/org.eclipse.osbp.runtime.web.common.tests/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.runtime.web.common.tests/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.common.tests/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.runtime.web.common.tests/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.osbp.runtime.web.common.tests/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..c537b63
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.common.tests/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/org.eclipse.osbp.runtime.web.common.tests/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.runtime.web.common.tests/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.common.tests/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.runtime.web.common.tests/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.runtime.web.common.tests/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..fe45c94
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.common.tests/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,7 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.runtime.web.common.tests/META-INF/MANIFEST.MF b/org.eclipse.osbp.runtime.web.common.tests/META-INF/MANIFEST.MF
index 83b5abd..d4b2110 100644
--- a/org.eclipse.osbp.runtime.web.common.tests/META-INF/MANIFEST.MF
+++ b/org.eclipse.osbp.runtime.web.common.tests/META-INF/MANIFEST.MF
@@ -7,7 +7,7 @@
org.junit;bundle-version="4.10.0",
org.eclipse.equinox.preferences;bundle-version="3.5.0",
org.eclipse.osbp.runtime.common;bundle-version="[0.9.0,0.10.0)"
-Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Bundle-Vendor: Eclipse OSBP
Service-Component: OSGI-INF/*.xml
Import-Package: org.eclipse.osgi.service.datalocation;version="1.3.0",
diff --git a/org.eclipse.osbp.runtime.web.common/.classpath b/org.eclipse.osbp.runtime.web.common/.classpath
new file mode 100644
index 0000000..cf36b56
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.common/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src/"/>
+ <classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/org.eclipse.osbp.runtime.web.common/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.runtime.web.common/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.common/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.runtime.web.common/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.osbp.runtime.web.common/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..c537b63
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.common/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/org.eclipse.osbp.runtime.web.common/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.runtime.web.common/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.common/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.runtime.web.common/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.runtime.web.common/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..19e3115
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.common/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,11 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+BuilderConfiguration.is_project_specific=true
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.emf-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.runtime.web.common/META-INF/MANIFEST.MF b/org.eclipse.osbp.runtime.web.common/META-INF/MANIFEST.MF
index 6263d80..c785029 100644
--- a/org.eclipse.osbp.runtime.web.common/META-INF/MANIFEST.MF
+++ b/org.eclipse.osbp.runtime.web.common/META-INF/MANIFEST.MF
@@ -4,7 +4,7 @@
Bundle-SymbolicName: org.eclipse.osbp.runtime.web.common
Bundle-Version: 0.9.0.qualifier
Bundle-ActivationPolicy: lazy
-Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Bundle-Vendor: Eclipse OSBP
Import-Package: org.osgi.service.component;version="1.2.0",
org.osgi.service.prefs;version="1.1.1"
diff --git a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests.ui.tests/.classpath b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests.ui.tests/.classpath
new file mode 100644
index 0000000..46cec6e
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests.ui.tests/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src/"/>
+ <classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests.ui.tests/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests.ui.tests/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests.ui.tests/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests.ui.tests/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests.ui.tests/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..f42de36
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests.ui.tests/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests.ui.tests/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests.ui.tests/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests.ui.tests/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests.ui.tests/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests.ui.tests/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..fe45c94
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests.ui.tests/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,7 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests.ui.tests/META-INF/MANIFEST.MF b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests.ui.tests/META-INF/MANIFEST.MF
index af5bf74..a498e7d 100644
--- a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests.ui.tests/META-INF/MANIFEST.MF
+++ b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests.ui.tests/META-INF/MANIFEST.MF
@@ -4,8 +4,8 @@
Bundle-SymbolicName: org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests.ui.tests
Bundle-Version: 0.9.0.qualifier
Bundle-ClassPath: .
-Require-Bundle: com.vaadin.shared;bundle-version="[7.5.7,7.7.0)",
- com.vaadin.server;bundle-version="[7.5.7,7.7.0)",
+Require-Bundle: com.vaadin.shared;bundle-version="[7.7.6,7.8.0)",
+ com.vaadin.server;bundle-version="[7.7.6,7.8.0)",
org.eclipse.osbp.runtime.web.vaadin.common;bundle-version="[0.9.0,0.10.0)",
org.eclipse.osbp.runtime.web.ecview.presentation.vaadin;bundle-version="[0.9.0,0.10.0)",
org.eclipse.osbp.runtime.web.vaadin.databinding;bundle-version="[0.9.0,0.10.0)",
diff --git a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests.ui/.classpath b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests.ui/.classpath
new file mode 100644
index 0000000..14129a1
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests.ui/.classpath
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests.ui/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests.ui/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests.ui/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests.ui/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests.ui/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..f42de36
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests.ui/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests.ui/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests.ui/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests.ui/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests.ui/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests.ui/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..fe45c94
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests.ui/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,7 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests.ui/META-INF/MANIFEST.MF b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests.ui/META-INF/MANIFEST.MF
index 06edf04..9bdd8ba 100644
--- a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests.ui/META-INF/MANIFEST.MF
+++ b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests.ui/META-INF/MANIFEST.MF
@@ -4,8 +4,8 @@
Bundle-SymbolicName: org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests.ui
Bundle-Version: 0.9.0.qualifier
Bundle-ClassPath: .
-Require-Bundle: com.vaadin.shared;bundle-version="[7.5.7,7.7.0)",
- com.vaadin.server;bundle-version="[7.5.7,7.7.0)",
+Require-Bundle: com.vaadin.shared;bundle-version="[7.7.6,7.8.0)",
+ com.vaadin.server;bundle-version="[7.7.6,7.8.0)",
org.eclipse.osbp.runtime.web.vaadin.common;bundle-version="[0.9.0,0.10.0)",
org.eclipse.osbp.runtime.web.ecview.presentation.vaadin;bundle-version="[0.9.0,0.10.0)",
org.eclipse.osbp.runtime.web.vaadin.databinding;bundle-version="[0.9.0,0.10.0)",
@@ -21,7 +21,7 @@
org.eclipse.osbp.ecview.core.extension.editparts.emf;bundle-version="[0.9.0,0.10.0)",
org.eclipse.osbp.ecview.core.ui.presentation.common;bundle-version="[0.9.0,0.10.0)",
org.eclipse.osbp.ecview.core.util.emf;bundle-version="[0.9.0,0.10.0)",
- com.vaadin.client-compiled;bundle-version="[7.5.7,7.7.0)"
+ com.vaadin.client-compiled;bundle-version="[7.7.6,7.8.0)"
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Bundle-Vendor: Eclipse OSBP
Import-Package: javax.servlet;version="2.6.0",
diff --git a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests/.classpath b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests/.classpath
new file mode 100644
index 0000000..46cec6e
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src/"/>
+ <classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..f42de36
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..19e3115
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,11 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+BuilderConfiguration.is_project_specific=true
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.emf-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests/META-INF/MANIFEST.MF b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests/META-INF/MANIFEST.MF
index f4801f7..29b6f8c 100644
--- a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests/META-INF/MANIFEST.MF
+++ b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests/META-INF/MANIFEST.MF
@@ -7,8 +7,8 @@
Require-Bundle: org.junit;bundle-version="4.10.0",
org.knowhowlab.osgi.testing.assertions;bundle-version="[1.3.0,1.3.1)",
org.knowhowlab.osgi.testing.utils;bundle-version="[1.2.2,1.2.3)",
- com.vaadin.shared;bundle-version="[7.5.7,7.7.0)",
- com.vaadin.server;bundle-version="[7.5.7,7.7.0)",
+ com.vaadin.shared;bundle-version="[7.7.6,7.8.0)",
+ com.vaadin.server;bundle-version="[7.7.6,7.8.0)",
org.eclipse.osbp.runtime.web.vaadin.common;bundle-version="[0.9.0,0.10.0)",
org.eclipse.osbp.runtime.web.ecview.presentation.vaadin;bundle-version="[0.9.0,0.10.0)",
org.eclipse.osbp.runtime.web.vaadin.databinding;bundle-version="[0.9.0,0.10.0)",
@@ -28,7 +28,7 @@
org.jsoup;bundle-version="1.7.2",
org.eclipse.osbp.runtime.web.vaadin.components.widget;bundle-version="[0.9.0,0.10.0)",
org.slf4j.api;bundle-version="1.7.2",
- org.eclipse.osbp.runtime.designer.api;bundle-version="0.9.0",
+ org.eclipse.osbp.runtime.designer.api;bundle-version="[0.9.0,0.10.0)",
org.eclipse.equinox.ds;bundle-version="1.4.200"
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Export-Package: org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests.emf.model;version="0.9.0",
diff --git a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/tests/presentation/DefaultUI.java b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/tests/presentation/DefaultUI.java
index a867174..652f080 100644
--- a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/tests/presentation/DefaultUI.java
+++ b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/tests/presentation/DefaultUI.java
@@ -31,8 +31,8 @@
VaadinSession session = new CustomVaadinSession(
new VaadinServletService(null,
new CustomDeploymentConfiguration()));
+ session.lock();
setSession(session);
-
VaadinSession.setCurrent(session);
} catch (ServiceException e) {
diff --git a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/.classpath b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/.classpath
new file mode 100644
index 0000000..cf36b56
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src/"/>
+ <classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/.project b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/.project
index a635bf8..4f55d44 100644
--- a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/.project
+++ b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/.project
@@ -36,11 +36,6 @@
</arguments>
</buildCommand>
<buildCommand>
- <name>com.vaadin.integration.eclipse.addonStylesBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
<name>org.sonarlint.eclipse.core.sonarlintBuilder</name>
<arguments>
</arguments>
diff --git a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/.settings/com.vaadin.integration.eclipse.prefs b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/.settings/com.vaadin.integration.eclipse.prefs
new file mode 100644
index 0000000..0904e44
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/.settings/com.vaadin.integration.eclipse.prefs
@@ -0,0 +1,2 @@
+com.vaadin.integration.eclipse.mavenLatestVersionsUpgrade=["7.7.7"]
+eclipse.preferences.version=1
diff --git a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..0c68a61
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..19e3115
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,11 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+BuilderConfiguration.is_project_specific=true
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.emf-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/META-INF/MANIFEST.MF b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/META-INF/MANIFEST.MF
index 877cb86..1d882c2 100644
--- a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/META-INF/MANIFEST.MF
+++ b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/META-INF/MANIFEST.MF
@@ -6,13 +6,13 @@
Bundle-Version: 0.9.0.qualifier
Require-Bundle: org.eclipse.osbp.ecview.core.extension.editparts;bundle-version="[0.9.0,0.10.0)";visibility:=reexport,
org.eclipse.osbp.ecview.core.extension.model;bundle-version="[0.9.0,0.10.0)";visibility:=reexport,
- com.vaadin.shared;bundle-version="[7.5.7,7.7.0)";visibility:=reexport,
- com.vaadin.client;bundle-version="[7.5.7,7.7.0)",
- com.vaadin.server;bundle-version="[7.5.7,7.7.0)",
+ com.vaadin.shared;bundle-version="[7.7.6,7.8.0)";visibility:=reexport,
+ com.vaadin.client;bundle-version="[7.7.6,7.8.0)",
+ com.vaadin.server;bundle-version="[7.7.6,7.8.0)",
org.eclipse.osbp.runtime.web.vaadin.databinding;bundle-version="[0.9.0,0.10.0)",
- org.eclipse.core.databinding;bundle-version="[1.4.2,1.5.0)",
- org.eclipse.core.databinding.property;bundle-version="[1.4.200,1.5.0)",
- org.eclipse.core.databinding.beans;bundle-version="[1.2.200,1.5.0)",
+ org.eclipse.core.databinding;bundle-version="[1.6.0,1.7.0)",
+ org.eclipse.core.databinding.property;bundle-version="[1.6.0,1.7.0)",
+ org.eclipse.core.databinding.beans;bundle-version="[1.3.100,1.4.0)",
org.eclipse.emf.databinding;bundle-version="[1.3.0,1.4.0)",
org.eclipse.osbp.runtime.web.vaadin.components;bundle-version="[0.9.0,0.10.0)",
com.ibm.icu;bundle-version="50.1.1",
@@ -27,13 +27,18 @@
org.eclipse.osbp.ecview.core.common.editparts.emf;bundle-version="[0.9.0,0.10.0)",
org.eclipse.osbp.runtime.web.vaadin.components.widget;bundle-version="[0.9.0,0.10.0)",
org.jsoup;bundle-version="1.7.2",
- org.eclipse.osbp.vaadin.addons.absolutelayout;bundle-version="0.9.0",
- dragdroplayouts.osgi;bundle-version="1.1.3",
- org.eclipse.osbp.vaadin.addons.suggesttext;bundle-version="0.9.0",
+ org.eclipse.osbp.vaadin.addons.absolutelayout;bundle-version="[0.9.0,0.10.0)",
+ dragdroplayouts.osgi;bundle-version="[1.3.2,1.3.3)",
+ org.eclipse.osbp.vaadin.addons.suggesttext;bundle-version="[0.9.0,0.10.0)",
org.eclipse.osbp.runtime.designer.api;bundle-version="[0.9.0,0.10.0)",
org.apache.commons.lang3;bundle-version="3.4.0",
- org.eclipse.osbp.ui.api
-Import-Package: org.osgi.framework;version="1.7.0",
+ org.eclipse.osbp.ui.api;bundle-version="[0.9.0,0.10.0)",
+ org.eclipse.osbp.dsl.dto.xtext;bundle-version="0.9.0",
+ org.eclipse.osbp.blob;bundle-version="0.9.0",
+ org.eclipse.osbp.vaadin.addons.kanban;bundle-version="0.9.0"
+Import-Package: org.eclipse.osbp.ecview.extension.api;version="0.9.0",
+ org.osgi.framework;version="1.7.0",
+ org.osgi.service.component.annotations;version="1.2.0",
org.slf4j;version="1.6.4"
Export-Package: org.eclipse.osbp.runtime.web.ecview.presentation.vaadin;
uses:="com.vaadin.data,
diff --git a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/OSGI-INF/presentationFactory.xml b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/OSGI-INF/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.internal.PresenterFactory.xml
similarity index 73%
rename from org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/OSGI-INF/presentationFactory.xml
rename to org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/OSGI-INF/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.internal.PresenterFactory.xml
index 60f1463..36c83da 100644
--- a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/OSGI-INF/presentationFactory.xml
+++ b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/OSGI-INF/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.internal.PresenterFactory.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
-<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.factory">
- <implementation class="org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.internal.PresenterFactory"/>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" immediate="true" name="org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.internal.PresenterFactory">
<service>
<provide interface="org.eclipse.osbp.ecview.core.common.presentation.IPresentationFactory"/>
</service>
-</scr:component>
+ <implementation class="org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.internal.PresenterFactory"/>
+</scr:component>
\ No newline at end of file
diff --git a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/OSGI-INF/serviceProvider.xml b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/OSGI-INF/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.internal.binding.BindingManagerProvider.xml
similarity index 75%
rename from org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/OSGI-INF/serviceProvider.xml
rename to org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/OSGI-INF/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.internal.binding.BindingManagerProvider.xml
index 0b681e9..cc00c58 100644
--- a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/OSGI-INF/serviceProvider.xml
+++ b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/OSGI-INF/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.internal.binding.BindingManagerProvider.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
-<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.service.provider">
- <implementation class="org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.internal.binding.BindingManagerProvider"/>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" immediate="true" name="org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.internal.binding.BindingManagerProvider">
+ <property name="ecview.serviceprovider.level" type="String" value="view"/>
<service>
<provide interface="org.eclipse.osbp.ecview.core.common.services.IServiceProvider"/>
</service>
- <property name="ecview.serviceprovider.level" type="String" value="view"/>
-</scr:component>
+ <implementation class="org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.internal.binding.BindingManagerProvider"/>
+</scr:component>
\ No newline at end of file
diff --git a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/common/AbstractFieldWidgetPresenter.java b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/common/AbstractFieldWidgetPresenter.java
index 60cafd5..761072b 100644
--- a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/common/AbstractFieldWidgetPresenter.java
+++ b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/common/AbstractFieldWidgetPresenter.java
@@ -31,9 +31,12 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import com.vaadin.client.Focusable;
import com.vaadin.data.Validator;
import com.vaadin.data.util.converter.Converter;
import com.vaadin.server.ErrorMessage;
+import com.vaadin.server.VaadinSession;
+import com.vaadin.ui.AbstractComponent;
import com.vaadin.ui.AbstractField;
import com.vaadin.ui.Component;
import com.vaadin.ui.Field;
@@ -62,6 +65,10 @@
/** The converter. */
private Converter<?, ?> converter;
+ public AbstractFieldWidgetPresenter() {
+ super(null);
+ }
+
/**
* Instantiates a new abstract field widget presenter.
*
@@ -273,7 +280,7 @@
casted.setConverter(getConverter());
}
}
-
+
super.initialize(field, getCastedModel());
}
@@ -367,5 +374,4 @@
super.internalDispose();
}
-
}
diff --git a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/common/AbstractLayoutPresenter.java b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/common/AbstractLayoutPresenter.java
index f426453..592b85e 100644
--- a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/common/AbstractLayoutPresenter.java
+++ b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/common/AbstractLayoutPresenter.java
@@ -12,23 +12,27 @@
import java.util.ArrayList;
import java.util.Collections;
+import java.util.Date;
import java.util.List;
import org.eclipse.osbp.ecview.core.common.dnd.IDropTargetStrategy;
import org.eclipse.osbp.ecview.core.common.editpart.IEmbeddableEditpart;
import org.eclipse.osbp.ecview.core.common.editpart.ILayoutEditpart;
+import org.eclipse.osbp.ecview.core.common.model.core.CoreModelFactory;
import org.eclipse.osbp.ecview.core.common.model.core.YElement;
import org.eclipse.osbp.ecview.core.common.model.core.YEmbeddable;
+import org.eclipse.osbp.ecview.core.common.model.core.YEmbeddableEvent;
import org.eclipse.osbp.ecview.core.common.model.core.YLayout;
import org.eclipse.osbp.ecview.core.common.model.core.YMarginable;
import org.eclipse.osbp.ecview.core.common.model.core.YSpacingable;
import org.eclipse.osbp.ecview.core.common.presentation.ILayoutPresentation;
-import org.eclipse.osbp.runtime.designer.api.IWidgetDesignConfigurator;
import org.eclipse.osbp.runtime.designer.api.IDesignerService.DesignEvent;
import org.eclipse.osbp.runtime.designer.api.IDesignerService.EventType;
import org.eclipse.osbp.runtime.designer.api.IDesignerService.IDesignListener;
+import org.eclipse.osbp.runtime.designer.api.IWidgetDesignConfigurator;
import com.vaadin.ui.Component;
+import com.vaadin.ui.HasComponents.ComponentAttachDetachNotifier;
import com.vaadin.ui.Layout.MarginHandler;
import com.vaadin.ui.Layout.SpacingHandler;
@@ -43,9 +47,8 @@
* @param <A>
* the generic type
*/
-public abstract class AbstractLayoutPresenter<A extends Component> extends
- AbstractVaadinWidgetPresenter<A> implements ILayoutPresentation<A>,
- IDesignListener {
+public abstract class AbstractLayoutPresenter<A extends Component> extends AbstractVaadinWidgetPresenter<A>
+ implements ILayoutPresentation<A>, IDesignListener {
/** The children. */
private List<IEmbeddableEditpart> children;
@@ -72,33 +75,48 @@
return (ILayoutEditpart) super.getEditpart();
}
- /* (non-Javadoc)
- * @see org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.common.AbstractVaadinWidgetPresenter#getModel()
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.common.
+ * AbstractVaadinWidgetPresenter#getModel()
*/
@Override
public YLayout getModel() {
return (YLayout) getEditpart().getModel();
}
- /* (non-Javadoc)
- * @see org.eclipse.osbp.ecview.core.common.presentation.ILayoutPresentation#getChildren()
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.osbp.ecview.core.common.presentation.ILayoutPresentation#
+ * getChildren()
*/
@Override
public List<IEmbeddableEditpart> getChildren() {
- return children != null ? Collections.unmodifiableList(children)
- : Collections.<IEmbeddableEditpart> emptyList();
+ return children != null ? Collections.unmodifiableList(children) : Collections.<IEmbeddableEditpart>emptyList();
}
- /* (non-Javadoc)
- * @see org.eclipse.osbp.ecview.core.common.presentation.ILayoutPresentation#contains(org.eclipse.osbp.ecview.core.common.editpart.IEmbeddableEditpart)
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.osbp.ecview.core.common.presentation.ILayoutPresentation#
+ * contains(org.eclipse.osbp.ecview.core.common.editpart.
+ * IEmbeddableEditpart)
*/
@Override
public boolean contains(IEmbeddableEditpart presentation) {
return children != null && children.contains(presentation);
}
- /* (non-Javadoc)
- * @see org.eclipse.osbp.ecview.core.common.presentation.ILayoutPresentation#add(org.eclipse.osbp.ecview.core.common.editpart.IEmbeddableEditpart)
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.osbp.ecview.core.common.presentation.ILayoutPresentation#add(
+ * org.eclipse.osbp.ecview.core.common.editpart.IEmbeddableEditpart)
*/
@Override
public void add(IEmbeddableEditpart editPart) {
@@ -125,8 +143,12 @@
}
- /* (non-Javadoc)
- * @see org.eclipse.osbp.ecview.core.common.presentation.ILayoutPresentation#remove(org.eclipse.osbp.ecview.core.common.editpart.IEmbeddableEditpart)
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.osbp.ecview.core.common.presentation.ILayoutPresentation#
+ * remove(org.eclipse.osbp.ecview.core.common.editpart.IEmbeddableEditpart)
*/
@Override
public void remove(IEmbeddableEditpart editPart) {
@@ -151,8 +173,13 @@
}
- /* (non-Javadoc)
- * @see org.eclipse.osbp.ecview.core.common.presentation.ILayoutPresentation#insert(org.eclipse.osbp.ecview.core.common.editpart.IEmbeddableEditpart, int)
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.osbp.ecview.core.common.presentation.ILayoutPresentation#
+ * insert(org.eclipse.osbp.ecview.core.common.editpart.IEmbeddableEditpart,
+ * int)
*/
@Override
public void insert(IEmbeddableEditpart editPart, int index) {
@@ -161,8 +188,7 @@
int currentIndex = children.indexOf(editPart);
if (currentIndex > -1 && currentIndex != index) {
throw new RuntimeException(
- String.format(
- "Insert at index %d not possible since presentation already contained at index %d",
+ String.format("Insert at index %d not possible since presentation already contained at index %d",
index, currentIndex));
}
@@ -187,21 +213,22 @@
}
- /* (non-Javadoc)
- * @see org.eclipse.osbp.ecview.core.common.presentation.ILayoutPresentation#move(org.eclipse.osbp.ecview.core.common.editpart.IEmbeddableEditpart, int)
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.osbp.ecview.core.common.presentation.ILayoutPresentation#move
+ * (org.eclipse.osbp.ecview.core.common.editpart.IEmbeddableEditpart, int)
*/
@Override
public void move(IEmbeddableEditpart editpart, int index) {
if (children == null) {
- throw new RuntimeException(
- "Move not possible. No children present.");
+ throw new RuntimeException("Move not possible. No children present.");
}
if (!children.contains(editpart)) {
throw new RuntimeException(
- String.format(
- "Move to index %d not possible since presentation not added yet!",
- index));
+ String.format("Move to index %d not possible since presentation not added yet!", index));
}
int currentIndex = children.indexOf(editpart);
@@ -226,11 +253,32 @@
* The new index where the control should be located after the
* move operation.
*/
- protected void internalMove(IEmbeddableEditpart presentation, int oldIndex,
- int newIndex) {
+ protected void internalMove(IEmbeddableEditpart presentation, int oldIndex, int newIndex) {
}
+ protected void initialize(Component component, YElement model) {
+
+ super.initialize(component, model);
+
+ if (component instanceof ComponentAttachDetachNotifier && model instanceof YLayout) {
+ ((ComponentAttachDetachNotifier) component).addComponentAttachListener(e -> {
+ YEmbeddableEvent event = CoreModelFactory.eINSTANCE.createYEmbeddableEvent();
+ event.setTime(new Date());
+ event.setEmbeddable((YEmbeddable) getModel());
+ event.setRawEvent(e);
+ ((YLayout) model).setLastComponentAttach(event);
+ });
+ ((ComponentAttachDetachNotifier) component).addComponentDetachListener(e -> {
+ YEmbeddableEvent event = CoreModelFactory.eINSTANCE.createYEmbeddableEvent();
+ event.setTime(new Date());
+ event.setEmbeddable((YEmbeddable) getModel());
+ event.setRawEvent(e);
+ ((YLayout) model).setLastComponentDetach(event);
+ });
+ }
+ }
+
/**
* Returns true, if rendering should not be done.
*
@@ -240,8 +288,13 @@
return renderLock;
}
- /* (non-Javadoc)
- * @see org.eclipse.osbp.ecview.core.common.presentation.ILayoutPresentation#updateCellStyle(org.eclipse.osbp.ecview.core.common.model.core.YEmbeddable)
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.osbp.ecview.core.common.presentation.ILayoutPresentation#
+ * updateCellStyle(org.eclipse.osbp.ecview.core.common.model.core.
+ * YEmbeddable)
*/
@Override
public void updateCellStyle(YEmbeddable child) {
@@ -267,8 +320,12 @@
}
}
- /* (non-Javadoc)
- * @see org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.common.AbstractVaadinWidgetPresenter#notify(org.eclipse.osbp.runtime.designer.api.IDesignerService.DesignEvent)
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.common.
+ * AbstractVaadinWidgetPresenter#notify(org.eclipse.osbp.runtime.designer.
+ * api.IDesignerService.DesignEvent)
*/
@Override
public void notify(DesignEvent event) {
@@ -285,15 +342,12 @@
}
}
- IWidgetDesignConfigurator service = getViewContext().getService(
- IWidgetDesignConfigurator.class.getName());
+ IWidgetDesignConfigurator service = getViewContext().getService(IWidgetDesignConfigurator.class.getName());
if (service != null) {
if (event.getType() == EventType.ENABLED) {
- service.configure(getWidget(), (YEmbeddable) getCastedModel(),
- true);
+ service.configure(getWidget(), (YEmbeddable) getCastedModel(), true);
} else {
- service.configure(getWidget(), (YEmbeddable) getCastedModel(),
- false);
+ service.configure(getWidget(), (YEmbeddable) getCastedModel(), false);
}
}
}
@@ -321,6 +375,8 @@
}
setupDropTarget(component, (YLayout) model);
+
+ initialize(component, model);
}
/**
@@ -332,30 +388,34 @@
* the y layout
*/
protected void setupDropTarget(Component component, YLayout yLayout) {
- IDropTargetStrategy strategy = getViewContext().getService(
- IDropTargetStrategy.class.getName());
+ IDropTargetStrategy strategy = getViewContext().getService(IDropTargetStrategy.class.getName());
if (strategy != null) {
strategy.setupDropTarget(getViewContext(), component, yLayout);
}
}
- /* (non-Javadoc)
- * @see org.eclipse.osbp.ecview.core.common.presentation.ILayoutPresentation#updateSpacings()
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.osbp.ecview.core.common.presentation.ILayoutPresentation#
+ * updateSpacings()
*/
@Override
public void updateSpacings() {
if (getModel() instanceof YSpacingable) {
- ((SpacingHandler) getWidget())
- .setSpacing(((YSpacingable) getModel()).isSpacing());
+ ((SpacingHandler) getWidget()).setSpacing(((YSpacingable) getModel()).isSpacing());
}
if (getModel() instanceof YMarginable) {
- ((MarginHandler) getWidget()).setMargin(((YMarginable) getModel())
- .isMargin());
+ ((MarginHandler) getWidget()).setMargin(((YMarginable) getModel()).isMargin());
}
}
- /* (non-Javadoc)
- * @see org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.common.AbstractVaadinWidgetPresenter#internalDispose()
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.common.
+ * AbstractVaadinWidgetPresenter#internalDispose()
*/
@Override
protected void internalDispose() {
diff --git a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/common/AbstractVaadinWidgetPresenter.java b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/common/AbstractVaadinWidgetPresenter.java
index b20ade6..edf1c4f 100644
--- a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/common/AbstractVaadinWidgetPresenter.java
+++ b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/common/AbstractVaadinWidgetPresenter.java
@@ -10,6 +10,7 @@
*/
package org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.common;
+import java.util.Date;
import java.util.HashSet;
import java.util.Locale;
import java.util.Set;
@@ -35,12 +36,17 @@
import org.eclipse.osbp.ecview.core.common.context.IViewContext;
import org.eclipse.osbp.ecview.core.common.editpart.IEmbeddableEditpart;
import org.eclipse.osbp.ecview.core.common.editpart.datatypes.IDatatypeEditpart.DatatypeChangeEvent;
+import org.eclipse.osbp.ecview.core.common.model.core.CoreModelFactory;
import org.eclipse.osbp.ecview.core.common.model.core.CoreModelPackage;
+import org.eclipse.osbp.ecview.core.common.model.core.YBlurNotifier;
+import org.eclipse.osbp.ecview.core.common.model.core.YContextClickEvent;
import org.eclipse.osbp.ecview.core.common.model.core.YEditable;
import org.eclipse.osbp.ecview.core.common.model.core.YElement;
import org.eclipse.osbp.ecview.core.common.model.core.YEmbeddable;
import org.eclipse.osbp.ecview.core.common.model.core.YEmbeddableBindingEndpoint;
+import org.eclipse.osbp.ecview.core.common.model.core.YEmbeddableEvent;
import org.eclipse.osbp.ecview.core.common.model.core.YEnable;
+import org.eclipse.osbp.ecview.core.common.model.core.YFocusNotifier;
import org.eclipse.osbp.ecview.core.common.model.core.YFocusable;
import org.eclipse.osbp.ecview.core.common.model.core.YVisibleable;
import org.eclipse.osbp.ecview.core.common.model.core.util.CoreModelUtil;
@@ -77,6 +83,9 @@
import com.vaadin.data.Property.ValueChangeNotifier;
import com.vaadin.data.util.converter.Converter;
import com.vaadin.data.util.converter.Converter.ConversionException;
+import com.vaadin.event.ContextClickEvent.ContextClickNotifier;
+import com.vaadin.event.FieldEvents.BlurNotifier;
+import com.vaadin.event.FieldEvents.FocusNotifier;
import com.vaadin.ui.AbstractComponent;
import com.vaadin.ui.AbstractSelect;
import com.vaadin.ui.Button;
@@ -94,14 +103,12 @@
* @param <A>
* the generic type
*/
-@SuppressWarnings("restriction")
-public abstract class AbstractVaadinWidgetPresenter<A extends Component>
- extends AbstractDisposable implements IWidgetPresentation<A>,
- ILocaleChangedService.LocaleListener {
+@SuppressWarnings({ "restriction", "rawtypes" })
+public abstract class AbstractVaadinWidgetPresenter<A extends Component> extends AbstractDisposable
+ implements IWidgetPresentation<A>, ILocaleChangedService.LocaleListener {
/** The Constant LOGGER. */
- private static final Logger LOGGER = LoggerFactory
- .getLogger(AbstractVaadinWidgetPresenter.class);
+ private static final Logger LOGGER = LoggerFactory.getLogger(AbstractVaadinWidgetPresenter.class);
/**
* See {@link IConstants#CSS_CLASS_CONTROL_BASE}.
@@ -137,6 +144,8 @@
private AbstractVaadinWidgetPresenter<A>.LabelAdapter labelAdapter;
+ private Component component;
+
/**
* Instantiates a new abstract vaadin widget presenter.
*
@@ -234,6 +243,18 @@
*/
protected abstract void doUpdateLocale(Locale locale);
+ protected void doSetStyle(String style) {
+ if (component != null && style != null) {
+ component.addStyleName(style);
+ }
+ }
+
+ protected void doUnSetStyle(String style) {
+ if (component != null && style != null) {
+ component.removeStyleName(style);
+ }
+ }
+
/*
* (non-Javadoc)
*
@@ -306,8 +327,9 @@
* the model
*/
protected void setupComponent(Component component, YElement model) {
- IInitializerService service = getViewContext().getService(
- IInitializerService.class.getName());
+ this.component = component;
+
+ IInitializerService service = getViewContext().getService(IInitializerService.class.getName());
if (service != null) {
service.initialize(component, model);
}
@@ -320,8 +342,7 @@
IWidgetDesignConfigurator cService = getViewContext()
.getService(IWidgetDesignConfigurator.class.getName());
if (cService != null && getWidget() != null) {
- cService.configure(getWidget(), (YEmbeddable) getModel(),
- designService.isDesignMode());
+ cService.configure(getWidget(), (YEmbeddable) getModel(), designService.isDesignMode());
}
}
}
@@ -347,11 +368,9 @@
* the event
*/
protected void configureForDesignMode(DesignEvent event) {
- IWidgetDesignConfigurator service = getViewContext().getService(
- IWidgetDesignConfigurator.class.getName());
+ IWidgetDesignConfigurator service = getViewContext().getService(IWidgetDesignConfigurator.class.getName());
if (service != null && getWidget() != null) {
- service.configure(getWidget(), (YEmbeddable) getModel(),
- event.getType() == EventType.ENABLED);
+ service.configure(getWidget(), (YEmbeddable) getModel(), event.getType() == EventType.ENABLED);
}
}
@@ -365,8 +384,7 @@
* @param container
* the container
*/
- protected void createBindings(YEmbeddable yEmbeddable,
- AbstractComponent widget, AbstractComponent container) {
+ protected void createBindings(YEmbeddable yEmbeddable, AbstractComponent widget, AbstractComponent container) {
ensureBindingManager();
applyDefaults(yEmbeddable);
@@ -381,8 +399,7 @@
}
if (yEmbeddable instanceof YEditable) {
- registerBinding(createBindingsEditable((YEditable) yEmbeddable,
- widget));
+ registerBinding(createBindingsEditable((YEditable) yEmbeddable, widget));
}
// createBindingsCaption(yEmbeddable, widget);
@@ -398,8 +415,7 @@
* the model
* @return Binding - the created binding
*/
- protected Binding createBindings(IObservableValue target,
- IObservableValue model) {
+ protected Binding createBindings(IObservableValue target, IObservableValue model) {
ensureBindingManager();
return bindingManger.bindValue(target, model);
@@ -418,12 +434,10 @@
* the model to target
* @return Binding - the created binding
*/
- protected Binding createBindings(IObservableValue target,
- IObservableValue model, UpdateValueStrategy targetToModel,
+ protected Binding createBindings(IObservableValue target, IObservableValue model, UpdateValueStrategy targetToModel,
UpdateValueStrategy modelToTarget) {
ensureBindingManager();
- return bindingManger.bindValue(target, model, targetToModel,
- modelToTarget);
+ return bindingManger.bindValue(target, model, targetToModel, modelToTarget);
}
/**
@@ -435,8 +449,7 @@
* the model
* @return Binding - the created binding
*/
- protected Binding createBindings(IObservableList target,
- IObservableList model) {
+ protected Binding createBindings(IObservableList target, IObservableList model) {
ensureBindingManager();
return bindingManger.bindList(target, model);
@@ -448,9 +461,7 @@
protected void ensureBindingManager() {
if (bindingManger == null) {
bindingManger = getViewContext()
- .getService(
- org.eclipse.osbp.ecview.core.common.binding.IECViewBindingManager.class
- .getName());
+ .getService(org.eclipse.osbp.ecview.core.common.binding.IECViewBindingManager.class.getName());
}
}
@@ -463,15 +474,12 @@
* the abstract component
* @return Binding - the created binding
*/
- protected Binding createBindingsEditable(YEditable yEditable,
- AbstractComponent abstractComponent) {
+ protected Binding createBindingsEditable(YEditable yEditable, AbstractComponent abstractComponent) {
ensureBindingManager();
if (abstractComponent instanceof Property.ReadOnlyStatusChangeNotifier) {
- return bindingManger.bindReadonly(yEditable,
- (Property.ReadOnlyStatusChangeNotifier) abstractComponent);
+ return bindingManger.bindReadonly(yEditable, (Property.ReadOnlyStatusChangeNotifier) abstractComponent);
} else {
- return bindingManger.bindReadonlyOneway(yEditable,
- abstractComponent);
+ return bindingManger.bindReadonlyOneway(yEditable, abstractComponent);
}
}
@@ -497,8 +505,7 @@
* the abstract component
* @return Binding - the created binding
*/
- protected Binding createBindingsVisiblility(YVisibleable yVisibleable,
- AbstractComponent abstractComponent) {
+ protected Binding createBindingsVisiblility(YVisibleable yVisibleable, AbstractComponent abstractComponent) {
ensureBindingManager();
return bindingManger.bindVisible(yVisibleable, abstractComponent);
}
@@ -512,12 +519,9 @@
* the abstract component
* @return Binding - the created binding
*/
- protected Binding createBindingsEnabled(YEnable yEnable,
- AbstractComponent abstractComponent) {
+ protected Binding createBindingsEnabled(YEnable yEnable, AbstractComponent abstractComponent) {
IBindingManager bindingManger = getViewContext()
- .getService(
- org.eclipse.osbp.ecview.core.common.binding.IECViewBindingManager.class
- .getName());
+ .getService(org.eclipse.osbp.ecview.core.common.binding.IECViewBindingManager.class.getName());
// bind enabled
return bindingManger.bindEnabled(yEnable, abstractComponent);
@@ -535,8 +539,7 @@
* the field
* @return Binding - the created binding
*/
- protected Binding createBindings_Value(EObject model,
- EStructuralFeature modelFeature, Field<?> field) {
+ protected Binding createBindings_Value(EObject model, EStructuralFeature modelFeature, Field<?> field) {
return createBindingsValue(model, modelFeature, field, null, null);
}
@@ -555,21 +558,15 @@
* the model to target
* @return Binding - the created binding
*/
- protected Binding createBindingsValue(EObject model,
- EStructuralFeature modelFeature, Field<?> field,
+ protected Binding createBindingsValue(EObject model, EStructuralFeature modelFeature, Field<?> field,
UpdateValueStrategy targetToModel, UpdateValueStrategy modelToTarget) {
IBindingManager bindingManager = getViewContext()
- .getService(
- org.eclipse.osbp.ecview.core.common.binding.IECViewBindingManager.class
- .getName());
+ .getService(org.eclipse.osbp.ecview.core.common.binding.IECViewBindingManager.class.getName());
if (bindingManager != null) {
// bind the value of yText to textRidget
- IObservableValue modelObservable = EMFObservables.observeValue(
- model, modelFeature);
- IObservableValue uiObservable = VaadinObservables
- .observeValue(field);
- return bindingManager.bindValue(uiObservable, modelObservable,
- targetToModel, modelToTarget);
+ IObservableValue modelObservable = EMFObservables.observeValue(model, modelFeature);
+ IObservableValue uiObservable = VaadinObservables.observeValue(field);
+ return bindingManager.bindValue(uiObservable, modelObservable, targetToModel, modelToTarget);
}
return null;
}
@@ -589,18 +586,13 @@
* the model to target
* @return Binding - the created binding
*/
- protected Binding createBindingsButtonImage(EObject model,
- EStructuralFeature modelFeature, Button field) {
+ protected Binding createBindingsButtonImage(EObject model, EStructuralFeature modelFeature, Button field) {
IBindingManager bindingManager = getViewContext()
- .getService(
- org.eclipse.osbp.ecview.core.common.binding.IECViewBindingManager.class
- .getName());
+ .getService(org.eclipse.osbp.ecview.core.common.binding.IECViewBindingManager.class.getName());
if (bindingManager != null) {
// bind the value of yText to textRidget
- IObservableValue modelObservable = EMFObservables.observeValue(
- model, modelFeature);
- IObservableValue uiObservable = VaadinObservables
- .observeIcon(field);
+ IObservableValue modelObservable = EMFObservables.observeValue(model, modelFeature);
+ IObservableValue uiObservable = VaadinObservables.observeIcon(field);
return bindingManager.bindValue(uiObservable, modelObservable,
new UpdateValueStrategy(UpdateValueStrategy.POLICY_UPDATE),
new UpdateValueStrategy(UpdateValueStrategy.POLICY_UPDATE));
@@ -621,18 +613,14 @@
* the property
* @return the binding
*/
- protected Binding createBindingsByAccessor(EObject model,
- EStructuralFeature modelFeature, Field<?> field, String property) {
+ protected Binding createBindingsByAccessor(EObject model, EStructuralFeature modelFeature, Field<?> field,
+ String property) {
IBindingManager bindingManager = getViewContext()
- .getService(
- org.eclipse.osbp.ecview.core.common.binding.IECViewBindingManager.class
- .getName());
+ .getService(org.eclipse.osbp.ecview.core.common.binding.IECViewBindingManager.class.getName());
if (bindingManager != null) {
// bind the value of yText to textRidget
- IObservableValue modelObservable = EMFObservables.observeValue(
- model, modelFeature);
- IObservableValue uiObservable = VaadinProperties.accessor(
- Slider.class, property).observe(field);
+ IObservableValue modelObservable = EMFObservables.observeValue(model, modelFeature);
+ IObservableValue uiObservable = VaadinProperties.accessor(Slider.class, property).observe(field);
return bindingManager.bindValue(uiObservable, modelObservable,
new UpdateValueStrategy(UpdateValueStrategy.POLICY_UPDATE),
new UpdateValueStrategy(UpdateValueStrategy.POLICY_UPDATE));
@@ -640,6 +628,19 @@
return null;
}
+ protected Binding createBindingsByAccessor(EObject model, EStructuralFeature modelFeature, Object field,
+ String property, UpdateValueStrategy targetToModel, UpdateValueStrategy modelToTarget) {
+ IBindingManager bindingManager = getViewContext()
+ .getService(org.eclipse.osbp.ecview.core.common.binding.IECViewBindingManager.class.getName());
+ if (bindingManager != null) {
+ // bind the value of yText to textRidget
+ IObservableValue modelObservable = EMFObservables.observeValue(model, modelFeature);
+ IObservableValue uiObservable = VaadinProperties.accessor(field.getClass(), property).observe(field);
+ return bindingManager.bindValue(uiObservable, modelObservable, targetToModel, modelToTarget);
+ }
+ return null;
+ }
+
/**
* Creates a binding for the value attribute from the ECView-UI-model to the
* UI element.
@@ -652,8 +653,7 @@
* the field
* @return Binding - the created binding
*/
- protected Binding createBindingsButtonClick(EObject model,
- EStructuralFeature modelFeature, Button field) {
+ protected Binding createBindingsButtonClick(EObject model, EStructuralFeature modelFeature, Button field) {
return createBindingsButtonClick(model, modelFeature, field, null, null);
}
@@ -672,21 +672,15 @@
* the model to target
* @return Binding - the created binding
*/
- protected Binding createBindingsButtonClick(EObject model,
- EStructuralFeature modelFeature, Button field,
+ protected Binding createBindingsButtonClick(EObject model, EStructuralFeature modelFeature, Button field,
UpdateValueStrategy targetToModel, UpdateValueStrategy modelToTarget) {
IBindingManager bindingManager = getViewContext()
- .getService(
- org.eclipse.osbp.ecview.core.common.binding.IECViewBindingManager.class
- .getName());
+ .getService(org.eclipse.osbp.ecview.core.common.binding.IECViewBindingManager.class.getName());
if (bindingManager != null) {
// bind the value of yText to textRidget
- IObservableValue modelObservable = EMFObservables.observeValue(
- model, modelFeature);
- IObservableValue uiObservable = VaadinObservables
- .observeButtonClick(field);
- return bindingManager.bindValue(uiObservable, modelObservable,
- targetToModel, modelToTarget);
+ IObservableValue modelObservable = EMFObservables.observeValue(model, modelFeature);
+ IObservableValue uiObservable = VaadinObservables.observeButtonClick(field);
+ return bindingManager.bindValue(uiObservable, modelObservable, targetToModel, modelToTarget);
}
return null;
}
@@ -703,8 +697,7 @@
* the field
* @return Binding - the created binding
*/
- protected Binding createBindings_Value(EObject model,
- EStructuralFeature modelFeature, ValueChangeNotifier field) {
+ protected Binding createBindings_Value(EObject model, EStructuralFeature modelFeature, ValueChangeNotifier field) {
return createBindingsValue(model, modelFeature, field, null, null);
}
@@ -723,21 +716,15 @@
* the model to target
* @return Binding - the created binding
*/
- protected Binding createBindingsValue(EObject model,
- EStructuralFeature modelFeature, ValueChangeNotifier field,
+ protected Binding createBindingsValue(EObject model, EStructuralFeature modelFeature, ValueChangeNotifier field,
UpdateValueStrategy targetToModel, UpdateValueStrategy modelToTarget) {
IBindingManager bindingManager = getViewContext()
- .getService(
- org.eclipse.osbp.ecview.core.common.binding.IECViewBindingManager.class
- .getName());
+ .getService(org.eclipse.osbp.ecview.core.common.binding.IECViewBindingManager.class.getName());
if (bindingManager != null) {
// bind the value of yText to textRidget
- IObservableValue modelObservable = EMFObservables.observeValue(
- model, modelFeature);
- IObservableValue uiObservable = VaadinObservables
- .observeValue(field);
- return bindingManager.bindValue(uiObservable, modelObservable,
- targetToModel, modelToTarget);
+ IObservableValue modelObservable = EMFObservables.observeValue(model, modelFeature);
+ IObservableValue uiObservable = VaadinObservables.observeValue(field);
+ return bindingManager.bindValue(uiObservable, modelObservable, targetToModel, modelToTarget);
}
return null;
}
@@ -758,19 +745,14 @@
* the type of selected object
* @return Binding - the created binding
*/
- protected Binding createBindingsSelection(EObject model,
- EStructuralFeature modelFeature, final AbstractSelect field,
- Class<?> type) {
+ protected Binding createBindingsSelection(EObject model, EStructuralFeature modelFeature,
+ final AbstractSelect field, Class<?> type) {
IBindingManager bindingManager = getViewContext()
- .getService(
- org.eclipse.osbp.ecview.core.common.binding.IECViewBindingManager.class
- .getName());
+ .getService(org.eclipse.osbp.ecview.core.common.binding.IECViewBindingManager.class.getName());
if (bindingManager != null) {
// bind the value of yText to textRidget
- IObservableValue modelObservable = EMFObservables.observeValue(
- model, modelFeature);
- IObservableValue uiObservable = VaadinObservables
- .observeSingleSelection(field, type);
+ IObservableValue modelObservable = EMFObservables.observeValue(model, modelFeature);
+ IObservableValue uiObservable = VaadinObservables.observeSingleSelection(field, type);
// create a modelToTarget update strategy with a validator
//
@@ -788,8 +770,7 @@
Converter converter = field.getConverter();
if (converter != null) {
try {
- convertedValue = converter.convertToPresentation(
- value, converter.getPresentationType(),
+ convertedValue = converter.convertToPresentation(value, converter.getPresentationType(),
getLocale());
} catch (ConversionException e) {
LOGGER.error("{}", e);
@@ -804,16 +785,14 @@
}
});
- final Binding binding = bindingManager.bindValue(uiObservable,
- modelObservable, null, modelToTarget);
+ final Binding binding = bindingManager.bindValue(uiObservable, modelObservable, null, modelToTarget);
registerBinding(binding);
// now bind the validation state to an observable value. If the
// doSetValue is called, we check whether the set operation was
// successfully. Otherwise we send the target value back to the
// model.
- Binding validationBinding = bindingManager.bindValue(
- binding.getValidationStatus(),
+ Binding validationBinding = bindingManager.bindValue(binding.getValidationStatus(),
new AbstractObservableValue() {
@Override
@@ -857,22 +836,16 @@
* the type contained in the selection result
* @return Binding - the created binding
*/
- protected Binding createBindingsMultiSelection(EObject model,
- EStructuralFeature modelFeature, final AbstractSelect field,
- Class<?> collectionType) {
+ protected Binding createBindingsMultiSelection(EObject model, EStructuralFeature modelFeature,
+ final AbstractSelect field, Class<?> collectionType) {
IBindingManager bindingManager = getViewContext()
- .getService(
- org.eclipse.osbp.ecview.core.common.binding.IECViewBindingManager.class
- .getName());
+ .getService(org.eclipse.osbp.ecview.core.common.binding.IECViewBindingManager.class.getName());
if (bindingManager != null) {
// bind the value of yText to textRidget
- IObservableList modelObservable = EMFProperties.list(modelFeature)
- .observe(getModel());
- IVaadinObservableList uiObservable = VaadinObservables
- .observeMultiSelectionAsList(field, collectionType);
+ IObservableList modelObservable = EMFProperties.list(modelFeature).observe(getModel());
+ IVaadinObservableList uiObservable = VaadinObservables.observeMultiSelectionAsList(field, collectionType);
- final Binding binding = bindingManager.bindList(uiObservable,
- modelObservable, null, null);
+ final Binding binding = bindingManager.bindList(uiObservable, modelObservable, null, null);
registerBinding(binding);
return binding;
@@ -894,11 +867,9 @@
* the type of the collection contents
* @return Binding - the created binding
*/
- protected Binding createBindings_ContainerContents(EObject model,
- EStructuralFeature modelFeature,
+ protected Binding createBindings_ContainerContents(EObject model, EStructuralFeature modelFeature,
Container.ItemSetChangeNotifier field, Class<?> collectionType) {
- return createBindingsContainerContents(model, modelFeature, field,
- collectionType, null, null);
+ return createBindingsContainerContents(model, modelFeature, field, collectionType, null, null);
}
/**
@@ -919,55 +890,37 @@
* the update strategy
* @return Binding - the created binding
*/
- protected Binding createBindingsContainerContents(EObject model,
- EStructuralFeature modelFeature,
- Container.ItemSetChangeNotifier field, Class<?> collectionType,
- UpdateListStrategy targetToModel, UpdateListStrategy modelToTarget) {
+ protected Binding createBindingsContainerContents(EObject model, EStructuralFeature modelFeature,
+ Container.ItemSetChangeNotifier field, Class<?> collectionType, UpdateListStrategy targetToModel,
+ UpdateListStrategy modelToTarget) {
IBindingManager bindingManager = getViewContext()
- .getService(
- org.eclipse.osbp.ecview.core.common.binding.IECViewBindingManager.class
- .getName());
+ .getService(org.eclipse.osbp.ecview.core.common.binding.IECViewBindingManager.class.getName());
if (bindingManager != null) {
// bind the value of yText to textRidget
- IObservableList modelObservable = EMFProperties.list(modelFeature)
- .observe(getModel());
- IObservableList uiObservable = VaadinObservables
- .observeContainerItemSetContents(field, collectionType);
- return bindingManager.bindList(uiObservable, modelObservable,
- targetToModel, modelToTarget);
+ IObservableList modelObservable = EMFProperties.list(modelFeature).observe(getModel());
+ IObservableList uiObservable = VaadinObservables.observeContainerItemSetContents(field, collectionType);
+ return bindingManager.bindList(uiObservable, modelObservable, targetToModel, modelToTarget);
}
return null;
}
- protected Binding createBindingsContainerContents(EObject model,
- EStructuralFeature modelFeature,
- Container.ItemSetChangeNotifier field, Class<?> collectionType,
- boolean containerReadonly) {
+ protected Binding createBindingsContainerContents(EObject model, EStructuralFeature modelFeature,
+ Container.ItemSetChangeNotifier field, Class<?> collectionType, boolean containerReadonly) {
IBindingManager bindingManager = getViewContext()
- .getService(
- org.eclipse.osbp.ecview.core.common.binding.IECViewBindingManager.class
- .getName());
+ .getService(org.eclipse.osbp.ecview.core.common.binding.IECViewBindingManager.class.getName());
if (bindingManager != null) {
// bind the value of yText to textRidget
- IObservableList modelObservable = EMFProperties.list(modelFeature)
- .observe(getModel());
- IObservableList uiObservable = VaadinObservables
- .observeContainerItemSetContents(field, collectionType);
+ IObservableList modelObservable = EMFProperties.list(modelFeature).observe(getModel());
+ IObservableList uiObservable = VaadinObservables.observeContainerItemSetContents(field, collectionType);
if (containerReadonly) {
- return bindingManager
- .bindList(uiObservable, modelObservable,
- new UpdateListStrategy(
- UpdateListStrategy.POLICY_UPDATE),
- new UpdateListStrategy(
- UpdateListStrategy.POLICY_NEVER));
+ return bindingManager.bindList(uiObservable, modelObservable,
+ new UpdateListStrategy(UpdateListStrategy.POLICY_UPDATE),
+ new UpdateListStrategy(UpdateListStrategy.POLICY_NEVER));
} else {
- return bindingManager
- .bindList(uiObservable, modelObservable,
- new UpdateListStrategy(
- UpdateListStrategy.POLICY_UPDATE),
- new UpdateListStrategy(
- UpdateListStrategy.POLICY_UPDATE));
+ return bindingManager.bindList(uiObservable, modelObservable,
+ new UpdateListStrategy(UpdateListStrategy.POLICY_UPDATE),
+ new UpdateListStrategy(UpdateListStrategy.POLICY_UPDATE));
}
}
return null;
@@ -1055,8 +1008,7 @@
* the bindable value
* @return the i observable
*/
- protected IObservable internalGetObservableEndpoint(
- YEmbeddableBindingEndpoint bindableValue) {
+ protected IObservable internalGetObservableEndpoint(YEmbeddableBindingEndpoint bindableValue) {
throw new UnsupportedOperationException("Must be overridden!");
}
@@ -1074,13 +1026,14 @@
/*
* (non-Javadoc)
*
- * @see
- * org.eclipse.osbp.runtime.common.dispose.AbstractDisposable#internalDispose
- * ()
+ * @see org.eclipse.osbp.runtime.common.dispose.AbstractDisposable#
+ * internalDispose ()
*/
@Override
protected void internalDispose() {
unregisterFromLocaleChangedService();
+
+ component = null;
}
/**
@@ -1101,6 +1054,36 @@
focusable.setTabIndex(yFocusable.getTabIndex());
}
}
+
+ if (component instanceof FocusNotifier && model instanceof YFocusNotifier) {
+ ((FocusNotifier) component).addFocusListener(e -> {
+ YEmbeddableEvent event = CoreModelFactory.eINSTANCE.createYEmbeddableEvent();
+ event.setTime(new Date());
+ event.setEmbeddable((YEmbeddable) getModel());
+ event.setRawEvent(e);
+ ((YFocusNotifier) model).setLastFocusEvent(event);
+ });
+ }
+
+ if (component instanceof BlurNotifier && model instanceof YBlurNotifier) {
+ ((BlurNotifier) component).addBlurListener(e -> {
+ YEmbeddableEvent event = CoreModelFactory.eINSTANCE.createYEmbeddableEvent();
+ event.setTime(new Date());
+ event.setEmbeddable((YEmbeddable) getModel());
+ event.setRawEvent(e);
+ ((YBlurNotifier) model).setLastBlurEvent(event);
+ });
+ }
+
+ if (component instanceof ContextClickNotifier && model instanceof YEmbeddable) {
+ ((ContextClickNotifier) component).addContextClickListener(e -> {
+ YContextClickEvent event = CoreModelFactory.eINSTANCE.createYContextClickEvent();
+ event.setTime(new Date());
+ event.setEmbeddable((YEmbeddable) getModel());
+ event.setRawEvent(e);
+ ((YEmbeddable) model).setLastContextClick(event);
+ });
+ }
}
/**
@@ -1133,8 +1116,7 @@
* Locale change events are catched by that class.
*/
protected void registerAtLocaleChangedService() {
- localeChangedService = getViewContext().getService(
- ILocaleChangedService.ID);
+ localeChangedService = getViewContext().getService(ILocaleChangedService.ID);
localeChangedService.addLocaleListener(this);
}
@@ -1163,11 +1145,9 @@
* Send a dispose lifecycle event to all registered listeners.
*/
protected void sendDisposedLifecycleEvent() {
- ILifecycleService service = getViewContext().getService(
- ILifecycleService.class.getName());
+ ILifecycleService service = getViewContext().getService(ILifecycleService.class.getName());
if (service != null) {
- service.notifyLifecycle(new LifecycleEvent(getEditpart(),
- ILifecycleEvent.TYPE_DISPOSED));
+ service.notifyLifecycle(new LifecycleEvent(getEditpart(), ILifecycleEvent.TYPE_DISPOSED));
}
}
@@ -1175,11 +1155,9 @@
* Send a rendered lifecycle event to all registered listeners.
*/
protected void sendRenderedLifecycleEvent() {
- ILifecycleService service = getViewContext().getService(
- ILifecycleService.class.getName());
+ ILifecycleService service = getViewContext().getService(ILifecycleService.class.getName());
if (service != null) {
- service.notifyLifecycle(new LifecycleEvent(getEditpart(),
- ILifecycleEvent.TYPE_RENDERED));
+ service.notifyLifecycle(new LifecycleEvent(getEditpart(), ILifecycleEvent.TYPE_RENDERED));
}
}
@@ -1187,11 +1165,9 @@
* Send a rendered lifecycle event to all registered listeners.
*/
protected void sendUnrenderedLifecycleEvent() {
- ILifecycleService service = getViewContext().getService(
- ILifecycleService.class.getName());
+ ILifecycleService service = getViewContext().getService(ILifecycleService.class.getName());
if (service != null) {
- service.notifyLifecycle(new LifecycleEvent(getEditpart(),
- ILifecycleEvent.TYPE_UNRENDERED));
+ service.notifyLifecycle(new LifecycleEvent(getEditpart(), ILifecycleEvent.TYPE_UNRENDERED));
}
}
@@ -1257,8 +1233,7 @@
return LayoutDragMode.NONE;
}
- return service.isDesignMode() ? LayoutDragMode.CLONE
- : LayoutDragMode.NONE;
+ return service.isDesignMode() ? LayoutDragMode.CLONE : LayoutDragMode.NONE;
}
/**
@@ -1287,8 +1262,7 @@
designService.removeListener((IDesignListener) this);
}
- IWidgetDesignConfigurator service = getViewContext().getService(
- IWidgetDesignConfigurator.class.getName());
+ IWidgetDesignConfigurator service = getViewContext().getService(IWidgetDesignConfigurator.class.getName());
if (service != null && getWidget() != null) {
service.configure(getWidget(), (YEmbeddable) getModel(), false);
}
@@ -1537,8 +1511,7 @@
public void applyForegroundColor(YVisibilityProperties yProps) {
YColor yColor = yProps.getForegroundColor();
if (yColor != null) {
- component.addStyleName("l-foreground-"
- + yColor.getName().toLowerCase());
+ component.addStyleName("l-foreground-" + yColor.getName().toLowerCase());
}
}
@@ -1551,19 +1524,24 @@
public void applyBackgroundColor(YVisibilityProperties yProps) {
YColor yColor = yProps.getBackgroundColor();
if (yColor != null) {
- component.addStyleName("l-background-"
- + yColor.getName().toLowerCase());
+ component.addStyleName("l-background-" + yColor.getName().toLowerCase());
}
}
}
private class LabelAdapter extends AdapterImpl {
-
@Override
public void notifyChanged(Notification msg) {
if (msg.getFeature() == CoreModelPackage.Literals.YEMBEDDABLE__LABEL_I1_8N_KEY
|| msg.getFeature() == CoreModelPackage.Literals.YEMBEDDABLE__LABEL) {
doUpdateLocale(getLocale());
+ } else if (msg.getFeature() == CoreModelPackage.Literals.YCSS_ABLE__CSS_CLASS) {
+ if (msg.getEventType() == Notification.SET) {
+ doUnSetStyle(msg.getOldStringValue());
+ doSetStyle(msg.getNewStringValue());
+ } else {
+ doUnSetStyle(msg.getOldStringValue());
+ }
}
}
diff --git a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/common/FilteringComponentEmbeddable.java b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/common/FilteringComponentEmbeddable.java
new file mode 100644
index 0000000..28852bc
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/common/FilteringComponentEmbeddable.java
@@ -0,0 +1,186 @@
+package org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.common;
+
+import java.util.Locale;
+import java.util.function.Consumer;
+
+import javax.annotation.PreDestroy;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.impl.AdapterImpl;
+import org.eclipse.osbp.ecview.core.common.beans.AbstractSlot;
+import org.eclipse.osbp.ecview.core.common.context.ContextException;
+import org.eclipse.osbp.ecview.core.common.context.IViewContext;
+import org.eclipse.osbp.ecview.core.common.model.core.CoreModelFactory;
+import org.eclipse.osbp.ecview.core.common.model.core.YAlignment;
+import org.eclipse.osbp.ecview.core.common.model.core.YView;
+import org.eclipse.osbp.ecview.core.common.util.ECViewUtil;
+import org.eclipse.osbp.ecview.core.extension.model.extension.ExtensionModelFactory;
+import org.eclipse.osbp.ecview.core.extension.model.extension.ExtensionModelPackage;
+import org.eclipse.osbp.ecview.core.extension.model.extension.YFilteringComponent;
+import org.eclipse.osbp.ecview.core.extension.model.extension.YVerticalLayout;
+import org.eclipse.osbp.ecview.core.extension.model.extension.YVerticalLayoutCellStyle;
+import org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.VaadinRenderer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.vaadin.data.Container.Filter;
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.VerticalLayout;
+
+@SuppressWarnings("serial")
+public class FilteringComponentEmbeddable<T> extends CustomComponent {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(FilteringComponentEmbeddable.class);
+
+ private final Class<T> type;
+ private final int depth;
+
+ private boolean hideGrid;
+ private IViewContext viewContext;
+ private Consumer<T> acceptConsumer;
+ private YFilteringComponent yFilteringComp;
+ private int filterCols;
+
+ private Consumer<Filter> acceptFilterConsumer;
+
+ public FilteringComponentEmbeddable(Class<T> type, int depth) {
+ this(type, depth, 2);
+ }
+
+ public FilteringComponentEmbeddable(Class<T> type, int depth, int filterCols) {
+ this.type = type;
+ this.depth = depth;
+ this.filterCols = filterCols;
+ }
+
+ /**
+ * This consumer forwards the accept operation. Eg to forward the selection
+ * to the EventBroker.
+ *
+ * @param acceptConsumer
+ */
+ public void setAcceptCallback(Consumer<T> acceptConsumer) {
+ this.acceptConsumer = acceptConsumer;
+ }
+
+ /**
+ * If the filter is accepted, then this consumer is called.
+ *
+ * @param acceptFilterConsumer
+ */
+ public void setFilterAcceptedCallback(Consumer<Filter> acceptFilterConsumer) {
+ this.acceptFilterConsumer = acceptFilterConsumer;
+ }
+
+ /**
+ * Hides the grid.
+ * @return
+ */
+ public boolean isHideGrid() {
+ return hideGrid;
+ }
+
+ /**
+ * Hides the grid.
+ * @param hideGrid
+ */
+ public void setHideGrid(boolean hideGrid) {
+ this.hideGrid = hideGrid;
+ }
+
+ public void init(Locale locale) {
+ VerticalLayout content = new VerticalLayout();
+ content.setMargin(true);
+ content.setSpacing(true);
+ setCompositionRoot(content);
+
+ VerticalLayout renderTarget = new VerticalLayout();
+
+ content.addComponent(renderTarget);
+ content.setExpandRatio(renderTarget, 1.0f);
+
+ YView yView = createViewModel();
+
+ VaadinRenderer renderer = new VaadinRenderer();
+ try {
+ viewContext = renderer.render(renderTarget, yView, null);
+ } catch (ContextException e1) {
+ LOGGER.error("{}", e1);
+ }
+ viewContext.setLocale(locale);
+
+ // create the bean slot eager
+ AbstractSlot slot = (AbstractSlot) viewContext.createBeanSlot(yFilteringComp.getSelectionBeanSlotName(), type);
+ slot.addPropertyChangeListener(e -> {
+ if (acceptConsumer != null) {
+ @SuppressWarnings("unchecked")
+ T selection = (T) viewContext.getBean(yFilteringComp.getSelectionBeanSlotName());
+ acceptConsumer.accept(selection);
+ }
+ });
+ }
+
+ /**
+ * Returns the filter.
+ *
+ * @return
+ */
+ public Filter getFilter() {
+ return (Filter) yFilteringComp.getFilter();
+ }
+
+ private YView createViewModel() {
+
+ CoreModelFactory coreModelFactory = CoreModelFactory.eINSTANCE;
+ ExtensionModelFactory modelFactory = ExtensionModelFactory.eINSTANCE;
+
+ YView view = coreModelFactory.createYView();
+ view.setMargin(false);
+
+ YVerticalLayout content = modelFactory.createYVerticalLayout();
+ view.setContent(content);
+
+ content.setMargin(false);
+ content.setSpacing(false);
+
+ yFilteringComp = modelFactory.createYFilteringComponent();
+ yFilteringComp.setMargin(false);
+ yFilteringComp.setSpacing(false);
+ yFilteringComp.setHideGrid(hideGrid);
+
+ CustomAdapter adapter = new CustomAdapter();
+ yFilteringComp.eAdapters().add(adapter);
+
+ content.getElements().add(yFilteringComp);
+ YVerticalLayoutCellStyle cellStyle = content.addCellStyle(yFilteringComp);
+ cellStyle.setAlignment(YAlignment.FILL_FILL);
+
+ yFilteringComp.setFilterCols(filterCols);
+ ECViewUtil.fill(type, depth, yFilteringComp);
+
+ return view;
+ }
+
+ @PreDestroy
+ public void dispose() {
+ if (viewContext != null) {
+ viewContext.dispose();
+ viewContext = null;
+ }
+ }
+
+ public IViewContext getViewContext() {
+ return viewContext;
+ }
+
+ class CustomAdapter extends AdapterImpl {
+ @Override
+ public void notifyChanged(Notification notification) {
+ if (notification.getFeature() == ExtensionModelPackage.Literals.YFILTERING_COMPONENT__FILTER) {
+ if (acceptFilterConsumer != null) {
+ acceptFilterConsumer.accept(getFilter());
+ }
+ }
+ }
+ }
+}
diff --git a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/common/KanbanBoardEmbeddable.java b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/common/KanbanBoardEmbeddable.java
new file mode 100644
index 0000000..8eec13f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/common/KanbanBoardEmbeddable.java
@@ -0,0 +1,152 @@
+package org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.common;
+
+import java.util.Locale;
+import java.util.function.Consumer;
+
+import javax.annotation.PreDestroy;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.impl.AdapterImpl;
+import org.eclipse.osbp.ecview.core.common.context.ContextException;
+import org.eclipse.osbp.ecview.core.common.context.IViewContext;
+import org.eclipse.osbp.ecview.core.common.model.core.CoreModelFactory;
+import org.eclipse.osbp.ecview.core.common.model.core.YAlignment;
+import org.eclipse.osbp.ecview.core.common.model.core.YView;
+import org.eclipse.osbp.ecview.core.extension.model.extension.ExtensionModelFactory;
+import org.eclipse.osbp.ecview.core.extension.model.extension.ExtensionModelPackage;
+import org.eclipse.osbp.ecview.core.extension.model.extension.YKanban;
+import org.eclipse.osbp.ecview.core.extension.model.extension.YKanbanEvent;
+import org.eclipse.osbp.ecview.core.extension.model.extension.YVerticalLayout;
+import org.eclipse.osbp.ecview.core.extension.model.extension.YVerticalLayoutCellStyle;
+import org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.VaadinRenderer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.VerticalLayout;
+
+@SuppressWarnings("serial")
+public class KanbanBoardEmbeddable extends CustomComponent {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(KanbanBoardEmbeddable.class);
+
+ private final Class<?> type;
+ private final String dialogId;
+ private final String cardId;
+
+ private IViewContext viewContext;
+ private YKanban yKanban;
+ private Consumer<YKanbanEvent> doubleClickConsumer;
+ private Consumer<YKanbanEvent> stateChangedConsumer;
+
+ public KanbanBoardEmbeddable(Class<?> type, String dialogId, String cardId) {
+ this.type = type;
+ this.dialogId = dialogId;
+ this.cardId = cardId;
+ }
+
+ public void init(Locale locale) {
+ VerticalLayout content = new VerticalLayout();
+ content.setMargin(true);
+ content.setSpacing(true);
+ setCompositionRoot(content);
+
+ VerticalLayout renderTarget = new VerticalLayout();
+
+ content.addComponent(renderTarget);
+ content.setExpandRatio(renderTarget, 1.0f);
+
+ YView yView = createViewModel();
+
+ VaadinRenderer renderer = new VaadinRenderer();
+ try {
+ viewContext = renderer.render(renderTarget, yView, null);
+ } catch (ContextException e1) {
+ LOGGER.error("{}", e1);
+ }
+ viewContext.setLocale(locale);
+ }
+
+ private YView createViewModel() {
+
+ CoreModelFactory coreModelFactory = CoreModelFactory.eINSTANCE;
+ ExtensionModelFactory modelFactory = ExtensionModelFactory.eINSTANCE;
+
+ YView view = coreModelFactory.createYView();
+ view.setMargin(false);
+
+ YVerticalLayout content = modelFactory.createYVerticalLayout();
+ view.setContent(content);
+
+ content.setMargin(false);
+ content.setSpacing(false);
+
+ yKanban = modelFactory.createYKanban();
+ yKanban.setCardECViewId(cardId);
+ yKanban.setEditDialogId(dialogId);
+
+ content.getElements().add(yKanban);
+ YVerticalLayoutCellStyle cellStyle = content.addCellStyle(yKanban);
+ cellStyle.setAlignment(YAlignment.FILL_FILL);
+
+ yKanban.setType(type);
+ yKanban.setTypeQualifiedName(type.getCanonicalName());
+
+ yKanban.eAdapters().add(new AdapterCustom());
+
+ return view;
+ }
+
+ public Consumer<YKanbanEvent> getDoubleClickConsumer() {
+ return doubleClickConsumer;
+ }
+
+ public void setDoubleClickConsumer(Consumer<YKanbanEvent> doubleClickConsumer) {
+ this.doubleClickConsumer = doubleClickConsumer;
+ }
+
+ public Consumer<YKanbanEvent> getStateChangedConsumer() {
+ return stateChangedConsumer;
+ }
+
+ public void setStateChangedConsumer(Consumer<YKanbanEvent> stateChangedConsumer) {
+ this.stateChangedConsumer = stateChangedConsumer;
+ }
+
+ @PreDestroy
+ public void dispose() {
+ if (viewContext != null) {
+ viewContext.dispose();
+ viewContext = null;
+ }
+ }
+
+ public IViewContext getViewContext() {
+ return viewContext;
+ }
+
+ /**
+ * Refreshes the given card.
+ *
+ * @param dto
+ */
+ public void refreshCard(Object dto) {
+ yKanban.setToRefresh(new YKanbanEvent(dto));
+ }
+
+ private class AdapterCustom extends AdapterImpl {
+ @Override
+ public void notifyChanged(Notification msg) {
+ if (msg.getFeature() == ExtensionModelPackage.Literals.YKANBAN__STATE_CHANGED) {
+ if (stateChangedConsumer != null) {
+ stateChangedConsumer.accept((YKanbanEvent) msg.getNewValue());
+ }
+ } else if (msg.getFeature() == ExtensionModelPackage.Literals.YKANBAN__DOUBLE_CLICKED) {
+ if (doubleClickConsumer != null) {
+ doubleClickConsumer.accept((YKanbanEvent) msg.getNewValue());
+ }
+ }
+ }
+ }
+
+}
diff --git a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/BeanReferenceFieldPresentation.java b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/BeanReferenceFieldPresentation.java
index 3868196..1a5acab 100644
--- a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/BeanReferenceFieldPresentation.java
+++ b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/BeanReferenceFieldPresentation.java
@@ -15,15 +15,26 @@
import org.eclipse.core.databinding.observable.IObservable;
import org.eclipse.core.databinding.observable.value.IObservableValue;
import org.eclipse.emf.databinding.EMFObservables;
+import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.osbp.ecview.core.common.beans.InMemoryBeanProvider;
+import org.eclipse.osbp.ecview.core.common.context.ContextException;
+import org.eclipse.osbp.ecview.core.common.context.IViewContext;
import org.eclipse.osbp.ecview.core.common.editpart.IElementEditpart;
+import org.eclipse.osbp.ecview.core.common.model.core.CoreModelFactory;
+import org.eclipse.osbp.ecview.core.common.model.core.YAlignment;
import org.eclipse.osbp.ecview.core.common.model.core.YEmbeddableBindingEndpoint;
import org.eclipse.osbp.ecview.core.common.model.core.YEmbeddableValueEndpoint;
+import org.eclipse.osbp.ecview.core.common.model.core.YView;
+import org.eclipse.osbp.ecview.core.extension.model.extension.ExtensionModelFactory;
import org.eclipse.osbp.ecview.core.extension.model.extension.ExtensionModelPackage;
import org.eclipse.osbp.ecview.core.extension.model.extension.YBeanReferenceField;
+import org.eclipse.osbp.ecview.core.extension.model.extension.YFilteringComponent;
+import org.eclipse.osbp.ecview.core.extension.model.extension.YVerticalLayout;
+import org.eclipse.osbp.ecview.core.extension.model.extension.YVerticalLayoutCellStyle;
import org.eclipse.osbp.ecview.core.ui.core.editparts.extension.IBeanReferenceFieldEditpart;
import org.eclipse.osbp.runtime.common.annotations.TargetEnumConstraints;
import org.eclipse.osbp.runtime.common.state.ISharedStateContext;
+import org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.VaadinRenderer;
import org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.common.AbstractFieldWidgetPresenter;
import org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.internal.util.Util;
import org.eclipse.osbp.runtime.web.vaadin.common.data.IBeanSearchService;
@@ -37,9 +48,14 @@
import com.vaadin.data.Container.Filter;
import com.vaadin.server.ErrorMessage;
import com.vaadin.server.Resource;
+import com.vaadin.ui.Alignment;
+import com.vaadin.ui.Button;
import com.vaadin.ui.Component;
import com.vaadin.ui.ComponentContainer;
import com.vaadin.ui.Field;
+import com.vaadin.ui.UI;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
// TODO: Auto-generated Javadoc
/**
@@ -54,7 +70,9 @@
private final ModelAccess modelAccess;
/** The field. */
- private CustomField<?> field;
+ private CustomField<Object> field;
+
+ private DialogHandleImpl dialogHandle;
/**
* Constructor.
@@ -74,11 +92,13 @@
@Override
public Component doCreateWidget(Object parent) {
if (field == null) {
- IBeanSearchServiceFactory searchServiceFactory = getViewContext().getService(IBeanSearchServiceFactory.class.getName());
+ IBeanSearchServiceFactory searchServiceFactory = getViewContext()
+ .getService(IBeanSearchServiceFactory.class.getName());
IBeanSearchService<?> service = getSearchService(searchServiceFactory);
ISharedStateContext sharedState = getViewContext().getService(ISharedStateContext.class.getName());
- field = new CustomField(getEditpart().getId(), "", modelAccess.yField.getType(), service, createFilter(), sharedState);
+ field = new CustomField(getEditpart().getId(), "", modelAccess.yField.getType(), service, createFilter(),
+ sharedState);
field.addStyleName(CSS_CLASS_CONTROL);
field.setNullRepresentation("");
@@ -99,7 +119,6 @@
}
field.setNullSelectionAllowed(!modelAccess.yField.isRequired());
-
// creates the binding for the field
createBindings(modelAccess.yField, field);
@@ -107,6 +126,12 @@
field.addStyleName(modelAccess.getCssClass());
}
+ if (modelAccess.yField.getFilteringComponent() != null) {
+ dialogHandle = new DialogHandleImpl();
+ field.setDialogHandle(dialogHandle);
+ field.setUseDialog(true);
+ }
+
applyCaptions();
initializeField(field);
@@ -157,7 +182,8 @@
if (inMemoryProviderClass != null) {
try {
InMemoryBeanProvider provider = inMemoryProviderClass.newInstance();
- StatefulInMemoryBeanSearchService tempService = new StatefulInMemoryBeanSearchService(modelAccess.yField.getType());
+ StatefulInMemoryBeanSearchService tempService = new StatefulInMemoryBeanSearchService(
+ modelAccess.yField.getType());
tempService.addBeans(provider.getBeans());
service = tempService;
} catch (InstantiationException e) {
@@ -239,7 +265,8 @@
*/
protected IObservableValue internalGetValueEndpoint() {
// return the observable value for text
- return EMFObservables.observeValue(castEObject(getModel()), ExtensionModelPackage.Literals.YBEAN_REFERENCE_FIELD__VALUE);
+ return EMFObservables.observeValue(castEObject(getModel()),
+ ExtensionModelPackage.Literals.YBEAN_REFERENCE_FIELD__VALUE);
}
/**
@@ -252,7 +279,8 @@
*/
protected void createBindings(YBeanReferenceField yField, BeanReferenceField<?> field) {
// create the model binding from ridget to ECView-model
- registerBinding(createBindings_Value(castEObject(getModel()), ExtensionModelPackage.Literals.YBEAN_REFERENCE_FIELD__VALUE, field));
+ registerBinding(createBindings_Value(castEObject(getModel()),
+ ExtensionModelPackage.Literals.YBEAN_REFERENCE_FIELD__VALUE, field));
super.createBindings(yField, field, null);
}
@@ -304,6 +332,7 @@
}
field = null;
+ dialogHandle = null;
}
}
@@ -402,7 +431,7 @@
* the generic type
*/
@SuppressWarnings("serial")
- private class CustomField<M> extends BeanReferenceField<M> {
+ private class CustomField<M> extends BeanReferenceField<M> implements Component.Focusable {
/**
* Instantiates a new custom field.
@@ -420,17 +449,16 @@
* @param sharedState
* the shared state
*/
- public CustomField(String id, Object propertyId, Class<M> type, IBeanSearchService<M> searchService, Filter filter,
- ISharedStateContext sharedState) {
+ public CustomField(String id, Object propertyId, Class<M> type, IBeanSearchService<M> searchService,
+ Filter filter, ISharedStateContext sharedState) {
super(id, propertyId, type, searchService, filter, sharedState);
}
/*
* (non-Javadoc)
*
- * @see
- * org.eclipse.osbp.runtime.web.vaadin.components.fields.BeanReferenceField
- * #initContent()
+ * @see org.eclipse.osbp.runtime.web.vaadin.components.fields.
+ * BeanReferenceField #initContent()
*/
@Override
protected Component initContent() {
@@ -458,4 +486,78 @@
return message;
}
}
+
+ class DialogHandleImpl implements BeanReferenceField.DialogHandle {
+
+ CoreModelFactory coreModelFactory = CoreModelFactory.eINSTANCE;
+ ExtensionModelFactory modelFactory = ExtensionModelFactory.eINSTANCE;
+ private IViewContext dialogViewContext;
+
+ @Override
+ public void open() {
+ YView yView = getViewModel();
+
+ Window window = new Window();
+ window.setWidth("1350px");
+ window.setHeight("750px");
+ window.setClosable(true);
+ window.setModal(true);
+ VerticalLayout content = new VerticalLayout();
+ content.setMargin(true);
+ content.setSpacing(true);
+ content.setSizeFull();
+ window.setContent(content);
+
+ VerticalLayout renderTarget = new VerticalLayout();
+ renderTarget.setMargin(true);
+ renderTarget.setSpacing(true);
+ renderTarget.setSizeFull();
+ content.addComponent(renderTarget);
+ content.setExpandRatio(renderTarget, 1.0f);
+
+ UI ui = BeanReferenceFieldPresentation.this.field.getUI();
+ ui.addWindow(window);
+
+ VaadinRenderer renderer = new VaadinRenderer();
+ try {
+ dialogViewContext = renderer.render(renderTarget, yView, null);
+ } catch (ContextException e1) {
+ e1.printStackTrace();
+ }
+
+ Button accept = new Button("accept", e -> {
+ window.close();
+ Object selection = dialogViewContext
+ .getBean(modelAccess.yField.getFilteringComponent().getSelectionBeanSlotName());
+ field.setValue(selection);
+ });
+ content.addComponent(accept);
+ content.setComponentAlignment(accept, Alignment.BOTTOM_RIGHT);
+
+ window.center();
+
+ dialogViewContext.setLocale(getLocale());
+
+ }
+
+ protected YView getViewModel() {
+ YView yView = coreModelFactory.createYView();
+ YVerticalLayout yContent = modelFactory.createYVerticalLayout();
+ yView.setContent(yContent);
+
+ YFilteringComponent comp = EcoreUtil.copy(modelAccess.yField.getFilteringComponent());
+ yContent.getElements().add(comp);
+ YVerticalLayoutCellStyle cellStyle = yContent.addCellStyle(comp);
+ cellStyle.setAlignment(YAlignment.FILL_FILL);
+ return yView;
+ }
+
+ @Override
+ public void close() {
+ if (dialogViewContext != null) {
+ dialogViewContext.dispose();
+ }
+ }
+ }
+
}
diff --git a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/ButtonPresentation.java b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/ButtonPresentation.java
index fcddbdf..5474032 100644
--- a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/ButtonPresentation.java
+++ b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/ButtonPresentation.java
@@ -66,7 +66,7 @@
} else {
button.setId(getEditpart().getId());
}
-
+
initialize(button, getCastedModel());
// creates the binding for the field
diff --git a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/ComboBoxPresentation.java b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/ComboBoxPresentation.java
index 47b7a52..7fd33f5 100644
--- a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/ComboBoxPresentation.java
+++ b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/ComboBoxPresentation.java
@@ -50,19 +50,17 @@
* This presenter is responsible to render a combo box on the given layout.
*/
@SuppressWarnings("restriction")
-public class ComboBoxPresentation extends
- AbstractFieldWidgetPresenter<Component> {
+public class ComboBoxPresentation extends AbstractFieldWidgetPresenter<Component> {
/** The Constant LOGGER. */
- private static final Logger LOGGER = LoggerFactory
- .getLogger(ComboBoxPresentation.class);
+ private static final Logger LOGGER = LoggerFactory.getLogger(ComboBoxPresentation.class);
/** The model access. */
private final ModelAccess modelAccess;
-
+
/** The combo. */
private LazyLoadingComboBox combo;
-
+
/** The property. */
@SuppressWarnings("rawtypes")
private ObjectProperty property;
@@ -103,8 +101,7 @@
}
try {
- property = new ObjectProperty(null,
- modelAccess.yField.getType());
+ property = new ObjectProperty(null, modelAccess.yField.getModelSelectionType());
combo.setPropertyDataSource(property);
if (modelAccess.yField.getType() != null) {
@@ -114,41 +111,33 @@
combo.setContainerDataSource(datasource);
} else {
IBeanSearchServiceFactory factory = getViewContext()
- .getService(
- IBeanSearchServiceFactory.class
- .getName());
+ .getService(IBeanSearchServiceFactory.class.getName());
if (factory != null) {
ISharedStateContext sharedState = getViewContext()
- .getService(
- ISharedStateContext.class.getName());
+ .getService(ISharedStateContext.class.getName());
BeanServiceLazyLoadingContainer<?> datasource = new BeanServiceLazyLoadingContainer(
- factory.createService(modelAccess.yField
- .getType()),
- modelAccess.yField.getType(), sharedState);
+ factory.createService(modelAccess.yField.getType()), modelAccess.yField.getType(),
+ sharedState);
combo.setContainerDataSource(datasource);
}
}
}
- String itemCaptionProperty = modelAccess.yField
- .getCaptionProperty();
- if (itemCaptionProperty != null
- && !itemCaptionProperty.equals("")) {
+ String itemCaptionProperty = modelAccess.yField.getCaptionProperty();
+ if (itemCaptionProperty != null && !itemCaptionProperty.equals("")) {
combo.setItemCaptionPropertyId(itemCaptionProperty);
combo.setItemCaptionMode(ItemCaptionMode.PROPERTY);
Container container = combo.getContainerDataSource();
if (container instanceof Container.Sortable) {
Container.Sortable sortable = (Sortable) container;
- sortable.sort(new Object[] { itemCaptionProperty },
- new boolean[] { true });
+ sortable.sort(new Object[] { itemCaptionProperty }, new boolean[] { true });
}
} else {
combo.setItemCaptionMode(ItemCaptionMode.ID);
}
- String itemImageProperty = modelAccess.yField
- .getImageProperty();
+ String itemImageProperty = modelAccess.yField.getImageProperty();
if (itemImageProperty != null && !itemImageProperty.equals("")) {
combo.setItemIconPropertyId(itemImageProperty);
}
@@ -170,8 +159,11 @@
return combo;
}
- /* (non-Javadoc)
- * @see org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.common.AbstractVaadinWidgetPresenter#doUpdateLocale(java.util.Locale)
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.common.
+ * AbstractVaadinWidgetPresenter#doUpdateLocale(java.util.Locale)
*/
@Override
protected void doUpdateLocale(Locale locale) {
@@ -186,27 +178,31 @@
* Applies the labels to the widgets.
*/
protected void applyCaptions() {
- Util.applyCaptions(getI18nService(), modelAccess.getLabel(),
- modelAccess.getLabelI18nKey(), getLocale(), combo);
+ Util.applyCaptions(getI18nService(), modelAccess.getLabel(), modelAccess.getLabelI18nKey(), getLocale(), combo);
}
- /* (non-Javadoc)
- * @see org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.common.AbstractFieldWidgetPresenter#doGetField()
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.common.
+ * AbstractFieldWidgetPresenter#doGetField()
*/
@Override
protected Field<?> doGetField() {
return combo;
}
- /* (non-Javadoc)
- * @see org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.common.AbstractVaadinWidgetPresenter#internalGetObservableEndpoint(org.eclipse.osbp.ecview.core.common.model.core.YEmbeddableBindingEndpoint)
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.common.
+ * AbstractVaadinWidgetPresenter#internalGetObservableEndpoint(org.eclipse.
+ * osbp.ecview.core.common.model.core.YEmbeddableBindingEndpoint)
*/
@Override
- protected IObservable internalGetObservableEndpoint(
- YEmbeddableBindingEndpoint bindableValue) {
+ protected IObservable internalGetObservableEndpoint(YEmbeddableBindingEndpoint bindableValue) {
if (bindableValue == null) {
- throw new IllegalArgumentException(
- "BindableValue must not be null!");
+ throw new IllegalArgumentException("BindableValue must not be null!");
}
if (bindableValue instanceof YEmbeddableCollectionEndpoint) {
@@ -214,8 +210,7 @@
} else if (bindableValue instanceof YEmbeddableSelectionEndpoint) {
return internalGetSelectionEndpoint((YEmbeddableSelectionEndpoint) bindableValue);
}
- throw new IllegalArgumentException("Not a valid input: "
- + bindableValue);
+ throw new IllegalArgumentException("Not a valid input: " + bindableValue);
}
/**
@@ -225,9 +220,7 @@
*/
protected IObservableList internalGetCollectionEndpoint() {
// return the observable value for text
- return EMFProperties.list(
- ExtensionModelPackage.Literals.YCOMBO_BOX__COLLECTION).observe(
- getModel());
+ return EMFProperties.list(ExtensionModelPackage.Literals.YCOMBO_BOX__COLLECTION).observe(getModel());
}
/**
@@ -237,16 +230,13 @@
* the y endpoint
* @return the i observable value
*/
- protected IObservableValue internalGetSelectionEndpoint(
- YEmbeddableSelectionEndpoint yEndpoint) {
+ protected IObservableValue internalGetSelectionEndpoint(YEmbeddableSelectionEndpoint yEndpoint) {
- String attributePath = ECViewModelBindable.getAttributePath(
- ExtensionModelPackage.Literals.YCOMBO_BOX__SELECTION,
- yEndpoint.getAttributePath());
+ String attributePath = ECViewModelBindable
+ .getAttributePath(ExtensionModelPackage.Literals.YCOMBO_BOX__SELECTION, yEndpoint.getAttributePath());
// return the observable value for text
- return ECViewModelBindable.observeValue(castEObject(getModel()),
- attributePath, modelAccess.yField.getType(),
+ return ECViewModelBindable.observeValue(castEObject(getModel()), attributePath, modelAccess.yField.getType(),
modelAccess.yField.getEmfNsURI());
}
@@ -259,30 +249,38 @@
* the field
*/
protected void createBindings(YComboBox yField, LazyLoadingComboBox field) {
- // create the model binding from ridget to ECView-model
- registerBinding(createBindings_ContainerContents(
- castEObject(getModel()),
- ExtensionModelPackage.Literals.YCOMBO_BOX__COLLECTION, field,
- yField.getType()));
+
+ if (!modelAccess.yField.isUseBeanService()) {
+ // create the model binding from ridget to ECView-model
+ registerBinding(createBindings_ContainerContents(castEObject(getModel()),
+ ExtensionModelPackage.Literals.YCOMBO_BOX__COLLECTION, field, yField.getType()));
+ }
// create the model binding from ridget to ECView-model
registerBinding(createBindingsSelection(castEObject(getModel()),
- ExtensionModelPackage.Literals.YCOMBO_BOX__SELECTION, field,
- yField.getType()));
+ ExtensionModelPackage.Literals.YCOMBO_BOX__SELECTION, field, yField.getModelSelectionType()));
super.createBindings(yField, field, null);
}
- /* (non-Javadoc)
- * @see org.eclipse.osbp.ecview.core.common.presentation.IWidgetPresentation#getWidget()
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.osbp.ecview.core.common.presentation.IWidgetPresentation#
+ * getWidget()
*/
@Override
public Component getWidget() {
return combo;
}
- /* (non-Javadoc)
- * @see org.eclipse.osbp.ecview.core.common.presentation.IWidgetPresentation#isRendered()
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.osbp.ecview.core.common.presentation.IWidgetPresentation#
+ * isRendered()
*/
@Override
public boolean isRendered() {
@@ -327,7 +325,7 @@
* A helper class.
*/
private static class ModelAccess {
-
+
/** The y field. */
private final YComboBox yField;
@@ -386,8 +384,7 @@
* @return the label
*/
public String getLabel() {
- return yField.getDatadescription() != null ? yField
- .getDatadescription().getLabel() : null;
+ return yField.getDatadescription() != null ? yField.getDatadescription().getLabel() : null;
}
/**
@@ -396,8 +393,7 @@
* @return the label i18n key
*/
public String getLabelI18nKey() {
- return yField.getDatadescription() != null ? yField
- .getDatadescription().getLabelI18nKey() : null;
+ return yField.getDatadescription() != null ? yField.getDatadescription().getLabelI18nKey() : null;
}
}
@@ -407,16 +403,18 @@
*/
@SuppressWarnings("serial")
private static class CustomComboBox extends LazyLoadingComboBox {
-
+
/** The item icon property id. */
private Object itemIconPropertyId;
- /* (non-Javadoc)
- * @see com.vaadin.ui.AbstractSelect#setItemIconPropertyId(java.lang.Object)
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * com.vaadin.ui.AbstractSelect#setItemIconPropertyId(java.lang.Object)
*/
@Override
- public void setItemIconPropertyId(Object propertyId)
- throws IllegalArgumentException {
+ public void setItemIconPropertyId(Object propertyId) throws IllegalArgumentException {
if (propertyId == null) {
super.setItemIconPropertyId(propertyId);
} else if (!getContainerPropertyIds().contains(propertyId)) {
@@ -428,23 +426,25 @@
}
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see com.vaadin.ui.AbstractSelect#getItemIconPropertyId()
*/
public Object getItemIconPropertyId() {
- return itemIconPropertyId != null ? itemIconPropertyId : super
- .getItemIconPropertyId();
+ return itemIconPropertyId != null ? itemIconPropertyId : super.getItemIconPropertyId();
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see com.vaadin.ui.AbstractSelect#getItemIcon(java.lang.Object)
*/
public Resource getItemIcon(Object itemId) {
if (itemIconPropertyId == null) {
return super.getItemIcon(itemId);
} else {
- final Property<?> ip = getContainerProperty(itemId,
- getItemIconPropertyId());
+ final Property<?> ip = getContainerProperty(itemId, getItemIconPropertyId());
if (ip == null) {
return null;
}
diff --git a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/DateTimePresentation.java b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/DateTimePresentation.java
index 371d1c3..9c8d514 100644
--- a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/DateTimePresentation.java
+++ b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/DateTimePresentation.java
@@ -12,9 +12,7 @@
import java.text.DateFormat;
import java.text.SimpleDateFormat;
-import java.util.Arrays;
import java.util.Date;
-import java.util.List;
import java.util.Locale;
import org.eclipse.core.databinding.Binding;
@@ -424,9 +422,9 @@
public Info getInfo(YDateTimeDatatype yDt, Locale locale) {
if (yDt == null) {
- DateFormat formatter = DateFormat.getDateTimeInstance(DateFormat.DEFAULT, DateFormat.SHORT, locale);
+ DateFormat formatter = DateFormat.getDateInstance(DateFormat.DEFAULT, locale);
return new IDateFormatProvider.Info(((SimpleDateFormat)formatter).toPattern(),
- YDateTimeResolution.MINUTE);
+ YDateTimeResolution.DAY);
}
DateFormat formatter = DateFormat.getDateTimeInstance(DateFormat.DEFAULT, DateFormat.DEFAULT, locale);
@@ -465,13 +463,13 @@
dateFormat = filterFormat(pattern, "yyyy.MM.dd");
break;
case HOUR:
- dateFormat = filterFormat(pattern, "yyyy.MM.dd HH");
+ dateFormat = filterFormat(pattern, "yyyy.MM.dd hhHH");
break;
case MINUTE:
- dateFormat = filterFormat(pattern, "yyyy.MM.dd HH:mm");
+ dateFormat = filterFormat(pattern, "yyyy.MM.dd hhHH:mm");
break;
case SECOND:
- dateFormat = filterFormat(pattern, "yyyy.MM.dd HH:mm:ss");
+ dateFormat = filterFormat(pattern, "yyyy.MM.dd hhHH:mm:ss");
break;
default:
throw new IllegalArgumentException(resolution
@@ -520,7 +518,7 @@
// create a replacement pattern to remove remaining separators without formatting function
// rule: each separator must be surrounded by any filter-letter or blank to be valid
String invalidSeparators = "(?!["+filter+" ])([.:])(?!["+filter+" ])";
- return localizedPattern.replaceAll("[^"+filter+",.: ]", "").replaceAll(invalidBlanks, "").replaceAll(invalidSeparators, "");
+ return localizedPattern.replaceAll("[^"+filter+",.: ]", "").replaceAll(invalidBlanks, "").trim().replaceAll(invalidSeparators, "");
}
/**
diff --git a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/DecimalFieldPresentation.java b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/DecimalFieldPresentation.java
index 157b22b..2b4ac1b 100644
--- a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/DecimalFieldPresentation.java
+++ b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/DecimalFieldPresentation.java
@@ -50,18 +50,17 @@
/**
* This presenter is responsible to render a text area on the given layout.
*/
-public class DecimalFieldPresentation extends
- AbstractFieldWidgetPresenter<Component> {
+public class DecimalFieldPresentation extends AbstractFieldWidgetPresenter<Component> {
/** The model access. */
private final ModelAccess modelAccess;
-
+
/** The decimal field. */
private CustomField decimalField;
-
+
/** The binding_value to ui. */
private Binding binding_valueToUI;
-
+
/** The property. */
private ObjectProperty<Double> property;
@@ -99,16 +98,6 @@
property = new ObjectProperty<Double>(0d, Double.class);
decimalField.setPropertyDataSource(property);
- decimalField
- .addValueChangeListener(new Property.ValueChangeListener() {
- @Override
- public void valueChange(ValueChangeEvent event) {
- if (binding_valueToUI != null) {
- updateUiToECViewModel();
- }
- }
- });
-
if (modelAccess.isCssClassValid()) {
decimalField.addStyleName(modelAccess.getCssClass());
}
@@ -127,16 +116,23 @@
return decimalField;
}
- /* (non-Javadoc)
- * @see org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.common.AbstractFieldWidgetPresenter#getDefaultConverter()
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.common.
+ * AbstractFieldWidgetPresenter#getDefaultConverter()
*/
@Override
protected Converter<?, ?> getDefaultConverter() {
return new DecimalConverter();
}
- /* (non-Javadoc)
- * @see org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.common.AbstractFieldWidgetPresenter#doUpdateConverter(com.vaadin.data.util.converter.Converter)
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.common.
+ * AbstractFieldWidgetPresenter#doUpdateConverter(com.vaadin.data.util.
+ * converter.Converter)
*/
@SuppressWarnings("rawtypes")
protected void doUpdateConverter(Converter converter) {
@@ -179,8 +175,11 @@
}
- /* (non-Javadoc)
- * @see org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.common.AbstractVaadinWidgetPresenter#doUpdateLocale(java.util.Locale)
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.common.
+ * AbstractVaadinWidgetPresenter#doUpdateLocale(java.util.Locale)
*/
@Override
protected void doUpdateLocale(Locale locale) {
@@ -188,7 +187,7 @@
applyCaptions();
// tell the number field about the locale change
- if(decimalField != null) {
+ if (decimalField != null) {
decimalField.setLocale(locale);
}
}
@@ -197,34 +196,38 @@
* Applies the labels to the widgets.
*/
protected void applyCaptions() {
- Util.applyCaptions(getI18nService(), modelAccess.getLabel(),
- modelAccess.getLabelI18nKey(), getLocale(), decimalField);
+ Util.applyCaptions(getI18nService(), modelAccess.getLabel(), modelAccess.getLabelI18nKey(), getLocale(),
+ decimalField);
}
- /* (non-Javadoc)
- * @see org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.common.AbstractFieldWidgetPresenter#doGetField()
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.common.
+ * AbstractFieldWidgetPresenter#doGetField()
*/
@Override
protected Field<?> doGetField() {
return decimalField;
}
- /* (non-Javadoc)
- * @see org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.common.AbstractVaadinWidgetPresenter#internalGetObservableEndpoint(org.eclipse.osbp.ecview.core.common.model.core.YEmbeddableBindingEndpoint)
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.common.
+ * AbstractVaadinWidgetPresenter#internalGetObservableEndpoint(org.eclipse.
+ * osbp.ecview.core.common.model.core.YEmbeddableBindingEndpoint)
*/
@Override
- protected IObservable internalGetObservableEndpoint(
- YEmbeddableBindingEndpoint bindableValue) {
+ protected IObservable internalGetObservableEndpoint(YEmbeddableBindingEndpoint bindableValue) {
if (bindableValue == null) {
- throw new IllegalArgumentException(
- "BindableValue must not be null!");
+ throw new IllegalArgumentException("BindableValue must not be null!");
}
if (bindableValue instanceof YEmbeddableValueEndpoint) {
return internalGetValueEndpoint();
}
- throw new IllegalArgumentException("Not a valid input: "
- + bindableValue);
+ throw new IllegalArgumentException("Not a valid input: " + bindableValue);
}
/**
@@ -247,12 +250,11 @@
* the field
*/
protected void createBindings(YDecimalField yField, DecimalField field) {
- // create the model binding from ridget to ECView-model
-
- binding_valueToUI = createModelBinding(castEObject(getModel()),
- ExtensionModelPackage.Literals.YDECIMAL_FIELD__VALUE, field,
- null, null);
-
+ // create the value binding from widget to ECView-model
+ binding_valueToUI = createBindings_Value(castEObject(getModel()),
+ ExtensionModelPackage.Literals.YDECIMAL_FIELD__VALUE, field);
+
+
registerBinding(binding_valueToUI);
super.createBindings(yField, field, null);
@@ -273,35 +275,37 @@
* the model to target
* @return the binding
*/
- protected Binding createModelBinding(EObject model,
- EStructuralFeature modelFeature, AbstractField<?> field,
+ protected Binding createModelBinding(EObject model, EStructuralFeature modelFeature, AbstractField<?> field,
UpdateValueStrategy targetToModel, UpdateValueStrategy modelToTarget) {
IBindingManager bindingManager = getViewContext()
- .getService(
- org.eclipse.osbp.ecview.core.common.binding.IECViewBindingManager.class
- .getName());
+ .getService(org.eclipse.osbp.ecview.core.common.binding.IECViewBindingManager.class.getName());
if (bindingManager != null) {
// bind the value of yText to textRidget
- IObservableValue modelObservable = EMFObservables.observeValue(
- model, modelFeature);
- IObservableValue uiObservable = VaadinObservables
- .observeConvertedValue(field);
- return bindingManager.bindValue(uiObservable, modelObservable,
- targetToModel, modelToTarget);
+ IObservableValue modelObservable = EMFObservables.observeValue(model, modelFeature);
+ IObservableValue uiObservable = VaadinObservables.observeConvertedValue(field);
+ return bindingManager.bindValue(uiObservable, modelObservable, targetToModel, modelToTarget);
}
return null;
}
- /* (non-Javadoc)
- * @see org.eclipse.osbp.ecview.core.common.presentation.IWidgetPresentation#getWidget()
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.osbp.ecview.core.common.presentation.IWidgetPresentation#
+ * getWidget()
*/
@Override
public Component getWidget() {
return decimalField;
}
- /* (non-Javadoc)
- * @see org.eclipse.osbp.ecview.core.common.presentation.IWidgetPresentation#isRendered()
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.osbp.ecview.core.common.presentation.IWidgetPresentation#
+ * isRendered()
*/
@Override
public boolean isRendered() {
@@ -353,8 +357,7 @@
binding_valueToUI.updateTargetToModel();
}
- Binding domainToEObjectBinding = ModelUtil
- .getValueBinding((YValueBindable) getModel());
+ Binding domainToEObjectBinding = ModelUtil.getValueBinding((YValueBindable) getModel());
if (domainToEObjectBinding != null) {
domainToEObjectBinding.updateTargetToModel();
}
@@ -364,7 +367,7 @@
* A helper class.
*/
private static class ModelAccess {
-
+
/** The y field. */
private final YDecimalField yField;
@@ -423,8 +426,7 @@
* @return the label
*/
public String getLabel() {
- return yField.getDatadescription() != null ? yField
- .getDatadescription().getLabel() : null;
+ return yField.getDatadescription() != null ? yField.getDatadescription().getLabel() : null;
}
/**
@@ -433,8 +435,7 @@
* @return the label i18n key
*/
public String getLabelI18nKey() {
- return yField.getDatadescription() != null ? yField
- .getDatadescription().getLabelI18nKey() : null;
+ return yField.getDatadescription() != null ? yField.getDatadescription().getLabelI18nKey() : null;
}
}
@@ -454,7 +455,9 @@
super("", converter);
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see com.vaadin.ui.AbstractField#getErrorMessage()
*/
@Override
@@ -468,5 +471,9 @@
reportValidationError(message);
return message;
}
+
+ public void clear() {
+ setValue("0.0");
+ }
}
}
diff --git a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/EnumComboBoxPresentation.java b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/EnumComboBoxPresentation.java
index 7259883..3994f1e 100644
--- a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/EnumComboBoxPresentation.java
+++ b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/EnumComboBoxPresentation.java
@@ -103,7 +103,8 @@
combo.setPropertyDataSource(property);
if (modelAccess.yField.getType() != null) {
- BeanItemContainer<EnumOptionBean> datasource = createDatasource((Class<? extends Enum<?>>) modelAccess.yField.getType());
+ BeanItemContainer<EnumOptionBean> datasource = createDatasource(
+ (Class<? extends Enum<?>>) modelAccess.yField.getType());
combo.setContainerDataSource(datasource);
}
@@ -133,7 +134,8 @@
/*
* (non-Javadoc)
*
- * @see org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.common.AbstractFieldWidgetPresenter#getDefaultConverter()
+ * @see org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.common.
+ * AbstractFieldWidgetPresenter#getDefaultConverter()
*/
@SuppressWarnings({ "unchecked", "rawtypes" })
@Override
@@ -161,7 +163,8 @@
/*
* (non-Javadoc)
*
- * @see org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.common.AbstractVaadinWidgetPresenter#doUpdateLocale(java.util.Locale)
+ * @see org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.common.
+ * AbstractVaadinWidgetPresenter#doUpdateLocale(java.util.Locale)
*/
@Override
protected void doUpdateLocale(Locale locale) {
@@ -175,14 +178,19 @@
/**
* Applies the labels to the widgets.
*/
+ @SuppressWarnings("unchecked")
protected void applyCaptions() {
Util.applyCaptions(getI18nService(), modelAccess.getLabel(), modelAccess.getLabelI18nKey(), getLocale(), combo);
+
+ EnumOptionBeanHelper.updateLocale((BeanItemContainer<EnumOptionBean>) combo.getContainerDataSource(),
+ getI18nService(), getLocale());
}
/*
* (non-Javadoc)
*
- * @see org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.common.AbstractFieldWidgetPresenter#doGetField()
+ * @see org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.common.
+ * AbstractFieldWidgetPresenter#doGetField()
*/
@Override
protected Field<?> doGetField() {
@@ -192,9 +200,9 @@
/*
* (non-Javadoc)
*
- * @see
- * org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.common.AbstractVaadinWidgetPresenter#internalGetObservableEndpoint(org.eclipse.osbp.ecview.core.common.model.core
- * .YEmbeddableBindingEndpoint)
+ * @see org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.common.
+ * AbstractVaadinWidgetPresenter#internalGetObservableEndpoint(org.eclipse.
+ * osbp.ecview.core.common.model.core .YEmbeddableBindingEndpoint)
*/
@Override
protected IObservable internalGetObservableEndpoint(YEmbeddableBindingEndpoint bindableValue) {
@@ -228,10 +236,12 @@
*/
protected IObservableValue internalGetSelectionEndpoint(YEmbeddableSelectionEndpoint yEndpoint) {
- String attributePath = ECViewModelBindable.getAttributePath(ExtensionModelPackage.Literals.YCOMBO_BOX__SELECTION, yEndpoint.getAttributePath());
+ String attributePath = ECViewModelBindable
+ .getAttributePath(ExtensionModelPackage.Literals.YCOMBO_BOX__SELECTION, yEndpoint.getAttributePath());
// return the observable value for text
- return ECViewModelBindable.observeValue(castEObject(getModel()), attributePath, modelAccess.yField.getType(), modelAccess.yField.getEmfNsURI());
+ return ECViewModelBindable.observeValue(castEObject(getModel()), attributePath, modelAccess.yField.getType(),
+ modelAccess.yField.getEmfNsURI());
}
/**
@@ -244,7 +254,8 @@
*/
protected void createBindings(YEnumComboBox yField, ComboBox field) {
// create the model binding from ridget to ECView-model
- registerBinding(createBindingsSelection(castEObject(getModel()), ExtensionModelPackage.Literals.YENUM_COMBO_BOX__SELECTION, field, yField.getType()));
+ registerBinding(createBindingsSelection(castEObject(getModel()),
+ ExtensionModelPackage.Literals.YENUM_COMBO_BOX__SELECTION, field, yField.getType()));
super.createBindings(yField, field, null);
}
@@ -252,7 +263,9 @@
/*
* (non-Javadoc)
*
- * @see org.eclipse.osbp.ecview.core.common.presentation.IWidgetPresentation#getWidget()
+ * @see
+ * org.eclipse.osbp.ecview.core.common.presentation.IWidgetPresentation#
+ * getWidget()
*/
@Override
public Component getWidget() {
@@ -262,7 +275,9 @@
/*
* (non-Javadoc)
*
- * @see org.eclipse.osbp.ecview.core.common.presentation.IWidgetPresentation#isRendered()
+ * @see
+ * org.eclipse.osbp.ecview.core.common.presentation.IWidgetPresentation#
+ * isRendered()
*/
@Override
public boolean isRendered() {
@@ -380,7 +395,8 @@
}
/**
- * Converts the string value of the item icon property to {@link ThemeResource}.
+ * Converts the string value of the item icon property to
+ * {@link ThemeResource}.
*/
@SuppressWarnings("serial")
private class CustomComboBox extends ComboBox {
@@ -407,7 +423,8 @@
/*
* (non-Javadoc)
*
- * @see com.vaadin.ui.AbstractSelect#setItemIconPropertyId(java.lang.Object)
+ * @see
+ * com.vaadin.ui.AbstractSelect#setItemIconPropertyId(java.lang.Object)
*/
@Override
public void setItemIconPropertyId(Object propertyId) throws IllegalArgumentException {
@@ -447,7 +464,8 @@
final Object icon = ip.getValue();
try {
if (icon instanceof String) {
- IThemeResourceService themeResourceService = getViewContext().getService(IThemeResourceService.class.getName());
+ IThemeResourceService themeResourceService = getViewContext()
+ .getService(IThemeResourceService.class.getName());
return themeResourceService.getThemeResource((String) icon, ThemeResourceType.ICON);
}
} catch (Exception e) {
diff --git a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/EnumListPresentation.java b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/EnumListPresentation.java
index 129718a..ce0db66 100644
--- a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/EnumListPresentation.java
+++ b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/EnumListPresentation.java
@@ -196,9 +196,13 @@
/**
* Applies the labels to the widgets.
*/
+ @SuppressWarnings("unchecked")
protected void applyCaptions() {
Util.applyCaptions(getI18nService(), modelAccess.getLabel(),
modelAccess.getLabelI18nKey(), getLocale(), list);
+
+ EnumOptionBeanHelper.updateLocale((BeanItemContainer<EnumOptionBean>) list.getContainerDataSource(),
+ getI18nService(), getLocale());
}
/* (non-Javadoc)
diff --git a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/EnumOptionsGroupPresentation.java b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/EnumOptionsGroupPresentation.java
index eabd432..a52ead5 100644
--- a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/EnumOptionsGroupPresentation.java
+++ b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/EnumOptionsGroupPresentation.java
@@ -198,9 +198,13 @@
/**
* Applies the labels to the widgets.
*/
+ @SuppressWarnings("unchecked")
protected void applyCaptions() {
Util.applyCaptions(getI18nService(), modelAccess.getLabel(),
modelAccess.getLabelI18nKey(), getLocale(), optionsGroup);
+
+ EnumOptionBeanHelper.updateLocale((BeanItemContainer<EnumOptionBean>) optionsGroup.getContainerDataSource(),
+ getI18nService(), getLocale());
}
/* (non-Javadoc)
diff --git a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/FilteringComponentPresentation.java b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/FilteringComponentPresentation.java
new file mode 100644
index 0000000..f0dd3bb
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/FilteringComponentPresentation.java
@@ -0,0 +1,439 @@
+/**
+ * Copyright (c) 2011, 2015 - Lunifera GmbH (Gross Enzersdorf, Austria), Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Florian Pirchner - Initial implementation
+ */
+package org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.internal;
+
+import java.util.Date;
+import java.util.Locale;
+
+import org.eclipse.core.databinding.Binding;
+import org.eclipse.core.databinding.UpdateValueStrategy;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.impl.AdapterImpl;
+import org.eclipse.osbp.ecview.core.common.context.IViewContext;
+import org.eclipse.osbp.ecview.core.common.editpart.IElementEditpart;
+import org.eclipse.osbp.ecview.core.common.editpart.IEmbeddableEditpart;
+import org.eclipse.osbp.ecview.core.common.filter.IFilterProvidingPresentation;
+import org.eclipse.osbp.ecview.core.extension.model.extension.ExtensionModelPackage;
+import org.eclipse.osbp.ecview.core.extension.model.extension.YFilterDescriptor;
+import org.eclipse.osbp.ecview.core.extension.model.extension.YFilterTableDescriptor;
+import org.eclipse.osbp.ecview.core.extension.model.extension.YFilteringComponent;
+import org.eclipse.osbp.runtime.common.util.BeanUtils;
+import org.eclipse.osbp.runtime.designer.api.IDesignerService.DesignEvent;
+import org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.common.AbstractEmbeddedWidgetPresenter;
+import org.eclipse.osbp.runtime.web.vaadin.components.fields.filter2.FilteringComponent;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * This presenter is responsible to render a text field on the given layout.
+ */
+public class FilteringComponentPresentation<T> extends AbstractEmbeddedWidgetPresenter<FilteringComponent<T>>
+ implements IFilterProvidingPresentation {
+
+ @SuppressWarnings("unused")
+ private static final Logger LOGGER = LoggerFactory.getLogger(FilteringComponentPresentation.class);
+
+ private FilteringComponent<T> layout;
+ private ModelAccess modelAccess;
+
+ private int currentChildIndex;
+
+ private Adapter adapter;
+
+ private Binding filterBinding;
+
+ /**
+ * The constructor.
+ *
+ * @param editpart
+ * The editpart of that editpart.
+ */
+ public FilteringComponentPresentation(IElementEditpart editpart) {
+ super((IEmbeddableEditpart) editpart);
+ this.modelAccess = new ModelAccess((YFilteringComponent) editpart.getModel());
+ }
+
+ @Override
+ protected void doUpdateLocale(Locale locale) {
+ // no need to set the locale to the ui elements. Is handled by vaadin
+ // internally.
+
+ // update the captions
+ applyCaptions();
+ }
+
+ /**
+ * Applies the labels to the widgets.
+ */
+ protected void applyCaptions() {
+ }
+
+ /**
+ * Is called to refresh the UI. The element will be removed from the layout
+ * and added to it again afterwards.
+ */
+ protected void refreshUI() {
+
+ // iterate all elements and build the child element
+ //
+ currentChildIndex = 0;
+
+ unrenderChildren();
+ renderChildren();
+ }
+
+ private void addFilter(YFilterDescriptor child) {
+ currentChildIndex++;
+ switch (child.getType()) {
+ case COMPARE:
+ if (isString(child)) {
+ layout.addCompareTextComponent(child.getPropertyPath(), currentChildIndex);
+ } else if (isDecimal(child)) {
+ layout.addCompareDecimalComponent(child.getPropertyPath(), toDecimalType(child), currentChildIndex);
+ } else if (isDate(child)) {
+ layout.addCompareDateComponent(child.getPropertyPath(), currentChildIndex);
+ } else if (isBoolean(child)) {
+ layout.addCompareBooleanComponent(child.getPropertyPath(), currentChildIndex);
+ }
+ break;
+ case RANGE:
+ if (isString(child)) {
+ layout.addBetweenTextComponent(child.getPropertyPath(), currentChildIndex);
+ } else if (isDecimal(child)) {
+ layout.addBetweenDecimalComponent(child.getPropertyPath(), toCompareType(child), currentChildIndex);
+ } else if (isDate(child)) {
+ layout.addBetweenDateComponent(child.getPropertyPath(), currentChildIndex);
+ }
+ break;
+ }
+ }
+
+ private void addColumn(YFilterTableDescriptor desc) {
+ layout.addGridColumn(desc.getPropertyPath());
+ }
+
+ private Class<?> getType(YFilterDescriptor child) {
+ Class<?> rootType = modelAccess.yLayout.getType();
+ return BeanUtils.getNestedFieldType(rootType, child.getPropertyPath());
+ }
+
+ private boolean isBoolean(YFilterDescriptor child) {
+ Class<?> type = getType(child);
+ return type == Boolean.class || type == Boolean.TYPE;
+ }
+
+ private boolean isDate(YFilterDescriptor child) {
+ Class<?> type = getType(child);
+ return Date.class.isAssignableFrom(type);
+ }
+
+ private boolean isDecimal(YFilterDescriptor child) {
+ Class<?> type = getType(child);
+ return type != String.class && type != Boolean.class && type != Boolean.TYPE
+ && (type.isPrimitive() || Number.class.isAssignableFrom(type));
+ }
+
+ private boolean isString(YFilterDescriptor child) {
+ Class<?> type = getType(child);
+ return type == String.class;
+ }
+
+ @SuppressWarnings("unchecked")
+ private <X extends Number & Comparable<?>> Class<X> toCompareType(YFilterDescriptor child) {
+ return (Class<X>) getType(child);
+ }
+
+ @SuppressWarnings("unchecked")
+ private Class<? extends Number> toDecimalType(YFilterDescriptor child) {
+ return (Class<? extends Number>) getType(child);
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public FilteringComponent<T> doCreateWidget(Object parent) {
+ if (layout == null) {
+
+ layout = new FiltersComponentCustom(getViewContext(), (Class<T>) modelAccess.yLayout.getType(),
+ modelAccess.yLayout.getFilterCols(), modelAccess.yLayout.isHideGrid());
+ setupComponent(layout, getCastedModel());
+
+ associateWidget(layout, modelAccess.yLayout);
+
+ if (modelAccess.isCssIdValid()) {
+ layout.setId(modelAccess.getCssID());
+ } else {
+ layout.setId(getEditpart().getId());
+ }
+
+ if (modelAccess.isCssClassValid()) {
+ layout.addStyleName(modelAccess.getCssClass());
+ } else {
+ layout.addStyleName(CSS_CLASS_CONTROL);
+ }
+
+ // creates the binding for the field
+ createBindings(modelAccess.yLayout, layout);
+
+ // initialize all children
+ refreshUI();
+
+ adapter = new Adapter(modelAccess.yLayout);
+
+ // create the bean slot eager
+ getViewContext().createBeanSlot(modelAccess.yLayout.getSelectionBeanSlotName(),
+ modelAccess.yLayout.getType());
+
+ // set the selection into the proper beanslot
+ layout.setSelectionConsumer((s) -> {
+ getViewContext().setBean(modelAccess.yLayout.getSelectionBeanSlotName(), s);
+ });
+ }
+
+ return layout;
+ }
+
+ protected void createBindings(YFilteringComponent yField, FilteringComponent<T> field) {
+ {
+ // filter property
+ UpdateValueStrategy modelToTarget = new UpdateValueStrategy(UpdateValueStrategy.POLICY_NEVER);
+ UpdateValueStrategy targetToModel = new UpdateValueStrategy(UpdateValueStrategy.POLICY_ON_REQUEST);
+ filterBinding = createBindingsByAccessor(castEObject(getModel()),
+ ExtensionModelPackage.Literals.YFILTERING_COMPONENT__FILTER, layout, "filter", targetToModel,
+ modelToTarget);
+ registerBinding(filterBinding);
+ }
+
+ {
+ // apply filter property
+ UpdateValueStrategy modelToTarget = new UpdateValueStrategy(UpdateValueStrategy.POLICY_UPDATE);
+ UpdateValueStrategy targetToModel = new UpdateValueStrategy(UpdateValueStrategy.POLICY_NEVER);
+ Binding binding = createBindingsByAccessor(castEObject(getModel()),
+ ExtensionModelPackage.Literals.YFILTERING_COMPONENT__APPLY_FILTER, this, "applyFilter",
+ targetToModel, modelToTarget);
+ registerBinding(binding);
+ }
+
+ {
+ // reset filter property
+ UpdateValueStrategy modelToTarget = new UpdateValueStrategy(UpdateValueStrategy.POLICY_UPDATE);
+ UpdateValueStrategy targetToModel = new UpdateValueStrategy(UpdateValueStrategy.POLICY_NEVER);
+ Binding binding = createBindingsByAccessor(castEObject(getModel()),
+ ExtensionModelPackage.Literals.YFILTERING_COMPONENT__RESET_FILTER, this, "resetFilter",
+ targetToModel, modelToTarget);
+ registerBinding(binding);
+ }
+
+ super.createBindings(yField, field, null);
+ }
+
+ // helper methods for binding
+ public void setApplyFilter(Object value) {
+ layout.applyFilters();
+ }
+
+ // helper methods for binding
+ public Object getApplyFilter() {
+ return new Date();
+ }
+
+ // helper methods for binding
+ public void setResetFilter(Object value) {
+ layout.resetAllFilters();
+ }
+
+ // helper methods for binding
+ public Object getResetFilter() {
+ return new Date();
+ }
+
+ protected void renderChildren() {
+ for (YFilterDescriptor desc : modelAccess.yLayout.getFilterDescriptors()) {
+ addFilter(desc);
+ }
+
+ for (YFilterTableDescriptor desc : modelAccess.yLayout.getTableDescriptors()) {
+ addColumn(desc);
+ }
+ }
+
+ protected void unrenderChildren() {
+ layout.removeAllComponents();
+ }
+
+ @Override
+ public Object getFilter() {
+ return layout.getFilter();
+ }
+
+ @Override
+ public FilteringComponent<T> getWidget() {
+ return layout;
+ }
+
+ @Override
+ public boolean isRendered() {
+ return layout != null;
+ }
+
+ @Override
+ protected void internalDispose() {
+ try {
+ unrender();
+ } finally {
+ super.internalDispose();
+ }
+ }
+
+ @Override
+ public void doUnrender() {
+ if (layout != null) {
+
+ filterBinding.dispose();
+ filterBinding = null;
+
+ adapter.dispose();
+ adapter = null;
+
+ // unbind all active bindings
+ unbind();
+
+ // remove assocations
+ unassociateWidget(layout);
+
+ unrenderChildren();
+
+ layout.dispose();
+ layout = null;
+ }
+ }
+
+ @Override
+ public void notify(DesignEvent event) {
+ // nothing to do
+ }
+
+ /**
+ * An internal helper class.
+ */
+ private static class ModelAccess {
+ private final YFilteringComponent yLayout;
+
+ public ModelAccess(YFilteringComponent yLayout) {
+ super();
+ this.yLayout = yLayout;
+ }
+
+ /**
+ * @return
+ * @see org.eclipse.osbp.ecview.core.ui.core.model.core.YCssAble#getCssClass()
+ */
+ public String getCssClass() {
+ return yLayout.getCssClass();
+ }
+
+ /**
+ * Returns true, if the css class is not null and not empty.
+ *
+ * @return
+ */
+ public boolean isCssClassValid() {
+ return getCssClass() != null && !getCssClass().equals("");
+ }
+
+ /**
+ * @return
+ * @see org.eclipse.osbp.ecview.core.ui.core.model.core.YCssAble#getCssID()
+ */
+ public String getCssID() {
+ return yLayout.getCssID();
+ }
+
+ /**
+ * Returns true, if the css id is not null and not empty.
+ *
+ * @return
+ */
+ public boolean isCssIdValid() {
+ return getCssID() != null && !getCssID().equals("");
+ }
+
+ }
+
+ class Adapter extends AdapterImpl {
+
+ final YFilteringComponent component;
+
+ Adapter(YFilteringComponent component) {
+ this.component = component;
+ component.eAdapters().add(this);
+ }
+
+ @Override
+ public void notifyChanged(Notification msg) {
+ if (msg.getFeature() == ExtensionModelPackage.Literals.YFILTERING_COMPONENT__FILTER_DESCRIPTORS) {
+ refreshUI();
+ } else if (msg.getFeature() == ExtensionModelPackage.Literals.YFILTERING_COMPONENT__TABLE_DESCRIPTORS) {
+ refreshUI();
+ }
+ }
+
+ void dispose() {
+ component.eAdapters().remove(this);
+ }
+ }
+
+ @SuppressWarnings("serial")
+ class FiltersComponentCustom extends FilteringComponent<T> {
+
+ public FiltersComponentCustom(IViewContext viewContext, Class<T> type, boolean hideGrid) {
+ super(viewContext, type, hideGrid);
+ }
+
+ public FiltersComponentCustom(IViewContext viewContext, Class<T> rootType, int filterCols, boolean hideGrid) {
+ super(viewContext, rootType, filterCols, hideGrid);
+ }
+
+ private Object resetFilters;
+ private Object applyFilters;
+
+ // binding support
+ public Object getResetFilters() {
+ return resetFilters;
+ }
+
+ // binding support
+ public void setResetFilters(Object resetFilters) {
+ this.resetFilters = resetFilters;
+ super.resetAllFilters();
+ }
+
+ // binding support
+ public Object getApplyFilters() {
+ return applyFilters;
+ }
+
+ public void applyFilters() {
+ super.applyFilters();
+
+ // invoke the filter binding to update the model
+ filterBinding.updateTargetToModel();
+ }
+
+ // binding support
+ public void setApplyFilters(Object applyFilters) {
+ this.applyFilters = applyFilters;
+
+ // invoke the filter binding to update the model
+ filterBinding.updateTargetToModel();
+ }
+ }
+
+}
diff --git a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/HorizontalLayoutPresentation.java b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/HorizontalLayoutPresentation.java
index 720d42f..f94f8a5 100644
--- a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/HorizontalLayoutPresentation.java
+++ b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/HorizontalLayoutPresentation.java
@@ -35,7 +35,6 @@
import com.vaadin.ui.ComponentContainer;
import fi.jasoft.dragdroplayouts.DDHorizontalLayout;
-import fi.jasoft.dragdroplayouts.drophandlers.DefaultHorizontalLayoutDropHandler;
// TODO: Auto-generated Javadoc
/**
diff --git a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/ImagePresentation.java b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/ImagePresentation.java
index 3da2ff4..233aee1 100644
--- a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/ImagePresentation.java
+++ b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/ImagePresentation.java
@@ -36,12 +36,11 @@
/**
* This presenter is responsible to render a text area on the given layout.
*/
-public class ImagePresentation extends
- AbstractEmbeddedWidgetPresenter<Component> {
+public class ImagePresentation extends AbstractEmbeddedWidgetPresenter<Component> {
/** The model access. */
private final ModelAccess modelAccess;
-
+
/** The image. */
private Embedded image;
@@ -87,7 +86,9 @@
}
return image;
}
-//TODO: check the return type - the documentation and the implementation do not match
+
+ // TODO: check the return type - the documentation and the implementation do
+ // not match
/**
* Creates the bindings from the ECView EMF model to the given UI element.
*
@@ -97,34 +98,43 @@
* the widget
* @param container
* the container
- *
- * return Binding - the created binding
+ *
+ * return Binding - the created binding
*/
- protected void createBindings(YImage yField, AbstractComponent widget,
- AbstractComponent container) {
+ protected void createBindings(YImage yField, AbstractComponent widget, AbstractComponent container) {
+ // binding for YImage#value
IObservableValue modelObservable = EMFObservables.observeValue(yField,
ExtensionModelPackage.Literals.YIMAGE__VALUE);
IObservableValue uiObservable = VaadinObservables.observeSource(image);
- IConverter stringToResourceConverter = new Converter(String.class,
- Resource.class) {
+ IConverter stringToResourceConverter = new Converter(String.class, Resource.class) {
@Override
public Object convert(Object fromObject) {
- return (fromObject != null && !fromObject.equals("")) ? new ThemeResource(
- (String) fromObject) : null;
+ return (fromObject != null && !fromObject.equals("")) ? new ThemeResource((String) fromObject) : null;
}
};
registerBinding(createBindings(uiObservable, modelObservable,
new UpdateValueStrategy(UpdateValueStrategy.POLICY_NEVER),
- new UpdateValueStrategy(UpdateValueStrategy.POLICY_UPDATE)
- .setConverter(stringToResourceConverter)));
+ new UpdateValueStrategy(UpdateValueStrategy.POLICY_UPDATE).setConverter(stringToResourceConverter)));
+
+ // binding for YImage#resource
+ IObservableValue resModelObservable = EMFObservables.observeValue(yField,
+ ExtensionModelPackage.Literals.YIMAGE__RESOURCE);
+ IObservableValue resUiObservable = VaadinObservables.observeSource(image);
+
+ registerBinding(createBindings(resUiObservable, resModelObservable,
+ new UpdateValueStrategy(UpdateValueStrategy.POLICY_NEVER),
+ new UpdateValueStrategy(UpdateValueStrategy.POLICY_UPDATE)));
super.createBindings(yField, widget, container);
}
- /* (non-Javadoc)
- * @see org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.common.AbstractVaadinWidgetPresenter#doUpdateLocale(java.util.Locale)
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.common.
+ * AbstractVaadinWidgetPresenter#doUpdateLocale(java.util.Locale)
*/
@Override
protected void doUpdateLocale(Locale locale) {
@@ -139,20 +149,27 @@
* Applies the labels to the widgets.
*/
protected void applyCaptions() {
- Util.applyCaptions(getI18nService(), modelAccess.getLabel(),
- modelAccess.getLabelI18nKey(), getLocale(), image);
+ Util.applyCaptions(getI18nService(), modelAccess.getLabel(), modelAccess.getLabelI18nKey(), getLocale(), image);
}
- /* (non-Javadoc)
- * @see org.eclipse.osbp.ecview.core.common.presentation.IWidgetPresentation#getWidget()
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.osbp.ecview.core.common.presentation.IWidgetPresentation#
+ * getWidget()
*/
@Override
public Component getWidget() {
return image;
}
- /* (non-Javadoc)
- * @see org.eclipse.osbp.ecview.core.common.presentation.IWidgetPresentation#isRendered()
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.osbp.ecview.core.common.presentation.IWidgetPresentation#
+ * isRendered()
*/
@Override
public boolean isRendered() {
@@ -196,7 +213,7 @@
* A helper class.
*/
private static class ModelAccess {
-
+
/** The y field. */
private final YImage yField;
diff --git a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/KanbanPresentation.java b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/KanbanPresentation.java
new file mode 100644
index 0000000..585bffb
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/KanbanPresentation.java
@@ -0,0 +1,460 @@
+/**
+ * Copyright (c) 2011, 2015 - Lunifera GmbH (Gross Enzersdorf, Austria), Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Florian Pirchner - Initial implementation
+ */
+package org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.internal;
+
+import java.util.Locale;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.impl.AdapterImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.osbp.ecview.core.common.context.ContextException;
+import org.eclipse.osbp.ecview.core.common.context.IViewContext;
+import org.eclipse.osbp.ecview.core.common.editpart.IElementEditpart;
+import org.eclipse.osbp.ecview.core.common.extender.IECViewCache;
+import org.eclipse.osbp.ecview.core.common.model.core.YView;
+import org.eclipse.osbp.ecview.core.extension.model.extension.ExtensionModelFactory;
+import org.eclipse.osbp.ecview.core.extension.model.extension.ExtensionModelPackage;
+import org.eclipse.osbp.ecview.core.extension.model.extension.YKanban;
+import org.eclipse.osbp.ecview.core.extension.model.extension.YKanbanEvent;
+import org.eclipse.osbp.ecview.core.extension.model.extension.YKanbanVisibilityProcessor;
+import org.eclipse.osbp.ecview.core.ui.core.editparts.extension.IKanbanEditpart;
+import org.eclipse.osbp.runtime.common.annotations.DtoUtils;
+import org.eclipse.osbp.runtime.common.state.ISharedStateContext;
+import org.eclipse.osbp.runtime.common.util.BeanUtils;
+import org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.VaadinRenderer;
+import org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.common.AbstractVaadinWidgetPresenter;
+import org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.common.FilteringComponentEmbeddable;
+import org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.internal.util.Util;
+import org.eclipse.osbp.runtime.web.vaadin.common.data.BeanServiceLazyLoadingContainer;
+import org.eclipse.osbp.runtime.web.vaadin.common.data.IBeanSearchServiceFactory;
+import org.eclipse.osbp.vaadin.addons.kanban.KanbanBoard;
+import org.eclipse.osbp.vaadin.addons.kanban.KanbanBoard.FilterChangedListener;
+import org.eclipse.osbp.vaadin.addons.kanban.KanbanCard;
+
+import com.vaadin.data.Container.Filter;
+import com.vaadin.server.ErrorMessage;
+import com.vaadin.server.ThemeResource;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.ComponentContainer;
+import com.vaadin.ui.VerticalLayout;
+
+/**
+ * This presenter is responsible to render a list on the given layout.
+ */
+public class KanbanPresentation extends AbstractVaadinWidgetPresenter<Component> {
+
+ /** The model access. */
+ private final ModelAccess modelAccess;
+
+ /** The KanbanBoard */
+ private CustomKanbanBoard kanban;
+
+ @SuppressWarnings("rawtypes")
+ private FilteringComponentEmbeddable filteringComponent;
+
+ private CustomDropAdapter dropAdapter;
+
+ private CustomFilterProvider filterProvider;
+
+ private CustomCardAdapter cardAdapter;
+
+ private YView cardView;
+
+ private AdapterCustom modelAdapter;
+
+ /** The property. */
+
+ /**
+ * Constructor.
+ *
+ * @param editpart
+ * The editpart of that presenter
+ */
+ public KanbanPresentation(IElementEditpart editpart) {
+ super((IKanbanEditpart) editpart);
+ this.modelAccess = new ModelAccess((YKanban) editpart.getModel());
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @SuppressWarnings({ "unchecked", "rawtypes" })
+ @Override
+ public Component doCreateWidget(Object parent) {
+ if (kanban == null) {
+
+ findCardView();
+
+ kanban = new CustomKanbanBoard();
+ kanban.addStyleName(CSS_CLASS_CONTROL);
+ kanban.setImmediate(true);
+ kanban.setDoubleClickListener(this::cardDoubleClicked);
+ setupComponent(kanban, getCastedModel());
+ associateWidget(kanban, modelAccess.yField);
+
+ if (modelAccess.isCssIdValid()) {
+ kanban.setId(modelAccess.getCssID());
+ } else {
+ kanban.setId(getEditpart().getId());
+ }
+
+ if (modelAccess.yField.getType() != null) {
+
+ modelAdapter = new AdapterCustom();
+ modelAccess.yField.eAdapters().add(modelAdapter);
+
+ dropAdapter = new CustomDropAdapter();
+ filterProvider = new CustomFilterProvider();
+ cardAdapter = new CustomCardAdapter();
+
+ filteringComponent = new FilteringComponentEmbeddable(modelAccess.yField.getType(), 2);
+ filteringComponent.setHideGrid(true);
+ filteringComponent.init(getLocale());
+ filteringComponent.setFilterAcceptedCallback(e -> filterProvider.notifyChangedFilter());
+
+ kanban.initialize(getPermittedStates(), dropAdapter, cardAdapter, filterProvider);
+
+ IBeanSearchServiceFactory factory = getViewContext()
+ .getService(IBeanSearchServiceFactory.class.getName());
+ if (factory != null) {
+ ISharedStateContext sharedState = getViewContext().getService(ISharedStateContext.class.getName());
+ BeanServiceLazyLoadingContainer<?> datasource = new BeanServiceLazyLoadingContainer(
+ factory.createService(modelAccess.yField.getType()), modelAccess.yField.getType(),
+ sharedState);
+ kanban.setContainerDatasource(datasource);
+ }
+ }
+
+ // creates the binding for the field
+ createBindings(modelAccess.yField, kanban);
+
+ if (modelAccess.isCssClassValid()) {
+ kanban.addStyleName(modelAccess.getCssClass());
+ }
+
+ applyCaptions();
+
+ initialize(kanban, modelAccess.yField);
+ }
+ return kanban;
+ }
+
+ private void cardDoubleClicked(KanbanCard card) {
+ Object dto = card.getDto();
+ modelAccess.yField.setDoubleClicked(new YKanbanEvent(dto));
+ }
+
+ private void cardStateChanged(Enum<?> sourceState, Enum<?> targetState, Object dto) {
+ modelAccess.yField.setStateChanged(new YKanbanEvent(dto, sourceState, targetState));
+ }
+
+ private void findCardView() {
+ IECViewCache ecviewCache = getViewContext().getService(IECViewCache.class.getName());
+ cardView = ecviewCache.getView(modelAccess.yField.getCardECViewId());
+ }
+
+ protected Enum<?>[] getPermittedStates() {
+ Enum<?>[] result = BeanUtils.getKanbanStateEnumLiterals(modelAccess.yField.getType());
+ return result;
+ }
+
+ @Override
+ protected void doUpdateLocale(Locale locale) {
+ // no need to set the locale to the ui elements. Is handled by vaadin
+ // internally.
+
+ // update the captions
+ applyCaptions();
+ }
+
+ /**
+ * Applies the labels to the widgets.
+ */
+ protected void applyCaptions() {
+ Util.applyCaptions(getI18nService(), modelAccess.getLabel(), modelAccess.getLabelI18nKey(), getLocale(),
+ kanban);
+ }
+
+ /**
+ * Creates the bindings for the given values.
+ *
+ * @param yField
+ * the y field
+ * @param field
+ * the field
+ */
+ protected void createBindings(YKanban yField, KanbanBoard field) {
+ super.createBindings(yField, field, null);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.osbp.ecview.core.common.presentation.IWidgetPresentation#
+ * getWidget()
+ */
+ @Override
+ public Component getWidget() {
+ return kanban;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.osbp.ecview.core.common.presentation.IWidgetPresentation#
+ * isRendered()
+ */
+ @Override
+ public boolean isRendered() {
+ return kanban != null;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void doUnrender() {
+ if (kanban != null) {
+
+ modelAccess.yField.eAdapters().remove(modelAdapter);
+ modelAdapter = null;
+
+ // unbind all active bindings
+ unbind();
+
+ Component parent = ((Component) kanban.getParent());
+ if (parent != null && parent instanceof ComponentContainer) {
+ ((ComponentContainer) parent).removeComponent(kanban);
+ }
+
+ // remove assocations
+ unassociateWidget(kanban);
+
+ kanban = null;
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ protected void internalDispose() {
+ try {
+ unrender();
+ } finally {
+ super.internalDispose();
+ }
+ }
+
+ /**
+ * A helper class.
+ */
+ private static class ModelAccess {
+
+ /** The y field. */
+ private final YKanban yField;
+
+ /**
+ * Instantiates a new model access.
+ *
+ * @param yField
+ * the y field
+ */
+ public ModelAccess(YKanban yField) {
+ super();
+ this.yField = yField;
+ }
+
+ /**
+ * Gets the css class.
+ *
+ * @return the css class
+ * @see org.eclipse.osbp.ecview.core.ui.core.model.core.YCssAble#getCssClass()
+ */
+ public String getCssClass() {
+ return yField.getCssClass();
+ }
+
+ /**
+ * Returns true, if the css class is not null and not empty.
+ *
+ * @return true, if is css class valid
+ */
+ public boolean isCssClassValid() {
+ return getCssClass() != null && !getCssClass().equals("");
+ }
+
+ /**
+ * Gets the css id.
+ *
+ * @return the css id
+ * @see org.eclipse.osbp.ecview.core.ui.core.model.core.YCssAble#getCssID()
+ */
+ public String getCssID() {
+ return yField.getCssID();
+ }
+
+ /**
+ * Returns true, if the css id is not null and not empty.
+ *
+ * @return true, if is css id valid
+ */
+ public boolean isCssIdValid() {
+ return getCssID() != null && !getCssID().equals("");
+ }
+
+ /**
+ * Returns the label.
+ *
+ * @return the label
+ */
+ public String getLabel() {
+ return yField.getDatadescription() != null ? yField.getDatadescription().getLabel() : null;
+ }
+
+ /**
+ * Returns the label.
+ *
+ * @return the label i18n key
+ */
+ public String getLabelI18nKey() {
+ return yField.getDatadescription() != null ? yField.getDatadescription().getLabelI18nKey() : null;
+ }
+ }
+
+ /**
+ * Converts the string value of the item icon property to
+ * {@link ThemeResource}.
+ */
+ @SuppressWarnings("serial")
+ private class CustomKanbanBoard extends KanbanBoard {
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.vaadin.ui.AbstractField#getErrorMessage()
+ */
+ @Override
+ public ErrorMessage getErrorMessage() {
+ if (isDisposed()) {
+ // after disposal, Vaadin will call this method once.
+ return null;
+ }
+
+ ErrorMessage message = super.getErrorMessage();
+ return message;
+ }
+ }
+
+ private class CustomDropAdapter implements KanbanBoard.DropAdapter {
+
+ @Override
+ public boolean dropAllowed(Enum<?> sourceState, Enum<?> targetState, Object itemId) {
+ return true;
+ }
+
+ @Override
+ public boolean drop(Enum<?> sourceState, Enum<?> targetState, Object dto) {
+ cardStateChanged(sourceState, targetState, dto);
+ return true;
+ }
+
+ }
+
+ private class CustomFilterProvider implements KanbanBoard.FilterProvider {
+
+ private FilterChangedListener listener;
+
+ @Override
+ public Component getFilterComponent() {
+ return filteringComponent;
+ }
+
+ @Override
+ public void setFilterChangedListener(FilterChangedListener listener) {
+ this.listener = listener;
+ }
+
+ private void notifyChangedFilter() {
+ if (listener != null) {
+ listener.filterChanged();
+ }
+ }
+
+ @Override
+ public Filter getFilter() {
+ return filteringComponent.getFilter();
+ }
+
+ }
+
+ private class CustomCardAdapter implements KanbanBoard.KanbanCardAdapter {
+
+ @Override
+ public KanbanCard createCard(Object itemId) {
+ KanbanCard card = new CustomKanbanCard(DtoUtils.getIdValue(itemId).toString(),
+ BeanUtils.getKanbanState(itemId), itemId, cardView);
+ return card;
+ }
+ }
+
+ @SuppressWarnings("serial")
+ private class CustomKanbanCard extends KanbanCard {
+
+ private YView yView;
+
+ public CustomKanbanCard(String id, Enum<?> cardState, Object dto, YView yView) {
+ super(id, cardState, dto);
+ this.yView = yView;
+
+ initCard();
+ }
+
+ private void initCard() {
+ VerticalLayout content = new VerticalLayout();
+ content.addStyleName("o-kanban-card-content");
+ content.setSizeFull();
+ content.setMargin(false);
+ content.setSpacing(false);
+ content.setEnabled(false);
+
+ setContent(content);
+ try {
+ YView cardView = EcoreUtil.copy(yView);
+
+ // add a vp for autobinded cards
+ if (cardView.getTags().contains("autobinded")) {
+ YKanbanVisibilityProcessor vp = ExtensionModelFactory.eINSTANCE.createYKanbanVisibilityProcessor();
+ cardView.getVisibilityProcessors().add(vp);
+ }
+
+ IViewContext context = new VaadinRenderer().render(content, cardView, null);
+ context.setBean(IViewContext.MAIN_BEAN_SLOT, dto);
+ } catch (ContextException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ private class AdapterCustom extends AdapterImpl {
+ @Override
+ public void notifyChanged(Notification msg) {
+ if (msg.getFeature() == ExtensionModelPackage.Literals.YKANBAN__TO_REFRESH) {
+ YKanbanEvent event = (YKanbanEvent) msg.getNewValue();
+ if (event != null) {
+ kanban.refresh(event.dto);
+ }
+ }
+ }
+ }
+}
diff --git a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/NumericFieldPresentation.java b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/NumericFieldPresentation.java
index e6d976a..d5511b1 100644
--- a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/NumericFieldPresentation.java
+++ b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/NumericFieldPresentation.java
@@ -445,5 +445,9 @@
reportValidationError(message);
return message;
}
+
+ public void clear() {
+ setValue("0");
+ }
}
}
diff --git a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/PasswordFieldPresentation.java b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/PasswordFieldPresentation.java
index 18e0c25..46e2e59 100644
--- a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/PasswordFieldPresentation.java
+++ b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/PasswordFieldPresentation.java
@@ -171,11 +171,15 @@
* @param field
* the field
*/
- protected void createBindings(YPasswordField yField, PasswordField field) {
+ protected void createBindings(final YPasswordField yField, PasswordField field) {
// create the model binding from ridget to ECView-model
registerBinding(createBindings_Value(castEObject(getModel()),
ExtensionModelPackage.Literals.YPASSWORD_FIELD__VALUE, text));
+ field.addTextChangeListener(e -> {
+ yField.setLastTextChange(e.getText());
+ });
+
super.createBindings(yField, field, null);
}
diff --git a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/PresenterFactory.java b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/PresenterFactory.java
index 5ef0a0b..71e4971 100644
--- a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/PresenterFactory.java
+++ b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/PresenterFactory.java
@@ -29,10 +29,12 @@
import org.eclipse.osbp.ecview.core.ui.core.editparts.extension.IEnumComboBoxEditpart;
import org.eclipse.osbp.ecview.core.ui.core.editparts.extension.IEnumListEditpart;
import org.eclipse.osbp.ecview.core.ui.core.editparts.extension.IEnumOptionsGroupEditpart;
+import org.eclipse.osbp.ecview.core.ui.core.editparts.extension.IFilteringComponentEditpart;
import org.eclipse.osbp.ecview.core.ui.core.editparts.extension.IFormLayoutEditpart;
import org.eclipse.osbp.ecview.core.ui.core.editparts.extension.IGridLayoutEditpart;
import org.eclipse.osbp.ecview.core.ui.core.editparts.extension.IHorizontalLayoutEditpart;
import org.eclipse.osbp.ecview.core.ui.core.editparts.extension.IImageEditpart;
+import org.eclipse.osbp.ecview.core.ui.core.editparts.extension.IKanbanEditpart;
import org.eclipse.osbp.ecview.core.ui.core.editparts.extension.ILabelEditpart;
import org.eclipse.osbp.ecview.core.ui.core.editparts.extension.IListEditpart;
import org.eclipse.osbp.ecview.core.ui.core.editparts.extension.IMasterDetailEditpart;
@@ -55,10 +57,12 @@
import org.eclipse.osbp.ecview.core.ui.core.editparts.extension.ITreeEditpart;
import org.eclipse.osbp.ecview.core.ui.core.editparts.extension.IVerticalLayoutEditpart;
import org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.VaadinRenderer;
+import org.osgi.service.component.annotations.Component;
/**
* The presenter factory.
*/
+@Component(immediate = true, service = { IPresentationFactory.class })
public class PresenterFactory implements IPresentationFactory {
public PresenterFactory() {
@@ -71,7 +75,7 @@
return presentationURI != null && presentationURI.equals(VaadinRenderer.UI_KIT_URI);
}
- @SuppressWarnings("unchecked")
+ @SuppressWarnings({ "unchecked", "rawtypes" })
@Override
public <A extends IWidgetPresentation<?>> A createPresentation(IViewContext uiContext, IElementEditpart editpart)
throws IllegalArgumentException {
@@ -155,9 +159,13 @@
return (A) new AbsoluteLayoutPresentation(editpart);
} else if (editpart instanceof IPasswordFieldEditpart) {
return (A) new PasswordFieldPresentation(editpart);
+ } else if (editpart instanceof IFilteringComponentEditpart) {
+ return (A) new FilteringComponentPresentation(editpart);
+ } else if (editpart instanceof IKanbanEditpart) {
+ return (A) new KanbanPresentation(editpart);
}
- throw new IllegalArgumentException(String.format("No presenter available for editpart %s[%s]", editpart.getClass().getName(),
- editpart.getId()));
+ throw new IllegalArgumentException(String.format("No presenter available for editpart %s[%s]",
+ editpart.getClass().getName(), editpart.getId()));
}
}
diff --git a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/SuggestTextFieldPresentation.java b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/SuggestTextFieldPresentation.java
index 4416115..358b884 100644
--- a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/SuggestTextFieldPresentation.java
+++ b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/SuggestTextFieldPresentation.java
@@ -39,6 +39,7 @@
import com.vaadin.data.util.ObjectProperty;
import com.vaadin.server.ErrorMessage;
import com.vaadin.ui.Component;
+import com.vaadin.ui.Component.Focusable;
import com.vaadin.ui.ComponentContainer;
import com.vaadin.ui.Field;
@@ -46,11 +47,9 @@
/**
* This presenter is responsible to render a text field on the given layout.
*/
-public class SuggestTextFieldPresentation extends
- AbstractFieldWidgetPresenter<Component> {
+public class SuggestTextFieldPresentation extends AbstractFieldWidgetPresenter<Component> {
- private static final Logger LOGGER = LoggerFactory
- .getLogger(SuggestTextFieldPresentation.class);
+ private static final Logger LOGGER = LoggerFactory.getLogger(SuggestTextFieldPresentation.class);
/** The model access. */
private final ModelAccess modelAccess;
@@ -67,6 +66,10 @@
/** The value binding. */
private Binding valueBinding;
+ private Binding keyBinding;
+
+ private boolean updateBinding;
+
/**
* Constructor.
*
@@ -75,8 +78,7 @@
*/
public SuggestTextFieldPresentation(IElementEditpart editpart) {
super((ISuggestTextFieldEditpart) editpart);
- this.modelAccess = new ModelAccess(
- (YSuggestTextField) editpart.getModel());
+ this.modelAccess = new ModelAccess((YSuggestTextField) editpart.getModel());
}
/**
@@ -111,8 +113,7 @@
text.addSelectionChangedListener(new SuggestTextField.SelectionChangedListener() {
@Override
- public void selectionChanged(
- SuggestTextField.SelectionChangedEvent event) {
+ public void selectionChanged(SuggestTextField.SelectionChangedEvent event) {
Object itemId = event.getItemId();
internalSetLastSuggestion(itemId);
}
@@ -122,22 +123,18 @@
IBeanSearchServiceFactory factory = getViewContext()
.getService(IBeanSearchServiceFactory.class.getName());
if (factory != null) {
- ISharedStateContext sharedState = getViewContext()
- .getService(ISharedStateContext.class.getName());
+ ISharedStateContext sharedState = getViewContext().getService(ISharedStateContext.class.getName());
BeanServiceLazyLoadingContainer<?> datasource = new BeanServiceLazyLoadingContainer(
- factory.createService(modelAccess.yField.getType()),
- modelAccess.yField.getType(), sharedState);
+ factory.createService(modelAccess.yField.getType()), modelAccess.yField.getType(),
+ sharedState);
text.setContainerDataSource(datasource);
- text.setCaptionPropertyId(modelAccess.yField
- .getItemCaptionProperty());
- text.setFilterPropertyId(modelAccess.yField
- .getItemFilterProperty());
+ text.setCaptionPropertyId(modelAccess.yField.getItemCaptionProperty());
+ text.setFilterPropertyId(modelAccess.yField.getItemFilterProperty());
String uuidProp = modelAccess.yField.getItemUUIDProperty();
if (uuidProp != null && !uuidProp.equals("")) {
- text.setUniqueIdPropertyId(modelAccess.yField
- .getItemUUIDProperty());
+ text.setUniqueIdPropertyId(modelAccess.yField.getItemUUIDProperty());
}
}
}
@@ -175,8 +172,7 @@
* Applies the labels to the widgets.
*/
protected void applyCaptions() {
- Util.applyCaptions(getI18nService(), modelAccess.getLabel(),
- modelAccess.getLabelI18nKey(), getLocale(), text);
+ Util.applyCaptions(getI18nService(), modelAccess.getLabel(), modelAccess.getLabelI18nKey(), getLocale(), text);
}
/*
@@ -199,18 +195,15 @@
* .ecview.core.common.model.core.YEmbeddableBindingEndpoint)
*/
@Override
- protected IObservable internalGetObservableEndpoint(
- YEmbeddableBindingEndpoint bindableValue) {
+ protected IObservable internalGetObservableEndpoint(YEmbeddableBindingEndpoint bindableValue) {
if (bindableValue == null) {
- throw new IllegalArgumentException(
- "BindableValue must not be null!");
+ throw new IllegalArgumentException("BindableValue must not be null!");
}
if (bindableValue instanceof YEmbeddableValueEndpoint) {
return internalGetValueEndpoint();
}
- throw new IllegalArgumentException("Not a valid input: "
- + bindableValue);
+ throw new IllegalArgumentException("Not a valid input: " + bindableValue);
}
/**
@@ -232,8 +225,7 @@
* @param field
* the field
*/
- protected void createBindings(YSuggestTextField yField,
- SuggestTextField field) {
+ protected void createBindings(YSuggestTextField yField, SuggestTextField field) {
updateValueBinding(field);
super.createBindings(yField, field, null);
@@ -252,29 +244,49 @@
unregisterBinding(valueBinding);
}
+ if (keyBinding != null) {
+ unregisterBinding(keyBinding);
+ }
+
if (field == null) {
return;
}
- field.setSuggestionEnabled(modelAccess.yField.isUseSuggestions());
+ try {
+ updateBinding = true;
- if (modelAccess.yField.isUseSuggestions()) {
- // in suggest mode do not update from UI to model
- valueBinding = createBindingsValue(castEObject(getModel()),
- ExtensionModelPackage.Literals.YSUGGEST_TEXT_FIELD__VALUE,
- field.getTextField(), new UpdateValueStrategy(
- UpdateValueStrategy.POLICY_NEVER),
- new UpdateValueStrategy(UpdateValueStrategy.POLICY_UPDATE));
- } else {
- valueBinding = createBindingsValue(castEObject(getModel()),
- ExtensionModelPackage.Literals.YSUGGEST_TEXT_FIELD__VALUE,
- field.getTextField(), new UpdateValueStrategy(
- UpdateValueStrategy.POLICY_UPDATE),
- new UpdateValueStrategy(UpdateValueStrategy.POLICY_UPDATE));
+ // suppress suggestions
+ field.setSuggestionEnabled(false);
+
+ if (modelAccess.yField.isUseSuggestions()) {
+ // in suggest mode do not update from UI to model
+ keyBinding = createBindingsByAccessor(castEObject(getModel()),
+ ExtensionModelPackage.Literals.YSUGGEST_TEXT_FIELD__KEYS, field, "keys",
+ new UpdateValueStrategy(UpdateValueStrategy.POLICY_NEVER),
+ new UpdateValueStrategy(UpdateValueStrategy.POLICY_UPDATE));
+ valueBinding = createBindingsValue(castEObject(getModel()),
+ ExtensionModelPackage.Literals.YSUGGEST_TEXT_FIELD__VALUE, field.getTextField(),
+ new UpdateValueStrategy(UpdateValueStrategy.POLICY_NEVER),
+ new UpdateValueStrategy(UpdateValueStrategy.POLICY_UPDATE));
+ } else {
+ keyBinding = createBindingsByAccessor(castEObject(getModel()),
+ ExtensionModelPackage.Literals.YSUGGEST_TEXT_FIELD__KEYS, field, "keys",
+ new UpdateValueStrategy(UpdateValueStrategy.POLICY_UPDATE),
+ new UpdateValueStrategy(UpdateValueStrategy.POLICY_UPDATE));
+ valueBinding = createBindingsValue(castEObject(getModel()),
+ ExtensionModelPackage.Literals.YSUGGEST_TEXT_FIELD__VALUE, field.getTextField(),
+ new UpdateValueStrategy(UpdateValueStrategy.POLICY_UPDATE),
+ new UpdateValueStrategy(UpdateValueStrategy.POLICY_UPDATE));
+ }
+
+ field.setSuggestionEnabled(modelAccess.yField.isUseSuggestions());
+
+ // create the model binding from model to ECView-model
+ registerBinding(valueBinding);
+ registerBinding(keyBinding);
+ } finally {
+ updateBinding = false;
}
-
- // create the model binding from ridget to ECView-model
- registerBinding(valueBinding);
}
/*
@@ -389,13 +401,14 @@
}
protected void internalSetLastSuggestion(Object itemId) {
- IReloadRequestService service = getViewContext()
- .getService(IReloadRequestService.class.getName());
+ IReloadRequestService service = getViewContext().getService(IReloadRequestService.class.getName());
if (service != null && itemId != null) {
- service.requestReload(getCastedModel(),
- itemId);
+ service.requestReload(getCastedModel(), itemId);
}
modelAccess.yField.setLastSuggestion(itemId);
+ if (itemId != null) {
+ modelAccess.yField.setEvent(YSuggestTextFieldEvents.SELECTED);
+ }
}
/**
@@ -478,7 +491,9 @@
* The Class CustomTextField.
*/
@SuppressWarnings("serial")
- private class CustomTextField extends SuggestTextField {
+ private class CustomTextField extends SuggestTextField implements Focusable {
+
+ private int tabIndex;
/*
* (non-Javadoc)
@@ -497,6 +512,48 @@
return message;
}
+ @Override
+ public void focus() {
+ if (getTextField() != null) {
+ getTextField().focus();
+ }
+ }
+
+ @Override
+ protected TextFieldCustom createTextField() {
+ return new TextFieldCustom() {
+ @Override
+ public ErrorMessage getErrorMessage() {
+ if (isDisposed()) {
+ // after disposal, Vaadin will call this method once.
+ return null;
+ }
+
+ ErrorMessage message = super.getErrorMessage();
+ reportValidationError(message);
+ return message;
+ }
+ };
+ }
+
+ @Override
+ public void setSuggestionEnabled(boolean suggestionEnabled) {
+ super.setSuggestionEnabled(suggestionEnabled);
+
+ if (!updateBinding) {
+ modelAccess.yField.setUseSuggestions(suggestionEnabled);
+ }
+ }
+
+ public int getTabIndex() {
+ return tabIndex;
+ }
+
+ @Override
+ public void setTabIndex(int tabIndex) {
+ this.tabIndex = tabIndex;
+ }
+
}
/**
@@ -518,8 +575,7 @@
} else if (msg.getFeature() == ExtensionModelPackage.Literals.YSUGGEST_TEXT_FIELD__AUTO_HIDE_POPUP) {
text.setAutoHide(msg.getNewBooleanValue());
} else if (msg.getFeature() == ExtensionModelPackage.Literals.YSUGGEST_TEXT_FIELD__EVENT) {
- YSuggestTextFieldEvents event = (YSuggestTextFieldEvents) msg
- .getNewValue();
+ YSuggestTextFieldEvents event = (YSuggestTextFieldEvents) msg.getNewValue();
if (event != null) {
doExecuteEvent(event);
}
diff --git a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/TablePresentation.java b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/TablePresentation.java
index 1875af6..75ab089 100644
--- a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/TablePresentation.java
+++ b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/TablePresentation.java
@@ -15,12 +15,21 @@
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
+import java.util.Map.Entry;
import java.util.Set;
+import java.util.Timer;
+import java.util.TimerTask;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
import org.eclipse.core.databinding.observable.IObservable;
import org.eclipse.core.databinding.observable.list.IObservableList;
import org.eclipse.core.databinding.observable.value.IObservableValue;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.impl.AdapterImpl;
import org.eclipse.emf.databinding.EMFProperties;
+import org.eclipse.osbp.blob.component.BlobComponent;
+import org.eclipse.osbp.dsl.semantic.dto.util.NamingConventionsUtil;
import org.eclipse.osbp.ecview.core.common.editpart.IConverterEditpart;
import org.eclipse.osbp.ecview.core.common.editpart.IElementEditpart;
import org.eclipse.osbp.ecview.core.common.editpart.emf.ElementEditpart;
@@ -32,6 +41,8 @@
import org.eclipse.osbp.ecview.core.common.model.core.YEmbeddableSelectionEndpoint;
import org.eclipse.osbp.ecview.core.common.model.core.YFlatAlignment;
import org.eclipse.osbp.ecview.core.common.model.datatypes.YDatadescription;
+import org.eclipse.osbp.ecview.core.common.notification.ILifecycleEvent;
+import org.eclipse.osbp.ecview.core.common.notification.ILifecycleService;
import org.eclipse.osbp.ecview.core.common.presentation.DelegatingConverterFactory;
import org.eclipse.osbp.ecview.core.databinding.emf.model.ECViewModelBindable;
import org.eclipse.osbp.ecview.core.extension.model.extension.ExtensionModelPackage;
@@ -40,8 +51,13 @@
import org.eclipse.osbp.ecview.core.extension.model.extension.YSortColumn;
import org.eclipse.osbp.ecview.core.extension.model.extension.YTable;
import org.eclipse.osbp.ecview.core.ui.core.editparts.extension.ITableEditpart;
+import org.eclipse.osbp.ecview.extension.api.ILayoutingStrategy;
import org.eclipse.osbp.runtime.common.annotations.DtoUtils;
import org.eclipse.osbp.runtime.common.annotations.PropertiesUtil;
+import org.eclipse.osbp.runtime.common.event.EventDispatcherEvent;
+import org.eclipse.osbp.runtime.common.event.EventDispatcherEvent.EventDispatcherCommand;
+import org.eclipse.osbp.runtime.common.event.EventDispatcherEvent.EventDispatcherDataTag;
+import org.eclipse.osbp.runtime.common.event.IEventDispatcher;
import org.eclipse.osbp.runtime.common.i18n.I18nUtil;
import org.eclipse.osbp.runtime.common.i18n.II18nService;
import org.eclipse.osbp.runtime.common.state.ISharedStateContext;
@@ -49,22 +65,29 @@
import org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.internal.util.Util;
import org.eclipse.osbp.runtime.web.vaadin.common.converter.StringToFormattedNumberConverter;
import org.eclipse.osbp.runtime.web.vaadin.common.data.BeanServiceLazyLoadingContainer;
+import org.eclipse.osbp.runtime.web.vaadin.common.data.DeepResolvingBeanItem;
import org.eclipse.osbp.runtime.web.vaadin.common.data.DeepResolvingBeanItemContainer;
import org.eclipse.osbp.runtime.web.vaadin.common.data.IBeanSearchService;
import org.eclipse.osbp.runtime.web.vaadin.common.data.IBeanSearchServiceFactory;
+import org.eclipse.osbp.runtime.web.vaadin.common.data.IBeanToUniqueHashIdProvider;
import org.eclipse.osbp.runtime.web.vaadin.common.data.ILazyRefreshFilterable;
import org.eclipse.osbp.runtime.web.vaadin.common.data.INestedPropertyAble;
import org.eclipse.osbp.runtime.web.vaadin.common.resource.IResourceProvider;
+import org.eclipse.osbp.ui.api.customfields.IBlobService;
import com.vaadin.data.Container;
import com.vaadin.data.Container.Filter;
import com.vaadin.data.Container.Filterable;
import com.vaadin.data.Item;
import com.vaadin.data.Property;
+import com.vaadin.data.Property.ValueChangeListener;
import com.vaadin.data.util.IndexedContainer;
import com.vaadin.data.util.ObjectProperty;
import com.vaadin.data.util.converter.Converter;
import com.vaadin.data.util.converter.ConverterUtil;
+import com.vaadin.server.ClientConnector;
+import com.vaadin.server.ClientConnector.AttachEvent;
+import com.vaadin.server.ClientConnector.DetachEvent;
import com.vaadin.server.ErrorMessage;
import com.vaadin.server.Resource;
import com.vaadin.server.ThemeResource;
@@ -78,13 +101,13 @@
import com.vaadin.ui.Table.RowHeaderMode;
import com.vaadin.ui.UI;
-// TODO: Auto-generated Javadoc
/**
* This presenter is responsible to render a table on the given layout.
*/
-@SuppressWarnings("restriction")
+@SuppressWarnings({ "restriction", "serial" })
public class TablePresentation extends AbstractFieldWidgetPresenter<Component>
- implements IFilterablePresentation, IRefreshRowsPresentation {
+ implements IFilterablePresentation, IRefreshRowsPresentation, ClientConnector.DetachListener,
+ ClientConnector.AttachListener, IEventDispatcher.Receiver {
/** The model access. */
private final ModelAccess modelAccess;
@@ -101,6 +124,12 @@
private boolean containerReadonly;
+ private AdapterCustom adapter;
+
+ private IEventDispatcher eventDispatcher;
+
+ private IBlobService blobService;
+
/**
* Constructor.
*
@@ -110,6 +139,8 @@
public TablePresentation(IElementEditpart editpart) {
super((ITableEditpart) editpart);
this.modelAccess = new ModelAccess((YTable) editpart.getModel());
+ adapter = new AdapterCustom();
+ this.modelAccess.yField.eAdapters().add(adapter);
}
/**
@@ -119,7 +150,6 @@
@Override
public Component doCreateWidget(Object parent) {
if (table == null) {
-
table = new CustomTable();
table.addStyleName(CSS_CLASS_CONTROL);
table.setMultiSelect(modelAccess.yField.getSelectionType() == YSelectionType.MULTI);
@@ -127,6 +157,36 @@
table.setImmediate(true);
setupComponent(table, getCastedModel());
+ table.addValueChangeListener(new ValueChangeListener() {
+ @Override
+ public void valueChange(com.vaadin.data.Property.ValueChangeEvent event) {
+ Class<?> bean = modelAccess.yField.getType();
+ if (bean != null) {
+ eventDispatcher = getViewContext().getService(IEventDispatcher.class.getName());
+ blobService = getViewContext().getService(IBlobService.class.getName());
+ String topic = NamingConventionsUtil.toFqnEntityName(bean.getName()) + "."
+ + DtoUtils.getIdField(bean).getName();
+ EventDispatcherEvent evnt = new EventDispatcherEvent(EventDispatcherCommand.SELECT, topic,
+ toString());
+ Object value = table.getValue();
+ if (value != null) {
+ if (table.getContainerDataSource() instanceof DeepResolvingBeanItemContainer) {
+ DeepResolvingBeanItemContainer container = (DeepResolvingBeanItemContainer) table
+ .getContainerDataSource();
+ DeepResolvingBeanItem<?> item = container.getItem(value);
+ if (item != null) {
+ evnt.addItem(EventDispatcherDataTag.ID, DtoUtils.getIdValue(item.getBean()));
+ eventDispatcher.sendEvent(evnt);
+ }
+ }
+ } else {
+ evnt.addItem(EventDispatcherDataTag.ID, null);
+ eventDispatcher.sendEvent(evnt);
+ }
+ }
+ }
+ });
+
associateWidget(table, modelAccess.yField);
if (modelAccess.isCssIdValid()) {
table.setId(modelAccess.getCssID());
@@ -138,8 +198,7 @@
property = new ObjectProperty(new HashSet(), Set.class);
} else {
if (modelAccess.yField.getType() != null) {
- property = new ObjectProperty(null,
- modelAccess.yField.getType());
+ property = new ObjectProperty(null, modelAccess.yField.getType());
} else {
property = new ObjectProperty(null, Object.class);
}
@@ -155,19 +214,15 @@
if (modelAccess.yField.getType() != null) {
IBeanSearchService<?> service = null;
IBeanSearchServiceFactory factory = getViewContext()
- .getService(
- IBeanSearchServiceFactory.class.getName());
+ .getService(IBeanSearchServiceFactory.class.getName());
if (factory != null) {
- service = factory.createService(modelAccess.yField
- .getType());
+ service = factory.createService(modelAccess.yField.getType());
}
- if (modelAccess.yField.isUseBeanService()
- && service != null) {
+ if (modelAccess.yField.isUseBeanService() && service != null) {
ISharedStateContext sharedState = getViewContext()
.getService(ISharedStateContext.class.getName());
- BeanServiceLazyLoadingContainer<?> datasource = new BeanServiceLazyLoadingContainer(
- service, modelAccess.yField.getType(),
- sharedState);
+ BeanServiceLazyLoadingContainer<?> datasource = new BeanServiceLazyLoadingContainer(service,
+ modelAccess.yField.getType(), sharedState);
table.setContainerDataSource(datasource);
containerReadonly = true;
} else {
@@ -179,15 +234,13 @@
} else {
IndexedContainer container = new IndexedContainer();
container.addContainerProperty("for", String.class, null);
- container.addContainerProperty("preview", String.class,
- null);
+ container.addContainerProperty("preview", String.class, null);
container.addItem(new String[] { "Some value", "other" });
table.setContainerDataSource(container);
}
}
- String itemImageProperty = modelAccess.yField
- .getItemImageProperty();
+ String itemImageProperty = modelAccess.yField.getItemImageProperty();
if (itemImageProperty != null && !itemImageProperty.equals("")) {
table.setItemIconPropertyId(itemImageProperty);
table.setRowHeaderMode(RowHeaderMode.EXPLICIT);
@@ -228,23 +281,19 @@
Class<?> type = modelAccess.yField.getType();
// set the visible columns and icons
- List<String> columns = new ArrayList<String>();
- Collection<?> propertyIds = table.getContainerDataSource()
- .getContainerPropertyIds();
+ List<String> columns = new ArrayList<>();
+ Collection<?> propertyIds = table.getContainerDataSource().getContainerPropertyIds();
if (!modelAccess.yField.getColumns().isEmpty()) {
for (YColumn yColumn : modelAccess.yField.getColumns()) {
- if (yColumn.isVisible()
- && propertyIds.contains(yColumn.getPropertyPath())
- || isNestedColumn(yColumn)) {
+ if (yColumn.isVisible() && propertyIds.contains(yColumn.getPropertyPath()) || isNestedColumn(yColumn)) {
columns.add(yColumn.getPropertyPath());
}
}
// add nested properties
if (table.getContainerDataSource() instanceof INestedPropertyAble) {
- INestedPropertyAble<?> container = (INestedPropertyAble<?>) table
- .getContainerDataSource();
+ INestedPropertyAble<?> container = (INestedPropertyAble<?>) table.getContainerDataSource();
for (String property : columns) {
if (property.contains(".")) {
container.addNestedContainerProperty(property);
@@ -255,8 +304,7 @@
table.setVisibleColumns(columns.toArray(new Object[columns.size()]));
table.setColumnCollapsingAllowed(true);
- II18nService i18nService = getViewContext().getService(
- II18nService.class.getName());
+ II18nService i18nService = getViewContext().getService(II18nService.class.getName());
IResourceProvider resourceProvider = (IResourceProvider) getViewContext()
.getService(IResourceProvider.class.getName());
// traverse the columns again and set other properties
@@ -266,14 +314,11 @@
String columnId = yColumn.getPropertyPath();
table.setColumnHeader(columnId, getColumnHeader(yColumn));
- table.setColumnAlignment(columnId,
- toAlign(yColumn.getAlignment()));
+ table.setColumnAlignment(columnId, toAlign(yColumn.getAlignment()));
table.setColumnCollapsed(columnId, yColumn.isCollapsed());
- table.setColumnCollapsible(columnId,
- yColumn.isCollapsible());
+ table.setColumnCollapsible(columnId, yColumn.isCollapsible());
if (yColumn.getExpandRatio() >= 0) {
- table.setColumnExpandRatio(columnId,
- yColumn.getExpandRatio());
+ table.setColumnExpandRatio(columnId, yColumn.getExpandRatio());
}
// Boolean check to display a checkbox instead of the
// boolean value as String.
@@ -281,74 +326,86 @@
// check to avoid an IllegalArgumentException adding an
// already existing ColumnGenerator.
if (table.getColumnGenerator(columnId) == null) {
- table.addGeneratedColumn(columnId,
- new Table.ColumnGenerator() {
- public Component generateCell(
- Table source, Object itemId,
- Object columnId) {
- Item item = table.getItem(itemId);
- CheckBox box = new CheckBox();
- box.setEnabled(false);
- Boolean value = (Boolean) item
- .getItemProperty(columnId)
- .getValue();
- box.setValue(value);
- return box;
- }
- });
+ table.addGeneratedColumn(columnId, new Table.ColumnGenerator() {
+ @Override
+ public Component generateCell(Table source, Object itemId, Object columnId) {
+ Item item = table.getItem(itemId);
+ CheckBox box = new CheckBox();
+ box.setEnabled(false);
+ Boolean value = (Boolean) item.getItemProperty(columnId).getValue();
+ box.setValue(value);
+ return box;
+ }
+ });
}
}
// --------------
- if (yColumn.getIcon() != null
- && !yColumn.getIcon().equals("")) {
+ if (yColumn.getIcon() != null && !yColumn.getIcon().equals("")) {
if (i18nService != null) {
- String translation = i18nService.getValue(yColumn
- .getIcon(), UI.getCurrent().getLocale());
+ String translation = i18nService.getValue(yColumn.getIcon(), UI.getCurrent().getLocale());
if (translation != null && !translation.equals("")) {
- Resource icon = resourceProvider
- .getResource(translation);
+ Resource icon = resourceProvider.getResource(translation);
if (icon != null) {
table.setColumnIcon(columnId, icon);
}
}
} else {
- table.setColumnIcon(columnId, resourceProvider
- .getResource(yColumn.getIcon()));
+ table.setColumnIcon(columnId, resourceProvider.getResource(yColumn.getIcon()));
}
}
+ // Blob check to display a blob image
+ if ((yColumn.getType() == String.class)
+ && ((yColumn.getProperties() != null) && (!yColumn.getProperties().isEmpty()))) {
+ Stream<Entry<String, String>> propertyStream = yColumn.getProperties().stream()
+ .filter(prop -> prop.getKey().equalsIgnoreCase(ILayoutingStrategy.PROPERTY_BLOB));
+ // Only if one 'Blob' or 'blob' property entry exists
+ if (propertyStream.count() == 1) {
+ String displayResolution = yColumn.getProperties().stream()
+ .filter(prop -> prop.getKey().equalsIgnoreCase(ILayoutingStrategy.PROPERTY_BLOB))
+ .map(p -> p.getValue()).collect(Collectors.joining());
+ // check to avoid an IllegalArgumentException adding
+ // an
+ // already existing ColumnGenerator.
+ if (table.getColumnGenerator(columnId) == null) {
+ table.addGeneratedColumn(columnId, new Table.ColumnGenerator() {
+
+ @Override
+ public Component generateCell(Table source, Object itemId, Object columnId) {
+ Item item = table.getItem(itemId);
+ BlobComponent blob = new BlobComponent(blobService, (String) item.getItemProperty(columnId).getValue(), Integer.parseInt(displayResolution));
+ return blob;
+ }
+ });
+ }
+ }
+ }
+
}
}
// apply the converters
//
- for (YColumn yColumn : modelAccess.yField.getColumns()) {
+ for (
+
+ YColumn yColumn : modelAccess.yField.getColumns()) {
if (yColumn.getConverter() == null) {
// try to derive the converter from the datatype property at
// field level
String columnId = yColumn.getPropertyPath();
- Class<?> resultClass = table.getContainerDataSource()
- .getType(columnId);
+ Class<?> resultClass = table.getContainerDataSource().getType(columnId);
if (Number.class.isAssignableFrom(resultClass)
- && PropertiesUtil.hasKey(type, columnId,
- "decimalformat")) {
- String format = PropertiesUtil.getValue(type, columnId,
- "decimalformat");
+ && PropertiesUtil.hasKey(type, columnId, "decimalformat")) {
+ String format = PropertiesUtil.getValue(type, columnId, "decimalformat");
if (format != null && !format.isEmpty()) {
- table.setConverter(
- columnId,
- new StringToFormattedNumberConverter(
- format,
- (Class<? extends Number>) resultClass));
+ table.setConverter(columnId, new StringToFormattedNumberConverter(format,
+ (Class<? extends Number>) resultClass));
}
}
} else {
@SuppressWarnings("rawtypes")
- Converter converter = (Converter) DelegatingConverterFactory
- .getInstance().createConverter(
- getViewContext(),
- (IConverterEditpart) ElementEditpart
- .getEditpart(getViewContext(),
- yColumn.getConverter()));
+ Converter converter = (Converter) DelegatingConverterFactory.getInstance().createConverter(
+ getViewContext(),
+ (IConverterEditpart) ElementEditpart.getEditpart(getViewContext(), yColumn.getConverter()));
if (converter != null) {
String columnId = yColumn.getPropertyPath();
table.setConverter(columnId, converter);
@@ -371,13 +428,11 @@
table.setCellStyleGenerator(new Table.CellStyleGenerator() {
@Override
- public String getStyle(Table source, Object itemId,
- Object propertyId) {
+ public String getStyle(Table source, Object itemId, Object propertyId) {
if (itemId == null || propertyId == null) {
return "";
}
- if (Number.class.isAssignableFrom(source
- .getContainerDataSource().getType(propertyId))) {
+ if (Number.class.isAssignableFrom(source.getContainerDataSource().getType(propertyId))) {
return " v-align-right";
}
return "";
@@ -430,30 +485,36 @@
// add the nested sort columns to the container
if (isNestedColumn(yColumn)) {
if (table.getContainerDataSource() instanceof INestedPropertyAble) {
- INestedPropertyAble<?> container = (INestedPropertyAble<?>) table
- .getContainerDataSource();
- container.addNestedContainerProperty(yColumn
- .getPropertyPath());
+ INestedPropertyAble<?> container = (INestedPropertyAble<?>) table.getContainerDataSource();
+ container.addNestedContainerProperty(yColumn.getPropertyPath());
}
}
sortCol.add(yColumn.getPropertyPath());
sortDirection.add(yColumn.isAsc());
}
- Container.Sortable sortable = (Container.Sortable) table
- .getContainerDataSource();
+ Container.Sortable sortable = (Container.Sortable) table.getContainerDataSource();
boolean[] asc = new boolean[sortDirection.size()];
for (int i = 0; i < sortDirection.size(); i++) {
asc[i] = sortDirection.get(i);
}
- sortable.sort(sortCol.toArray(new String[sortCol.size()]), asc);
-
- if (!sortCol.isEmpty()) {
- table.setSortContainerPropertyId(sortCol.get(0));
- table.setSortAscending(asc[0]);
+ ILifecycleService lfService = getViewContext().getService(ILifecycleService.class.getName());
+ if(!lfService.getState().equals(ILifecycleEvent.TYPE_RENDERING)) {
+ sortable.sort(sortCol.toArray(new String[sortCol.size()]), asc);
+ if (!sortCol.isEmpty()) {
+ table.setSortContainerPropertyId(sortCol.get(0));
+ table.setSortAscending(asc[0]);
+ }
}
+
+ }
+ }
+
+ public void doSort() {
+ if (table != null) {
+ table.sort();
}
}
@@ -481,8 +542,7 @@
* @return true, if is nested column
*/
protected boolean isNestedColumn(YColumn yColumn) {
- return yColumn.getPropertyPath() != null
- && yColumn.getPropertyPath().contains(".");
+ return yColumn.getPropertyPath() != null && yColumn.getPropertyPath().contains(".");
}
/**
@@ -493,8 +553,7 @@
* @return true, if is nested column
*/
protected boolean isNestedColumn(YSortColumn yColumn) {
- return yColumn.getPropertyPath() != null
- && yColumn.getPropertyPath().contains(".");
+ return yColumn.getPropertyPath() != null && yColumn.getPropertyPath().contains(".");
}
/**
@@ -571,8 +630,7 @@
applyColumns();
}
- Util.applyCaptions(getI18nService(), modelAccess.getLabel(),
- modelAccess.getLabelI18nKey(), getLocale(), table);
+ Util.applyCaptions(getI18nService(), modelAccess.getLabel(), modelAccess.getLabelI18nKey(), getLocale(), table);
}
/*
@@ -589,11 +647,9 @@
filterable.removeAllContainerFilters();
if (filter != null) {
filterable.addContainerFilter((Filter) filter);
- } else {
- if (container instanceof ILazyRefreshFilterable) {
- ILazyRefreshFilterable lazyFilterable = (ILazyRefreshFilterable) container;
- lazyFilterable.refreshFilters();
- }
+ } else if (container instanceof ILazyRefreshFilterable) {
+ ILazyRefreshFilterable lazyFilterable = (ILazyRefreshFilterable) container;
+ lazyFilterable.removeAllContainerFilters();
}
}
}
@@ -618,11 +674,9 @@
* .ecview.core.common.model.core.YEmbeddableBindingEndpoint)
*/
@Override
- protected IObservable internalGetObservableEndpoint(
- YEmbeddableBindingEndpoint bindableValue) {
+ protected IObservable internalGetObservableEndpoint(YEmbeddableBindingEndpoint bindableValue) {
if (bindableValue == null) {
- throw new IllegalArgumentException(
- "BindableValue must not be null!");
+ throw new IllegalArgumentException("BindableValue must not be null!");
}
if (bindableValue instanceof YEmbeddableCollectionEndpoint) {
@@ -632,8 +686,7 @@
} else if (bindableValue instanceof YEmbeddableMultiSelectionEndpoint) {
return internalGetMultiSelectionEndpoint();
}
- throw new IllegalArgumentException("Not a valid input: "
- + bindableValue);
+ throw new IllegalArgumentException("Not a valid input: " + bindableValue);
}
/**
@@ -643,9 +696,7 @@
*/
protected IObservableList internalGetCollectionEndpoint() {
// return the observable value for text
- return EMFProperties.list(
- ExtensionModelPackage.Literals.YTABLE__COLLECTION).observe(
- getModel());
+ return EMFProperties.list(ExtensionModelPackage.Literals.YTABLE__COLLECTION).observe(getModel());
}
/**
@@ -655,16 +706,13 @@
* the y endpoint
* @return the i observable value
*/
- protected IObservableValue internalGetSelectionEndpoint(
- YEmbeddableSelectionEndpoint yEndpoint) {
+ protected IObservableValue internalGetSelectionEndpoint(YEmbeddableSelectionEndpoint yEndpoint) {
- String attributePath = ECViewModelBindable.getAttributePath(
- ExtensionModelPackage.Literals.YTABLE__SELECTION,
+ String attributePath = ECViewModelBindable.getAttributePath(ExtensionModelPackage.Literals.YTABLE__SELECTION,
yEndpoint.getAttributePath());
// return the observable value for text
- return ECViewModelBindable.observeValue(castEObject(getModel()),
- attributePath, modelAccess.yField.getType(),
+ return ECViewModelBindable.observeValue(castEObject(getModel()), attributePath, modelAccess.yField.getType(),
modelAccess.yField.getEmfNsURI());
}
@@ -675,9 +723,7 @@
*/
protected IObservableList internalGetMultiSelectionEndpoint() {
// return the observable value for text
- return EMFProperties.list(
- ExtensionModelPackage.Literals.YTABLE__MULTI_SELECTION)
- .observe(getModel());
+ return EMFProperties.list(ExtensionModelPackage.Literals.YTABLE__MULTI_SELECTION).observe(getModel());
}
/**
@@ -690,23 +736,18 @@
*/
protected void createBindings(YTable yField, Table field) {
// create the model binding from ridget to ECView-model
- registerBinding(createBindingsContainerContents(
- castEObject(getModel()),
- ExtensionModelPackage.Literals.YTABLE__COLLECTION, field,
- yField.getType(), containerReadonly));
+ registerBinding(createBindingsContainerContents(castEObject(getModel()),
+ ExtensionModelPackage.Literals.YTABLE__COLLECTION, field, yField.getType(), containerReadonly));
// create the model binding from ridget to ECView-model
if (modelAccess.yField.getSelectionType() == YSelectionType.MULTI) {
// create the model binding from ridget to ECView-model
- registerBinding(createBindingsMultiSelection(
- castEObject(getModel()),
- ExtensionModelPackage.Literals.YTABLE__MULTI_SELECTION,
- field, yField.getType()));
+ registerBinding(createBindingsMultiSelection(castEObject(getModel()),
+ ExtensionModelPackage.Literals.YTABLE__MULTI_SELECTION, field, yField.getType()));
} else {
// create the model binding from ridget to ECView-model
registerBinding(createBindingsSelection(castEObject(getModel()),
- ExtensionModelPackage.Literals.YTABLE__SELECTION, field,
- yField.getType()));
+ ExtensionModelPackage.Literals.YTABLE__SELECTION, field, yField.getType()));
}
@@ -747,7 +788,7 @@
// unbind all active bindings
unbind();
- Component parent = ((Component) table.getParent());
+ Component parent = (table.getParent());
if (parent != null && parent instanceof ComponentContainer) {
((ComponentContainer) parent).removeComponent(table);
}
@@ -766,6 +807,9 @@
protected void internalDispose() {
try {
unrender();
+
+ modelAccess.yField.eAdapters().remove(adapter);
+
} finally {
super.internalDispose();
}
@@ -834,8 +878,7 @@
* @return the label
*/
public String getLabel() {
- return yField.getDatadescription() != null ? yField
- .getDatadescription().getLabel() : null;
+ return yField.getDatadescription() != null ? yField.getDatadescription().getLabel() : null;
}
/**
@@ -844,8 +887,7 @@
* @return the label i18n key
*/
public String getLabelI18nKey() {
- return yField.getDatadescription() != null ? yField
- .getDatadescription().getLabelI18nKey() : null;
+ return yField.getDatadescription() != null ? yField.getDatadescription().getLabelI18nKey() : null;
}
}
@@ -858,6 +900,47 @@
/** The item icon property id. */
private Object itemIconPropertyId;
+ private String itemIdHash;
+ private boolean updateMode;
+
+ private Timer sortTimer;
+ private boolean isSorting;
+
+ @SuppressWarnings("unchecked")
+ CustomTable() {
+ addValueChangeListener(e -> {
+ if (getContainerDataSource() instanceof IBeanToUniqueHashIdProvider) {
+ IBeanToUniqueHashIdProvider<Object> hashIdProvider = (IBeanToUniqueHashIdProvider<Object>) getContainerDataSource();
+ Object selection = e.getProperty().getValue();
+ this.itemIdHash = hashIdProvider.getUniqueHashId(selection);
+ }
+ });
+ addItemSetChangeListener(e -> {
+ if (isSorting || getSortContainerPropertyId() == null || getUI() == null) {
+ return;
+ }
+ if (sortTimer != null) {
+ sortTimer.cancel();
+ }
+ sortTimer = new Timer();
+ sortTimer.schedule(new TimerTask() {
+ @Override
+ public void run() {
+ try {
+ isSorting = true;
+ getUI().accessSynchronously(() -> {
+ sort();
+ if (modelAccess.yField.isScrollToBottom()) {
+ setCurrentPageFirstItemIndex(size() - 1);
+ }
+ });
+ } finally {
+ isSorting = false;
+ }
+ }
+ }, 125);
+ });
+ }
/*
* (non-Javadoc)
@@ -866,8 +949,7 @@
* com.vaadin.ui.AbstractSelect#setItemIconPropertyId(java.lang.Object)
*/
@Override
- public void setItemIconPropertyId(Object propertyId)
- throws IllegalArgumentException {
+ public void setItemIconPropertyId(Object propertyId) throws IllegalArgumentException {
if (propertyId == null) {
super.setItemIconPropertyId(propertyId);
} else if (!getContainerPropertyIds().contains(propertyId)) {
@@ -884,9 +966,9 @@
*
* @see com.vaadin.ui.AbstractSelect#getItemIconPropertyId()
*/
+ @Override
public Object getItemIconPropertyId() {
- return itemIconPropertyId != null ? itemIconPropertyId : super
- .getItemIconPropertyId();
+ return itemIconPropertyId != null ? itemIconPropertyId : super.getItemIconPropertyId();
}
/*
@@ -894,12 +976,12 @@
*
* @see com.vaadin.ui.AbstractSelect#getItemIcon(java.lang.Object)
*/
+ @Override
public Resource getItemIcon(Object itemId) {
if (itemIconPropertyId == null) {
return super.getItemIcon(itemId);
} else {
- final Property<?> ip = getContainerProperty(itemId,
- getItemIconPropertyId());
+ final Property<?> ip = getContainerProperty(itemId, getItemIconPropertyId());
if (ip == null) {
return null;
}
@@ -917,9 +999,9 @@
* @see com.vaadin.ui.Table#formatPropertyValue(java.lang.Object,
* java.lang.Object, com.vaadin.data.Property)
*/
+ @Override
@SuppressWarnings({ "unchecked", "rawtypes" })
- protected String formatPropertyValue(Object rowId, Object colId,
- Property<?> property) {
+ protected String formatPropertyValue(Object rowId, Object colId, Property<?> property) {
if (property == null) {
return "";
}
@@ -928,23 +1010,18 @@
if (hasConverter(colId)) {
converter = getConverter(colId);
} else {
- converter = (Converter) ConverterUtil.getConverter(
- String.class, property.getType(), getSession());
+ converter = (Converter) ConverterUtil.getConverter(String.class, property.getType(), getSession());
}
Object value = property.getValue();
if (converter != null) {
- return converter.convertToPresentation(value, String.class,
- getLocale());
+ return converter.convertToPresentation(value, String.class, getLocale());
} else {
if (value instanceof Enum<?>) {
- return I18nUtil.translateEnum(getI18nService(), value,
- getLocale());
+ return I18nUtil.translateEnum(getI18nService(), value, getLocale());
} else if (value instanceof Boolean) {
- return I18nUtil.translateBoolean(getI18nService(),
- (Boolean) value, getLocale());
+ return I18nUtil.translateBoolean(getI18nService(), (Boolean) value, getLocale());
} else if (value instanceof Number) {
- return I18nUtil.translateNumber(getI18nService(),
- (Number) value, getLocale());
+ return I18nUtil.translateNumber(getI18nService(), (Number) value, getLocale());
}
}
return (null != value) ? value.toString() : "";
@@ -978,5 +1055,77 @@
setValue(getCurrentPageFirstItemId());
}
+
+ @Override
+ @SuppressWarnings("unchecked")
+ public void setContainerDataSource(Container newDataSource) {
+ super.setContainerDataSource(newDataSource);
+
+ if (getContainerDataSource() instanceof DeepResolvingBeanItemContainer) {
+ @SuppressWarnings("rawtypes")
+ final DeepResolvingBeanItemContainer ds = (DeepResolvingBeanItemContainer) getContainerDataSource();
+ ds.addItemSetChangeListener(e -> {
+
+ // lazy update the table selection
+ if (!updateMode && itemIdHash != null) {
+ updateMode = true;
+ final String targetItemIdHash = itemIdHash;
+ getUI().accessSynchronously(() -> {
+ for (Object itemId : e.getContainer().getItemIds()) {
+ if (targetItemIdHash.equals(ds.getUniqueHashId(itemId))) {
+ table.setValue(itemId);
+ break;
+ }
+ }
+ updateMode = false;
+ });
+ }
+ });
+ }
+ }
}
-}
+
+ private class AdapterCustom extends AdapterImpl {
+ @Override
+ public void notifyChanged(Notification notification) {
+ int featureId = notification.getFeatureID(YTable.class);
+ switch (notification.getEventType()) {
+ case Notification.SET:
+ if (featureId == ExtensionModelPackage.YTABLE__DO_SORT) {
+ doSort();
+ }
+ break;
+ default:
+
+ }
+ }
+ }
+
+ @Override
+ public void receiveEvent(EventDispatcherEvent event) {
+ switch (event.getCommand()) {
+ case REFRESH:
+ // if(!event.getSender().equals("net.osbee.sample.foodmart.tables.CashRegister"))
+ // {
+ // if(event.getTopic().equals("net.osbee.sample.foodmart.entities.CashRegister")){
+ refreshRows();
+ // }
+ // }
+ break;
+ case SELECT:
+ break;
+ default:
+ break;
+ }
+ }
+
+ @Override
+ public void attach(AttachEvent event) {
+ eventDispatcher.addEventReceiver(this);
+ }
+
+ @Override
+ public void detach(DetachEvent event) {
+ eventDispatcher.removeEventReceiver(this);
+ }
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/TextAreaPresentation.java b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/TextAreaPresentation.java
index 8bdf4a7..a12556b 100644
--- a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/TextAreaPresentation.java
+++ b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/TextAreaPresentation.java
@@ -14,7 +14,6 @@
import org.eclipse.core.databinding.observable.IObservable;
import org.eclipse.core.databinding.observable.value.IObservableValue;
-import org.eclipse.emf.common.util.EMap;
import org.eclipse.emf.databinding.EMFObservables;
import org.eclipse.osbp.ecview.core.common.editpart.IElementEditpart;
import org.eclipse.osbp.ecview.core.common.model.core.YEmbeddableBindingEndpoint;
@@ -169,10 +168,14 @@
* @param field
* the field
*/
- protected void createBindings(YTextArea yField, TextArea field) {
+ protected void createBindings(final YTextArea yField, TextArea field) {
registerBinding(createBindings_Value(castEObject(getModel()),
ExtensionModelPackage.Literals.YTEXT_AREA__VALUE, textArea));
+ field.addTextChangeListener(e -> {
+ yField.setLastTextChange(e.getText());
+ });
+
super.createBindings(yField, field, null);
}
diff --git a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/TextFieldPresentation.java b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/TextFieldPresentation.java
index 8a465e5..36ec67b 100644
--- a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/TextFieldPresentation.java
+++ b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/TextFieldPresentation.java
@@ -71,7 +71,7 @@
text.setNullRepresentation("");
text.setImmediate(true);
setupComponent(text, getCastedModel());
-
+
associateWidget(text, modelAccess.yField);
if (modelAccess.isCssIdValid()) {
text.setId(modelAccess.getCssID());
@@ -161,11 +161,15 @@
* @param field
* the field
*/
- protected void createBindings(YTextField yField, TextField field) {
+ protected void createBindings(final YTextField yField, TextField field) {
// create the model binding from ridget to ECView-model
registerBinding(createBindings_Value(castEObject(getModel()),
ExtensionModelPackage.Literals.YTEXT_FIELD__VALUE, text));
-
+
+ field.addTextChangeListener(e -> {
+ yField.setLastTextChange(e.getText());
+ });
+
super.createBindings(yField, field, null);
}
diff --git a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/ViewPresentation.java b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/ViewPresentation.java
index 7d0d296..0e7a449 100644
--- a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/ViewPresentation.java
+++ b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/ViewPresentation.java
@@ -37,15 +37,16 @@
import org.eclipse.osbp.ecview.core.util.emf.ModelUtil;
import org.eclipse.osbp.runtime.common.dispose.AbstractDisposable;
import org.eclipse.osbp.runtime.common.state.ISharedStateContext;
-import org.eclipse.osbp.runtime.designer.api.IWidgetDesignConfigurator;
import org.eclipse.osbp.runtime.designer.api.IDesignerService;
import org.eclipse.osbp.runtime.designer.api.IDesignerService.DesignEvent;
import org.eclipse.osbp.runtime.designer.api.IDesignerService.EventType;
import org.eclipse.osbp.runtime.designer.api.IDesignerService.IDesignListener;
+import org.eclipse.osbp.runtime.designer.api.IWidgetDesignConfigurator;
import org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.IConstants;
import org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.internal.services.WidgetAssocationsService;
import org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.internal.services.WidgetMouseClickService;
import org.eclipse.osbp.runtime.web.vaadin.databinding.VaadinObservables;
+import org.eclipse.osbp.vaadin.addons.suggesttext.SuggestTextField;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -56,6 +57,7 @@
import com.vaadin.ui.ComponentContainer;
import com.vaadin.ui.CssLayout;
import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.TextField;
import com.vaadin.ui.UI;
import com.vaadin.ui.Window;
@@ -365,6 +367,13 @@
.getWidget();
if (component instanceof Focusable) {
((Focusable) component).focus();
+
+ if(component instanceof TextField){
+ ((TextField) component).selectAll();
+ }else if(component instanceof SuggestTextField){
+ SuggestTextField field = (SuggestTextField) component;
+ field.getTextField().selectAll();
+ }
}
}
}
diff --git a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/binding/BindingManagerProvider.java b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/binding/BindingManagerProvider.java
index a79a04b..c9ae475 100644
--- a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/binding/BindingManagerProvider.java
+++ b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/binding/BindingManagerProvider.java
@@ -17,13 +17,12 @@
import org.eclipse.osbp.runtime.common.dispose.IDisposable;
import org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.VaadinRenderer;
import org.eclipse.osbp.runtime.web.vaadin.databinding.VaadinObservables;
+import org.osgi.service.component.annotations.Component;
-import com.vaadin.ui.Component;
-
-// TODO: Auto-generated Javadoc
/**
* The Class BindingManagerProvider.
*/
+@Component(immediate = true, service = { IServiceProvider.class }, property={"ecview.serviceprovider.level:String=view"})
public class BindingManagerProvider implements IServiceProvider {
/* (non-Javadoc)
@@ -55,7 +54,7 @@
IViewContext viewContext = (IViewContext) context;
final BindingManager bindingManager = new BindingManager(viewContext,
VaadinObservables.getRealm(VaadinObservables
- .getUI((Component) viewContext.getRootLayout())));
+ .getUI((com.vaadin.ui.Component) viewContext.getRootLayout())));
viewContext.addDisposeListener(new IDisposable.Listener() {
@Override
public void notifyDisposed(IDisposable notifier) {
diff --git a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/data/EnumOptionBean.java b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/data/EnumOptionBean.java
index 66b1b1f..2887ec4 100644
--- a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/data/EnumOptionBean.java
+++ b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/data/EnumOptionBean.java
@@ -13,8 +13,8 @@
public class EnumOptionBean {
private final Enum<?> enumx;
- private final String description;
- private final String imagePath;
+ private String description;
+ private String imagePath;
public EnumOptionBean(Enum<?> enumx, String description, String imagePath) {
super();
@@ -44,4 +44,12 @@
return imagePath;
}
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ public void setImagePath(String imagePath) {
+ this.imagePath = imagePath;
+ }
+
}
diff --git a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/data/EnumOptionBeanHelper.java b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/data/EnumOptionBeanHelper.java
index 69b2ac5..7713f81 100644
--- a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/data/EnumOptionBeanHelper.java
+++ b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/data/EnumOptionBeanHelper.java
@@ -17,6 +17,8 @@
import org.eclipse.osbp.runtime.common.i18n.I18nUtil;
import org.eclipse.osbp.runtime.common.i18n.II18nService;
+import com.vaadin.data.util.BeanItemContainer;
+
// TODO: Auto-generated Javadoc
/**
* The Class EnumOptionBeanHelper.
@@ -24,8 +26,9 @@
public class EnumOptionBeanHelper {
/**
- * Creates a list of enum options for the given enum. The services are used for internationalization und to find a proper image for the enum literal. Services and locale may be
- * <code>null</code>.
+ * Creates a list of enum options for the given enum. The services are used
+ * for internationalization und to find a proper image for the enum literal.
+ * Services and locale may be <code>null</code>.
*
* @param enumClass
* the enum class
@@ -35,7 +38,8 @@
* the locale
* @return the beans
*/
- public static List<EnumOptionBean> getBeans(Class<? extends Enum<?>> enumClass, II18nService i18nService, Locale locale) {
+ public static List<EnumOptionBean> getBeans(Class<? extends Enum<?>> enumClass, II18nService i18nService,
+ Locale locale) {
// String enumName = enumClass.getCanonicalName();
String enumName = enumClass.getSimpleName();
@@ -44,7 +48,9 @@
for (Enum<?> literal : enumClass.getEnumConstants()) {
String description = literal.name();
if (i18nService != null) {
- // String temp = i18nService.getValue(I18nUtil.getI18nKey(enumName, literal), locale);
+ // String temp =
+ // i18nService.getValue(I18nUtil.getI18nKey(enumName, literal),
+ // locale);
String temp = i18nService.getValue(literal.name(), locale);
if (temp != null && !temp.equals("")) {
description = temp;
@@ -53,7 +59,9 @@
String imagePath = null;
if (i18nService != null) {
- // imagePath = i18nService.getValue(I18nUtil.getImageI18nKey(enumName, literal), locale);
+ // imagePath =
+ // i18nService.getValue(I18nUtil.getImageI18nKey(enumName,
+ // literal), locale);
imagePath = I18nUtil.getImageI18nKey(enumName, literal);
}
@@ -63,4 +71,22 @@
return result;
}
+ public static void updateLocale(BeanItemContainer<EnumOptionBean> beans, II18nService i18nService, Locale locale) {
+
+ for (EnumOptionBean bean : beans.getItemIds()) {
+
+ Enum<?> enumx = bean.getEnumx();
+
+ String description = enumx.name();
+ if (i18nService != null) {
+ String temp = i18nService.getValue(enumx.name(), locale);
+ if (temp != null && !temp.equals("")) {
+ description = temp;
+ }
+ }
+ bean.setDescription(description);
+ }
+
+ }
+
}
diff --git a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/services/WidgetAssocationsService.java b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/services/WidgetAssocationsService.java
index 516bfc6..dfcf135 100644
--- a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/services/WidgetAssocationsService.java
+++ b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/services/WidgetAssocationsService.java
@@ -12,16 +12,16 @@
package org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.internal.services;
import java.util.Map;
-
+
import org.eclipse.osbp.ecview.core.common.editpart.IElementEditpart;
import org.eclipse.osbp.ecview.core.common.editpart.emf.ElementEditpart;
import org.eclipse.osbp.ecview.core.common.model.core.YElement;
+import org.eclipse.osbp.ecview.core.common.model.core.YFocusable;
import org.eclipse.osbp.ecview.core.common.services.AbstractWidgetAssocationsService;
import com.vaadin.ui.Component;
-public class WidgetAssocationsService extends
- AbstractWidgetAssocationsService<Component, YElement> {
+public class WidgetAssocationsService extends AbstractWidgetAssocationsService<Component, YElement> {
@Override
public YElement getModelElement(String id) {
@@ -42,4 +42,20 @@
return yElement != null ? ElementEditpart.findEditPartFor(yElement) : null;
}
+ @Override
+ public YElement getModelElement(int layoutIdx) {
+ synchronized (associations) {
+ for (Map.Entry<Component, YElement> entry : associations.entrySet()) {
+ YElement yElement = entry.getValue();
+ if (yElement instanceof YFocusable) {
+ int yElementLayoutIdx = ((YFocusable) yElement).getLayoutIdx();
+ if (layoutIdx == yElementLayoutIdx) {
+ return yElement;
+ }
+ }
+ }
+ }
+ return null;
+ }
+
}
diff --git a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/util/Util.java b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/util/Util.java
index ded2ef2..d714a18 100644
--- a/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/util/Util.java
+++ b/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin/src/org/eclipse/osbp/runtime/web/ecview/presentation/vaadin/internal/util/Util.java
@@ -15,6 +15,7 @@
import java.util.Locale;
import org.eclipse.osbp.ecview.core.common.model.core.YEmbeddable;
+import org.eclipse.osbp.ecview.core.common.model.core.util.II18nConstants;
import org.eclipse.osbp.ecview.core.common.model.visibility.VisibilityFactory;
import org.eclipse.osbp.ecview.core.common.model.visibility.YColor;
import org.eclipse.osbp.ecview.core.common.model.visibility.YVisibilityProperties;
@@ -30,12 +31,13 @@
import com.vaadin.server.ErrorMessage;
import com.vaadin.server.ErrorMessage.ErrorLevel;
import com.vaadin.server.Resource;
-import com.vaadin.ui.AbstractComponent;
import com.vaadin.ui.Component;
// TODO: Auto-generated Javadoc
/**
- * The Class Util.
+ * The Class Util. TODO - merge with
+ * org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.internal.util.Util
+ * later
*/
public class Util {
@@ -46,10 +48,8 @@
* the handler
* @return the y visibility properties
*/
- public static YVisibilityProperties mapYProperties(
- IVisibilityHandler handler) {
- YVisibilityProperties yProps = VisibilityFactory.eINSTANCE
- .createYVisibilityProperties();
+ public static YVisibilityProperties mapYProperties(IVisibilityHandler handler) {
+ YVisibilityProperties yProps = VisibilityFactory.eINSTANCE.createYVisibilityProperties();
yProps.setBackgroundColor(mapYColor(handler.getBackgroundColor()));
yProps.setBackgroundColorCode(handler.getBackgroundColorCode());
yProps.setBold(handler.isBold());
@@ -119,21 +119,28 @@
* @param component
* the component
*/
- public static void applyCaptions(II18nService service, String label,
- String i18nLabelKey, Locale locale, Component component) {
- if(component != null) {
+ public static void applyCaptions(II18nService service, String label, String i18nLabelKey, Locale locale,
+ Component component) {
+
+ if (II18nConstants.NO_CAPTION.equals(i18nLabelKey)) {
+ return;
+ }
+
+ if (component != null) {
if (service != null && isValid(i18nLabelKey)) {
String translation = service.getValue(i18nLabelKey, locale);
- if (translation == null || translation.equals("") || !i18nLabelKey.equals(label)) {
- // caption must be set in all cases - even if it is null, else icon-only mode will not work
+ if (translation == null || translation.equals("")) {
+ // caption must be set in all cases - even if it is null,
+ // else icon-only mode will not work
// if already set by other process then do not translate
component.setCaption(label);
} else {
component.setCaption(translation);
}
-
+
} else {
- // caption must be set in all cases - even if it is null, else icon-only mode will not work
+ // caption must be set in all cases - even if it is null, else
+ // icon-only mode will not work
component.setCaption(label);
}
}
@@ -152,8 +159,7 @@
* the locale
* @return the caption
*/
- public static String getCaption(II18nService service, String label,
- String i18nLabelKey, Locale locale) {
+ public static String getCaption(II18nService service, String label, String i18nLabelKey, Locale locale) {
String result = i18nLabelKey;
@@ -189,9 +195,8 @@
* @param component
* the component
*/
- public static void applyCaptionIcons(II18nService service,
- IResourceProvider provider, String i18nLabelKey, Locale locale,
- Component component) {
+ public static void applyCaptionIcons(II18nService service, IResourceProvider provider, String i18nLabelKey,
+ Locale locale, Component component) {
String iconKey = I18nUtil.getImageKey(i18nLabelKey);
if (service != null && provider != null && isValid(iconKey)) {
@@ -216,9 +221,8 @@
* @param callback
* the callback
*/
- public static void applyCaptionIcons(II18nService service,
- IResourceProvider provider, String i18nLabelKey, Locale locale,
- ResourceCallback callback) {
+ public static void applyCaptionIcons(II18nService service, IResourceProvider provider, String i18nLabelKey,
+ Locale locale, ResourceCallback callback) {
String iconKey = I18nUtil.getImageKey(i18nLabelKey);
if (service != null && provider != null && isValid(iconKey)) {
@@ -249,20 +253,17 @@
* the message
* @return the list
*/
- public static List<org.eclipse.osbp.runtime.common.validation.IStatus> createStatus(
- YEmbeddable yElement, ErrorMessage message) {
+ public static List<org.eclipse.osbp.runtime.common.validation.IStatus> createStatus(YEmbeddable yElement,
+ ErrorMessage message) {
if (message == null) {
return Collections.emptyList();
}
String text = message.getFormattedHtmlMessage();
- IStatus status = Status.createStatus("", Util.class,
- mapSeverity(message.getErrorLevel()), text);
+ IStatus status = Status.createStatus("", Util.class, mapSeverity(message.getErrorLevel()), text);
status.putProperty(IStatus.PROP_FIELD_ID, yElement.getId());
- status.putProperty(IStatus.PROP_FIELD_I18N_KEY,
- yElement.getLabelI18nKey());
- status.putProperty(IStatus.PROP_CREATOR,
- "Presentation of " + yElement.getId());
+ status.putProperty(IStatus.PROP_FIELD_I18N_KEY, yElement.getLabelI18nKey());
+ status.putProperty(IStatus.PROP_CREATOR, "Presentation of " + yElement.getId());
return Collections.singletonList(status);
}
diff --git a/org.eclipse.osbp.runtime.web.ecview.services.vaadin/.classpath b/org.eclipse.osbp.runtime.web.ecview.services.vaadin/.classpath
new file mode 100644
index 0000000..8b37caa
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.ecview.services.vaadin/.classpath
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src/"/>
+ <classpathentry kind="src" path="xtend-gen/"/>
+ <classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/org.eclipse.osbp.runtime.web.ecview.services.vaadin/.gitignore b/org.eclipse.osbp.runtime.web.ecview.services.vaadin/.gitignore
new file mode 100644
index 0000000..b83d222
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.ecview.services.vaadin/.gitignore
@@ -0,0 +1 @@
+/target/
diff --git a/org.eclipse.osbp.runtime.web.ecview.services.vaadin/.project b/org.eclipse.osbp.runtime.web.ecview.services.vaadin/.project
index d2ef580..890b0a4 100644
--- a/org.eclipse.osbp.runtime.web.ecview.services.vaadin/.project
+++ b/org.eclipse.osbp.runtime.web.ecview.services.vaadin/.project
@@ -36,11 +36,6 @@
</arguments>
</buildCommand>
<buildCommand>
- <name>com.vaadin.integration.eclipse.addonStylesBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
<name>org.sonarlint.eclipse.core.sonarlintBuilder</name>
<arguments>
</arguments>
diff --git a/org.eclipse.osbp.runtime.web.ecview.services.vaadin/.settings/com.vaadin.integration.eclipse.prefs b/org.eclipse.osbp.runtime.web.ecview.services.vaadin/.settings/com.vaadin.integration.eclipse.prefs
new file mode 100644
index 0000000..0904e44
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.ecview.services.vaadin/.settings/com.vaadin.integration.eclipse.prefs
@@ -0,0 +1,2 @@
+com.vaadin.integration.eclipse.mavenLatestVersionsUpgrade=["7.7.7"]
+eclipse.preferences.version=1
diff --git a/org.eclipse.osbp.runtime.web.ecview.services.vaadin/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.runtime.web.ecview.services.vaadin/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.ecview.services.vaadin/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.runtime.web.ecview.services.vaadin/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.osbp.runtime.web.ecview.services.vaadin/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..c537b63
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.ecview.services.vaadin/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/org.eclipse.osbp.runtime.web.ecview.services.vaadin/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.runtime.web.ecview.services.vaadin/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.ecview.services.vaadin/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.runtime.web.ecview.services.vaadin/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.runtime.web.ecview.services.vaadin/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..19e3115
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.ecview.services.vaadin/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,11 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+BuilderConfiguration.is_project_specific=true
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.emf-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.runtime.web.ecview.services.vaadin/META-INF/MANIFEST.MF b/org.eclipse.osbp.runtime.web.ecview.services.vaadin/META-INF/MANIFEST.MF
index edd1d02..c1aedbf 100644
--- a/org.eclipse.osbp.runtime.web.ecview.services.vaadin/META-INF/MANIFEST.MF
+++ b/org.eclipse.osbp.runtime.web.ecview.services.vaadin/META-INF/MANIFEST.MF
@@ -4,14 +4,11 @@
Bundle-SymbolicName: org.eclipse.osbp.runtime.web.ecview.services.vaadin
Bundle-Version: 0.9.0.qualifier
Bundle-ActivationPolicy: lazy
-Bundle-RequiredExecutionEnvironment: JavaSE-1.6
-Export-Package: org.eclipse.osbp.runtime.web.ecview.services.vaadin;
- org.eclipse.osbp.ecview.core.common.context,
- org.eclipse.osbp.ecview.core.common.model.core,
- com.vaadin.ui";version="0.9.0"
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Export-Package: org.eclipse.osbp.runtime.web.ecview.services.vaadin
Bundle-Vendor: Eclipse OSBP
-Require-Bundle: com.vaadin.server;bundle-version="[7.5.7,7.7.0)",
- com.vaadin.shared;bundle-version="[7.5.7,7.7.0)",
+Require-Bundle: com.vaadin.server;bundle-version="[7.7.6,7.8.0)",
+ com.vaadin.shared;bundle-version="[7.7.6,7.8.0)",
org.eclipse.osbp.ecview.core.common;bundle-version="[0.9.0,0.10.0)",
org.eclipse.osbp.ecview.core.common.editparts.emf;bundle-version="[0.9.0,0.10.0)",
org.eclipse.osbp.ecview.core.common.model;bundle-version="[0.9.0,0.10.0)",
@@ -28,12 +25,12 @@
org.eclipse.osbp.dsl.entity.xtext;bundle-version="[0.9.0,0.10.0)",
com.google.inject;bundle-version="3.0.0",
org.junit;bundle-version="4.11.0",
- org.eclipse.xtext;bundle-version="[2.7.3,2.8.0)",
+ org.eclipse.xtext;bundle-version="[2.11.0,2.12.0)",
org.eclipse.osbp.xtext.builder.types.bundles;bundle-version="[0.9.0,0.10.0)",
org.eclipse.osbp.runtime.common;bundle-version="[0.9.0,0.10.0)",
- org.eclipse.xtend.lib;bundle-version="[2.7.3,2.8.0)",
+ org.eclipse.xtend.lib;bundle-version="[2.11.0,2.12.0)",
com.google.guava;bundle-version="[10.0.0,19.0.0)",
- org.eclipse.xtext.xbase.lib;bundle-version="[2.7.3,2.8.0)"
+ org.eclipse.xtext.xbase.lib;bundle-version="[2.11.0,2.12.0)"
Import-Package: org.osgi.service.component;version="1.2.0",
org.osgi.service.component.annotations;version="1.2.0"
Service-Component: OSGI-INF/org.eclipse.osbp.runtime.web.ecview.services.vaadin.impl.LDtoRenderStrategy.xml,
diff --git a/org.eclipse.osbp.runtime.web.ecview.services.vaadin/OSGI-INF/org.eclipse.osbp.runtime.web.ecview.services.vaadin.impl.ECViewUIRenderService.xml b/org.eclipse.osbp.runtime.web.ecview.services.vaadin/OSGI-INF/org.eclipse.osbp.runtime.web.ecview.services.vaadin.impl.ECViewUIRenderService.xml
index 4cb0533..b357108 100644
--- a/org.eclipse.osbp.runtime.web.ecview.services.vaadin/OSGI-INF/org.eclipse.osbp.runtime.web.ecview.services.vaadin.impl.ECViewUIRenderService.xml
+++ b/org.eclipse.osbp.runtime.web.ecview.services.vaadin/OSGI-INF/org.eclipse.osbp.runtime.web.ecview.services.vaadin.impl.ECViewUIRenderService.xml
@@ -4,8 +4,8 @@
<service>
<provide interface="org.eclipse.osbp.runtime.web.ecview.services.vaadin.IECViewUIRenderService"/>
</service>
- <reference bind="bindDtoMetadataService" cardinality="1..1" interface="IDtoMetadataService" name="DtoMetadataService" policy="dynamic" unbind="unbindDtoMetadataService"/>
+ <reference bind="bindDtoMetadataService" cardinality="1..1" interface="org.eclipse.osbp.dsl.xtext.builder.participant.IDtoMetadataService" name="DtoMetadataService" policy="dynamic" unbind="unbindDtoMetadataService"/>
<reference bind="bindDtoRenderingStrategy" cardinality="1..1" interface="org.eclipse.osbp.runtime.web.ecview.services.vaadin.ILDtoRenderStrategy" name="DtoRenderingStrategy" policy="dynamic" unbind="unbindDtoRenderingStrategy"/>
- <reference bind="bindEntityMetadataService" cardinality="1..1" interface="IEntityMetadataService" name="EntityMetadataService" policy="dynamic" unbind="unbindEntityMetadataService"/>
+ <reference bind="bindEntityMetadataService" cardinality="1..1" interface="org.eclipse.osbp.dsl.xtext.builder.participant.IEntityMetadataService" name="EntityMetadataService" policy="dynamic" unbind="unbindEntityMetadataService"/>
<reference bind="bindEntityRenderingStrategy" cardinality="1..1" interface="org.eclipse.osbp.runtime.web.ecview.services.vaadin.ILEntityRenderStrategy" name="EntityRenderingStrategy" policy="dynamic" unbind="unbindEntityRenderingStrategy"/>
</scr:component>
\ No newline at end of file
diff --git a/org.eclipse.osbp.runtime.web.ecview.services.vaadin/xtend-gen/.gitignore b/org.eclipse.osbp.runtime.web.ecview.services.vaadin/xtend-gen/.gitignore
new file mode 100644
index 0000000..096252c
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.ecview.services.vaadin/xtend-gen/.gitignore
@@ -0,0 +1,2 @@
+/.BeanHelper.xtendbin
+/.EntityToUimodelFileGenerator.xtendbin
diff --git a/org.eclipse.osbp.runtime.web.ecview.services.vaadin/xtend-gen/org/eclipse/osbp/runtime/web/ecview/services/vaadin/impl/.gitignore b/org.eclipse.osbp.runtime.web.ecview.services.vaadin/xtend-gen/org/eclipse/osbp/runtime/web/ecview/services/vaadin/impl/.gitignore
new file mode 100644
index 0000000..5deff97
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.ecview.services.vaadin/xtend-gen/org/eclipse/osbp/runtime/web/ecview/services/vaadin/impl/.gitignore
@@ -0,0 +1,4 @@
+/BeanHelper.java
+/Bindings.java
+/Counter.java
+/EntityToUimodelFileGenerator.java
diff --git a/org.eclipse.osbp.runtime.web.ecview.services.vaadin/xtend-gen/org/eclipse/osbp/runtime/web/ecview/services/vaadin/impl/BeanHelper.java b/org.eclipse.osbp.runtime.web.ecview.services.vaadin/xtend-gen/org/eclipse/osbp/runtime/web/ecview/services/vaadin/impl/BeanHelper.java
deleted file mode 100644
index 4332da3..0000000
--- a/org.eclipse.osbp.runtime.web.ecview.services.vaadin/xtend-gen/org/eclipse/osbp/runtime/web/ecview/services/vaadin/impl/BeanHelper.java
+++ /dev/null
@@ -1,378 +0,0 @@
-/**
- * Copyright (c) 2011, 2015 - Lunifera GmbH (Gross Enzersdorf), Loetz GmbH&Co.KG (Heidelberg)
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Florian Pirchner - Initial implementation
- */
-package org.eclipse.osbp.runtime.web.ecview.services.vaadin.impl;
-
-import com.google.common.base.Objects;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.util.List;
-import org.eclipse.emf.common.util.EList;
-import org.eclipse.osbp.dsl.semantic.common.types.LAnnotationDef;
-import org.eclipse.osbp.dsl.semantic.common.types.LAnnotationTarget;
-import org.eclipse.osbp.dsl.semantic.entity.LBean;
-import org.eclipse.osbp.dsl.semantic.entity.LBeanAttribute;
-import org.eclipse.osbp.dsl.semantic.entity.LBeanFeature;
-import org.eclipse.osbp.dsl.semantic.entity.LEntity;
-import org.eclipse.osbp.dsl.semantic.entity.LEntityAttribute;
-import org.eclipse.osbp.dsl.semantic.entity.LEntityFeature;
-import org.eclipse.osbp.dsl.semantic.entity.LOperation;
-import org.eclipse.osbp.runtime.common.annotations.DomainDescription;
-import org.eclipse.osbp.runtime.common.annotations.DomainKey;
-import org.eclipse.osbp.runtime.web.ecview.services.vaadin.impl.OperationExtensions;
-import org.eclipse.xtext.common.types.JvmType;
-import org.eclipse.xtext.xbase.annotations.xAnnotations.XAnnotation;
-import org.eclipse.xtext.xbase.lib.Functions.Function1;
-import org.eclipse.xtext.xbase.lib.IterableExtensions;
-
-@SuppressWarnings("all")
-public class BeanHelper {
- /**
- * @param bean the bean
- * @return the caption property if it could be found. Null otherwise.
- */
- public static String findCaptionProperty(final Object bean) {
- boolean _equals = Objects.equal(bean, null);
- if (_equals) {
- return null;
- }
- if ((bean instanceof Class<?>)) {
- return BeanHelper.findCaptionProperty(((Class<?>) bean));
- } else {
- Class<?> _class = bean.getClass();
- return BeanHelper.findCaptionProperty(_class);
- }
- }
-
- /**
- * @param beanClass the bean class
- * @return the caption property if it could be found. Null otherwise.
- */
- public static String findCaptionProperty(final Class<?> beanClass) {
- boolean _equals = Objects.equal(beanClass, null);
- if (_equals) {
- return null;
- }
- Field[] _declaredFields = beanClass.getDeclaredFields();
- for (final Field field : _declaredFields) {
- boolean _isAnnotationPresent = field.isAnnotationPresent(DomainKey.class);
- if (_isAnnotationPresent) {
- return field.getName();
- }
- }
- Field[] _fields = beanClass.getFields();
- for (final Field field_1 : _fields) {
- boolean _isAnnotationPresent_1 = field_1.isAnnotationPresent(DomainKey.class);
- if (_isAnnotationPresent_1) {
- return field_1.getName();
- }
- }
- return null;
- }
-
- /**
- * @param lEntity the entity
- * @return the caption property if it could be found. Null otherwise.
- */
- public static String findCaptionProperty(final LEntity lEntity) {
- String bestMatch = null;
- boolean _equals = Objects.equal(lEntity, null);
- if (_equals) {
- return null;
- }
- List<LEntityAttribute> _allAttributes = lEntity.getAllAttributes();
- for (final LEntityAttribute field : _allAttributes) {
- boolean _or = false;
- boolean _or_1 = false;
- boolean _or_2 = false;
- boolean _or_3 = false;
- boolean _isDomainKey = field.isDomainKey();
- if (_isDomainKey) {
- _or_3 = true;
- } else {
- String _name = field.getName();
- boolean _equalsIgnoreCase = _name.equalsIgnoreCase("Name");
- _or_3 = _equalsIgnoreCase;
- }
- if (_or_3) {
- _or_2 = true;
- } else {
- String _name_1 = field.getName();
- boolean _equalsIgnoreCase_1 = _name_1.equalsIgnoreCase("Number");
- _or_2 = _equalsIgnoreCase_1;
- }
- if (_or_2) {
- _or_1 = true;
- } else {
- String _name_2 = field.getName();
- boolean _equalsIgnoreCase_2 = _name_2.equalsIgnoreCase("Description");
- _or_1 = _equalsIgnoreCase_2;
- }
- if (_or_1) {
- _or = true;
- } else {
- boolean _isUuid = field.isUuid();
- _or = _isUuid;
- }
- if (_or) {
- String _name_3 = field.getName();
- bestMatch = _name_3;
- }
- }
- return bestMatch;
- }
-
- /**
- * @param lBean the bean
- * @return the caption property if it could be found. Null otherwise.
- */
- public static String findCaptionProperty(final LBean lBean) {
- String bestMatch = null;
- boolean _equals = Objects.equal(lBean, null);
- if (_equals) {
- return null;
- }
- List<LBeanAttribute> _allAttributes = lBean.getAllAttributes();
- for (final LBeanAttribute field : _allAttributes) {
- boolean _or = false;
- boolean _or_1 = false;
- boolean _or_2 = false;
- boolean _or_3 = false;
- boolean _isDomainKey = field.isDomainKey();
- if (_isDomainKey) {
- _or_3 = true;
- } else {
- String _name = field.getName();
- boolean _equalsIgnoreCase = _name.equalsIgnoreCase("Name");
- _or_3 = _equalsIgnoreCase;
- }
- if (_or_3) {
- _or_2 = true;
- } else {
- String _name_1 = field.getName();
- boolean _equalsIgnoreCase_1 = _name_1.equalsIgnoreCase("Number");
- _or_2 = _equalsIgnoreCase_1;
- }
- if (_or_2) {
- _or_1 = true;
- } else {
- String _name_2 = field.getName();
- boolean _equalsIgnoreCase_2 = _name_2.equalsIgnoreCase("Description");
- _or_1 = _equalsIgnoreCase_2;
- }
- if (_or_1) {
- _or = true;
- } else {
- boolean _isUuid = field.isUuid();
- _or = _isUuid;
- }
- if (_or) {
- String _name_3 = field.getName();
- bestMatch = _name_3;
- }
- }
- return bestMatch;
- }
-
- /**
- * @param bean the bean
- * @return the description property if it could be found. Null otherwise.
- */
- public static String findDescriptionProperty(final Object bean) {
- boolean _equals = Objects.equal(bean, null);
- if (_equals) {
- return null;
- }
- if ((bean instanceof Class<?>)) {
- return BeanHelper.findDescriptionProperty(((Class<?>) bean));
- } else {
- Class<?> _class = bean.getClass();
- return BeanHelper.findDescriptionProperty(_class);
- }
- }
-
- /**
- * @param beanClass the beanClass
- * @return the description property if it could be found. Null otherwise.
- */
- public static String findDescriptionProperty(final Class<?> beanClass) {
- boolean _equals = Objects.equal(beanClass, null);
- if (_equals) {
- return null;
- }
- Field[] _declaredFields = beanClass.getDeclaredFields();
- for (final Field field : _declaredFields) {
- boolean _isAnnotationPresent = field.isAnnotationPresent(DomainDescription.class);
- if (_isAnnotationPresent) {
- return field.getName();
- }
- }
- Method[] _declaredMethods = beanClass.getDeclaredMethods();
- for (final Method method : _declaredMethods) {
- boolean _isAnnotationPresent_1 = method.isAnnotationPresent(DomainDescription.class);
- if (_isAnnotationPresent_1) {
- String _name = method.getName();
- return OperationExtensions.toPropertyName(_name);
- }
- }
- Field[] _fields = beanClass.getFields();
- for (final Field field_1 : _fields) {
- boolean _isAnnotationPresent_2 = field_1.isAnnotationPresent(DomainDescription.class);
- if (_isAnnotationPresent_2) {
- return field_1.getName();
- }
- }
- Method[] _methods = beanClass.getMethods();
- for (final Method method_1 : _methods) {
- boolean _isAnnotationPresent_3 = method_1.isAnnotationPresent(DomainDescription.class);
- if (_isAnnotationPresent_3) {
- String _name_1 = method_1.getName();
- return OperationExtensions.toPropertyName(_name_1);
- }
- }
- return null;
- }
-
- /**
- * @param entity the entity
- * @return the description property if it could be found. Null otherwise.
- */
- public static String findDescriptionProperty(final LEntity entity) {
- boolean _equals = Objects.equal(entity, null);
- if (_equals) {
- return null;
- }
- List<LEntityAttribute> _attributes = entity.getAttributes();
- for (final LEntityAttribute field : _attributes) {
- boolean _isDomainDescription = field.isDomainDescription();
- if (_isDomainDescription) {
- return field.getName();
- }
- }
- List<LOperation> _operations = entity.getOperations();
- for (final LOperation method : _operations) {
- {
- EList<LAnnotationDef> _annotations = method.getAnnotations();
- final Function1<LAnnotationDef, Boolean> _function = new Function1<LAnnotationDef, Boolean>() {
- public Boolean apply(final LAnnotationDef it) {
- XAnnotation _annotation = it.getAnnotation();
- JvmType _annotationType = _annotation.getAnnotationType();
- String _qualifiedName = _annotationType.getQualifiedName();
- String _canonicalName = DomainDescription.class.getCanonicalName();
- return Boolean.valueOf(_qualifiedName.equals(_canonicalName));
- }
- };
- final LAnnotationDef def = IterableExtensions.<LAnnotationDef>findFirst(_annotations, _function);
- boolean _notEquals = (!Objects.equal(def, null));
- if (_notEquals) {
- String _name = method.getName();
- return OperationExtensions.toPropertyName(_name);
- }
- }
- }
- List<LEntityAttribute> _allAttributes = entity.getAllAttributes();
- for (final LEntityAttribute field_1 : _allAttributes) {
- boolean _isDomainDescription_1 = field_1.isDomainDescription();
- if (_isDomainDescription_1) {
- return field_1.getName();
- }
- }
- List<LEntityFeature> _allFeatures = entity.getAllFeatures();
- for (final LEntityFeature method_1 : _allFeatures) {
- if ((method_1 instanceof org.eclipse.osbp.dsl.semantic.common.types.LOperation)) {
- EList<LAnnotationDef> _annotations = ((LAnnotationTarget)method_1).getAnnotations();
- final Function1<LAnnotationDef, Boolean> _function = new Function1<LAnnotationDef, Boolean>() {
- public Boolean apply(final LAnnotationDef it) {
- XAnnotation _annotation = it.getAnnotation();
- JvmType _annotationType = _annotation.getAnnotationType();
- String _qualifiedName = _annotationType.getQualifiedName();
- String _canonicalName = DomainDescription.class.getCanonicalName();
- return Boolean.valueOf(_qualifiedName.equals(_canonicalName));
- }
- };
- final LAnnotationDef def = IterableExtensions.<LAnnotationDef>findFirst(_annotations, _function);
- boolean _notEquals = (!Objects.equal(def, null));
- if (_notEquals) {
- String _name = method_1.getName();
- return OperationExtensions.toPropertyName(_name);
- }
- }
- }
- return null;
- }
-
- /**
- * @param bean the bean
- * @return the description property if it could be found. Null otherwise.
- */
- public static String findDescriptionProperty(final LBean bean) {
- boolean _equals = Objects.equal(bean, null);
- if (_equals) {
- return null;
- }
- List<LBeanAttribute> _attributes = bean.getAttributes();
- for (final LBeanAttribute field : _attributes) {
- boolean _isDomainDescription = field.isDomainDescription();
- if (_isDomainDescription) {
- return field.getName();
- }
- }
- List<LOperation> _operations = bean.getOperations();
- for (final LOperation method : _operations) {
- {
- EList<LAnnotationDef> _annotations = method.getAnnotations();
- final Function1<LAnnotationDef, Boolean> _function = new Function1<LAnnotationDef, Boolean>() {
- public Boolean apply(final LAnnotationDef it) {
- XAnnotation _annotation = it.getAnnotation();
- JvmType _annotationType = _annotation.getAnnotationType();
- String _qualifiedName = _annotationType.getQualifiedName();
- String _canonicalName = DomainDescription.class.getCanonicalName();
- return Boolean.valueOf(_qualifiedName.equals(_canonicalName));
- }
- };
- final LAnnotationDef def = IterableExtensions.<LAnnotationDef>findFirst(_annotations, _function);
- boolean _notEquals = (!Objects.equal(def, null));
- if (_notEquals) {
- String _name = method.getName();
- return OperationExtensions.toPropertyName(_name);
- }
- }
- }
- List<LBeanAttribute> _allAttributes = bean.getAllAttributes();
- for (final LBeanAttribute field_1 : _allAttributes) {
- boolean _isDomainDescription_1 = field_1.isDomainDescription();
- if (_isDomainDescription_1) {
- return field_1.getName();
- }
- }
- List<LBeanFeature> _allFeatures = bean.getAllFeatures();
- for (final LBeanFeature method_1 : _allFeatures) {
- if ((method_1 instanceof org.eclipse.osbp.dsl.semantic.common.types.LOperation)) {
- EList<LAnnotationDef> _annotations = ((LAnnotationTarget)method_1).getAnnotations();
- final Function1<LAnnotationDef, Boolean> _function = new Function1<LAnnotationDef, Boolean>() {
- public Boolean apply(final LAnnotationDef it) {
- XAnnotation _annotation = it.getAnnotation();
- JvmType _annotationType = _annotation.getAnnotationType();
- String _qualifiedName = _annotationType.getQualifiedName();
- String _canonicalName = DomainDescription.class.getCanonicalName();
- return Boolean.valueOf(_qualifiedName.equals(_canonicalName));
- }
- };
- final LAnnotationDef def = IterableExtensions.<LAnnotationDef>findFirst(_annotations, _function);
- boolean _notEquals = (!Objects.equal(def, null));
- if (_notEquals) {
- String _name = method_1.getName();
- return OperationExtensions.toPropertyName(_name);
- }
- }
- }
- return null;
- }
-}
diff --git a/org.eclipse.osbp.runtime.web.ecview.services.vaadin/xtend-gen/org/eclipse/osbp/runtime/web/ecview/services/vaadin/impl/Bindings.java b/org.eclipse.osbp.runtime.web.ecview.services.vaadin/xtend-gen/org/eclipse/osbp/runtime/web/ecview/services/vaadin/impl/Bindings.java
deleted file mode 100644
index febd15f..0000000
--- a/org.eclipse.osbp.runtime.web.ecview.services.vaadin/xtend-gen/org/eclipse/osbp/runtime/web/ecview/services/vaadin/impl/Bindings.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/**
- * Copyright (c) 2011, 2015 - Lunifera GmbH (Gross Enzersdorf), Loetz GmbH&Co.KG (Heidelberg)
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Klemens Edler - Initial implementation
- */
-package org.eclipse.osbp.runtime.web.ecview.services.vaadin.impl;
-
-@SuppressWarnings("all")
-public class Bindings {
- public String bindingList;
-
- public Bindings(final String bindingList) {
- this.bindingList = bindingList;
- }
-
- public String add(final String string) {
- String _concat = this.bindingList.concat("\n");
- String _concat_1 = _concat.concat(string);
- return this.bindingList = _concat_1;
- }
-}
diff --git a/org.eclipse.osbp.runtime.web.ecview.services.vaadin/xtend-gen/org/eclipse/osbp/runtime/web/ecview/services/vaadin/impl/Counter.java b/org.eclipse.osbp.runtime.web.ecview.services.vaadin/xtend-gen/org/eclipse/osbp/runtime/web/ecview/services/vaadin/impl/Counter.java
deleted file mode 100644
index db1b944..0000000
--- a/org.eclipse.osbp.runtime.web.ecview.services.vaadin/xtend-gen/org/eclipse/osbp/runtime/web/ecview/services/vaadin/impl/Counter.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/**
- * Copyright (c) 2011, 2015 - Lunifera GmbH (Gross Enzersdorf), Loetz GmbH&Co.KG (Heidelberg)
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Klemens Edler - Initial implementation
- */
-package org.eclipse.osbp.runtime.web.ecview.services.vaadin.impl;
-
-@SuppressWarnings("all")
-public class Counter {
- public int value;
-
- public Counter(final int value) {
- this.value = value;
- }
-}
diff --git a/org.eclipse.osbp.runtime.web.ecview.services.vaadin/xtend-gen/org/eclipse/osbp/runtime/web/ecview/services/vaadin/impl/EntityToUimodelFileGenerator.java b/org.eclipse.osbp.runtime.web.ecview.services.vaadin/xtend-gen/org/eclipse/osbp/runtime/web/ecview/services/vaadin/impl/EntityToUimodelFileGenerator.java
deleted file mode 100644
index 24fb505..0000000
--- a/org.eclipse.osbp.runtime.web.ecview.services.vaadin/xtend-gen/org/eclipse/osbp/runtime/web/ecview/services/vaadin/impl/EntityToUimodelFileGenerator.java
+++ /dev/null
@@ -1,850 +0,0 @@
-/**
- * Copyright (c) 2011, 2015 - Lunifera GmbH (Gross Enzersdorf), Loetz GmbH&Co.KG (Heidelberg)
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Klemens Edler - Initial implementation
- */
-package org.eclipse.osbp.runtime.web.ecview.services.vaadin.impl;
-
-import com.google.common.base.Objects;
-import java.util.List;
-import javax.inject.Inject;
-import org.eclipse.emf.common.util.EList;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.osbp.dsl.semantic.common.types.LDataType;
-import org.eclipse.osbp.dsl.semantic.common.types.LMultiplicity;
-import org.eclipse.osbp.dsl.semantic.common.types.LReference;
-import org.eclipse.osbp.dsl.semantic.common.types.LScalarType;
-import org.eclipse.osbp.dsl.semantic.common.types.LType;
-import org.eclipse.osbp.dsl.semantic.common.types.LTypedPackage;
-import org.eclipse.osbp.dsl.semantic.common.types.LUpperBound;
-import org.eclipse.osbp.dsl.semantic.entity.LBean;
-import org.eclipse.osbp.dsl.semantic.entity.LBeanAttribute;
-import org.eclipse.osbp.dsl.semantic.entity.LBeanReference;
-import org.eclipse.osbp.dsl.semantic.entity.LEntity;
-import org.eclipse.osbp.dsl.semantic.entity.LEntityAttribute;
-import org.eclipse.osbp.dsl.semantic.entity.LEntityFeature;
-import org.eclipse.osbp.dsl.semantic.entity.LEntityReference;
-import org.eclipse.osbp.runtime.web.ecview.services.vaadin.impl.BeanHelper;
-import org.eclipse.osbp.runtime.web.ecview.services.vaadin.impl.Bindings;
-import org.eclipse.osbp.runtime.web.ecview.services.vaadin.impl.Counter;
-import org.eclipse.osbp.runtime.web.ecview.services.vaadin.impl.TypeHelper;
-import org.eclipse.xtend2.lib.StringConcatenation;
-import org.eclipse.xtext.common.types.JvmType;
-import org.eclipse.xtext.common.types.JvmTypeReference;
-import org.eclipse.xtext.xbase.lib.StringExtensions;
-
-/**
- * This generator automatically creates a generic .uimodel-file from a given entity.
- */
-@SuppressWarnings("all")
-public class EntityToUimodelFileGenerator {
- @Inject
- private TypeHelper typeHelper;
-
- private Bindings bindings = new Bindings("");
-
- private Counter counter = new Counter(0);
-
- public CharSequence getContent(final LEntity entity) {
- StringConcatenation _builder = new StringConcatenation();
- _builder.append("package ");
- String _toUimodelName = this.getToUimodelName(entity);
- _builder.append(_toUimodelName, "");
- _builder.newLineIfNotEmpty();
- _builder.newLine();
- _builder.append("import ");
- EObject _eContainer = entity.eContainer();
- String _name = ((LTypedPackage) _eContainer).getName();
- _builder.append(_name, "");
- _builder.append(".*");
- _builder.newLineIfNotEmpty();
- _builder.newLine();
- _builder.append("ideview ");
- String _name_1 = entity.getName();
- _builder.append(_name_1, "");
- _builder.append(" {");
- _builder.newLineIfNotEmpty();
- _builder.append("\t");
- _builder.newLine();
- _builder.append("\t");
- _builder.append("datasource ds: ");
- String _toEntityFQN = this.getToEntityFQN(entity);
- _builder.append(_toEntityFQN, "\t");
- _builder.newLineIfNotEmpty();
- _builder.append("\t");
- _builder.newLine();
- _builder.append("\t");
- _builder.append("horizontalLayout ");
- String _name_2 = entity.getName();
- _builder.append(_name_2, "\t");
- _builder.append(" {");
- _builder.newLineIfNotEmpty();
- _builder.append("\t\t");
- _builder.newLine();
- _builder.append("\t\t");
- _builder.append("form leftForm {");
- _builder.newLine();
- {
- EList<LEntityFeature> _features = entity.getFeatures();
- for(final LEntityFeature feature : _features) {
- {
- if (((this.counter.value % 2) == 0)) {
- {
- if ((feature instanceof LEntityAttribute)) {
- {
- LScalarType _type = ((LEntityAttribute)feature).getType();
- if ((_type instanceof LDataType)) {
- _builder.append("\t\t\t");
- String _toAttributeUiField = this.getToAttributeUiField(((LEntityAttribute)feature));
- _builder.append(_toAttributeUiField, "\t\t\t");
- _builder.newLineIfNotEmpty();
- } else {
- _builder.append("\t\t\t");
- String _toBeanRefUiField = this.getToBeanRefUiField(((LEntityAttribute)feature));
- _builder.append(_toBeanRefUiField, "\t\t\t");
- _builder.newLineIfNotEmpty();
- }
- }
- } else {
- if ((feature instanceof LReference)) {
- _builder.append("\t\t\t");
- String _toEntityRefUiField = this.getToEntityRefUiField(feature);
- _builder.append(_toEntityRefUiField, "\t\t\t");
- _builder.newLineIfNotEmpty();
- }
- }
- }
- }
- }
- _builder.append("\t\t\t");
- _builder.append(this.counter.value = (this.counter.value + 1), "\t\t\t");
- _builder.newLineIfNotEmpty();
- }
- }
- _builder.append("\t\t");
- _builder.append("}");
- _builder.newLine();
- _builder.append("\t\t");
- _builder.newLine();
- _builder.append("\t\t");
- _builder.append(this.counter.value = 0, "\t\t");
- _builder.newLineIfNotEmpty();
- _builder.append("\t\t");
- _builder.append("form rightForm {");
- _builder.newLine();
- {
- EList<LEntityFeature> _features_1 = entity.getFeatures();
- for(final LEntityFeature feature_1 : _features_1) {
- {
- if (((this.counter.value % 2) == 1)) {
- {
- if ((feature_1 instanceof LEntityAttribute)) {
- {
- LScalarType _type_1 = ((LEntityAttribute)feature_1).getType();
- if ((_type_1 instanceof LDataType)) {
- _builder.append("\t\t\t");
- String _toAttributeUiField_1 = this.getToAttributeUiField(((LEntityAttribute)feature_1));
- _builder.append(_toAttributeUiField_1, "\t\t\t");
- _builder.newLineIfNotEmpty();
- } else {
- _builder.append("\t\t\t");
- String _toBeanRefUiField_1 = this.getToBeanRefUiField(((LEntityAttribute)feature_1));
- _builder.append(_toBeanRefUiField_1, "\t\t\t");
- _builder.newLineIfNotEmpty();
- }
- }
- } else {
- if ((feature_1 instanceof LReference)) {
- _builder.append("\t\t\t");
- String _toEntityRefUiField_1 = this.getToEntityRefUiField(feature_1);
- _builder.append(_toEntityRefUiField_1, "\t\t\t");
- _builder.newLineIfNotEmpty();
- }
- }
- }
- }
- }
- _builder.append("\t\t\t");
- _builder.append(this.counter.value = (this.counter.value + 1), "\t\t\t");
- _builder.newLineIfNotEmpty();
- }
- }
- _builder.append("\t\t");
- _builder.append("}");
- _builder.newLine();
- _builder.append("\t");
- _builder.append(this.bindings.bindingList, "\t");
- _builder.newLineIfNotEmpty();
- _builder.append("\t");
- _builder.newLine();
- _builder.append("\t");
- _builder.append("}");
- _builder.newLine();
- _builder.append("}");
- _builder.newLine();
- return _builder;
- }
-
- public String getToUimodelName(final LEntity entity) {
- EObject _eContainer = entity.eContainer();
- String _name = ((LTypedPackage) _eContainer).getName();
- return (_name + ".uimodel");
- }
-
- public String getToEntityFQN(final LEntity entity) {
- EObject _eContainer = entity.eContainer();
- String _name = ((LTypedPackage) _eContainer).getName();
- String _plus = (_name + ".");
- String _name_1 = entity.getName();
- return (_plus + _name_1);
- }
-
- public String getToAttributeUiField(final LEntityAttribute attribute) {
- LScalarType _type = attribute.getType();
- final LDataType datatype = ((LDataType) _type);
- boolean _isDate = datatype.isDate();
- if (_isDate) {
- StringConcatenation _builder = new StringConcatenation();
- _builder.append("bind ds.");
- String _name = attribute.getName();
- _builder.append(_name, "");
- _builder.append(" <--> [this.");
- {
- if (((this.counter.value % 2) == 0)) {
- _builder.append("leftform");
- } else {
- _builder.append("rightform");
- }
- }
- _builder.append(".");
- String _name_1 = attribute.getName();
- _builder.append(_name_1, "");
- _builder.append("].value");
- this.bindings.add(_builder.toString());
- StringConcatenation _builder_1 = new StringConcatenation();
- _builder_1.append("datefield ");
- String _name_2 = attribute.getName();
- _builder_1.append(_name_2, "");
- _builder_1.newLineIfNotEmpty();
- return _builder_1.toString();
- } else {
- JvmTypeReference _jvmTypeReference = datatype.getJvmTypeReference();
- JvmType _type_1 = _jvmTypeReference.getType();
- boolean _isString = this.typeHelper.isString(_type_1);
- if (_isString) {
- StringConcatenation _builder_2 = new StringConcatenation();
- _builder_2.append("bind ds.");
- String _name_3 = attribute.getName();
- _builder_2.append(_name_3, "");
- _builder_2.append(" <--> [this.");
- {
- if (((this.counter.value % 2) == 0)) {
- _builder_2.append("leftform");
- } else {
- _builder_2.append("rightform");
- }
- }
- _builder_2.append(".");
- String _name_4 = attribute.getName();
- _builder_2.append(_name_4, "");
- _builder_2.append("].value");
- this.bindings.add(_builder_2.toString());
- StringConcatenation _builder_3 = new StringConcatenation();
- _builder_3.append("textfield ");
- String _name_5 = attribute.getName();
- _builder_3.append(_name_5, "");
- _builder_3.newLineIfNotEmpty();
- return _builder_3.toString();
- } else {
- JvmTypeReference _jvmTypeReference_1 = datatype.getJvmTypeReference();
- JvmType _type_2 = _jvmTypeReference_1.getType();
- boolean _isBoolean = this.typeHelper.isBoolean(_type_2);
- if (_isBoolean) {
- StringConcatenation _builder_4 = new StringConcatenation();
- _builder_4.append("bind ds.");
- String _name_6 = attribute.getName();
- _builder_4.append(_name_6, "");
- _builder_4.append(" <--> [this.");
- {
- if (((this.counter.value % 2) == 0)) {
- _builder_4.append("leftform");
- } else {
- _builder_4.append("rightform");
- }
- }
- _builder_4.append(".");
- String _name_7 = attribute.getName();
- _builder_4.append(_name_7, "");
- _builder_4.append("].value");
- this.bindings.add(_builder_4.toString());
- StringConcatenation _builder_5 = new StringConcatenation();
- _builder_5.append("checkbox ");
- String _name_8 = attribute.getName();
- _builder_5.append(_name_8, "");
- _builder_5.newLineIfNotEmpty();
- return _builder_5.toString();
- } else {
- JvmTypeReference _jvmTypeReference_2 = datatype.getJvmTypeReference();
- JvmType _type_3 = _jvmTypeReference_2.getType();
- boolean _isNumber = this.typeHelper.isNumber(_type_3);
- if (_isNumber) {
- JvmTypeReference _jvmTypeReference_3 = datatype.getJvmTypeReference();
- JvmType _type_4 = _jvmTypeReference_3.getType();
- boolean _isDecimal = this.typeHelper.isDecimal(_type_4);
- if (_isDecimal) {
- StringConcatenation _builder_6 = new StringConcatenation();
- _builder_6.append("bind ds.");
- String _name_9 = attribute.getName();
- _builder_6.append(_name_9, "");
- _builder_6.append(" <--> [this.");
- {
- if (((this.counter.value % 2) == 0)) {
- _builder_6.append("leftform");
- } else {
- _builder_6.append("rightform");
- }
- }
- _builder_6.append(".");
- String _name_10 = attribute.getName();
- _builder_6.append(_name_10, "");
- _builder_6.append("].value");
- this.bindings.add(_builder_6.toString());
- StringConcatenation _builder_7 = new StringConcatenation();
- _builder_7.append("decimalField ");
- String _name_11 = attribute.getName();
- _builder_7.append(_name_11, "");
- _builder_7.newLineIfNotEmpty();
- return _builder_7.toString();
- } else {
- StringConcatenation _builder_8 = new StringConcatenation();
- _builder_8.append("bind ds.");
- String _name_12 = attribute.getName();
- _builder_8.append(_name_12, "");
- _builder_8.append(" <--> [this.");
- {
- if (((this.counter.value % 2) == 0)) {
- _builder_8.append("leftform");
- } else {
- _builder_8.append("rightform");
- }
- }
- _builder_8.append(".");
- String _name_13 = attribute.getName();
- _builder_8.append(_name_13, "");
- _builder_8.append("].value");
- this.bindings.add(_builder_8.toString());
- StringConcatenation _builder_9 = new StringConcatenation();
- _builder_9.append("numericField ");
- String _name_14 = attribute.getName();
- _builder_9.append(_name_14, "");
- _builder_9.newLineIfNotEmpty();
- return _builder_9.toString();
- }
- }
- }
- }
- }
- return null;
- }
-
- public String getToEntityRefUiField(final LEntityFeature feature) {
- final LEntityReference ref = ((LEntityReference) feature);
- LMultiplicity _multiplicity = ref.getMultiplicity();
- LUpperBound _upper = _multiplicity.getUpper();
- boolean _equals = Objects.equal(_upper, LUpperBound.ONE);
- if (_equals) {
- StringConcatenation _builder = new StringConcatenation();
- _builder.append("bind ds.");
- String _name = feature.getName();
- _builder.append(_name, "");
- _builder.append(" <--> [this.");
- {
- if (((this.counter.value % 2) == 0)) {
- _builder.append("leftform");
- } else {
- _builder.append("rightform");
- }
- }
- _builder.append(".");
- String _name_1 = feature.getName();
- _builder.append(_name_1, "");
- _builder.append("].value");
- this.bindings.add(_builder.toString());
- StringConcatenation _builder_1 = new StringConcatenation();
- _builder_1.append("referenceField ");
- String _name_2 = feature.getName();
- _builder_1.append(_name_2, "");
- _builder_1.append(" {");
- _builder_1.newLineIfNotEmpty();
- _builder_1.append("\t");
- _builder_1.append("type ");
- LEntity _type = ref.getType();
- String _name_3 = _type.getName();
- _builder_1.append(_name_3, "\t");
- _builder_1.newLineIfNotEmpty();
- _builder_1.append("\t");
- _builder_1.append("captionField ");
- EObject _eContainer = feature.eContainer();
- String _findCaptionProperty = BeanHelper.findCaptionProperty(((LEntity) _eContainer));
- _builder_1.append(_findCaptionProperty, "\t");
- _builder_1.newLineIfNotEmpty();
- _builder_1.append("}");
- _builder_1.newLine();
- return _builder_1.toString();
- }
- LMultiplicity _multiplicity_1 = ref.getMultiplicity();
- LUpperBound _upper_1 = _multiplicity_1.getUpper();
- boolean _equals_1 = Objects.equal(_upper_1, LUpperBound.MANY);
- if (_equals_1) {
- StringConcatenation _builder_2 = new StringConcatenation();
- _builder_2.append("bind ds.");
- String _name_4 = feature.getName();
- _builder_2.append(_name_4, "");
- _builder_2.append(" <--> [this.");
- {
- if (((this.counter.value % 2) == 0)) {
- _builder_2.append("leftform");
- } else {
- _builder_2.append("rightform");
- }
- }
- _builder_2.append(".");
- String _name_5 = feature.getName();
- _builder_2.append(_name_5, "");
- _builder_2.append("].collection");
- this.bindings.add(_builder_2.toString());
- StringConcatenation _builder_3 = new StringConcatenation();
- _builder_3.append("table ");
- String _name_6 = feature.getName();
- _builder_3.append(_name_6, "");
- _builder_3.append(" {");
- _builder_3.newLineIfNotEmpty();
- _builder_3.append("\t");
- _builder_3.append("type ");
- LEntity _type_1 = ref.getType();
- String _name_7 = _type_1.getName();
- _builder_3.append(_name_7, "\t");
- _builder_3.newLineIfNotEmpty();
- _builder_3.append("\t");
- _builder_3.append("columns {");
- _builder_3.newLine();
- _builder_3.append("\t\t");
- _builder_3.append("column ");
- EObject _eContainer_1 = feature.eContainer();
- String _findCaptionProperty_1 = BeanHelper.findCaptionProperty(((LEntity) _eContainer_1));
- _builder_3.append(_findCaptionProperty_1, "\t\t");
- _builder_3.newLineIfNotEmpty();
- _builder_3.append("\t\t");
- _builder_3.append("column ");
- EObject _eContainer_2 = feature.eContainer();
- String _findDescriptionProperty = BeanHelper.findDescriptionProperty(((LEntity) _eContainer_2));
- _builder_3.append(_findDescriptionProperty, "\t\t");
- _builder_3.newLineIfNotEmpty();
- _builder_3.append("\t");
- _builder_3.append("}");
- _builder_3.newLine();
- _builder_3.append("}");
- _builder_3.newLine();
- return _builder_3.toString();
- }
- return null;
- }
-
- public String getToBeanRefUiField(final LEntityAttribute attribute) {
- final LScalarType type = attribute.getType();
- if ((type instanceof LBean)) {
- StringConcatenation _builder = new StringConcatenation();
- _builder.append("panel ");
- String _name = attribute.getName();
- _builder.append(_name, "");
- _builder.append(" {");
- _builder.newLineIfNotEmpty();
- _builder.append("\t");
- _builder.append("content horizontalLayout {");
- _builder.newLine();
- _builder.append("\t\t");
- _builder.append("form {");
- _builder.newLine();
- {
- List<LBeanAttribute> _allAttributes = ((LBean)type).getAllAttributes();
- for(final LBeanAttribute feature : _allAttributes) {
- {
- if ((feature instanceof LBeanAttribute)) {
- {
- LScalarType _type = feature.getType();
- if ((_type instanceof LDataType)) {
- _builder.append("\t\t\t");
- String _toBeanAttributeUiField = this.getToBeanAttributeUiField(feature);
- _builder.append(_toBeanAttributeUiField, "\t\t\t");
- _builder.newLineIfNotEmpty();
- } else {
- _builder.append("\t\t\t");
- String _toBeantoBeanRefUiField = this.getToBeantoBeanRefUiField(feature);
- _builder.append(_toBeantoBeanRefUiField, "\t\t\t");
- _builder.newLineIfNotEmpty();
- }
- }
- } else {
- if ((feature instanceof LReference)) {
- _builder.append("\t\t\t");
- String _toBeanReferenceUiField = this.getToBeanReferenceUiField(feature);
- _builder.append(_toBeanReferenceUiField, "\t\t\t");
- _builder.newLineIfNotEmpty();
- }
- }
- }
- }
- }
- _builder.append("\t\t");
- _builder.append("}");
- _builder.newLine();
- _builder.append("\t");
- _builder.append("}");
- _builder.newLine();
- _builder.append("}");
- _builder.newLine();
- return _builder.toString();
- }
- return null;
- }
-
- public String getToBeantoBeanRefUiField(final LBeanAttribute attribute) {
- final LBeanReference ref = ((LBeanReference) attribute);
- LMultiplicity _multiplicity = ref.getMultiplicity();
- LUpperBound _upper = _multiplicity.getUpper();
- boolean _equals = Objects.equal(_upper, LUpperBound.ONE);
- if (_equals) {
- StringConcatenation _builder = new StringConcatenation();
- _builder.append("bind ds.");
- String _name = attribute.getName();
- _builder.append(_name, "");
- _builder.append(" <--> [this.");
- {
- if (((this.counter.value % 2) == 0)) {
- _builder.append("leftform");
- } else {
- _builder.append("rightform");
- }
- }
- _builder.append(".");
- String _name_1 = attribute.getName();
- _builder.append(_name_1, "");
- _builder.append("].value");
- this.bindings.add(_builder.toString());
- StringConcatenation _builder_1 = new StringConcatenation();
- _builder_1.append("referenceField ");
- String _name_2 = attribute.getName();
- _builder_1.append(_name_2, "");
- _builder_1.append(" {");
- _builder_1.newLineIfNotEmpty();
- _builder_1.append("\t");
- _builder_1.append("type ");
- LType _type = ref.getType();
- String _name_3 = _type.getName();
- _builder_1.append(_name_3, "\t");
- _builder_1.newLineIfNotEmpty();
- _builder_1.append("\t");
- _builder_1.append("captionField ");
- EObject _eContainer = attribute.eContainer();
- String _findCaptionProperty = BeanHelper.findCaptionProperty(((LBean) _eContainer));
- _builder_1.append(_findCaptionProperty, "\t");
- _builder_1.newLineIfNotEmpty();
- _builder_1.append("}");
- _builder_1.newLine();
- return _builder_1.toString();
- }
- LMultiplicity _multiplicity_1 = ref.getMultiplicity();
- LUpperBound _upper_1 = _multiplicity_1.getUpper();
- boolean _equals_1 = Objects.equal(_upper_1, LUpperBound.MANY);
- if (_equals_1) {
- StringConcatenation _builder_2 = new StringConcatenation();
- _builder_2.append("bind ds.");
- String _name_4 = attribute.getName();
- _builder_2.append(_name_4, "");
- _builder_2.append(" <--> [this.");
- {
- if (((this.counter.value % 2) == 0)) {
- _builder_2.append("leftform");
- } else {
- _builder_2.append("rightform");
- }
- }
- _builder_2.append(".");
- String _name_5 = attribute.getName();
- _builder_2.append(_name_5, "");
- _builder_2.append("].collection");
- this.bindings.add(_builder_2.toString());
- StringConcatenation _builder_3 = new StringConcatenation();
- _builder_3.append("table ");
- String _name_6 = attribute.getName();
- _builder_3.append(_name_6, "");
- _builder_3.append(" {");
- _builder_3.newLineIfNotEmpty();
- _builder_3.append("\t");
- _builder_3.append("type ");
- LType _type_1 = ref.getType();
- String _name_7 = _type_1.getName();
- _builder_3.append(_name_7, "\t");
- _builder_3.newLineIfNotEmpty();
- _builder_3.append("\t");
- _builder_3.append("columns {");
- _builder_3.newLine();
- _builder_3.append("\t\t");
- _builder_3.append("column ");
- EObject _eContainer_1 = attribute.eContainer();
- String _findCaptionProperty_1 = BeanHelper.findCaptionProperty(((LBean) _eContainer_1));
- _builder_3.append(_findCaptionProperty_1, "\t\t");
- _builder_3.newLineIfNotEmpty();
- _builder_3.append("\t\t");
- _builder_3.append("column ");
- EObject _eContainer_2 = attribute.eContainer();
- String _findDescriptionProperty = BeanHelper.findDescriptionProperty(((LBean) _eContainer_2));
- _builder_3.append(_findDescriptionProperty, "\t\t");
- _builder_3.newLineIfNotEmpty();
- _builder_3.append("\t");
- _builder_3.append("}");
- _builder_3.newLine();
- _builder_3.append("}");
- _builder_3.newLine();
- return _builder_3.toString();
- }
- return null;
- }
-
- public String getToBeanAttributeUiField(final LBeanAttribute attribute) {
- LScalarType _type = attribute.getType();
- final LDataType datatype = ((LDataType) _type);
- EObject _eContainer = attribute.eContainer();
- String _name = ((LBean) _eContainer).getName();
- final String beanName = StringExtensions.toFirstLower(_name);
- boolean _isDate = datatype.isDate();
- if (_isDate) {
- StringConcatenation _builder = new StringConcatenation();
- _builder.append("bind ds.");
- _builder.append(beanName, "");
- _builder.append(".");
- String _name_1 = attribute.getName();
- _builder.append(_name_1, "");
- _builder.append(" <--> [this.");
- {
- if (((this.counter.value % 2) == 0)) {
- _builder.append("leftform");
- } else {
- _builder.append("rightform");
- }
- }
- _builder.append(".");
- _builder.append(beanName, "");
- _builder.append(".");
- String _name_2 = attribute.getName();
- _builder.append(_name_2, "");
- _builder.append("].value");
- this.bindings.add(_builder.toString());
- StringConcatenation _builder_1 = new StringConcatenation();
- _builder_1.append("datefield ");
- String _name_3 = attribute.getName();
- _builder_1.append(_name_3, "");
- _builder_1.newLineIfNotEmpty();
- return _builder_1.toString();
- } else {
- JvmTypeReference _jvmTypeReference = datatype.getJvmTypeReference();
- JvmType _type_1 = _jvmTypeReference.getType();
- boolean _isString = this.typeHelper.isString(_type_1);
- if (_isString) {
- StringConcatenation _builder_2 = new StringConcatenation();
- _builder_2.append("bind ds.");
- _builder_2.append(beanName, "");
- _builder_2.append(".");
- String _name_4 = attribute.getName();
- _builder_2.append(_name_4, "");
- _builder_2.append(" <--> [this.");
- {
- if (((this.counter.value % 2) == 0)) {
- _builder_2.append("leftform");
- } else {
- _builder_2.append("rightform");
- }
- }
- _builder_2.append(".");
- _builder_2.append(beanName, "");
- _builder_2.append(".");
- String _name_5 = attribute.getName();
- _builder_2.append(_name_5, "");
- _builder_2.append("].value");
- this.bindings.add(_builder_2.toString());
- StringConcatenation _builder_3 = new StringConcatenation();
- _builder_3.append("textfield ");
- String _name_6 = attribute.getName();
- _builder_3.append(_name_6, "");
- _builder_3.newLineIfNotEmpty();
- return _builder_3.toString();
- } else {
- JvmTypeReference _jvmTypeReference_1 = datatype.getJvmTypeReference();
- JvmType _type_2 = _jvmTypeReference_1.getType();
- boolean _isBoolean = this.typeHelper.isBoolean(_type_2);
- if (_isBoolean) {
- StringConcatenation _builder_4 = new StringConcatenation();
- _builder_4.append("bind ds.");
- _builder_4.append(beanName, "");
- _builder_4.append(".");
- String _name_7 = attribute.getName();
- _builder_4.append(_name_7, "");
- _builder_4.append(" <--> [this.");
- {
- if (((this.counter.value % 2) == 0)) {
- _builder_4.append("leftform");
- } else {
- _builder_4.append("rightform");
- }
- }
- _builder_4.append(".");
- _builder_4.append(beanName, "");
- _builder_4.append(".");
- String _name_8 = attribute.getName();
- _builder_4.append(_name_8, "");
- _builder_4.append("].value");
- this.bindings.add(_builder_4.toString());
- StringConcatenation _builder_5 = new StringConcatenation();
- _builder_5.append("checkbox ");
- String _name_9 = attribute.getName();
- _builder_5.append(_name_9, "");
- _builder_5.newLineIfNotEmpty();
- return _builder_5.toString();
- } else {
- JvmTypeReference _jvmTypeReference_2 = datatype.getJvmTypeReference();
- JvmType _type_3 = _jvmTypeReference_2.getType();
- boolean _isNumber = this.typeHelper.isNumber(_type_3);
- if (_isNumber) {
- JvmTypeReference _jvmTypeReference_3 = datatype.getJvmTypeReference();
- JvmType _type_4 = _jvmTypeReference_3.getType();
- boolean _isDecimal = this.typeHelper.isDecimal(_type_4);
- if (_isDecimal) {
- StringConcatenation _builder_6 = new StringConcatenation();
- _builder_6.append("bind ds.");
- _builder_6.append(beanName, "");
- _builder_6.append(".");
- String _name_10 = attribute.getName();
- _builder_6.append(_name_10, "");
- _builder_6.append(" <--> [this.");
- {
- if (((this.counter.value % 2) == 0)) {
- _builder_6.append("leftform");
- } else {
- _builder_6.append("rightform");
- }
- }
- _builder_6.append(".");
- _builder_6.append(beanName, "");
- _builder_6.append(".");
- String _name_11 = attribute.getName();
- _builder_6.append(_name_11, "");
- _builder_6.append("].value");
- this.bindings.add(_builder_6.toString());
- StringConcatenation _builder_7 = new StringConcatenation();
- _builder_7.append("decimalField ");
- String _name_12 = attribute.getName();
- _builder_7.append(_name_12, "");
- _builder_7.newLineIfNotEmpty();
- return _builder_7.toString();
- } else {
- StringConcatenation _builder_8 = new StringConcatenation();
- _builder_8.append("bind ds.");
- _builder_8.append(beanName, "");
- _builder_8.append(".");
- String _name_13 = attribute.getName();
- _builder_8.append(_name_13, "");
- _builder_8.append(" <--> [this.");
- {
- if (((this.counter.value % 2) == 0)) {
- _builder_8.append("leftform");
- } else {
- _builder_8.append("rightform");
- }
- }
- _builder_8.append(".");
- _builder_8.append(beanName, "");
- _builder_8.append(".");
- String _name_14 = attribute.getName();
- _builder_8.append(_name_14, "");
- _builder_8.append("].value");
- this.bindings.add(_builder_8.toString());
- StringConcatenation _builder_9 = new StringConcatenation();
- _builder_9.append("numericField ");
- String _name_15 = attribute.getName();
- _builder_9.append(_name_15, "");
- _builder_9.newLineIfNotEmpty();
- return _builder_9.toString();
- }
- }
- }
- }
- }
- return null;
- }
-
- public String getToBeanReferenceUiField(final LBeanAttribute attribute) {
- final LBeanReference ref = ((LBeanReference) attribute);
- LMultiplicity _multiplicity = ref.getMultiplicity();
- LUpperBound _upper = _multiplicity.getUpper();
- boolean _equals = Objects.equal(_upper, LUpperBound.ONE);
- if (_equals) {
- StringConcatenation _builder = new StringConcatenation();
- _builder.append("referenceField ");
- String _name = attribute.getName();
- _builder.append(_name, "");
- _builder.append(" {");
- _builder.newLineIfNotEmpty();
- _builder.append("\t");
- _builder.append("type ");
- LType _type = ref.getType();
- String _name_1 = _type.getName();
- _builder.append(_name_1, "\t");
- _builder.newLineIfNotEmpty();
- _builder.append("\t");
- _builder.append("captionField uuid");
- _builder.newLine();
- _builder.append("}");
- _builder.newLine();
- return _builder.toString();
- }
- LMultiplicity _multiplicity_1 = ref.getMultiplicity();
- LUpperBound _upper_1 = _multiplicity_1.getUpper();
- boolean _equals_1 = Objects.equal(_upper_1, LUpperBound.MANY);
- if (_equals_1) {
- StringConcatenation _builder_1 = new StringConcatenation();
- _builder_1.append("table ");
- String _name_2 = attribute.getName();
- _builder_1.append(_name_2, "");
- _builder_1.append(" {");
- _builder_1.newLineIfNotEmpty();
- _builder_1.append("\t");
- _builder_1.append("type ");
- LType _type_1 = ref.getType();
- String _name_3 = _type_1.getName();
- _builder_1.append(_name_3, "\t");
- _builder_1.newLineIfNotEmpty();
- _builder_1.append("\t");
- _builder_1.append("columns {");
- _builder_1.newLine();
- _builder_1.append("\t\t");
- _builder_1.append("column uuid");
- _builder_1.newLine();
- _builder_1.append("\t");
- _builder_1.append("}");
- _builder_1.newLine();
- _builder_1.append("}");
- _builder_1.newLine();
- return _builder_1.toString();
- }
- return null;
- }
-
- public String toDocu(final EObject element) {
- return "";
- }
-}
diff --git a/org.eclipse.osbp.runtime.web.feature.ecview.presentation.vaadin/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.runtime.web.feature.ecview.presentation.vaadin/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.feature.ecview.presentation.vaadin/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.runtime.web.feature.ecview.presentation.vaadin/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.runtime.web.feature.ecview.presentation.vaadin/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.feature.ecview.presentation.vaadin/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.runtime.web.feature.ecview.presentation.vaadin/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.runtime.web.feature.ecview.presentation.vaadin/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..19e3115
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.feature.ecview.presentation.vaadin/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,11 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+BuilderConfiguration.is_project_specific=true
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.emf-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.runtime.web.feature.ecview.presentation.vaadin/feature.xml b/org.eclipse.osbp.runtime.web.feature.ecview.presentation.vaadin/feature.xml
index 0193f50..bca4aa7 100644
--- a/org.eclipse.osbp.runtime.web.feature.ecview.presentation.vaadin/feature.xml
+++ b/org.eclipse.osbp.runtime.web.feature.ecview.presentation.vaadin/feature.xml
@@ -14,7 +14,8 @@
id="org.eclipse.osbp.runtime.web.feature.ecview.presentation.vaadin"
label="%featureName"
version="0.9.0.qualifier"
- provider-name="%providerName">
+ provider-name="%providerName"
+ plugin="org.eclipse.osbp.runtime.web.ecview.presentation.vaadin">
<description>
%description
diff --git a/org.eclipse.osbp.runtime.web.feature.testbase/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.runtime.web.feature.testbase/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.feature.testbase/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.runtime.web.feature.testbase/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.runtime.web.feature.testbase/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.feature.testbase/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.runtime.web.feature.testbase/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.runtime.web.feature.testbase/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..fe45c94
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.feature.testbase/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,7 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.runtime.web.feature.testbase/feature.xml b/org.eclipse.osbp.runtime.web.feature.testbase/feature.xml
index bc81646..3e1e2ed 100644
--- a/org.eclipse.osbp.runtime.web.feature.testbase/feature.xml
+++ b/org.eclipse.osbp.runtime.web.feature.testbase/feature.xml
@@ -1,20 +1,69 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!--#======================================================================= -->
-<!--# Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany) -->
-<!--# All rights reserved. This program and the accompanying materials -->
-<!--# are made available under the terms of the Eclipse Public License v1.0 -->
-<!--# which accompanies this distribution, and is available at -->
-<!--# http://www.eclipse.org/legal/epl-v10.html -->
-<!--# -->
-<!--# Contributors: -->
-<!--# Christophe Loetz (Loetz GmbH&Co.KG) - initial API and implementation -->
-<!--#======================================================================= -->
-
-<feature
- id="org.eclipse.osbp.runtime.web.feature.testbase"
- label="%featureName"
- version="0.9.0.qualifier"
- provider-name="%providerName">
+ <!--#=======================================================================
+ --><!--#
+ Copyright
+ (c)
+ 2011,
+ 2016
+ -
+ Loetz
+ GmbH&Co.KG
+ (69115
+ Heidelberg,
+ Germany)
+ --><!--#
+ All
+ rights
+ reserved.
+ This
+ program
+ and
+ the
+ accompanying
+ materials
+ --><!--#
+ are
+ made
+ available
+ under
+ the
+ terms
+ of
+ the
+ Eclipse
+ Public
+ License
+ v1.0
+ --><!--#
+ which
+ accompanies
+ this
+ distribution,
+ and
+ is
+ available
+ at
+ --><!--#
+ http://www.eclipse.org/legal/epl-v10.html
+ --><!--#
+ --><!--#
+ Contributors:
+ --><!--#
+
+
+
+
+ Christophe
+ Loetz
+ (Loetz
+ GmbH&Co.KG)
+ -
+ initial
+ API
+ and
+ implementation
+ --><!--#=======================================================================
+ --><feature id="org.eclipse.osbp.runtime.web.feature.testbase" label="%featureName" version="0.9.0.qualifier" provider-name="%providerName">
<description>
%description
@@ -39,4 +88,4 @@
version="0.0.0"
unpack="false"/>
-</feature>
+</feature>
\ No newline at end of file
diff --git a/org.eclipse.osbp.runtime.web.feature.vaadin.addon.osgi/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.runtime.web.feature.vaadin.addon.osgi/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.feature.vaadin.addon.osgi/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.runtime.web.feature.vaadin.addon.osgi/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.runtime.web.feature.vaadin.addon.osgi/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.feature.vaadin.addon.osgi/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.runtime.web.feature.vaadin.addon.osgi/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.runtime.web.feature.vaadin.addon.osgi/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..19e3115
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.feature.vaadin.addon.osgi/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,11 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+BuilderConfiguration.is_project_specific=true
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.emf-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.runtime.web.feature.vaadin.addon.osgi/feature.xml b/org.eclipse.osbp.runtime.web.feature.vaadin.addon.osgi/feature.xml
index a1a08d5..7d48972 100644
--- a/org.eclipse.osbp.runtime.web.feature.vaadin.addon.osgi/feature.xml
+++ b/org.eclipse.osbp.runtime.web.feature.vaadin.addon.osgi/feature.xml
@@ -10,11 +10,12 @@
<!--# Christophe Loetz (Loetz GmbH&Co.KG) - initial API and implementation -->
<!--#======================================================================= -->
-<feature
- id="org.eclipse.osbp.runtime.web.feature.vaadin.addon.osgi"
- label="%featureName"
- version="0.9.0.qualifier"
- provider-name="%providerName">
+<feature
+ id="org.eclipse.osbp.runtime.web.feature.vaadin.addon.osgi"
+ label="%featureName"
+ version="0.9.0.qualifier"
+ provider-name="%providerName"
+ plugin="org.eclipse.osbp.runtime.web.vaadin.osgi">
<description>
%description
@@ -40,4 +41,4 @@
version="0.0.0"
unpack="false"/>
-</feature>
+</feature>
\ No newline at end of file
diff --git a/org.eclipse.osbp.runtime.web.feature.vaadin.common/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.runtime.web.feature.vaadin.common/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.feature.vaadin.common/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.runtime.web.feature.vaadin.common/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.runtime.web.feature.vaadin.common/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.feature.vaadin.common/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.runtime.web.feature.vaadin.common/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.runtime.web.feature.vaadin.common/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..19e3115
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.feature.vaadin.common/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,11 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+BuilderConfiguration.is_project_specific=true
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.emf-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.runtime.web.feature.vaadin.common/feature.xml b/org.eclipse.osbp.runtime.web.feature.vaadin.common/feature.xml
index 8f83ec0..0d55732 100644
--- a/org.eclipse.osbp.runtime.web.feature.vaadin.common/feature.xml
+++ b/org.eclipse.osbp.runtime.web.feature.vaadin.common/feature.xml
@@ -14,7 +14,8 @@
id="org.eclipse.osbp.runtime.web.feature.vaadin.common"
label="%featureName"
version="0.9.0.qualifier"
- provider-name="%providerName">
+ provider-name="%providerName"
+ plugin="org.eclipse.osbp.runtime.web.vaadin.common">
<description>
%description
@@ -28,6 +29,13 @@
%license
</license>
+ <plugin
+ id="org.eclipse.osbp.runtime.web.common"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
<plugin
id="org.eclipse.osbp.runtime.web.vaadin.common"
download-size="0"
diff --git a/org.eclipse.osbp.runtime.web.feature.vaadin.components/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.runtime.web.feature.vaadin.components/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.feature.vaadin.components/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.runtime.web.feature.vaadin.components/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.runtime.web.feature.vaadin.components/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.feature.vaadin.components/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.runtime.web.feature.vaadin.components/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.runtime.web.feature.vaadin.components/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..19e3115
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.feature.vaadin.components/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,11 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+BuilderConfiguration.is_project_specific=true
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.emf-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.runtime.web.feature.vaadin.components/feature.xml b/org.eclipse.osbp.runtime.web.feature.vaadin.components/feature.xml
index 95d8879..d53c84c 100644
--- a/org.eclipse.osbp.runtime.web.feature.vaadin.components/feature.xml
+++ b/org.eclipse.osbp.runtime.web.feature.vaadin.components/feature.xml
@@ -14,7 +14,8 @@
id="org.eclipse.osbp.runtime.web.feature.vaadin.components"
label="%featureName"
version="0.9.0.qualifier"
- provider-name="%providerName">
+ provider-name="%providerName"
+ plugin="org.eclipse.osbp.runtime.web.vaadin.components">
<description>
%description
diff --git a/org.eclipse.osbp.runtime.web.feature.vaadin.databinding/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.runtime.web.feature.vaadin.databinding/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.feature.vaadin.databinding/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.runtime.web.feature.vaadin.databinding/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.runtime.web.feature.vaadin.databinding/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.feature.vaadin.databinding/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.runtime.web.feature.vaadin.databinding/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.runtime.web.feature.vaadin.databinding/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..19e3115
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.feature.vaadin.databinding/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,11 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+BuilderConfiguration.is_project_specific=true
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.emf-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.runtime.web.feature.vaadin.databinding/feature.xml b/org.eclipse.osbp.runtime.web.feature.vaadin.databinding/feature.xml
index 4a8f96a..6d7aaee 100644
--- a/org.eclipse.osbp.runtime.web.feature.vaadin.databinding/feature.xml
+++ b/org.eclipse.osbp.runtime.web.feature.vaadin.databinding/feature.xml
@@ -14,7 +14,8 @@
id="org.eclipse.osbp.runtime.web.feature.vaadin.databinding"
label="%featureName"
version="0.9.0.qualifier"
- provider-name="%providerName">
+ provider-name="%providerName"
+ plugin="org.eclipse.osbp.runtime.web.vaadin.databinding">
<description>
%description
diff --git a/org.eclipse.osbp.runtime.web.feature.vaadin.osgi/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.runtime.web.feature.vaadin.osgi/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.feature.vaadin.osgi/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.runtime.web.feature.vaadin.osgi/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.runtime.web.feature.vaadin.osgi/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.feature.vaadin.osgi/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.runtime.web.feature.vaadin.osgi/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.runtime.web.feature.vaadin.osgi/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..19e3115
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.feature.vaadin.osgi/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,11 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+BuilderConfiguration.is_project_specific=true
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.emf-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.runtime.web.feature.vaadin.osgi/feature.xml b/org.eclipse.osbp.runtime.web.feature.vaadin.osgi/feature.xml
index 696de82..6570229 100644
--- a/org.eclipse.osbp.runtime.web.feature.vaadin.osgi/feature.xml
+++ b/org.eclipse.osbp.runtime.web.feature.vaadin.osgi/feature.xml
@@ -14,7 +14,8 @@
id="org.eclipse.osbp.runtime.web.feature.vaadin.osgi"
label="%featureName"
version="0.9.0.qualifier"
- provider-name="%providerName">
+ provider-name="%providerName"
+ plugin="org.eclipse.osbp.runtime.web.vaadin.osgi">
<description>
%description
diff --git a/org.eclipse.osbp.runtime.web.target/.project b/org.eclipse.osbp.runtime.web.target/.project
deleted file mode 100644
index 3060072..0000000
--- a/org.eclipse.osbp.runtime.web.target/.project
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
- <name>org.eclipse.osbp.runtime.web.target</name>
- <comment></comment>
- <projects>
- </projects>
- <buildSpec>
- <buildCommand>
- <name>org.eclipse.m2e.core.maven2Builder</name>
- <arguments>
- </arguments>
- </buildCommand>
- </buildSpec>
- <natures>
- <nature>org.eclipse.m2e.core.maven2Nature</nature>
- </natures>
-</projectDescription>
diff --git a/org.eclipse.osbp.runtime.web.target/org.eclipse.osbp.runtime.web.target.kepler.target b/org.eclipse.osbp.runtime.web.target/org.eclipse.osbp.runtime.web.target.kepler.target
deleted file mode 100644
index 1c8de48..0000000
--- a/org.eclipse.osbp.runtime.web.target/org.eclipse.osbp.runtime.web.target.kepler.target
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<?pde version="3.8"?><target includeMode="feature" name="org.eclipse.osbp.runtime.web.target.kepler" sequenceNumber="36">
-<locations>
-<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="slicer" includeSource="false" type="InstallableUnit">
-<unit id="org.apache.httpcomponents.httpcore.source" version="4.1.4.v201203221030"/>
-<unit id="org.apache.httpcomponents.httpcore" version="4.1.4.v201203221030"/>
-<unit id="org.apache.httpcomponents.httpcore.nio" version="4.1.0.v201101201700"/>
-<unit id="org.apache.httpcomponents.httpcore.nio.source" version="4.1.0.v201101201700"/>
-<repository location="http://download.eclipse.org/tools/orbit/downloads/drops/R20120526062928/repository"/>
-</location>
-<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="slicer" includeSource="false" type="InstallableUnit">
-<unit id="org.apache.httpcomponents.httpclient" version="4.1.2.v201203221030"/>
-<unit id="org.apache.httpcomponents.httpclient.source" version="4.1.2.v201203221030"/>
-<repository location="http://download.eclipse.org/tools/orbit/downloads/drops/R20120526062928/repository"/>
-</location>
-<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="slicer" includeSource="false" type="InstallableUnit">
-<unit id="org.eclipse.emf.ecp.ecview.feature.core.feature.group" version="0.0.1.201406272004"/>
-<repository location="http://lun.lunifera.org/downloads/p2/ecview/nightly/"/>
-</location>
-<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="slicer" includeSource="false" type="InstallableUnit">
-<unit id="org.eclipse.equinox.sdk.feature.group" version="3.9.0.v20140221-1852"/>
-<unit id="org.eclipse.platform.sdk" version="4.3.2.M20140221-1700"/>
-<unit id="org.eclipse.emf.sdk.feature.group" version="2.9.2.v20140203-1126"/>
-<repository location="http://download.eclipse.org/releases/kepler"/>
-</location>
-<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="slicer" includeSource="false" type="InstallableUnit">
-<unit id="org.junit.source" version="4.10.0.v4_10_0_v20120426-0900"/>
-<unit id="org.junit" version="4.10.0.v4_10_0_v20120426-0900"/>
-<repository location="http://download.eclipse.org/tools/orbit/downloads/drops/R20120526062928/repository"/>
-</location>
-<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="slicer" includeSource="false" type="InstallableUnit">
-<unit id="org.eclipse.osbp.dependencies.feature.security.shiro.feature.group" version="1.2.2"/>
-<unit id="org.eclipse.osbp.runtime.feature.common.feature.group" version="0.0.1.201405120903"/>
-<unit id="org.eclipse.osbp.dependencies.feature.assert-utilities.feature.group" version="1.2.2"/>
-<unit id="org.eclipse.osbp.runtime.feature.common.source.feature.group" version="0.0.1.201405120903"/>
-<unit id="org.eclipse.osbp.dependencies.feature.vaadin.feature.group" version="7.1.9"/>
-<repository location="http://lun.lunifera.org/downloads/p2/lunifera/kepler/latest/"/>
-</location>
-<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="slicer" includeSource="false" type="InstallableUnit">
-<unit id="org.apache.commons.math" version="2.1.0.v201105210652"/>
-<unit id="org.apache.commons.lang" version="2.6.0.v201205030909"/>
-<unit id="org.apache.commons.collections" version="3.2.0.v201005080500"/>
-<unit id="org.apache.commons.beanutils" version="1.8.0.v201205091237"/>
-<repository location="http://download.eclipse.org/tools/orbit/downloads/drops/R20120526062928/repository"/>
-</location>
-<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="slicer" includeSource="false" type="InstallableUnit">
-<unit id="org.eclipse.osbp.dsl.feature.entities.headless.feature.group" version="0.0.1.201406261127"/>
-<unit id="org.eclipse.osbp.dsl.feature.dto.headless.source.feature.group" version="0.0.1.201406261127"/>
-<unit id="org.eclipse.osbp.dsl.feature.entities.headless.source.feature.group" version="0.0.1.201406261127"/>
-<unit id="org.eclipse.osbp.dsl.feature.common.headless.feature.group" version="0.0.1.201406261127"/>
-<unit id="org.eclipse.osbp.dsl.feature.common.headless.source.feature.group" version="0.0.1.201406261127"/>
-<unit id="org.eclipse.osbp.dsl.feature.dto.headless.feature.group" version="0.0.1.201406261127"/>
-<repository location="http://lun.lunifera.org/downloads/p2/lunifera/kepler/latest/"/>
-</location>
-<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="slicer" includeSource="false" type="InstallableUnit">
-<unit id="org.eclipse.xtext.redist.feature.group" version="2.6.1.v201406120726"/>
-<unit id="org.eclipse.xtext.ui.feature.group" version="2.6.1.v201406120726"/>
-<unit id="org.eclipse.xtext.runtime.feature.group" version="2.6.1.v201406120726"/>
-<unit id="org.eclipse.xtext.xbase.feature.group" version="2.6.1.v201406120726"/>
-<unit id="org.eclipse.xtext.examples.feature.group" version="2.6.1.v201406120726"/>
-<unit id="org.eclipse.xtext.sdk.feature.group" version="2.6.1.v201406120726"/>
-<unit id="org.eclipse.xtext.docs.feature.group" version="2.6.1.v201406120726"/>
-<repository location="http://download.eclipse.org/modeling/tmf/xtext/updates/composite/releases"/>
-</location>
-</locations>
-</target>
diff --git a/org.eclipse.osbp.runtime.web.target/pom.xml b/org.eclipse.osbp.runtime.web.target/pom.xml
deleted file mode 100644
index 0acc17f..0000000
--- a/org.eclipse.osbp.runtime.web.target/pom.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--#======================================================================= -->
-<!--# Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany) -->
-<!--# All rights reserved. This program and the accompanying materials -->
-<!--# are made available under the terms of the Eclipse Public License v1.0 -->
-<!--# which accompanies this distribution, and is available at -->
-<!--# http://www.eclipse.org/legal/epl-v10.html -->
-<!--# -->
-<!--# Contributors: -->
-<!--# Christophe Loetz (Loetz GmbH&Co.KG) - initial API and implementation -->
-<!--#======================================================================= -->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>org.eclipse.osbp.runtime.web</groupId>
- <artifactId>org.eclipse.osbp.runtime.web.aggregator</artifactId>
- <version>0.9.0-SNAPSHOT</version>
- <relativePath>..</relativePath>
- </parent>
- <artifactId>org.eclipse.osbp.runtime.web.target</artifactId>
- <packaging>pom</packaging>
-</project>
diff --git a/org.eclipse.osbp.runtime.web.testbase/.classpath b/org.eclipse.osbp.runtime.web.testbase/.classpath
new file mode 100644
index 0000000..9e307bb
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.testbase/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src/"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.osbp.runtime.web.testbase/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.osbp.runtime.web.testbase/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..f42de36
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.testbase/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/org.eclipse.osbp.runtime.web.testbase/META-INF/MANIFEST.MF b/org.eclipse.osbp.runtime.web.testbase/META-INF/MANIFEST.MF
index ae4e383..370753f 100644
--- a/org.eclipse.osbp.runtime.web.testbase/META-INF/MANIFEST.MF
+++ b/org.eclipse.osbp.runtime.web.testbase/META-INF/MANIFEST.MF
@@ -4,12 +4,12 @@
Bundle-Name: org.eclipse.osbp.runtime.web.testbase
Created-By: ApacheMaven
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
-Require-Bundle: com.vaadin.shared;bundle-version="[7.5.7,7.7.0)",
- com.vaadin.server;bundle-version="[7.5.7,7.7.0)",
- com.vaadin.external.org.slf4j;bundle-version="1.6.1",
- com.vaadin.client-compiled;bundle-version="[7.5.7,7.7.0)",
- com.vaadin.themes;bundle-version="[7.5.7,7.7.0)",
- com.vaadin.push;bundle-version="[7.5.7,7.7.0)",
+Require-Bundle: com.vaadin.shared;bundle-version="[7.7.6,7.8.0)",
+ com.vaadin.server;bundle-version="[7.7.6,7.8.0)",
+ com.vaadin.external.org.slf4j;bundle-version="[7.7.6,7.8.0)",
+ com.vaadin.client-compiled;bundle-version="[7.7.6,7.8.0)",
+ com.vaadin.themes;bundle-version="[7.7.6,7.8.0)",
+ com.vaadin.push;bundle-version="[7.7.6,7.8.0)",
org.eclipse.equinox.http.jetty;bundle-version="3.0.100",
org.eclipse.jetty.http;bundle-version="8.1.11",
org.eclipse.jetty.io;bundle-version="8.1.11",
diff --git a/org.eclipse.osbp.runtime.web.vaadin.common.tests/.classpath b/org.eclipse.osbp.runtime.web.vaadin.common.tests/.classpath
new file mode 100644
index 0000000..cf36b56
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.common.tests/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src/"/>
+ <classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/org.eclipse.osbp.runtime.web.vaadin.common.tests/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.runtime.web.vaadin.common.tests/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.common.tests/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.runtime.web.vaadin.common.tests/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.osbp.runtime.web.vaadin.common.tests/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..c537b63
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.common.tests/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/org.eclipse.osbp.runtime.web.vaadin.common.tests/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.runtime.web.vaadin.common.tests/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.common.tests/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.runtime.web.vaadin.common.tests/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.runtime.web.vaadin.common.tests/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..fe45c94
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.common.tests/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,7 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.runtime.web.vaadin.common.tests/META-INF/MANIFEST.MF b/org.eclipse.osbp.runtime.web.vaadin.common.tests/META-INF/MANIFEST.MF
index f7fce71..c5cd81a 100644
--- a/org.eclipse.osbp.runtime.web.vaadin.common.tests/META-INF/MANIFEST.MF
+++ b/org.eclipse.osbp.runtime.web.vaadin.common.tests/META-INF/MANIFEST.MF
@@ -7,7 +7,7 @@
org.eclipse.equinox.preferences;bundle-version="3.5.0",
org.eclipse.osbp.runtime.web.vaadin.common;bundle-version="[0.9.0,0.10.0)",
org.eclipse.osbp.runtime.common;bundle-version="[0.9.0,0.10.0)"
-Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Bundle-Vendor: Eclipse OSBP
Service-Component: OSGI-INF/contextRegistryHelper.xml
Import-Package: org.eclipse.osgi.service.datalocation;version="1.3.0",
diff --git a/org.eclipse.osbp.runtime.web.vaadin.common/.classpath b/org.eclipse.osbp.runtime.web.vaadin.common/.classpath
new file mode 100644
index 0000000..8b37caa
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.common/.classpath
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src/"/>
+ <classpathentry kind="src" path="xtend-gen/"/>
+ <classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/org.eclipse.osbp.runtime.web.vaadin.common/.project b/org.eclipse.osbp.runtime.web.vaadin.common/.project
index 71b78d9..b4eca00 100644
--- a/org.eclipse.osbp.runtime.web.vaadin.common/.project
+++ b/org.eclipse.osbp.runtime.web.vaadin.common/.project
@@ -36,11 +36,6 @@
</arguments>
</buildCommand>
<buildCommand>
- <name>com.vaadin.integration.eclipse.addonStylesBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
<name>org.sonarlint.eclipse.core.sonarlintBuilder</name>
<arguments>
</arguments>
diff --git a/org.eclipse.osbp.runtime.web.vaadin.common/.settings/com.vaadin.integration.eclipse.prefs b/org.eclipse.osbp.runtime.web.vaadin.common/.settings/com.vaadin.integration.eclipse.prefs
new file mode 100644
index 0000000..0904e44
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.common/.settings/com.vaadin.integration.eclipse.prefs
@@ -0,0 +1,2 @@
+com.vaadin.integration.eclipse.mavenLatestVersionsUpgrade=["7.7.7"]
+eclipse.preferences.version=1
diff --git a/org.eclipse.osbp.runtime.web.vaadin.common/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.runtime.web.vaadin.common/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.common/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.runtime.web.vaadin.common/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.osbp.runtime.web.vaadin.common/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..0c68a61
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.common/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/org.eclipse.osbp.runtime.web.vaadin.common/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.runtime.web.vaadin.common/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.common/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.runtime.web.vaadin.common/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.runtime.web.vaadin.common/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..19e3115
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.common/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,11 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+BuilderConfiguration.is_project_specific=true
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.emf-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.runtime.web.vaadin.common/META-INF/MANIFEST.MF b/org.eclipse.osbp.runtime.web.vaadin.common/META-INF/MANIFEST.MF
index 9604984..71d57e0 100644
--- a/org.eclipse.osbp.runtime.web.vaadin.common/META-INF/MANIFEST.MF
+++ b/org.eclipse.osbp.runtime.web.vaadin.common/META-INF/MANIFEST.MF
@@ -5,6 +5,7 @@
Bundle-Version: 0.9.0.qualifier
Bundle-ActivationPolicy: lazy
Import-Package: org.eclipse.osbp.runtime.common.dispose;version="0.9.0",
+ org.eclipse.osbp.ui.api.datamart;version="0.9.0",
org.osgi.framework;version="1.7.0",
org.osgi.service.cm;version="1.4.0",
org.osgi.service.component;version="1.2.0",
@@ -21,7 +22,9 @@
org.eclipse.osbp.runtime.web.vaadin.databinding.container,
com.vaadin.data,
com.vaadin.data.util",
- org.eclipse.osbp.runtime.web.vaadin.common.data.filter;version="0.9.0";uses:="com.vaadin.data,com.vaadin.data.util.filter",
+ org.eclipse.osbp.runtime.web.vaadin.common.data.filter;version="0.9.0";
+ uses:="com.vaadin.data,
+ com.vaadin.data.util.filter",
org.eclipse.osbp.runtime.web.vaadin.common.resource;version="0.9.0",
org.eclipse.osbp.runtime.web.vaadin.common.resource.impl;version="0.9.0",
org.eclipse.osbp.runtime.web.vaadin.common.services.filter;version="0.9.0",
@@ -29,13 +32,15 @@
org.eclipse.osbp.runtime.web.vaadin.common.shortcuts;version="0.9.0",
org.eclipse.osbp.runtime.web.vaadin.common.validator;version="0.9.0"
Bundle-Vendor: Eclipse OSBP
-Require-Bundle: com.vaadin.server;bundle-version="[7.5.7,7.7.0)",
- com.vaadin.shared;bundle-version="[7.5.7,7.7.0)",
+Require-Bundle: com.vaadin.server;bundle-version="[7.7.6,7.8.0)",
+ com.vaadin.shared;bundle-version="[7.7.6,7.8.0)",
org.eclipse.osbp.runtime.web.vaadin.databinding;bundle-version="[0.9.0,0.10.0)",
- org.eclipse.osbp.dsl.dto.lib;bundle-version="[0.9.0,0.10.0)",
- org.eclipse.xtext.xbase.lib;bundle-version="[2.7.3,2.8.0)";resolution:=optional,
org.eclipse.osbp.runtime.common;bundle-version="[0.9.0,0.10.0)",
+ org.eclipse.osbp.dsl.dto.lib;bundle-version="[0.9.0,0.10.0)",
+ org.eclipse.xtext.xbase.lib;bundle-version="[2.11.0,2.12.0)";resolution:=optional,
org.slf4j.api;bundle-version="1.7.2",
- org.apache.commons.lang3
+ org.apache.commons.lang3,
+ org.eclipse.osbp.dsl.dto.xtext;bundle-version="0.9.0",
+ org.eclipse.osbp.jpa.services;bundle-version="0.9.0"
Service-Component: OSGI-INF/org.eclipse.osbp.runtime.web.vaadin.common.resource.impl.ThemeResourceProvider.xml,
OSGI-INF/org.eclipse.osbp.runtime.web.vaadin.common.data.StatefulDelegatingDtoSearchServiceFactoryDelegate.xml
diff --git a/org.eclipse.osbp.runtime.web.vaadin.common/src/org/eclipse/osbp/runtime/web/vaadin/common/data/AbstractDeepResolvingBeanContainer.java b/org.eclipse.osbp.runtime.web.vaadin.common/src/org/eclipse/osbp/runtime/web/vaadin/common/data/AbstractDeepResolvingBeanContainer.java
index 4fc1b00..6566b8a 100644
--- a/org.eclipse.osbp.runtime.web.vaadin.common/src/org/eclipse/osbp/runtime/web/vaadin/common/data/AbstractDeepResolvingBeanContainer.java
+++ b/org.eclipse.osbp.runtime.web.vaadin.common/src/org/eclipse/osbp/runtime/web/vaadin/common/data/AbstractDeepResolvingBeanContainer.java
@@ -37,7 +37,6 @@
import com.vaadin.data.Property.ValueChangeEvent;
import com.vaadin.data.Property.ValueChangeListener;
import com.vaadin.data.Property.ValueChangeNotifier;
-import com.vaadin.data.util.AbstractInMemoryContainer;
import com.vaadin.data.util.ItemSorter;
import com.vaadin.data.util.MethodProperty.MethodException;
import com.vaadin.data.util.NestedMethodProperty;
@@ -81,10 +80,8 @@
*/
@SuppressWarnings("serial")
public abstract class AbstractDeepResolvingBeanContainer<IDTYPE, BEANTYPE>
- extends
- AbstractInMemoryContainer<IDTYPE, String, DeepResolvingBeanItem<BEANTYPE>>
- implements ILazyRefreshFilterable, SimpleFilterable, Sortable,
- ValueChangeListener, PropertySetChangeNotifier,
+ extends AbstractInMemoryContainerCustom<IDTYPE, String, DeepResolvingBeanItem<BEANTYPE>>
+ implements ILazyRefreshFilterable, SimpleFilterable, Sortable, ValueChangeListener, PropertySetChangeNotifier,
IEnhancedFilterableContainer<IDTYPE>, INestedPropertyAble<BEANTYPE> {
/**
@@ -101,9 +98,8 @@
* the generic type
* @since 6.5
*/
- public static interface BeanIdResolver<IDTYPE, BEANTYPE> extends
- Serializable {
-
+ public static interface BeanIdResolver<IDTYPE, BEANTYPE> extends Serializable {
+
/**
* Return the item identifier for a bean.
*
@@ -120,8 +116,7 @@
* The bean must have a getter for the property, and the getter must return
* an object of type IDTYPE.
*/
- protected class PropertyBasedBeanIdResolver implements
- BeanIdResolver<IDTYPE, BEANTYPE> {
+ protected class PropertyBasedBeanIdResolver implements BeanIdResolver<IDTYPE, BEANTYPE> {
/** The property id. */
private final Object propertyId;
@@ -134,27 +129,27 @@
*/
public PropertyBasedBeanIdResolver(Object propertyId) {
if (propertyId == null) {
- throw new IllegalArgumentException(
- "Property identifier must not be null");
+ throw new IllegalArgumentException("Property identifier must not be null");
}
this.propertyId = propertyId;
}
- /* (non-Javadoc)
- * @see org.eclipse.osbp.runtime.web.vaadin.common.data.AbstractDeepResolvingBeanContainer.BeanIdResolver#getIdForBean(java.lang.Object)
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osbp.runtime.web.vaadin.common.data.
+ * AbstractDeepResolvingBeanContainer.BeanIdResolver#getIdForBean(java.
+ * lang.Object)
*/
@Override
@SuppressWarnings("unchecked")
- public IDTYPE getIdForBean(BEANTYPE bean)
- throws IllegalArgumentException {
+ public IDTYPE getIdForBean(BEANTYPE bean) throws IllegalArgumentException {
VaadinPropertyDescriptor<BEANTYPE> pd = model.get(propertyId);
if (null == pd) {
- throw new IllegalStateException("Property " + propertyId
- + " not found");
+ throw new IllegalStateException("Property " + propertyId + " not found");
}
try {
- Property<IDTYPE> property = (Property<IDTYPE>) pd
- .createProperty(bean);
+ Property<IDTYPE> property = (Property<IDTYPE>) pd.createProperty(bean);
return property.getValue();
} catch (MethodException e) {
throw new IllegalArgumentException(e);
@@ -200,12 +195,11 @@
@SuppressWarnings("unchecked")
protected AbstractDeepResolvingBeanContainer(Class<? super BEANTYPE> type) {
if (type == null) {
- throw new IllegalArgumentException(
- "The bean type passed to AbstractBeanContainer must not be null");
+ throw new IllegalArgumentException("The bean type passed to AbstractBeanContainer must not be null");
}
this.type = type;
- model = DeepResolvingBeanItem
- .getPropertyDescriptors((Class<BEANTYPE>) type);
+ model = DeepResolvingBeanItem.getPropertyDescriptors((Class<BEANTYPE>) type);
+ getItemSorter().setSortProperties(this, new Object[0], new boolean[0]);
}
/*
@@ -227,8 +221,13 @@
* @return created {@link DeepResolvingBeanItem} or null if bean is null
*/
protected DeepResolvingBeanItem<BEANTYPE> createBeanItem(BEANTYPE bean) {
- return bean == null ? null : new DeepResolvingBeanItem<BEANTYPE>(bean,
- model);
+ if (bean == null) {
+ return null;
+ }
+
+ DeepResolvingBeanItem<BEANTYPE> item = new DeepResolvingBeanItem<BEANTYPE>(bean, model);
+
+ return item;
}
/**
@@ -290,8 +289,12 @@
return getUnfilteredItem(itemId);
}
- /* (non-Javadoc)
- * @see com.vaadin.data.util.AbstractInMemoryContainer#getUnfilteredItem(java.lang.Object)
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * com.vaadin.data.util.AbstractInMemoryContainer#getUnfilteredItem(java.
+ * lang.Object)
*/
@Override
protected DeepResolvingBeanItem<BEANTYPE> getUnfilteredItem(Object itemId) {
@@ -364,7 +367,17 @@
@Override
public void valueChange(ValueChangeEvent event) {
// if a property that is used in a filter is changed, refresh filtering
- filterAll();
+
+ for (Filter filter : getFilters()) {
+ for (String propertyId : getContainerPropertyIds()) {
+ if (filter.appliesToProperty(propertyId)) {
+ filterAll();
+ }
+ }
+ }
+
+
+
}
/*
@@ -375,11 +388,10 @@
* java.lang.String, boolean, boolean)
*/
@Override
- public void addContainerFilter(Object propertyId, String filterString,
- boolean ignoreCase, boolean onlyMatchPrefix) {
+ public void addContainerFilter(Object propertyId, String filterString, boolean ignoreCase,
+ boolean onlyMatchPrefix) {
try {
- addFilter(new SimpleStringFilter(propertyId, filterString,
- ignoreCase, onlyMatchPrefix));
+ addFilter(new SimpleStringFilter(propertyId, filterString, ignoreCase, onlyMatchPrefix));
} catch (UnsupportedFilterException e) {
// the filter instance created here is always valid for in-memory
// containers
@@ -419,17 +431,24 @@
}
}
- /* (non-Javadoc)
- * @see com.vaadin.data.Container.Filterable#addContainerFilter(com.vaadin.data.Container.Filter)
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * com.vaadin.data.Container.Filterable#addContainerFilter(com.vaadin.data.
+ * Container.Filter)
*/
@Override
- public void addContainerFilter(Filter filter)
- throws UnsupportedFilterException {
+ public void addContainerFilter(Filter filter) throws UnsupportedFilterException {
addFilter(filter);
}
- /* (non-Javadoc)
- * @see com.vaadin.data.Container.Filterable#removeContainerFilter(com.vaadin.data.Container.Filter)
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * com.vaadin.data.Container.Filterable#removeContainerFilter(com.vaadin.
+ * data.Container.Filter)
*/
@Override
public void removeContainerFilter(Filter filter) {
@@ -465,15 +484,14 @@
* @param propertyId
* The id of the property
*/
- @SuppressWarnings("deprecation")
private void addValueChangeListener(Item item, Object propertyId) {
Property<?> property = item.getItemProperty(propertyId);
if (property instanceof ValueChangeNotifier) {
// avoid multiple notifications for the same property if
// multiple filters are in use
ValueChangeNotifier notifier = (ValueChangeNotifier) property;
- notifier.removeListener(this);
- notifier.addListener(this);
+ notifier.removeValueChangeListener(this);
+ notifier.addValueChangeListener(this);
}
}
@@ -527,7 +545,9 @@
sortContainer(propertyId, ascending);
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see com.vaadin.data.util.AbstractInMemoryContainer#getItemSorter()
*/
@Override
@@ -535,32 +555,38 @@
return super.getItemSorter();
}
- /* (non-Javadoc)
- * @see com.vaadin.data.util.AbstractInMemoryContainer#setItemSorter(com.vaadin.data.util.ItemSorter)
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * com.vaadin.data.util.AbstractInMemoryContainer#setItemSorter(com.vaadin.
+ * data.util.ItemSorter)
*/
@Override
public void setItemSorter(ItemSorter itemSorter) {
super.setItemSorter(itemSorter);
}
- /* (non-Javadoc)
- * @see com.vaadin.data.util.AbstractInMemoryContainer#registerNewItem(int, java.lang.Object, com.vaadin.data.Item)
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.vaadin.data.util.AbstractInMemoryContainer#registerNewItem(int,
+ * java.lang.Object, com.vaadin.data.Item)
*/
@Override
- protected void registerNewItem(int position, IDTYPE itemId,
- DeepResolvingBeanItem<BEANTYPE> item) {
+ protected void registerNewItem(int position, IDTYPE itemId, DeepResolvingBeanItem<BEANTYPE> item) {
itemIdToItem.put(itemId, item);
// add listeners to be able to update filtering on property
// changes
- for (Filter filter : getFilters()) {
- for (String propertyId : getContainerPropertyIds()) {
- if (filter.appliesToProperty(propertyId)) {
- // addValueChangeListener avoids adding duplicates
- addValueChangeListener(item, propertyId);
- }
- }
+ // for (Filter filter : getFilters()) {
+ for (String propertyId : getContainerPropertyIds()) {
+ // if (filter.appliesToProperty(propertyId)) {
+ // addValueChangeListener avoids adding duplicates
+ addValueChangeListener(item, propertyId);
+ // }
}
+ // }
}
/**
@@ -589,8 +615,7 @@
* @return the deep resolving bean item
* @see com.vaadin.data.Container#addItem(Object)
*/
- protected DeepResolvingBeanItem<BEANTYPE> addItem(IDTYPE itemId,
- BEANTYPE bean) {
+ protected DeepResolvingBeanItem<BEANTYPE> addItem(IDTYPE itemId, BEANTYPE bean) {
if (!validateBean(bean)) {
return null;
}
@@ -609,13 +634,11 @@
* @return the deep resolving bean item
* @see com.vaadin.data.Container.Ordered#addItemAfter(Object, Object)
*/
- protected DeepResolvingBeanItem<BEANTYPE> addItemAfter(
- IDTYPE previousItemId, IDTYPE newItemId, BEANTYPE bean) {
+ protected DeepResolvingBeanItem<BEANTYPE> addItemAfter(IDTYPE previousItemId, IDTYPE newItemId, BEANTYPE bean) {
if (!validateBean(bean)) {
return null;
}
- return internalAddItemAfter(previousItemId, newItemId,
- createBeanItem(bean), true);
+ return internalAddItemAfter(previousItemId, newItemId, createBeanItem(bean), true);
}
/**
@@ -633,14 +656,50 @@
* @return Returns the new DeepResolvingBeanItem or null if the operation
* fails.
*/
- protected DeepResolvingBeanItem<BEANTYPE> addItemAt(int index,
- IDTYPE newItemId, BEANTYPE bean) {
+ protected DeepResolvingBeanItem<BEANTYPE> addItemAt(int index, IDTYPE newItemId, BEANTYPE bean) {
if (!validateBean(bean)) {
return null;
}
return internalAddItemAt(index, newItemId, createBeanItem(bean), true);
}
+ protected DeepResolvingBeanItem<BEANTYPE> internalAddItemAt(int index, IDTYPE newItemId,
+ DeepResolvingBeanItem<BEANTYPE> item, boolean filter) {
+ if (index < 0 || index > sizeUnfiltered()) {
+ return null;
+ } else if (index == 0) {
+ // add before any item, visible or not
+ return internalAddItemAfter(null, newItemId, item, filter);
+ } else {
+ // if index==size(), adds immediately after last visible item
+ return internalAddItemAfter(getIdByAllIndex(index - 1), newItemId, item, filter);
+ }
+ }
+
+ public IDTYPE getIdByAllIndex(int index) {
+ return getAllItemIds().get(index);
+ }
+
+ protected DeepResolvingBeanItem<BEANTYPE> internalAddItemAfter(IDTYPE previousItemId, IDTYPE newItemId,
+ DeepResolvingBeanItem<BEANTYPE> item, boolean filter) {
+ // only add if the previous item is visible
+ DeepResolvingBeanItem<BEANTYPE> newItem = null;
+ if (previousItemId == null) {
+ newItem = internalAddAt(0, newItemId, item);
+ } else if (getAllItemIds().contains(previousItemId)) {
+ newItem = internalAddAt(getAllItemIds().indexOf(previousItemId) + 1, newItemId, item);
+ }
+ if (newItem != null && filter) {
+ // TODO filter only this item, use fireItemAdded()
+ filterAll();
+ if (!isFiltered()) {
+ // TODO hack: does not detect change in filterAll() in this case
+ fireItemAdded(indexOfId(newItemId), newItemId, item);
+ }
+ }
+ return newItem;
+ }
+
/**
* Adds a bean to the container using the bean item id resolver to find its
* identifier.
@@ -663,8 +722,7 @@
}
IDTYPE itemId = resolveBeanId(bean);
if (itemId == null) {
- throw new IllegalArgumentException(
- "Resolved identifier for a bean must not be null");
+ throw new IllegalArgumentException("Resolved identifier for a bean must not be null");
}
return addItem(itemId, bean);
}
@@ -687,16 +745,14 @@
* if an identifier cannot be resolved for the bean
* @see #addItemAfter(Object, Object, Object)
*/
- protected DeepResolvingBeanItem<BEANTYPE> addBeanAfter(
- IDTYPE previousItemId, BEANTYPE bean) throws IllegalStateException,
- IllegalArgumentException {
+ protected DeepResolvingBeanItem<BEANTYPE> addBeanAfter(IDTYPE previousItemId, BEANTYPE bean)
+ throws IllegalStateException, IllegalArgumentException {
if (bean == null) {
return null;
}
IDTYPE itemId = resolveBeanId(bean);
if (itemId == null) {
- throw new IllegalArgumentException(
- "Resolved identifier for a bean must not be null");
+ throw new IllegalArgumentException("Resolved identifier for a bean must not be null");
}
return addItemAfter(previousItemId, itemId, bean);
}
@@ -725,8 +781,7 @@
}
IDTYPE itemId = resolveBeanId(bean);
if (itemId == null) {
- throw new IllegalArgumentException(
- "Resolved identifier for a bean must not be null");
+ throw new IllegalArgumentException("Resolved identifier for a bean must not be null");
}
return addItemAt(index, itemId, bean);
}
@@ -755,14 +810,12 @@
boolean modified = false;
for (BEANTYPE bean : collection) {
// TODO skipping invalid beans - should not allow them in javadoc?
- if (bean == null
- || !getBeanType().isAssignableFrom(bean.getClass())) {
+ if (bean == null || !getBeanType().isAssignableFrom(bean.getClass())) {
continue;
}
IDTYPE itemId = resolveBeanId(bean);
if (itemId == null) {
- throw new IllegalArgumentException(
- "Resolved identifier for a bean must not be null");
+ throw new IllegalArgumentException("Resolved identifier for a bean must not be null");
}
if (internalAddItemAtEnd(itemId, createBeanItem(bean), false) != null) {
@@ -791,8 +844,7 @@
*/
protected IDTYPE resolveBeanId(BEANTYPE bean) {
if (beanIdResolver == null) {
- throw new IllegalStateException(
- "Bean item identifier resolver is required.");
+ throw new IllegalStateException("Bean item identifier resolver is required.");
}
return beanIdResolver.getIdForBean(bean);
}
@@ -810,8 +862,7 @@
* @param beanIdResolver
* to use or null to disable automatic id resolution
*/
- protected void setBeanIdResolver(
- BeanIdResolver<IDTYPE, BEANTYPE> beanIdResolver) {
+ protected void setBeanIdResolver(BeanIdResolver<IDTYPE, BEANTYPE> beanIdResolver) {
this.beanIdResolver = beanIdResolver;
}
@@ -831,8 +882,7 @@
* property identifier, which must map to a getter in BEANTYPE
* @return created resolver
*/
- protected BeanIdResolver<IDTYPE, BEANTYPE> createBeanPropertyResolver(
- Object propertyId) {
+ protected BeanIdResolver<IDTYPE, BEANTYPE> createBeanPropertyResolver(Object propertyId) {
return new PropertyBasedBeanIdResolver(propertyId);
}
@@ -849,12 +899,15 @@
addPropertySetChangeListener(listener);
}
- /* (non-Javadoc)
- * @see com.vaadin.data.util.AbstractContainer#addPropertySetChangeListener(com.vaadin.data.Container.PropertySetChangeListener)
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * com.vaadin.data.util.AbstractContainer#addPropertySetChangeListener(com.
+ * vaadin.data.Container.PropertySetChangeListener)
*/
@Override
- public void addPropertySetChangeListener(
- Container.PropertySetChangeListener listener) {
+ public void addPropertySetChangeListener(Container.PropertySetChangeListener listener) {
super.addPropertySetChangeListener(listener);
}
@@ -872,21 +925,28 @@
removePropertySetChangeListener(listener);
}
- /* (non-Javadoc)
- * @see com.vaadin.data.util.AbstractContainer#removePropertySetChangeListener(com.vaadin.data.Container.PropertySetChangeListener)
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * com.vaadin.data.util.AbstractContainer#removePropertySetChangeListener(
+ * com.vaadin.data.Container.PropertySetChangeListener)
*/
@Override
- public void removePropertySetChangeListener(
- Container.PropertySetChangeListener listener) {
+ public void removePropertySetChangeListener(Container.PropertySetChangeListener listener) {
super.removePropertySetChangeListener(listener);
}
- /* (non-Javadoc)
- * @see com.vaadin.data.util.AbstractInMemoryContainer#addContainerProperty(java.lang.Object, java.lang.Class, java.lang.Object)
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * com.vaadin.data.util.AbstractInMemoryContainer#addContainerProperty(java.
+ * lang.Object, java.lang.Class, java.lang.Object)
*/
@Override
- public boolean addContainerProperty(Object propertyId, Class<?> type,
- Object defaultValue) throws UnsupportedOperationException {
+ public boolean addContainerProperty(Object propertyId, Class<?> type, Object defaultValue)
+ throws UnsupportedOperationException {
throw new UnsupportedOperationException(
"Use addNestedContainerProperty(String) to add container properties to a "
+ getClass().getSimpleName());
@@ -916,8 +976,7 @@
model.put(propertyId, propertyDescriptor);
for (DeepResolvingBeanItem<BEANTYPE> item : itemIdToItem.values()) {
- item.addItemProperty(propertyId,
- propertyDescriptor.createProperty(item.getBean()));
+ item.addItemProperty(propertyId, propertyDescriptor.createProperty(item.getBean()));
}
// Sends a change event
@@ -926,13 +985,15 @@
return true;
}
- /* (non-Javadoc)
- * @see org.eclipse.osbp.runtime.web.vaadin.common.data.INestedPropertyAble#addNestedContainerProperty(java.lang.String)
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osbp.runtime.web.vaadin.common.data.INestedPropertyAble#
+ * addNestedContainerProperty(java.lang.String)
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
public boolean addNestedContainerProperty(String propertyId) {
- return addContainerProperty(propertyId, new NestedPropertyDescriptor(
- propertyId, type));
+ return addContainerProperty(propertyId, new NestedPropertyDescriptor(propertyId, type));
}
/**
@@ -956,13 +1017,12 @@
.getPropertyDescriptors((Class<Object>) propertyType);
for (String subPropertyId : pds.keySet()) {
String qualifiedPropertyId = propertyId + "." + subPropertyId;
- NestedPropertyDescriptor<BEANTYPE> pd = new NestedPropertyDescriptor<BEANTYPE>(
- qualifiedPropertyId, (Class<BEANTYPE>) type);
+ NestedPropertyDescriptor<BEANTYPE> pd = new NestedPropertyDescriptor<BEANTYPE>(qualifiedPropertyId,
+ (Class<BEANTYPE>) type);
model.put(qualifiedPropertyId, pd);
model.remove(propertyId);
for (DeepResolvingBeanItem<BEANTYPE> item : itemIdToItem.values()) {
- item.addItemProperty(propertyId,
- pd.createProperty(item.getBean()));
+ item.addItemProperty(propertyId, pd.createProperty(item.getBean()));
item.removeItemProperty(propertyId);
}
}
@@ -971,12 +1031,15 @@
fireContainerPropertySetChange();
}
- /* (non-Javadoc)
- * @see com.vaadin.data.util.AbstractInMemoryContainer#removeContainerProperty(java.lang.Object)
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * com.vaadin.data.util.AbstractInMemoryContainer#removeContainerProperty(
+ * java.lang.Object)
*/
@Override
- public boolean removeContainerProperty(Object propertyId)
- throws UnsupportedOperationException {
+ public boolean removeContainerProperty(Object propertyId) throws UnsupportedOperationException {
// Fails if the Property is not present
if (!model.containsKey(propertyId)) {
return false;
@@ -996,16 +1059,22 @@
return true;
}
- /* (non-Javadoc)
- * @see org.eclipse.osbp.runtime.web.vaadin.databinding.container.IEnhancedFilterableContainer#getUnfilteredItemIds()
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osbp.runtime.web.vaadin.databinding.container.
+ * IEnhancedFilterableContainer#getUnfilteredItemIds()
*/
@Override
public List<IDTYPE> getUnfilteredItemIds() {
return getAllItemIds();
}
- /* (non-Javadoc)
- * @see org.eclipse.osbp.runtime.web.vaadin.databinding.container.IEnhancedFilterableContainer#sizeUnfiltered()
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osbp.runtime.web.vaadin.databinding.container.
+ * IEnhancedFilterableContainer#sizeUnfiltered()
*/
@Override
public int sizeUnfiltered() {
diff --git a/org.eclipse.osbp.runtime.web.vaadin.common/src/org/eclipse/osbp/runtime/web/vaadin/common/data/AbstractInMemoryContainerCustom.java b/org.eclipse.osbp.runtime.web.vaadin.common/src/org/eclipse/osbp/runtime/web/vaadin/common/data/AbstractInMemoryContainerCustom.java
new file mode 100644
index 0000000..26e8473
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.common/src/org/eclipse/osbp/runtime/web/vaadin/common/data/AbstractInMemoryContainerCustom.java
@@ -0,0 +1,1169 @@
+/*
+ * Copyright 2000-2014 Vaadin Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package org.eclipse.osbp.runtime.web.vaadin.common.data;
+
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.EventObject;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+
+import com.vaadin.data.Container;
+import com.vaadin.data.Container.ItemSetChangeNotifier;
+import com.vaadin.data.Item;
+import com.vaadin.data.util.AbstractContainer;
+import com.vaadin.data.util.DefaultItemSorter;
+import com.vaadin.data.util.ItemSorter;
+import com.vaadin.data.util.ListSet;
+import com.vaadin.data.util.filter.SimpleStringFilter;
+import com.vaadin.data.util.filter.UnsupportedFilterException;
+
+/**
+ * Abstract {@link Container} class that handles common functionality for
+ * in-memory containers. Concrete in-memory container classes can either inherit
+ * this class, inherit {@link AbstractContainer}, or implement the
+ * {@link Container} interface directly.
+ *
+ * Adding and removing items (if desired) must be implemented in subclasses by
+ * overriding the appropriate add*Item() and remove*Item() and removeAllItems()
+ * methods, calling the corresponding
+ * {@link #internalAddItemAfter(Object, Object, Item)},
+ * {@link #internalAddItemAt(int, Object, Item)},
+ * {@link #internalAddItemAtEnd(Object, Item, boolean)},
+ * {@link #internalRemoveItem(Object)} and {@link #internalRemoveAllItems()}
+ * methods.
+ *
+ * By default, adding and removing container properties is not supported, and
+ * subclasses need to implement {@link #getContainerPropertyIds()}. Optionally,
+ * subclasses can override {@link #addContainerProperty(Object, Class, Object)}
+ * and {@link #removeContainerProperty(Object)} to implement them.
+ *
+ * Features:
+ * <ul>
+ * <li>{@link Container.Ordered}
+ * <li>{@link Container.Indexed}
+ * <li>{@link Filterable} and {@link SimpleFilterable} (internal implementation,
+ * does not implement the interface directly)
+ * <li>{@link Sortable} (internal implementation, does not implement the
+ * interface directly)
+ * </ul>
+ *
+ * To implement {@link Sortable}, subclasses need to implement
+ * {@link #getSortablePropertyIds()} and call the superclass method
+ * {@link #sortContainer(Object[], boolean[])} in the method
+ * <code>sort(Object[], boolean[])</code>.
+ *
+ * To implement {@link Filterable}, subclasses need to implement the methods
+ * {@link Filterable#addContainerFilter(com.vaadin.data.Container.Filter)}
+ * (calling {@link #addFilter(Filter)}),
+ * {@link Filterable#removeAllContainerFilters()} (calling
+ * {@link #removeAllFilters()}) and
+ * {@link Filterable#removeContainerFilter(com.vaadin.data.Container.Filter)}
+ * (calling {@link #removeFilter(com.vaadin.data.Container.Filter)}).
+ *
+ * To implement {@link SimpleFilterable}, subclasses also need to implement the
+ * methods
+ * {@link SimpleFilterable#addContainerFilter(Object, String, boolean, boolean)}
+ * and {@link SimpleFilterable#removeContainerFilters(Object)} calling
+ * {@link #addFilter(com.vaadin.data.Container.Filter)} and
+ * {@link #removeFilters(Object)} respectively.
+ *
+ * @param <ITEMIDTYPE>
+ * the class of item identifiers in the container, use Object if can
+ * be any class
+ * @param <PROPERTYIDCLASS>
+ * the class of property identifiers for the items in the container,
+ * use Object if can be any class
+ * @param <ITEMCLASS>
+ * the (base) class of the Item instances in the container, use
+ * {@link Item} if unknown
+ *
+ * @since 6.6
+ */
+public abstract class AbstractInMemoryContainerCustom<ITEMIDTYPE, PROPERTYIDCLASS, ITEMCLASS extends Item>
+ extends AbstractContainer
+ implements ItemSetChangeNotifier, Container.Indexed {
+
+ /**
+ * An ordered {@link List} of all item identifiers in the container,
+ * including those that have been filtered out.
+ *
+ * Must not be null.
+ */
+ private List<ITEMIDTYPE> allItemIds;
+
+ /**
+ * An ordered {@link List} of item identifiers in the container after
+ * filtering, excluding those that have been filtered out.
+ *
+ * This is what the external API of the {@link Container} interface and its
+ * subinterfaces shows (e.g. {@link #size()}, {@link #nextItemId(Object)}).
+ *
+ * If null, the full item id list is used instead.
+ */
+ private List<ITEMIDTYPE> filteredItemIds;
+
+ /**
+ * Filters that are applied to the container to limit the items visible in
+ * it
+ */
+ private Set<Filter> filters = new HashSet<Filter>();
+
+ /**
+ * The item sorter which is used for sorting the container.
+ */
+ private ItemSorter itemSorter = new DefaultItemSorter();
+
+ // Constructors
+
+ /**
+ * Constructor for an abstract in-memory container.
+ */
+ protected AbstractInMemoryContainerCustom() {
+ setAllItemIds(new ListSet<ITEMIDTYPE>());
+ }
+
+ // Container interface methods with more specific return class
+
+ // default implementation, can be overridden
+ @Override
+ public ITEMCLASS getItem(Object itemId) {
+ if (containsId(itemId)) {
+ return getUnfilteredItem(itemId);
+ } else {
+ return null;
+ }
+ }
+
+ private static abstract class BaseItemAddOrRemoveEvent extends EventObject
+ implements Serializable {
+ protected Object itemId;
+ protected int index;
+ protected int count;
+
+ public BaseItemAddOrRemoveEvent(Container source, Object itemId,
+ int index, int count) {
+ super(source);
+ this.itemId = itemId;
+ this.index = index;
+ this.count = count;
+ }
+
+ public Container getContainer() {
+ return (Container) getSource();
+ }
+
+ public Object getFirstItemId() {
+ return itemId;
+ }
+
+ public int getFirstIndex() {
+ return index;
+ }
+
+ public int getAffectedItemsCount() {
+ return count;
+ }
+ }
+
+ /**
+ * An <code>Event</code> object specifying information about the added
+ * items.
+ *
+ * <p>
+ * This class provides information about the first added item and the number
+ * of added items.
+ * </p>
+ *
+ * @since 7.4
+ */
+ protected static class BaseItemAddEvent extends BaseItemAddOrRemoveEvent
+ implements Container.Indexed.ItemAddEvent {
+
+ public BaseItemAddEvent(Container source, Object itemId, int index,
+ int count) {
+ super(source, itemId, index, count);
+ }
+
+ @Override
+ public int getAddedItemsCount() {
+ return getAffectedItemsCount();
+ }
+ }
+
+ /**
+ * An <code>Event</code> object specifying information about the removed
+ * items.
+ *
+ * <p>
+ * This class provides information about the first removed item and the
+ * number of removed items.
+ * </p>
+ *
+ * @since 7.4
+ */
+ protected static class BaseItemRemoveEvent extends BaseItemAddOrRemoveEvent
+ implements Container.Indexed.ItemRemoveEvent {
+
+ public BaseItemRemoveEvent(Container source, Object itemId, int index,
+ int count) {
+ super(source, itemId, index, count);
+ }
+
+ @Override
+ public int getRemovedItemsCount() {
+ return getAffectedItemsCount();
+ }
+ }
+
+ /**
+ * Get an item even if filtered out.
+ *
+ * For internal use only.
+ *
+ * @param itemId
+ * @return
+ */
+ protected abstract ITEMCLASS getUnfilteredItem(Object itemId);
+
+ // cannot override getContainerPropertyIds() and getItemIds(): if subclass
+ // uses Object as ITEMIDCLASS or PROPERTYIDCLASS, Collection<Object> cannot
+ // be cast to Collection<MyInterface>
+
+ // public abstract Collection<PROPERTYIDCLASS> getContainerPropertyIds();
+ // public abstract Collection<ITEMIDCLASS> getItemIds();
+
+ // Container interface method implementations
+
+ @Override
+ public int size() {
+ return getVisibleItemIds().size();
+ }
+
+ @Override
+ public boolean containsId(Object itemId) {
+ // only look at visible items after filtering
+ if (itemId == null) {
+ return false;
+ } else {
+ return getVisibleItemIds().contains(itemId);
+ }
+ }
+
+ @Override
+ public List<?> getItemIds() {
+ return Collections.unmodifiableList(getVisibleItemIds());
+ }
+
+ // Container.Ordered
+
+ @Override
+ public ITEMIDTYPE nextItemId(Object itemId) {
+ int index = indexOfId(itemId);
+ if (index >= 0 && index < size() - 1) {
+ return getIdByIndex(index + 1);
+ } else {
+ // out of bounds
+ return null;
+ }
+ }
+
+ @Override
+ public ITEMIDTYPE prevItemId(Object itemId) {
+ int index = indexOfId(itemId);
+ if (index > 0) {
+ return getIdByIndex(index - 1);
+ } else {
+ // out of bounds
+ return null;
+ }
+ }
+
+ @Override
+ public ITEMIDTYPE firstItemId() {
+ if (size() > 0) {
+ return getIdByIndex(0);
+ } else {
+ return null;
+ }
+ }
+
+ @Override
+ public ITEMIDTYPE lastItemId() {
+ if (size() > 0) {
+ return getIdByIndex(size() - 1);
+ } else {
+ return null;
+ }
+ }
+
+ @Override
+ public boolean isFirstId(Object itemId) {
+ if (itemId == null) {
+ return false;
+ }
+ return itemId.equals(firstItemId());
+ }
+
+ @Override
+ public boolean isLastId(Object itemId) {
+ if (itemId == null) {
+ return false;
+ }
+ return itemId.equals(lastItemId());
+ }
+
+ // Container.Indexed
+
+ @Override
+ public ITEMIDTYPE getIdByIndex(int index) {
+ return getVisibleItemIds().get(index);
+ }
+
+ @Override
+ public List<ITEMIDTYPE> getItemIds(int startIndex, int numberOfIds) {
+ if (startIndex < 0) {
+ throw new IndexOutOfBoundsException(
+ "Start index cannot be negative! startIndex=" + startIndex);
+ }
+
+ if (startIndex > getVisibleItemIds().size()) {
+ throw new IndexOutOfBoundsException(
+ "Start index exceeds container size! startIndex="
+ + startIndex + " containerLastItemIndex="
+ + (getVisibleItemIds().size() - 1));
+ }
+
+ if (numberOfIds < 1) {
+ if (numberOfIds == 0) {
+ return Collections.emptyList();
+ }
+
+ throw new IllegalArgumentException(
+ "Cannot get negative amount of items! numberOfItems="
+ + numberOfIds);
+ }
+
+ int endIndex = startIndex + numberOfIds;
+
+ if (endIndex > getVisibleItemIds().size()) {
+ endIndex = getVisibleItemIds().size();
+ }
+
+ return Collections.unmodifiableList(
+ getVisibleItemIds().subList(startIndex, endIndex));
+
+ }
+
+ @Override
+ public int indexOfId(Object itemId) {
+ return getVisibleItemIds().indexOf(itemId);
+ }
+
+ // methods that are unsupported by default, override to support
+
+ @Override
+ public Object addItemAt(int index) throws UnsupportedOperationException {
+ throw new UnsupportedOperationException(
+ "Adding items not supported. Override the relevant addItem*() methods if required as specified in AbstractInMemoryContainer javadoc.");
+ }
+
+ @Override
+ public Item addItemAt(int index, Object newItemId)
+ throws UnsupportedOperationException {
+ throw new UnsupportedOperationException(
+ "Adding items not supported. Override the relevant addItem*() methods if required as specified in AbstractInMemoryContainer javadoc.");
+ }
+
+ @Override
+ public Object addItemAfter(Object previousItemId)
+ throws UnsupportedOperationException {
+ throw new UnsupportedOperationException(
+ "Adding items not supported. Override the relevant addItem*() methods if required as specified in AbstractInMemoryContainer javadoc.");
+ }
+
+ @Override
+ public Item addItemAfter(Object previousItemId, Object newItemId)
+ throws UnsupportedOperationException {
+ throw new UnsupportedOperationException(
+ "Adding items not supported. Override the relevant addItem*() methods if required as specified in AbstractInMemoryContainer javadoc.");
+ }
+
+ @Override
+ public Item addItem(Object itemId) throws UnsupportedOperationException {
+ throw new UnsupportedOperationException(
+ "Adding items not supported. Override the relevant addItem*() methods if required as specified in AbstractInMemoryContainer javadoc.");
+ }
+
+ @Override
+ public Object addItem() throws UnsupportedOperationException {
+ throw new UnsupportedOperationException(
+ "Adding items not supported. Override the relevant addItem*() methods if required as specified in AbstractInMemoryContainer javadoc.");
+ }
+
+ @Override
+ public boolean removeItem(Object itemId)
+ throws UnsupportedOperationException {
+ throw new UnsupportedOperationException(
+ "Removing items not supported. Override the removeItem() method if required as specified in AbstractInMemoryContainer javadoc.");
+ }
+
+ @Override
+ public boolean removeAllItems() throws UnsupportedOperationException {
+ throw new UnsupportedOperationException(
+ "Removing items not supported. Override the removeAllItems() method if required as specified in AbstractInMemoryContainer javadoc.");
+ }
+
+ @Override
+ public boolean addContainerProperty(Object propertyId, Class<?> type,
+ Object defaultValue) throws UnsupportedOperationException {
+ throw new UnsupportedOperationException(
+ "Adding container properties not supported. Override the addContainerProperty() method if required.");
+ }
+
+ @Override
+ public boolean removeContainerProperty(Object propertyId)
+ throws UnsupportedOperationException {
+ throw new UnsupportedOperationException(
+ "Removing container properties not supported. Override the addContainerProperty() method if required.");
+ }
+
+ // ItemSetChangeNotifier
+ /**
+ * @deprecated As of 7.0, replaced by
+ * {@link #addItemSetChangeListener(com.vaadin.data.Container.ItemSetChangeListener)}
+ **/
+ @Deprecated
+ @Override
+ public void addListener(Container.ItemSetChangeListener listener) {
+ addItemSetChangeListener(listener);
+ }
+
+ @Override
+ public void addItemSetChangeListener(
+ Container.ItemSetChangeListener listener) {
+ super.addItemSetChangeListener(listener);
+ }
+
+ @Override
+ public void removeItemSetChangeListener(
+ Container.ItemSetChangeListener listener) {
+ super.removeItemSetChangeListener(listener);
+ }
+
+ /**
+ * @deprecated As of 7.0, replaced by
+ * {@link #removeItemSetChangeListener(com.vaadin.data.Container.ItemSetChangeListener)}
+ **/
+ @Deprecated
+ @Override
+ public void removeListener(Container.ItemSetChangeListener listener) {
+ removeItemSetChangeListener(listener);
+ }
+
+ // internal methods
+
+ // Filtering support
+
+ /**
+ * Filter the view to recreate the visible item list from the unfiltered
+ * items, and send a notification if the set of visible items changed in any
+ * way.
+ */
+ protected void filterAll() {
+ if (doFilterContainer(!getFilters().isEmpty())) {
+ fireItemSetChange();
+ }
+ }
+
+ /**
+ * Filters the data in the container and updates internal data structures.
+ * This method should reset any internal data structures and then repopulate
+ * them so {@link #getItemIds()} and other methods only return the filtered
+ * items.
+ *
+ * @param hasFilters
+ * true if filters has been set for the container, false
+ * otherwise
+ * @return true if the item set has changed as a result of the filtering
+ */
+ protected boolean doFilterContainer(boolean hasFilters) {
+ if (!hasFilters) {
+ boolean changed = getAllItemIds().size() != getVisibleItemIds()
+ .size();
+ setFilteredItemIds(null);
+ return changed;
+ }
+
+ // Reset filtered list
+ List<ITEMIDTYPE> originalFilteredItemIds = getFilteredItemIds();
+ boolean wasUnfiltered = false;
+ if (originalFilteredItemIds == null) {
+ originalFilteredItemIds = Collections.emptyList();
+ wasUnfiltered = true;
+ }
+ setFilteredItemIds(new ListSet<ITEMIDTYPE>());
+
+ // Filter
+ boolean equal = true;
+ Iterator<ITEMIDTYPE> origIt = originalFilteredItemIds.iterator();
+ for (final Iterator<ITEMIDTYPE> i = getAllItemIds().iterator(); i
+ .hasNext();) {
+ final ITEMIDTYPE id = i.next();
+ if (passesFilters(id)) {
+ // filtered list comes from the full list, can use ==
+ equal = equal && origIt.hasNext() && origIt.next() == id;
+ getFilteredItemIds().add(id);
+ }
+ }
+
+ return (wasUnfiltered && !getAllItemIds().isEmpty()) || !equal
+ || origIt.hasNext();
+ }
+
+ /**
+ * Checks if the given itemId passes the filters set for the container. The
+ * caller should make sure the itemId exists in the container. For
+ * non-existing itemIds the behavior is undefined.
+ *
+ * @param itemId
+ * An itemId that exists in the container.
+ * @return true if the itemId passes all filters or no filters are set,
+ * false otherwise.
+ */
+ protected boolean passesFilters(Object itemId) {
+ ITEMCLASS item = getUnfilteredItem(itemId);
+ if (getFilters().isEmpty()) {
+ return true;
+ }
+ final Iterator<Filter> i = getFilters().iterator();
+ while (i.hasNext()) {
+ final Filter f = i.next();
+ if (!f.passesFilter(itemId, item)) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Adds a container filter and re-filter the view.
+ *
+ * The filter must implement Filter and its sub-filters (if any) must also
+ * be in-memory filterable.
+ *
+ * This can be used to implement
+ * {@link Filterable#addContainerFilter(com.vaadin.data.Container.Filter)}
+ * and optionally also
+ * {@link SimpleFilterable#addContainerFilter(Object, String, boolean, boolean)}
+ * (with {@link SimpleStringFilter}).
+ *
+ * Note that in some cases, incompatible filters cannot be detected when
+ * added and an {@link UnsupportedFilterException} may occur when performing
+ * filtering.
+ *
+ * @throws UnsupportedFilterException
+ * if the filter is detected as not supported by the container
+ */
+ protected void addFilter(Filter filter) throws UnsupportedFilterException {
+ getFilters().add(filter);
+ filterAll();
+ }
+
+ /**
+ * Returns true if any filters have been applied to the container.
+ *
+ * @return true if the container has filters applied, false otherwise
+ * @since 7.1
+ */
+ protected boolean hasContainerFilters() {
+ return !getContainerFilters().isEmpty();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.vaadin.data.Container.Filterable#getContainerFilters()
+ */
+ protected Collection<Filter> getContainerFilters() {
+ return Collections.unmodifiableCollection(filters);
+ }
+
+ /**
+ * Remove a specific container filter and re-filter the view (if necessary).
+ *
+ * This can be used to implement
+ * {@link Filterable#removeContainerFilter(com.vaadin.data.Container.Filter)}
+ * .
+ */
+ protected void removeFilter(Filter filter) {
+ for (Iterator<Filter> iterator = getFilters().iterator(); iterator
+ .hasNext();) {
+ Filter f = iterator.next();
+ if (f.equals(filter)) {
+ iterator.remove();
+ filterAll();
+ return;
+ }
+ }
+ }
+
+ /**
+ * Remove all container filters for all properties and re-filter the view.
+ *
+ * This can be used to implement
+ * {@link Filterable#removeAllContainerFilters()}.
+ */
+ protected void removeAllFilters() {
+ if (getFilters().isEmpty()) {
+ return;
+ }
+ getFilters().clear();
+ filterAll();
+ }
+
+ /**
+ * Checks if there is a filter that applies to a given property.
+ *
+ * @param propertyId
+ * @return true if there is an active filter for the property
+ */
+ protected boolean isPropertyFiltered(Object propertyId) {
+ if (getFilters().isEmpty() || propertyId == null) {
+ return false;
+ }
+ final Iterator<Filter> i = getFilters().iterator();
+ while (i.hasNext()) {
+ final Filter f = i.next();
+ if (f.appliesToProperty(propertyId)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Remove all container filters for a given property identifier and
+ * re-filter the view. This also removes filters applying to multiple
+ * properties including the one identified by propertyId.
+ *
+ * This can be used to implement
+ * {@link Filterable#removeContainerFilters(Object)}.
+ *
+ * @param propertyId
+ * @return Collection<Filter> removed filters
+ */
+ protected Collection<Filter> removeFilters(Object propertyId) {
+ if (getFilters().isEmpty() || propertyId == null) {
+ return Collections.emptyList();
+ }
+ List<Filter> removedFilters = new LinkedList<Filter>();
+ for (Iterator<Filter> iterator = getFilters().iterator(); iterator
+ .hasNext();) {
+ Filter f = iterator.next();
+ if (f.appliesToProperty(propertyId)) {
+ removedFilters.add(f);
+ iterator.remove();
+ }
+ }
+ if (!removedFilters.isEmpty()) {
+ filterAll();
+ return removedFilters;
+ }
+ return Collections.emptyList();
+ }
+
+ // sorting
+
+ /**
+ * Returns the ItemSorter used for comparing items in a sort. See
+ * {@link #setItemSorter(ItemSorter)} for more information.
+ *
+ * @return The ItemSorter used for comparing two items in a sort.
+ */
+ protected ItemSorter getItemSorter() {
+ return itemSorter;
+ }
+
+ /**
+ * Sets the ItemSorter used for comparing items in a sort. The
+ * {@link ItemSorter#compare(Object, Object)} method is called with item ids
+ * to perform the sorting. A default ItemSorter is used if this is not
+ * explicitly set.
+ *
+ * @param itemSorter
+ * The ItemSorter used for comparing two items in a sort (not
+ * null).
+ */
+ protected void setItemSorter(ItemSorter itemSorter) {
+ this.itemSorter = itemSorter;
+ }
+
+ /**
+ * Sort base implementation to be used to implement {@link Sortable}.
+ *
+ * Subclasses should call this from a public
+ * {@link #sort(Object[], boolean[])} method when implementing Sortable.
+ *
+ * @see com.vaadin.data.Container.Sortable#sort(java.lang.Object[],
+ * boolean[])
+ */
+ protected void sortContainer(Object[] propertyId, boolean[] ascending) {
+ if (!(this instanceof Sortable)) {
+ throw new UnsupportedOperationException(
+ "Cannot sort a Container that does not implement Sortable");
+ }
+
+ // Set up the item sorter for the sort operation
+ getItemSorter().setSortProperties((Sortable) this, propertyId,
+ ascending);
+
+ // Perform the actual sort
+ doSort();
+
+ // Post sort updates
+ if (isFiltered()) {
+ filterAll();
+ } else {
+ fireItemSetChange();
+ }
+
+ }
+
+ /**
+ * Perform the sorting of the data structures in the container. This is
+ * invoked when the <code>itemSorter</code> has been prepared for the sort
+ * operation. Typically this method calls
+ * <code>Collections.sort(aCollection, getItemSorter())</code> on all arrays
+ * (containing item ids) that need to be sorted.
+ *
+ */
+ protected void doSort() {
+ Collections.sort(getAllItemIds(), getItemSorter());
+ }
+
+ /**
+ * Returns the sortable property identifiers for the container. Can be used
+ * to implement {@link Sortable#getSortableContainerPropertyIds()}.
+ */
+ protected Collection<?> getSortablePropertyIds() {
+ LinkedList<Object> sortables = new LinkedList<Object>();
+ for (Object propertyId : getContainerPropertyIds()) {
+ Class<?> propertyType = getType(propertyId);
+ if (Comparable.class.isAssignableFrom(propertyType)
+ || propertyType.isPrimitive()) {
+ sortables.add(propertyId);
+ }
+ }
+ return sortables;
+ }
+
+ // removing items
+
+ /**
+ * Removes all items from the internal data structures of this class. This
+ * can be used to implement {@link #removeAllItems()} in subclasses.
+ *
+ * No notification is sent, the caller has to fire a suitable item set
+ * change notification.
+ */
+ protected void internalRemoveAllItems() {
+ // Removes all Items
+ getAllItemIds().clear();
+ if (isFiltered()) {
+ getFilteredItemIds().clear();
+ }
+ }
+
+ /**
+ * Removes a single item from the internal data structures of this class.
+ * This can be used to implement {@link #removeItem(Object)} in subclasses.
+ *
+ * No notification is sent, the caller has to fire a suitable item set
+ * change notification.
+ *
+ * @param itemId
+ * the identifier of the item to remove
+ * @return true if an item was successfully removed, false if failed to
+ * remove or no such item
+ */
+ protected boolean internalRemoveItem(Object itemId) {
+ if (itemId == null) {
+ return false;
+ }
+
+ boolean result = getAllItemIds().remove(itemId);
+ if (result && isFiltered()) {
+ getFilteredItemIds().remove(itemId);
+ }
+
+ return result;
+ }
+
+ // adding items
+
+ /**
+ * Adds the bean to all internal data structures at the given position.
+ * Fails if an item with itemId is already in the container. Returns a the
+ * item if it was added successfully, null otherwise.
+ *
+ * <p>
+ * Caller should initiate filtering after calling this method.
+ * </p>
+ *
+ * For internal use only - subclasses should use
+ * {@link #internalAddItemAtEnd(Object, Item, boolean)},
+ * {@link #internalAddItemAt(int, Object, Item, boolean)} and
+ * {@link #internalAddItemAfter(Object, Object, Item, boolean)} instead.
+ *
+ * @param position
+ * The position at which the item should be inserted in the
+ * unfiltered collection of items
+ * @param itemId
+ * The item identifier for the item to insert
+ * @param item
+ * The item to insert
+ *
+ * @return ITEMCLASS if the item was added successfully, null otherwise
+ */
+ protected ITEMCLASS internalAddAt(int position, ITEMIDTYPE itemId,
+ ITEMCLASS item) {
+ if (position < 0 || position > getAllItemIds().size() || itemId == null
+ || item == null) {
+ return null;
+ }
+ // Make sure that the item has not been added previously
+ if (getAllItemIds().contains(itemId)) {
+ return null;
+ }
+
+ // "filteredList" will be updated in filterAll() which should be invoked
+ // by the caller after calling this method.
+ getAllItemIds().add(position, itemId);
+ registerNewItem(position, itemId, item);
+
+ return item;
+ }
+
+ /**
+ * Add an item at the end of the container, and perform filtering if
+ * necessary. An event is fired if the filtered view changes.
+ *
+ * @param newItemId
+ * @param item
+ * new item to add
+ * @param filter
+ * true to perform filtering and send event after adding the
+ * item, false to skip these operations for batch inserts - if
+ * false, caller needs to make sure these operations are
+ * performed at the end of the batch
+ * @return item added or null if no item was added
+ */
+ protected ITEMCLASS internalAddItemAtEnd(ITEMIDTYPE newItemId,
+ ITEMCLASS item, boolean filter) {
+ ITEMCLASS newItem = internalAddAt(getAllItemIds().size(), newItemId,
+ item);
+ if (newItem != null && filter) {
+ // TODO filter only this item, use fireItemAdded()
+ filterAll();
+ if (!isFiltered()) {
+ // TODO hack: does not detect change in filterAll() in this case
+ fireItemAdded(indexOfId(newItemId), newItemId, item);
+ }
+ }
+ return newItem;
+ }
+
+ /**
+ * Add an item after a given (visible) item, and perform filtering. An event
+ * is fired if the filtered view changes.
+ *
+ * The new item is added at the beginning if previousItemId is null.
+ *
+ * @param previousItemId
+ * item id of a visible item after which to add the new item, or
+ * null to add at the beginning
+ * @param newItemId
+ * @param item
+ * new item to add
+ * @param filter
+ * true to perform filtering and send event after adding the
+ * item, false to skip these operations for batch inserts - if
+ * false, caller needs to make sure these operations are
+ * performed at the end of the batch
+ * @return item added or null if no item was added
+ */
+ protected ITEMCLASS internalAddItemAfter(ITEMIDTYPE previousItemId,
+ ITEMIDTYPE newItemId, ITEMCLASS item, boolean filter) {
+ // only add if the previous item is visible
+ ITEMCLASS newItem = null;
+ if (previousItemId == null) {
+ newItem = internalAddAt(0, newItemId, item);
+ } else if (containsId(previousItemId)) {
+ newItem = internalAddAt(getAllItemIds().indexOf(previousItemId) + 1,
+ newItemId, item);
+ }
+ if (newItem != null && filter) {
+ // TODO filter only this item, use fireItemAdded()
+ filterAll();
+ if (!isFiltered()) {
+ // TODO hack: does not detect change in filterAll() in this case
+ fireItemAdded(indexOfId(newItemId), newItemId, item);
+ }
+ }
+ return newItem;
+ }
+
+ /**
+ * Add an item at a given (visible after filtering) item index, and perform
+ * filtering. An event is fired if the filtered view changes.
+ *
+ * @param index
+ * position where to add the item (visible/view index)
+ * @param newItemId
+ * @param item
+ * new item to add
+ * @param filter
+ * true to perform filtering and send event after adding the
+ * item, false to skip these operations for batch inserts - if
+ * false, caller needs to make sure these operations are
+ * performed at the end of the batch
+ * @return item added or null if no item was added
+ */
+ protected ITEMCLASS internalAddItemAt(int index, ITEMIDTYPE newItemId,
+ ITEMCLASS item, boolean filter) {
+ if (index < 0 || index > size()) {
+ return null;
+ } else if (index == 0) {
+ // add before any item, visible or not
+ return internalAddItemAfter(null, newItemId, item, filter);
+ } else {
+ // if index==size(), adds immediately after last visible item
+ return internalAddItemAfter(getIdByIndex(index - 1), newItemId,
+ item, filter);
+ }
+ }
+
+ /**
+ * Registers a new item as having been added to the container. This can
+ * involve storing the item or any relevant information about it in internal
+ * container-specific collections if necessary, as well as registering
+ * listeners etc.
+ *
+ * The full identifier list in {@link AbstractInMemoryContainer} has already
+ * been updated to reflect the new item when this method is called.
+ *
+ * @param position
+ * @param itemId
+ * @param item
+ */
+ protected void registerNewItem(int position, ITEMIDTYPE itemId,
+ ITEMCLASS item) {
+ }
+
+ // item set change notifications
+
+ /**
+ * Notify item set change listeners that an item has been added to the
+ * container.
+ *
+ * @since 7.4
+ *
+ * @param position
+ * position of the added item in the view
+ * @param itemId
+ * id of the added item
+ * @param item
+ * the added item
+ */
+ protected void fireItemAdded(int position, ITEMIDTYPE itemId,
+ ITEMCLASS item) {
+ fireItemsAdded(position, itemId, 1);
+ }
+
+ /**
+ * Notify item set change listeners that items has been added to the
+ * container.
+ *
+ * @param firstPosition
+ * position of the first visible added item in the view
+ * @param firstItemId
+ * id of the first visible added item
+ * @param numberOfItems
+ * the number of visible added items
+ */
+ protected void fireItemsAdded(int firstPosition, ITEMIDTYPE firstItemId,
+ int numberOfItems) {
+ BaseItemAddEvent addEvent = new BaseItemAddEvent(this, firstItemId,
+ firstPosition, numberOfItems);
+ fireItemSetChange(addEvent);
+ }
+
+ /**
+ * Notify item set change listeners that an item has been removed from the
+ * container.
+ *
+ * @since 7.4
+ *
+ * @param position
+ * position of the removed item in the view prior to removal (if
+ * was visible)
+ * @param itemId
+ * id of the removed item, of type {@link Object} to satisfy
+ * {@link Container#removeItem(Object)} API
+ */
+ protected void fireItemRemoved(int position, Object itemId) {
+ fireItemsRemoved(position, itemId, 1);
+ }
+
+ /**
+ * Notify item set change listeners that items has been removed from the
+ * container.
+ *
+ * @param firstPosition
+ * position of the first visible removed item in the view prior
+ * to removal
+ * @param firstItemId
+ * id of the first visible removed item, of type {@link Object}
+ * to satisfy {@link Container#removeItem(Object)} API
+ * @param numberOfItems
+ * the number of removed visible items
+ *
+ */
+ protected void fireItemsRemoved(int firstPosition, Object firstItemId,
+ int numberOfItems) {
+ BaseItemRemoveEvent removeEvent = new BaseItemRemoveEvent(this,
+ firstItemId, firstPosition, numberOfItems);
+ fireItemSetChange(removeEvent);
+ }
+
+ // visible and filtered item identifier lists
+
+ /**
+ * Returns the internal list of visible item identifiers after filtering.
+ *
+ * For internal use only.
+ */
+ protected List<ITEMIDTYPE> getVisibleItemIds() {
+ if (isFiltered()) {
+ return getFilteredItemIds();
+ } else {
+ return getAllItemIds();
+ }
+ }
+
+ /**
+ * Returns the item id of the first visible item after filtering. 'Null' is
+ * returned if there is no visible items.
+ * <p>
+ * For internal use only.
+ *
+ * @since 7.4
+ *
+ * @return item id of the first visible item
+ */
+ protected ITEMIDTYPE getFirstVisibleItem() {
+ if (!getVisibleItemIds().isEmpty()) {
+ return getVisibleItemIds().get(0);
+ }
+ return null;
+ }
+
+ /**
+ * Returns true is the container has active filters.
+ *
+ * @return true if the container is currently filtered
+ */
+ protected boolean isFiltered() {
+ return filteredItemIds != null;
+ }
+
+ /**
+ * Internal helper method to set the internal list of filtered item
+ * identifiers. Should not be used outside this class except for
+ * implementing clone(), may disappear from future versions.
+ *
+ * @param filteredItemIds
+ */
+ @Deprecated
+ protected void setFilteredItemIds(List<ITEMIDTYPE> filteredItemIds) {
+ this.filteredItemIds = filteredItemIds;
+ }
+
+ /**
+ * Internal helper method to get the internal list of filtered item
+ * identifiers. Should not be used outside this class except for
+ * implementing clone(), may disappear from future versions - use
+ * {@link #getVisibleItemIds()} in other contexts.
+ *
+ * @return List<ITEMIDTYPE>
+ */
+ protected List<ITEMIDTYPE> getFilteredItemIds() {
+ return filteredItemIds;
+ }
+
+ /**
+ * Internal helper method to set the internal list of all item identifiers.
+ * Should not be used outside this class except for implementing clone(),
+ * may disappear from future versions.
+ *
+ * @param allItemIds
+ */
+ @Deprecated
+ protected void setAllItemIds(List<ITEMIDTYPE> allItemIds) {
+ this.allItemIds = allItemIds;
+ }
+
+ /**
+ * Internal helper method to get the internal list of all item identifiers.
+ * Avoid using this method outside this class, may disappear in future
+ * versions.
+ *
+ * @return List<ITEMIDTYPE>
+ */
+ protected List<ITEMIDTYPE> getAllItemIds() {
+ return allItemIds;
+ }
+
+ /**
+ * Set the internal collection of filters without performing filtering.
+ *
+ * This method is mostly for internal use, use
+ * {@link #addFilter(com.vaadin.data.Container.Filter)} and
+ * <code>remove*Filter*</code> (which also re-filter the container) instead
+ * when possible.
+ *
+ * @param filters
+ */
+ protected void setFilters(Set<Filter> filters) {
+ this.filters = filters;
+ }
+
+ /**
+ * Returns the internal collection of filters. The returned collection
+ * should not be modified by callers outside this class.
+ *
+ * @return Set<Filter>
+ */
+ protected Set<Filter> getFilters() {
+ return filters;
+ }
+
+}
diff --git a/org.eclipse.osbp.runtime.web.vaadin.common/src/org/eclipse/osbp/runtime/web/vaadin/common/data/BeanServiceLazyLoadingContainer.java b/org.eclipse.osbp.runtime.web.vaadin.common/src/org/eclipse/osbp/runtime/web/vaadin/common/data/BeanServiceLazyLoadingContainer.java
index 51f54a9..f7d7825 100644
--- a/org.eclipse.osbp.runtime.web.vaadin.common/src/org/eclipse/osbp/runtime/web/vaadin/common/data/BeanServiceLazyLoadingContainer.java
+++ b/org.eclipse.osbp.runtime.web.vaadin.common/src/org/eclipse/osbp/runtime/web/vaadin/common/data/BeanServiceLazyLoadingContainer.java
@@ -20,12 +20,18 @@
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.stream.Collectors;
-import org.eclipse.osbp.dsl.dto.lib.services.SortBy;
-import org.eclipse.osbp.dsl.dto.lib.services.SortOrder;
+import org.eclipse.osbp.dsl.semantic.dto.util.NamingConventionsUtil;
import org.eclipse.osbp.runtime.common.annotations.DtoUtils;
+import org.eclipse.osbp.runtime.common.event.EventDispatcherEvent;
+import org.eclipse.osbp.runtime.common.event.EventDispatcherEvent.EventDispatcherDataTag;
+import org.eclipse.osbp.runtime.common.event.IEventDispatcher;
+import org.eclipse.osbp.runtime.common.filter.IDatamartService;
+import org.eclipse.osbp.runtime.common.filter.SortBy;
+import org.eclipse.osbp.runtime.common.filter.SortOrder;
import org.eclipse.osbp.runtime.common.state.ISharedStateContext;
-import org.eclipse.osbp.runtime.common.state.SharedStateUnitOfWork;
+import org.eclipse.osbp.ui.api.datamart.IDatamartContainer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -44,7 +50,6 @@
import com.vaadin.data.util.filter.SimpleStringFilter;
import com.vaadin.data.util.filter.UnsupportedFilterException;
-// TODO: Auto-generated Javadoc
/**
* The Class BeanServiceLazyLoadingContainer.
*
@@ -52,43 +57,42 @@
* the generic type
*/
@SuppressWarnings("serial")
-public class BeanServiceLazyLoadingContainer<BEANTYPE> extends
- AbstractContainer implements Filterable, Indexed, SimpleFilterable,
- ILazyRefreshFilterable, Sortable, ValueChangeListener,
- Container.ItemSetChangeNotifier, Container.PropertySetChangeNotifier,
- IClearable, INestedPropertyAble<BEANTYPE> {
+public class BeanServiceLazyLoadingContainer<BEANTYPE> extends AbstractContainer
+ implements Filterable, Indexed, SimpleFilterable, ILazyRefreshFilterable, Sortable, ValueChangeListener,
+ Container.ItemSetChangeNotifier, Container.PropertySetChangeNotifier, IClearable, INestedPropertyAble<BEANTYPE>,
+ IAlreadyLoadedItemIdProvider<BEANTYPE>, IEventDispatcher.Receiver {
/** The Constant LOGGER. */
- private static final Logger LOGGER = LoggerFactory
- .getLogger(BeanServiceLazyLoadingContainer.class);
+ private static final Logger LOGGER = LoggerFactory.getLogger(BeanServiceLazyLoadingContainer.class);
+
+ private BeanIdResolver<BEANTYPE> beanIdResolver = new DtoIdResolver<>();
/** The service. */
private IBeanSearchService<BEANTYPE> service;
-
+
/** The sort order. */
private SortOrder sortOrder = new SortOrder();
-
+
/** The filters. */
private List<Filter> filters = new ArrayList<Filter>();
-
+
/** The type. */
private Class<BEANTYPE> type;
/** The sortable properties. */
private Set<String> sortableProperties = new HashSet<String>();
-
+
/** The model. */
private LinkedHashMap<String, VaadinPropertyDescriptor<BEANTYPE>> model;
/** The cache. */
- private Map<Object, DeepResolvingBeanItem<BEANTYPE>> cache = new HashMap<Object, DeepResolvingBeanItem<BEANTYPE>>();
-
+ private Map<Object, DeepResolvingBeanItem<BEANTYPE>> cache = new HashMap<>();
+
/** The external cache. */
// new records that have been added from outside -> new records
- private Map<Object, DeepResolvingBeanItem<BEANTYPE>> externalCache = new HashMap<Object, DeepResolvingBeanItem<BEANTYPE>>();
+ private Map<Object, DeepResolvingBeanItem<BEANTYPE>> externalCache = new HashMap<>();
- /** The shared state. */
- private final ISharedStateContext sharedState;
+ private IEventDispatcher eventDispatcher;
/**
* Instantiates a new bean service lazy loading container.
@@ -100,14 +104,13 @@
* @param sharedState
* the shared state
*/
- public BeanServiceLazyLoadingContainer(
- IBeanSearchService<BEANTYPE> service, Class<BEANTYPE> type,
- ISharedStateContext sharedState) {
- this.service = service != null ? service
- : new StatefulInMemoryBeanSearchService<BEANTYPE>(type);
+ public BeanServiceLazyLoadingContainer(IBeanSearchService<BEANTYPE> service, Class<BEANTYPE> type,
+ ISharedStateContext sharedState, IEventDispatcher eventDispatcher) {
+ this.service = service != null ? service : new StatefulInMemoryBeanSearchService<BEANTYPE>(type);
this.type = type;
- model = DeepResolvingBeanItem
- .getPropertyDescriptors((Class<BEANTYPE>) type);
+ this.eventDispatcher = eventDispatcher;
+
+ model = DeepResolvingBeanItem.getPropertyDescriptors((Class<BEANTYPE>) type);
// create all sortable columns
for (String column : model.keySet()) {
@@ -116,68 +119,124 @@
}
sortableProperties.add(column);
}
- this.sharedState = sharedState;
+
+ if (eventDispatcher != null) {
+ eventDispatcher.addEventReceiver(this);
+ }
}
- /* (non-Javadoc)
- * @see com.vaadin.data.util.AbstractContainer#addListener(com.vaadin.data.Container.PropertySetChangeListener)
+ public BeanServiceLazyLoadingContainer(IBeanSearchService<BEANTYPE> service, Class<BEANTYPE> type,
+ ISharedStateContext sharedState) {
+ this(service, type, sharedState, null);
+ }
+
+ @Override
+ public void receiveEvent(EventDispatcherEvent event) {
+ switch (event.getCommand()) {
+ case SAVE:
+ case DELETE:
+ if (event.getTopic().equals(NamingConventionsUtil.toFqnEntityName(type.getCanonicalName()))) {
+ Map<Object, BEANTYPE> loadedItems = getAlreadyLoadedItemIdsAsMap();
+ Object changedId = event.getData().get(EventDispatcherDataTag.ID);
+ if (loadedItems.containsKey(changedId)) {
+ BEANTYPE bean = loadedItems.get(changedId);
+ disposeCacheFor(bean);
+ }
+ }
+ break;
+ default:
+ break;
+ }
+
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.vaadin.data.util.AbstractContainer#addListener(com.vaadin.data.
+ * Container.PropertySetChangeListener)
*/
@Override
public void addListener(PropertySetChangeListener listener) {
super.addPropertySetChangeListener(listener);
}
- /* (non-Javadoc)
- * @see com.vaadin.data.util.AbstractContainer#removeListener(com.vaadin.data.Container.PropertySetChangeListener)
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * com.vaadin.data.util.AbstractContainer#removeListener(com.vaadin.data.
+ * Container.PropertySetChangeListener)
*/
@Override
public void removeListener(PropertySetChangeListener listener) {
super.removePropertySetChangeListener(listener);
}
- /* (non-Javadoc)
- * @see com.vaadin.data.util.AbstractContainer#addListener(com.vaadin.data.Container.ItemSetChangeListener)
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.vaadin.data.util.AbstractContainer#addListener(com.vaadin.data.
+ * Container.ItemSetChangeListener)
*/
@Override
public void addListener(ItemSetChangeListener listener) {
super.addItemSetChangeListener(listener);
}
- /* (non-Javadoc)
- * @see com.vaadin.data.util.AbstractContainer#removeListener(com.vaadin.data.Container.ItemSetChangeListener)
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * com.vaadin.data.util.AbstractContainer#removeListener(com.vaadin.data.
+ * Container.ItemSetChangeListener)
*/
@Override
public void removeListener(ItemSetChangeListener listener) {
super.removeItemSetChangeListener(listener);
}
- /* (non-Javadoc)
- * @see com.vaadin.data.util.AbstractContainer#addPropertySetChangeListener(com.vaadin.data.Container.PropertySetChangeListener)
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * com.vaadin.data.util.AbstractContainer#addPropertySetChangeListener(com.
+ * vaadin.data.Container.PropertySetChangeListener)
*/
@Override
public void addPropertySetChangeListener(PropertySetChangeListener listener) {
super.addPropertySetChangeListener(listener);
}
- /* (non-Javadoc)
- * @see com.vaadin.data.util.AbstractContainer#removePropertySetChangeListener(com.vaadin.data.Container.PropertySetChangeListener)
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * com.vaadin.data.util.AbstractContainer#removePropertySetChangeListener(
+ * com.vaadin.data.Container.PropertySetChangeListener)
*/
@Override
- public void removePropertySetChangeListener(
- PropertySetChangeListener listener) {
+ public void removePropertySetChangeListener(PropertySetChangeListener listener) {
super.removePropertySetChangeListener(listener);
}
- /* (non-Javadoc)
- * @see com.vaadin.data.util.AbstractContainer#addItemSetChangeListener(com.vaadin.data.Container.ItemSetChangeListener)
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.vaadin.data.util.AbstractContainer#addItemSetChangeListener(com.
+ * vaadin.data.Container.ItemSetChangeListener)
*/
@Override
public void addItemSetChangeListener(ItemSetChangeListener listener) {
super.addItemSetChangeListener(listener);
}
- /* (non-Javadoc)
- * @see com.vaadin.data.util.AbstractContainer#removeItemSetChangeListener(com.vaadin.data.Container.ItemSetChangeListener)
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * com.vaadin.data.util.AbstractContainer#removeItemSetChangeListener(com.
+ * vaadin.data.Container.ItemSetChangeListener)
*/
@Override
public void removeItemSetChangeListener(ItemSetChangeListener listener) {
@@ -193,8 +252,7 @@
* the bean
* @return the deep resolving bean item
*/
- protected DeepResolvingBeanItem<BEANTYPE> addItem(Object itemId,
- BEANTYPE bean) {
+ protected DeepResolvingBeanItem<BEANTYPE> addItem(Object itemId, BEANTYPE bean) {
return addBean(bean);
}
@@ -207,12 +265,13 @@
* the item
* @return the deep resolving bean item
*/
- protected DeepResolvingBeanItem<BEANTYPE> internalAddItemAtEnd(
- Object newItemId, DeepResolvingBeanItem<BEANTYPE> item) {
- if (externalCache.containsKey(newItemId)) {
- cache.put(newItemId, externalCache.get(newItemId));
+ protected DeepResolvingBeanItem<BEANTYPE> internalAddItemAtEnd(Object newItemId,
+ DeepResolvingBeanItem<BEANTYPE> item) {
+ Object key = resolveBeanId(newItemId);
+ if (externalCache.containsKey(key)) {
+ cache.put(key, externalCache.get(key));
} else {
- cache.put(newItemId, item);
+ cache.put(key, item);
}
return item;
}
@@ -225,155 +284,119 @@
* @return the deep resolving bean item
*/
protected DeepResolvingBeanItem<BEANTYPE> createBeanItem(BEANTYPE bean) {
- return bean == null ? null : new DeepResolvingBeanItem<BEANTYPE>(bean,
- model);
+ return bean == null ? null : new DeepResolvingBeanItem<BEANTYPE>(bean, model);
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see com.vaadin.data.Container.Ordered#nextItemId(java.lang.Object)
*/
@SuppressWarnings("unchecked")
@Override
public Object nextItemId(final Object itemId) {
- if (sharedState != null) {
- return new SharedStateUnitOfWork<Object>() {
- @Override
- protected Object doExecute() {
- return service.getNextBean((BEANTYPE) itemId, filters,
- sortOrder);
- }
- }.execute(sharedState);
- } else {
- return mapToCachedId(service.getNextBean((BEANTYPE) itemId,
- filters, sortOrder));
- }
+ return mapToCachedId(service.getNextBean((BEANTYPE) itemId, filters, sortOrder));
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see com.vaadin.data.Container.Ordered#prevItemId(java.lang.Object)
*/
@SuppressWarnings("unchecked")
@Override
public Object prevItemId(final Object itemId) {
- if (sharedState != null) {
- return new SharedStateUnitOfWork<Object>() {
- @Override
- protected Object doExecute() {
- return service.getPreviousBean((BEANTYPE) itemId, filters,
- sortOrder);
- }
- }.execute(sharedState);
- } else {
- return mapToCachedId(service.getPreviousBean((BEANTYPE) itemId,
- filters, sortOrder));
- }
+ return mapToCachedId(service.getPreviousBean((BEANTYPE) itemId, filters, sortOrder));
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see com.vaadin.data.Container.Ordered#firstItemId()
*/
@Override
public Object firstItemId() {
- if (sharedState != null) {
- return new SharedStateUnitOfWork<Object>() {
- @Override
- protected Object doExecute() {
- return service.getFirstBean(filters, sortOrder);
- }
- }.execute(sharedState);
- } else {
- return mapToCachedId(service.getFirstBean(filters, sortOrder));
- }
+ return mapToCachedId(service.getFirstBean(filters, sortOrder));
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see com.vaadin.data.Container.Ordered#lastItemId()
*/
@Override
public Object lastItemId() {
- if (sharedState != null) {
- return new SharedStateUnitOfWork<Object>() {
- @Override
- protected Object doExecute() {
- return service.getLastBean(filters, sortOrder);
- }
- }.execute(sharedState);
- } else {
- return mapToCachedId(service.getLastBean(filters, sortOrder));
- }
+ return mapToCachedId(service.getLastBean(filters, sortOrder));
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see com.vaadin.data.Container.Ordered#isFirstId(java.lang.Object)
*/
@SuppressWarnings("unchecked")
@Override
public boolean isFirstId(final Object itemId) {
- if (sharedState != null) {
- return new SharedStateUnitOfWork<Boolean>() {
- @Override
- protected Boolean doExecute() {
- return service.isFirstBean((BEANTYPE) itemId, filters,
- sortOrder);
- }
- }.execute(sharedState);
- } else {
- return service.isFirstBean((BEANTYPE) itemId, filters, sortOrder);
- }
+ return service.isFirstBean((BEANTYPE) itemId, filters, sortOrder);
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see com.vaadin.data.Container.Ordered#isLastId(java.lang.Object)
*/
@SuppressWarnings("unchecked")
@Override
public boolean isLastId(final Object itemId) {
- if (sharedState != null) {
- return new SharedStateUnitOfWork<Boolean>() {
- @Override
- protected Boolean doExecute() {
- return service.isLastBean((BEANTYPE) itemId, filters,
- sortOrder);
- }
- }.execute(sharedState);
- } else {
- return service.isLastBean((BEANTYPE) itemId, filters, sortOrder);
- }
+ return service.isLastBean((BEANTYPE) itemId, filters, sortOrder);
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see com.vaadin.data.Container.Ordered#addItemAfter(java.lang.Object)
*/
@Override
- public Object addItemAfter(Object previousItemId)
- throws UnsupportedOperationException {
+ public Object addItemAfter(Object previousItemId) throws UnsupportedOperationException {
throw new UnsupportedOperationException();
}
- /* (non-Javadoc)
- * @see com.vaadin.data.Container.Ordered#addItemAfter(java.lang.Object, java.lang.Object)
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.vaadin.data.Container.Ordered#addItemAfter(java.lang.Object,
+ * java.lang.Object)
*/
@Override
- public Item addItemAfter(Object previousItemId, Object newItemId)
- throws UnsupportedOperationException {
+ public Item addItemAfter(Object previousItemId, Object newItemId) throws UnsupportedOperationException {
throw new UnsupportedOperationException();
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see com.vaadin.data.Container#getItem(java.lang.Object)
*/
@SuppressWarnings("unchecked")
@Override
public Item getItem(Object itemId) {
- if (cache.containsKey(itemId)) {
- return cache.get(itemId);
- } else if (externalCache.containsKey(itemId)) {
- return externalCache.get(itemId);
+ if (itemId == null) {
+ return null;
}
- return addBean((BEANTYPE) itemId);
+ Object key = resolveBeanId(itemId);
+ if (cache.containsKey(key)) {
+ return cache.get(key);
+ } else if (externalCache.containsKey(key)) {
+ return externalCache.get(key);
+ }
+
+ BEANTYPE bean = service.refresh((BEANTYPE) itemId);
+ return bean != null ? addBean(bean) : null;
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see com.vaadin.data.Container#getContainerPropertyIds()
*/
@Override
@@ -381,7 +404,9 @@
return model.keySet();
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see com.vaadin.data.Container#getItemIds()
*/
@Override
@@ -390,17 +415,49 @@
// without a previous calculation of pagesize a fix pagesize of 100
// elements will be set in this method.
@SuppressWarnings("unchecked")
- // List<Object> itemIds = new ArrayList<Object>();
List<Object> itemIds = (List<Object>) getItemIds(0, 100);
- if (itemIds.size() == 0) {
- itemIds.addAll(cache.keySet());
- itemIds.addAll(externalCache.keySet());
+ if (itemIds.isEmpty()) {
+ itemIds.addAll(cache.values().stream().map(e -> e.getBean()).collect(Collectors.toList()));
+ itemIds.addAll(externalCache.values().stream().map(e -> e.getBean()).collect(Collectors.toList()));
}
return itemIds;
}
- /* (non-Javadoc)
- * @see com.vaadin.data.Container#getContainerProperty(java.lang.Object, java.lang.Object)
+ @Override
+ public List<BEANTYPE> getAlreadyLoadedItemIds() {
+ List<BEANTYPE> itemIds = new ArrayList<>();
+ itemIds.addAll(cache.values().stream().map(e -> e.getBean()).collect(Collectors.toList()));
+ itemIds.addAll(externalCache.values().stream().map(e -> e.getBean()).collect(Collectors.toList()));
+ return itemIds;
+ }
+
+ protected Map<Object, BEANTYPE> getAlreadyLoadedItemIdsAsMap() {
+ Map<Object, BEANTYPE> itemIds = new HashMap<>();
+ externalCache.entrySet().forEach(e -> itemIds.put(e.getKey(), e.getValue().getBean()));
+ cache.entrySet().forEach(e -> itemIds.put(e.getKey(), e.getValue().getBean()));
+ return itemIds;
+ }
+
+ @Override
+ public void disposeCacheFor(Object itemId) {
+ if (itemId == null) {
+ return;
+ }
+ Object key = resolveBeanId(itemId);
+ if (key != null) {
+ cache.remove(key);
+ externalCache.remove(key);
+
+ // notify the listeners
+ fireItemSetChange();
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.vaadin.data.Container#getContainerProperty(java.lang.Object,
+ * java.lang.Object)
*/
@Override
public Property<?> getContainerProperty(Object itemId, Object propertyId) {
@@ -411,7 +468,9 @@
return item.getItemProperty(propertyId);
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see com.vaadin.data.Container#getType(java.lang.Object)
*/
@Override
@@ -419,45 +478,33 @@
return model.get(propertyId).getPropertyType();
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see com.vaadin.data.Container#size()
*/
@Override
public int size() {
- if (sharedState != null) {
- return new SharedStateUnitOfWork<Integer>() {
- @Override
- protected Integer doExecute() {
- return service.size(filters) + externalCache.size();
- }
- }.execute(sharedState);
- } else {
- return service.size(filters) + externalCache.size();
- }
+ return service.size(filters) + externalCache.size();
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see com.vaadin.data.Container#containsId(java.lang.Object)
*/
@SuppressWarnings("unchecked")
@Override
public boolean containsId(final Object itemId) {
- if (cache.containsKey(itemId) || externalCache.containsKey(itemId)) {
+ if (cache.containsKey(resolveBeanId(itemId)) || externalCache.containsKey(resolveBeanId(itemId))) {
return true;
}
- if (sharedState != null) {
- return new SharedStateUnitOfWork<Boolean>() {
- @Override
- protected Boolean doExecute() {
- return service.contains((BEANTYPE) itemId, filters);
- }
- }.execute(sharedState);
- } else {
- return service.contains((BEANTYPE) itemId, filters);
- }
+ return service.contains((BEANTYPE) itemId, filters);
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see com.vaadin.data.Container#addItem(java.lang.Object)
*/
@SuppressWarnings("unchecked")
@@ -467,7 +514,9 @@
return addBean((BEANTYPE) itemId, true);
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see com.vaadin.data.Container#addItem()
*/
@Override
@@ -475,31 +524,35 @@
throw new UnsupportedOperationException("Bean required for new item!");
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see com.vaadin.data.Container#removeItem(java.lang.Object)
*/
@Override
- public boolean removeItem(Object itemId)
- throws UnsupportedOperationException {
- throw new UnsupportedOperationException(
- "Does not support deleting item!");
+ public boolean removeItem(Object itemId) throws UnsupportedOperationException {
+ throw new UnsupportedOperationException("Does not support deleting item!");
}
- /* (non-Javadoc)
- * @see com.vaadin.data.Container#addContainerProperty(java.lang.Object, java.lang.Class, java.lang.Object)
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.vaadin.data.Container#addContainerProperty(java.lang.Object,
+ * java.lang.Class, java.lang.Object)
*/
@Override
- public boolean addContainerProperty(Object propertyId, Class<?> type,
- Object defaultValue) throws UnsupportedOperationException {
+ public boolean addContainerProperty(Object propertyId, Class<?> type, Object defaultValue)
+ throws UnsupportedOperationException {
throw new UnsupportedOperationException();
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see com.vaadin.data.Container#removeContainerProperty(java.lang.Object)
*/
@Override
- public boolean removeContainerProperty(Object propertyId)
- throws UnsupportedOperationException {
+ public boolean removeContainerProperty(Object propertyId) throws UnsupportedOperationException {
throw new UnsupportedOperationException();
}
@@ -512,8 +565,7 @@
@Override
@SuppressWarnings({ "rawtypes", "unchecked" })
public boolean addNestedContainerProperty(String propertyId) {
- return addContainerProperty(propertyId, new NestedPropertyDescriptor(
- propertyId, type));
+ return addContainerProperty(propertyId, new NestedPropertyDescriptor(propertyId, type));
}
/**
@@ -549,25 +601,33 @@
return true;
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see com.vaadin.data.Container#removeAllItems()
*/
@Override
public boolean removeAllItems() throws UnsupportedOperationException {
- throw new UnsupportedOperationException(
- "Does not support deleting all items!");
+ throw new UnsupportedOperationException("Does not support deleting all items!");
}
- /* (non-Javadoc)
- * @see com.vaadin.data.Property.ValueChangeListener#valueChange(com.vaadin.data.Property.ValueChangeEvent)
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * com.vaadin.data.Property.ValueChangeListener#valueChange(com.vaadin.data.
+ * Property.ValueChangeEvent)
*/
@Override
public void valueChange(ValueChangeEvent event) {
}
- /* (non-Javadoc)
- * @see com.vaadin.data.Container.Sortable#sort(java.lang.Object[], boolean[])
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.vaadin.data.Container.Sortable#sort(java.lang.Object[],
+ * boolean[])
*/
@Override
public void sort(Object[] propertyIds, boolean[] ascending) {
@@ -580,7 +640,9 @@
fireItemSetChange();
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see com.vaadin.data.Container.Sortable#getSortableContainerPropertyIds()
*/
@Override
@@ -588,18 +650,25 @@
return sortableProperties;
}
- /* (non-Javadoc)
- * @see com.vaadin.data.Container.SimpleFilterable#addContainerFilter(java.lang.Object, java.lang.String, boolean, boolean)
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * com.vaadin.data.Container.SimpleFilterable#addContainerFilter(java.lang.
+ * Object, java.lang.String, boolean, boolean)
*/
@Override
- public void addContainerFilter(Object propertyId, String filterString,
- boolean ignoreCase, boolean onlyMatchPrefix) {
- addContainerFilter(new SimpleStringFilter(propertyId, filterString,
- ignoreCase, onlyMatchPrefix));
+ public void addContainerFilter(Object propertyId, String filterString, boolean ignoreCase,
+ boolean onlyMatchPrefix) {
+ addContainerFilter(new SimpleStringFilter(propertyId, filterString, ignoreCase, onlyMatchPrefix));
}
- /* (non-Javadoc)
- * @see com.vaadin.data.Container.SimpleFilterable#removeContainerFilters(java.lang.Object)
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * com.vaadin.data.Container.SimpleFilterable#removeContainerFilters(java.
+ * lang.Object)
*/
@Override
public void removeContainerFilters(Object propertyId) {
@@ -607,8 +676,7 @@
return;
}
boolean result = false;
- for (Iterator<Filter> iterator = getFilters().iterator(); iterator
- .hasNext();) {
+ for (Iterator<Filter> iterator = getFilters().iterator(); iterator.hasNext();) {
Filter f = iterator.next();
if (f.appliesToProperty(propertyId)) {
iterator.remove();
@@ -630,12 +698,15 @@
return filters;
}
- /* (non-Javadoc)
- * @see com.vaadin.data.Container.Filterable#addContainerFilter(com.vaadin.data.Container.Filter)
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * com.vaadin.data.Container.Filterable#addContainerFilter(com.vaadin.data.
+ * Container.Filter)
*/
@Override
- public void addContainerFilter(Filter filter)
- throws UnsupportedFilterException {
+ public void addContainerFilter(Filter filter) throws UnsupportedFilterException {
if (!filters.contains(filter)) {
filters.add(filter);
clearCache();
@@ -651,26 +722,42 @@
cache.clear();
}
- /* (non-Javadoc)
- * @see com.vaadin.data.Container.Filterable#removeContainerFilter(com.vaadin.data.Container.Filter)
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * com.vaadin.data.Container.Filterable#removeContainerFilter(com.vaadin.
+ * data.Container.Filter)
*/
@Override
public void removeContainerFilter(Filter filter) {
if (filters.remove(filter)) {
clearCache();
+
+ fireItemSetChange();
}
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see com.vaadin.data.Container.Filterable#removeAllContainerFilters()
*/
@Override
public void removeAllContainerFilters() {
+ boolean hadFilters = !filters.isEmpty();
+
filters.clear();
clearCache();
+
+ if (hadFilters) {
+ fireItemSetChange();
+ }
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see com.vaadin.data.Container.Filterable#getContainerFilters()
*/
@Override
@@ -678,60 +765,44 @@
return Collections.unmodifiableList(filters);
}
- /* (non-Javadoc)
- * @see org.eclipse.osbp.runtime.web.vaadin.common.data.ILazyRefreshFilterable#refreshFilters()
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.osbp.runtime.web.vaadin.common.data.ILazyRefreshFilterable#
+ * refreshFilters()
*/
@Override
public void refreshFilters() {
fireItemSetChange();
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see com.vaadin.data.Container.Indexed#indexOfId(java.lang.Object)
*/
@SuppressWarnings("unchecked")
@Override
public int indexOfId(final Object itemId) {
- if (sharedState != null) {
- return new SharedStateUnitOfWork<Integer>() {
- @Override
- protected Integer doExecute() {
- return service.indexOf((BEANTYPE) itemId, filters,
- sortOrder);
- }
- }.execute(sharedState);
- } else {
- return service.indexOf((BEANTYPE) itemId, filters, sortOrder);
- }
+ return service.indexOf((BEANTYPE) itemId, filters, sortOrder);
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see com.vaadin.data.Container.Indexed#getIdByIndex(int)
*/
@Override
public Object getIdByIndex(final int index) {
- if (sharedState != null) {
- return new SharedStateUnitOfWork<BEANTYPE>() {
- @Override
- protected BEANTYPE doExecute() {
- BEANTYPE result = null;
- result = (BEANTYPE) service.getBeanByIndex(index, filters,
- sortOrder);
- addBean(result);
- return result;
- }
- }.execute(sharedState);
+ BEANTYPE result = null;
+ result = (BEANTYPE) service.getBeanByIndex(index, filters, sortOrder);
+ if (isCached(result)) {
+ result = mapToCachedId(result);
} else {
- BEANTYPE result = null;
- result = (BEANTYPE) service.getBeanByIndex(index, filters,
- sortOrder);
- if (isCached(result)) {
- result = mapToCachedId(result);
- } else {
- addBean(result);
- }
- return result;
+ addBean(result);
}
+ return result;
}
/**
@@ -747,10 +818,11 @@
if (!isCached(itemId)) {
return itemId;
}
- if (cache.containsKey(itemId)) {
- return cache.get(itemId).getBean();
- } else if (externalCache.containsKey(itemId)) {
- return externalCache.get(itemId).getBean();
+ Object key = resolveBeanId(itemId);
+ if (cache.containsKey(key)) {
+ return cache.get(key).getBean();
+ } else if (externalCache.containsKey(key)) {
+ return externalCache.get(key).getBean();
}
return null;
}
@@ -763,7 +835,8 @@
* @return true, if is cached
*/
protected boolean isCached(Object bean) {
- return cache.containsKey(bean) || externalCache.containsKey(bean);
+ Object key = resolveBeanId(bean);
+ return cache.containsKey(key) || externalCache.containsKey(key);
}
/**
@@ -786,8 +859,7 @@
* the to external cache
* @return the deep resolving bean item
*/
- protected DeepResolvingBeanItem<BEANTYPE> addBean(BEANTYPE result,
- boolean toExternalCache) {
+ protected DeepResolvingBeanItem<BEANTYPE> addBean(BEANTYPE result, boolean toExternalCache) {
return addBean(result, result, toExternalCache);
}
@@ -802,75 +874,53 @@
* the to external cache
* @return the deep resolving bean item
*/
- protected DeepResolvingBeanItem<BEANTYPE> addBean(Object itemId,
- BEANTYPE result, boolean toExternalCache) {
+ protected DeepResolvingBeanItem<BEANTYPE> addBean(Object itemId, BEANTYPE result, boolean toExternalCache) {
- if (cache.containsKey(itemId)) {
- return cache.get(itemId);
+ Object key = resolveBeanId(itemId);
+ if (cache.containsKey(key)) {
+ return cache.get(key);
}
- if (externalCache.containsKey(itemId)) {
- return externalCache.get(itemId);
+ if (externalCache.containsKey(key)) {
+ return externalCache.get(key);
}
DeepResolvingBeanItem<BEANTYPE> item = createBeanItem(result);
if (toExternalCache) {
- externalCache.put(itemId, item);
+ externalCache.put(key, item);
}
return internalAddItemAtEnd(itemId, item);
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see com.vaadin.data.Container.Indexed#getItemIds(int, int)
*/
- @SuppressWarnings("unchecked")
@Override
- public List<BEANTYPE> getItemIds(final int startIndex,
- final int numberOfItems) {
- LOGGER.debug(String.format(
- "Fetching item ids: StartIndex:%d NumberOfItems:%d",
- startIndex, numberOfItems));
+ public List<BEANTYPE> getItemIds(final int startIndex, final int numberOfItems) {
- if (sharedState != null) {
- return new SharedStateUnitOfWork<List<BEANTYPE>>() {
- @Override
- protected List<BEANTYPE> doExecute() {
- List<BEANTYPE> beans = new ArrayList<BEANTYPE>();
- // beans.addAll((Collection<? extends BEANTYPE>)
- // externalCache
- // .keySet());
- beans.addAll((List<BEANTYPE>) service.getBeansByIndex(
- startIndex, numberOfItems, filters, sortOrder));
- for (BEANTYPE bean : beans) {
- addBean(bean);
+ LOGGER.debug(String.format("Fetching item ids: StartIndex:%d NumberOfItems:%d", startIndex, numberOfItems));
- LOGGER.debug(String.format("Fetched bean: %s",
- bean.toString()));
- }
- return beans;
- }
- }.execute(sharedState);
- } else {
- List<BEANTYPE> beans = new ArrayList<BEANTYPE>();
- beans.addAll((Collection<? extends BEANTYPE>) externalCache
- .keySet());
- // map the results to cached instances
- for (BEANTYPE bean : service.getBeansByIndex(startIndex,
- numberOfItems, filters, sortOrder)) {
- if (isCached(bean)) {
- beans.add(mapToCachedId(bean));
- } else {
- addBean(bean);
- beans.add(bean);
- }
+ List<BEANTYPE> beans = new ArrayList<BEANTYPE>();
+ beans.addAll(externalCache.values().stream().map(e -> e.getBean()).collect(Collectors.toList()));
+ // map the results to cached instances
+ for (BEANTYPE bean : service.getBeansByIndex(startIndex, numberOfItems, filters, sortOrder)) {
+ if (isCached(bean)) {
+ beans.add(mapToCachedId(bean));
+ } else {
+ addBean(bean);
+ beans.add(bean);
}
- return beans;
}
+ return beans;
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see com.vaadin.data.Container.Indexed#addItemAt(int)
*/
@Override
@@ -878,19 +928,22 @@
throw new UnsupportedOperationException();
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see com.vaadin.data.Container.Indexed#addItemAt(int, java.lang.Object)
*/
@SuppressWarnings("unchecked")
@Override
- public Item addItemAt(int index, Object newItemId)
- throws UnsupportedOperationException {
+ public Item addItemAt(int index, Object newItemId) throws UnsupportedOperationException {
// external data -> new record
return addBean((BEANTYPE) newItemId, true);
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see org.eclipse.osbp.runtime.web.vaadin.common.data.IClearable#clear()
*/
@Override
@@ -898,4 +951,58 @@
cache.clear();
externalCache.clear();
}
+
+ /**
+ * Use the bean resolver to get the identifier for a bean.
+ *
+ * @param bean
+ * @return resolved bean identifier, null if could not be resolved
+ * @throws IllegalStateException
+ * if no bean resolver is set
+ */
+ @SuppressWarnings("unchecked")
+ protected Object resolveBeanId(Object bean) {
+ if (beanIdResolver == null) {
+ throw new IllegalStateException("Bean item identifier resolver is required.");
+ }
+ return beanIdResolver.getIdForBean((BEANTYPE) bean);
+ }
+
+ /**
+ * Resolver that maps beans to their (item) identifiers, removing the need
+ * to explicitly specify item identifiers when there is no need to customize
+ * this.
+ *
+ * Note that beans can also be added with an explicit id even if a resolver
+ * has been set.
+ *
+ * @param <IDTYPE>
+ * @param <BEANTYPE>
+ *
+ * @since 6.5
+ */
+ public interface BeanIdResolver<BEANTYPE> {
+ /**
+ * Return the item identifier for a bean.
+ *
+ * @param bean
+ * @return
+ */
+ public Object getIdForBean(BEANTYPE bean);
+ }
+
+ public static class DtoIdResolver<BEANTYPE> implements BeanIdResolver<BEANTYPE> {
+
+ @Override
+ public Object getIdForBean(BEANTYPE bean) {
+ if (bean == null) {
+ return "";
+ }
+ if(bean instanceof IDatamartContainer) {
+ return ((IDatamartContainer)bean).getIdValue();
+ } else {
+ return DtoUtils.getIdValue(bean);
+ }
+ }
+ }
}
diff --git a/org.eclipse.osbp.runtime.web.vaadin.common/src/org/eclipse/osbp/runtime/web/vaadin/common/data/DeepResolvingBeanItemContainer.java b/org.eclipse.osbp.runtime.web.vaadin.common/src/org/eclipse/osbp/runtime/web/vaadin/common/data/DeepResolvingBeanItemContainer.java
index 1805aac..ed7937f 100644
--- a/org.eclipse.osbp.runtime.web.vaadin.common/src/org/eclipse/osbp/runtime/web/vaadin/common/data/DeepResolvingBeanItemContainer.java
+++ b/org.eclipse.osbp.runtime.web.vaadin.common/src/org/eclipse/osbp/runtime/web/vaadin/common/data/DeepResolvingBeanItemContainer.java
@@ -17,6 +17,8 @@
import java.util.Collection;
+import org.eclipse.osbp.runtime.common.annotations.DtoUtils;
+
// TODO: Auto-generated Javadoc
/**
* An in-memory container for JavaBeans.
@@ -53,8 +55,8 @@
* @since 5.4
*/
@SuppressWarnings("serial")
-public class DeepResolvingBeanItemContainer<BEANTYPE> extends
- AbstractDeepResolvingBeanContainer<BEANTYPE, BEANTYPE> {
+public class DeepResolvingBeanItemContainer<BEANTYPE> extends AbstractDeepResolvingBeanContainer<BEANTYPE, BEANTYPE>
+ implements IBeanToUniqueHashIdProvider<BEANTYPE> {
/**
* Bean identity resolver that returns the bean itself as its item
@@ -68,11 +70,14 @@
* the generic type
* @since 6.5
*/
- private static class IdentityBeanIdResolver<BT> implements
- BeanIdResolver<BT, BT> {
+ private static class IdentityBeanIdResolver<BT> implements BeanIdResolver<BT, BT> {
- /* (non-Javadoc)
- * @see org.eclipse.osbp.runtime.web.vaadin.common.data.AbstractDeepResolvingBeanContainer.BeanIdResolver#getIdForBean(java.lang.Object)
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osbp.runtime.web.vaadin.common.data.
+ * AbstractDeepResolvingBeanContainer.BeanIdResolver#getIdForBean(java.
+ * lang.Object)
*/
@Override
public BT getIdForBean(BT bean) {
@@ -89,8 +94,7 @@
* @throws IllegalArgumentException
* If {@code type} is null
*/
- public DeepResolvingBeanItemContainer(Class<? super BEANTYPE> type)
- throws IllegalArgumentException {
+ public DeepResolvingBeanItemContainer(Class<? super BEANTYPE> type) throws IllegalArgumentException {
super(type);
super.setBeanIdResolver(new IdentityBeanIdResolver<BEANTYPE>());
}
@@ -120,13 +124,10 @@
*/
@SuppressWarnings("unchecked")
@Deprecated
- public DeepResolvingBeanItemContainer(
- Collection<? extends BEANTYPE> collection)
- throws IllegalArgumentException {
+ public DeepResolvingBeanItemContainer(Collection<? extends BEANTYPE> collection) throws IllegalArgumentException {
// must assume the class is BT
// the class information is erased by the compiler
- this((Class<BEANTYPE>) getBeanClassForCollection(collection),
- collection);
+ this((Class<BEANTYPE>) getBeanClassForCollection(collection), collection);
}
/**
@@ -143,8 +144,7 @@
*/
@SuppressWarnings("unchecked")
@Deprecated
- private static <BT> Class<? extends BT> getBeanClassForCollection(
- Collection<? extends BT> collection)
+ private static <BT> Class<? extends BT> getBeanClassForCollection(Collection<? extends BT> collection)
throws IllegalArgumentException {
if (collection == null || collection.isEmpty()) {
throw new IllegalArgumentException(
@@ -163,8 +163,7 @@
* @throws IllegalArgumentException
* If {@code type} is null
*/
- public DeepResolvingBeanItemContainer(Class<? super BEANTYPE> type,
- Collection<? extends BEANTYPE> collection)
+ public DeepResolvingBeanItemContainer(Class<? super BEANTYPE> type, Collection<? extends BEANTYPE> collection)
throws IllegalArgumentException {
super(type);
super.setBeanIdResolver(new IdentityBeanIdResolver<BEANTYPE>());
@@ -184,6 +183,7 @@
@Override
public void addAll(Collection<? extends BEANTYPE> collection) {
super.addAll(collection);
+
}
/**
@@ -202,10 +202,11 @@
*/
@Override
@SuppressWarnings("unchecked")
- public DeepResolvingBeanItem<BEANTYPE> addItemAfter(Object previousItemId,
- Object newItemId) throws IllegalArgumentException {
- return super.addBeanAfter((BEANTYPE) previousItemId,
- (BEANTYPE) newItemId);
+ public DeepResolvingBeanItem<BEANTYPE> addItemAfter(Object previousItemId, Object newItemId)
+ throws IllegalArgumentException {
+ DeepResolvingBeanItem<BEANTYPE> result = super.addBeanAfter((BEANTYPE) previousItemId, (BEANTYPE) newItemId);
+
+ return result;
}
/**
@@ -224,9 +225,10 @@
*/
@Override
@SuppressWarnings("unchecked")
- public DeepResolvingBeanItem<BEANTYPE> addItemAt(int index, Object newItemId)
- throws IllegalArgumentException {
- return super.addBeanAt(index, (BEANTYPE) newItemId);
+ public DeepResolvingBeanItem<BEANTYPE> addItemAt(int index, Object newItemId) throws IllegalArgumentException {
+ DeepResolvingBeanItem<BEANTYPE> result = super.addBeanAt(index, (BEANTYPE) newItemId);
+
+ return result;
}
/**
@@ -242,6 +244,7 @@
@Override
@SuppressWarnings("unchecked")
public DeepResolvingBeanItem<BEANTYPE> addItem(Object itemId) {
+
return super.addBean((BEANTYPE) itemId);
}
@@ -257,7 +260,9 @@
*/
@Override
public DeepResolvingBeanItem<BEANTYPE> addBean(BEANTYPE bean) {
- return addItem(bean);
+ DeepResolvingBeanItem<BEANTYPE> result = addItem(bean);
+
+ return result;
}
/**
@@ -272,16 +277,27 @@
protected void setBeanIdResolver(
AbstractDeepResolvingBeanContainer.BeanIdResolver<BEANTYPE, BEANTYPE> beanIdResolver)
throws UnsupportedOperationException {
- throw new UnsupportedOperationException(
- "BeanItemContainer always uses an IdentityBeanIdResolver");
+ throw new UnsupportedOperationException("BeanItemContainer always uses an IdentityBeanIdResolver");
}
- /* (non-Javadoc)
- * @see org.eclipse.osbp.runtime.web.vaadin.common.data.ILazyRefreshFilterable#refreshFilters()
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.osbp.runtime.web.vaadin.common.data.ILazyRefreshFilterable#
+ * refreshFilters()
*/
@Override
public void refreshFilters() {
// not used in this scenario since container applies filter immediately
}
+ @Override
+ public String getUniqueHashId(BEANTYPE bean) {
+ if (bean == null) {
+ return null;
+ }
+ Object idValue = DtoUtils.getIdValue(bean);
+ return idValue.toString();
+ }
}
diff --git a/org.eclipse.osbp.runtime.web.vaadin.common/src/org/eclipse/osbp/runtime/web/vaadin/common/data/IAlreadyLoadedItemIdProvider.java b/org.eclipse.osbp.runtime.web.vaadin.common/src/org/eclipse/osbp/runtime/web/vaadin/common/data/IAlreadyLoadedItemIdProvider.java
new file mode 100644
index 0000000..a85d68f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.common/src/org/eclipse/osbp/runtime/web/vaadin/common/data/IAlreadyLoadedItemIdProvider.java
@@ -0,0 +1,37 @@
+/**
+ * Copyright (c) 2011, 2015 - Lunifera GmbH (Gross Enzersdorf, Austria), Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Florian Pirchner - Initial implementation
+ */
+package org.eclipse.osbp.runtime.web.vaadin.common.data;
+
+import java.util.List;
+
+/**
+ * The Interface IAlreadyLoadedItemIdProvider.
+ *
+ * @param <BEANTYPE>
+ * the generic type
+ */
+public interface IAlreadyLoadedItemIdProvider<BEANTYPE> {
+
+ /**
+ * Returns allready laoded item ids. But does not load new ONE from
+ * database.
+ *
+ * @return
+ */
+ public abstract List<BEANTYPE> getAlreadyLoadedItemIds();
+
+ /**
+ * Removes the itemId from the cache.
+ *
+ * @param itemId
+ */
+ void disposeCacheFor(Object itemId);
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.runtime.web.vaadin.common/src/org/eclipse/osbp/runtime/web/vaadin/common/data/IBeanSearchService.java b/org.eclipse.osbp.runtime.web.vaadin.common/src/org/eclipse/osbp/runtime/web/vaadin/common/data/IBeanSearchService.java
index c30e38e..11abf63 100644
--- a/org.eclipse.osbp.runtime.web.vaadin.common/src/org/eclipse/osbp/runtime/web/vaadin/common/data/IBeanSearchService.java
+++ b/org.eclipse.osbp.runtime.web.vaadin.common/src/org/eclipse/osbp/runtime/web/vaadin/common/data/IBeanSearchService.java
@@ -9,12 +9,11 @@
* Florian Pirchner - Initial implementation
*/
-
package org.eclipse.osbp.runtime.web.vaadin.common.data;
import java.util.List;
-import org.eclipse.osbp.dsl.dto.lib.services.SortOrder;
+import org.eclipse.osbp.runtime.common.filter.SortOrder;
import com.vaadin.data.Container.Filter;
@@ -73,8 +72,7 @@
* the sort order
* @return the previous bean
*/
- BEAN getPreviousBean(BEAN bean, List<Filter> filters,
- SortOrder sortOrder);
+ BEAN getPreviousBean(BEAN bean, List<Filter> filters, SortOrder sortOrder);
/**
* Returns the first bean for the given filter and the sortOrder.
@@ -140,6 +138,14 @@
int indexOf(BEAN bean, List<Filter> filters, SortOrder sortOrder);
/**
+ * Loads the bean from the dto service.
+ *
+ * @param bean
+ * @return
+ */
+ BEAN refresh(BEAN bean);
+
+ /**
* Returns the bean for the given index, filter and sortOrder.
*
* @param index
@@ -166,7 +172,6 @@
* the sort order
* @return the beans by index
*/
- List<BEAN> getBeansByIndex(int startIndex, int numberOfItems,
- List<Filter> filters, SortOrder sortOrder);
+ List<BEAN> getBeansByIndex(int startIndex, int numberOfItems, List<Filter> filters, SortOrder sortOrder);
}
diff --git a/org.eclipse.osbp.runtime.web.vaadin.common/src/org/eclipse/osbp/runtime/web/vaadin/common/data/IBeanToUniqueHashIdProvider.java b/org.eclipse.osbp.runtime.web.vaadin.common/src/org/eclipse/osbp/runtime/web/vaadin/common/data/IBeanToUniqueHashIdProvider.java
new file mode 100644
index 0000000..ca7fbaf
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.common/src/org/eclipse/osbp/runtime/web/vaadin/common/data/IBeanToUniqueHashIdProvider.java
@@ -0,0 +1,29 @@
+/**
+ * Copyright (c) 2011, 2015 - Lunifera GmbH (Gross Enzersdorf, Austria), Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Florian Pirchner - Initial implementation
+ */
+package org.eclipse.osbp.runtime.web.vaadin.common.data;
+
+/**
+ * The Interface IBeanToUniqueHashIdProvider.
+ *
+ * @param <BEANTYPE>
+ * the generic type
+ */
+public interface IBeanToUniqueHashIdProvider<BEANTYPE> {
+
+ /**
+ * Returns a unique hashId. This hashId is not related to
+ * {@link Object#hashCode()}.
+ *
+ * @return
+ */
+ public abstract String getUniqueHashId(BEANTYPE bean);
+
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.runtime.web.vaadin.common/src/org/eclipse/osbp/runtime/web/vaadin/common/data/StatefulDelegatingDtoSearchService.java b/org.eclipse.osbp.runtime.web.vaadin.common/src/org/eclipse/osbp/runtime/web/vaadin/common/data/StatefulDelegatingDtoSearchService.java
index d88dd0a..f94556b 100644
--- a/org.eclipse.osbp.runtime.web.vaadin.common/src/org/eclipse/osbp/runtime/web/vaadin/common/data/StatefulDelegatingDtoSearchService.java
+++ b/org.eclipse.osbp.runtime.web.vaadin.common/src/org/eclipse/osbp/runtime/web/vaadin/common/data/StatefulDelegatingDtoSearchService.java
@@ -12,11 +12,12 @@
import java.util.List;
-import org.eclipse.osbp.dsl.dto.lib.services.IDTOService;
-import org.eclipse.osbp.dsl.dto.lib.services.IQuery;
-import org.eclipse.osbp.dsl.dto.lib.services.Query;
-import org.eclipse.osbp.dsl.dto.lib.services.SortOrder;
-import org.eclipse.osbp.dsl.dto.lib.services.filters.ILFilter;
+import org.eclipse.osbp.jpa.services.Query;
+import org.eclipse.osbp.runtime.common.annotations.DtoUtils;
+import org.eclipse.osbp.runtime.common.filter.IDTOService;
+import org.eclipse.osbp.runtime.common.filter.ILFilter;
+import org.eclipse.osbp.runtime.common.filter.IQuery;
+import org.eclipse.osbp.runtime.common.filter.SortOrder;
import org.eclipse.osbp.runtime.web.vaadin.common.services.filter.LFilterConverter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -24,18 +25,15 @@
import com.vaadin.data.Container.Filter;
import com.vaadin.data.util.filter.And;
-public class StatefulDelegatingDtoSearchService<BEAN> implements
- IBeanSearchService<BEAN> {
+public class StatefulDelegatingDtoSearchService<BEAN> implements IBeanSearchService<BEAN> {
- private static final Logger LOGGER = LoggerFactory
- .getLogger(StatefulDelegatingDtoSearchService.class);
+ private static final Logger LOGGER = LoggerFactory.getLogger(StatefulDelegatingDtoSearchService.class);
private final LFilterConverter converter = new LFilterConverter();
private final IDTOService<BEAN> delegate;
private final Class<BEAN> type;
- public StatefulDelegatingDtoSearchService(IDTOService<BEAN> delegate,
- Class<BEAN> type) {
+ public StatefulDelegatingDtoSearchService(IDTOService<BEAN> delegate, Class<BEAN> type) {
this.delegate = delegate;
this.type = type;
@@ -104,8 +102,7 @@
}
@Override
- public BEAN getPreviousBean(BEAN bean, List<Filter> filters,
- SortOrder sortOrder) {
+ public BEAN getPreviousBean(BEAN bean, List<Filter> filters, SortOrder sortOrder) {
if (!checkDelegate()) {
return null;
}
@@ -129,8 +126,7 @@
}
@Override
- public boolean isFirstBean(BEAN bean, List<Filter> filters,
- SortOrder sortOrder) {
+ public boolean isFirstBean(BEAN bean, List<Filter> filters, SortOrder sortOrder) {
if (!checkDelegate()) {
return false;
}
@@ -138,8 +134,7 @@
}
@Override
- public boolean isLastBean(BEAN bean, List<Filter> filters,
- SortOrder sortOrder) {
+ public boolean isLastBean(BEAN bean, List<Filter> filters, SortOrder sortOrder) {
if (!checkDelegate()) {
return false;
}
@@ -155,8 +150,7 @@
}
@Override
- public BEAN getBeanByIndex(int index, List<Filter> filters,
- SortOrder sortOrder) {
+ public BEAN getBeanByIndex(int index, List<Filter> filters, SortOrder sortOrder) {
if (!checkDelegate()) {
return null;
}
@@ -164,12 +158,18 @@
}
@Override
- public List<BEAN> getBeansByIndex(int startIndex, int numberOfItems,
- List<Filter> filters, SortOrder sortOrder) {
+ public List<BEAN> getBeansByIndex(int startIndex, int numberOfItems, List<Filter> filters, SortOrder sortOrder) {
if (!checkDelegate()) {
return null;
}
- return delegate.getByIndex(startIndex, numberOfItems,
- createQuery(filters, sortOrder));
+ return delegate.getByIndex(startIndex, numberOfItems, createQuery(filters, sortOrder));
+ }
+
+ @Override
+ public BEAN refresh(BEAN bean) {
+ if (bean == null) {
+ return null;
+ }
+ return delegate.get(DtoUtils.getIdValue(bean));
}
}
diff --git a/org.eclipse.osbp.runtime.web.vaadin.common/src/org/eclipse/osbp/runtime/web/vaadin/common/data/StatefulDelegatingDtoSearchServiceFactoryDelegate.java b/org.eclipse.osbp.runtime.web.vaadin.common/src/org/eclipse/osbp/runtime/web/vaadin/common/data/StatefulDelegatingDtoSearchServiceFactoryDelegate.java
index 15e8046..f2cf624 100644
--- a/org.eclipse.osbp.runtime.web.vaadin.common/src/org/eclipse/osbp/runtime/web/vaadin/common/data/StatefulDelegatingDtoSearchServiceFactoryDelegate.java
+++ b/org.eclipse.osbp.runtime.web.vaadin.common/src/org/eclipse/osbp/runtime/web/vaadin/common/data/StatefulDelegatingDtoSearchServiceFactoryDelegate.java
@@ -11,7 +11,7 @@
package org.eclipse.osbp.runtime.web.vaadin.common.data;
import org.eclipse.osbp.dsl.dto.lib.impl.DtoServiceAccess;
-import org.eclipse.osbp.dsl.dto.lib.services.IDTOService;
+import org.eclipse.osbp.runtime.common.filter.IDTOService;
import org.osgi.service.component.annotations.Component;
/**
diff --git a/org.eclipse.osbp.runtime.web.vaadin.common/src/org/eclipse/osbp/runtime/web/vaadin/common/data/StatefulInMemoryBeanSearchService.java b/org.eclipse.osbp.runtime.web.vaadin.common/src/org/eclipse/osbp/runtime/web/vaadin/common/data/StatefulInMemoryBeanSearchService.java
index cae29b2..555135d 100644
--- a/org.eclipse.osbp.runtime.web.vaadin.common/src/org/eclipse/osbp/runtime/web/vaadin/common/data/StatefulInMemoryBeanSearchService.java
+++ b/org.eclipse.osbp.runtime.web.vaadin.common/src/org/eclipse/osbp/runtime/web/vaadin/common/data/StatefulInMemoryBeanSearchService.java
@@ -13,12 +13,11 @@
import java.util.Collection;
import java.util.List;
-import org.eclipse.osbp.dsl.dto.lib.services.SortOrder;
+import org.eclipse.osbp.runtime.common.filter.SortOrder;
import com.vaadin.data.Container.Filter;
-public class StatefulInMemoryBeanSearchService<BEAN> implements
- IBeanSearchService<BEAN> {
+public class StatefulInMemoryBeanSearchService<BEAN> implements IBeanSearchService<BEAN> {
private DeepResolvingBeanItemContainer<BEAN> delegate;
@@ -54,15 +53,13 @@
}
@Override
- public BEAN getNextBean(BEAN bean, List<Filter> filters,
- SortOrder sortOrder) {
+ public BEAN getNextBean(BEAN bean, List<Filter> filters, SortOrder sortOrder) {
setupContainer(filters);
return delegate.nextItemId(bean);
}
@Override
- public BEAN getPreviousBean(BEAN bean, List<Filter> filters,
- SortOrder sortOrder) {
+ public BEAN getPreviousBean(BEAN bean, List<Filter> filters, SortOrder sortOrder) {
setupContainer(filters);
return delegate.prevItemId(bean);
}
@@ -80,15 +77,13 @@
}
@Override
- public boolean isFirstBean(BEAN bean, List<Filter> filters,
- SortOrder sortOrder) {
+ public boolean isFirstBean(BEAN bean, List<Filter> filters, SortOrder sortOrder) {
setupContainer(filters);
return delegate.isFirstId(bean);
}
@Override
- public boolean isLastBean(BEAN bean, List<Filter> filters,
- SortOrder sortOrder) {
+ public boolean isLastBean(BEAN bean, List<Filter> filters, SortOrder sortOrder) {
return delegate.isLastId(bean);
}
@@ -99,16 +94,19 @@
}
@Override
- public BEAN getBeanByIndex(int index, List<Filter> filters,
- SortOrder sortOrder) {
+ public BEAN getBeanByIndex(int index, List<Filter> filters, SortOrder sortOrder) {
setupContainer(filters);
return delegate.getIdByIndex(index);
}
@Override
- public List<BEAN> getBeansByIndex(int startIndex, int numberOfItems,
- List<Filter> filters, SortOrder sortOrder) {
+ public List<BEAN> getBeansByIndex(int startIndex, int numberOfItems, List<Filter> filters, SortOrder sortOrder) {
setupContainer(filters);
return delegate.getItemIds(startIndex, numberOfItems);
}
+
+ @Override
+ public BEAN refresh(BEAN bean) {
+ return bean;
+ }
}
diff --git a/org.eclipse.osbp.runtime.web.vaadin.common/src/org/eclipse/osbp/runtime/web/vaadin/common/data/filter/JoinFilter.java b/org.eclipse.osbp.runtime.web.vaadin.common/src/org/eclipse/osbp/runtime/web/vaadin/common/data/filter/JoinFilter.java
index 8363e5e..8d182e9 100644
--- a/org.eclipse.osbp.runtime.web.vaadin.common/src/org/eclipse/osbp/runtime/web/vaadin/common/data/filter/JoinFilter.java
+++ b/org.eclipse.osbp.runtime.web.vaadin.common/src/org/eclipse/osbp/runtime/web/vaadin/common/data/filter/JoinFilter.java
@@ -15,6 +15,8 @@
*/
package org.eclipse.osbp.runtime.web.vaadin.common.data.filter;
+import org.eclipse.osbp.runtime.common.annotations.DtoUtils;
+
import com.vaadin.data.Container.Filter;
import com.vaadin.data.Item;
import com.vaadin.data.util.filter.AbstractJunctionFilter;
@@ -61,6 +63,8 @@
*/
public boolean passesFilter(Object itemId, Item item)
throws UnsupportedOperationException {
+
+// Object nested = DtoUtils.getValue(itemId, joinProperty);
for (Filter f : getFilters()) {
if (!f.passesFilter(itemId, item)) {
return false;
diff --git a/org.eclipse.osbp.runtime.web.vaadin.common/src/org/eclipse/osbp/runtime/web/vaadin/common/services/filter/AnnotationToOSBPFilterConverter.java b/org.eclipse.osbp.runtime.web.vaadin.common/src/org/eclipse/osbp/runtime/web/vaadin/common/services/filter/AnnotationToOSBPFilterConverter.java
index 0e0b98c..f741bba 100644
--- a/org.eclipse.osbp.runtime.web.vaadin.common/src/org/eclipse/osbp/runtime/web/vaadin/common/services/filter/AnnotationToOSBPFilterConverter.java
+++ b/org.eclipse.osbp.runtime.web.vaadin.common/src/org/eclipse/osbp/runtime/web/vaadin/common/services/filter/AnnotationToOSBPFilterConverter.java
@@ -13,12 +13,12 @@
import java.util.HashSet;
import java.util.Set;
-import org.eclipse.osbp.dsl.dto.lib.services.filters.ILFilter;
-import org.eclipse.osbp.dsl.dto.lib.services.filters.LAnd;
-import org.eclipse.osbp.dsl.dto.lib.services.filters.LCompare;
-import org.eclipse.osbp.dsl.dto.lib.services.filters.LNot;
+import org.eclipse.osbp.jpa.services.filters.LAnd;
+import org.eclipse.osbp.jpa.services.filters.LCompare;
+import org.eclipse.osbp.jpa.services.filters.LNot;
import org.eclipse.osbp.runtime.common.annotations.TargetEnumConstraint;
import org.eclipse.osbp.runtime.common.annotations.TargetEnumConstraints;
+import org.eclipse.osbp.runtime.common.filter.ILFilter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/org.eclipse.osbp.runtime.web.vaadin.common/src/org/eclipse/osbp/runtime/web/vaadin/common/services/filter/LFilterConverter.xtend b/org.eclipse.osbp.runtime.web.vaadin.common/src/org/eclipse/osbp/runtime/web/vaadin/common/services/filter/LFilterConverter.xtend
index 019ec19..97e2a01 100644
--- a/org.eclipse.osbp.runtime.web.vaadin.common/src/org/eclipse/osbp/runtime/web/vaadin/common/services/filter/LFilterConverter.xtend
+++ b/org.eclipse.osbp.runtime.web.vaadin.common/src/org/eclipse/osbp/runtime/web/vaadin/common/services/filter/LFilterConverter.xtend
@@ -19,15 +19,15 @@
import com.vaadin.data.util.filter.Not
import com.vaadin.data.util.filter.Or
import com.vaadin.data.util.filter.SimpleStringFilter
-import org.eclipse.osbp.dsl.dto.lib.services.filters.ILFilter
-import org.eclipse.osbp.dsl.dto.lib.services.filters.LAnd
-import org.eclipse.osbp.dsl.dto.lib.services.filters.LBetween
-import org.eclipse.osbp.dsl.dto.lib.services.filters.LCompare
-import org.eclipse.osbp.dsl.dto.lib.services.filters.LIsNull
-import org.eclipse.osbp.dsl.dto.lib.services.filters.LLike
-import org.eclipse.osbp.dsl.dto.lib.services.filters.LNot
-import org.eclipse.osbp.dsl.dto.lib.services.filters.LOr
-import org.eclipse.osbp.dsl.dto.lib.services.filters.LSimpleStringFilter
+import org.eclipse.osbp.jpa.services.filters.LAnd
+import org.eclipse.osbp.jpa.services.filters.LBetween
+import org.eclipse.osbp.jpa.services.filters.LCompare
+import org.eclipse.osbp.jpa.services.filters.LIsNull
+import org.eclipse.osbp.jpa.services.filters.LLike
+import org.eclipse.osbp.jpa.services.filters.LNot
+import org.eclipse.osbp.jpa.services.filters.LOr
+import org.eclipse.osbp.jpa.services.filters.LSimpleStringFilter
+import org.eclipse.osbp.runtime.common.filter.ILFilter
/**
* This converter will convert from Vaadin-Filters to OSBP-Filters.
diff --git a/org.eclipse.osbp.runtime.web.vaadin.common/xtend-gen/.gitignore b/org.eclipse.osbp.runtime.web.vaadin.common/xtend-gen/.gitignore
new file mode 100644
index 0000000..8764bd7
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.common/xtend-gen/.gitignore
@@ -0,0 +1 @@
+/.LFilterConverter.xtendbin
diff --git a/org.eclipse.osbp.runtime.web.vaadin.common/xtend-gen/org/eclipse/osbp/runtime/web/vaadin/common/services/filter/.gitignore b/org.eclipse.osbp.runtime.web.vaadin.common/xtend-gen/org/eclipse/osbp/runtime/web/vaadin/common/services/filter/.gitignore
new file mode 100644
index 0000000..f9a4a5f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.common/xtend-gen/org/eclipse/osbp/runtime/web/vaadin/common/services/filter/.gitignore
@@ -0,0 +1 @@
+/LFilterConverter.java
diff --git a/org.eclipse.osbp.runtime.web.vaadin.common/xtend-gen/org/eclipse/osbp/runtime/web/vaadin/common/services/filter/LFilterConverter.java b/org.eclipse.osbp.runtime.web.vaadin.common/xtend-gen/org/eclipse/osbp/runtime/web/vaadin/common/services/filter/LFilterConverter.java
deleted file mode 100644
index f7a75d9..0000000
--- a/org.eclipse.osbp.runtime.web.vaadin.common/xtend-gen/org/eclipse/osbp/runtime/web/vaadin/common/services/filter/LFilterConverter.java
+++ /dev/null
@@ -1,171 +0,0 @@
-/**
- * Copyright (c) 2011, 2015 - Lunifera GmbH (Gross Enzersdorf, Austria), Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Florian Pirchner - Initial implementation
- */
-package org.eclipse.osbp.runtime.web.vaadin.common.services.filter;
-
-import com.vaadin.data.Container;
-import com.vaadin.data.util.filter.And;
-import com.vaadin.data.util.filter.Between;
-import com.vaadin.data.util.filter.Compare;
-import com.vaadin.data.util.filter.IsNull;
-import com.vaadin.data.util.filter.Like;
-import com.vaadin.data.util.filter.Not;
-import com.vaadin.data.util.filter.Or;
-import com.vaadin.data.util.filter.SimpleStringFilter;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.function.Consumer;
-import org.eclipse.osbp.dsl.dto.lib.services.filters.ILFilter;
-import org.eclipse.osbp.dsl.dto.lib.services.filters.LAnd;
-import org.eclipse.osbp.dsl.dto.lib.services.filters.LBetween;
-import org.eclipse.osbp.dsl.dto.lib.services.filters.LCompare;
-import org.eclipse.osbp.dsl.dto.lib.services.filters.LIsNull;
-import org.eclipse.osbp.dsl.dto.lib.services.filters.LLike;
-import org.eclipse.osbp.dsl.dto.lib.services.filters.LNot;
-import org.eclipse.osbp.dsl.dto.lib.services.filters.LOr;
-import org.eclipse.osbp.dsl.dto.lib.services.filters.LSimpleStringFilter;
-import org.eclipse.xtext.xbase.lib.CollectionLiterals;
-import org.eclipse.xtext.xbase.lib.Conversions;
-
-/**
- * This converter will convert from Vaadin-Filters to OSBP-Filters.
- * OSBP-Filters are more common and used by the data services. For instance
- * JPAServices to access data.
- */
-@SuppressWarnings("all")
-public class LFilterConverter {
- protected ILFilter _convert(final Container.Filter vFilter) {
- throw new UnsupportedOperationException(("Not a valid type: " + vFilter));
- }
-
- protected ILFilter _convert(final And vFilter) {
- final ArrayList<ILFilter> children = CollectionLiterals.<ILFilter>newArrayList();
- Collection<Container.Filter> _filters = vFilter.getFilters();
- final Consumer<Container.Filter> _function = new Consumer<Container.Filter>() {
- public void accept(final Container.Filter it) {
- ILFilter _convert = LFilterConverter.this.convert(it);
- children.add(_convert);
- }
- };
- _filters.forEach(_function);
- final LAnd result = new LAnd(((ILFilter[])Conversions.unwrapArray(children, ILFilter.class)));
- return result;
- }
-
- protected ILFilter _convert(final Or vFilter) {
- final ArrayList<ILFilter> children = CollectionLiterals.<ILFilter>newArrayList();
- Collection<Container.Filter> _filters = vFilter.getFilters();
- final Consumer<Container.Filter> _function = new Consumer<Container.Filter>() {
- public void accept(final Container.Filter it) {
- ILFilter _convert = LFilterConverter.this.convert(it);
- children.add(_convert);
- }
- };
- _filters.forEach(_function);
- final LOr result = new LOr(((ILFilter[])Conversions.unwrapArray(children, ILFilter.class)));
- return result;
- }
-
- protected ILFilter _convert(final Between vFilter) {
- Object _propertyId = vFilter.getPropertyId();
- Comparable<?> _startValue = vFilter.getStartValue();
- Comparable<?> _endValue = vFilter.getEndValue();
- return new LBetween(_propertyId, _startValue, _endValue);
- }
-
- protected ILFilter _convert(final Compare.Equal vFilter) {
- Object _propertyId = vFilter.getPropertyId();
- Object _value = vFilter.getValue();
- return new LCompare.Equal(_propertyId, _value);
- }
-
- protected ILFilter _convert(final Compare.Greater vFilter) {
- Object _propertyId = vFilter.getPropertyId();
- Object _value = vFilter.getValue();
- return new LCompare.Greater(_propertyId, _value);
- }
-
- protected ILFilter _convert(final Compare.GreaterOrEqual vFilter) {
- Object _propertyId = vFilter.getPropertyId();
- Object _value = vFilter.getValue();
- return new LCompare.GreaterOrEqual(_propertyId, _value);
- }
-
- protected ILFilter _convert(final Compare.Less vFilter) {
- Object _propertyId = vFilter.getPropertyId();
- Object _value = vFilter.getValue();
- return new LCompare.Less(_propertyId, _value);
- }
-
- protected ILFilter _convert(final Compare.LessOrEqual vFilter) {
- Object _propertyId = vFilter.getPropertyId();
- Object _value = vFilter.getValue();
- return new LCompare.LessOrEqual(_propertyId, _value);
- }
-
- protected ILFilter _convert(final IsNull vFilter) {
- Object _propertyId = vFilter.getPropertyId();
- return new LIsNull(_propertyId);
- }
-
- protected ILFilter _convert(final Like vFilter) {
- Object _propertyId = vFilter.getPropertyId();
- String _value = vFilter.getValue();
- return new LLike(_propertyId, _value);
- }
-
- protected ILFilter _convert(final Not vFilter) {
- Container.Filter _filter = vFilter.getFilter();
- ILFilter _convert = this.convert(_filter);
- return new LNot(_convert);
- }
-
- protected ILFilter _convert(final SimpleStringFilter vFilter) {
- Object _propertyId = vFilter.getPropertyId();
- String _filterString = vFilter.getFilterString();
- boolean _isIgnoreCase = vFilter.isIgnoreCase();
- boolean _isOnlyMatchPrefix = vFilter.isOnlyMatchPrefix();
- return new LSimpleStringFilter(_propertyId, _filterString, _isIgnoreCase, _isOnlyMatchPrefix);
- }
-
- public ILFilter convert(final Container.Filter vFilter) {
- if (vFilter instanceof And) {
- return _convert((And)vFilter);
- } else if (vFilter instanceof Compare.Equal) {
- return _convert((Compare.Equal)vFilter);
- } else if (vFilter instanceof Compare.Greater) {
- return _convert((Compare.Greater)vFilter);
- } else if (vFilter instanceof Compare.GreaterOrEqual) {
- return _convert((Compare.GreaterOrEqual)vFilter);
- } else if (vFilter instanceof Compare.Less) {
- return _convert((Compare.Less)vFilter);
- } else if (vFilter instanceof Compare.LessOrEqual) {
- return _convert((Compare.LessOrEqual)vFilter);
- } else if (vFilter instanceof Or) {
- return _convert((Or)vFilter);
- } else if (vFilter instanceof Between) {
- return _convert((Between)vFilter);
- } else if (vFilter instanceof IsNull) {
- return _convert((IsNull)vFilter);
- } else if (vFilter instanceof Like) {
- return _convert((Like)vFilter);
- } else if (vFilter instanceof Not) {
- return _convert((Not)vFilter);
- } else if (vFilter instanceof SimpleStringFilter) {
- return _convert((SimpleStringFilter)vFilter);
- } else if (vFilter != null) {
- return _convert(vFilter);
- } else {
- throw new IllegalArgumentException("Unhandled parameter types: " +
- Arrays.<Object>asList(vFilter).toString());
- }
- }
-}
diff --git a/org.eclipse.osbp.runtime.web.vaadin.components.widget/.classpath b/org.eclipse.osbp.runtime.web.vaadin.components.widget/.classpath
new file mode 100644
index 0000000..43b9862
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.components.widget/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/org.eclipse.osbp.runtime.web.vaadin.components.widget/.gitignore b/org.eclipse.osbp.runtime.web.vaadin.components.widget/.gitignore
new file mode 100644
index 0000000..a882759
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.components.widget/.gitignore
@@ -0,0 +1,3 @@
+/resources/
+/gwt-unitCache
+/VAADIN/*
\ No newline at end of file
diff --git a/org.eclipse.osbp.runtime.web.vaadin.components.widget/.project b/org.eclipse.osbp.runtime.web.vaadin.components.widget/.project
index b5acbae..80e3c4e 100644
--- a/org.eclipse.osbp.runtime.web.vaadin.components.widget/.project
+++ b/org.eclipse.osbp.runtime.web.vaadin.components.widget/.project
@@ -36,11 +36,6 @@
</arguments>
</buildCommand>
<buildCommand>
- <name>com.vaadin.integration.eclipse.addonStylesBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
<name>org.sonarlint.eclipse.core.sonarlintBuilder</name>
<arguments>
</arguments>
diff --git a/org.eclipse.osbp.runtime.web.vaadin.components.widget/.settings/com.vaadin.integration.eclipse.prefs b/org.eclipse.osbp.runtime.web.vaadin.components.widget/.settings/com.vaadin.integration.eclipse.prefs
new file mode 100644
index 0000000..0904e44
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.components.widget/.settings/com.vaadin.integration.eclipse.prefs
@@ -0,0 +1,2 @@
+com.vaadin.integration.eclipse.mavenLatestVersionsUpgrade=["7.7.7"]
+eclipse.preferences.version=1
diff --git a/org.eclipse.osbp.runtime.web.vaadin.components.widget/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.runtime.web.vaadin.components.widget/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.components.widget/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.runtime.web.vaadin.components.widget/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.osbp.runtime.web.vaadin.components.widget/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..0c68a61
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.components.widget/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/org.eclipse.osbp.runtime.web.vaadin.components.widget/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.runtime.web.vaadin.components.widget/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.components.widget/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.runtime.web.vaadin.components.widget/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.runtime.web.vaadin.components.widget/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..19e3115
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.components.widget/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,11 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+BuilderConfiguration.is_project_specific=true
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.emf-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.runtime.web.vaadin.components.widget/META-INF/MANIFEST.MF b/org.eclipse.osbp.runtime.web.vaadin.components.widget/META-INF/MANIFEST.MF
index 7f6bf3a..47d9571 100644
--- a/org.eclipse.osbp.runtime.web.vaadin.components.widget/META-INF/MANIFEST.MF
+++ b/org.eclipse.osbp.runtime.web.vaadin.components.widget/META-INF/MANIFEST.MF
@@ -9,8 +9,9 @@
Bundle-ActivationPolicy: lazy
Bundle-Vendor: Eclipse OSBP
Import-Package: org.slf4j;version="1.7.2"
-Require-Bundle: com.vaadin.client;bundle-version="[7.5.7,7.7.0)",
- com.vaadin.server;bundle-version="[7.5.7,7.7.0)",
- com.vaadin.shared;bundle-version="[7.5.7,7.7.0)",
- org.jsoup;bundle-version="1.7.2"
+Require-Bundle: com.vaadin.client;bundle-version="[7.7.6,7.8.0)",
+ com.vaadin.server;bundle-version="[7.7.6,7.8.0)",
+ com.vaadin.shared;bundle-version="[7.7.6,7.8.0)",
+ org.jsoup;bundle-version="1.8.3",
+ org.eclipse.osbp.dependencies.bundle.vaadin.external.gwt;bundle-version="[2.7.0,2.7.1)"
OSBP-ECView-I18nProvider:
diff --git a/org.eclipse.osbp.runtime.web.vaadin.components.widget/pom-compileWidgetset.xml b/org.eclipse.osbp.runtime.web.vaadin.components.widget/pom-compileWidgetset.xml
index 2f7f167..17ec0c8 100644
--- a/org.eclipse.osbp.runtime.web.vaadin.components.widget/pom-compileWidgetset.xml
+++ b/org.eclipse.osbp.runtime.web.vaadin.components.widget/pom-compileWidgetset.xml
@@ -8,7 +8,6 @@
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
- <vaadin.version>7.5.7</vaadin.version>
</properties>
<dependencies>
diff --git a/org.eclipse.osbp.runtime.web.vaadin.components.widget/pom.xml b/org.eclipse.osbp.runtime.web.vaadin.components.widget/pom.xml
index 50b27ab..c26e149 100644
--- a/org.eclipse.osbp.runtime.web.vaadin.components.widget/pom.xml
+++ b/org.eclipse.osbp.runtime.web.vaadin.components.widget/pom.xml
@@ -7,10 +7,11 @@
<!--# http://www.eclipse.org/legal/epl-v10.html -->
<!--# -->
<!--# Contributors: -->
-<!--# Christophe Loetz (Loetz GmbH&Co.KG) - initial API and implementation -->
+<!--# Christophe Loetz (Loetz GmbH&Co.KG) - initial API and implementation -->
<!--#======================================================================= -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.eclipse.osbp.runtime.web</groupId>
@@ -26,7 +27,6 @@
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
- <vaadin.version>7.5.7</vaadin.version>
</properties>
<dependencies>
@@ -56,12 +56,6 @@
</dependency>
<dependency>
<groupId>com.vaadin</groupId>
- <artifactId>vaadin-shared-deps</artifactId>
- <scope>provided</scope>
- <version>1.0.2</version>
- </dependency>
- <dependency>
- <groupId>com.vaadin</groupId>
<artifactId>vaadin-client-compiler</artifactId>
<scope>provided</scope>
<version>${vaadin.version}</version>
@@ -82,6 +76,11 @@
<version>2.5</version>
<scope>provided</scope>
</dependency>
+ <dependency>
+ <groupId>org.eclipse.osbp.dependencies</groupId>
+ <artifactId>org.eclipse.osbp.dependencies.bundle.vaadin.external.gwt</artifactId>
+ <version>2.7.0-SNAPSHOT</version>
+ </dependency>
</dependencies>
<build>
@@ -196,7 +195,7 @@
</goals>
</pluginExecutionFilter>
<action>
- <ignore/>
+ <ignore />
</action>
</pluginExecution>
<pluginExecution>
@@ -209,7 +208,7 @@
</goals>
</pluginExecutionFilter>
<action>
- <ignore/>
+ <ignore />
</action>
</pluginExecution>
</pluginExecutions>
diff --git a/org.eclipse.osbp.runtime.web.vaadin.components.widget/src/license/THIRD-PARTY.properties b/org.eclipse.osbp.runtime.web.vaadin.components.widget/src/license/THIRD-PARTY.properties
new file mode 100644
index 0000000..9af7a58
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.components.widget/src/license/THIRD-PARTY.properties
@@ -0,0 +1,31 @@
+# Generated by org.codehaus.mojo.license.AddThirdPartyMojo
+#-------------------------------------------------------------------------------
+# Already used licenses in project :
+# - Apache License, Version 2.0
+# - BSD 3-Clause License
+# - BSD License
+# - BSD style
+# - COMMON DEVELOPMENT AND DISTRIBUTION LICENSE
+# (CDDL)
+# Version
+# 1.0
+# - Common Public License Version 1.0
+# - Eclipse Public License - v 1.0
+# - Indiana University Extreme! Lab Software
+# License,
+# vesion 1.1.1
+# - Lesser General Public License (LPGL)
+# - Lesser General Public License (LPGL) v 2.1
+# - MIT License
+# - The Apache Software License, Version 2.0
+# - The MIT License
+#-------------------------------------------------------------------------------
+# Please fill the missing licenses for dependencies :
+#
+#
+#Wed May 21 17:53:35 BRT 2014
+ant--ant-launcher--1.6.5=Apache License, Version 2.0
+commons-collections--commons-collections--3.1=Apache License, Version 2.0
+javax.servlet--servlet-api--2.5=Common Development and Distribution license - v1.0.1
+org.jdesktop--swing-worker--1.1=Lesser General Public License (LGPL)
+
diff --git a/org.eclipse.osbp.runtime.web.vaadin.components/.classpath b/org.eclipse.osbp.runtime.web.vaadin.components/.classpath
new file mode 100644
index 0000000..43b9862
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.components/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/org.eclipse.osbp.runtime.web.vaadin.components/.gitignore b/org.eclipse.osbp.runtime.web.vaadin.components/.gitignore
new file mode 100644
index 0000000..a882759
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.components/.gitignore
@@ -0,0 +1,3 @@
+/resources/
+/gwt-unitCache
+/VAADIN/*
\ No newline at end of file
diff --git a/org.eclipse.osbp.runtime.web.vaadin.components/.project b/org.eclipse.osbp.runtime.web.vaadin.components/.project
index aa9bc6a..1ff68ab 100644
--- a/org.eclipse.osbp.runtime.web.vaadin.components/.project
+++ b/org.eclipse.osbp.runtime.web.vaadin.components/.project
@@ -36,11 +36,6 @@
</arguments>
</buildCommand>
<buildCommand>
- <name>com.vaadin.integration.eclipse.addonStylesBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
<name>org.sonarlint.eclipse.core.sonarlintBuilder</name>
<arguments>
</arguments>
diff --git a/org.eclipse.osbp.runtime.web.vaadin.components/.settings/com.vaadin.integration.eclipse.prefs b/org.eclipse.osbp.runtime.web.vaadin.components/.settings/com.vaadin.integration.eclipse.prefs
new file mode 100644
index 0000000..0904e44
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.components/.settings/com.vaadin.integration.eclipse.prefs
@@ -0,0 +1,2 @@
+com.vaadin.integration.eclipse.mavenLatestVersionsUpgrade=["7.7.7"]
+eclipse.preferences.version=1
diff --git a/org.eclipse.osbp.runtime.web.vaadin.components/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.runtime.web.vaadin.components/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.components/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.runtime.web.vaadin.components/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.osbp.runtime.web.vaadin.components/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..a698e59
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.components/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/org.eclipse.osbp.runtime.web.vaadin.components/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.runtime.web.vaadin.components/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.components/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.runtime.web.vaadin.components/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.runtime.web.vaadin.components/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..19e3115
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.components/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,11 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+BuilderConfiguration.is_project_specific=true
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.emf-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.runtime.web.vaadin.components/META-INF/MANIFEST.MF b/org.eclipse.osbp.runtime.web.vaadin.components/META-INF/MANIFEST.MF
index e537a71..174df04 100644
--- a/org.eclipse.osbp.runtime.web.vaadin.components/META-INF/MANIFEST.MF
+++ b/org.eclipse.osbp.runtime.web.vaadin.components/META-INF/MANIFEST.MF
@@ -5,39 +5,41 @@
Bundle-Version: 0.9.0.qualifier
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Export-Package: org.eclipse.osbp.runtime.web.vaadin.components.container;version="0.9.0",
- org.eclipse.osbp.runtime.web.vaadin.components.converter;
- uses:="com.vaadin.data.util.converter";version="0.9.0",
+ org.eclipse.osbp.runtime.web.vaadin.components.converter;version="0.9.0";uses:="com.vaadin.data.util.converter",
org.eclipse.osbp.runtime.web.vaadin.components.dialogs;version="0.9.0",
- org.eclipse.osbp.runtime.web.vaadin.components.fields;
+ org.eclipse.osbp.runtime.web.vaadin.components.fields;version="0.9.0";
uses:="org.eclipse.osbp.runtime.web.vaadin.components.converter,
com.vaadin.data,
org.eclipse.osbp.runtime.web.vaadin.common.data,
com.vaadin.data.util,
- com.vaadin.ui";version="0.9.0",
- org.eclipse.osbp.runtime.web.vaadin.components.fields.search;
+ com.vaadin.ui",
+ org.eclipse.osbp.runtime.web.vaadin.components.fields.filter2,
+ org.eclipse.osbp.runtime.web.vaadin.components.fields.search;version="0.9.0";
uses:="com.vaadin.data,
org.eclipse.core.databinding,
com.vaadin.data.util.converter,
org.eclipse.osbp.runtime.web.vaadin.components.fields.search.filter,
- com.vaadin.ui";version="0.9.0",
- org.eclipse.osbp.runtime.web.vaadin.components.fields.search.filter;
- uses:="com.vaadin.data";version="0.9.0",
- org.eclipse.osbp.runtime.web.vaadin.components.validator;
- uses:="com.vaadin.data.validator";version="0.9.0"
+ com.vaadin.ui",
+ org.eclipse.osbp.runtime.web.vaadin.components.fields.search.filter;version="0.9.0";uses:="com.vaadin.data",
+ org.eclipse.osbp.runtime.web.vaadin.components.validator;version="0.9.0";uses:="com.vaadin.data.validator"
Bundle-ActivationPolicy: lazy
Bundle-Vendor: Eclipse OSBP
-Import-Package: org.apache.commons.lang,
+Import-Package: javax.annotation,
+ javax.inject,
+ org.apache.commons.lang,
+ org.eclipse.osbp.ui.api.metadata;version="0.9.0",
+ org.eclipse.osbp.ui.api.themes;version="0.9.0",
org.osgi.framework;version="1.8.0",
org.osgi.service.component;version="1.2.2",
org.osgi.service.component.annotations;version="1.2.0"
-Require-Bundle: com.vaadin.client;bundle-version="[7.5.7,7.7.0)",
- com.vaadin.server;bundle-version="[7.5.7,7.7.0)",
- com.vaadin.shared;bundle-version="[7.5.7,7.7.0)",
+Require-Bundle: com.vaadin.client;bundle-version="[7.7.6,7.8.0)",
+ com.vaadin.server;bundle-version="[7.7.6,7.8.0)",
+ com.vaadin.shared;bundle-version="[7.7.6,7.8.0)",
com.google.guava;bundle-version="[10.0.0,19.0.0)",
- org.eclipse.core.databinding;bundle-version="[1.4.1,1.5.0)",
- org.eclipse.core.databinding.beans;bundle-version="[1.2.200,1.5.0)",
- org.eclipse.core.databinding.observable;bundle-version="[1.4.1,1.5.0)",
- org.eclipse.core.databinding.property;bundle-version="[1.4.200,1.5.0)",
+ org.eclipse.core.databinding;bundle-version="[1.6.0,1.7.0)",
+ org.eclipse.core.databinding.beans;bundle-version="[1.3.100,1.4.0)",
+ org.eclipse.core.databinding.observable;bundle-version="[1.6.0,1.7.0)",
+ org.eclipse.core.databinding.property;bundle-version="[1.6.0,1.7.0)",
org.eclipse.osbp.runtime.common;bundle-version="[0.9.0,0.10.0)",
org.eclipse.osbp.runtime.web.vaadin.databinding;bundle-version="[0.9.0,0.10.0)",
org.eclipse.osbp.runtime.web.vaadin.common;bundle-version="[0.9.0,0.10.0)",
@@ -46,6 +48,10 @@
org.eclipse.osbp.ecview.core.common;bundle-version="[0.9.0,0.10.0)",
org.eclipse.osbp.runtime.web.vaadin.components.widget;bundle-version="[0.9.0,0.10.0)",
org.jsoup;bundle-version="1.7.2",
- org.slf4j.api;bundle-version="1.7.2"
+ org.slf4j.api;bundle-version="1.7.2",
+ org.eclipse.e4.core.contexts;bundle-version="1.5.1",
+ org.eclipse.e4.core.di;bundle-version="1.6.1",
+ org.eclipse.e4.core.di.annotations;bundle-version="1.5.0",
+ org.vaadin.addons.vaadin-grid-util
Service-Component: OSGI-INF/*.xml
OSBP-ECView-I18nProvider:
diff --git a/org.eclipse.osbp.runtime.web.vaadin.components/OSGI-INF/org.eclipse.osbp.runtime.web.vaadin.components.container.DatasourceServiceFactoryDelegate.xml b/org.eclipse.osbp.runtime.web.vaadin.components/OSGI-INF/org.eclipse.osbp.runtime.web.vaadin.components.container.DatasourceServiceFactoryDelegate.xml
index b2818ea..275bf7a 100644
--- a/org.eclipse.osbp.runtime.web.vaadin.components/OSGI-INF/org.eclipse.osbp.runtime.web.vaadin.components.container.DatasourceServiceFactoryDelegate.xml
+++ b/org.eclipse.osbp.runtime.web.vaadin.components/OSGI-INF/org.eclipse.osbp.runtime.web.vaadin.components.container.DatasourceServiceFactoryDelegate.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.eclipse.osbp.runtime.web.vaadin.components.container.DatasourceServiceFactoryDelegate">
- <implementation class="org.eclipse.osbp.runtime.web.vaadin.components.container.DatasourceServiceFactoryDelegate"/>
<service>
<provide interface="org.eclipse.osbp.runtime.web.vaadin.common.data.IBeanSearchServiceFactoryDelegate"/>
</service>
+ <implementation class="org.eclipse.osbp.runtime.web.vaadin.components.container.DatasourceServiceFactoryDelegate"/>
</scr:component>
\ No newline at end of file
diff --git a/org.eclipse.osbp.runtime.web.vaadin.components/OSGI-INF/org.eclipse.osbp.runtime.web.vaadin.components.fields.BeanSearchServiceFactory.xml b/org.eclipse.osbp.runtime.web.vaadin.components/OSGI-INF/org.eclipse.osbp.runtime.web.vaadin.components.fields.BeanSearchServiceFactory.xml
index 3ce2aaf..8383686 100644
--- a/org.eclipse.osbp.runtime.web.vaadin.components/OSGI-INF/org.eclipse.osbp.runtime.web.vaadin.components.fields.BeanSearchServiceFactory.xml
+++ b/org.eclipse.osbp.runtime.web.vaadin.components/OSGI-INF/org.eclipse.osbp.runtime.web.vaadin.components.fields.BeanSearchServiceFactory.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" enabled="true" immediate="true" name="org.eclipse.osbp.runtime.web.vaadin.components.fields.BeanSearchServiceFactory">
- <implementation class="org.eclipse.osbp.runtime.web.vaadin.components.fields.BeanSearchServiceFactory"/>
<service>
<provide interface="org.eclipse.osbp.runtime.web.vaadin.common.data.IBeanSearchServiceFactory"/>
</service>
<reference bind="addDelegate" cardinality="0..n" interface="org.eclipse.osbp.runtime.web.vaadin.common.data.IBeanSearchServiceFactoryDelegate" name="Delegate" policy="dynamic" unbind="removeDelegate"/>
+ <implementation class="org.eclipse.osbp.runtime.web.vaadin.components.fields.BeanSearchServiceFactory"/>
</scr:component>
\ No newline at end of file
diff --git a/org.eclipse.osbp.runtime.web.vaadin.components/src/license/THIRD-PARTY.properties b/org.eclipse.osbp.runtime.web.vaadin.components/src/license/THIRD-PARTY.properties
new file mode 100644
index 0000000..9af7a58
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.components/src/license/THIRD-PARTY.properties
@@ -0,0 +1,31 @@
+# Generated by org.codehaus.mojo.license.AddThirdPartyMojo
+#-------------------------------------------------------------------------------
+# Already used licenses in project :
+# - Apache License, Version 2.0
+# - BSD 3-Clause License
+# - BSD License
+# - BSD style
+# - COMMON DEVELOPMENT AND DISTRIBUTION LICENSE
+# (CDDL)
+# Version
+# 1.0
+# - Common Public License Version 1.0
+# - Eclipse Public License - v 1.0
+# - Indiana University Extreme! Lab Software
+# License,
+# vesion 1.1.1
+# - Lesser General Public License (LPGL)
+# - Lesser General Public License (LPGL) v 2.1
+# - MIT License
+# - The Apache Software License, Version 2.0
+# - The MIT License
+#-------------------------------------------------------------------------------
+# Please fill the missing licenses for dependencies :
+#
+#
+#Wed May 21 17:53:35 BRT 2014
+ant--ant-launcher--1.6.5=Apache License, Version 2.0
+commons-collections--commons-collections--3.1=Apache License, Version 2.0
+javax.servlet--servlet-api--2.5=Common Development and Distribution license - v1.0.1
+org.jdesktop--swing-worker--1.1=Lesser General Public License (LGPL)
+
diff --git a/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/dialogs/AcceptDeleteDialog.java b/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/dialogs/AcceptDeleteDialog.java
index d0f98d5..acf6697 100644
--- a/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/dialogs/AcceptDeleteDialog.java
+++ b/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/dialogs/AcceptDeleteDialog.java
@@ -12,8 +12,9 @@
import java.util.Locale;
-import org.eclipse.osbp.runtime.common.i18n.II18nService;
-import org.eclipse.osbp.runtime.web.vaadin.common.resource.IResourceProvider;
+import org.eclipse.osbp.ui.api.metadata.IDSLMetadataService;
+import org.eclipse.osbp.ui.api.themes.IThemeResourceService;
+import org.eclipse.osbp.ui.api.themes.IThemeResourceService.ThemeResourceType;
import com.vaadin.ui.UI;
import com.vaadin.ui.Window;
@@ -23,40 +24,31 @@
*/
public class AcceptDeleteDialog extends OptionsDialog {
- public static void showDialog(II18nService service,
- IResourceProvider resourceProvider, Runnable onDelete, Runnable onCancel) {
+ public static void showDialog(IDSLMetadataService service, IThemeResourceService themeResource, Runnable onDelete,
+ Runnable onCancel) {
if (service == null) {
throw new NullPointerException("Please pass an i18nService");
}
Locale locale = UI.getCurrent().getLocale();
- String dialogTitle = service.getValue(
- IDialogI18nKeys.ACCEPT_DELETE_DIALOG_TITLE, locale);
- String dialogMessage = service.getValue(
- IDialogI18nKeys.ACCEPT_DELETE_DIALOG_MESSAGE, locale);
- String dialogDescription = service.getValue(
- IDialogI18nKeys.ACCEPT_DELETE_DIALOG_DESCRIPTION, locale);
- String dialogIcon = service.getValue(
- IDialogI18nKeys.ACCEPT_DELETE_DIALOG_ICON, locale);
- String optionDeleteCaption = service.getValue(
- IDialogI18nKeys.ACCEPT_DELETE__DIALOG_OPTION__DELETE_CAPTION,
- locale);
- String optionDeleteDescription = service
- .getValue(
- IDialogI18nKeys.ACCEPT_DELETE__DIALOG_OPTION__DELETE_DESCRIPTION,
- locale);
- String optionDeleteIcon = service.getValue(
- IDialogI18nKeys.ACCEPT_DELETE__DIALOG_OPTION__DELETE_ICON,
- locale);
- String optionCancelCaption = service.getValue(
- IDialogI18nKeys.DIALOG_OPTION__CANCEL_CAPTION, locale);
- String optionCancelDescription = service.getValue(
- IDialogI18nKeys.DIALOG_OPTION__CANCEL_DESCRIPTION, locale);
- String optionCancelIcon = service.getValue(
- IDialogI18nKeys.DIALOG_OPTION__CANCEL_ICON, locale);
+ String dialogTitle = service.translate(locale.toLanguageTag(), IDialogI18nKeys.ACCEPT_DELETE_DIALOG_TITLE);
+ String dialogMessage = service.translate(locale.toLanguageTag(), IDialogI18nKeys.ACCEPT_DELETE_DIALOG_MESSAGE);
+ String dialogDescription = service.translate(locale.toLanguageTag(),
+ IDialogI18nKeys.ACCEPT_DELETE_DIALOG_DESCRIPTION);
+ String dialogIcon = IDialogI18nKeys.ACCEPT_DELETE_DIALOG_ICON;
+ String optionDeleteCaption = service.translate(locale.toLanguageTag(),
+ IDialogI18nKeys.ACCEPT_DELETE__DIALOG_OPTION__DELETE_CAPTION);
+ String optionDeleteDescription = service.translate(locale.toLanguageTag(),
+ IDialogI18nKeys.ACCEPT_DELETE__DIALOG_OPTION__DELETE_DESCRIPTION);
+ String optionDeleteIcon = IDialogI18nKeys.ACCEPT_DELETE__DIALOG_OPTION__DELETE_ICON;
+ String optionCancelCaption = service.translate(locale.toLanguageTag(),
+ IDialogI18nKeys.DIALOG_OPTION__CANCEL_CAPTION);
+ String optionCancelDescription = service.translate(locale.toLanguageTag(),
+ IDialogI18nKeys.DIALOG_OPTION__CANCEL_DESCRIPTION);
+ String optionCancelIcon = IDialogI18nKeys.DIALOG_OPTION__CANCEL_ICON;
- DialogConfig config = new DialogConfig(dialogTitle, dialogMessage,
- dialogDescription, createResource(dialogIcon, resourceProvider)) {
+ DialogConfig config = new DialogConfig(dialogTitle, dialogMessage, dialogDescription,
+ themeResource.getThemeResource(dialogIcon, ThemeResourceType.ICON)) {
@Override
public void config(Window window) {
super.config(window);
@@ -66,11 +58,11 @@
}
};
- AcceptDeleteDialog dialog = new AcceptDeleteDialog(config, new Option(
- optionCancelCaption, optionCancelDescription, createResource(
- optionCancelIcon, resourceProvider), onCancel), new Option(
- optionDeleteCaption, optionDeleteDescription, createResource(
- optionDeleteIcon, resourceProvider), onDelete));
+ AcceptDeleteDialog dialog = new AcceptDeleteDialog(config,
+ new Option(optionCancelCaption, optionCancelDescription,
+ themeResource.getThemeResource(optionCancelIcon, ThemeResourceType.ICON), onCancel),
+ new Option(optionDeleteCaption, optionDeleteDescription,
+ themeResource.getThemeResource(optionDeleteIcon, ThemeResourceType.ICON), onDelete));
dialog.open();
}
diff --git a/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/dialogs/AcceptLoosingDataDialog.java b/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/dialogs/AcceptLoosingDataDialog.java
index 9d77238..21f38c2 100644
--- a/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/dialogs/AcceptLoosingDataDialog.java
+++ b/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/dialogs/AcceptLoosingDataDialog.java
@@ -12,8 +12,9 @@
import java.util.Locale;
-import org.eclipse.osbp.runtime.common.i18n.II18nService;
-import org.eclipse.osbp.runtime.web.vaadin.common.resource.IResourceProvider;
+import org.eclipse.osbp.ui.api.metadata.IDSLMetadataService;
+import org.eclipse.osbp.ui.api.themes.IThemeResourceService;
+import org.eclipse.osbp.ui.api.themes.IThemeResourceService.ThemeResourceType;
import com.vaadin.ui.UI;
import com.vaadin.ui.Window;
@@ -23,41 +24,33 @@
*/
public class AcceptLoosingDataDialog extends OptionsDialog {
- public static void showDialog(II18nService service,
- IResourceProvider resourceProvider, Runnable onDelete,
+ public static void showDialog(IDSLMetadataService service, IThemeResourceService themeResource, Runnable onDelete,
Runnable onCancel) {
if (service == null) {
throw new NullPointerException("Please pass an i18nService");
}
Locale locale = UI.getCurrent().getLocale();
- String dialogTitle = service.getValue(
- IDialogI18nKeys.ACCEPT_LOOSING_DATA_DIALOG_TITLE, locale);
- String dialogMessage = service.getValue(
- IDialogI18nKeys.ACCEPT_LOOSING_DATA_DIALOG_MESSAGE, locale);
- String dialogDescription = service.getValue(
- IDialogI18nKeys.ACCEPT_LOOSING_DATA_DIALOG_DESCRIPTION, locale);
- String dialogIcon = service.getValue(
- IDialogI18nKeys.ACCEPT_LOOSING_DATA_DIALOG_ICON, locale);
- String optionDeleteCaption = service.getValue(
- IDialogI18nKeys.ACCEPT_LOOSING_DATA__DIALOG_OPTION__DO_CAPTION,
- locale);
- String optionDeleteDescription = service
- .getValue(
- IDialogI18nKeys.ACCEPT_LOOSING_DATA__DIALOG_OPTION__DO_DESCRIPTION,
- locale);
- String optionDeleteIcon = service.getValue(
- IDialogI18nKeys.ACCEPT_LOOSING_DATA__DIALOG_OPTION__DO_ICON,
- locale);
- String optionCancelCaption = service.getValue(
- IDialogI18nKeys.DIALOG_OPTION__CANCEL_CAPTION, locale);
- String optionCancelDescription = service.getValue(
- IDialogI18nKeys.DIALOG_OPTION__CANCEL_DESCRIPTION, locale);
- String optionCancelIcon = service.getValue(
- IDialogI18nKeys.DIALOG_OPTION__CANCEL_ICON, locale);
+ String dialogTitle = service.translate(locale.toLanguageTag(),
+ IDialogI18nKeys.ACCEPT_LOOSING_DATA_DIALOG_TITLE);
+ String dialogMessage = service.translate(locale.toLanguageTag(),
+ IDialogI18nKeys.ACCEPT_LOOSING_DATA_DIALOG_MESSAGE);
+ String dialogDescription = service.translate(locale.toLanguageTag(),
+ IDialogI18nKeys.ACCEPT_LOOSING_DATA_DIALOG_DESCRIPTION);
+ String dialogIcon = IDialogI18nKeys.ACCEPT_LOOSING_DATA_DIALOG_ICON;
+ String optionDeleteCaption = service.translate(locale.toLanguageTag(),
+ IDialogI18nKeys.ACCEPT_LOOSING_DATA__DIALOG_OPTION__DO_CAPTION);
+ String optionDeleteDescription = service.translate(locale.toLanguageTag(),
+ IDialogI18nKeys.ACCEPT_LOOSING_DATA__DIALOG_OPTION__DO_DESCRIPTION);
+ String optionDeleteIcon = IDialogI18nKeys.ACCEPT_LOOSING_DATA__DIALOG_OPTION__DO_ICON;
+ String optionCancelCaption = service.translate(locale.toLanguageTag(),
+ IDialogI18nKeys.DIALOG_OPTION__CANCEL_CAPTION);
+ String optionCancelDescription = service.translate(locale.toLanguageTag(),
+ IDialogI18nKeys.DIALOG_OPTION__CANCEL_DESCRIPTION);
+ String optionCancelIcon = IDialogI18nKeys.DIALOG_OPTION__CANCEL_ICON;
- DialogConfig config = new DialogConfig(dialogTitle, dialogMessage,
- dialogDescription, createResource(dialogIcon, resourceProvider)) {
+ DialogConfig config = new DialogConfig(dialogTitle, dialogMessage, dialogDescription,
+ themeResource.getThemeResource(dialogIcon, ThemeResourceType.ICON)) {
@Override
public void config(Window window) {
super.config(window);
@@ -69,10 +62,9 @@
AcceptLoosingDataDialog dialog = new AcceptLoosingDataDialog(config,
new Option(optionCancelCaption, optionCancelDescription,
- createResource(optionCancelIcon, resourceProvider),
- onCancel), new Option(optionDeleteCaption,
- optionDeleteDescription, createResource(
- optionDeleteIcon, resourceProvider), onDelete));
+ themeResource.getThemeResource(optionCancelIcon, ThemeResourceType.ICON), onCancel),
+ new Option(optionDeleteCaption, optionDeleteDescription,
+ themeResource.getThemeResource(optionDeleteIcon, ThemeResourceType.ICON), onDelete));
dialog.open();
}
diff --git a/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/dialogs/AcceptReloadDialog.java b/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/dialogs/AcceptReloadDialog.java
index 41dcde2..78ec840 100644
--- a/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/dialogs/AcceptReloadDialog.java
+++ b/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/dialogs/AcceptReloadDialog.java
@@ -12,8 +12,9 @@
import java.util.Locale;
-import org.eclipse.osbp.runtime.common.i18n.II18nService;
-import org.eclipse.osbp.runtime.web.vaadin.common.resource.IResourceProvider;
+import org.eclipse.osbp.ui.api.metadata.IDSLMetadataService;
+import org.eclipse.osbp.ui.api.themes.IThemeResourceService;
+import org.eclipse.osbp.ui.api.themes.IThemeResourceService.ThemeResourceType;
import com.vaadin.ui.UI;
import com.vaadin.ui.Window;
@@ -23,41 +24,31 @@
*/
public class AcceptReloadDialog extends OptionsDialog {
- public static void showDialog(II18nService service,
- IResourceProvider resourceProvider, Runnable onDelete,
+ public static void showDialog(IDSLMetadataService service, IThemeResourceService themeResource, Runnable onDelete,
Runnable onCancel) {
if (service == null) {
throw new NullPointerException("Please pass an i18nService");
}
Locale locale = UI.getCurrent().getLocale();
- String dialogTitle = service.getValue(
- IDialogI18nKeys.ACCEPT_RELOAD_DIALOG_TITLE, locale);
- String dialogMessage = service.getValue(
- IDialogI18nKeys.ACCEPT_RELOAD_DIALOG_MESSAGE, locale);
- String dialogDescription = service.getValue(
- IDialogI18nKeys.ACCEPT_RELOAD_DIALOG_DESCRIPTION, locale);
- String dialogIcon = service.getValue(
- IDialogI18nKeys.ACCEPT_RELOAD_DIALOG_ICON, locale);
- String optionDeleteCaption = service.getValue(
- IDialogI18nKeys.ACCEPT_RELOAD__DIALOG_OPTION__RELOAD_CAPTION,
- locale);
- String optionDeleteDescription = service
- .getValue(
- IDialogI18nKeys.ACCEPT_RELOAD__DIALOG_OPTION__RELOAD_DESCRIPTION,
- locale);
- String optionDeleteIcon = service.getValue(
- IDialogI18nKeys.ACCEPT_RELOAD__DIALOG_OPTION__RELOAD_ICON,
- locale);
- String optionCancelCaption = service.getValue(
- IDialogI18nKeys.DIALOG_OPTION__CANCEL_CAPTION, locale);
- String optionCancelDescription = service.getValue(
- IDialogI18nKeys.DIALOG_OPTION__CANCEL_DESCRIPTION, locale);
- String optionCancelIcon = service.getValue(
- IDialogI18nKeys.DIALOG_OPTION__CANCEL_ICON, locale);
+ String dialogTitle = service.translate(locale.toLanguageTag(), IDialogI18nKeys.ACCEPT_RELOAD_DIALOG_TITLE);
+ String dialogMessage = service.translate(locale.toLanguageTag(), IDialogI18nKeys.ACCEPT_RELOAD_DIALOG_MESSAGE);
+ String dialogDescription = service.translate(locale.toLanguageTag(),
+ IDialogI18nKeys.ACCEPT_RELOAD_DIALOG_DESCRIPTION);
+ String dialogIcon = IDialogI18nKeys.ACCEPT_RELOAD_DIALOG_ICON;
+ String optionDeleteCaption = service.translate(locale.toLanguageTag(),
+ IDialogI18nKeys.ACCEPT_RELOAD__DIALOG_OPTION__RELOAD_CAPTION);
+ String optionDeleteDescription = service.translate(locale.toLanguageTag(),
+ IDialogI18nKeys.ACCEPT_RELOAD__DIALOG_OPTION__RELOAD_DESCRIPTION);
+ String optionDeleteIcon = IDialogI18nKeys.ACCEPT_RELOAD__DIALOG_OPTION__RELOAD_ICON;
+ String optionCancelCaption = service.translate(locale.toLanguageTag(),
+ IDialogI18nKeys.DIALOG_OPTION__CANCEL_CAPTION);
+ String optionCancelDescription = service.translate(locale.toLanguageTag(),
+ IDialogI18nKeys.DIALOG_OPTION__CANCEL_DESCRIPTION);
+ String optionCancelIcon = IDialogI18nKeys.DIALOG_OPTION__CANCEL_ICON;
- DialogConfig config = new DialogConfig(dialogTitle, dialogMessage,
- dialogDescription, createResource(dialogIcon, resourceProvider)) {
+ DialogConfig config = new DialogConfig(dialogTitle, dialogMessage, dialogDescription,
+ themeResource.getThemeResource(dialogIcon, ThemeResourceType.ICON)) {
@Override
public void config(Window window) {
super.config(window);
@@ -67,12 +58,11 @@
}
};
- AcceptReloadDialog dialog = new AcceptReloadDialog(config, new Option(
- optionCancelCaption, optionCancelDescription, createResource(
- optionCancelIcon, resourceProvider), onCancel),
+ AcceptReloadDialog dialog = new AcceptReloadDialog(config,
+ new Option(optionCancelCaption, optionCancelDescription,
+ themeResource.getThemeResource(optionCancelIcon, ThemeResourceType.ICON), onCancel),
new Option(optionDeleteCaption, optionDeleteDescription,
- createResource(optionDeleteIcon, resourceProvider),
- onDelete));
+ themeResource.getThemeResource(optionDeleteIcon, ThemeResourceType.ICON), onDelete));
dialog.open();
}
diff --git a/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/dialogs/AcceptSaveDialog.java b/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/dialogs/AcceptSaveDialog.java
new file mode 100644
index 0000000..6271f7f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/dialogs/AcceptSaveDialog.java
@@ -0,0 +1,73 @@
+/**
+ * Copyright (c) 2011, 2015 - Lunifera GmbH (Gross Enzersdorf, Austria), Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Florian Pirchner - Initial implementation
+ */
+package org.eclipse.osbp.runtime.web.vaadin.components.dialogs;
+
+import java.util.Locale;
+
+import org.eclipse.osbp.ui.api.metadata.IDSLMetadataService;
+import org.eclipse.osbp.ui.api.themes.IThemeResourceService;
+import org.eclipse.osbp.ui.api.themes.IThemeResourceService.ThemeResourceType;
+
+import com.vaadin.ui.UI;
+import com.vaadin.ui.Window;
+
+/**
+ * Dialog to accept a delete operation.
+ */
+public class AcceptSaveDialog extends OptionsDialog {
+
+ public static void showDialog(IDSLMetadataService service, IThemeResourceService themeResource, Runnable onSave,
+ Runnable onCancel) {
+ if (service == null) {
+ throw new NullPointerException("Please pass an i18nService");
+ }
+
+ Locale locale = UI.getCurrent().getLocale();
+ String dialogTitle = service.translate(locale.toLanguageTag(), IDialogI18nKeys.ACCEPT_SAVE_DIALOG_TITLE);
+ String dialogMessage = service.translate(locale.toLanguageTag(), IDialogI18nKeys.ACCEPT_SAVE_DIALOG_MESSAGE);
+ String dialogDescription = service.translate(locale.toLanguageTag(),
+ IDialogI18nKeys.ACCEPT_SAVE_DIALOG_DESCRIPTION);
+ String dialogIcon = IDialogI18nKeys.ACCEPT_SAVE_DIALOG_ICON;
+ String optionSaveCaption = service.translate(locale.toLanguageTag(),
+ IDialogI18nKeys.ACCEPT_SAVE__DIALOG_OPTION__SAVE_CAPTION);
+ String optionSaveDescription = service.translate(locale.toLanguageTag(),
+ IDialogI18nKeys.ACCEPT_SAVE__DIALOG_OPTION__SAVE_DESCRIPTION);
+ String optionSaveIcon = IDialogI18nKeys.ACCEPT_SAVE__DIALOG_OPTION__SAVE_ICON;
+ String optionCancelCaption = service.translate(locale.toLanguageTag(),
+ IDialogI18nKeys.DIALOG_OPTION__CANCEL_CAPTION);
+ String optionCancelDescription = service.translate(locale.toLanguageTag(),
+ IDialogI18nKeys.DIALOG_OPTION__CANCEL_DESCRIPTION);
+ String optionCancelIcon = IDialogI18nKeys.DIALOG_OPTION__CANCEL_ICON;
+
+ DialogConfig config = new DialogConfig(dialogTitle, dialogMessage, dialogDescription,
+ themeResource.getThemeResource(dialogIcon, ThemeResourceType.ICON)) {
+ @Override
+ public void config(Window window) {
+ super.config(window);
+ window.setHeight("170px");
+ window.setWidth("350px");
+ window.center();
+ }
+ };
+
+ AcceptSaveDialog dialog = new AcceptSaveDialog(config,
+ new Option(optionCancelCaption, optionCancelDescription,
+ themeResource.getThemeResource(optionCancelIcon, ThemeResourceType.ICON), onCancel),
+ new Option(optionSaveCaption, optionSaveDescription,
+ themeResource.getThemeResource(optionSaveIcon, ThemeResourceType.ICON), onSave));
+ dialog.open();
+ }
+
+ private AcceptSaveDialog(DialogConfig config, Option... options) {
+ super(config, options);
+ }
+
+}
diff --git a/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/dialogs/IDialogI18nKeys.java b/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/dialogs/IDialogI18nKeys.java
index e006303..7167993 100644
--- a/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/dialogs/IDialogI18nKeys.java
+++ b/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/dialogs/IDialogI18nKeys.java
@@ -1,9 +1,9 @@
/**
- * Copyright (c) 2011, 2015 - Lunifera GmbH (Gross Enzersdorf, Austria), Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
+ * Copyright (c) 2011, 2015 - Lunifera GmbH (Gross Enzersdorf, Austria), Loetz GmbH&Co_KG (69115 Heidelberg, Germany)
+ * All rights reserved_ This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1_0
* which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * http://www_eclipse_org/legal/epl-v10_html
*
* Contributors:
* Florian Pirchner - Initial implementation
@@ -16,43 +16,67 @@
//
// general
//
- public static final String DIALOG_OPTION__CANCEL_CAPTION = "org.eclipse.osbp.dialogs.options.cancel";
- public static final String DIALOG_OPTION__CANCEL_DESCRIPTION = "org.eclipse.osbp.dialogs.options.cancel.description";
- public static final String DIALOG_OPTION__CANCEL_ICON = "org.eclipse.osbp.dialogs.options.cancel.image";
+ public static final String DIALOG_OPTION__CANCEL_CAPTION = "options_cancel";
+ public static final String DIALOG_OPTION__CANCEL_DESCRIPTION = "options_cancel_description";
+ public static final String DIALOG_OPTION__CANCEL_ICON = "cancel";
//
- // delete
+ // acceptsave
//
- public static final String ACCEPT_DELETE_DIALOG_TITLE = "org.eclipse.osbp.dialogs.acceptdelete.title";
- public static final String ACCEPT_DELETE_DIALOG_MESSAGE = "org.eclipse.osbp.dialogs.acceptdelete.message";
- public static final String ACCEPT_DELETE_DIALOG_ICON = "org.eclipse.osbp.dialogs.acceptdelete.image";
- public static final String ACCEPT_DELETE_DIALOG_DESCRIPTION = "org.eclipse.osbp.dialogs.acceptdelete.description";
+ public static final String ACCEPT_SAVE_DIALOG_TITLE = "acceptsave_title";
+ public static final String ACCEPT_SAVE_DIALOG_MESSAGE = "acceptsave_message";
+ public static final String ACCEPT_SAVE_DIALOG_ICON = "save";
+ public static final String ACCEPT_SAVE_DIALOG_DESCRIPTION = "acceptsave_description";
- public static final String ACCEPT_DELETE__DIALOG_OPTION__DELETE_CAPTION = "org.eclipse.osbp.dialogs.options.acceptdelete";
- public static final String ACCEPT_DELETE__DIALOG_OPTION__DELETE_DESCRIPTION = "org.eclipse.osbp.dialogs.options.acceptdelete.description";
- public static final String ACCEPT_DELETE__DIALOG_OPTION__DELETE_ICON = "org.eclipse.osbp.dialogs.options.acceptdelete.image";
+ public static final String ACCEPT_SAVE__DIALOG_OPTION__SAVE_CAPTION = "options_acceptsave";
+ public static final String ACCEPT_SAVE__DIALOG_OPTION__SAVE_DESCRIPTION = "options_acceptsave_description";
+ public static final String ACCEPT_SAVE__DIALOG_OPTION__SAVE_ICON = "ok";
//
+ // acceptdelete
+ //
+ public static final String ACCEPT_DELETE_DIALOG_TITLE = "acceptdelete_title";
+ public static final String ACCEPT_DELETE_DIALOG_MESSAGE = "acceptdelete_message";
+ public static final String ACCEPT_DELETE_DIALOG_ICON = "delete";
+ public static final String ACCEPT_DELETE_DIALOG_DESCRIPTION = "acceptdelete_description";
+
+ public static final String ACCEPT_DELETE__DIALOG_OPTION__DELETE_CAPTION = "options_acceptdelete";
+ public static final String ACCEPT_DELETE__DIALOG_OPTION__DELETE_DESCRIPTION = "options_acceptdelete_description";
+ public static final String ACCEPT_DELETE__DIALOG_OPTION__DELETE_ICON = "ok";
+
+ //
// reload if dirty
//
- public static final String ACCEPT_RELOAD_DIALOG_TITLE = "org.eclipse.osbp.dialogs.acceptreload.title";
- public static final String ACCEPT_RELOAD_DIALOG_MESSAGE = "org.eclipse.osbp.dialogs.acceptreload.message";
- public static final String ACCEPT_RELOAD_DIALOG_ICON = "org.eclipse.osbp.dialogs.acceptreload.image";
- public static final String ACCEPT_RELOAD_DIALOG_DESCRIPTION = "org.eclipse.osbp.dialogs.acceptreload.description";
+ public static final String ACCEPT_RELOAD_DIALOG_TITLE = "acceptreload_title";
+ public static final String ACCEPT_RELOAD_DIALOG_MESSAGE = "acceptreload_message";
+ public static final String ACCEPT_RELOAD_DIALOG_ICON = "reload";
+ public static final String ACCEPT_RELOAD_DIALOG_DESCRIPTION = "acceptreload_description";
- public static final String ACCEPT_RELOAD__DIALOG_OPTION__RELOAD_CAPTION = "org.eclipse.osbp.dialogs.options.acceptreload";
- public static final String ACCEPT_RELOAD__DIALOG_OPTION__RELOAD_DESCRIPTION = "org.eclipse.osbp.dialogs.options.acceptreload.description";
- public static final String ACCEPT_RELOAD__DIALOG_OPTION__RELOAD_ICON = "org.eclipse.osbp.dialogs.options.acceptreload.image";
+ public static final String ACCEPT_RELOAD__DIALOG_OPTION__RELOAD_CAPTION = "options_acceptreload";
+ public static final String ACCEPT_RELOAD__DIALOG_OPTION__RELOAD_DESCRIPTION = "options_acceptreload_description";
+ public static final String ACCEPT_RELOAD__DIALOG_OPTION__RELOAD_ICON = "ok";
//
// loosing data for current action
//
- public static final String ACCEPT_LOOSING_DATA_DIALOG_TITLE = "org.eclipse.osbp.dialogs.acceptloosingdata.title";
- public static final String ACCEPT_LOOSING_DATA_DIALOG_MESSAGE = "org.eclipse.osbp.dialogs.acceptloosingdata.message";
- public static final String ACCEPT_LOOSING_DATA_DIALOG_ICON = "org.eclipse.osbp.dialogs.acceptloosingdata.image";
- public static final String ACCEPT_LOOSING_DATA_DIALOG_DESCRIPTION = "org.eclipse.osbp.dialogs.acceptloosingdata.description";
+ public static final String ACCEPT_LOOSING_DATA_DIALOG_TITLE = "acceptloosingdata_title";
+ public static final String ACCEPT_LOOSING_DATA_DIALOG_MESSAGE = "acceptloosingdata_message";
+ public static final String ACCEPT_LOOSING_DATA_DIALOG_ICON = "loosingdata";
+ public static final String ACCEPT_LOOSING_DATA_DIALOG_DESCRIPTION = "acceptloosingdata_description";
- public static final String ACCEPT_LOOSING_DATA__DIALOG_OPTION__DO_CAPTION = "org.eclipse.osbp.dialogs.options.acceptloosingdata";
- public static final String ACCEPT_LOOSING_DATA__DIALOG_OPTION__DO_DESCRIPTION = "org.eclipse.osbp.dialogs.options.acceptloosingdata.description";
- public static final String ACCEPT_LOOSING_DATA__DIALOG_OPTION__DO_ICON = "org.eclipse.osbp.dialogs.options.acceptloosingdata.image";
+ public static final String ACCEPT_LOOSING_DATA__DIALOG_OPTION__DO_CAPTION = "options_acceptloosingdata";
+ public static final String ACCEPT_LOOSING_DATA__DIALOG_OPTION__DO_DESCRIPTION = "options_acceptloosingdata_description";
+ public static final String ACCEPT_LOOSING_DATA__DIALOG_OPTION__DO_ICON = "ok";
+
+ //
+ // pre delete question
+ //
+ public static final String QUERY_DELETE_DIALOG_TITLE = "query_delete_title";
+ public static final String QUERY_DELETE_DIALOG_MESSAGE = "query_delete";
+ public static final String QUERY_DELETE_DIALOG_ICON = "delete";
+ public static final String QUERY_DELETE_DIALOG_DESCRIPTION = "query_delete_description";
+
+ public static final String QUERY_DELETE__DIALOG_OPTION__DO_CAPTION = "options_query_delete";
+ public static final String QUERY_DELETE__DIALOG_OPTION__DO_DESCRIPTION = "options_query_delete";
+ public static final String QUERY_DELETE__DIALOG_OPTION__DO_ICON = "ok";
}
diff --git a/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/dialogs/QueryDeleteDialog.java b/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/dialogs/QueryDeleteDialog.java
new file mode 100644
index 0000000..a278104
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/dialogs/QueryDeleteDialog.java
@@ -0,0 +1,62 @@
+package org.eclipse.osbp.runtime.web.vaadin.components.dialogs;
+
+import java.util.Locale;
+
+import org.eclipse.osbp.runtime.web.vaadin.components.dialogs.AbstractDialog.DialogConfig;
+import org.eclipse.osbp.runtime.web.vaadin.components.dialogs.AbstractDialog.Option;
+import org.eclipse.osbp.ui.api.metadata.IDSLMetadataService;
+import org.eclipse.osbp.ui.api.themes.IThemeResourceService;
+import org.eclipse.osbp.ui.api.themes.IThemeResourceService.ThemeResourceType;
+
+import com.vaadin.ui.UI;
+import com.vaadin.ui.Window;
+
+public class QueryDeleteDialog extends OptionsDialog {
+ public static void showDialog(IDSLMetadataService service, IThemeResourceService themeResource, Runnable onSave,
+ Runnable onCancel) {
+ if (service == null) {
+ throw new NullPointerException("Please pass an i18nService");
+ }
+
+ Locale locale = UI.getCurrent().getLocale();
+ String dialogTitle = service.translate(locale.toLanguageTag(), IDialogI18nKeys.QUERY_DELETE_DIALOG_TITLE);
+ String dialogMessage = service.translate(locale.toLanguageTag(), IDialogI18nKeys.QUERY_DELETE_DIALOG_MESSAGE);
+ String dialogDescription = service.translate(locale.toLanguageTag(),
+ IDialogI18nKeys.QUERY_DELETE_DIALOG_DESCRIPTION);
+ String dialogIcon = IDialogI18nKeys.QUERY_DELETE_DIALOG_ICON;
+ String optionSaveCaption = service.translate(locale.toLanguageTag(),
+ IDialogI18nKeys.QUERY_DELETE__DIALOG_OPTION__DO_CAPTION);
+ String optionSaveDescription = service.translate(locale.toLanguageTag(),
+ IDialogI18nKeys.QUERY_DELETE__DIALOG_OPTION__DO_DESCRIPTION);
+ String optionSaveIcon = IDialogI18nKeys.QUERY_DELETE__DIALOG_OPTION__DO_ICON;
+ String optionCancelCaption = service.translate(locale.toLanguageTag(),
+ IDialogI18nKeys.DIALOG_OPTION__CANCEL_CAPTION);
+ String optionCancelDescription = service.translate(locale.toLanguageTag(),
+ IDialogI18nKeys.DIALOG_OPTION__CANCEL_DESCRIPTION);
+ String optionCancelIcon = IDialogI18nKeys.DIALOG_OPTION__CANCEL_ICON;
+
+ DialogConfig config = new DialogConfig(dialogTitle, dialogMessage, dialogDescription,
+ themeResource.getThemeResource(dialogIcon, ThemeResourceType.ICON)) {
+ @Override
+ public void config(Window window) {
+ super.config(window);
+ window.setHeight("170px");
+ window.setWidth("350px");
+ window.center();
+ }
+ };
+
+ QueryDeleteDialog dialog = new QueryDeleteDialog(config,
+ new Option(optionCancelCaption, optionCancelDescription,
+ themeResource.getThemeResource(optionCancelIcon, ThemeResourceType.ICON), onCancel),
+ new Option(optionSaveCaption, optionSaveDescription,
+ themeResource.getThemeResource(optionSaveIcon, ThemeResourceType.ICON), onSave));
+ dialog.open();
+ }
+
+ private QueryDeleteDialog(DialogConfig config, Option... options) {
+ super(config, options);
+ }
+
+
+}
diff --git a/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/fields/BeanReferenceField.java b/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/fields/BeanReferenceField.java
index 28c783b..ec19101 100644
--- a/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/fields/BeanReferenceField.java
+++ b/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/fields/BeanReferenceField.java
@@ -73,6 +73,8 @@
/** The search button icon. */
private Resource searchButtonIcon;
+ private DialogHandle dialogHandle;
+
/** The use search dialog. */
private boolean useSearchDialog = false;
@@ -94,9 +96,8 @@
* @param sharedState
* the shared state
*/
- public BeanReferenceField(String id, Object propertyId, Class<BEAN> type,
- IBeanSearchService<BEAN> searchService, Filter filter,
- ISharedStateContext sharedState) {
+ public BeanReferenceField(String id, Object propertyId, Class<BEAN> type, IBeanSearchService<BEAN> searchService,
+ Filter filter, ISharedStateContext sharedState) {
this.type = type;
this.searchService = searchService;
this.filter = filter;
@@ -122,8 +123,8 @@
comboBox.setNullSelectionAllowed(isNullSelectionAllowed());
comboBox.setInvalidAllowed(false);
- BeanServiceLazyLoadingContainer container = new BeanServiceLazyLoadingContainer(
- searchService, type, sharedState);
+ BeanServiceLazyLoadingContainer container = new BeanServiceLazyLoadingContainer(searchService, type,
+ sharedState);
// add the passed container filter
if (filter != null) {
container.addContainerFilter(filter);
@@ -134,8 +135,7 @@
if (itemCaptionPropertyId != null) {
comboBox.setItemCaptionPropertyId(itemCaptionPropertyId);
- container.sort(new Object[] { itemCaptionPropertyId },
- new boolean[] { true });
+ container.sort(new Object[] { itemCaptionPropertyId }, new boolean[] { true });
}
if (itemIconPropertyId != null) {
@@ -171,6 +171,14 @@
return root;
}
+ public DialogHandle getDialogHandle() {
+ return dialogHandle;
+ }
+
+ public void setDialogHandle(DialogHandle dialogHandle) {
+ this.dialogHandle = dialogHandle;
+ }
+
/**
* If true, then null selections are allowed. False otherwise.
*
@@ -197,7 +205,6 @@
*/
public void setUseDialog(boolean useSearchDialog) {
this.useSearchDialog = useSearchDialog;
- searchButton.setVisible(useSearchDialog);
}
/**
@@ -213,7 +220,9 @@
* Open search dialog.
*/
protected void openSearchDialog() {
-
+ if (dialogHandle != null) {
+ dialogHandle.open();
+ }
}
/*
@@ -248,9 +257,8 @@
/*
* (non-Javadoc)
*
- * @see
- * com.vaadin.ui.AbstractField#setPropertyDataSource(com.vaadin.data.Property
- * )
+ * @see com.vaadin.ui.AbstractField#setPropertyDataSource(com.vaadin.data.
+ * Property )
*/
@SuppressWarnings("rawtypes")
@Override
@@ -281,8 +289,7 @@
* the illegal argument exception
* @see com.vaadin.ui.AbstractSelect#setItemIconPropertyId(java.lang.Object)
*/
- public void setItemIconPropertyId(Object propertyId)
- throws IllegalArgumentException {
+ public void setItemIconPropertyId(Object propertyId) throws IllegalArgumentException {
this.itemIconPropertyId = propertyId;
if (comboBox != null) {
@@ -341,8 +348,7 @@
* com.vaadin.ui.AbstractSelect#setItemIconPropertyId(java.lang.Object)
*/
@Override
- public void setItemIconPropertyId(Object propertyId)
- throws IllegalArgumentException {
+ public void setItemIconPropertyId(Object propertyId) throws IllegalArgumentException {
if (propertyId == null) {
super.setItemIconPropertyId(propertyId);
@@ -361,8 +367,7 @@
* @see com.vaadin.ui.AbstractSelect#getItemIconPropertyId()
*/
public Object getItemIconPropertyId() {
- return itemIconPropertyId != null ? itemIconPropertyId : super
- .getItemIconPropertyId();
+ return itemIconPropertyId != null ? itemIconPropertyId : super.getItemIconPropertyId();
}
/*
@@ -374,8 +379,7 @@
if (itemIconPropertyId == null) {
return super.getItemIcon(itemId);
} else {
- final Property<?> ip = getContainerProperty(itemId,
- getItemIconPropertyId());
+ final Property<?> ip = getContainerProperty(itemId, getItemIconPropertyId());
if (ip == null) {
return null;
}
@@ -393,8 +397,7 @@
* @see com.vaadin.ui.AbstractSelect#setValue(java.lang.Object)
*/
@Override
- public void setValue(Object newValue)
- throws com.vaadin.data.Property.ReadOnlyException {
+ public void setValue(Object newValue) throws com.vaadin.data.Property.ReadOnlyException {
super.setValue(newValue);
}
@@ -409,4 +412,12 @@
super.setValue(newValue, repaintIsNotNeeded);
}
}
+
+ public interface DialogHandle {
+
+ void open();
+
+ void close();
+ }
+
}
diff --git a/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/fields/filter2/BetweenComponent.java b/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/fields/filter2/BetweenComponent.java
new file mode 100644
index 0000000..e181568
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/fields/filter2/BetweenComponent.java
@@ -0,0 +1,84 @@
+package org.eclipse.osbp.runtime.web.vaadin.components.fields.filter2;
+
+import java.util.Locale;
+
+import javax.annotation.PostConstruct;
+
+import org.eclipse.osbp.ecview.core.common.context.ILocaleChangedService;
+import org.eclipse.osbp.ecview.core.common.context.ILocaleChangedService.LocaleListener;
+import org.eclipse.osbp.ecview.core.common.context.IViewContext;
+import org.eclipse.osbp.runtime.common.i18n.II18nService;
+import org.eclipse.osbp.ui.api.themes.EnumCssClass;
+import org.eclipse.osbp.ui.api.themes.IThemeResourceService;
+
+import com.vaadin.data.Container.Filter;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.CustomComponent;
+
+@SuppressWarnings("serial")
+public abstract class BetweenComponent extends CustomComponent implements ISingleFilterComponent, LocaleListener {
+
+ protected final String propertyId;
+ protected final IViewContext viewContext;
+
+ Component mainLayout;
+
+ // used for decimal fields
+ protected Class<?> type;
+ protected II18nService i18nService;
+ protected IThemeResourceService themeResourceService;
+
+ public BetweenComponent(String propertyId, IViewContext viewContext) {
+ this.propertyId = propertyId;
+ this.viewContext = viewContext;
+ }
+
+ public BetweenComponent(String propertyId, Class<?> type, IViewContext viewContext) {
+ this.propertyId = propertyId;
+ this.type = type;
+ this.viewContext = viewContext;
+ }
+
+ @PostConstruct
+ public void init() {
+
+ setStyleName(EnumCssClass.BOX.styleName());
+
+ i18nService = viewContext.getService(II18nService.ID);
+ themeResourceService = viewContext.getService(IThemeResourceService.ID);
+
+ ILocaleChangedService service = viewContext.getService(ILocaleChangedService.class.getName());
+ service.addLocaleListener(this);
+
+ mainLayout = createMainLayout();
+ mainLayout.setSizeFull();
+ setCompositionRoot(mainLayout);
+ }
+
+ protected String getCaptionInternal() {
+ return Util.getCaption(i18nService, propertyId, propertyId, getLocale());
+ }
+
+ @Override
+ public void localeChanged(Locale locale) {
+ setLocale(locale);
+ updateCaptions();
+ }
+
+ protected abstract void updateCaptions();
+
+ protected abstract Component createMainLayout();
+
+ /**
+ * Returns a proper filter for this component.
+ *
+ * @return
+ */
+ public abstract Filter getFilter();
+
+ public void dispose() {
+ ILocaleChangedService service = viewContext.getService(ILocaleChangedService.class.getName());
+ service.removeLocaleListener(this);
+ }
+
+}
diff --git a/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/fields/filter2/BetweenDateComponent.java b/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/fields/filter2/BetweenDateComponent.java
new file mode 100644
index 0000000..f331c62
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/fields/filter2/BetweenDateComponent.java
@@ -0,0 +1,72 @@
+package org.eclipse.osbp.runtime.web.vaadin.components.fields.filter2;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+
+import org.eclipse.osbp.ecview.core.common.context.IViewContext;
+
+import com.vaadin.data.Container.Filter;
+import com.vaadin.data.util.filter.Between;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.DateField;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+
+@SuppressWarnings("serial")
+public class BetweenDateComponent extends BetweenComponent {
+
+ private Label captionField;
+
+ private DateField fromValueField;
+
+ private DateField untilValueField;
+
+ @Inject
+ public BetweenDateComponent(@Named("propertyId") String propertyId, IViewContext viewContext) {
+ super(propertyId, viewContext);
+ }
+
+ @Override
+ protected Component createMainLayout() {
+ HorizontalLayout mainLayout = new HorizontalLayout();
+ captionField = new Label();
+ captionField.setValue(propertyId);
+ fromValueField = new DateField();
+ untilValueField = new DateField();
+
+ mainLayout.addComponent(captionField);
+ mainLayout.addComponent(fromValueField);
+ mainLayout.addComponent(untilValueField);
+
+ captionField.setWidth("100%");
+ fromValueField.setWidth("100%");
+ untilValueField.setWidth("100%");
+ mainLayout.setExpandRatio(captionField, 1.0f);
+ mainLayout.setExpandRatio(fromValueField, 1.0f);
+ mainLayout.setExpandRatio(untilValueField, 1.0f);
+ return mainLayout;
+ }
+
+ @Override
+ public void resetAllFilters() {
+ fromValueField.setValue(null);
+ untilValueField.setValue(null);
+ }
+
+ public Filter getFilter() {
+ if (!fromValueField.isValid() || !untilValueField.isValid()) {
+ return null;
+ }
+
+ if (fromValueField.getValue() == null || untilValueField.getValue() == null) {
+ return null;
+ }
+ Between between = new Between(propertyId, fromValueField.getValue(), untilValueField.getValue());
+ return between;
+ }
+
+ protected void updateCaptions() {
+ captionField.setValue(getCaptionInternal());
+ }
+
+}
diff --git a/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/fields/filter2/BetweenDecimalComponent.java b/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/fields/filter2/BetweenDecimalComponent.java
new file mode 100644
index 0000000..a02fa89
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/fields/filter2/BetweenDecimalComponent.java
@@ -0,0 +1,143 @@
+package org.eclipse.osbp.runtime.web.vaadin.components.fields.filter2;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+
+import org.eclipse.osbp.ecview.core.common.context.IViewContext;
+
+import com.vaadin.data.Container.Filter;
+import com.vaadin.data.Validator;
+import com.vaadin.data.util.converter.Converter;
+import com.vaadin.data.util.converter.StringToBigDecimalConverter;
+import com.vaadin.data.util.converter.StringToBigIntegerConverter;
+import com.vaadin.data.util.converter.StringToByteConverter;
+import com.vaadin.data.util.converter.StringToDoubleConverter;
+import com.vaadin.data.util.converter.StringToFloatConverter;
+import com.vaadin.data.util.converter.StringToIntegerConverter;
+import com.vaadin.data.util.converter.StringToLongConverter;
+import com.vaadin.data.util.converter.StringToShortConverter;
+import com.vaadin.data.util.filter.Between;
+import com.vaadin.data.validator.ByteRangeValidator;
+import com.vaadin.data.validator.DoubleRangeValidator;
+import com.vaadin.data.validator.FloatRangeValidator;
+import com.vaadin.data.validator.IntegerRangeValidator;
+import com.vaadin.data.validator.LongRangeValidator;
+import com.vaadin.data.validator.ShortRangeValidator;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.TextField;
+
+@SuppressWarnings("serial")
+public class BetweenDecimalComponent<T extends Number & Comparable<?>> extends BetweenComponent {
+
+ private Label captionField;
+
+ private TextField fromValueField;
+
+ private TextField untilValueField;
+
+ @Inject
+ public BetweenDecimalComponent(@Named("propertyId") String propertyId, @Named("type") Class<T> type,
+ IViewContext viewContext) {
+ super(propertyId, type, viewContext);
+ }
+
+ @Override
+ protected Component createMainLayout() {
+ HorizontalLayout mainLayout = new HorizontalLayout();
+ captionField = new Label();
+ captionField.addStyleName("caption");
+ captionField.setValue(propertyId);
+ fromValueField = new TextField();
+ fromValueField.setImmediate(true);
+ fromValueField.setNullRepresentation("");
+ fromValueField.addStyleName("from");
+ fromValueField.setConverter(toConverter());
+ fromValueField.addValidator(toValidator());
+ untilValueField = new TextField();
+ untilValueField.setImmediate(true);
+ untilValueField.setNullRepresentation("");
+ untilValueField.addStyleName("until");
+ untilValueField.setConverter(toConverter());
+ untilValueField.addValidator(toValidator());
+
+ mainLayout.addComponent(captionField);
+ mainLayout.addComponent(fromValueField);
+ mainLayout.addComponent(untilValueField);
+
+ captionField.setWidth("100%");
+ fromValueField.setWidth("100%");
+ untilValueField.setWidth("100%");
+ mainLayout.setExpandRatio(captionField, 1.0f);
+ mainLayout.setExpandRatio(fromValueField, 1.0f);
+ mainLayout.setExpandRatio(untilValueField, 1.0f);
+ return mainLayout;
+ }
+
+ @SuppressWarnings("unchecked")
+ protected Converter<String, T> toConverter() {
+ if (type == Integer.class || type == Integer.TYPE) {
+ return (Converter<String, T>) new StringToIntegerConverter();
+ } else if (type == BigDecimal.class) {
+ return (Converter<String, T>) new StringToBigDecimalConverter();
+ } else if (type == BigInteger.class) {
+ return (Converter<String, T>) new StringToBigIntegerConverter();
+ } else if (type == Byte.class || type == Byte.TYPE) {
+ return (Converter<String, T>) new StringToByteConverter();
+ } else if (type == Double.class || type == Double.TYPE) {
+ return (Converter<String, T>) new StringToDoubleConverter();
+ } else if (type == Float.class || type == Float.TYPE) {
+ return (Converter<String, T>) new StringToFloatConverter();
+ } else if (type == Long.class || type == Long.TYPE) {
+ return (Converter<String, T>) new StringToLongConverter();
+ } else if (type == Short.class || type == Short.TYPE) {
+ return (Converter<String, T>) new StringToShortConverter();
+ }
+ throw new IllegalStateException("Number type is not valid!");
+ }
+
+ protected Validator toValidator() {
+ if (type == Integer.class || type == Integer.TYPE) {
+ return new IntegerRangeValidator("not valid", Integer.MIN_VALUE, Integer.MAX_VALUE);
+ } else if (type == Byte.class || type == Byte.TYPE) {
+ return new ByteRangeValidator("not valid", Byte.MIN_VALUE, Byte.MAX_VALUE);
+ } else if (type == Double.class || type == Double.TYPE) {
+ return new DoubleRangeValidator("not valid", Double.NEGATIVE_INFINITY, Double.MAX_VALUE);
+ } else if (type == Float.class || type == Float.TYPE) {
+ return new FloatRangeValidator("not valid", Float.MIN_VALUE, Float.MAX_VALUE);
+ } else if (type == Long.class || type == Long.TYPE) {
+ return new LongRangeValidator("not valid", Long.MIN_VALUE, Long.MAX_VALUE);
+ } else if (type == Short.class || type == Short.TYPE) {
+ return new ShortRangeValidator("not valid", Short.MIN_VALUE, Short.MAX_VALUE);
+ }
+ throw new IllegalStateException("Number type is not valid!");
+ }
+
+ @Override
+ public void resetAllFilters() {
+ fromValueField.setValue(null);
+ untilValueField.setValue(null);
+ }
+
+ public Filter getFilter() {
+ if (!fromValueField.isValid() || !untilValueField.isValid()) {
+ return null;
+ }
+ if (fromValueField.getValue() == null || fromValueField.getValue().trim().equals("")
+ || untilValueField.getValue() == null || untilValueField.getValue().trim().equals("")) {
+ return null;
+ }
+
+ Between between = new Between(propertyId, (Comparable<?>) fromValueField.getConvertedValue(),
+ (Comparable<?>) untilValueField.getConvertedValue());
+ return between;
+ }
+
+ protected void updateCaptions() {
+ captionField.setValue(getCaptionInternal());
+ }
+}
diff --git a/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/fields/filter2/BetweenTextComponent.java b/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/fields/filter2/BetweenTextComponent.java
new file mode 100644
index 0000000..2f54e4b
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/fields/filter2/BetweenTextComponent.java
@@ -0,0 +1,78 @@
+package org.eclipse.osbp.runtime.web.vaadin.components.fields.filter2;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+
+import org.eclipse.osbp.ecview.core.common.context.IViewContext;
+
+import com.vaadin.data.Container.Filter;
+import com.vaadin.data.util.filter.Between;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.TextField;
+
+@SuppressWarnings("serial")
+public class BetweenTextComponent extends BetweenComponent {
+
+ private Label captionField;
+
+ private TextField fromValueField;
+
+ private TextField untilValueField;
+
+ @Inject
+ public BetweenTextComponent(@Named("propertyId") String propertyId, IViewContext viewContext) {
+ super(propertyId, viewContext);
+ }
+
+ @Override
+ protected Component createMainLayout() {
+ HorizontalLayout mainLayout = new HorizontalLayout();
+ captionField = new Label();
+ captionField.setValue(propertyId);
+ fromValueField = new TextField();
+ untilValueField = new TextField();
+ fromValueField.setNullRepresentation("");
+ untilValueField.setNullRepresentation("");
+ fromValueField.setImmediate(true);
+ untilValueField.setImmediate(true);
+
+ mainLayout.addComponent(captionField);
+ mainLayout.addComponent(fromValueField);
+ mainLayout.addComponent(untilValueField);
+
+ captionField.setWidth("100%");
+ fromValueField.setWidth("100%");
+ untilValueField.setWidth("100%");
+ mainLayout.setExpandRatio(captionField, 1.0f);
+ mainLayout.setExpandRatio(fromValueField, 1.0f);
+ mainLayout.setExpandRatio(untilValueField, 1.0f);
+ return mainLayout;
+ }
+
+ @Override
+ public void resetAllFilters() {
+ fromValueField.setValue(null);
+ untilValueField.setValue(null);
+ }
+
+ public Filter getFilter() {
+ if (!fromValueField.isValid() || !untilValueField.isValid()) {
+ return null;
+ }
+
+ if (fromValueField.getValue() == null || fromValueField.getValue().trim().equals("")
+ || untilValueField.getValue() == null || untilValueField.getValue().trim().equals("")) {
+ return null;
+ }
+
+ Between between = new Between(propertyId, fromValueField.getValue(), untilValueField.getValue());
+ return between;
+ }
+
+ protected void updateCaptions() {
+ captionField.setValue(getCaptionInternal());
+ }
+
+}
diff --git a/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/fields/filter2/CompareBooleanComponent.java b/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/fields/filter2/CompareBooleanComponent.java
new file mode 100644
index 0000000..ba3c3fb
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/fields/filter2/CompareBooleanComponent.java
@@ -0,0 +1,148 @@
+package org.eclipse.osbp.runtime.web.vaadin.components.fields.filter2;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+
+import org.eclipse.osbp.ecview.core.common.context.IViewContext;
+import org.eclipse.osbp.ui.api.themes.IThemeResourceService.ThemeResourceType;
+
+import com.vaadin.data.Container.Filter;
+import com.vaadin.data.util.BeanItemContainer;
+import com.vaadin.data.util.filter.Compare;
+import com.vaadin.server.Resource;
+import com.vaadin.server.ThemeResource;
+import com.vaadin.ui.ComboBox;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+
+@SuppressWarnings("serial")
+public class CompareBooleanComponent extends CompareComponent {
+
+ private Label captionField;
+
+ private ComboBox compareTypeField;
+
+ @Inject
+ public CompareBooleanComponent(@Named("propertyId")String propertyId, IViewContext viewContext) {
+ super(propertyId, viewContext);
+ }
+
+ @Override
+ protected Component createMainLayout() {
+ HorizontalLayout mainLayout = new HorizontalLayout();
+ captionField = new Label();
+ captionField.setValue(propertyId);
+ compareTypeField = new ComboBox();
+
+ mainLayout.addComponent(captionField);
+ mainLayout.addComponent(compareTypeField);
+
+ captionField.setWidth("100%");
+ compareTypeField.setWidth("100%");
+ mainLayout.setExpandRatio(captionField, 1.0f);
+ mainLayout.setExpandRatio(compareTypeField, 1.0f);
+
+ updateContainer();
+
+ compareTypeField.setItemCaptionPropertyId("caption");
+ compareTypeField.setItemIconPropertyId("image");
+
+ return mainLayout;
+ }
+
+ protected void updateContainer() {
+ BeanItemContainer<CompareType> container = new BeanItemContainer<>(CompareType.class);
+ container.addBean(
+ new CompareType(CompareTypeEnum.TRUE, toLabel(CompareTypeEnum.TRUE), toImage(CompareTypeEnum.TRUE)));
+ container.addBean(
+ new CompareType(CompareTypeEnum.FALSE, toLabel(CompareTypeEnum.FALSE), toImage(CompareTypeEnum.FALSE)));
+ container.addBean(new CompareType(CompareTypeEnum.IGNORE, toLabel(CompareTypeEnum.IGNORE),
+ toImage(CompareTypeEnum.IGNORE)));
+
+ compareTypeField.setContainerDataSource(container);
+ }
+
+ protected String toLabel(CompareTypeEnum enumx) {
+ return i18nService != null ? i18nService.getValue(enumx.name(), getLocale()) : enumx.name();
+ }
+
+ protected Resource toImage(CompareTypeEnum enumx) {
+ return themeResourceService.getThemeResource(enumx.name(), ThemeResourceType.ICON);
+ }
+
+ public Filter getFilter() {
+ CompareType compareType = (CompareType) compareTypeField.getValue();
+
+ if (compareType == null) {
+ return null;
+ }
+
+ Filter filter = null;
+ switch (compareType.typeEnum) {
+ case TRUE:
+ filter = new Compare.Equal(propertyId, true);
+ break;
+ case FALSE:
+ filter = new Compare.Equal(propertyId, false);
+ break;
+ case IGNORE:
+ break;
+ }
+
+ return filter;
+ }
+
+ @Override
+ public void resetAllFilters() {
+ compareTypeField.setValue(null);
+ }
+
+ protected void updateCaptions() {
+ captionField.setValue(getCaptionInternal());
+
+ updateContainer();
+ }
+
+ public static class CompareType {
+ private CompareTypeEnum typeEnum;
+ private String caption;
+ private Resource image;
+
+ public CompareType(CompareTypeEnum typeEnum, String caption, Resource image) {
+ super();
+ this.typeEnum = typeEnum;
+ this.caption = caption;
+ this.image = image;
+ }
+
+ public CompareTypeEnum getTypeEnum() {
+ return typeEnum;
+ }
+
+ public void setTypeEnum(CompareTypeEnum typeEnum) {
+ this.typeEnum = typeEnum;
+ }
+
+ public String getCaption() {
+ return caption;
+ }
+
+ public void setCaption(String caption) {
+ this.caption = caption;
+ }
+
+ public Resource getImage() {
+ return image;
+ }
+
+ public void setImage(Resource image) {
+ this.image = image;
+ }
+
+ }
+
+ public enum CompareTypeEnum {
+ TRUE, FALSE, IGNORE;
+ }
+}
diff --git a/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/fields/filter2/CompareComponent.java b/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/fields/filter2/CompareComponent.java
new file mode 100644
index 0000000..5897722
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/fields/filter2/CompareComponent.java
@@ -0,0 +1,117 @@
+package org.eclipse.osbp.runtime.web.vaadin.components.fields.filter2;
+
+import java.beans.PropertyChangeListener;
+import java.beans.PropertyChangeSupport;
+import java.util.Locale;
+
+import javax.annotation.PostConstruct;
+
+import org.eclipse.osbp.ecview.core.common.context.ILocaleChangedService;
+import org.eclipse.osbp.ecview.core.common.context.IViewContext;
+import org.eclipse.osbp.runtime.common.i18n.II18nService;
+import org.eclipse.osbp.ui.api.themes.EnumCssClass;
+import org.eclipse.osbp.ui.api.themes.IThemeResourceService;
+import org.eclipse.osbp.ui.api.themes.IThemeResourceService.ThemeResourceType;
+
+import com.vaadin.data.Container.Filter;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.CustomComponent;
+
+@SuppressWarnings("serial")
+public abstract class CompareComponent extends CustomComponent
+ implements ISingleFilterComponent, ILocaleChangedService.LocaleListener {
+
+ protected II18nService i18nService;
+ protected IThemeResourceService themeResourceService;
+
+ Component mainLayout;
+
+ protected final String propertyId;
+ protected final IViewContext viewContext;
+
+ // used for decimal fields
+ Class<? extends Number> type;
+
+ public CompareComponent(String propertyId, IViewContext viewContext) {
+ this.propertyId = propertyId;
+ this.viewContext = viewContext;
+ }
+
+ public CompareComponent(String propertyId, Class<? extends Number> type, IViewContext viewContext) {
+ this.propertyId = propertyId;
+ this.type = type;
+ this.viewContext = viewContext;
+ }
+
+ @PostConstruct
+ public void init() {
+
+ setStyleName(EnumCssClass.BOX.styleName());
+
+ i18nService = viewContext.getService(II18nService.ID);
+ themeResourceService = viewContext.getService(IThemeResourceService.ID);
+
+ ILocaleChangedService service = viewContext.getService(ILocaleChangedService.class.getName());
+ service.addLocaleListener(this);
+
+ mainLayout = createMainLayout();
+ mainLayout.setSizeFull();
+
+ setCompositionRoot(mainLayout);
+ }
+
+ protected String getCaptionInternal() {
+ return Util.getCaption(i18nService, propertyId, propertyId, getLocale());
+ }
+
+ @Override
+ public void localeChanged(Locale locale) {
+ setLocale(locale);
+ updateCaptions();
+ }
+
+ protected abstract void updateCaptions();
+
+ protected abstract Component createMainLayout();
+
+ /**
+ * Returns a proper filter for this component.
+ *
+ * @return
+ */
+ public abstract Filter getFilter();
+
+ public void dispose() {
+ ILocaleChangedService service = viewContext.getService(ILocaleChangedService.class.getName());
+ service.removeLocaleListener(this);
+ }
+
+ public abstract static class AbstractCompareBean {
+ protected final PropertyChangeSupport changeSupport = new PropertyChangeSupport(this);
+
+ public void addPropertyChangeListener(String property, PropertyChangeListener listener) {
+ changeSupport.addPropertyChangeListener(property, listener);
+ }
+
+ private final String property;
+
+ private String caption;
+
+ public AbstractCompareBean(String property) {
+ this.property = property;
+ }
+
+ public String getProperty() {
+ return property;
+ }
+
+ public String getCaption() {
+ return caption;
+ }
+
+ public void setCaption(String caption) {
+ changeSupport.firePropertyChange("caption", this.caption, this.caption = caption);
+ }
+
+ }
+}
diff --git a/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/fields/filter2/CompareDateComponent.java b/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/fields/filter2/CompareDateComponent.java
new file mode 100644
index 0000000..48c8390
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/fields/filter2/CompareDateComponent.java
@@ -0,0 +1,184 @@
+package org.eclipse.osbp.runtime.web.vaadin.components.fields.filter2;
+
+import java.util.Date;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+
+import org.eclipse.osbp.ecview.core.common.context.IViewContext;
+import org.eclipse.osbp.ui.api.themes.IThemeResourceService.ThemeResourceType;
+
+import com.vaadin.data.Container.Filter;
+import com.vaadin.data.util.BeanItemContainer;
+import com.vaadin.data.util.filter.Compare;
+import com.vaadin.data.util.filter.Not;
+import com.vaadin.server.Resource;
+import com.vaadin.server.ThemeResource;
+import com.vaadin.ui.ComboBox;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.DateField;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+
+@SuppressWarnings("serial")
+public class CompareDateComponent extends CompareComponent {
+
+ private Label captionField;
+
+ private ComboBox compareTypeField;
+
+ private DateField valueField;
+
+ @Inject
+ public CompareDateComponent(@Named("propertyId") String propertyId, IViewContext viewContext) {
+ super(propertyId, viewContext);
+ }
+
+ @Override
+ protected Component createMainLayout() {
+ HorizontalLayout mainLayout = new HorizontalLayout();
+ captionField = new Label();
+ captionField.setValue(propertyId);
+ compareTypeField = new ComboBox();
+ valueField = new DateField();
+
+ mainLayout.addComponent(captionField);
+ mainLayout.addComponent(compareTypeField);
+ mainLayout.addComponent(valueField);
+
+ captionField.setWidth("100%");
+ compareTypeField.setWidth("100%");
+ valueField.setWidth("100%");
+ mainLayout.setExpandRatio(captionField, 1.0f);
+ mainLayout.setExpandRatio(compareTypeField, 0.5f);
+ mainLayout.setExpandRatio(valueField, 1.5f);
+
+ updateContainer();
+
+ compareTypeField.setItemCaptionPropertyId("caption");
+ compareTypeField.setItemIconPropertyId("image");
+
+ return mainLayout;
+ }
+
+ protected void updateContainer() {
+ BeanItemContainer<CompareType> container = new BeanItemContainer<>(CompareType.class);
+ container
+ .addBean(new CompareType(CompareTypeEnum.EQ, toLabel(CompareTypeEnum.EQ), toImage(CompareTypeEnum.EQ)));
+ container
+ .addBean(new CompareType(CompareTypeEnum.NE, toLabel(CompareTypeEnum.NE), toImage(CompareTypeEnum.NE)));
+ container
+ .addBean(new CompareType(CompareTypeEnum.GT, toLabel(CompareTypeEnum.GT), toImage(CompareTypeEnum.GT)));
+ container
+ .addBean(new CompareType(CompareTypeEnum.GE, toLabel(CompareTypeEnum.GE), toImage(CompareTypeEnum.GE)));
+ container
+ .addBean(new CompareType(CompareTypeEnum.LT, toLabel(CompareTypeEnum.LT), toImage(CompareTypeEnum.LT)));
+ container
+ .addBean(new CompareType(CompareTypeEnum.LE, toLabel(CompareTypeEnum.LE), toImage(CompareTypeEnum.LE)));
+
+ compareTypeField.setContainerDataSource(container);
+ }
+
+ protected String toLabel(CompareTypeEnum enumx) {
+ return Util.getCaption(i18nService, enumx.name(), enumx.name(), getLocale());
+ }
+
+ protected Resource toImage(CompareTypeEnum enumx) {
+ return themeResourceService.getThemeResource(enumx.name(), ThemeResourceType.ICON);
+ }
+
+ public Filter getFilter() {
+ if (!valueField.isValid() || !compareTypeField.isValid()) {
+ return null;
+ }
+
+ CompareType compareType = (CompareType) compareTypeField.getValue();
+
+ if (compareType == null) {
+ return null;
+ }
+
+ Date value = valueField.getValue();
+ if (value == null) {
+ return null;
+ }
+
+ Filter filter = null;
+ switch (compareType.typeEnum) {
+ case EQ:
+ filter = new Compare.Equal(propertyId, value);
+ break;
+ case GE:
+ filter = new Compare.GreaterOrEqual(propertyId, value);
+ break;
+ case GT:
+ filter = new Compare.Greater(propertyId, value);
+ break;
+ case LE:
+ filter = new Compare.LessOrEqual(propertyId, value);
+ break;
+ case LT:
+ filter = new Compare.Less(propertyId, value);
+ break;
+ case NE:
+ filter = new Not(new Compare.Equal(propertyId, value));
+ break;
+ }
+
+ return filter;
+ }
+
+ @Override
+ public void resetAllFilters() {
+ compareTypeField.setValue(null);
+ valueField.setValue(null);
+ }
+
+ protected void updateCaptions() {
+ captionField.setValue(getCaptionInternal());
+
+ updateContainer();
+ }
+
+ public static class CompareType {
+ private CompareTypeEnum typeEnum;
+ private String caption;
+ private Resource image;
+
+ public CompareType(CompareTypeEnum typeEnum, String caption, Resource image) {
+ super();
+ this.typeEnum = typeEnum;
+ this.caption = caption;
+ this.image = image;
+ }
+
+ public CompareTypeEnum getTypeEnum() {
+ return typeEnum;
+ }
+
+ public void setTypeEnum(CompareTypeEnum typeEnum) {
+ this.typeEnum = typeEnum;
+ }
+
+ public String getCaption() {
+ return caption;
+ }
+
+ public void setCaption(String caption) {
+ this.caption = caption;
+ }
+
+ public Resource getImage() {
+ return image;
+ }
+
+ public void setImage(Resource image) {
+ this.image = image;
+ }
+
+ }
+
+ public enum CompareTypeEnum {
+ EQ, NE, GT, GE, LE, LT;
+ }
+}
diff --git a/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/fields/filter2/CompareDecimalComponent.java b/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/fields/filter2/CompareDecimalComponent.java
new file mode 100644
index 0000000..04ab25a
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/fields/filter2/CompareDecimalComponent.java
@@ -0,0 +1,243 @@
+package org.eclipse.osbp.runtime.web.vaadin.components.fields.filter2;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+
+import org.eclipse.osbp.ecview.core.common.context.IViewContext;
+import org.eclipse.osbp.ui.api.themes.IThemeResourceService.ThemeResourceType;
+
+import com.vaadin.data.Container.Filter;
+import com.vaadin.data.Validator;
+import com.vaadin.data.util.BeanItemContainer;
+import com.vaadin.data.util.converter.Converter;
+import com.vaadin.data.util.converter.StringToBigDecimalConverter;
+import com.vaadin.data.util.converter.StringToBigIntegerConverter;
+import com.vaadin.data.util.converter.StringToByteConverter;
+import com.vaadin.data.util.converter.StringToDoubleConverter;
+import com.vaadin.data.util.converter.StringToFloatConverter;
+import com.vaadin.data.util.converter.StringToIntegerConverter;
+import com.vaadin.data.util.converter.StringToLongConverter;
+import com.vaadin.data.util.converter.StringToShortConverter;
+import com.vaadin.data.util.filter.Compare;
+import com.vaadin.data.util.filter.Not;
+import com.vaadin.data.validator.ByteRangeValidator;
+import com.vaadin.data.validator.DoubleRangeValidator;
+import com.vaadin.data.validator.FloatRangeValidator;
+import com.vaadin.data.validator.IntegerRangeValidator;
+import com.vaadin.data.validator.LongRangeValidator;
+import com.vaadin.data.validator.ShortRangeValidator;
+import com.vaadin.server.Resource;
+import com.vaadin.server.ThemeResource;
+import com.vaadin.ui.ComboBox;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.TextField;
+
+@SuppressWarnings("serial")
+public class CompareDecimalComponent extends CompareComponent {
+
+ private Label captionField;
+
+ private ComboBox compareTypeField;
+
+ private TextField valueField;
+
+ @Inject
+ public CompareDecimalComponent(@Named("propertyId") String propertyId, @Named("type") Class<? extends Number> type,
+ IViewContext viewContext) {
+ super(propertyId, type, viewContext);
+ }
+
+ @Override
+ protected Component createMainLayout() {
+ HorizontalLayout mainLayout = new HorizontalLayout();
+ captionField = new Label();
+ captionField.setValue(propertyId);
+ compareTypeField = new ComboBox();
+ valueField = new TextField();
+ valueField.setNullRepresentation("");
+ valueField.setConverter(toConverter());
+ valueField.addValidator(toValidator());
+
+ mainLayout.addComponent(captionField);
+ mainLayout.addComponent(compareTypeField);
+ mainLayout.addComponent(valueField);
+
+ captionField.setWidth("100%");
+ compareTypeField.setWidth("100%");
+ valueField.setWidth("100%");
+ mainLayout.setExpandRatio(captionField, 1.0f);
+ mainLayout.setExpandRatio(compareTypeField, 0.5f);
+ mainLayout.setExpandRatio(valueField, 1.5f);
+
+ updateContainer();
+ compareTypeField.setItemCaptionPropertyId("caption");
+ compareTypeField.setItemIconPropertyId("image");
+
+ return mainLayout;
+ }
+
+ protected void updateContainer() {
+ BeanItemContainer<CompareType> container = new BeanItemContainer<>(CompareType.class);
+ container
+ .addBean(new CompareType(CompareTypeEnum.EQ, toLabel(CompareTypeEnum.EQ), toImage(CompareTypeEnum.EQ)));
+ container
+ .addBean(new CompareType(CompareTypeEnum.NE, toLabel(CompareTypeEnum.NE), toImage(CompareTypeEnum.NE)));
+ container
+ .addBean(new CompareType(CompareTypeEnum.GT, toLabel(CompareTypeEnum.GT), toImage(CompareTypeEnum.GT)));
+ container
+ .addBean(new CompareType(CompareTypeEnum.GE, toLabel(CompareTypeEnum.GE), toImage(CompareTypeEnum.GE)));
+ container
+ .addBean(new CompareType(CompareTypeEnum.LT, toLabel(CompareTypeEnum.LT), toImage(CompareTypeEnum.LT)));
+ container
+ .addBean(new CompareType(CompareTypeEnum.LE, toLabel(CompareTypeEnum.LE), toImage(CompareTypeEnum.LE)));
+
+ compareTypeField.setContainerDataSource(container);
+ }
+
+ protected String toLabel(CompareTypeEnum enumx) {
+ return Util.getCaption(i18nService, enumx.name(), enumx.name(), getLocale());
+ }
+
+ protected Resource toImage(CompareTypeEnum enumx) {
+ return themeResourceService.getThemeResource(enumx.name(), ThemeResourceType.ICON);
+ }
+
+ public Filter getFilter() {
+ if (!valueField.isValid() || !compareTypeField.isValid()) {
+ return null;
+ }
+
+ CompareType compareType = (CompareType) compareTypeField.getValue();
+
+ if (compareType == null) {
+ return null;
+ }
+
+ Number numericValue = (Number) valueField.getConvertedValue();
+ // if (value == null || value.trim().equals("")) {
+ // return null;
+ // }
+
+ // Comparable<?> numericValue = parser.apply(value);
+ Filter filter = null;
+ switch (compareType.typeEnum) {
+ case EQ:
+ filter = new Compare.Equal(propertyId, numericValue);
+ break;
+ case GE:
+ filter = new Compare.GreaterOrEqual(propertyId, numericValue);
+ break;
+ case GT:
+ filter = new Compare.Greater(propertyId, numericValue);
+ break;
+ case LE:
+ filter = new Compare.LessOrEqual(propertyId, numericValue);
+ break;
+ case LT:
+ filter = new Compare.Less(propertyId, numericValue);
+ break;
+ case NE:
+ filter = new Not(new Compare.Equal(propertyId, numericValue));
+ break;
+ }
+
+ return filter;
+ }
+
+ @Override
+ public void resetAllFilters() {
+ compareTypeField.setValue(null);
+ valueField.setValue(null);
+ }
+
+ protected void updateCaptions() {
+ captionField.setValue(getCaptionInternal());
+
+ updateContainer();
+ }
+
+ protected Converter<String, ? extends Number> toConverter() {
+ if (type == Integer.class || type == Integer.TYPE) {
+ return new StringToIntegerConverter();
+ } else if (type == BigDecimal.class) {
+ return new StringToBigDecimalConverter();
+ } else if (type == BigInteger.class) {
+ return new StringToBigIntegerConverter();
+ } else if (type == Byte.class || type == Byte.TYPE) {
+ return new StringToByteConverter();
+ } else if (type == Double.class || type == Double.TYPE) {
+ return new StringToDoubleConverter();
+ } else if (type == Float.class || type == Float.TYPE) {
+ return new StringToFloatConverter();
+ } else if (type == Long.class || type == Long.TYPE) {
+ return new StringToLongConverter();
+ } else if (type == Short.class || type == Short.TYPE) {
+ return new StringToShortConverter();
+ }
+ throw new IllegalStateException("Number type is not valid!");
+ }
+
+ protected Validator toValidator() {
+ if (type == Integer.class || type == Integer.TYPE) {
+ return new IntegerRangeValidator("not valid", Integer.MIN_VALUE, Integer.MAX_VALUE);
+ } else if (type == Byte.class || type == Byte.TYPE) {
+ return new ByteRangeValidator("not valid", Byte.MIN_VALUE, Byte.MAX_VALUE);
+ } else if (type == Double.class || type == Double.TYPE) {
+ return new DoubleRangeValidator("not valid", Double.NEGATIVE_INFINITY, Double.MAX_VALUE);
+ } else if (type == Float.class || type == Float.TYPE) {
+ return new FloatRangeValidator("not valid", Float.MIN_VALUE, Float.MAX_VALUE);
+ } else if (type == Long.class || type == Long.TYPE) {
+ return new LongRangeValidator("not valid", Long.MIN_VALUE, Long.MAX_VALUE);
+ } else if (type == Short.class || type == Short.TYPE) {
+ return new ShortRangeValidator("not valid", Short.MIN_VALUE, Short.MAX_VALUE);
+ }
+ throw new IllegalStateException("Number type is not valid!");
+ }
+
+ public static class CompareType {
+ private CompareTypeEnum typeEnum;
+ private String caption;
+ private Resource image;
+
+ public CompareType(CompareTypeEnum typeEnum, String caption, Resource image) {
+ super();
+ this.typeEnum = typeEnum;
+ this.caption = caption;
+ this.image = image;
+ }
+
+ public CompareTypeEnum getTypeEnum() {
+ return typeEnum;
+ }
+
+ public void setTypeEnum(CompareTypeEnum typeEnum) {
+ this.typeEnum = typeEnum;
+ }
+
+ public String getCaption() {
+ return caption;
+ }
+
+ public void setCaption(String caption) {
+ this.caption = caption;
+ }
+
+ public Resource getImage() {
+ return image;
+ }
+
+ public void setImage(Resource image) {
+ this.image = image;
+ }
+
+ }
+
+ public enum CompareTypeEnum {
+ EQ, NE, GT, GE, LE, LT;
+ }
+}
diff --git a/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/fields/filter2/CompareTextComponent.java b/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/fields/filter2/CompareTextComponent.java
new file mode 100644
index 0000000..b6d7ea5
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/fields/filter2/CompareTextComponent.java
@@ -0,0 +1,190 @@
+package org.eclipse.osbp.runtime.web.vaadin.components.fields.filter2;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+
+import org.eclipse.osbp.ecview.core.common.context.IViewContext;
+import org.eclipse.osbp.ui.api.themes.IThemeResourceService.ThemeResourceType;
+
+import com.vaadin.data.Container.Filter;
+import com.vaadin.data.util.BeanItemContainer;
+import com.vaadin.data.util.filter.Compare;
+import com.vaadin.data.util.filter.Like;
+import com.vaadin.data.util.filter.Not;
+import com.vaadin.server.Resource;
+import com.vaadin.server.ThemeResource;
+import com.vaadin.ui.ComboBox;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.TextField;
+
+@SuppressWarnings("serial")
+public class CompareTextComponent extends CompareComponent {
+
+ private Label captionField;
+
+ private ComboBox compareTypeField;
+
+ private TextField valueField;
+
+ @Inject
+ public CompareTextComponent(@Named("propertyId") String propertyId, IViewContext viewContext) {
+ super(propertyId, viewContext);
+ }
+
+ @Override
+ protected Component createMainLayout() {
+ HorizontalLayout mainLayout = new HorizontalLayout();
+ captionField = new Label();
+ captionField.setValue(propertyId);
+ compareTypeField = new ComboBox();
+ valueField = new TextField();
+ valueField.setNullRepresentation("");
+ valueField.setImmediate(true);
+
+ mainLayout.addComponent(captionField);
+ mainLayout.addComponent(compareTypeField);
+ mainLayout.addComponent(valueField);
+
+ captionField.setWidth("100%");
+ compareTypeField.setWidth("100%");
+ valueField.setWidth("100%");
+ mainLayout.setExpandRatio(captionField, 1.0f);
+ mainLayout.setExpandRatio(compareTypeField, 0.5f);
+ mainLayout.setExpandRatio(valueField, 1.5f);
+
+ updateContainer();
+
+ compareTypeField.setItemCaptionPropertyId("caption");
+ compareTypeField.setItemIconPropertyId("image");
+
+ return mainLayout;
+ }
+
+ protected void updateContainer() {
+ BeanItemContainer<CompareType> container = new BeanItemContainer<>(CompareType.class);
+ container
+ .addBean(new CompareType(CompareTypeEnum.EQ, toLabel(CompareTypeEnum.EQ), toImage(CompareTypeEnum.EQ)));
+ container
+ .addBean(new CompareType(CompareTypeEnum.NE, toLabel(CompareTypeEnum.NE), toImage(CompareTypeEnum.NE)));
+ container
+ .addBean(new CompareType(CompareTypeEnum.GT, toLabel(CompareTypeEnum.GT), toImage(CompareTypeEnum.GT)));
+ container
+ .addBean(new CompareType(CompareTypeEnum.GE, toLabel(CompareTypeEnum.GE), toImage(CompareTypeEnum.GE)));
+ container
+ .addBean(new CompareType(CompareTypeEnum.LT, toLabel(CompareTypeEnum.LT), toImage(CompareTypeEnum.LT)));
+ container
+ .addBean(new CompareType(CompareTypeEnum.LE, toLabel(CompareTypeEnum.LE), toImage(CompareTypeEnum.LE)));
+ container.addBean(
+ new CompareType(CompareTypeEnum.LIKE, toLabel(CompareTypeEnum.LIKE), toImage(CompareTypeEnum.LIKE)));
+
+ compareTypeField.setContainerDataSource(container);
+ }
+
+ protected String toLabel(CompareTypeEnum enumx) {
+ return Util.getCaption(i18nService, enumx.name().toLowerCase(), enumx.name().toLowerCase(), getLocale());
+ }
+
+ protected Resource toImage(CompareTypeEnum enumx) {
+ return themeResourceService.getThemeResource(enumx.name(), ThemeResourceType.ICON);
+ }
+
+ public Filter getFilter() {
+ if (!valueField.isValid() || !compareTypeField.isValid()) {
+ return null;
+ }
+
+ CompareType compareType = (CompareType) compareTypeField.getValue();
+
+ if (compareType == null) {
+ return null;
+ }
+
+ String value = valueField.getValue();
+ if (value == null || value.trim().equals("")) {
+ return null;
+ }
+
+ Filter filter = null;
+ switch (compareType.typeEnum) {
+ case EQ:
+ filter = new Compare.Equal(propertyId, value);
+ break;
+ case GE:
+ filter = new Compare.GreaterOrEqual(propertyId, value);
+ break;
+ case GT:
+ filter = new Compare.Greater(propertyId, value);
+ break;
+ case LE:
+ filter = new Compare.LessOrEqual(propertyId, value);
+ break;
+ case LIKE:
+ filter = new Like(propertyId, value, false);
+ break;
+ case LT:
+ filter = new Compare.Less(propertyId, value);
+ break;
+ case NE:
+ filter = new Not(new Compare.Equal(propertyId, value));
+ break;
+ }
+
+ return filter;
+ }
+
+ @Override
+ public void resetAllFilters() {
+ compareTypeField.setValue(null);
+ valueField.setValue(null);
+ }
+
+ protected void updateCaptions() {
+ captionField.setValue(getCaptionInternal());
+
+ updateContainer();
+ }
+
+ public static class CompareType {
+ private CompareTypeEnum typeEnum;
+ private String caption;
+ private Resource image;
+
+ public CompareType(CompareTypeEnum typeEnum, String caption, Resource image) {
+ super();
+ this.typeEnum = typeEnum;
+ this.caption = caption;
+ this.image = image;
+ }
+
+ public CompareTypeEnum getTypeEnum() {
+ return typeEnum;
+ }
+
+ public void setTypeEnum(CompareTypeEnum typeEnum) {
+ this.typeEnum = typeEnum;
+ }
+
+ public String getCaption() {
+ return caption;
+ }
+
+ public void setCaption(String caption) {
+ this.caption = caption;
+ }
+
+ public Resource getImage() {
+ return image;
+ }
+
+ public void setImage(Resource image) {
+ this.image = image;
+ }
+
+ }
+
+ public enum CompareTypeEnum {
+ EQ, NE, GT, GE, LE, LT, LIKE;
+ }
+}
diff --git a/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/fields/filter2/FilteringComponent.java b/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/fields/filter2/FilteringComponent.java
new file mode 100644
index 0000000..927529d
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/fields/filter2/FilteringComponent.java
@@ -0,0 +1,267 @@
+package org.eclipse.osbp.runtime.web.vaadin.components.fields.filter2;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.function.Consumer;
+import java.util.stream.Collectors;
+
+import org.eclipse.osbp.ecview.core.common.context.IViewContext;
+import org.eclipse.osbp.runtime.web.vaadin.common.data.IBeanSearchServiceFactory;
+
+import com.vaadin.data.Container.Filter;
+import com.vaadin.data.util.filter.And;
+import com.vaadin.shared.ui.MarginInfo;
+import com.vaadin.ui.Alignment;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.ComponentContainer;
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.FormLayout;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.VerticalLayout;
+
+@SuppressWarnings("serial")
+public class FilteringComponent<T> extends CustomComponent implements IFilteringComponent {
+
+ IViewContext viewContext;
+
+ ComponentContainer mainLayout;
+ FormLayout leftForm;
+ FormLayout rightForm;
+ List<ISingleFilterComponent> components = new ArrayList<>();
+
+ private boolean hideGrid;
+ FilteringGridComponent<T> grid;
+
+ private Class<T> rootType;
+
+ private Callback resetFilterCallback;
+
+ private Callback applyFilterCallback;
+
+ private int filterCols;
+
+ public FilteringComponent(IViewContext viewContext, Class<T> rootType, boolean hideGrid) {
+ this(viewContext, rootType, 2, hideGrid);
+ }
+
+ public FilteringComponent(IViewContext viewContext, Class<T> rootType, int filterCols, boolean hideGrid) {
+ this.viewContext = viewContext;
+ this.rootType = rootType;
+ this.hideGrid = hideGrid;
+
+ if (filterCols < 1 || filterCols > 2) {
+ throw new IllegalArgumentException("Columns must be between 1 and 2");
+ }
+ this.filterCols = filterCols;
+
+ init();
+ }
+
+ protected void init() {
+ mainLayout = createMainLayout();
+ setCompositionRoot(mainLayout);
+ setSizeFull();
+ }
+
+ protected ComponentContainer createMainLayout() {
+
+ VerticalLayout mainLayout = new VerticalLayout();
+ mainLayout.setSizeFull();
+
+ // buttons
+ //
+ Button search = new Button("search", e -> {
+ applyFilters();
+ if (applyFilterCallback != null) {
+ applyFilterCallback.callback();
+ }
+ });
+ search.setSizeUndefined();
+
+ Button reset = new Button("reset", e -> {
+ resetAllFilters();
+ if (resetFilterCallback != null) {
+ resetFilterCallback.callback();
+ }
+ });
+ reset.setSizeUndefined();
+
+ HorizontalLayout buttonBar = new HorizontalLayout(search, reset);
+ buttonBar.setSizeUndefined();
+ mainLayout.addComponent(buttonBar);
+
+ // filter part
+ //
+ leftForm = new FormLayout();
+ leftForm.setSizeFull();
+ leftForm.setSpacing(false);
+ leftForm.setMargin(false);
+
+ HorizontalLayout filterColsLayout = new HorizontalLayout(leftForm);
+ mainLayout.addComponent(filterColsLayout);
+ filterColsLayout.setSizeUndefined();
+ filterColsLayout.setWidth("100%");
+ mainLayout.setComponentAlignment(filterColsLayout, Alignment.TOP_LEFT);
+
+ filterColsLayout.setMargin(new MarginInfo(true, true));
+ filterColsLayout.setExpandRatio(leftForm, 1.0f);
+
+ if (filterCols > 1) {
+ rightForm = new FormLayout();
+ rightForm.setSizeFull();
+ rightForm.setSpacing(false);
+ rightForm.setMargin(false);
+ filterColsLayout.addComponent(rightForm);
+ }
+
+ if (rightForm != null) {
+ filterColsLayout.setExpandRatio(rightForm, 1.0f);
+ }
+
+ if (!hideGrid) {
+ // grid part
+ grid = new FilteringGridComponent<T>(viewContext);
+ grid.init(rootType, viewContext.getService(IBeanSearchServiceFactory.class.getName()));
+ grid.setSizeFull();
+ mainLayout.addComponent(grid);
+ mainLayout.setComponentAlignment(grid, Alignment.TOP_LEFT);
+ mainLayout.setExpandRatio(grid, 1.0f);
+ }
+
+ return mainLayout;
+ }
+
+ /**
+ * Adds a component to the filter component.
+ *
+ * @param component
+ * @param index
+ */
+ public void addComponent(ISingleFilterComponent component, int index) {
+ if (filterCols > 1 && index % 2 == 0) {
+ rightForm.addComponent(component);
+ } else {
+ leftForm.addComponent(component);
+ }
+ component.setSizeFull();
+
+ components.add(component);
+ }
+
+ public void removeAllComponents() {
+ components.clear();
+ leftForm.removeAllComponents();
+ if (rightForm != null) {
+ rightForm.removeAllComponents();
+ }
+ if(!hideGrid) {
+ grid.removeAllColumns();
+ }
+ }
+
+ public void setResetFilterCallback(Callback resetFilterCallback) {
+ this.resetFilterCallback = resetFilterCallback;
+ }
+
+ public void setApplyFilterCallback(Callback applyFilterCallback) {
+ this.applyFilterCallback = applyFilterCallback;
+ }
+
+ public void setSelectionConsumer(Consumer<T> selectionConsumer) {
+ if (grid != null) {
+ grid.setSelectionConsumer(selectionConsumer);
+ }
+ }
+
+ public void addBetweenTextComponent(String propertyId, int index) {
+ BetweenTextComponent comp = new BetweenTextComponent(propertyId, viewContext);
+ comp.init();
+ addComponent(comp, index);
+ }
+
+ public <X extends Number & Comparable<?>> void addBetweenDecimalComponent(String propertyId, Class<X> type,
+ int index) {
+ BetweenDecimalComponent<X> comp = new BetweenDecimalComponent<X>(propertyId, type, viewContext);
+ comp.init();
+ addComponent(comp, index);
+ }
+
+ public void addCompareTextComponent(String propertyId, int index) {
+ CompareTextComponent comp = new CompareTextComponent(propertyId, viewContext);
+ comp.init();
+ addComponent(comp, index);
+ }
+
+ public void addCompareDecimalComponent(String propertyId, Class<? extends Number> type, int index) {
+ CompareDecimalComponent comp = new CompareDecimalComponent(propertyId, type, viewContext);
+ comp.init();
+ addComponent(comp, index);
+ }
+
+ public void addCompareDateComponent(String propertyId, int index) {
+ CompareDateComponent comp = new CompareDateComponent(propertyId, viewContext);
+ comp.init();
+ addComponent(comp, index);
+ }
+
+ public void addBetweenDateComponent(String propertyId, int index) {
+ BetweenDateComponent comp = new BetweenDateComponent(propertyId, viewContext);
+ comp.init();
+ addComponent(comp, index);
+ }
+
+ public void addCompareBooleanComponent(String propertyId, int index) {
+ CompareBooleanComponent comp = new CompareBooleanComponent(propertyId, viewContext);
+ comp.init();
+ addComponent(comp, index);
+ }
+
+ public void addGridColumn(String propertyId) {
+ if(!hideGrid) {
+ grid.addColumn(propertyId);
+ }
+ }
+
+ public void dispose() {
+ for (ISingleFilterComponent comp : components) {
+ comp.dispose();
+ }
+ components.clear();
+
+ if(!hideGrid) {
+ grid.dispose();
+ }
+ }
+
+ /**
+ * Returns a proper filter for all components contained.
+ *
+ * @return
+ */
+ public Filter getFilter() {
+ List<Filter> filters = components.stream().filter(c -> c.getFilter() != null).map(c -> c.getFilter())
+ .collect(Collectors.toList());
+ And andFilter = new And(filters.toArray(new Filter[filters.size()]));
+ return andFilter;
+ }
+
+ @Override
+ public void resetAllFilters() {
+ for (ISingleFilterComponent comp : components) {
+ comp.resetAllFilters();
+ }
+ }
+
+ @Override
+ public void applyFilters() {
+ if(!hideGrid) {
+ grid.setFilter(getFilter());
+ }
+ }
+
+ @FunctionalInterface
+ interface Callback {
+ void callback();
+ }
+
+}
diff --git a/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/fields/filter2/FilteringGridComponent.java b/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/fields/filter2/FilteringGridComponent.java
new file mode 100644
index 0000000..56d833b
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/fields/filter2/FilteringGridComponent.java
@@ -0,0 +1,150 @@
+package org.eclipse.osbp.runtime.web.vaadin.components.fields.filter2;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+import java.util.function.Consumer;
+
+import javax.annotation.PostConstruct;
+import javax.inject.Inject;
+
+import org.eclipse.osbp.ecview.core.common.context.ILocaleChangedService;
+import org.eclipse.osbp.ecview.core.common.context.IViewContext;
+import org.eclipse.osbp.runtime.common.i18n.II18nService;
+import org.eclipse.osbp.runtime.common.util.BeanUtils;
+import org.eclipse.osbp.runtime.web.vaadin.common.data.BeanServiceLazyLoadingContainer;
+import org.eclipse.osbp.runtime.web.vaadin.common.data.IBeanSearchService;
+import org.eclipse.osbp.runtime.web.vaadin.common.data.IBeanSearchServiceFactory;
+import org.vaadin.gridutil.renderer.BooleanRenderer;
+
+import com.vaadin.data.Container.Filter;
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.Grid;
+import com.vaadin.ui.Grid.Column;
+import com.vaadin.ui.Grid.SelectionMode;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.renderers.DateRenderer;
+import com.vaadin.ui.renderers.NumberRenderer;
+
+@SuppressWarnings("serial")
+public class FilteringGridComponent<T> extends CustomComponent implements ILocaleChangedService.LocaleListener {
+
+ final IViewContext viewContext;
+
+ Class<T> type;
+
+ VerticalLayout mainLayout;
+ Grid grid;
+
+ IBeanSearchService<T> service;
+ BeanServiceLazyLoadingContainer<T> container;
+
+ private List<Object> columns = new ArrayList<>();
+
+ private Consumer<T> selectionConsumer;
+
+ private II18nService i18nService;
+
+ @Inject
+ public FilteringGridComponent(IViewContext viewContext) {
+ this.viewContext = viewContext;
+ }
+
+ @SuppressWarnings("unchecked")
+ @PostConstruct
+ public void init(Class<T> type, IBeanSearchServiceFactory factory) {
+ this.type = type;
+ service = factory.createService(type);
+ container = new BeanServiceLazyLoadingContainer<T>(service, type, null);
+
+ mainLayout = new VerticalLayout();
+ mainLayout.setSizeFull();
+ setCompositionRoot(mainLayout);
+
+ grid = new Grid();
+ grid.setSizeFull();
+ mainLayout.addComponent(grid);
+
+ grid.setContainerDataSource(container);
+ grid.removeAllColumns();
+
+ grid.addSelectionListener(e -> {
+ if (selectionConsumer != null) {
+ selectionConsumer.accept((T) grid.getSelectedRow());
+ }
+ });
+
+ ILocaleChangedService service = viewContext.getService(ILocaleChangedService.class.getName());
+ service.addLocaleListener(this);
+
+ i18nService = viewContext.getService(II18nService.ID);
+ }
+
+ public void dispose() {
+ ILocaleChangedService service = viewContext.getService(ILocaleChangedService.class.getName());
+ service.removeLocaleListener(this);
+ }
+
+ public void setSelectionMode(SelectionMode mode) {
+ if (grid == null) {
+ throw new IllegalStateException("Call #init before");
+ }
+ grid.setSelectionMode(mode);
+ }
+
+ public void addColumn(String propertyId) {
+ if (columns.contains(propertyId)) {
+ return;
+ }
+
+ if (propertyId.contains(".")) {
+ container.addNestedContainerProperty(propertyId);
+ }
+
+ columns.add(propertyId);
+ grid.setColumns(columns.toArray(new Object[columns.size()]));
+
+ Column col = grid.getColumn(propertyId);
+ if (BeanUtils.isBoolean(type, propertyId)) {
+ col.setRenderer(new BooleanRenderer());
+ } else if (BeanUtils.isDecimal(type, propertyId)) {
+ col.setRenderer(new NumberRenderer());
+ } else if (BeanUtils.isDate(type, propertyId)) {
+ col.setRenderer(new DateRenderer());
+ }
+
+ }
+
+ protected Class<?> getType(String propertyId) {
+ return BeanUtils.getNestedFieldType(type, propertyId);
+ }
+
+ /**
+ * Sets a filter to the container.
+ *
+ * @param filter
+ */
+ public void setFilter(Filter filter) {
+ container.removeAllContainerFilters();
+ if (filter != null) {
+ container.addContainerFilter(filter);
+ }
+ }
+
+ public void removeAllColumns() {
+ columns.clear();
+ grid.removeAllColumns();
+ }
+
+ public void setSelectionConsumer(Consumer<T> selectionConsumer) {
+ this.selectionConsumer = selectionConsumer;
+ }
+
+ @Override
+ public void localeChanged(Locale locale) {
+ for (Column col : grid.getColumns()) {
+ col.setHeaderCaption(
+ Util.getCaption(i18nService, (String) col.getPropertyId(), (String) col.getPropertyId(), locale));
+ }
+ }
+}
diff --git a/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/fields/filter2/IFilteringComponent.java b/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/fields/filter2/IFilteringComponent.java
new file mode 100644
index 0000000..e74b512
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/fields/filter2/IFilteringComponent.java
@@ -0,0 +1,38 @@
+package org.eclipse.osbp.runtime.web.vaadin.components.fields.filter2;
+
+import com.vaadin.data.Container.Filter;
+import com.vaadin.ui.Component;
+
+public interface IFilteringComponent extends Component {
+
+ /**
+ * Returns a proper vaadin filter.
+ *
+ * @return
+ */
+ Filter getFilter();
+
+ /**
+ * Resets all filters.
+ */
+ void resetAllFilters();
+
+ void applyFilters();
+
+ void addComponent(ISingleFilterComponent component, int index);
+
+ void addBetweenTextComponent(String propertyId, int index);
+
+ <T extends Number & Comparable<?>> void addBetweenDecimalComponent(String propertyId, Class<T> type, int index);
+
+ void addCompareTextComponent(String propertyId, int index);
+
+ void addCompareDecimalComponent(String propertyId, Class<? extends Number> type, int index);
+
+ void addCompareDateComponent(String propertyId, int index);
+
+ void addBetweenDateComponent(String propertyId, int index);
+
+ void addCompareBooleanComponent(String propertyId, int index);
+
+}
diff --git a/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/fields/filter2/ISingleFilterComponent.java b/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/fields/filter2/ISingleFilterComponent.java
new file mode 100644
index 0000000..0dfd41e
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/fields/filter2/ISingleFilterComponent.java
@@ -0,0 +1,25 @@
+package org.eclipse.osbp.runtime.web.vaadin.components.fields.filter2;
+
+import com.vaadin.data.Container.Filter;
+import com.vaadin.ui.Component;
+
+public interface ISingleFilterComponent extends Component {
+
+ /**
+ * Returns a proper vaadin filter.
+ *
+ * @return
+ */
+ Filter getFilter();
+
+ /**
+ * Resets all filters.
+ */
+ void resetAllFilters();
+
+ /**
+ * Dispose the element
+ */
+ void dispose();
+
+}
diff --git a/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/fields/filter2/OnlyFilteringComponent.java b/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/fields/filter2/OnlyFilteringComponent.java
new file mode 100644
index 0000000..557d641
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/fields/filter2/OnlyFilteringComponent.java
@@ -0,0 +1,230 @@
+package org.eclipse.osbp.runtime.web.vaadin.components.fields.filter2;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import org.eclipse.osbp.ecview.core.common.context.IViewContext;
+
+import com.vaadin.data.Container.Filter;
+import com.vaadin.data.util.filter.And;
+import com.vaadin.shared.ui.MarginInfo;
+import com.vaadin.ui.Alignment;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.ComponentContainer;
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.FormLayout;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.VerticalLayout;
+
+@SuppressWarnings("serial")
+public class OnlyFilteringComponent<T> extends CustomComponent implements IFilteringComponent {
+
+ IViewContext viewContext;
+
+ ComponentContainer mainLayout;
+ FormLayout leftForm;
+ FormLayout rightForm;
+ List<ISingleFilterComponent> components = new ArrayList<>();
+
+ private Class<T> rootType;
+
+ private Callback resetFilterCallback;
+
+ private Callback applyFilterCallback;
+
+ private int filterCols;
+
+ public OnlyFilteringComponent(IViewContext viewContext, Class<T> rootType) {
+ this(viewContext, rootType, 2);
+ }
+
+ public OnlyFilteringComponent(IViewContext viewContext, Class<T> rootType, int filterCols) {
+ this.viewContext = viewContext;
+ this.rootType = rootType;
+
+ if (filterCols < 1 || filterCols > 2) {
+ throw new IllegalArgumentException("Columns must be between 1 and 2");
+ }
+ this.filterCols = filterCols;
+
+ init();
+ }
+
+ protected void init() {
+ mainLayout = createMainLayout();
+ setCompositionRoot(mainLayout);
+ setSizeFull();
+ }
+
+ protected ComponentContainer createMainLayout() {
+
+ VerticalLayout mainLayout = new VerticalLayout();
+ mainLayout.setSizeFull();
+
+ // buttons
+ //
+ Button search = new Button("search", e -> {
+ applyFilters();
+ });
+ search.setSizeUndefined();
+
+ Button reset = new Button("reset", e -> {
+ resetAllFilters();
+ });
+ reset.setSizeUndefined();
+
+ HorizontalLayout buttonBar = new HorizontalLayout(search, reset);
+ buttonBar.setSizeUndefined();
+ mainLayout.addComponent(buttonBar);
+
+ // filter part
+ //
+ leftForm = new FormLayout();
+ leftForm.setSizeFull();
+ leftForm.setSpacing(false);
+ leftForm.setMargin(false);
+
+ HorizontalLayout filterColsLayout = new HorizontalLayout(leftForm);
+ mainLayout.addComponent(filterColsLayout);
+ filterColsLayout.setSizeUndefined();
+ filterColsLayout.setWidth("100%");
+ mainLayout.setComponentAlignment(filterColsLayout, Alignment.TOP_LEFT);
+
+ filterColsLayout.setMargin(new MarginInfo(true, true));
+ filterColsLayout.setExpandRatio(leftForm, 1.0f);
+
+ if (filterCols > 1) {
+ rightForm = new FormLayout();
+ rightForm.setSizeFull();
+ rightForm.setSpacing(false);
+ rightForm.setMargin(false);
+ filterColsLayout.addComponent(rightForm);
+ }
+
+ if (rightForm != null) {
+ filterColsLayout.setExpandRatio(rightForm, 1.0f);
+ }
+
+ return mainLayout;
+ }
+
+ /**
+ * Adds a component to the filter component.
+ *
+ * @param component
+ * @param index
+ */
+ public void addComponent(ISingleFilterComponent component, int index) {
+ if (filterCols > 1 && index % 2 == 0) {
+ rightForm.addComponent(component);
+ } else {
+ leftForm.addComponent(component);
+ }
+ component.setSizeFull();
+
+ components.add(component);
+ }
+
+ public void removeAllComponents() {
+ components.clear();
+ leftForm.removeAllComponents();
+ if (rightForm != null) {
+ rightForm.removeAllComponents();
+ }
+ }
+
+ public void setResetFilterCallback(Callback resetFilterCallback) {
+ this.resetFilterCallback = resetFilterCallback;
+ }
+
+ public void setApplyFilterCallback(Callback applyFilterCallback) {
+ this.applyFilterCallback = applyFilterCallback;
+ }
+
+ public void addBetweenTextComponent(String propertyId, int index) {
+ BetweenTextComponent comp = new BetweenTextComponent(propertyId, viewContext);
+ comp.init();
+ addComponent(comp, index);
+ }
+
+ public <X extends Number & Comparable<?>> void addBetweenDecimalComponent(String propertyId, Class<X> type,
+ int index) {
+ BetweenDecimalComponent<X> comp = new BetweenDecimalComponent<X>(propertyId, type, viewContext);
+ comp.init();
+ addComponent(comp, index);
+ }
+
+ public void addCompareTextComponent(String propertyId, int index) {
+ CompareTextComponent comp = new CompareTextComponent(propertyId, viewContext);
+ comp.init();
+ addComponent(comp, index);
+ }
+
+ public void addCompareDecimalComponent(String propertyId, Class<? extends Number> type, int index) {
+ CompareDecimalComponent comp = new CompareDecimalComponent(propertyId, type, viewContext);
+ comp.init();
+ addComponent(comp, index);
+ }
+
+ public void addCompareDateComponent(String propertyId, int index) {
+ CompareDateComponent comp = new CompareDateComponent(propertyId, viewContext);
+ comp.init();
+ addComponent(comp, index);
+ }
+
+ public void addBetweenDateComponent(String propertyId, int index) {
+ BetweenDateComponent comp = new BetweenDateComponent(propertyId, viewContext);
+ comp.init();
+ addComponent(comp, index);
+ }
+
+ public void addCompareBooleanComponent(String propertyId, int index) {
+ CompareBooleanComponent comp = new CompareBooleanComponent(propertyId, viewContext);
+ comp.init();
+ addComponent(comp, index);
+ }
+
+ public void dispose() {
+ for (ISingleFilterComponent comp : components) {
+ comp.dispose();
+ }
+ components.clear();
+ }
+
+ /**
+ * Returns a proper filter for all components contained.
+ *
+ * @return
+ */
+ public Filter getFilter() {
+ List<Filter> filters = components.stream().filter(c -> c.getFilter() != null).map(c -> c.getFilter())
+ .collect(Collectors.toList());
+ And andFilter = new And(filters.toArray(new Filter[filters.size()]));
+ return andFilter;
+ }
+
+ @Override
+ public void resetAllFilters() {
+ for (ISingleFilterComponent comp : components) {
+ comp.resetAllFilters();
+ }
+
+ if (resetFilterCallback != null) {
+ resetFilterCallback.callback();
+ }
+ }
+
+ @Override
+ public void applyFilters() {
+ if (applyFilterCallback != null) {
+ applyFilterCallback.callback();
+ }
+ }
+
+ @FunctionalInterface
+ interface Callback {
+ void callback();
+ }
+
+}
diff --git a/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/fields/filter2/Util.java b/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/fields/filter2/Util.java
new file mode 100644
index 0000000..967bbc5
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.components/src/org/eclipse/osbp/runtime/web/vaadin/components/fields/filter2/Util.java
@@ -0,0 +1,177 @@
+/**
+ * Copyright (c) 2011, 2015 - Lunifera GmbH (Gross Enzersdorf, Austria), Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Florian Pirchner - Initial implementation
+ */
+package org.eclipse.osbp.runtime.web.vaadin.components.fields.filter2;
+
+import java.util.Locale;
+
+import org.eclipse.osbp.runtime.common.i18n.I18nUtil;
+import org.eclipse.osbp.runtime.common.i18n.II18nService;
+import org.eclipse.osbp.runtime.web.vaadin.common.resource.IResourceProvider;
+
+import com.vaadin.server.Resource;
+import com.vaadin.ui.Component;
+
+/**
+ * The Class Util.
+ */
+public class Util {
+
+ /**
+ * Apply captions.
+ *
+ * @param service
+ * the service
+ * @param label
+ * the label
+ * @param i18nLabelKey
+ * the i18n label key
+ * @param locale
+ * the locale
+ * @param component
+ * the component
+ */
+ public static void applyCaptions(II18nService service, String label,
+ String i18nLabelKey, Locale locale, Component component) {
+ if(component != null) {
+ if (service != null && isValid(i18nLabelKey)) {
+ String translation = service.getValue(i18nLabelKey, locale);
+ if (translation == null || translation.equals("")) {
+ // caption must be set in all cases - even if it is null, else icon-only mode will not work
+ // if already set by other process then do not translate
+ component.setCaption(label);
+ } else {
+ component.setCaption(translation);
+ }
+
+ } else {
+ // caption must be set in all cases - even if it is null, else icon-only mode will not work
+ component.setCaption(label);
+ }
+ }
+ }
+
+ /**
+ * Gets the caption.
+ *
+ * @param service
+ * the service
+ * @param label
+ * the label
+ * @param i18nLabelKey
+ * the i18n label key
+ * @param locale
+ * the locale
+ * @return the caption
+ */
+ public static String getCaption(II18nService service, String label,
+ String i18nLabelKey, Locale locale) {
+
+ String result = i18nLabelKey;
+
+ if (service != null && isValid(i18nLabelKey)) {
+ String translation = service.getValue(i18nLabelKey, locale);
+ if (translation == null || translation.equals("")) {
+ if (isValid(label)) {
+ result = label;
+ }
+ } else {
+ result = translation;
+ }
+
+ } else {
+ if (isValid(label)) {
+ result = label;
+ }
+ }
+ return result != null ? result : "";
+ }
+
+ /**
+ * Apply caption icons.
+ *
+ * @param service
+ * the service
+ * @param provider
+ * the provider
+ * @param i18nLabelKey
+ * the i18n label key
+ * @param locale
+ * the locale
+ * @param component
+ * the component
+ */
+ public static void applyCaptionIcons(II18nService service,
+ IResourceProvider provider, String i18nLabelKey, Locale locale,
+ Component component) {
+ String iconKey = I18nUtil.getImageKey(i18nLabelKey);
+
+ if (service != null && provider != null && isValid(iconKey)) {
+ String iconResourcePath = service.getValue(iconKey, locale);
+ if (iconResourcePath != null && !iconResourcePath.equals("")) {
+ component.setIcon(provider.getResource(iconResourcePath));
+ }
+ }
+ }
+
+ /**
+ * Apply caption icons.
+ *
+ * @param service
+ * the service
+ * @param provider
+ * the provider
+ * @param i18nLabelKey
+ * the i18n label key
+ * @param locale
+ * the locale
+ * @param callback
+ * the callback
+ */
+ public static void applyCaptionIcons(II18nService service,
+ IResourceProvider provider, String i18nLabelKey, Locale locale,
+ ResourceCallback callback) {
+ String iconKey = I18nUtil.getImageKey(i18nLabelKey);
+
+ if (service != null && provider != null && isValid(iconKey)) {
+ String iconResourcePath = service.getValue(iconKey, locale);
+ if (iconResourcePath != null && !iconResourcePath.equals("")) {
+ callback.setIcon(provider.getResource(iconResourcePath));
+ }
+ }
+ }
+
+ /**
+ * Checks if is valid.
+ *
+ * @param value
+ * the value
+ * @return true, if is valid
+ */
+ private static boolean isValid(String value) {
+ return value != null && !value.equals("");
+ }
+
+ /**
+ * Callback to set resources.
+ */
+ public interface ResourceCallback {
+
+ /**
+ * Sets the icon.
+ *
+ * @param resource
+ * the new icon
+ */
+ void setIcon(Resource resource);
+
+ }
+
+}
diff --git a/org.eclipse.osbp.runtime.web.vaadin.databinding.tests/.classpath b/org.eclipse.osbp.runtime.web.vaadin.databinding.tests/.classpath
new file mode 100644
index 0000000..cf36b56
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.databinding.tests/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src/"/>
+ <classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/org.eclipse.osbp.runtime.web.vaadin.databinding.tests/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.runtime.web.vaadin.databinding.tests/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.databinding.tests/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.runtime.web.vaadin.databinding.tests/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.osbp.runtime.web.vaadin.databinding.tests/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..c537b63
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.databinding.tests/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/org.eclipse.osbp.runtime.web.vaadin.databinding.tests/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.runtime.web.vaadin.databinding.tests/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.databinding.tests/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.runtime.web.vaadin.databinding.tests/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.runtime.web.vaadin.databinding.tests/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..19e3115
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.databinding.tests/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,11 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+BuilderConfiguration.is_project_specific=true
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.emf-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.runtime.web.vaadin.databinding.tests/META-INF/MANIFEST.MF b/org.eclipse.osbp.runtime.web.vaadin.databinding.tests/META-INF/MANIFEST.MF
index 3e1ad67..c870354 100644
--- a/org.eclipse.osbp.runtime.web.vaadin.databinding.tests/META-INF/MANIFEST.MF
+++ b/org.eclipse.osbp.runtime.web.vaadin.databinding.tests/META-INF/MANIFEST.MF
@@ -5,16 +5,16 @@
Bundle-Version: 0.9.0.qualifier
Bundle-ActivationPolicy: lazy
Require-Bundle: javax.servlet;bundle-version="3.0.0";visibility:=reexport,
- com.vaadin.shared;bundle-version="[7.5.7,7.7.0)";visibility:=reexport,
- com.vaadin.server;bundle-version="[7.5.7,7.7.0)";visibility:=reexport,
- org.eclipse.core.databinding;bundle-version="1.4.1";visibility:=reexport,
- org.eclipse.core.databinding.beans;bundle-version="1.2.200";visibility:=reexport,
- org.eclipse.core.databinding.observable;bundle-version="1.4.1";visibility:=reexport,
- org.eclipse.core.databinding.property;bundle-version="1.4.200";visibility:=reexport,
+ com.vaadin.shared;bundle-version="[7.7.6,7.8.0)";visibility:=reexport,
+ com.vaadin.server;bundle-version="[7.7.6,7.8.0)";visibility:=reexport,
+ org.eclipse.core.databinding;bundle-version="[1.6.0,1.7.0)";visibility:=reexport,
+ org.eclipse.core.databinding.beans;bundle-version="[1.3.100,1.4.0)";visibility:=reexport,
+ org.eclipse.core.databinding.observable;bundle-version="[1.6.0,1.7.0)";visibility:=reexport,
+ org.eclipse.core.databinding.property;bundle-version="[1.6.0,1.7.0)";visibility:=reexport,
org.apache.commons.beanutils;bundle-version="1.9.2",
org.eclipse.osbp.runtime.web.vaadin.databinding;bundle-version="[0.9.0,0.10.0)",
org.junit;bundle-version="4.10.0",
org.apache.commons.logging;bundle-version="1.0.4",
org.jsoup;bundle-version="1.7.2"
-Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Bundle-Vendor: Eclipse OSBP
diff --git a/org.eclipse.osbp.runtime.web.vaadin.databinding.tests/src/org/eclipse/osbp/runtime/web/vaadin/databinding/tests/model/DefaultUI.java b/org.eclipse.osbp.runtime.web.vaadin.databinding.tests/src/org/eclipse/osbp/runtime/web/vaadin/databinding/tests/model/DefaultUI.java
index df46133..05124ef 100644
--- a/org.eclipse.osbp.runtime.web.vaadin.databinding.tests/src/org/eclipse/osbp/runtime/web/vaadin/databinding/tests/model/DefaultUI.java
+++ b/org.eclipse.osbp.runtime.web.vaadin.databinding.tests/src/org/eclipse/osbp/runtime/web/vaadin/databinding/tests/model/DefaultUI.java
@@ -30,6 +30,7 @@
try {
VaadinSession session = new CustomVaadinSession(new VaadinServletService(
null, new CustomDeploymentConfiguration()));
+ session.lock();
setSession(session);
VaadinSession.setCurrent(session);
diff --git a/org.eclipse.osbp.runtime.web.vaadin.databinding/.classpath b/org.eclipse.osbp.runtime.web.vaadin.databinding/.classpath
new file mode 100644
index 0000000..cf36b56
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.databinding/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src/"/>
+ <classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/org.eclipse.osbp.runtime.web.vaadin.databinding/.project b/org.eclipse.osbp.runtime.web.vaadin.databinding/.project
index 31b2223..03bd858 100644
--- a/org.eclipse.osbp.runtime.web.vaadin.databinding/.project
+++ b/org.eclipse.osbp.runtime.web.vaadin.databinding/.project
@@ -31,11 +31,6 @@
</arguments>
</buildCommand>
<buildCommand>
- <name>com.vaadin.integration.eclipse.addonStylesBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
<name>org.sonarlint.eclipse.core.sonarlintBuilder</name>
<arguments>
</arguments>
diff --git a/org.eclipse.osbp.runtime.web.vaadin.databinding/.settings/com.vaadin.integration.eclipse.prefs b/org.eclipse.osbp.runtime.web.vaadin.databinding/.settings/com.vaadin.integration.eclipse.prefs
new file mode 100644
index 0000000..0904e44
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.databinding/.settings/com.vaadin.integration.eclipse.prefs
@@ -0,0 +1,2 @@
+com.vaadin.integration.eclipse.mavenLatestVersionsUpgrade=["7.7.7"]
+eclipse.preferences.version=1
diff --git a/org.eclipse.osbp.runtime.web.vaadin.databinding/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.runtime.web.vaadin.databinding/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.databinding/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.runtime.web.vaadin.databinding/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.osbp.runtime.web.vaadin.databinding/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..0c68a61
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.databinding/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/org.eclipse.osbp.runtime.web.vaadin.databinding/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.runtime.web.vaadin.databinding/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.databinding/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.runtime.web.vaadin.databinding/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.runtime.web.vaadin.databinding/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..19e3115
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.databinding/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,11 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+BuilderConfiguration.is_project_specific=true
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.emf-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.runtime.web.vaadin.databinding/META-INF/MANIFEST.MF b/org.eclipse.osbp.runtime.web.vaadin.databinding/META-INF/MANIFEST.MF
index 486871d..700e32c 100644
--- a/org.eclipse.osbp.runtime.web.vaadin.databinding/META-INF/MANIFEST.MF
+++ b/org.eclipse.osbp.runtime.web.vaadin.databinding/META-INF/MANIFEST.MF
@@ -5,12 +5,12 @@
Bundle-Version: 0.9.0.qualifier
Bundle-ActivationPolicy: lazy
Require-Bundle: javax.servlet;bundle-version="3.0.0",
- com.vaadin.shared;bundle-version="[7.5.7,7.7.0)",
- com.vaadin.server;bundle-version="[7.5.7,7.7.0)",
- org.eclipse.core.databinding;bundle-version="[1.4.1,2.0.0)",
- org.eclipse.core.databinding.observable;bundle-version="[1.4.1,2.0.0)",
- org.eclipse.core.databinding.beans;bundle-version="[1.2.200,2.0.0)",
- org.eclipse.core.databinding.property;bundle-version="[1.4.200,2.0.0)",
+ com.vaadin.shared;bundle-version="[7.7.6,7.8.0)",
+ com.vaadin.server;bundle-version="[7.7.6,7.8.0)",
+ org.eclipse.core.databinding;bundle-version="[1.6.0,1.7.0)",
+ org.eclipse.core.databinding.observable;bundle-version="[1.6.0,1.7.0)",
+ org.eclipse.core.databinding.beans;bundle-version="[1.3.100,1.4.0)",
+ org.eclipse.core.databinding.property;bundle-version="[1.6.0,1.7.0)",
org.apache.commons.beanutils;bundle-version="1.9.2",
org.eclipse.core.runtime;bundle-version="3.9.0",
com.ibm.icu;bundle-version="50.1.1"
diff --git a/org.eclipse.osbp.runtime.web.vaadin.databinding/src/org/eclipse/osbp/runtime/web/vaadin/databinding/model/internal/ContainerItemSetContentProperty.java b/org.eclipse.osbp.runtime.web.vaadin.databinding/src/org/eclipse/osbp/runtime/web/vaadin/databinding/model/internal/ContainerItemSetContentProperty.java
index 1a509d8..f107074 100644
--- a/org.eclipse.osbp.runtime.web.vaadin.databinding/src/org/eclipse/osbp/runtime/web/vaadin/databinding/model/internal/ContainerItemSetContentProperty.java
+++ b/org.eclipse.osbp.runtime.web.vaadin.databinding/src/org/eclipse/osbp/runtime/web/vaadin/databinding/model/internal/ContainerItemSetContentProperty.java
@@ -64,7 +64,7 @@
}
@Override
- @SuppressWarnings("rawtypes")
+ @SuppressWarnings({ "rawtypes", "unchecked" })
protected void doSetList(final Object source, List list, ListDiff diff) {
final Container ds = Util.getContainer(source);
// set changes on datasource. It will notify listener - BUT ensure
@@ -75,7 +75,6 @@
//
if (source instanceof AbstractSelect) {
AbstractSelect select = (AbstractSelect) source;
- select.unselect(element);
}
ds.removeItem(element);
}
diff --git a/org.eclipse.osbp.runtime.web.vaadin.databinding/src/org/eclipse/osbp/runtime/web/vaadin/databinding/model/internal/PropertyValueProperty.java b/org.eclipse.osbp.runtime.web.vaadin.databinding/src/org/eclipse/osbp/runtime/web/vaadin/databinding/model/internal/PropertyValueProperty.java
index a6d7347..18c2043 100644
--- a/org.eclipse.osbp.runtime.web.vaadin.databinding/src/org/eclipse/osbp/runtime/web/vaadin/databinding/model/internal/PropertyValueProperty.java
+++ b/org.eclipse.osbp.runtime.web.vaadin.databinding/src/org/eclipse/osbp/runtime/web/vaadin/databinding/model/internal/PropertyValueProperty.java
@@ -27,8 +27,7 @@
}
- public INativePropertyListener adaptListener(
- ISimplePropertyListener listener) {
+ public INativePropertyListener adaptListener(ISimplePropertyListener listener) {
return new PropertyValueChangeListener(this, listener);
}
@@ -46,18 +45,28 @@
@SuppressWarnings("rawtypes")
@Override
protected void doSetValue(Object source, Object value) {
+ // if (source instanceof AbstractField) {
+ // AbstractField field = (AbstractField) source;
+ // if (!field.isValid()) {
+ // // workaround - if value is invalid, then property#setValue will
+ // // not change the field value. So we need to reset the value
+ // // internally to the datasource value
+ // field.discard();
+ // }
+ // }
+
+ Property<Object> property = Util.getProperty(source);
+ property.setValue(value);
+
if (source instanceof AbstractField) {
AbstractField field = (AbstractField) source;
- if (!field.isValid()) {
+ if (field.getValue() != value) {
// workaround - if value is invalid, then property#setValue will
// not change the field value. So we need to reset the value
// internally to the datasource value
field.discard();
}
}
-
- Property<Object> property = Util.getProperty(source);
- property.setValue(value);
}
}
\ No newline at end of file
diff --git a/org.eclipse.osbp.runtime.web.vaadin.filter.jpa/META-INF/MANIFEST.MF b/org.eclipse.osbp.runtime.web.vaadin.filter.jpa/META-INF/MANIFEST.MF
index ae21bd7..4074309 100644
--- a/org.eclipse.osbp.runtime.web.vaadin.filter.jpa/META-INF/MANIFEST.MF
+++ b/org.eclipse.osbp.runtime.web.vaadin.filter.jpa/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@
Bundle-Name: org.eclipse.osbp.runtime.web.vaadin.filter.jpa
Bundle-SymbolicName: org.eclipse.osbp.runtime.web.vaadin.filter.jpa
Bundle-Version: 0.9.0.qualifier
-Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Bundle-ActivationPolicy: lazy
Bundle-Vendor: Eclipse OSBP
Import-Package: javax.persistence;version="2.1.0",
@@ -13,9 +13,9 @@
org.osgi.framework;version="1.8.0",
org.osgi.service.component;version="1.2.2",
org.osgi.service.component.annotations;version="1.2.0"
-Require-Bundle: com.vaadin.client;bundle-version="[7.0.0,7.7.0)",
- com.vaadin.server;bundle-version="[7.0.0,7.7.0)",
- com.vaadin.shared;bundle-version="[7.0.0,7.7.0)",
+Require-Bundle: com.vaadin.client;bundle-version="[7.7.6,7.8.0)",
+ com.vaadin.server;bundle-version="[7.7.6,7.8.0)",
+ com.vaadin.shared;bundle-version="[7.7.6,7.8.0)",
com.google.guava;bundle-version="15.0.0",
org.eclipse.osbp.runtime.web.vaadin.common;bundle-version="[0.9.0,0.10.0)"
Service-Component: OSGI-INF/org.eclipse.osbp.runtime.web.vaadin.filter.jpa.Filters.xml
diff --git a/org.eclipse.osbp.runtime.web.vaadin.osgi.tests/.classpath b/org.eclipse.osbp.runtime.web.vaadin.osgi.tests/.classpath
new file mode 100644
index 0000000..cf36b56
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.osgi.tests/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src/"/>
+ <classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/org.eclipse.osbp.runtime.web.vaadin.osgi.tests/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.runtime.web.vaadin.osgi.tests/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.osgi.tests/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.runtime.web.vaadin.osgi.tests/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.osbp.runtime.web.vaadin.osgi.tests/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..c537b63
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.osgi.tests/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/org.eclipse.osbp.runtime.web.vaadin.osgi.tests/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.runtime.web.vaadin.osgi.tests/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.osgi.tests/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.runtime.web.vaadin.osgi.tests/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.runtime.web.vaadin.osgi.tests/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..fe45c94
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.osgi.tests/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,7 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.runtime.web.vaadin.osgi.tests/META-INF/MANIFEST.MF b/org.eclipse.osbp.runtime.web.vaadin.osgi.tests/META-INF/MANIFEST.MF
index e521c3c..e59328f 100644
--- a/org.eclipse.osbp.runtime.web.vaadin.osgi.tests/META-INF/MANIFEST.MF
+++ b/org.eclipse.osbp.runtime.web.vaadin.osgi.tests/META-INF/MANIFEST.MF
@@ -17,10 +17,10 @@
org.apache.shiro.core;bundle-version="1.2.1",
org.eclipse.osbp.runtime.web.vaadin.common;bundle-version="[0.9.0,0.10.0)",
org.eclipse.equinox.common;bundle-version="3.6.100",
- com.vaadin.server;bundle-version="[7.5.7,7.7.0)",
- com.vaadin.shared;bundle-version="[7.5.7,7.7.0)",
+ com.vaadin.server;bundle-version="[7.7.6,7.8.0)",
+ com.vaadin.shared;bundle-version="[7.7.6,7.8.0)",
org.jsoup;bundle-version="1.7.2"
-Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Bundle-Vendor: Eclipse OSBP
Service-Component: OSGI-INF/*.xml
Import-Package: javax.servlet;version="2.6.0",
diff --git a/org.eclipse.osbp.runtime.web.vaadin.osgi/.classpath b/org.eclipse.osbp.runtime.web.vaadin.osgi/.classpath
new file mode 100644
index 0000000..cf36b56
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.osgi/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src/"/>
+ <classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/org.eclipse.osbp.runtime.web.vaadin.osgi/.project b/org.eclipse.osbp.runtime.web.vaadin.osgi/.project
index 79fa0c5..739e18e 100644
--- a/org.eclipse.osbp.runtime.web.vaadin.osgi/.project
+++ b/org.eclipse.osbp.runtime.web.vaadin.osgi/.project
@@ -31,11 +31,6 @@
</arguments>
</buildCommand>
<buildCommand>
- <name>com.vaadin.integration.eclipse.addonStylesBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
<name>org.sonarlint.eclipse.core.sonarlintBuilder</name>
<arguments>
</arguments>
@@ -45,11 +40,17 @@
<arguments>
</arguments>
</buildCommand>
+ <buildCommand>
+ <name>org.eclipse.babel.editor.rbeBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
<nature>org.eclipse.m2e.core.maven2Nature</nature>
<nature>org.eclipse.pde.PluginNature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.babel.editor.rbeNature</nature>
</natures>
</projectDescription>
diff --git a/org.eclipse.osbp.runtime.web.vaadin.osgi/.settings/com.vaadin.integration.eclipse.prefs b/org.eclipse.osbp.runtime.web.vaadin.osgi/.settings/com.vaadin.integration.eclipse.prefs
new file mode 100644
index 0000000..0904e44
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.osgi/.settings/com.vaadin.integration.eclipse.prefs
@@ -0,0 +1,2 @@
+com.vaadin.integration.eclipse.mavenLatestVersionsUpgrade=["7.7.7"]
+eclipse.preferences.version=1
diff --git a/org.eclipse.osbp.runtime.web.vaadin.osgi/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.runtime.web.vaadin.osgi/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.osgi/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.runtime.web.vaadin.osgi/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.osbp.runtime.web.vaadin.osgi/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..c537b63
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.osgi/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/org.eclipse.osbp.runtime.web.vaadin.osgi/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.runtime.web.vaadin.osgi/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.osgi/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.runtime.web.vaadin.osgi/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.runtime.web.vaadin.osgi/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..19e3115
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.osgi/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,11 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+BuilderConfiguration.is_project_specific=true
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.emf-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.runtime.web.vaadin.osgi/META-INF/MANIFEST.MF b/org.eclipse.osbp.runtime.web.vaadin.osgi/META-INF/MANIFEST.MF
index e748a10..50f0433 100644
--- a/org.eclipse.osbp.runtime.web.vaadin.osgi/META-INF/MANIFEST.MF
+++ b/org.eclipse.osbp.runtime.web.vaadin.osgi/META-INF/MANIFEST.MF
@@ -5,10 +5,10 @@
Bundle-Name: org.eclipse.osbp.runtime.web.vaadin.osgi
Bundle-SymbolicName: org.eclipse.osbp.runtime.web.vaadin.osgi;singleton:=true
Created-By: ApacheMaven
-Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Require-Bundle: org.eclipse.equinox.common;bundle-version="3.6.100",
- com.vaadin.server;bundle-version="[7.0.0,7.7.0)",
- com.vaadin.shared;bundle-version="[7.0.0,7.7.0)",
+ com.vaadin.server;bundle-version="[7.7.6,7.8.0)",
+ com.vaadin.shared;bundle-version="[7.7.6,7.8.0)",
org.jsoup;bundle-version="1.7.2",
org.slf4j.api;bundle-version="1.7.2"
Build-Jdk: 1.7.0_15
@@ -18,10 +18,9 @@
Bundle-ManifestVersion: 2
Import-Package: javax.servlet;version="2.6.0",
javax.servlet.http;version="2.6.0",
- org.apache.shiro.web.servlet;version="1.2.0",
org.eclipse.equinox.http.servlet;version="1.1.0",
- org.eclipse.osgi.framework.console;version="1.1.0",
org.eclipse.osbp.runtime.common.dispose;version="0.9.0",
+ org.eclipse.osgi.framework.console;version="1.1.0",
org.osgi.framework;version="1.7.0",
org.osgi.framework.wiring;version="1.1.0",
org.osgi.service.cm;version="1.4.0",
diff --git a/org.eclipse.osbp.runtime.web.vaadin.osgi/src/org/eclipse/osbp/runtime/web/vaadin/osgi/webapp/VaadinApplication.java b/org.eclipse.osbp.runtime.web.vaadin.osgi/src/org/eclipse/osbp/runtime/web/vaadin/osgi/webapp/VaadinApplication.java
index 19ddedf..dc3af06 100644
--- a/org.eclipse.osbp.runtime.web.vaadin.osgi/src/org/eclipse/osbp/runtime/web/vaadin/osgi/webapp/VaadinApplication.java
+++ b/org.eclipse.osbp.runtime.web.vaadin.osgi/src/org/eclipse/osbp/runtime/web/vaadin/osgi/webapp/VaadinApplication.java
@@ -23,7 +23,6 @@
import javax.servlet.ServletException;
-import org.apache.shiro.web.servlet.IniShiroFilter;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.equinox.http.servlet.ExtendedHttpService;
@@ -111,7 +110,7 @@
/** The filter. */
// web
- private IniShiroFilter filter;
+// private IniShiroFilter filter;
/** The servlet. */
private VaadinOSGiServlet servlet;
@@ -287,6 +286,7 @@
*
* @return the name
*/
+ @Override
public String getName() {
return name;
}
@@ -391,6 +391,7 @@
/* (non-Javadoc)
* @see org.eclipse.osbp.runtime.web.vaadin.osgi.common.IVaadinApplication#isStarted()
*/
+ @Override
public boolean isStarted() {
return started;
}
@@ -398,6 +399,7 @@
/* (non-Javadoc)
* @see org.eclipse.osbp.runtime.web.vaadin.osgi.common.IVaadinApplication#isDeployed()
*/
+ @Override
public boolean isDeployed() {
return httpService != null;
}
@@ -406,6 +408,7 @@
* Is called to start the application. All resources should be registered
* and the http service is registered.
*/
+ @Override
public void start() {
if (started) {
LOGGER.debug("HttpApplication {} is already started", getName());
@@ -544,15 +547,15 @@
servletAlias = String.format("/%s", getUIAlias());
defaultContext = new WebResourcesHttpContext(Activator
.getBundleContext().getBundle());
- filter = new IniShiroFilter();
+// filter = new IniShiroFilter();
try {
- try {
- httpService.registerFilter("/", filter, properties,
- defaultContext);
- } catch (Exception e) {
- LOGGER.error("{}", e);
- throw new AppException(e);
- }
+// try {
+// httpService.registerFilter("/", filter, properties,
+// defaultContext);
+// } catch (Exception e) {
+// LOGGER.error("{}", e);
+// throw new AppException(e);
+// }
httpService.registerResources(RESOURCE_BASE, RESOURCE_BASE,
defaultContext);
httpService.registerServlet(servletAlias, servlet, properties,
@@ -598,15 +601,15 @@
servlet = null;
}
- try {
- if (filter != null) {
- httpService.unregisterFilter(filter);
- }
- } catch (Exception e) {
- LOGGER.info("{}", e.getMessage());
- } finally {
- filter = null;
- }
+// try {
+// if (filter != null) {
+// httpService.unregisterFilter(filter);
+// }
+// } catch (Exception e) {
+// LOGGER.info("{}", e.getMessage());
+// } finally {
+// filter = null;
+// }
try {
httpService.unregister(RESOURCE_BASE);
@@ -643,6 +646,7 @@
* Is called to stop the application. All resources should be unregistered
* and the http service will become disposed.
*/
+ @Override
public void stop() {
stop(false);
}
@@ -732,7 +736,7 @@
for (Iterator<OSGiUIProvider> iterator = uiProviders.iterator(); iterator
.hasNext();) {
- OSGiUIProvider provider = (OSGiUIProvider) iterator.next();
+ OSGiUIProvider provider = iterator.next();
if (provider.getUIFactory() == uiFactory) {
iterator.remove();
}
diff --git a/org.eclipse.osbp.runtime.web.vaadin.widgetset/.classpath b/org.eclipse.osbp.runtime.web.vaadin.widgetset/.classpath
new file mode 100644
index 0000000..cf36b56
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.widgetset/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src/"/>
+ <classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/org.eclipse.osbp.runtime.web.vaadin.widgetset/.gitignore b/org.eclipse.osbp.runtime.web.vaadin.widgetset/.gitignore
new file mode 100644
index 0000000..44733b9
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.widgetset/.gitignore
@@ -0,0 +1,4 @@
+/resources/
+/gwt-unitCache
+/VAADIN/*
+/target/
diff --git a/org.eclipse.osbp.runtime.web.vaadin.widgetset/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.runtime.web.vaadin.widgetset/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.widgetset/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.runtime.web.vaadin.widgetset/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.osbp.runtime.web.vaadin.widgetset/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..c537b63
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.widgetset/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/org.eclipse.osbp.runtime.web.vaadin.widgetset/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.runtime.web.vaadin.widgetset/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.widgetset/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.runtime.web.vaadin.widgetset/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.runtime.web.vaadin.widgetset/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..19e3115
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.widgetset/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,11 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+BuilderConfiguration.is_project_specific=true
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.emf-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.runtime.web.vaadin.widgetset/META-INF/MANIFEST.MF b/org.eclipse.osbp.runtime.web.vaadin.widgetset/META-INF/MANIFEST.MF
index b59301d..699ae3a 100644
--- a/org.eclipse.osbp.runtime.web.vaadin.widgetset/META-INF/MANIFEST.MF
+++ b/org.eclipse.osbp.runtime.web.vaadin.widgetset/META-INF/MANIFEST.MF
@@ -3,17 +3,17 @@
Bundle-Name: org.eclipse.osbp.runtime.web.vaadin.widgetset
Bundle-SymbolicName: org.eclipse.osbp.runtime.web.vaadin.widgetset
Bundle-Version: 0.9.0.qualifier
-Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Bundle-ActivationPolicy: lazy
Bundle-Vendor: Eclipse OSBP
-Require-Bundle: com.vaadin.client;bundle-version="[7.5.7,7.7.0)",
- com.vaadin.server;bundle-version="[7.5.7,7.7.0)",
- com.vaadin.shared;bundle-version="[7.5.7,7.7.0)",
+Require-Bundle: com.vaadin.client;bundle-version="[7.7.6,7.8.0)",
+ com.vaadin.server;bundle-version="[7.7.6,7.8.0)",
+ com.vaadin.shared;bundle-version="[7.7.6,7.8.0)",
com.google.guava;bundle-version="[10.0.0,19.0.0)",
- org.eclipse.core.databinding;bundle-version="[1.4.1,1.5.0)",
- org.eclipse.core.databinding.beans;bundle-version="[1.2.200,1.5.0)",
- org.eclipse.core.databinding.observable;bundle-version="[1.4.1,1.5.0)",
- org.eclipse.core.databinding.property;bundle-version="[1.4.200,1.5.0)",
+ org.eclipse.core.databinding;bundle-version="[1.6.0,1.7.0)",
+ org.eclipse.core.databinding.beans;bundle-version="[1.3.100,1.4.0)",
+ org.eclipse.core.databinding.observable;bundle-version="[1.6.0,1.7.0)",
+ org.eclipse.core.databinding.property;bundle-version="[1.6.0,1.7.0)",
org.eclipse.osbp.runtime.web.vaadin.databinding;bundle-version="[0.9.0,0.10.0)",
org.jsoup;bundle-version="1.7.2"
Export-Package: org.eclipse.osbp.runtime.web.vaadin.widgetset;
diff --git a/org.eclipse.osbp.runtime.web.vaadin.widgetset/src/license/THIRD-PARTY.properties b/org.eclipse.osbp.runtime.web.vaadin.widgetset/src/license/THIRD-PARTY.properties
new file mode 100644
index 0000000..9af7a58
--- /dev/null
+++ b/org.eclipse.osbp.runtime.web.vaadin.widgetset/src/license/THIRD-PARTY.properties
@@ -0,0 +1,31 @@
+# Generated by org.codehaus.mojo.license.AddThirdPartyMojo
+#-------------------------------------------------------------------------------
+# Already used licenses in project :
+# - Apache License, Version 2.0
+# - BSD 3-Clause License
+# - BSD License
+# - BSD style
+# - COMMON DEVELOPMENT AND DISTRIBUTION LICENSE
+# (CDDL)
+# Version
+# 1.0
+# - Common Public License Version 1.0
+# - Eclipse Public License - v 1.0
+# - Indiana University Extreme! Lab Software
+# License,
+# vesion 1.1.1
+# - Lesser General Public License (LPGL)
+# - Lesser General Public License (LPGL) v 2.1
+# - MIT License
+# - The Apache Software License, Version 2.0
+# - The MIT License
+#-------------------------------------------------------------------------------
+# Please fill the missing licenses for dependencies :
+#
+#
+#Wed May 21 17:53:35 BRT 2014
+ant--ant-launcher--1.6.5=Apache License, Version 2.0
+commons-collections--commons-collections--3.1=Apache License, Version 2.0
+javax.servlet--servlet-api--2.5=Common Development and Distribution license - v1.0.1
+org.jdesktop--swing-worker--1.1=Lesser General Public License (LGPL)
+
diff --git a/pom.xml b/pom.xml
index 17156d3..5d42a6f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -63,9 +63,9 @@
<module>org.eclipse.osbp.runtime.web.vaadin.widgetset</module>
<!-- <module>org.eclipse.osbp.runtime.web.common.tests</module> -->
- <module>org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests</module>
+<!-- <module>org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.tests</module> -->
<!-- <module>org.eclipse.osbp.runtime.web.vaadin.common.tests</module> -->
- <module>org.eclipse.osbp.runtime.web.vaadin.databinding.tests</module>
+<!-- <module>org.eclipse.osbp.runtime.web.vaadin.databinding.tests</module> -->
<!-- <module>org.eclipse.osbp.runtime.web.vaadin.osgi.tests</module> -->
</modules>
diff --git a/setup/target-luna.target b/setup/target-luna.target
deleted file mode 100644
index 248464e..0000000
--- a/setup/target-luna.target
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<?pde version="3.8"?><target includeMode="feature" name="org.eclipse.osbp.xtext.builder.target.luna" sequenceNumber="105">
-<locations>
-<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="slicer" includeSource="true" type="InstallableUnit">
-<unit id="org.apache.commons.lang3" version="3.1.0.v201403281430"/>
-<unit id="org.apache.commons.collections.source" version="3.2.0.v2013030210310"/>
-<unit id="org.apache.commons.beanutils.source" version="1.8.0.v201205091237"/>
-<unit id="org.apache.commons.beanutils" version="1.8.0.v201205091237"/>
-<unit id="org.apache.commons.lang3.source" version="3.1.0.v201403281430"/>
-<repository location="http://download.eclipse.org/tools/orbit/downloads/drops/R20140525021250/repository/"/>
-</location>
-<location path="${eclipse_home}" type="Profile"/>
-<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="slicer" includeSource="true" type="InstallableUnit">
-<unit id="org.eclipse.osbp.dependencies.feature.atmosphere.feature.group" version="2.1.2.vaadin3"/>
-<unit id="org.eclipse.osbp.runtime.web.feature.vaadin.databinding.feature.group" version="0.0.1.201408110750"/>
-<unit id="org.eclipse.osbp.xtext.builder.feature.service.xbase.source.feature.group" version="0.8.2.201408121142"/>
-<unit id="org.eclipse.osbp.runtime.web.feature.vaadin.common.source.feature.group" version="0.0.1.201408110750"/>
-<unit id="org.eclipse.osbp.xtext.builder.feature.service.jvmtypes.source.feature.group" version="0.8.2.201408121142"/>
-<unit id="org.eclipse.osbp.dependencies.feature.vaadin.feature.group" version="7.2.5"/>
-<unit id="org.eclipse.osbp.xtext.builder.feature.types.feature.group" version="0.8.2.201408121142"/>
-<unit id="org.eclipse.osbp.dependencies.feature.jetty.websockets.feature.group" version="8.1.14"/>
-<unit id="org.eclipse.osbp.runtime.web.feature.vaadin.components.source.feature.group" version="0.0.1.201408110750"/>
-<unit id="org.eclipse.osbp.runtime.web.feature.vaadin.common.feature.group" version="0.0.1.201408110750"/>
-<unit id="org.eclipse.osbp.runtime.web.feature.vaadin.components.feature.group" version="0.0.1.201408110750"/>
-<unit id="org.eclipse.osbp.runtime.web.feature.ecview.presentation.vaadin.feature.group" version="0.0.1.201408110750"/>
-<unit id="org.eclipse.osbp.runtime.feature.common.source.feature.group" version="0.7.1.201407011710"/>
-<unit id="org.eclipse.osbp.xtext.builder.feature.service.jvmtypes.feature.group" version="0.8.2.201408121142"/>
-<unit id="org.eclipse.osbp.xtext.builder.feature.types.source.feature.group" version="0.8.2.201408121142"/>
-<unit id="org.eclipse.osbp.runtime.feature.common.feature.group" version="0.7.1.201407011710"/>
-<unit id="org.eclipse.osbp.xtext.builder.feature.service.xbase.feature.group" version="0.8.2.201408121142"/>
-<unit id="org.eclipse.osbp.runtime.web.feature.ecview.presentation.vaadin.source.feature.group" version="0.0.1.201408110750"/>
-<unit id="org.eclipse.osbp.runtime.web.feature.vaadin.databinding.source.feature.group" version="0.0.1.201408110750"/>
-<repository location="http://lun.lunifera.org/downloads/p2/lunifera/luna/latest/"/>
-</location>
-<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="slicer" includeSource="true" type="InstallableUnit">
-<unit id="org.apache.commons.collections.source" version="3.2.0.v2013030210310"/>
-<unit id="javax.xml.bind" version="2.2.0.v201105210648"/>
-<unit id="org.apache.commons.collections" version="3.2.0.v2013030210310"/>
-<unit id="javax.xml.stream" version="1.0.1.v201004272200"/>
-<repository location="http://download.eclipse.org/tools/orbit/downloads/drops/R20140525021250/repository/"/>
-</location>
-<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="slicer" includeSource="true" type="InstallableUnit">
-<unit id="javax.activation.source" version="1.1.0.v201211130549"/>
-<unit id="javax.activation" version="1.1.0.v201211130549"/>
-<repository location="http://download.eclipse.org/tools/orbit/downloads/drops/R20140525021250/repository/"/>
-</location>
-<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="slicer" includeSource="true" type="InstallableUnit">
-<unit id="org.eclipse.emf.ecp.ecview.feature.core.feature.group" version="0.7.0"/>
-<unit id="org.eclipse.emf.ecp.ecview.feature.core.source.feature.group" version="0.7.0"/>
-<repository location="http://lun.lunifera.org/downloads/p2/ecview/nightly/"/>
-</location>
-<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="slicer" includeSource="true" type="InstallableUnit">
-<unit id="org.eclipse.osbp.dependencies.feature.security.shiro.feature.group" version="1.2.3"/>
-<repository location="http://lun.lunifera.org/downloads/p2/lunifera/luna/latest/"/>
-</location>
-</locations>
-</target>