catch up with dev
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..f2bd24b
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,38 @@
+**/bin/
+**/target/
+**._trace
+**.log.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/jenkins.build.config.xml b/jenkins.build.config.xml
index fc870ef..344cb3b 100644
--- a/jenkins.build.config.xml
+++ b/jenkins.build.config.xml
@@ -15,13 +15,9 @@
 <jenkins>
 	<!-- DO NOT EDIT BELOW THIS LINE -->
         <jenkins.build.dependencies>
-                <jenkins.build.dependency>org.eclipse.osbp.dsl</jenkins.build.dependency>
-                <jenkins.build.dependency>org.eclipse.osbp.ecview.addons</jenkins.build.dependency>
-                <jenkins.build.dependency>org.eclipse.osbp.ecview.core</jenkins.build.dependency>
+                <jenkins.build.dependency>org.eclipse.osbp.blob</jenkins.build.dependency>
                 <jenkins.build.dependency>org.eclipse.osbp.eventbroker</jenkins.build.dependency>
-                <jenkins.build.dependency>org.eclipse.osbp.runtime</jenkins.build.dependency>
                 <jenkins.build.dependency>org.eclipse.osbp.ui.api</jenkins.build.dependency>
                 <jenkins.build.dependency>org.eclipse.osbp.utils</jenkins.build.dependency>
-                <jenkins.build.dependency>org.eclipse.osbp.utils.blob</jenkins.build.dependency>
         </jenkins.build.dependencies>
 </jenkins>
diff --git a/org.eclipse.osbp.utils.ui.feature/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.utils.ui.feature/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.utils.ui.feature/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.utils.ui.feature/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.utils.ui.feature/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.utils.ui.feature/.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.utils.ui.feature/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.utils.ui.feature/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..0933f8c
--- /dev/null
+++ b/org.eclipse.osbp.utils.ui.feature/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,10 @@
+//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.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.utils.ui.feature/feature.xml b/org.eclipse.osbp.utils.ui.feature/feature.xml
index 4b5e51f..89c581e 100644
--- a/org.eclipse.osbp.utils.ui.feature/feature.xml
+++ b/org.eclipse.osbp.utils.ui.feature/feature.xml
@@ -14,7 +14,8 @@
         id="org.eclipse.osbp.utils.ui.feature"
         label="%featureName"
         version="0.9.0.qualifier"
-        provider-name="%providerName">
+        provider-name="%providerName"
+		plugin="org.eclipse.osbp.utils.ui">
         
     <description>
         %description
diff --git a/org.eclipse.osbp.utils.ui/.classpath b/org.eclipse.osbp.utils.ui/.classpath
new file mode 100644
index 0000000..30a5795
--- /dev/null
+++ b/org.eclipse.osbp.utils.ui/.classpath
@@ -0,0 +1,9 @@
+<?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="src" path="test/"/>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/org.eclipse.osbp.utils.ui/.settings/com.vaadin.integration.eclipse.prefs b/org.eclipse.osbp.utils.ui/.settings/com.vaadin.integration.eclipse.prefs
new file mode 100644
index 0000000..0904e44
--- /dev/null
+++ b/org.eclipse.osbp.utils.ui/.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.utils.ui/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.utils.ui/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.utils.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.utils.ui/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.osbp.utils.ui/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..0c68a61
--- /dev/null
+++ b/org.eclipse.osbp.utils.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.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.utils.ui/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.utils.ui/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.utils.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.utils.ui/.settings/org.eclipse.pde.core.prefs b/org.eclipse.osbp.utils.ui/.settings/org.eclipse.pde.core.prefs
new file mode 100644
index 0000000..f29e940
--- /dev/null
+++ b/org.eclipse.osbp.utils.ui/.settings/org.eclipse.pde.core.prefs
@@ -0,0 +1,3 @@
+eclipse.preferences.version=1
+pluginProject.extensions=false
+resolve.requirebundle=false
diff --git a/org.eclipse.osbp.utils.ui/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.utils.ui/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..0933f8c
--- /dev/null
+++ b/org.eclipse.osbp.utils.ui/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,10 @@
+//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.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.utils.ui/META-INF/MANIFEST.MF b/org.eclipse.osbp.utils.ui/META-INF/MANIFEST.MF
index dccbafc..c741e69 100644
--- a/org.eclipse.osbp.utils.ui/META-INF/MANIFEST.MF
+++ b/org.eclipse.osbp.utils.ui/META-INF/MANIFEST.MF
@@ -6,43 +6,26 @@
 Bundle-Activator: org.eclipse.osbp.utils.ui.Activator
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Bundle-ActivationPolicy: lazy
-Export-Package: org.eclipse.osbp.utils.ui;version="0.9.0",
- org.eclipse.osbp.utils.vaadin;version="0.9.0"
-Require-Bundle: org.eclipse.persistence.core;bundle-version="2.6.0",
- org.apache.commons.io,
- org.apache.commons.lang,
- org.eclipse.osgi.services,
- org.eclipse.osbp.ecview.core.common;bundle-version="[0.9.0,0.10.0)",
- org.eclipse.osbp.ecview.dsl.lib;bundle-version="[0.9.0,0.10.0)",
- 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.core.runtime;bundle-version="3.10.0",
- org.apache.commons.compress;bundle-version="1.6.0",
- com.vaadin.server;bundle-version="[7.5.7,7.7.0)",
- com.vaadin.shared;bundle-version="[7.5.7,7.7.0)",
- org.eclipse.e4.ui.model.workbench;bundle-version="1.1.0",
+Export-Package: org.eclipse.osbp.utils.vaadin;version="0.9.0"
+Require-Bundle: org.apache.commons.lang,
+ com.vaadin.server;bundle-version="[7.7.6,7.8.0)",
+ com.vaadin.shared;bundle-version="[7.7.6,7.8.0)",
+ com.vaadin.client;bundle-version="[7.7.6,7.8.0)",
  org.eclipse.e4.core.services;bundle-version="1.2.1",
