Author: simoneg
Date: Tue Sep 15 14:03:30 2009
New Revision: 815331

URL: http://svn.apache.org/viewvc?rev=815331&view=rev
Log:
LABS-456 : logical names interface and utility methods

Added:
    
labs/magma/trunk/database-jpa/src/main/java/org/apache/magma/database/openjpa/LogicalNameHandling.aj
    
labs/magma/trunk/foundation-database/src/main/java/org/apache/magma/database/LogicallyNamed.java
    
labs/magma/trunk/foundation-database/src/main/java/org/apache/magma/database/LogicallyNamedDefaultImpl.aj
Modified:
    
labs/magma/trunk/database-jpa/src/main/java/org/apache/magma/database/openjpa/JPADatabase.java
    
labs/magma/trunk/foundation-database/src/main/java/org/apache/magma/database/Database.java

Modified: 
labs/magma/trunk/database-jpa/src/main/java/org/apache/magma/database/openjpa/JPADatabase.java
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/database-jpa/src/main/java/org/apache/magma/database/openjpa/JPADatabase.java?rev=815331&r1=815330&r2=815331&view=diff
==============================================================================
--- 
labs/magma/trunk/database-jpa/src/main/java/org/apache/magma/database/openjpa/JPADatabase.java
 (original)
+++ 
labs/magma/trunk/database-jpa/src/main/java/org/apache/magma/database/openjpa/JPADatabase.java
 Tue Sep 15 14:03:30 2009
@@ -24,6 +24,7 @@
 import javax.persistence.Query;
 
 import org.apache.magma.database.Database;
