You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2016/11/02 15:38:14 UTC

cayenne git commit: CAY-2130 Stripping common name prefixes on reverse engineering

Repository: cayenne
Updated Branches:
  refs/heads/master ebeb86fa0 -> 6c5d9dbed


CAY-2130 Stripping common name prefixes on reverse engineering

* preliminary refactoring and cleanup of the tests


Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/6c5d9dbe
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/6c5d9dbe
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/6c5d9dbe

Branch: refs/heads/master
Commit: 6c5d9dbed87f748988ee5d7daa721ef21413e5c8
Parents: ebeb86f
Author: Andrus Adamchik <an...@objectstyle.com>
Authored: Wed Nov 2 18:28:44 2016 +0300
Committer: Andrus Adamchik <an...@objectstyle.com>
Committed: Wed Nov 2 18:37:57 2016 +0300

----------------------------------------------------------------------
 .../naming/DefaultObjectNameGenerator.java      | 97 +++++++++-----------
 .../naming/DefaultObjectNameGeneratorTest.java  | 73 ++++++++++-----
 2 files changed, 96 insertions(+), 74 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/6c5d9dbe/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/naming/DefaultObjectNameGenerator.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/naming/DefaultObjectNameGenerator.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/naming/DefaultObjectNameGenerator.java
index a201325..7810222 100644
--- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/naming/DefaultObjectNameGenerator.java
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/naming/DefaultObjectNameGenerator.java
@@ -28,67 +28,60 @@ import org.jvnet.inflector.Noun;
 import java.util.Locale;
 
 /**
- * A strategy for generating names of entities, attributes etc.
- * 
+ * The default strategy for converting DB-layer to Object-layer names.
+ *
  * @since 4.0
  */
 public class DefaultObjectNameGenerator implements ObjectNameGenerator {
 
-	@Override
-	public String dbRelationshipName(ExportedKey key, boolean toMany) {
 
-		String name;
+    @Override
+    public String dbRelationshipName(ExportedKey key, boolean toMany) {
+        String name = toMany ? toManyRelationshipName(key) : toOneRelationshipName(key);
+        return Util.underscoredToJava(name, false);
+    }
 
-		if (toMany) {
-			try {
-				/**
-				 * by default we use english language rules here. uppercase is
-				 * required for NameConverter to work properly
-				 */
-				name = Noun.pluralOf(key.getFKTableName().toLowerCase(), Locale.ENGLISH).toUpperCase();
-			} catch (Exception inflectorError) {
-				/**
-				 * seems that Inflector cannot be trusted. For instance, it
-				 * throws an exception when invoked for word "ADDRESS" (although
-				 * lower case works fine). To feel safe, we use superclass'
-				 * behavior if something's gone wrong
-				 */
-				return key.getFKTableName().toLowerCase();
-			}
-		} else {
-			String fkColName = key.getFKColumnName();
+    protected String toManyRelationshipName(ExportedKey key) {
+        try {
+            // by default we use English rules here...
+            return Noun.pluralOf(key.getFKTableName().toLowerCase(), Locale.ENGLISH);
+        } catch (Exception inflectorError) {
+            //  seems that Inflector cannot be trusted. For instance, it
+            // throws an exception when invoked for word "ADDRESS" (although
+            // lower case works fine). To feel safe, we use superclass'
+            // behavior if something's gone wrong
+            return key.getFKTableName();
+        }
+    }
 
-			// trim "ID" in the end
-			if (fkColName == null) {
-				name = key.getPKTableName();
-			} else if (fkColName.toUpperCase().endsWith("_ID") && fkColName.length() > 3) {
-				name = fkColName.substring(0, fkColName.length() - 3);
-			} else if (fkColName.toUpperCase().endsWith("ID") && fkColName.length() > 2) {
-				name = fkColName.substring(0, fkColName.length() - 2);
-			} else {
-				/**
-				 * We don't want relationship to conflict with attribute, so
-				 * we'd better return superior value with 'to'
-				 */
-				name = key.getPKTableName();
-			}
-		}
+    protected String toOneRelationshipName(ExportedKey key) {
+        String fkColName = key.getFKColumnName();
 
-		return Util.underscoredToJava(name, false);
-	}
+        if (fkColName == null) {
+            return key.getPKTableName();
+        }
+        // trim "ID" in the end
+        else if (fkColName.toUpperCase().endsWith("_ID") && fkColName.length() > 3) {
+            return fkColName.substring(0, fkColName.length() - 3);
+        } else if (fkColName.toUpperCase().endsWith("ID") && fkColName.length() > 2) {
+            return fkColName.substring(0, fkColName.length() - 2);
+        } else {
+            return key.getPKTableName();
+        }
+    }
 
-	@Override
-	public String objEntityName(DbEntity dbEntity) {
-		return Util.underscoredToJava(dbEntity.getName(), true);
-	}
+    @Override
+    public String objEntityName(DbEntity dbEntity) {
+        return Util.underscoredToJava(dbEntity.getName(), true);
+    }
 
-	@Override
-	public String objAttributeName(DbAttribute attr) {
-		return Util.underscoredToJava(attr.getName(), false);
-	}
+    @Override
+    public String objAttributeName(DbAttribute attr) {
+        return Util.underscoredToJava(attr.getName(), false);
+    }
 
-	@Override
-	public String objRelationshipName(DbRelationship dbRel) {
-		return Util.underscoredToJava(dbRel.getName(), false);
-	}
+    @Override
+    public String objRelationshipName(DbRelationship dbRel) {
+        return Util.underscoredToJava(dbRel.getName(), false);
+    }
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/6c5d9dbe/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/naming/DefaultObjectNameGeneratorTest.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/naming/DefaultObjectNameGeneratorTest.java b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/naming/DefaultObjectNameGeneratorTest.java
index dbd9dc3..29f1b41 100644
--- a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/naming/DefaultObjectNameGeneratorTest.java
+++ b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/naming/DefaultObjectNameGeneratorTest.java
@@ -18,44 +18,73 @@
  ****************************************************************/
 package org.apache.cayenne.dbsync.naming;
 
-import org.apache.cayenne.dbsync.naming.DefaultObjectNameGenerator;
+import org.apache.cayenne.dbsync.reverse.db.ExportedKey;
 import org.apache.cayenne.map.DbAttribute;
 import org.apache.cayenne.map.DbEntity;
 import org.apache.cayenne.map.DbRelationship;
-import org.apache.cayenne.dbsync.reverse.db.ExportedKey;
 import org.junit.Test;
 
 import static org.junit.Assert.assertEquals;
 
 public class DefaultObjectNameGeneratorTest {
 
+    private DefaultObjectNameGenerator generator = new DefaultObjectNameGenerator();
+
+
     @Test
-    public void testStrategy() throws Exception {
-        DefaultObjectNameGenerator strategy = new DefaultObjectNameGenerator();
-        
+    public void testDbRelationshipName_LowerCase_Underscores() {
+
+        ExportedKey key = new ExportedKey("artist", "artist_id", null,
+                "painting", "artist_id", null, (short) 1);
+        assertEquals("artist", generator.dbRelationshipName(key, false));
+        assertEquals("paintings", generator.dbRelationshipName(key, true));
+
+        key = new ExportedKey("person", "person_id", null,
+                "person", "mother_id", null, (short) 1);
+        assertEquals("mother", generator.dbRelationshipName(key, false));
+        assertEquals("people", generator.dbRelationshipName(key, true));
+
+        key = new ExportedKey("person", "person_id", null,
+                "address", "shipping_address_id", null, (short) 1);
+        assertEquals("shippingAddress", generator.dbRelationshipName(key, false));
+        assertEquals("addresses", generator.dbRelationshipName(key, true));
+    }
+
+    @Test
+    public void testDbRelationshipName_UpperCase_Underscores() {
+
         ExportedKey key = new ExportedKey("ARTIST", "ARTIST_ID", null,
                 "PAINTING", "ARTIST_ID", null, (short) 1);
-        assertEquals(strategy.dbRelationshipName(key, false), "artist");
-        assertEquals(strategy.dbRelationshipName(key, true), "paintings");
-        
+        assertEquals("artist", generator.dbRelationshipName(key, false));
+        assertEquals("paintings", generator.dbRelationshipName(key, true));
+
         key = new ExportedKey("PERSON", "PERSON_ID", null,
                 "PERSON", "MOTHER_ID", null, (short) 1);
-        assertEquals(strategy.dbRelationshipName(key, false), "mother");
-        assertEquals(strategy.dbRelationshipName(key, true), "people");
-        
+        assertEquals("mother", generator.dbRelationshipName(key, false));
+        assertEquals("people", generator.dbRelationshipName(key, true));
+
         key = new ExportedKey("PERSON", "PERSON_ID", null,
                 "ADDRESS", "SHIPPING_ADDRESS_ID", null, (short) 1);
-        assertEquals(strategy.dbRelationshipName(key, false), "shippingAddress");
-        assertEquals(strategy.dbRelationshipName(key, true), "addresses");
-        
-        assertEquals(strategy.objEntityName(new DbEntity("ARTIST")), "Artist");
-        assertEquals(strategy.objEntityName(new DbEntity("ARTIST_WORK")), "ArtistWork");
-        
-        assertEquals(strategy.objAttributeName(new DbAttribute("NAME")), "name");
-        assertEquals(strategy.objAttributeName(new DbAttribute("ARTIST_NAME")), "artistName");
-        
-        assertEquals(strategy.objRelationshipName(new DbRelationship("mother")), "mother");
-        assertEquals(strategy.objRelationshipName(new DbRelationship("persons")), "persons");
+        assertEquals("shippingAddress", generator.dbRelationshipName(key, false));
+        assertEquals("addresses", generator.dbRelationshipName(key, true));
+    }
+
+    @Test
+    public void testObjEntityName() {
+        assertEquals("Artist", generator.objEntityName(new DbEntity("ARTIST")));
+        assertEquals("ArtistWork", generator.objEntityName(new DbEntity("ARTIST_WORK")));
+    }
+
+    @Test
+    public void testObjAttributeName() {
+        assertEquals("name", generator.objAttributeName(new DbAttribute("NAME")));
+        assertEquals("artistName", generator.objAttributeName(new DbAttribute("ARTIST_NAME")));
+    }
+
+    @Test
+    public void testObjRelationshipName() {
+        assertEquals("mother", generator.objRelationshipName(new DbRelationship("mother")));
+        assertEquals("persons", generator.objRelationshipName(new DbRelationship("persons")));
     }
 
 }