From fd0215785473dfa254ac5658e40986cdb96db61c Mon Sep 17 00:00:00 2001
From: Purodha <bli00@hostsharing.net>
Date: Wed, 02 Jan 2013 14:43:38 +0100
Subject: [PATCH] Merge branch 'master' of ssh://hsh04.hostsharing.net/home/doms/source.hostsharing.net/source/hsadmin

---
 hsarweb/src/de/hsadmin/web/UpdateAble.java                                 |    2 
 hsarweb/.classpath                                                         |    2 
 hsarweb/src/de/hsadmin/web/Remote.java                                     |   10 
 hsarjcli/src/de/hsadmin/jscli/Main.java                                    |   12 +
 hsarweb/src/de/hsadmin/web/ListOfStringsProperty.java                      |    7 +
 hsarweb/src/de/hsadmin/web/DeleteAble.java                                 |    2 
 hsarweb/src/de/hsadmin/web/DateProperty.java                               |   40 ++++++
 hsarweb/src/de/hsadmin/web/ItemsReader.java                                |    2 
 hsarweb/src/de/hsadmin/web/vaadin/SelectPropertyFieldFactory.java          |    9 +
 hsarweb/src/de/hsadmin/web/vaadin/PacPrefixedNamePropertyFieldFactory.java |    8 +
 hsarweb/src/de/hsadmin/web/DatabaseModule.java                             |    2 
 hsarweb/src/de/hsadmin/web/vaadin/DatePropertyFieldFactory.java            |   13 +
 hsarweb/src/de/hsadmin/web/HomeModule.java                                 |    8 
 hsarweb/src/de/hsadmin/web/vaadin/DomainOptionsPropertyFieldFactory.java   |   11 -
 hsarweb/src/de/hsadmin/web/vaadin/TableComponentFactory.java               |    8 
 hsarweb/src/de/hsadmin/web/AbstractProperty.java                           |    7 
 hsarweb/src/de/hsadmin/web/AbstractModule.java                             |    2 
 hsarweb/src/de/hsadmin/web/InsertAble.java                                 |    2 
 hsarweb/src/de/hsadmin/web/config/PropertyFieldFactory.java                |    6 
 hsarweb/src/de/hsadmin/web/GenericModule.java                              |   16 +-
 hsarweb/src/de/hsadmin/web/vaadin/EMailTargetPropertyFieldFactory.java     |   23 ++-
 hsarweb/src/de/hsadmin/web/vaadin/DefaultPropertyFieldFactory.java         |    9 +
 hsarweb/WebContent/WEB-INF/lib/vaadin-6.8.7.jar                            |    0 
 hsarweb/src/de/hsadmin/web/vaadin/GenericForm.java                         |   25 +++-
 hsarjcli/src/de/hsadmin/jscli/JSONFormatter.java                           |   34 ++--
 hsarweb/src/de/hsadmin/web/StringProperty.java                             |   15 ++
 /dev/null                                                                  |    0 
 hsarjcli/src/de/hsadmin/jscli/ScriptClient.java                            |   38 ++++++
 hsarweb/src/de/hsadmin/web/vaadin/PasswordPropertyFieldFactory.java        |   11 +
 hsarweb/src/de/hsadmin/web/XmlrpcProperty.java                             |    7 +
 30 files changed, 238 insertions(+), 93 deletions(-)

diff --git a/hsarjcli/src/de/hsadmin/jscli/JSONFormatter.java b/hsarjcli/src/de/hsadmin/jscli/JSONFormatter.java
index 96580ca..2f221fb 100644
--- a/hsarjcli/src/de/hsadmin/jscli/JSONFormatter.java
+++ b/hsarjcli/src/de/hsadmin/jscli/JSONFormatter.java
@@ -8,6 +8,23 @@
 	
 	private int indent = 1;
 
+	public String format(Object object) {
+		if (object == null) return "";
+		if (object instanceof List<?>) {
+			return formatList((List<?>) object);
+		}
+		if (object instanceof Map<?, ?>) {
+			return formatMap((Map<?, ?>) object);
+		}
+		if (object instanceof String) {
+			return formatString((String) object);
+		}
+		if (object instanceof Object[]) {
+			return formatArr((Object[]) object);
+		}
+		return "an instance of " + object.getClass().getCanonicalName();
+	}
+
 	public String formatMap(Map<?, ?> map) {
 		StringBuffer result = new StringBuffer();
 		result.append('{');
@@ -59,23 +76,6 @@
 		}
 		result.append(']');
 		return result.toString();
