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")));
}
}