+import org.apache.magma.database.LogicallyNamed;
 
 /**
  * Subclass of Database using JPA.
@@ -49,6 +50,13 @@
                return manager.find(clazz, id[0]);
        }
        
+       public <T extends LogicallyNamed> T named(Class<T> clazz, String 
logicalName) {
+               List<T> list = query(clazz, "WHERE x.logicalName=?1", 
logicalName);
+               if (list.size() == 0) return null;
+               return list.get(0);
+       }
+       
+       
        @SuppressWarnings("unchecked")
        public <T> List<T> query(Class<T> clazz, int start, int page, String 
query, Object... params) {
                if (!query.toUpperCase().startsWith("SELECT")) {

Added: 
labs/magma/trunk/database-jpa/src/main/java/org/apache/magma/database/openjpa/LogicalNameHandling.aj
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/database-jpa/src/main/java/org/apache/magma/database/openjpa/LogicalNameHandling.aj?rev=815331&view=auto
==============================================================================
--- 
labs/magma/trunk/database-jpa/src/main/java/org/apache/magma/database/openjpa/LogicalNameHandling.aj
 (added)
+++ 
labs/magma/trunk/database-jpa/src/main/java/org/apache/magma/database/openjpa/LogicalNameHandling.aj
 Tue Sep 15 14:03:30 2009
@@ -0,0 +1,38 @@
+package org.apache.magma.database.openjpa;
+
+import javax.persistence.PrePersist;
+import org.apache.magma.database.Database;
+
+import org.apache.magma.database.LogicallyNamed;
+
+public aspect LogicalNameHandling {
+
+       @PrePersist
+       public void LogicallyNamed.jpaInitializeLogicalName() {
+               if (getLogicalName() != null) return;
+               String tempname = this.computeLogicalName();
+               tempname = tempname.toLowerCase();
+               if (tempname == null) {
+                       tempname = this.getClass().getName() + 
System.currentTimeMillis() + System.nanoTime();
+               }
+               StringBuilder normalized = new StringBuilder();
+               for (int i = 0; i < tempname.length(); i++) {
+                       char acc = tempname.charAt(i);
+                       if (Character.isLetterOrDigit(acc)) {
+                               normalized.append(acc);
+                       } else if (acc == ' ') {
+                               normalized.append('-');
+                       }
+                       if (normalized.length() == 30) break;
+               }
+               tempname = normalized.toString();
+               Database db = new Database();
+               if (db.count(this.getClass(), "x.logicalName=?1", tempname) > 
0) {
+                       int prog = 2;
+                       while (db.count(this.getClass(), "x.logicalName=?1", 
tempname + "-" + prog) > 0) prog++;
+                       tempname += "-" + prog;
+               }
+               setLogicalName(tempname);
+       }
+       
+}

Modified: 
labs/magma/trunk/foundation-database/src/main/java/org/apache/magma/database/Database.java
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/foundation-database/src/main/java/org/apache/magma/database/Database.java?rev=815331&r1=815330&r2=815331&view=diff
==============================================================================
--- 
labs/magma/trunk/foundation-database/src/main/java/org/apache/magma/database/Database.java
 (original)
+++ 
labs/magma/trunk/foundation-database/src/main/java/org/apache/magma/database/Database.java
 Tue Sep 15 14:03:30 2009
@@ -51,6 +51,26 @@
                return null;
        }
        
+       /**
+        * Loads an entity of the given class with the given logical name.
+        * <p>
+        * As an example :
+        * <code>
+        * Database db = new Database();
+        * Section s = db.names(Section.class, "news");
+        * </code>
+        * will load the section having a logical name "news".
+        * </p>
+        * 
+        * @param <T> The class of the entity, must implement {...@link 
LogicallyNamed}
+        * @param clazz The class of the entity, must implement {...@link 
LogicallyNamed}
+        * @param logicalName The logical name to search for.
+        * @return An instance of the entity, or null if not found.
+        */
+       public <T extends LogicallyNamed> T named(Class<T> clazz, String 
logicalName) {
+               return null;
+       }
+       
 
        /**
         * Executes a query returning all results. This is the same as calling 
@@ -103,6 +123,24 @@
        }
        
        /**
+        * Counts how many entities with given query are present on the 
database.
+        * <p>
+        * The query follows the same rules of {...@link #query(Class, String, 
Object...)}.
+        * </p>
+        * @param clazz The persistent (entity) class we want to count. 
+        * @param query A query, which may be null or empty, describing which 
entities we are interested in counting.
+        * @param params Parameters to replace in the query, if any
+        * @return the number of entities matching the query criteria found on 
the database.
+        */
+       public int count(Class<?> clazz, String query, Object... params) {
+               if (query == null || query.length() == 0) {
+                       return queryNumber("SELECT count(x) FROM " + 
clazz.getName() + " x").intValue();
+               } else {
+                       return queryNumber("SELECT count(x) FROM " + 
clazz.getName() + " x WHERE " + query, params).intValue();
+               }
+       }
+       
+       /**
         * Executes a query that returns a single number.
         * <p>
         * This method is useful when the query needs to return a simple 
number, like a count or an average.
@@ -119,6 +157,7 @@
         * </code>
         * </p>
         * @param query The query to execute
+        * @param params Parameters to replace in the query, if any
         * @return The only number returned by the query.
         */
        public Number queryNumber(String query, Object... params) {

Added: 
labs/magma/trunk/foundation-database/src/main/java/org/apache/magma/database/LogicallyNamed.java
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/foundation-database/src/main/java/org/apache/magma/database/LogicallyNamed.java?rev=815331&view=auto
==============================================================================
--- 
labs/magma/trunk/foundation-database/src/main/java/org/apache/magma/database/LogicallyNamed.java
 (added)
+++ 
labs/magma/trunk/foundation-database/src/main/java/org/apache/magma/database/LogicallyNamed.java
 Tue Sep 15 14:03:30 2009
@@ -0,0 +1,16 @@
+package org.apache.magma.database;
+
+import javax.persistence.Column;
+
+import org.apache.magma.beans.MagmaBeanSupport;
+
+
+public interface LogicallyNamed extends MagmaBeanSupport {
+
+       @Column(nullable=true, unique=true, updatable=false, insertable=true)
+       public String getLogicalName();
+       public void setLogicalName(String name);
+       
+       public String computeLogicalName();
+       
+}

Added: 
labs/magma/trunk/foundation-database/src/main/java/org/apache/magma/database/LogicallyNamedDefaultImpl.aj
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/foundation-database/src/main/java/org/apache/magma/database/LogicallyNamedDefaultImpl.aj?rev=815331&view=auto
==============================================================================
--- 
labs/magma/trunk/foundation-database/src/main/java/org/apache/magma/database/LogicallyNamedDefaultImpl.aj
 (added)
+++ 
labs/magma/trunk/foundation-database/src/main/java/org/apache/magma/database/LogicallyNamedDefaultImpl.aj
 Tue Sep 15 14:03:30 2009
@@ -0,0 +1,16 @@
+package org.apache.magma.database;
+
+public aspect LogicallyNamedDefaultImpl {
+
+       private String LogicallyNamed.logicalName = null;
+       
+       public void LogicallyNamed.setLogicalName(String name) {
+               this.logicalName = name;
+       }
+       
+       public String LogicallyNamed.getLogicalName() {
+               return this.logicalName;
+       }
+       
+       
+}



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

Reply via email to