- javax.persistence;bundle-version="2.1.0",
- com.vaadin.client;bundle-version="[7.5.7,7.7.0)",
- org.eclipse.e4.core.contexts,
- org.eclipse.e4.core.di;bundle-version="1.4.0",
- org.eclipse.core.databinding,
- org.eclipse.core.databinding.beans,
- org.eclipse.e4.core.di.extensions;bundle-version="0.12.0",
- multifileupload.osgi;bundle-version="[1.10,1.11)",
  org.eclipse.osbp.gitinfo;bundle-version="[0.9.0,0.10.0)",
- org.jsoup;bundle-version="1.7.2"
+ org.jsoup;bundle-version="1.8.3",
+ org.eclipse.osgi,
+ org.eclipse.osbp.blob;bundle-version="0.9.0"
 Bundle-Vendor: Eclipse OSBP
-Import-Package: org.eclipse.emf.common.util,
+Import-Package: com.vaadin.ui,
+ org.eclipse.emf.common.util,
  org.eclipse.osbp.eventbroker;version="0.9.0",
+ org.eclipse.osbp.ui.api.customfields;version="0.9.0",
  org.eclipse.osbp.ui.api.datamart;version="0.9.0",
  org.eclipse.osbp.ui.api.layout;version="0.9.0",
  org.eclipse.osbp.ui.api.message;version="0.9.0",
  org.eclipse.osbp.ui.api.metadata;version="0.9.0",
  org.eclipse.osbp.ui.api.themes;version="0.9.0",
- org.eclipse.osbp.utils.blob.component;version="0.9.0",
  org.eclipse.osbp.utils.common;version="0.9.0",
- org.eclipse.osbp.utils.constants;version="0.9.0",
- org.eclipse.osbp.utils.theme;version="0.9.0",
  org.slf4j
 
diff --git a/org.eclipse.osbp.utils.ui/src/org/eclipse/osbp/utils/vaadin/MessageDialog.java b/org.eclipse.osbp.utils.ui/src/org/eclipse/osbp/utils/vaadin/MessageDialog.java
index e42407c..f0fa793 100644
--- a/org.eclipse.osbp.utils.ui/src/org/eclipse/osbp/utils/vaadin/MessageDialog.java
+++ b/org.eclipse.osbp.utils.ui/src/org/eclipse/osbp/utils/vaadin/MessageDialog.java
@@ -21,12 +21,14 @@
 	private static final long serialVersionUID = 6245024141021744210L;
 	private String id;
 	private Label label;
+	private String message;
 	private List<IMessageRequester.ClickRecipient> recipients = new ArrayList<>();
 	HorizontalLayout buttons = new HorizontalLayout();
 
 	public MessageDialog(String id, String messageText) {
 		super();
 		this.id = id;
+		this.message = messageText;
 		setClosable(false);
 		setModal(true);
 		VerticalLayout subContent = new VerticalLayout();
@@ -71,4 +73,8 @@
 	public void removeButtonListener(ClickRecipient recipient) {
 		recipients.remove(recipient);
 	}
+
+	public String getMessage() {
+		return message;
+	}
 }
diff --git a/org.eclipse.osbp.utils.ui/src/org/eclipse/osbp/utils/vaadin/PropertyLookup.java b/org.eclipse.osbp.utils.ui/src/org/eclipse/osbp/utils/vaadin/PropertyLookup.java
index 20e77a6..7070ab7 100644
--- a/org.eclipse.osbp.utils.ui/src/org/eclipse/osbp/utils/vaadin/PropertyLookup.java
+++ b/org.eclipse.osbp.utils.ui/src/org/eclipse/osbp/utils/vaadin/PropertyLookup.java
@@ -22,11 +22,11 @@
 import java.util.Map;
 import java.util.TreeMap;
 
-import org.eclipse.osbp.ui.api.datamart.DerivedOlapException;
+import org.eclipse.osbp.blob.component.BlobComponent;
+import org.eclipse.osbp.ui.api.customfields.IBlobService;
 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 org.eclipse.osbp.utils.blob.component.BlobUploadComponent;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -40,6 +40,13 @@
 	}
 }
 
