Author: simoneg
Date: Wed Sep 16 13:12:12 2009
New Revision: 815754

URL: http://svn.apache.org/viewvc?rev=815754&view=rev
Log:
LABS-456 : database converter takes into account logical names

Added:
    
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
    
labs/magma/trunk/foundation-database/src/test/java/org/apache/magma/database/TestJPAConverter.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=815754&r1=815753&r2=815754&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
 Wed Sep 16 13:12:12 2009
@@ -19,6 +19,7 @@
 import org.apache.magma.beans.BeanData;
 import org.apache.magma.conversion.Converter;
 import org.apache.magma.conversion.GenericConverter;
+import org.apache.magma.basics.MagmaException;
 
 public class DatabaseConverter implements Converter<DatabasePersisted> {
 
@@ -32,17 +33,42 @@
 
        public DatabasePersisted from(String value) {
                if (value == null || value.equals("")) return null;
-               DatabaseIdentity id = 
BeanData.getFor(myclass).getDatabaseIdentity();
-               Object key = id.getSubconverter().from(value);
+               DatabasePersisted ret = null;
+               Exception retexc = null;
                Database db = new Database();
-               return db.load(myclass, key);
+               try {
+                       DatabaseIdentity id = 
BeanData.getFor(myclass).getDatabaseIdentity();
+                       Object key = id.getSubconverter().from(value);
+                   ret = db.load(myclass, key);
+               } 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 {
+                                       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);
+               }
+               return ret;
        }
 
        @SuppressWarnings("unchecked")
        public String to(DatabasePersisted value) {
                if (value == null) return "";
-               DatabaseIdentity id = 
BeanData.getFor(myclass).getDatabaseIdentity();
-               String ret = id.getSubconverter().to(value.getPrimaryKey());
+               String ret = null;
+               if (value instanceof LogicallyNamed) {
+                       ret = ((LogicallyNamed)value).getLogicalName();
+               } else {
+                       DatabaseIdentity id = 
BeanData.getFor(myclass).getDatabaseIdentity();
+                       ret = id.getSubconverter().to(value.getPrimaryKey());
+               }
                return ret;
        }
 

Added: 
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=815754&view=auto
==============================================================================
--- 
labs/magma/trunk/foundation-database/src/test/java/org/apache/magma/database/LogicallyNamedBean.java
 (added)
+++ 
labs/magma/trunk/foundation-database/src/test/java/org/apache/magma/database/LogicallyNamedBean.java
 Wed Sep 16 13:12:12 2009
@@ -0,0 +1,33 @@
+package org.apache.magma.database;
+
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+import org.apache.magma.beans.MagmaBean;
+import org.apache.magma.database.LogicallyNamed;
+
+...@magmabean
+...@entity
+public class LogicallyNamedBean implements LogicallyNamed {
+       private String name;
+       private long id;
+       
+       public String getName() {
+               return name;
+       }
+       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();
+       }
+       
+}

Modified: 
labs/magma/trunk/foundation-database/src/test/java/org/apache/magma/database/TestJPAConverter.java
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/foundation-database/src/test/java/org/apache/magma/database/TestJPAConverter.java?rev=815754&r1=815753&r2=815754&view=diff
==============================================================================
--- 
labs/magma/trunk/foundation-database/src/test/java/org/apache/magma/database/TestJPAConverter.java
 (original)
+++ 
labs/magma/trunk/foundation-database/src/test/java/org/apache/magma/database/TestJPAConverter.java
 Wed Sep 16 13:12:12 2009
@@ -16,6 +16,7 @@
  */
 package org.apache.magma.database;
 
+import static org.junit.Assert.*;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
@@ -41,6 +42,21 @@
                assertNotNull(tos);
                assertEquals("5", tos);
        }
+       
+       @Test
+       public void named() throws Exception {
+               Converter converter = 
Converters.getConverterFor(LogicallyNamedBean.class);
+               assertNotNull(converter);
+               assertTrue(converter instanceof DatabaseConverter);
+               DatabaseConverter conv = (DatabaseConverter) converter;
+               LogicallyNamedBean b = new LogicallyNamedBean();
+               b.setId(5);
+               b.setName("Simone");
+               b.setLogicalName("simone");
+               String tos = converter.to(b);
+               assertNotNull(tos);
+               assertEquals("simone", tos);            
+       }
 
        
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to