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 <and...@objectstyle.com> Authored: Wed Nov 2 18:28:44 2016 +0300 Committer: Andrus Adamchik <and...@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"))); } }