+class IntegerComparator implements Comparator<Integer> {
+	@Override
+	public int compare(Integer arg0, Integer arg1) {
+		return arg0.compareTo(arg1);
+	}
+}
+
 class BigDecimalComparator implements Comparator<BigDecimal> {
 	@Override
 	public int compare(BigDecimal arg0, BigDecimal arg1) {
@@ -60,15 +67,17 @@
 
 	private static final Logger LOGGER = LoggerFactory.getLogger(PropertyLookup.class);
 	// datatypes
-	public final static int NOT_SET = -1;
-	public final static int DATE = 0;
-	public final static int NUMBER = 1;
-	public final static int BIGDECIMAL = 2;
-	public final static int STRING = 3;
+	public static final int NOT_SET = -1;
+	public static final int DATE = 0;
+	public static final int NUMBER = 1;
+	public static final int BIGDECIMAL = 2;
+	public static final int STRING = 3;
+	public static final int INTEGER = 4;
+	public static final int LONG = 5;
 
 	// infotype
-	public final static int STYLE = 0;
-	public final static int RESOURCE = 1;
+	public static final int STYLE = 0;
+	public static final int RESOURCE = 1;
 
 	String format = null;
 	String defaultStyle = null;
@@ -79,15 +88,18 @@
 	boolean hideLabel = false;
 	boolean collapseColumn = false;
 	String tooltipPattern = null;
-	private Map<Date, Resource> dateResourceMap = new TreeMap<Date, Resource>(new DateComparator());
-	private Map<Date, String> dateStyleMap = new TreeMap<Date, String>(new DateComparator());
-	private Map<Double, Resource> doubleResourceMap = new TreeMap<Double, Resource>(new DoubleComparator());
-	private Map<Double, String> doubleStyleMap = new TreeMap<Double, String>(new DoubleComparator());
-	private Map<String, Resource> stringResourceMap = new HashMap<String, Resource>();
-	private Map<String, String> stringStyleMap = new HashMap<String, String>();
-	private Map<Double, String> doubleTooltipMap = new TreeMap<Double, String>(new DoubleComparator());
-	private Map<Date, String> dateTooltipMap = new TreeMap<Date, String>(new DateComparator());
-	private Map<String, String> stringTooltipMap = new HashMap<String, String>();
+	private Map<Date, Resource> dateResourceMap = new TreeMap<>(new DateComparator());
+	private Map<Date, String> dateStyleMap = new TreeMap<>(new DateComparator());
+	private Map<Date, String> dateTooltipMap = new TreeMap<>(new DateComparator());
+	private Map<Double, Resource> doubleResourceMap = new TreeMap<>(new DoubleComparator());
+	private Map<Double, String> doubleStyleMap = new TreeMap<>(new DoubleComparator());
+	private Map<Double, String> doubleTooltipMap = new TreeMap<>(new DoubleComparator());
+	private Map<Integer, Resource> intResourceMap = new TreeMap<>(new IntegerComparator());
+	private Map<Integer, String> intStyleMap = new TreeMap<>(new IntegerComparator());
+	private Map<Integer, String> intTooltipMap = new TreeMap<>(new IntegerComparator());
+	private Map<String, Resource> stringResourceMap = new HashMap<>();
+	private Map<String, String> stringStyleMap = new HashMap<>();
+	private Map<String, String> stringTooltipMap = new HashMap<>();
 	private Locale locale;
 	private int defaultType = NOT_SET;
 	private boolean isImage = false;
@@ -95,16 +107,20 @@
 	private StringToFormattedDateConverter dateConv = new StringToFormattedDateConverter();
 	private StringToFormattedDoubleConverter numberConv = new StringToFormattedDoubleConverter();
 	private StringToFormattedBigDecimalConverter bigDecimalConv = new StringToFormattedBigDecimalConverter();
+	private StringToFormattedIntegerConverter intConv = new StringToFormattedIntegerConverter();
+	private StringToFormattedLongConverter longConv = new StringToFormattedLongConverter();
 	private String imagePath = null;
 	private String imageParameterPattern = null;
 	private String imageParameterFormat = null;
 	private String resizeString = null;
 	private Resource columnIcon = null;
 	private int resolutionId = 0;
+	private IBlobService blobService;
 
-	public PropertyLookup(IThemeResourceService themeResourceService, IDSLMetadataService dslMetadataService, Locale locale) {
+	public PropertyLookup(IThemeResourceService themeResourceService, IDSLMetadataService dslMetadataService, IBlobService blobService, Locale locale) {
 		this.themeResourceService = themeResourceService;
 		this.dslMetadataService = dslMetadataService;
+		this.blobService = blobService;
 		this.locale = locale;
 	}
 
@@ -148,21 +164,37 @@
 		case NUMBER:
 			try {
 				item = numberConv.convertToPresentation(getDoubleValue(value), String.class, locale);
-			} catch (ConversionException | DerivedOlapException e) {
-				e.printStackTrace();
+			} catch (ConversionException e) {
+				LOGGER.error("{}", e);
+			}
+			break;
+		case INTEGER:
+			try {
+				item = intConv.convertToPresentation((Integer)value, String.class, locale);
+			} catch (ConversionException e) {
+				LOGGER.error("{}", e);
+			}
+			break;
+		case LONG:
+			try {
+				item = longConv.convertToPresentation((Long)value, String.class, locale);
+			} catch (ConversionException e) {
+				LOGGER.error("{}", e);
 			}
 			break;
 		case BIGDECIMAL:
 			try {
 				item = bigDecimalConv.convertToPresentation(getBigDecimalValue(value), String.class, locale);
-			} catch (ConversionException | DerivedOlapException e) {
-				e.printStackTrace();
+			} catch (ConversionException e) {
+				LOGGER.error("{}", e);
 			}
 			break;
 		case STRING:
 			item = (String) value;
 			LOGGER.debug("getTooltip >" + item + "<");
 			break;
+		default:
+			break;
 		}
 		if (tooltipPattern != null) {
 			LOGGER.debug("getTooltip pattern >" + tooltipPattern + "< result:" + tooltip);
@@ -209,6 +241,10 @@
 		return numberConv;
 	}
 
+	public StringToFormattedIntegerConverter getIntegerConverter() {
+		return intConv;
+	}
+	
 	public StringToFormattedBigDecimalConverter getBigDecimalConverter() {
 		return bigDecimalConv;
 	}
@@ -275,6 +311,44 @@
 		return this;
 	}
 
+	public PropertyLookup addResourceLookup(int value, String resourceName) {
+		resourceDiscreteValues = true;
+		addResourceInterval(value, resourceName);
+		return this;
+	}
+
+	public PropertyLookup addStyleLookup(int value, String styleName) {
+		styleDiscreteValues = true;
+		addStyleInterval(value, styleName);
+		return this;
+	}
+
+	public PropertyLookup addTooltipLookup(int value, String tooltip) {
+		tooltipDiscreteValues = true;
+		addTooltipInterval(value, tooltip);
+		return this;
+	}
+
+	public PropertyLookup addResourceInterval(int until, String resourceName) {
+		Resource resource = themeResourceService.getThemeResource(resourceName, ThemeResourceType.ICON);
+		intResourceMap.put(until, resource);
+		isImage = true;
+		defaultType = INTEGER;
+		return this;
+	}
+
+	public PropertyLookup addStyleInterval(int until, String styleName) {
+		intStyleMap.put(until, styleName);
+		defaultType = INTEGER;
+		return this;
+	}
+
+	public PropertyLookup addTooltipInterval(int until, String tooltip) {
+		intTooltipMap.put(until, tooltip);
+		defaultType = INTEGER;
+		return this;
+	}
+
 	public PropertyLookup addResourceLookup(double value, String resourceName) {
 		resourceDiscreteValues = true;
 		addResourceInterval(value, resourceName);
@@ -331,24 +405,22 @@
 		return this;
 	}
 
-	protected double getDoubleValue(Object value) throws DerivedOlapException {
+	protected double getDoubleValue(Object value) {
 		if (value instanceof Double) {
 			return (Double) value;
 		} else if (value instanceof Float) {
 			return (Float) value;
 		} else if (value instanceof Long) {
 			return (Long) value;
-		} else if (value instanceof Integer) {
-			return (Integer) value;
 		}
-		throw new DerivedOlapException("unsupported type conversion");
+		return 0;
 	}
 
-	protected BigDecimal getBigDecimalValue(Object value) throws DerivedOlapException {
+	protected BigDecimal getBigDecimalValue(Object value) {
 		if (value instanceof BigDecimal) {
 			return (BigDecimal) value;
 		}
-		throw new DerivedOlapException("unsupported type conversion");
+		return BigDecimal.ZERO;
 	}
 
 	public int getType() {
@@ -377,12 +449,7 @@
 			}
 			break;
 		case NUMBER:
-			double doubleValue = 0;
-			try {
-				doubleValue = getDoubleValue(value);
-			} catch (DerivedOlapException e) {
-				e.printStackTrace();
-			}
+			double doubleValue = getDoubleValue(value);
 			for (Double key : doubleResourceMap.keySet()) {
 				if ((resourceDiscreteValues && doubleValue == key) || (!resourceDiscreteValues && doubleValue <= key)) {
 					return new CellSetImage(doubleValue, numberConv.convertToPresentation(doubleValue, String.class, locale), doubleResourceMap.get(key), hideLabel, resizeString);
@@ -401,13 +468,48 @@
 				return new CellSetImage(doubleValue, numberConv.convertToPresentation(doubleValue, String.class, locale), null, hideLabel, resizeString);
 			}
 			break;
-		case BIGDECIMAL:
-			BigDecimal bigValue = BigDecimal.ZERO;
-			try {
-				bigValue = getBigDecimalValue(value);
-			} catch (DerivedOlapException e) {
-				e.printStackTrace();
+		case INTEGER:
+			Integer intValue = (Integer)value;
+			for (Integer key : intResourceMap.keySet()) {
+				if ((resourceDiscreteValues && intValue == key) || (!resourceDiscreteValues && intValue <= key)) {
+					return new CellSetImage(intValue, intConv.convertToPresentation(intValue, String.class, locale), intResourceMap.get(key), hideLabel, resizeString);
+				}
 			}
+			if (imagePath != null) {
+				String path = imagePath;
+				if (imageParameterPattern != null) {
+					path = path.replace(imageParameterPattern, String.format(imageParameterFormat, intValue));
+				}
+				Resource res = themeResourceService.getThemeResource(path, ThemeResourceType.ICON);
+				return new CellSetImage(intValue, intConv.convertToPresentation(intValue, String.class, locale), res, hideLabel, resizeString);
+			}
+			// if it should be an image and no match was found, return an empty image to avoid complaints
+			if (isImage) {
+				return new CellSetImage(intValue, intConv.convertToPresentation(intValue, String.class, locale), null, hideLabel, resizeString);
+			}
+			break;
+		case LONG:
+			Long longValue = (Long)value;
+			for (Integer key : intResourceMap.keySet()) {
+				if ((resourceDiscreteValues && longValue == (long)key) || (!resourceDiscreteValues && longValue <= (long)key)) {
+					return new CellSetImage(longValue, longConv.convertToPresentation(longValue, String.class, locale), intResourceMap.get(key), hideLabel, resizeString);
+				}
+			}
+			if (imagePath != null) {
+				String path = imagePath;
+				if (imageParameterPattern != null) {
+					path = path.replace(imageParameterPattern, String.format(imageParameterFormat, longValue.intValue()));
+				}
+				Resource res = themeResourceService.getThemeResource(path, ThemeResourceType.ICON);
+				return new CellSetImage(longValue, longConv.convertToPresentation(longValue, String.class, locale), res, hideLabel, resizeString);
+			}
+			// if it should be an image and no match was found, return an empty image to avoid complaints
+			if (isImage) {
+				return new CellSetImage(longValue, longConv.convertToPresentation(longValue, String.class, locale), null, hideLabel, resizeString);
+			}
+			break;
+		case BIGDECIMAL:
+			BigDecimal bigValue = getBigDecimalValue(value);
 			for (Double key : doubleResourceMap.keySet()) {
 				BigDecimal bdKey = new BigDecimal(key);
 				if ((resourceDiscreteValues && bigValue.equals(bdKey)) || (!resourceDiscreteValues && bigValue.compareTo(bdKey) <= 0)) {
@@ -442,16 +544,15 @@
 				return new CellSetImage(value, (String) value, res, hideLabel, resizeString);
 			}
 			if (isBlob) {
-				BlobUploadComponent blobUploadComponent = BlobUploadComponent.initialize();
-				blobUploadComponent.setValue((String) value);
-				blobUploadComponent.setDisplayResolutionId(resolutionId);
-				return blobUploadComponent;
+				return new BlobComponent(blobService, (String) value, resolutionId);
 			}
 			// if it should be an image and no match was found, return an empty image to avoid complaints
 			if (isImage) {
 				return new CellSetImage(value, (String) value, null, hideLabel, resizeString);
 			}
 			break;
+		default:
+			break;
 		}
 		return value;
 	}
@@ -466,25 +567,32 @@
 			}
 			break;
 		case NUMBER:
-			double doubleValue = 0;
-			try {
-				doubleValue = getDoubleValue(value);
-			} catch (DerivedOlapException e) {
-				e.printStackTrace();
-			}
+			double doubleValue = getDoubleValue(value);
 			for (Double key : doubleTooltipMap.keySet()) {
 				if ((tooltipDiscreteValues && doubleValue == key) || (!tooltipDiscreteValues && doubleValue <= key)) {
 					return dslMetadataService.translate(locale.toLanguageTag(), doubleTooltipMap.get(key));
 				}
 			}
 			break;
+		case INTEGER:
+			Integer intValue = (Integer)value;
+			for (Integer key : intTooltipMap.keySet()) {
+				if ((tooltipDiscreteValues && intValue == key) || (!tooltipDiscreteValues && intValue <= key)) {
+					return dslMetadataService.translate(locale.toLanguageTag(), intTooltipMap.get(key));
+				}
+			}
+			break;
+		case LONG:
+			Long longValue = (Long)value;
+			for (Integer key : intTooltipMap.keySet()) {
+				if ((tooltipDiscreteValues && longValue == (long)key) || (!tooltipDiscreteValues && longValue <= (long)key)) {
+					return dslMetadataService.translate(locale.toLanguageTag(), intTooltipMap.get(key));
+				}
+			}
+			break;
 		case BIGDECIMAL:
 			BigDecimal bigValue = BigDecimal.ZERO;
-			try {
-				bigValue = getBigDecimalValue(value);
-			} catch (DerivedOlapException e) {
-				e.printStackTrace();
-			}
+			bigValue = getBigDecimalValue(value);
 			for (Double key : doubleTooltipMap.keySet()) {
 				BigDecimal bdKey = new BigDecimal(key);
 				if ((tooltipDiscreteValues && bigValue.equals(bdKey)) || (!tooltipDiscreteValues && bigValue.compareTo(bdKey) <= 0)) {
@@ -499,6 +607,8 @@
 				}
 			}
 			break;
+		default:
+			break;
 		}
 		return getTooltip(value);
 	}
@@ -539,28 +649,41 @@
 			if (doubleStyleMap.size() == 0) {
 				return defaultStyle;
 			}
-			double doubleValue = 0;
-			try {
-				doubleValue = getDoubleValue(value);
-			} catch (DerivedOlapException e) {
-				e.printStackTrace();
-			}
+			double doubleValue = getDoubleValue(value);
 			for (Double key : doubleStyleMap.keySet()) {
 				if ((styleDiscreteValues && doubleValue == key) || (!styleDiscreteValues && doubleValue <= key)) {
 					return doubleStyleMap.get(key);
 				}
 			}
 			break;
+		case INTEGER:
+			if (intStyleMap.size() == 0) {
+				return defaultStyle;
+			}
+			Integer intValue = (Integer)value;
+			for (Integer key : intStyleMap.keySet()) {
+				if ((styleDiscreteValues && intValue == key) || (!styleDiscreteValues && intValue <= key)) {
+					return intStyleMap.get(key);
+				}
+			}
+			break;
+		case LONG:
+			if (intStyleMap.size() == 0) {
+				return defaultStyle;
+			}
+			Long longValue = (Long)value;
+			for (Integer key : intStyleMap.keySet()) {
+				if ((styleDiscreteValues && longValue == (long)key) || (!styleDiscreteValues && longValue <= (long)key)) {
+					return intStyleMap.get(key);
+				}
+			}
+			break;
 		case BIGDECIMAL:
 			if (doubleStyleMap.size() == 0) {
 				return defaultStyle;
 			}
 			BigDecimal bigDecimalValue = BigDecimal.ZERO;
-			try {
-				bigDecimalValue = getBigDecimalValue(value);
-			} catch (DerivedOlapException e) {
-				e.printStackTrace();
-			}
+			bigDecimalValue = getBigDecimalValue(value);
 			for (Double key : doubleStyleMap.keySet()) {
 				BigDecimal bdKey = new BigDecimal(key);
 				if ((styleDiscreteValues && bigDecimalValue.equals(bdKey)) || (!styleDiscreteValues && bigDecimalValue.compareTo(bdKey) <= 0)) {
@@ -578,14 +701,19 @@
 				}
 			}
 			break;
+		default:
+			break;
 		}
 		return defaultStyle;
 	}
 
 	public Class<?> getPropertyType(Class<?> defaultType) {
-		if (defaultType.equals(double.class) || defaultType.equals(Double.class) || defaultType.equals(float.class) || defaultType.equals(Float.class)
-				|| defaultType.equals(int.class) || defaultType.equals(Integer.class) || defaultType.equals(long.class) || defaultType.equals(Long.class)) {
+		if (defaultType.equals(double.class) || defaultType.equals(Double.class) || defaultType.equals(float.class) || defaultType.equals(Float.class)) {
 			this.defaultType = NUMBER;
+		} else if (defaultType.equals(Integer.class) || defaultType.equals(int.class)) {
+			this.defaultType = INTEGER;
+		} else if (defaultType.equals(long.class) || defaultType.equals(Long.class)) {
+			this.defaultType = LONG;
 		} else if (defaultType.equals(BigDecimal.class)) {
 			this.defaultType = BIGDECIMAL;
 		} else if (defaultType.equals(String.class)) {
@@ -597,15 +725,14 @@
 			return CellSetImage.class;
 		}
 		if (isBlob) {
-			return BlobUploadComponent.class;
+			return BlobComponent.class;
 		}
 		return defaultType;
 	}
 
 	public PropertyLookup setImageService(String path, boolean hasParameter) {
 		isImage = true;
-		// defaultType = STRING;
-		imagePath = path;
+ 		imagePath = path;
 		if (hasParameter) {
 			String[] token = path.split("%");
 			// there must only be one parameter for the moment
diff --git a/org.eclipse.osbp.utils.ui/src/org/eclipse/osbp/utils/vaadin/StringToFormattedBigDecimalConverter.java b/org.eclipse.osbp.utils.ui/src/org/eclipse/osbp/utils/vaadin/StringToFormattedBigDecimalConverter.java
index eab9713..92b5114 100644
--- a/org.eclipse.osbp.utils.ui/src/org/eclipse/osbp/utils/vaadin/StringToFormattedBigDecimalConverter.java
+++ b/org.eclipse.osbp.utils.ui/src/org/eclipse/osbp/utils/vaadin/StringToFormattedBigDecimalConverter.java
@@ -22,8 +22,6 @@
 import org.apache.commons.lang.StringEscapeUtils;
 
 import com.vaadin.data.util.converter.StringToBigDecimalConverter;
-//import com.vaadin.data.util.converter.StringToDoubleConverter;
-//import com.vaadin.data.util.converter.Converter.ConversionException;
 
 public class StringToFormattedBigDecimalConverter extends StringToBigDecimalConverter {
 	private static final long serialVersionUID = -4298862937719948986L;
diff --git a/org.eclipse.osbp.utils.ui/src/org/eclipse/osbp/utils/vaadin/StringToFormattedDateConverter.java b/org.eclipse.osbp.utils.ui/src/org/eclipse/osbp/utils/vaadin/StringToFormattedDateConverter.java
index 8cc2c20..eff3a87 100644
--- a/org.eclipse.osbp.utils.ui/src/org/eclipse/osbp/utils/vaadin/StringToFormattedDateConverter.java
+++ b/org.eclipse.osbp.utils.ui/src/org/eclipse/osbp/utils/vaadin/StringToFormattedDateConverter.java
@@ -23,25 +23,34 @@
 public class StringToFormattedDateConverter extends StringToDateConverter {
 	private static final long serialVersionUID = 721600785465571493L;
 	private PropertyLookup lookup = null;
-	private DateFormat dateFormat = null;
 	
 	public void setLookup(PropertyLookup lookup) {
 		this.lookup = lookup;
 	}
 
-	@Override
+    protected DateFormat getDefaultFormat(Locale locale) {
+        if (locale == null) {
+            locale = Locale.getDefault();
+        }
+
+        DateFormat f = DateFormat.getDateInstance(DateFormat.MEDIUM, locale);
+        f.setLenient(false);
+        return f;
+    }
+
+    @Override
 	protected DateFormat getFormat(Locale locale) {
         if (locale == null) {
         	if (lookup == null) {
         		locale = Locale.getDefault();
-        		return super.getFormat(locale);
+        		return getDefaultFormat(locale);
         	} else {
         		locale = lookup.getLocale();
         	}
         }
         
         if (lookup == null || lookup.getFormat() == null) {
-    		return super.getFormat(locale);
+    		return getDefaultFormat(locale);
         }
 
         return SimpleDateFormatter.getFormat(StringEscapeUtils.unescapeHtml(lookup.getFormat()), locale);
diff --git a/org.eclipse.osbp.utils.ui/src/org/eclipse/osbp/utils/vaadin/StringToFormattedIntegerConverter.java b/org.eclipse.osbp.utils.ui/src/org/eclipse/osbp/utils/vaadin/StringToFormattedIntegerConverter.java
new file mode 100644
index 0000000..5615584
--- /dev/null
+++ b/org.eclipse.osbp.utils.ui/src/org/eclipse/osbp/utils/vaadin/StringToFormattedIntegerConverter.java
@@ -0,0 +1,94 @@
+/**
+ *                                                                            
+ *  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.utils.vaadin;
+
+import java.text.DecimalFormat;
+import java.text.DecimalFormatSymbols;
+import java.text.ParsePosition;
+import java.util.Locale;
+
+import org.apache.commons.lang.StringEscapeUtils;
+
+import com.vaadin.data.util.converter.StringToBigDecimalConverter;
+import com.vaadin.data.util.converter.StringToIntegerConverter;
+
+public class StringToFormattedIntegerConverter extends StringToIntegerConverter {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -1587429363693818150L;
+	private PropertyLookup lookup = null;
+	private DecimalFormat decimalFormat = null;
+	
+	public void setLookup(PropertyLookup lookup) {
+		this.lookup = lookup;
+	}
+
+    protected DecimalFormat getFormat(Locale locale) {
+        if (locale == null) {
+        	if (lookup == null) {
+        		locale = Locale.getDefault();
+        		return (DecimalFormat) DecimalFormat.getInstance(locale);
+        	} else {
+        		locale = lookup.getLocale();
+        	}
+        }
+        if (lookup == null || lookup.getFormat() == null) {
+    		return (DecimalFormat) DecimalFormat.getInstance(locale);
+        }
+		try {
+			decimalFormat = new DecimalFormat(StringEscapeUtils.unescapeHtml(lookup.getFormat()), new DecimalFormatSymbols(locale));
+		} catch (IllegalArgumentException e){
+			String msg = String.format("formatter %s is invalid for decimal numbers: %s", lookup.getFormat(), e.getLocalizedMessage());
+			throw new ConversionException(msg);
+		}
+
+        return decimalFormat;
+    }
+
+	@Override
+    protected Number convertToNumber(String value, Class<? extends Number> targetType, Locale locale) throws ConversionException {
+        if (value == null) {
+            return null;
+        }
+
+        // Remove leading and trailing white space
+        value = value.trim();
+
+        // Parse and detect errors. If the full string was not used, it is
+        // an error.
+        ParsePosition parsePosition = new ParsePosition(0);
+        Number parsedValue = getFormat(locale).parse(value, parsePosition);
+        if (parsePosition.getIndex() != value.length()) {
+            throw new ConversionException("Could not convert '" + value
+                    + "' to " + getModelType().getName());
+        }
+
+        if (parsedValue == null) {
+            // Convert "" to null
+            return null;
+        }
+        return parsedValue;
+    }
+
+	
+	@Override
+    public String convertToPresentation(Integer value, Class<? extends String> targetType, Locale locale) throws ConversionException {
+        if (value == null) {
+            return null;
+        }
+
+        return getFormat(locale).format(value);
+    }
+}
diff --git a/org.eclipse.osbp.utils.ui/src/org/eclipse/osbp/utils/vaadin/StringToFormattedLongConverter.java b/org.eclipse.osbp.utils.ui/src/org/eclipse/osbp/utils/vaadin/StringToFormattedLongConverter.java
new file mode 100644
index 0000000..9c73560
--- /dev/null
+++ b/org.eclipse.osbp.utils.ui/src/org/eclipse/osbp/utils/vaadin/StringToFormattedLongConverter.java
@@ -0,0 +1,95 @@
+/**
+ *                                                                            
+ *  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.utils.vaadin;
+
+import java.text.DecimalFormat;
+import java.text.DecimalFormatSymbols;
+import java.text.ParsePosition;
+import java.util.Locale;
+
+import org.apache.commons.lang.StringEscapeUtils;
+
+import com.vaadin.data.util.converter.StringToBigDecimalConverter;
+import com.vaadin.data.util.converter.StringToIntegerConverter;
+import com.vaadin.data.util.converter.StringToLongConverter;
+
+public class StringToFormattedLongConverter extends StringToLongConverter {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -1587429363693818150L;
+	private PropertyLookup lookup = null;
+	private DecimalFormat decimalFormat = null;
+	
+	public void setLookup(PropertyLookup lookup) {
+		this.lookup = lookup;
+	}
+
+    protected DecimalFormat getFormat(Locale locale) {
+        if (locale == null) {
+        	if (lookup == null) {
+        		locale = Locale.getDefault();
+        		return (DecimalFormat) DecimalFormat.getInstance(locale);
+        	} else {
+        		locale = lookup.getLocale();
+        	}
+        }
+        if (lookup == null || lookup.getFormat() == null) {
+    		return (DecimalFormat) DecimalFormat.getInstance(locale);
+        }
+		try {
+			decimalFormat = new DecimalFormat(StringEscapeUtils.unescapeHtml(lookup.getFormat()), new DecimalFormatSymbols(locale));
+		} catch (IllegalArgumentException e){
+			String msg = String.format("formatter %s is invalid for decimal numbers: %s", lookup.getFormat(), e.getLocalizedMessage());
+			throw new ConversionException(msg);
+		}
+
+        return decimalFormat;
+    }
+
+	@Override
+    protected Number convertToNumber(String value, Class<? extends Number> targetType, Locale locale) throws ConversionException {
+        if (value == null) {
+            return null;
+        }
+
+        // Remove leading and trailing white space
+        value = value.trim();
+
+        // Parse and detect errors. If the full string was not used, it is
+        // an error.
+        ParsePosition parsePosition = new ParsePosition(0);
+        Number parsedValue = getFormat(locale).parse(value, parsePosition);
+        if (parsePosition.getIndex() != value.length()) {
+            throw new ConversionException("Could not convert '" + value
+                    + "' to " + getModelType().getName());
+        }
+
+        if (parsedValue == null) {
+            // Convert "" to null
+            return null;
+        }
+        return parsedValue;
+    }
+
+	
+	@Override
+    public String convertToPresentation(Long value, Class<? extends String> targetType, Locale locale) throws ConversionException {
+        if (value == null) {
+            return null;
+        }
+
+        return getFormat(locale).format(value);
+    }
+}
diff --git a/org.eclipse.osbp.utils.ui/src/org/eclipse/osbp/utils/vaadin/ViewLayoutManager.java b/org.eclipse.osbp.utils.ui/src/org/eclipse/osbp/utils/vaadin/ViewLayoutManager.java
index 36bb229..bd17680 100644
--- a/org.eclipse.osbp.utils.ui/src/org/eclipse/osbp/utils/vaadin/ViewLayoutManager.java
+++ b/org.eclipse.osbp.utils.ui/src/org/eclipse/osbp/utils/vaadin/ViewLayoutManager.java
@@ -14,7 +14,7 @@
 package org.eclipse.osbp.utils.vaadin;
 
 import org.eclipse.osbp.ui.api.layout.IViewLayoutManager;
-import org.eclipse.osbp.utils.theme.EnumCssClass;
+import org.eclipse.osbp.ui.api.themes.EnumCssClass;
 
 import com.vaadin.server.Extension;
 import com.vaadin.shared.ui.MarginInfo;