-	}
-	
-	public String format(Object object) {
-		if (object == null) return "";
-		if (object instanceof List<?>) {
-			return formatList((List<?>) object);
-		}
-		if (object instanceof Map<?, ?>) {
-			return formatMap((Map<?, ?>) object);
-		}
-		if (object instanceof String) {
-			return formatString((String) object);
-		}
-		if (object instanceof Object[]) {
-			return formatArr((Object[]) object);
-		}
-		return "an instance of " + object.getClass().getCanonicalName();
 	}
 	
 	private void incr() {
diff --git a/hsarjcli/src/de/hsadmin/jscli/Main.java b/hsarjcli/src/de/hsadmin/jscli/Main.java
index 131047e..3452ee5 100644
--- a/hsarjcli/src/de/hsadmin/jscli/Main.java
+++ b/hsarjcli/src/de/hsadmin/jscli/Main.java
@@ -20,11 +20,13 @@
 			String file = cmdParser.getFile();
 			if (file != null && file.length() > 0) {
 				if ("-".equals(file)) {
-					console.println(formatter.format(scriptClient.execute(new InputStreamReader(System.in))));
+					scriptClient.execute(new InputStreamReader(System.in));
+					console.println(formatter.format(scriptClient.getLastRpcResult()));
 				} else {
 					File fileHandle = new File(file);
 					try {
-						console.println(formatter.format(scriptClient.execute(new FileReader(fileHandle))));
+						scriptClient.execute(new FileReader(fileHandle));
+						console.println(formatter.format(scriptClient.getLastRpcResult()));
 					} catch (FileNotFoundException e) {
 						System.err.println("File not found: " + file);
 					}
@@ -32,13 +34,15 @@
 			}
 			String expr = cmdParser.getExpression();
 			if (expr != null && expr.length() > 0) {
-				console.println(formatter.format(scriptClient.execute(expr)));
+				scriptClient.execute(expr);
+				console.println(formatter.format(scriptClient.getLastRpcResult()));
 			}
 			if (cmdParser.isInteractive()) {
 				String command = console.readInput();
 				while (!("bye".equals(command.trim()) || "exit".equals(command.trim()) || "quit".equals(command.trim()))) {
 					try {
-						console.println(formatter.format(scriptClient.execute(command)));
+						scriptClient.execute(command);
+						console.println(formatter.format(scriptClient.getLastRpcResult()));
 					} catch (Exception e) {
 						console.println("Error: " + e.getLocalizedMessage() + "\n");
 					}
diff --git a/hsarjcli/src/de/hsadmin/jscli/ScriptClient.java b/hsarjcli/src/de/hsadmin/jscli/ScriptClient.java
index adfc9ad..6bb0540 100644
--- a/hsarjcli/src/de/hsadmin/jscli/ScriptClient.java
+++ b/hsarjcli/src/de/hsadmin/jscli/ScriptClient.java
@@ -23,8 +23,16 @@
 		try {
 			engine.put("casgrantingticket", grantingTicket);
 			engine.put("xmlrpcclient", rpcClient);
+			engine.put("xmlrpcLastResult", null);
 			engine.eval("importClass(java.util.ArrayList);");
 			engine.eval("importClass(java.util.HashMap);");
+			engine.eval("function hsaParseParam(val) { " +
+					"if (val instanceof java.util.List) return val;" + 
+					"if (val instanceof java.util.Map) return val;" + 
+					"if (typeof val === 'object' && val.constructor === Array) { res = hsaParseParamArray(val); } " +
+					"else if (typeof val === 'object') { res = hsaParseParamObject(val); }; " +
+					"return res; " +
+					"}");
 			engine.eval("function hsaParseParamArray(o) { " +
 					"var lst = new ArrayList(); " +
 					"var val = ''; " +
@@ -45,6 +53,25 @@
 					"  hsh.put(key, val); " +
 					"}; " +
 					"return hsh; " +
+					"}");
+			engine.eval("function hsaToNativeJSObject(val) { " +
+					"if (val instanceof java.util.List) {" +
+				    "    var res = [];" +
+				    "    for (i = 0; i < val.size(); i++) {" +
+				    "        res[i] = hsaToNativeJSObject(val.get(i));" +
+				    "    }" +
+				    "    return res;" +
+				    "}" +
+				    "if (val instanceof java.util.Map) {" +
+				    "    var res = {};" +
+				    "    var iter = val.keySet().iterator();" +
+				    "    while (iter.hasNext()) {" +
+				    "        var key = iter.next();" +
+				    "        res[key] = hsaToNativeJSObject(val.get(key));" +
+				    "    }" +
+				    "    return res;" +
+				    "}" +
+				    "return val;" +
 					"};");
 		} catch (ScriptException e) {
 			throw new JSCliException(e);
@@ -71,8 +98,9 @@
 								"params.add(casgrantingticket.getTicket()); " + 
 								"if (typeof json === 'undefined') { json = { where:{}, set:{} } };" +
 								"if (fct == 'update' || fct == 'add') { params.add(hsaParseParamObject(json['set'])); }; " + 
-								"if (fct == 'update' || fct == 'delete' || fct == 'search') { params.add(hsaParseParamObject(json['where'])); }; " + 
-								"return xmlrpcclient.execute(mod + '.' + fct, params); " + 
+								"if (fct == 'update' || fct == 'delete' || fct == 'search') { params.add(hsaParseParamObject(json['where'])); }; " +
+								"xmlrpcLastResult = xmlrpcclient.execute(mod + '.' + fct, params);" +
+								"return hsaToNativeJSObject(xmlrpcLastResult); " + 
 								"};");
 				} catch (ScriptException e) {
 					e.printStackTrace();
@@ -94,6 +122,7 @@
 
 	public Object execute(String snippet) throws JSCliException {
 		try {
+			engine.put("xmlrpcLastResult", null);
 			return engine.eval(snippet);
 		} catch (ScriptException e) {
 			throw new JSCliException(e);
@@ -102,10 +131,15 @@
 	
 	public Object execute(Reader rd) throws JSCliException {
 		try {
+			engine.put("xmlrpcLastResult", null);
 			return engine.eval(rd);
 		} catch (ScriptException e) {
 			throw new JSCliException(e);
 		}
 	}
 	
+	public Object getLastRpcResult() {
+		return engine.get("xmlrpcLastResult");
+	}
+	
 }
diff --git a/hsarweb/.classpath b/hsarweb/.classpath
index d6cc4ef..d759f69 100644
--- a/hsarweb/.classpath
+++ b/hsarweb/.classpath
@@ -8,6 +8,6 @@
 	<classpathentry kind="lib" path="WebContent/WEB-INF/lib/xmlrpc-client-3.1.3.jar"/>
 	<classpathentry kind="lib" path="WebContent/WEB-INF/lib/xmlrpc-common-3.1.3.jar"/>
 	<classpathentry kind="lib" path="/hsarback/lib/servlet-api-2.4.jar"/>
-	<classpathentry kind="lib" path="WebContent/WEB-INF/lib/vaadin-6.8.4.jar"/>
+	<classpathentry kind="lib" path="WebContent/WEB-INF/lib/vaadin-6.8.7.jar"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/hsarweb/WebContent/WEB-INF/lib/vaadin-6.8.4.jar b/hsarweb/WebContent/WEB-INF/lib/vaadin-6.8.4.jar
deleted file mode 100644
index 0975d80..0000000
--- a/hsarweb/WebContent/WEB-INF/lib/vaadin-6.8.4.jar
+++ /dev/null
Binary files differ
diff --git a/hsarweb/WebContent/WEB-INF/lib/vaadin-6.8.7.jar b/hsarweb/WebContent/WEB-INF/lib/vaadin-6.8.7.jar
new file mode 100644
index 0000000..b1a676b
--- /dev/null
+++ b/hsarweb/WebContent/WEB-INF/lib/vaadin-6.8.7.jar
Binary files differ
diff --git a/hsarweb/src/de/hsadmin/web/AbstractModule.java b/hsarweb/src/de/hsadmin/web/AbstractModule.java
index 6e9d4f3..e76f7ab 100644
--- a/hsarweb/src/de/hsadmin/web/AbstractModule.java
+++ b/hsarweb/src/de/hsadmin/web/AbstractModule.java
@@ -82,7 +82,7 @@
 							public void buttonClick(ClickEvent event) {
 								application.getMainWindow().removeWindow(childWindow);
 								try {
-									Map<String, AbstractProperty> map = new HashMap<String, AbstractProperty>();
+									Map<String, XmlrpcProperty> map = new HashMap<String, XmlrpcProperty>();
 									genericForm.transferToHash(map, form);
 									((InsertAble) thisModule).insertRow(map);
 									componentFactory.loadData();
diff --git a/hsarweb/src/de/hsadmin/web/AbstractProperty.java b/hsarweb/src/de/hsadmin/web/AbstractProperty.java
index 2c0455a..e3b894d 100644
--- a/hsarweb/src/de/hsadmin/web/AbstractProperty.java
+++ b/hsarweb/src/de/hsadmin/web/AbstractProperty.java
@@ -1,7 +1,10 @@
 package de.hsadmin.web;
 
-public abstract class AbstractProperty {
+public abstract class AbstractProperty implements XmlrpcProperty {
 
+	@Override
 	public abstract Object toXmlrpcParam();
-	
+
+	public abstract String toStringValue();
+
 }
diff --git a/hsarweb/src/de/hsadmin/web/DatabaseModule.java b/hsarweb/src/de/hsadmin/web/DatabaseModule.java
index c62bba0..5a497fa 100644
--- a/hsarweb/src/de/hsadmin/web/DatabaseModule.java
+++ b/hsarweb/src/de/hsadmin/web/DatabaseModule.java
@@ -122,7 +122,7 @@
 	public List<String> getDatabaseUsers() {
 		ArrayList<String> list = new ArrayList<String>();
 		try {
-			Object callSearch = getApplication().getRemote().callSearch(getUserModuleIdent(), new HashMap<String, AbstractProperty>());
+			Object callSearch = getApplication().getRemote().callSearch(getUserModuleIdent(), new HashMap<String, XmlrpcProperty>());
 			if (callSearch instanceof Object[]) {
 				for (Object row : ((Object[])callSearch)) {
 					if (row instanceof Map<?, ?>) {
diff --git a/hsarweb/src/de/hsadmin/web/DateProperty.java b/hsarweb/src/de/hsadmin/web/DateProperty.java
new file mode 100644
index 0000000..613da8b
--- /dev/null
+++ b/hsarweb/src/de/hsadmin/web/DateProperty.java
@@ -0,0 +1,40 @@
+package de.hsadmin.web;
+
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.util.Date;
+
+public class DateProperty extends AbstractProperty {
+
+	public static final DateFormat serverDf = DateFormat.getDateInstance(DateFormat.SHORT);
+
+	final private Date property;
+
+	public DateProperty(Date propertyValue) {
+		this.property = propertyValue;
+	}
+	
+	public DateProperty(String propertyValue) {
+		Date temp = null;
+		try {
+			temp = serverDf.parse(propertyValue);
+		} catch (ParseException e) {
+		}
+		property = temp;
+	}
+	
+	@Override
+	public Object toXmlrpcParam() {
+		return serverDf.format(property);
+	}
+
+	@Override
+	public String toStringValue() {
+		return serverDf.format(property);
+	}
+
+	public Date getDateValue() {
+		return property;
+	}
+
+}
diff --git a/hsarweb/src/de/hsadmin/web/DeleteAble.java b/hsarweb/src/de/hsadmin/web/DeleteAble.java
index 938c12f..1227e30 100644
--- a/hsarweb/src/de/hsadmin/web/DeleteAble.java
+++ b/hsarweb/src/de/hsadmin/web/DeleteAble.java
@@ -4,6 +4,6 @@
 
 public interface DeleteAble {
 
-	public void deleteRow(Map<String, AbstractProperty> paramHash) throws HsarwebException;
+	public void deleteRow(Map<String, XmlrpcProperty> paramHash) throws HsarwebException;
 	
 }
diff --git a/hsarweb/src/de/hsadmin/web/GenericModule.java b/hsarweb/src/de/hsadmin/web/GenericModule.java
index f754624..0bd5a17 100644
--- a/hsarweb/src/de/hsadmin/web/GenericModule.java
+++ b/hsarweb/src/de/hsadmin/web/GenericModule.java
@@ -12,16 +12,16 @@
 
 	private static final long serialVersionUID = 1L;
 
-	public void insertRow(Map<String, AbstractProperty> paramHash) throws HsarwebException {
+	public void insertRow(Map<String, XmlrpcProperty> paramHash) throws HsarwebException {
 		getApplication().getRemote().callAdd(getModuleConfig().getRemoteName(), paramHash);
 	}
 
-	public void deleteRow(Map<String, AbstractProperty> paramHash) throws HsarwebException {
+	public void deleteRow(Map<String, XmlrpcProperty> paramHash) throws HsarwebException {
 		getApplication().getRemote().callDelete(getModuleConfig().getRemoteName(), paramHash);
 	}
 	
-	public void updateRow(Map<String, AbstractProperty> paramHash) throws HsarwebException {
-		Map<String, AbstractProperty> whereHash = new HashMap<String, AbstractProperty>();
+	public void updateRow(Map<String, XmlrpcProperty> paramHash) throws HsarwebException {
+		Map<String, XmlrpcProperty> whereHash = new HashMap<String, XmlrpcProperty>();
 		String idKey = findIdKey();
 		whereHash.put(idKey, paramHash.get(idKey));
 		getApplication().getRemote().callUpdate(getModuleConfig().getRemoteName(), paramHash, whereHash);
@@ -43,7 +43,7 @@
 	public List<String> getUsers() {
 		ArrayList<String> list = new ArrayList<String>();
 		try {
-			Object callSearch = getApplication().getRemote().callSearch("user", new HashMap<String, AbstractProperty>());
+			Object callSearch = getApplication().getRemote().callSearch("user", new HashMap<String, XmlrpcProperty>());
 			if (callSearch instanceof Object[]) {
 				for (Object row : ((Object[])callSearch)) {
 					if (row instanceof Map<?, ?>) {
@@ -64,7 +64,7 @@
 	public List<String> getEMailAliases() {
 		ArrayList<String> list = new ArrayList<String>();
 		try {
-			Object callSearch = getApplication().getRemote().callSearch("emailalias", new HashMap<String, AbstractProperty>());
+			Object callSearch = getApplication().getRemote().callSearch("emailalias", new HashMap<String, XmlrpcProperty>());
 			if (callSearch instanceof Object[]) {
 				for (Object row : ((Object[])callSearch)) {
 					if (row instanceof Map<?, ?>) {
@@ -85,7 +85,7 @@
 	public List<String> getDomains() {
 		ArrayList<String> list = new ArrayList<String>();
 		try {
-			Object callSearch = getApplication().getRemote().callSearch("domain", new HashMap<String, AbstractProperty>());
+			Object callSearch = getApplication().getRemote().callSearch("domain", new HashMap<String, XmlrpcProperty>());
 			if (callSearch instanceof Object[]) {
 				for (Object row : ((Object[])callSearch)) {
 					if (row instanceof Map<?, ?>) {
@@ -106,7 +106,7 @@
 	public List<String> getPackets() {
 		ArrayList<String> list = new ArrayList<String>();
 		try {
-			Object callSearch = getApplication().getRemote().callSearch("pac", new HashMap<String, AbstractProperty>());
+			Object callSearch = getApplication().getRemote().callSearch("pac", new HashMap<String, XmlrpcProperty>());
 			if (callSearch instanceof Object[]) {
 				for (Object row : ((Object[])callSearch)) {
 					if (row instanceof Map<?, ?>) {
diff --git a/hsarweb/src/de/hsadmin/web/HomeModule.java b/hsarweb/src/de/hsadmin/web/HomeModule.java
index 65031d5..a109e4d 100644
--- a/hsarweb/src/de/hsadmin/web/HomeModule.java
+++ b/hsarweb/src/de/hsadmin/web/HomeModule.java
@@ -35,8 +35,8 @@
 		setComponentFactory(this);
 	}
 	
-	public void updateRow(Map<String, AbstractProperty> paramHash) throws HsarwebException {
-		Map<String, AbstractProperty> whereHash = new HashMap<String, AbstractProperty>();
+	public void updateRow(Map<String, XmlrpcProperty> paramHash) throws HsarwebException {
+		Map<String, XmlrpcProperty> whereHash = new HashMap<String, XmlrpcProperty>();
 		String idKey = findIdKey();
 		whereHash.put(idKey, paramHash.get(idKey));
 		paramHash.remove(idKey);
@@ -94,7 +94,7 @@
 		Button button = new Button(moduleConfig.getLabel("change_password"));
 		ThemeResource icon = new ThemeResource(moduleConfig.getLabel("change_password_icon"));
 		button.setIcon(icon);
-		Map<String, AbstractProperty> whereHash = new HashMap<String, AbstractProperty>();
+		Map<String, XmlrpcProperty> whereHash = new HashMap<String, XmlrpcProperty>();
 		whereHash.put("name", new StringProperty(application.getRunAs()));
 		Long key = -1L;
 		try {
@@ -130,7 +130,7 @@
 					public void buttonClick(ClickEvent event) {
 						application.getMainWindow().removeWindow(childWindow);
 						try {
-							Map<String, AbstractProperty> map = new HashMap<String, AbstractProperty>();
+							Map<String, XmlrpcProperty> map = new HashMap<String, XmlrpcProperty>();
 							map.put("id", new StringProperty(((Long) event.getButton().getData()).toString()));
 							Iterator<Component> componentIterator = form.getLayout().getComponentIterator();
 							while (componentIterator.hasNext()) {
diff --git a/hsarweb/src/de/hsadmin/web/InsertAble.java b/hsarweb/src/de/hsadmin/web/InsertAble.java
index c7af5a0..f366617 100644
--- a/hsarweb/src/de/hsadmin/web/InsertAble.java
+++ b/hsarweb/src/de/hsadmin/web/InsertAble.java
@@ -4,6 +4,6 @@
 
 public interface InsertAble {
 
-	public void insertRow(Map<String, AbstractProperty> paramHash) throws HsarwebException;
+	public void insertRow(Map<String, XmlrpcProperty> paramHash) throws HsarwebException;
 	
 }
diff --git a/hsarweb/src/de/hsadmin/web/ItemsReader.java b/hsarweb/src/de/hsadmin/web/ItemsReader.java
index d1c22d5..ffd372b 100644
--- a/hsarweb/src/de/hsadmin/web/ItemsReader.java
+++ b/hsarweb/src/de/hsadmin/web/ItemsReader.java
@@ -9,7 +9,7 @@
 	
 	public static List<Object>  readItemList(MainApplication app, String module, String property) throws HsarwebException {
 		final List<Object> itemsList = new ArrayList<Object>();
-		Object custListObj = app.getRemote().callSearch(module, new HashMap<String, AbstractProperty>());
+		Object custListObj = app.getRemote().callSearch(module, new HashMap<String, XmlrpcProperty>());
 		if (custListObj instanceof Object[]) {
 			Object[] custList = (Object[]) custListObj;
 			for (Object custObj : custList) {
diff --git a/hsarweb/src/de/hsadmin/web/ListOfStringsProperty.java b/hsarweb/src/de/hsadmin/web/ListOfStringsProperty.java
index 6a2366d..97358f0 100644
--- a/hsarweb/src/de/hsadmin/web/ListOfStringsProperty.java
+++ b/hsarweb/src/de/hsadmin/web/ListOfStringsProperty.java
@@ -1,9 +1,10 @@
 package de.hsadmin.web;
 
 import java.util.ArrayList;
+import java.util.Iterator;
 import java.util.List;
 
-public class ListOfStringsProperty extends AbstractProperty {
+public class ListOfStringsProperty implements XmlrpcProperty {
 	
 	public final List<String> properties; 
 	
@@ -25,4 +26,8 @@
 		}
 		return result;
 	}
+
+	public Iterator<String> stringsIterator() {
+		return properties.iterator();
+	}
 }
diff --git a/hsarweb/src/de/hsadmin/web/Remote.java b/hsarweb/src/de/hsadmin/web/Remote.java
index df819aa..9261aaa 100644
--- a/hsarweb/src/de/hsadmin/web/Remote.java
+++ b/hsarweb/src/de/hsadmin/web/Remote.java
@@ -18,23 +18,23 @@
 		this.app = application;
 	}
 
-	public Object callSearch(String module, Map<String, AbstractProperty> where) throws HsarwebException {
+	public Object callSearch(String module, Map<String, XmlrpcProperty> where) throws HsarwebException {
 		return xmlrpcCall(module, "search", buildXmlrpcParam(where)); 
 	}
 
-	public void callAdd(String module, Map<String, AbstractProperty> set) throws HsarwebException {
+	public void callAdd(String module, Map<String, XmlrpcProperty> set) throws HsarwebException {
 		xmlrpcCall(module, "add", buildXmlrpcParam(set)); 
 	}
 
-	public void callUpdate(String module, Map<String, AbstractProperty> set, Map<String, AbstractProperty> where) throws HsarwebException {
+	public void callUpdate(String module, Map<String, XmlrpcProperty> set, Map<String, XmlrpcProperty> where) throws HsarwebException {
 		xmlrpcCall(module, "update", buildXmlrpcParam(set), buildXmlrpcParam(where)); 
 	}
 
-	public void callDelete(String module, Map<String, AbstractProperty> where) throws HsarwebException {
+	public void callDelete(String module, Map<String, XmlrpcProperty> where) throws HsarwebException {
 		xmlrpcCall(module, "delete", buildXmlrpcParam(where)); 
 	}
 
-	private Map<String, Object> buildXmlrpcParam(Map<String, AbstractProperty> paramHash) {
+	private Map<String, Object> buildXmlrpcParam(Map<String, XmlrpcProperty> paramHash) {
 		Map<String, Object> resultMap = new HashMap<String, Object>();
 		if (paramHash == null) {
 			return null;
diff --git a/hsarweb/src/de/hsadmin/web/StringProperty.java b/hsarweb/src/de/hsadmin/web/StringProperty.java
index daf67f6..615ff25 100644
--- a/hsarweb/src/de/hsadmin/web/StringProperty.java
+++ b/hsarweb/src/de/hsadmin/web/StringProperty.java
@@ -2,15 +2,28 @@
 
 public class StringProperty extends AbstractProperty {
 	
-	public String property ;
+	final public String property ;
 
 	public StringProperty(String property) {
 		this.property = property;
 	}
 
+	public StringProperty(Object value) {
+		String temp = "undefined";
+		if (value instanceof String) {
+			temp = (String) value;
+		}
+		this.property = temp;
+	}
+
 	@Override
 	public Object toXmlrpcParam() {
 		return property;
 	}
 
+	@Override
+	public String toStringValue() {
+		return property;
+	}
+
 }
diff --git a/hsarweb/src/de/hsadmin/web/UpdateAble.java b/hsarweb/src/de/hsadmin/web/UpdateAble.java
index 1753c09..cec5cff 100644
--- a/hsarweb/src/de/hsadmin/web/UpdateAble.java
+++ b/hsarweb/src/de/hsadmin/web/UpdateAble.java
@@ -4,6 +4,6 @@
 
 public interface UpdateAble {
 
-	public void updateRow(Map<String, AbstractProperty> paramHash) throws HsarwebException;
+	public void updateRow(Map<String, XmlrpcProperty> paramHash) throws HsarwebException;
 	
 }
diff --git a/hsarweb/src/de/hsadmin/web/XmlrpcProperty.java b/hsarweb/src/de/hsadmin/web/XmlrpcProperty.java
new file mode 100644
index 0000000..ea15516
--- /dev/null
+++ b/hsarweb/src/de/hsadmin/web/XmlrpcProperty.java
@@ -0,0 +1,7 @@
+package de.hsadmin.web;
+
+public interface XmlrpcProperty {
+
+	public abstract Object toXmlrpcParam();
+
+}
\ No newline at end of file
diff --git a/hsarweb/src/de/hsadmin/web/config/PropertyFieldFactory.java b/hsarweb/src/de/hsadmin/web/config/PropertyFieldFactory.java
index 95d7cd0..7a2a6d3 100644
--- a/hsarweb/src/de/hsadmin/web/config/PropertyFieldFactory.java
+++ b/hsarweb/src/de/hsadmin/web/config/PropertyFieldFactory.java
@@ -1,13 +1,13 @@
 package de.hsadmin.web.config;
 
-import de.hsadmin.web.AbstractProperty;
 import de.hsadmin.web.HsarwebException;
+import de.hsadmin.web.XmlrpcProperty;
 
 public interface PropertyFieldFactory {
 
-	public Object createFieldComponent(PropertyConfig prop, Object value);
+	public Object createFieldComponent(PropertyConfig prop, XmlrpcProperty value);
 	
-	public AbstractProperty getValue(PropertyConfig prop, Object component) throws HsarwebException;
+	public XmlrpcProperty getValue(PropertyConfig prop, Object component) throws HsarwebException;
 
 	public void setReadOnly(boolean readOnly);
 
diff --git a/hsarweb/src/de/hsadmin/web/vaadin/DatePropertyFieldFactory.java b/hsarweb/src/de/hsadmin/web/vaadin/DatePropertyFieldFactory.java
index c973d70..5fff817 100644
--- a/hsarweb/src/de/hsadmin/web/vaadin/DatePropertyFieldFactory.java
+++ b/hsarweb/src/de/hsadmin/web/vaadin/DatePropertyFieldFactory.java
@@ -11,7 +11,9 @@
 import com.vaadin.ui.PopupDateField;
 
 import de.hsadmin.web.AbstractProperty;
+import de.hsadmin.web.DateProperty;
 import de.hsadmin.web.StringProperty;
+import de.hsadmin.web.XmlrpcProperty;
 import de.hsadmin.web.config.PropertyConfig;
 import de.hsadmin.web.config.PropertyFieldFactory;
 
@@ -23,14 +25,21 @@
 	private boolean writeOnce = false;
 	
 	@Override
-	public Object createFieldComponent(PropertyConfig prop, Object value) {
+	public Object createFieldComponent(PropertyConfig prop, XmlrpcProperty value) {
 		DateField dateField = new PopupDateField(prop.getLabel());
 		dateField.setDateFormat("dd.MM.yyyy");
 		dateField.setData(prop.getId());
 		dateField.setWidth(480.0f, Sizeable.UNITS_PIXELS);
 		try {
 			if (value != null) {
-				dateField.setValue(serverDf.parse((String) value));
+				if (value instanceof AbstractProperty) {
+					if (value instanceof StringProperty) {
+						dateField.setValue(DateProperty.serverDf.parse(((StringProperty) value).toStringValue()));
+					}
+					if (value instanceof DateProperty) {
+						dateField.setValue(((DateProperty) value).getDateValue());
+					}
+				}
 				dateField.setReadOnly(isReadOnly());
 				return dateField;
 			}
diff --git a/hsarweb/src/de/hsadmin/web/vaadin/DefaultPropertyFieldFactory.java b/hsarweb/src/de/hsadmin/web/vaadin/DefaultPropertyFieldFactory.java
index 1089fe3..3783767 100644
--- a/hsarweb/src/de/hsadmin/web/vaadin/DefaultPropertyFieldFactory.java
+++ b/hsarweb/src/de/hsadmin/web/vaadin/DefaultPropertyFieldFactory.java
@@ -5,6 +5,7 @@
 
 import de.hsadmin.web.AbstractProperty;
 import de.hsadmin.web.StringProperty;
+import de.hsadmin.web.XmlrpcProperty;
 import de.hsadmin.web.config.PropertyConfig;
 import de.hsadmin.web.config.PropertyFieldFactory;
 
@@ -14,11 +15,15 @@
 	private boolean writeOnce = false;
 	
 	@Override
-	public Object createFieldComponent(PropertyConfig prop, Object value) {
+	public Object createFieldComponent(PropertyConfig prop, XmlrpcProperty value) {
 		TextField tf = new TextField(prop.getLabel());
 		tf.setData(prop.getId());
 		tf.setWidth(480.0f, Sizeable.UNITS_PIXELS);
-		tf.setValue(value != null ? value : prop.getDefaultValue());
+		String valueOrDefault = prop.getDefaultValue();
+		if (value instanceof AbstractProperty) {
+			valueOrDefault = ((AbstractProperty) value).toStringValue();
+		}
+		tf.setValue(valueOrDefault);
 		tf.setReadOnly(isReadOnly());
 		return tf;
 	}
diff --git a/hsarweb/src/de/hsadmin/web/vaadin/DomainOptionsPropertyFieldFactory.java b/hsarweb/src/de/hsadmin/web/vaadin/DomainOptionsPropertyFieldFactory.java
index cd0d3d5..fd00e75 100644
--- a/hsarweb/src/de/hsadmin/web/vaadin/DomainOptionsPropertyFieldFactory.java
+++ b/hsarweb/src/de/hsadmin/web/vaadin/DomainOptionsPropertyFieldFactory.java
@@ -1,22 +1,17 @@
-/**
- * 
- */
 package de.hsadmin.web.vaadin;
 
 import java.util.HashMap;
 import java.util.Map;
 
-import com.vaadin.data.Property;
-import com.vaadin.data.Property.ValueChangeEvent;
 import com.vaadin.terminal.Sizeable;
 import com.vaadin.ui.AbstractField;
 import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Select;
 import com.vaadin.ui.VerticalLayout;
 
 import de.hsadmin.web.AbstractProperty;
 import de.hsadmin.web.HsarwebException;
 import de.hsadmin.web.ListOfStringsProperty;
+import de.hsadmin.web.XmlrpcProperty;
 import de.hsadmin.web.config.PropertyConfig;
 import de.hsadmin.web.config.PropertyFieldFactory;
 
@@ -49,13 +44,13 @@
 	}
 
 	@Override
-	public Object createFieldComponent(PropertyConfig prop, Object value) {
+	public Object createFieldComponent(PropertyConfig prop, XmlrpcProperty value) {
 		// TODO Auto-generated method stub
 		return null;
 	}
 
 	@Override
-	public AbstractProperty getValue(PropertyConfig prop, Object component)
+	public XmlrpcProperty getValue(PropertyConfig prop, Object component)
 			throws HsarwebException {
 		return setOptions;
 	}
diff --git a/hsarweb/src/de/hsadmin/web/vaadin/EMailTargetPropertyFieldFactory.java b/hsarweb/src/de/hsadmin/web/vaadin/EMailTargetPropertyFieldFactory.java
index b6a4d98..0b9b549 100644
--- a/hsarweb/src/de/hsadmin/web/vaadin/EMailTargetPropertyFieldFactory.java
+++ b/hsarweb/src/de/hsadmin/web/vaadin/EMailTargetPropertyFieldFactory.java
@@ -1,6 +1,7 @@
 package de.hsadmin.web.vaadin;
 
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.StringTokenizer;
@@ -18,8 +19,10 @@
 import de.hsadmin.web.AbstractProperty;
 import de.hsadmin.web.GenericModule;
 import de.hsadmin.web.HsarwebException;
+import de.hsadmin.web.ListOfStringsProperty;
 import de.hsadmin.web.Module;
 import de.hsadmin.web.StringProperty;
+import de.hsadmin.web.XmlrpcProperty;
 import de.hsadmin.web.config.PropertyConfig;
 import de.hsadmin.web.config.PropertyFieldFactory;
 
@@ -61,7 +64,7 @@
 	}
 
 	@Override
-	public Object createFieldComponent(PropertyConfig prop, Object value) {
+	public Object createFieldComponent(PropertyConfig prop, XmlrpcProperty value) {
 		GenericModule genModule = (GenericModule) module;
 		users = genModule.getUsers();
 		mailAliases = genModule.getEMailAliases();
@@ -71,21 +74,21 @@
 		
 		targets = new HashMap<Integer, SingleEMailTarget>();
 		lastIndex = 0;
-		if (value instanceof String) {
-			StringTokenizer tokenizer = new StringTokenizer((String) value, ",");
+		if (value instanceof AbstractProperty) {
+			String stringValue = ((AbstractProperty) value).toStringValue();
+			StringTokenizer tokenizer = new StringTokenizer(stringValue, ",");
 			while (tokenizer.hasMoreTokens()) {
 				String target = tokenizer.nextToken().trim();
 				targets.put(lastIndex, new SingleEMailTarget(this, lastIndex, target));
 				lastIndex++;
 			}
 		}
-		if (value instanceof Object[]) {
-			Object[] list = (Object[]) value;
-			for (Object o : list) {
-				if (o instanceof String) {
-					targets.put(lastIndex, new SingleEMailTarget(this, lastIndex, (String) o));
-					lastIndex++;
-				}
+		if (value instanceof ListOfStringsProperty) {
+			ListOfStringsProperty list = (ListOfStringsProperty) value;
+			Iterator<String> stringsIterator = list.stringsIterator();
+			while (stringsIterator.hasNext()) {
+				targets.put(lastIndex, new SingleEMailTarget(this, lastIndex, stringsIterator.next()));
+				lastIndex++;
 			}
 		}
 		targets.put(lastIndex, new SingleEMailTarget(this, lastIndex, ""));
diff --git a/hsarweb/src/de/hsadmin/web/vaadin/GenericForm.java b/hsarweb/src/de/hsadmin/web/vaadin/GenericForm.java
index bc60ef1..e10c3b7 100644
--- a/hsarweb/src/de/hsadmin/web/vaadin/GenericForm.java
+++ b/hsarweb/src/de/hsadmin/web/vaadin/GenericForm.java
@@ -10,11 +10,12 @@
 import com.vaadin.ui.Form;
 import com.vaadin.ui.Layout;
 
-import de.hsadmin.web.AbstractProperty;
 import de.hsadmin.web.HsarwebException;
+import de.hsadmin.web.ListOfStringsProperty;
 import de.hsadmin.web.MainApplication;
 import de.hsadmin.web.Module;
 import de.hsadmin.web.StringProperty;
+import de.hsadmin.web.XmlrpcProperty;
 import de.hsadmin.web.config.ModuleConfig;
 import de.hsadmin.web.config.PropertyConfig;
 import de.hsadmin.web.config.PropertyFieldFactory;
@@ -48,7 +49,7 @@
 		try {
 			MainApplication application = module.getApplication();
 			ModuleConfig config = module.getModuleConfig();
-			Map<String, AbstractProperty> where = new HashMap<String, AbstractProperty>();
+			Map<String, XmlrpcProperty> where = new HashMap<String, XmlrpcProperty>();
 			where.put(findIdKey(), new StringProperty(entityId.toString()));
 			Object searchResult = application.getRemote().callSearch(config.getRemoteName(), where);
 			if (searchResult instanceof Object[]) {
@@ -60,7 +61,18 @@
 				for (PropertyConfig prop : config.getPropertyList()) {
 					if (!prop.getPropTableColumn().equals(PropertyTableColumn.INTERNAL_KEY) && prop.isShowInForm()) {
 						PropertyFieldFactory propFieldFactory = prop.getPropFieldFactory();
-						Object value = row.get(prop.getId());
+						Object propValue = row.get(prop.getId());
+						XmlrpcProperty value = new StringProperty("");
+						if (propValue instanceof Object[]) {
+							ListOfStringsProperty list = new ListOfStringsProperty();
+							for (Object o : ((Object[]) propValue)) {
+								list.add(o.toString());
+							}
+							value = list;
+						}
+						if (propValue instanceof String)  {
+							value = new StringProperty(propValue);
+						}
 						Component component = (Component) propFieldFactory.createFieldComponent(prop, value);
 						if (propFieldFactory.isWriteOnce()) {
 							component.setReadOnly(true);
@@ -81,7 +93,7 @@
 		try {
 			MainApplication application = module.getApplication();
 			ModuleConfig config = module.getModuleConfig();
-			Map<String, AbstractProperty> where = new HashMap<String, AbstractProperty>();
+			Map<String, XmlrpcProperty> where = new HashMap<String, XmlrpcProperty>();
 			where.put(findIdKey(), new StringProperty(entityId.toString()));
 			Object searchResult = application.getRemote().callSearch(config.getRemoteName(), where);
 			if (searchResult instanceof Object[]) {
@@ -96,7 +108,8 @@
 								&& prop.getPropTableColumn().equals(PropertyTableColumn.DISPLAY)) {
 						PropertyFieldFactory propFieldFactory = prop.getPropFieldFactory();
 						Object value = row.get(prop.getId());
-						Component component = (Component) propFieldFactory.createFieldComponent(prop, value);
+						StringProperty propValue = new StringProperty(value);
+						Component component = (Component) propFieldFactory.createFieldComponent(prop, propValue);
 						component.setReadOnly(true);
 						layout.addComponent(component);
 					}
@@ -123,7 +136,7 @@
 		return idKey;
 	}
 
-	public void transferToHash(Map<String, AbstractProperty> map, Form form) throws HsarwebException {
+	public void transferToHash(Map<String, XmlrpcProperty> map, Form form) throws HsarwebException {
 		Iterator<Component> iterator = form.getLayout().getComponentIterator();
 		Object formData = form.getData();
 		if (formData != null && formData instanceof Long) {
diff --git a/hsarweb/src/de/hsadmin/web/vaadin/PacPrefixedNamePropertyFieldFactory.java b/hsarweb/src/de/hsadmin/web/vaadin/PacPrefixedNamePropertyFieldFactory.java
index 368f570..2a7fd26 100644
--- a/hsarweb/src/de/hsadmin/web/vaadin/PacPrefixedNamePropertyFieldFactory.java
+++ b/hsarweb/src/de/hsadmin/web/vaadin/PacPrefixedNamePropertyFieldFactory.java
@@ -11,6 +11,7 @@
 import de.hsadmin.web.HsarwebException;
 import de.hsadmin.web.Module;
 import de.hsadmin.web.StringProperty;
+import de.hsadmin.web.XmlrpcProperty;
 import de.hsadmin.web.config.ModuleConfig;
 import de.hsadmin.web.config.PropertyConfig;
 import de.hsadmin.web.config.PropertyFieldFactory;
@@ -28,7 +29,7 @@
 	}
 
 	@Override
-	public Object createFieldComponent(PropertyConfig prop, Object value) {
+	public Object createFieldComponent(PropertyConfig prop, XmlrpcProperty value) {
 		ModuleConfig config = module.getModuleConfig();
 		HorizontalLayout layout = new HorizontalLayout();
 		layout.setCaption(prop.getLabel());
@@ -55,7 +56,10 @@
 		tf.setData(prop.getId());
 		tf.setWidth(384.0f, Sizeable.UNITS_PIXELS);
 		layout.addComponent(tf);
-		String valueOrDefault = (value != null && value instanceof String) ? ((String) value) : prop.getDefaultValue();
+		String valueOrDefault =  prop.getDefaultValue();
+		if (value instanceof AbstractProperty) {
+			valueOrDefault = ((AbstractProperty) value).toStringValue();
+		}
 		if (valueOrDefault.length() >= 5) {
 			sel.setValue(valueOrDefault.substring(0, 5));
 			tf.setValue(valueOrDefault.length() > 6 ? valueOrDefault.substring(6) : "");
diff --git a/hsarweb/src/de/hsadmin/web/vaadin/PasswordPropertyFieldFactory.java b/hsarweb/src/de/hsadmin/web/vaadin/PasswordPropertyFieldFactory.java
index 6367152..2c99086 100644
--- a/hsarweb/src/de/hsadmin/web/vaadin/PasswordPropertyFieldFactory.java
+++ b/hsarweb/src/de/hsadmin/web/vaadin/PasswordPropertyFieldFactory.java
@@ -8,6 +8,7 @@
 import de.hsadmin.web.HsarwebException;
 import de.hsadmin.web.Module;
 import de.hsadmin.web.StringProperty;
+import de.hsadmin.web.XmlrpcProperty;
 import de.hsadmin.web.config.ModuleConfig;
 import de.hsadmin.web.config.PropertyConfig;
 import de.hsadmin.web.config.PropertyFieldFactory;
@@ -24,7 +25,7 @@
 	}
 	
 	@Override
-	public Object createFieldComponent(PropertyConfig prop, Object value) {
+	public Object createFieldComponent(PropertyConfig prop, XmlrpcProperty value) {
 		ModuleConfig config = module.getModuleConfig();
 		VerticalLayout layout = new VerticalLayout();
 		layout.setCaption(prop.getLabel());
@@ -32,13 +33,17 @@
 		PasswordField tf1 = new PasswordField(config.getLabel(prop.getId() + "1"));
 		tf1.setData(prop.getId());
 		tf1.setWidth(480.0f, Sizeable.UNITS_PIXELS);
-		tf1.setValue(value != null ? value : prop.getDefaultValue());
+		String valueOrDefault = prop.getDefaultValue();
+		if (value instanceof AbstractProperty) {
+			valueOrDefault = ((AbstractProperty) value).toStringValue();
+		}
+		tf1.setValue(valueOrDefault);
 		tf1.setReadOnly(readOnly);
 		layout.addComponent(tf1);
 		PasswordField tf2 = new PasswordField(config.getLabel(prop.getId() + "2"));
 		tf2.setData(prop.getId());
 		tf2.setWidth(480.0f, Sizeable.UNITS_PIXELS);
-		tf2.setValue(value != null ? value : prop.getDefaultValue());
+		tf2.setValue(valueOrDefault);
 		tf2.setReadOnly(readOnly);
 		layout.addComponent(tf2);
 		return layout;
diff --git a/hsarweb/src/de/hsadmin/web/vaadin/SelectPropertyFieldFactory.java b/hsarweb/src/de/hsadmin/web/vaadin/SelectPropertyFieldFactory.java
index 6850a1d..7381153 100644
--- a/hsarweb/src/de/hsadmin/web/vaadin/SelectPropertyFieldFactory.java
+++ b/hsarweb/src/de/hsadmin/web/vaadin/SelectPropertyFieldFactory.java
@@ -8,6 +8,7 @@
 import de.hsadmin.web.AbstractProperty;
 import de.hsadmin.web.HsarwebException;
 import de.hsadmin.web.StringProperty;
+import de.hsadmin.web.XmlrpcProperty;
 import de.hsadmin.web.config.PropertyConfig;
 import de.hsadmin.web.config.PropertyFieldFactory;
 
@@ -17,7 +18,7 @@
 	private boolean writeOnce = false;
 
 	@Override
-	public Object createFieldComponent(PropertyConfig prop, Object value) {
+	public Object createFieldComponent(PropertyConfig prop, XmlrpcProperty value) {
 		Select sel = new Select(prop.getLabel());
 		sel.setData(prop.getId());
 		sel.setNullSelectionAllowed(false);
@@ -28,7 +29,11 @@
 			sel.setItemCaption(key, selectValues.get(key));
 		}
 		sel.setWidth(480.0f, Sizeable.UNITS_PIXELS);
-		sel.setValue(value != null ? value : prop.getDefaultValue());
+		String valueOrDefault = prop.getDefaultValue();
+		if (value instanceof AbstractProperty) {
+			valueOrDefault = ((AbstractProperty) value).toStringValue();
+		}
+		sel.setValue(valueOrDefault);
 		sel.setReadOnly(readOnly);
 		sel.setInvalidAllowed(prop.newItemsAllowed());
 		return sel;
diff --git a/hsarweb/src/de/hsadmin/web/vaadin/TableComponentFactory.java b/hsarweb/src/de/hsadmin/web/vaadin/TableComponentFactory.java
index 0eaf71d..a6c7df8 100644
--- a/hsarweb/src/de/hsadmin/web/vaadin/TableComponentFactory.java
+++ b/hsarweb/src/de/hsadmin/web/vaadin/TableComponentFactory.java
@@ -21,13 +21,13 @@
 import com.vaadin.ui.Window;
 import com.vaadin.ui.themes.BaseTheme;
 
-import de.hsadmin.web.AbstractProperty;
 import de.hsadmin.web.DeleteAble;
 import de.hsadmin.web.HsarwebException;
 import de.hsadmin.web.MainApplication;
 import de.hsadmin.web.Module;
 import de.hsadmin.web.StringProperty;
 import de.hsadmin.web.UpdateAble;
+import de.hsadmin.web.XmlrpcProperty;
 import de.hsadmin.web.config.ComponentFactory;
 import de.hsadmin.web.config.LocaleConfig;
 import de.hsadmin.web.config.ModuleConfig;
@@ -108,7 +108,7 @@
 		table.removeAllItems();
 		try {
 			ModuleConfig moduleConfig = module.getModuleConfig();
-			Object callSearch = module.getApplication().getRemote().callSearch(moduleConfig.getRemoteName(), new HashMap<String, AbstractProperty>());
+			Object callSearch = module.getApplication().getRemote().callSearch(moduleConfig.getRemoteName(), new HashMap<String, XmlrpcProperty>());
 			List<PropertyConfig> propertyList = moduleConfig.getPropertyList();
 			if (callSearch instanceof Object[]) {
 				for (Object row : ((Object[])callSearch)) {
@@ -230,7 +230,7 @@
 					public void buttonClick(ClickEvent event) {
 						application.getMainWindow().removeWindow(childWindow);
 						try {
-							Map<String, AbstractProperty> map = new HashMap<String, AbstractProperty>();
+							Map<String, XmlrpcProperty> map = new HashMap<String, XmlrpcProperty>();
 							genericForm.transferToHash(map, form);
 							((UpdateAble) module).updateRow(map);
 							loadData();
@@ -289,7 +289,7 @@
 					public void buttonClick(ClickEvent event) {
 						application.getMainWindow().removeWindow(childWindow);
 						try {
-							Map<String, AbstractProperty> map = new HashMap<String, AbstractProperty>();
+							Map<String, XmlrpcProperty> map = new HashMap<String, XmlrpcProperty>();
 							map.put(findIdKey(), new StringProperty(((Long) button.getData()).toString()));
 							((DeleteAble) module).deleteRow(map);
 							loadData();

--
Gitblit v1.9.0-SNAPSHOT