You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@labs.apache.org by si...@apache.org on 2009/12/11 16:30:09 UTC

svn commit: r889658 - in /labs/magma/trunk/foundation-database/src: main/java/org/apache/magma/database/DatabaseConverter.java test/java/org/apache/magma/database/LogicallyNamedBean.java

Author: simoneg
Date: Fri Dec 11 15:30:08 2009
New Revision: 889658

URL: http://svn.apache.org/viewvc?rev=889658&view=rev
Log:
LABS-235 : Database now uses bean converter if the entity is not persisted

Modified:
    labs/magma/trunk/foundation-database/src/main/java/org/apache/magma/database/DatabaseConverter.java
    labs/magma/trunk/foundation-database/src/test/java/org/apache/magma/database/LogicallyNamedBean.java

Modified: labs/magma/trunk/foundation-database/src/main/java/org/apache/magma/database/DatabaseConverter.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-database/src/main/java/org/apache/magma/database/DatabaseConverter.java?rev=889658&r1=889657&r2=889658&view=diff
==============================================================================
--- labs/magma/trunk/foundation-database/src/main/java/org/apache/magma/database/DatabaseConverter.java (original)
+++ labs/magma/trunk/foundation-database/src/main/java/org/apache/magma/database/DatabaseConverter.java Fri Dec 11 15:30:08 2009
@@ -17,8 +17,10 @@
 package org.apache.magma.database;
 
 import org.apache.magma.beans.BeanData;
+import org.apache.magma.beans.MagmaBeanSupport;
 import org.apache.magma.conversion.Converter;
 import org.apache.magma.conversion.GenericConverter;
+import org.apache.magma.conversion.string.MagmaBeanConverter;
 import org.apache.magma.basics.MagmaException;
 
 public class DatabaseConverter implements Converter<DatabasePersisted> {
@@ -36,6 +38,7 @@
 		DatabasePersisted ret = null;
 		Exception retexc = null;
 		Database db = new Database();
+		// Try if the string is a valid primary key
 		try {
 			DatabaseIdentity id = BeanData.getFor(myclass).getDatabaseIdentity();
 			Object key = id.getSubconverter().from(value);
@@ -43,18 +46,25 @@
 		} catch (Exception e) {
 			retexc = e;
 		}
-		if (ret == null && LogicallyNamed.class.isAssignableFrom(myclass)) {
-			try {
-				ret = (DatabasePersisted) db.named((Class<? extends LogicallyNamed>)myclass, value);
-			} catch (Exception e) {
-				if (retexc == null) {
-					throw new MagmaException(e, "Error retriving {0} using logical name \"{1}\"", myclass, value);
-				} else {
+		// Try if it is a logical name
+		try {
+			if (ret == null && LogicallyNamed.class.isAssignableFrom(myclass)) {
+				try {
+					ret = (DatabasePersisted) db.named((Class<? extends LogicallyNamed>)myclass, value);
+				} catch (Exception e) {
 					throw new MagmaException(e, "Error retriving {0} using logical name \"{1}\"", myclass, value);
 				}
+			} else if (retexc != null) {
+				throw new MagmaException(retexc, "Error retrieving {0} using primary key \"{1}\"", myclass, value);
+			}
+		} catch (MagmaException e) {
+			// Last try, if it is an unpersisted bean
+			try {
+				MagmaBeanConverter mbc = (MagmaBeanConverter) new MagmaBeanConverter().build(myclass);
+				ret = (DatabasePersisted) mbc.from(value);
+			} catch (Exception mbe) {
+				throw e;
 			}
-		} else if (retexc != null) {
-			throw new MagmaException(retexc, "Error retrieving {0} using primary key \"{1}\"", myclass, value);
 		}
 		return ret;
 	}
@@ -62,13 +72,20 @@
 	@SuppressWarnings("unchecked")
 	public String to(DatabasePersisted value) {
 		if (value == null) return "";
+		Object primaryKey = value.getPrimaryKey();
+		// TODO assumption that 0 is not a valid primary key, which in fact it is, is there a better way?
+		if (primaryKey == null || (primaryKey instanceof Number && ((Number)primaryKey).intValue() == 0)) {
+			// Entity not persisted yet, use a magma bean converter
+			MagmaBeanConverter mbc = (MagmaBeanConverter) new MagmaBeanConverter().build(myclass);
+			return mbc.to(value);
+		}
 		String ret = null;
 		if (value instanceof LogicallyNamed) {
 			ret = ((LogicallyNamed)value).getLogicalName();
 		}
 		if (ret == null || ret.length() == 0) {
 			DatabaseIdentity id = BeanData.getFor(myclass).getDatabaseIdentity();
-			ret = id.getSubconverter().to(value.getPrimaryKey());
+			ret = id.getSubconverter().to(primaryKey);
 		}
 		return ret;
 	}

Modified: labs/magma/trunk/foundation-database/src/test/java/org/apache/magma/database/LogicallyNamedBean.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-database/src/test/java/org/apache/magma/database/LogicallyNamedBean.java?rev=889658&r1=889657&r2=889658&view=diff
==============================================================================
--- labs/magma/trunk/foundation-database/src/test/java/org/apache/magma/database/LogicallyNamedBean.java (original)
+++ labs/magma/trunk/foundation-database/src/test/java/org/apache/magma/database/LogicallyNamedBean.java Fri Dec 11 15:30:08 2009
@@ -11,7 +11,6 @@
 @Entity
 public class LogicallyNamedBean implements LogicallyNamed {
 	private String name;
-	private long id;
 	
 	public String getName() {
 		return name;
@@ -19,13 +18,6 @@
 	public void setName(String name) {
 		this.name = name;
 	}
-	public long getId() {
-		return id;
-	}
-	public void setId(long id) {
-		this.id = id;
-	}
-	
 	public String computeLogicalName() {
 		return this.getName();
 	}



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@labs.apache.org
For additional commands, e-mail: commits-help@labs.apache.org