This is an automated email from the ASF dual-hosted git repository. asf-gitbox-commits pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/cayenne.git
commit 0ef59bb2fefbe444e40c96ab3282c1af6b1418c6 Author: Andrus Adamchik <[email protected]> AuthorDate: Sun Jul 19 21:40:02 2026 +0200 ObjectNameGenerator cleanup moving "stemmer" into a subclass hierarchy... While composition is usually cleaner, here we are dealing with constyructor based instantiation and pre-existing inhgeritance... So minimizing generator optionality --- .../tools/utils/CustomObjectNameGenerator.java | 10 -- .../dbsync/merge/context/MergerContext.java | 5 +- ...Generator.java => BaseObjectNameGenerator.java} | 62 +++++------- .../cayenne/dbsync/naming/DbEntityNameStemmer.java | 29 ------ .../dbsync/naming/DefaultObjectNameGenerator.java | 104 +-------------------- .../cayenne/dbsync/naming/NoStemStemmer.java | 39 -------- .../dbsync/naming/PatternObjectNameGenerator.java | 26 ++++-- .../cayenne/dbsync/naming/PatternStemmer.java | 46 --------- .../reverse/dbimport/DbImportConfiguration.java | 21 ++--- .../cayenne/dbsync/merge/EntityMergeSupportIT.java | 11 +-- .../org/apache/cayenne/dbsync/merge/MergeCase.java | 5 +- .../naming/DefaultObjectNameGeneratorTest.java | 12 ++- .../naming/PatternObjectNameGeneratorTest.java | 56 +++++++++++ .../cayenne/dbsync/naming/PatternStemmerTest.java | 61 ------------ .../dbimport/DefaultDbImportActionTest.java | 15 +-- .../dbimport/ManyToManyCandidateEntityTest.java | 3 +- .../cayenne/dbsync/reverse/dbload/DbLoaderIT.java | 7 +- .../reverse/dbload/RelationshipsLoaderIT.java | 7 +- .../cayenne/stubs/CustomObjectNameGenerator.java | 24 +---- .../modeler/ui/action/CreateObjEntityAction.java | 9 +- .../modeler/ui/action/DbEntitySyncAction.java | 10 +- .../modeler/ui/action/ObjEntitySyncAction.java | 7 +- .../modeler/ui/dbmerge/MergerOptionsDialog.java | 26 ++---- .../modeler/ui/entitysync/EntitySyncDialog.java | 17 +--- 24 files changed, 159 insertions(+), 453 deletions(-) diff --git a/cayenne-ant/src/test/java/org/apache/cayenne/tools/utils/CustomObjectNameGenerator.java b/cayenne-ant/src/test/java/org/apache/cayenne/tools/utils/CustomObjectNameGenerator.java index cd9eafa22..2122f7d46 100644 --- a/cayenne-ant/src/test/java/org/apache/cayenne/tools/utils/CustomObjectNameGenerator.java +++ b/cayenne-ant/src/test/java/org/apache/cayenne/tools/utils/CustomObjectNameGenerator.java @@ -19,17 +19,7 @@ package org.apache.cayenne.tools.utils; -import org.apache.cayenne.dbsync.naming.DbEntityNameStemmer; import org.apache.cayenne.dbsync.naming.DefaultObjectNameGenerator; -import org.apache.cayenne.dbsync.naming.NoStemStemmer; public class CustomObjectNameGenerator extends DefaultObjectNameGenerator { - - public CustomObjectNameGenerator() { - super(NoStemStemmer.getInstance()); - } - - public CustomObjectNameGenerator(DbEntityNameStemmer dbEntityNameStemmer) { - super(dbEntityNameStemmer); - } } diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/context/MergerContext.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/context/MergerContext.java index 16472e58e..dcacbb921 100644 --- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/context/MergerContext.java +++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/context/MergerContext.java @@ -24,9 +24,8 @@ import org.apache.cayenne.dba.DbAdapter; import org.apache.cayenne.dbsync.filter.NameFilter; import org.apache.cayenne.dbsync.filter.NamePatternMatcher; import org.apache.cayenne.dbsync.merge.token.MergerToken; -import org.apache.cayenne.dbsync.naming.DefaultObjectNameGenerator; -import org.apache.cayenne.dbsync.naming.NoStemStemmer; import org.apache.cayenne.dbsync.naming.ObjectNameGenerator; +import org.apache.cayenne.dbsync.naming.DefaultObjectNameGenerator; import org.apache.cayenne.dbsync.reverse.dbload.DefaultModelMergeDelegate; import org.apache.cayenne.dbsync.reverse.dbload.ModelMergeDelegate; import org.apache.cayenne.map.DataMap; @@ -124,7 +123,7 @@ public class MergerContext { } if(context.nameGenerator == null) { - context.nameGenerator = new DefaultObjectNameGenerator(NoStemStemmer.getInstance()); + context.nameGenerator = new DefaultObjectNameGenerator(); } if(meaningfulPKsFilter == null) { 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/BaseObjectNameGenerator.java similarity index 67% copy from cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/naming/DefaultObjectNameGenerator.java copy to cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/naming/BaseObjectNameGenerator.java index f1da0a527..004188b27 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/BaseObjectNameGenerator.java @@ -25,19 +25,24 @@ import org.apache.cayenne.map.DbRelationship; import org.apache.cayenne.util.Util; import java.util.List; -import java.util.Objects; /** * The default strategy for converting DB-layer to Object-layer names. * - * @since 4.0 + * @since 5.0 */ -public class DefaultObjectNameGenerator implements ObjectNameGenerator { +public abstract class BaseObjectNameGenerator implements ObjectNameGenerator { - private final DbEntityNameStemmer dbEntityNameStemmer; + protected abstract String dbEntityBaseName(String dbEntityName); - public DefaultObjectNameGenerator(DbEntityNameStemmer dbEntityNameStemmer) { - this.dbEntityNameStemmer = dbEntityNameStemmer; + @Override + public String objEntityName(DbEntity dbEntity) { + return Util.underscoredToJava(dbEntityBaseName(dbEntity.getName()), true); + } + + @Override + public String objAttributeName(DbAttribute dbAttribute) { + return Util.underscoredToJava(dbAttribute.getName(), false); } @Override @@ -47,12 +52,9 @@ public class DefaultObjectNameGenerator implements ObjectNameGenerator { throw new IllegalArgumentException("At least one relationship is expected"); } - // ignore the name of DbRelationships themselves... - // generate the name based on join semantics... - DbRelationship first = relationshipChain[0]; DbRelationship last = relationshipChain[relationshipChain.length - 1]; - return relationshipName(first.getJoins(), last.getTargetEntityName(), isToMany(relationshipChain)); + return Util.underscoredToJava(relationshipBase(first.getJoins(), last.getTargetEntityName(), isToMany(relationshipChain)), false); } @Override @@ -63,15 +65,7 @@ public class DefaultObjectNameGenerator implements ObjectNameGenerator { } String targetEntityName = joins.getFirst().getRelationship().getTargetEntityName(); - return relationshipName(joins, targetEntityName, toMany); - } - - protected String relationshipName(List<DbJoin> joins, String targetEntityName, boolean toMany) { - String name = toMany - ? toManyRelationshipName(targetEntityName) - : toOneRelationshipName(joins, targetEntityName); - - return Util.underscoredToJava(name, false); + return Util.underscoredToJava(relationshipBase(joins, targetEntityName, toMany), false); } protected boolean isToMany(DbRelationship... relationshipChain) { @@ -85,21 +79,24 @@ public class DefaultObjectNameGenerator implements ObjectNameGenerator { return false; } - protected String stemmed(String dbEntityName) { - return dbEntityNameStemmer.stem(Objects.requireNonNull(dbEntityName)); + protected String relationshipBase(List<DbJoin> joins, String targetEntityName, boolean toMany) { + return toMany + ? toManyBase(targetEntityName) + : toOneBase(joins, targetEntityName); } - protected String toManyRelationshipName(String targetEntityName) { - String baseName = stemmed(targetEntityName); + protected String toManyBase(String targetEntityName) { + String baseName = dbEntityBaseName(targetEntityName); return EnglishInflector.pluralOf(baseName.toLowerCase()); } - protected String toOneRelationshipName(List<DbJoin> joins, String targetEntityName) { + + protected String toOneBase(List<DbJoin> joins, String targetEntityName) { if (joins.isEmpty()) { // In case, when uses EditRelationship button, relationship doesn't exist => it doesn't have joins // and just return targetName - return stemmed(targetEntityName); + return dbEntityBaseName(targetEntityName); } DbJoin join1 = joins.getFirst(); @@ -109,24 +106,13 @@ public class DefaultObjectNameGenerator implements ObjectNameGenerator { // return the name of the FK column sans ID String fkColName = join1.getSourceName(); if (fkColName == null) { - return stemmed(targetEntityName); + return dbEntityBaseName(targetEntityName); } 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 stemmed(targetEntityName); + return dbEntityBaseName(targetEntityName); } } - - @Override - public String objEntityName(DbEntity dbEntity) { - String baseName = stemmed(dbEntity.getName()); - return Util.underscoredToJava(baseName, true); - } - - @Override - public String objAttributeName(DbAttribute attr) { - return Util.underscoredToJava(attr.getName(), false); - } } diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/naming/DbEntityNameStemmer.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/naming/DbEntityNameStemmer.java deleted file mode 100644 index b83b9845b..000000000 --- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/naming/DbEntityNameStemmer.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.cayenne.dbsync.naming; - -/** - * An algorithm for "stemming" DbEntity names before they can be used for object name generation. - * - * @since 4.0 - */ -public interface DbEntityNameStemmer { - - String stem(String dbEntityName); -} 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 f1da0a527..9f0b0b5e0 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 @@ -18,13 +18,6 @@ ****************************************************************/ package org.apache.cayenne.dbsync.naming; -import org.apache.cayenne.map.DbAttribute; -import org.apache.cayenne.map.DbEntity; -import org.apache.cayenne.map.DbJoin; -import org.apache.cayenne.map.DbRelationship; -import org.apache.cayenne.util.Util; - -import java.util.List; import java.util.Objects; /** @@ -32,101 +25,10 @@ import java.util.Objects; * * @since 4.0 */ -public class DefaultObjectNameGenerator implements ObjectNameGenerator { - - private final DbEntityNameStemmer dbEntityNameStemmer; - - public DefaultObjectNameGenerator(DbEntityNameStemmer dbEntityNameStemmer) { - this.dbEntityNameStemmer = dbEntityNameStemmer; - } - - @Override - public String objRelationshipName(DbRelationship... relationshipChain) { - - if (relationshipChain == null || relationshipChain.length < 1) { - throw new IllegalArgumentException("At least one relationship is expected"); - } - - // ignore the name of DbRelationships themselves... - // generate the name based on join semantics... - - DbRelationship first = relationshipChain[0]; - DbRelationship last = relationshipChain[relationshipChain.length - 1]; - return relationshipName(first.getJoins(), last.getTargetEntityName(), isToMany(relationshipChain)); - } - - @Override - public String dbRelationshipName(List<DbJoin> joins, boolean toMany) { - - if (joins == null || joins.isEmpty()) { - throw new IllegalArgumentException("At least one join is expected"); - } - - String targetEntityName = joins.getFirst().getRelationship().getTargetEntityName(); - return relationshipName(joins, targetEntityName, toMany); - } - - protected String relationshipName(List<DbJoin> joins, String targetEntityName, boolean toMany) { - String name = toMany - ? toManyRelationshipName(targetEntityName) - : toOneRelationshipName(joins, targetEntityName); - - return Util.underscoredToJava(name, false); - } - - protected boolean isToMany(DbRelationship... relationshipChain) { - - for (DbRelationship r : relationshipChain) { - if (r.isToMany()) { - return true; - } - } - - return false; - } - - protected String stemmed(String dbEntityName) { - return dbEntityNameStemmer.stem(Objects.requireNonNull(dbEntityName)); - } - - protected String toManyRelationshipName(String targetEntityName) { - String baseName = stemmed(targetEntityName); - return EnglishInflector.pluralOf(baseName.toLowerCase()); - } - - protected String toOneRelationshipName(List<DbJoin> joins, String targetEntityName) { - - if (joins.isEmpty()) { - // In case, when uses EditRelationship button, relationship doesn't exist => it doesn't have joins - // and just return targetName - return stemmed(targetEntityName); - } - - DbJoin join1 = joins.getFirst(); - - // TODO: multi-join relationships - - // return the name of the FK column sans ID - String fkColName = join1.getSourceName(); - if (fkColName == null) { - return stemmed(targetEntityName); - } 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 stemmed(targetEntityName); - } - } - - @Override - public String objEntityName(DbEntity dbEntity) { - String baseName = stemmed(dbEntity.getName()); - return Util.underscoredToJava(baseName, true); - } +public class DefaultObjectNameGenerator extends BaseObjectNameGenerator { @Override - public String objAttributeName(DbAttribute attr) { - return Util.underscoredToJava(attr.getName(), false); + protected String dbEntityBaseName(String dbEntityName) { + return Objects.requireNonNull(dbEntityName); } } diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/naming/NoStemStemmer.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/naming/NoStemStemmer.java deleted file mode 100644 index cd7da86b9..000000000 --- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/naming/NoStemStemmer.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.cayenne.dbsync.naming; - -/** - * @since 4.0 - */ -public class NoStemStemmer implements DbEntityNameStemmer { - - private static final DbEntityNameStemmer INSTANCE = new NoStemStemmer(); - - public static DbEntityNameStemmer getInstance() { - return INSTANCE; - } - - private NoStemStemmer() { - } - - @Override - public String stem(String dbEntityName) { - return dbEntityName; - } -} diff --git a/cayenne-ant/src/test/java/org/apache/cayenne/tools/utils/CustomObjectNameGenerator.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/naming/PatternObjectNameGenerator.java similarity index 59% copy from cayenne-ant/src/test/java/org/apache/cayenne/tools/utils/CustomObjectNameGenerator.java copy to cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/naming/PatternObjectNameGenerator.java index cd9eafa22..ee666131d 100644 --- a/cayenne-ant/src/test/java/org/apache/cayenne/tools/utils/CustomObjectNameGenerator.java +++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/naming/PatternObjectNameGenerator.java @@ -16,20 +16,28 @@ * specific language governing permissions and limitations * under the License. ****************************************************************/ +package org.apache.cayenne.dbsync.naming; -package org.apache.cayenne.tools.utils; +import java.util.Objects; +import java.util.regex.Matcher; +import java.util.regex.Pattern; -import org.apache.cayenne.dbsync.naming.DbEntityNameStemmer; -import org.apache.cayenne.dbsync.naming.DefaultObjectNameGenerator; -import org.apache.cayenne.dbsync.naming.NoStemStemmer; +/** + * Pattern-based generator that strips of certain DB name pieces. + * + * @since 5.0 + */ +public class PatternObjectNameGenerator extends BaseObjectNameGenerator { -public class CustomObjectNameGenerator extends DefaultObjectNameGenerator { + private final Pattern pattern; - public CustomObjectNameGenerator() { - super(NoStemStemmer.getInstance()); + public PatternObjectNameGenerator(String stripPattern) { + this.pattern = Pattern.compile(stripPattern, Pattern.CASE_INSENSITIVE); } - public CustomObjectNameGenerator(DbEntityNameStemmer dbEntityNameStemmer) { - super(dbEntityNameStemmer); + @Override + protected String dbEntityBaseName(String dbEntityName) { + Matcher m = pattern.matcher(Objects.requireNonNull(dbEntityName)); + return m.replaceAll(""); } } diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/naming/PatternStemmer.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/naming/PatternStemmer.java deleted file mode 100644 index 66edf28e6..000000000 --- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/naming/PatternStemmer.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.cayenne.dbsync.naming; - -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -/** - * @since 4.0 - */ -public class PatternStemmer implements DbEntityNameStemmer { - - private final Pattern pattern; - - public PatternStemmer(String stripPattern, boolean caseSensitive) { - - int flags = 0; - if (!caseSensitive) { - flags = flags | Pattern.CASE_INSENSITIVE; - } - - this.pattern = Pattern.compile(stripPattern, flags); - } - - @Override - public String stem(String dbEntityName) { - Matcher m = pattern.matcher(dbEntityName); - return m.replaceAll(""); - } -} diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbimport/DbImportConfiguration.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbimport/DbImportConfiguration.java index 0827d8441..617cc6225 100644 --- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbimport/DbImportConfiguration.java +++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbimport/DbImportConfiguration.java @@ -18,20 +18,15 @@ ****************************************************************/ package org.apache.cayenne.dbsync.reverse.dbimport; -import java.io.File; -import java.util.regex.Pattern; - import org.apache.cayenne.CayenneRuntimeException; import org.apache.cayenne.configuration.DataNodeDescriptor; import org.apache.cayenne.configuration.DataSourceDescriptor; import org.apache.cayenne.dba.DbAdapter; import org.apache.cayenne.dbsync.filter.NameFilter; import org.apache.cayenne.dbsync.filter.NamePatternMatcher; -import org.apache.cayenne.dbsync.naming.DbEntityNameStemmer; import org.apache.cayenne.dbsync.naming.DefaultObjectNameGenerator; -import org.apache.cayenne.dbsync.naming.NoStemStemmer; import org.apache.cayenne.dbsync.naming.ObjectNameGenerator; -import org.apache.cayenne.dbsync.naming.PatternStemmer; +import org.apache.cayenne.dbsync.naming.PatternObjectNameGenerator; import org.apache.cayenne.dbsync.reverse.dbload.DbLoaderConfiguration; import org.apache.cayenne.dbsync.reverse.dbload.DbLoaderDelegate; import org.apache.cayenne.dbsync.reverse.dbload.DefaultDbLoaderDelegate; @@ -41,6 +36,9 @@ import org.apache.cayenne.dbsync.reverse.dbload.ModelMergeDelegate; import org.apache.cayenne.dbsync.reverse.filters.FiltersConfig; import org.slf4j.Logger; +import java.io.File; +import java.util.regex.Pattern; + /** * @since 4.0 */ @@ -149,6 +147,7 @@ public class DbImportConfiguration { /** * does nothing + * * @param usePrimitives not used */ @Deprecated(since = "5.0", forRemoval = true) @@ -204,13 +203,9 @@ public class DbImportConfiguration { } } - return new DefaultObjectNameGenerator(createStemmer()); - } - - protected DbEntityNameStemmer createStemmer() { - return (stripFromTableNames == null || stripFromTableNames.length() == 0) - ? NoStemStemmer.getInstance() - : new PatternStemmer(stripFromTableNames, false); + return stripFromTableNames == null || stripFromTableNames.isEmpty() + ? new DefaultObjectNameGenerator() + : new PatternObjectNameGenerator(stripFromTableNames); } public String getDriver() { diff --git a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/EntityMergeSupportIT.java b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/EntityMergeSupportIT.java index ddc8117bd..d88f2968c 100644 --- a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/EntityMergeSupportIT.java +++ b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/EntityMergeSupportIT.java @@ -21,23 +21,18 @@ package org.apache.cayenne.dbsync.merge; import org.apache.cayenne.dbsync.filter.NamePatternMatcher; import org.apache.cayenne.dbsync.merge.context.EntityMergeSupport; import org.apache.cayenne.dbsync.naming.DefaultObjectNameGenerator; -import org.apache.cayenne.dbsync.naming.NoStemStemmer; import org.apache.cayenne.map.DbAttribute; import org.apache.cayenne.map.DbEntity; import org.apache.cayenne.map.DbJoin; import org.apache.cayenne.map.DbRelationship; import org.apache.cayenne.map.DeleteRule; import org.apache.cayenne.map.ObjEntity; +import org.junit.jupiter.api.Test; import java.sql.Types; import java.util.Arrays; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertSame; -import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.*; public class EntityMergeSupportIT extends MergeCase { @@ -92,7 +87,7 @@ public class EntityMergeSupportIT extends MergeCase { map.addObjEntity(objEntity2); EntityMergeSupport entityMergeSupport = new EntityMergeSupport( - new DefaultObjectNameGenerator(NoStemStemmer.getInstance()), + new DefaultObjectNameGenerator(), NamePatternMatcher.EXCLUDE_ALL, true, false); diff --git a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/MergeCase.java b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/MergeCase.java index adcaf1037..cc06fa25b 100644 --- a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/MergeCase.java +++ b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/MergeCase.java @@ -30,7 +30,6 @@ import org.apache.cayenne.dbsync.merge.token.MergerToken; import org.apache.cayenne.dbsync.merge.token.db.AbstractToDbToken; import org.apache.cayenne.dbsync.merge.token.db.SetColumnTypeToDb; import org.apache.cayenne.dbsync.naming.DefaultObjectNameGenerator; -import org.apache.cayenne.dbsync.naming.NoStemStemmer; import org.apache.cayenne.dbsync.reverse.dbload.DbLoader; import org.apache.cayenne.dbsync.reverse.dbload.DbLoaderConfiguration; import org.apache.cayenne.dbsync.reverse.dbload.LoggingDbLoaderDelegate; @@ -42,9 +41,9 @@ import org.apache.cayenne.map.DbAttribute; import org.apache.cayenne.map.DbEntity; import org.apache.cayenne.map.EntityResolver; import org.apache.cayenne.runtime.CayenneRuntime; +import org.apache.cayenne.unit.CayenneProjects; import org.apache.cayenne.unit.CayenneTestsEnv; import org.apache.cayenne.unit.dba.TestDbAdapter; -import org.apache.cayenne.unit.CayenneProjects; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.extension.RegisterExtension; import org.slf4j.Logger; @@ -120,7 +119,7 @@ public abstract class MergeCase { dbImport = new DbLoader(node.getAdapter(), conn, loaderConfiguration, new LoggingDbLoaderDelegate(LoggerFactory.getLogger(DbLoader.class)), - new DefaultObjectNameGenerator(NoStemStemmer.getInstance())) + new DefaultObjectNameGenerator()) .load(); } catch (SQLException e) { 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 ba680ab21..34877dc7a 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 @@ -28,10 +28,14 @@ import static org.junit.jupiter.api.Assertions.assertEquals; public class DefaultObjectNameGeneratorTest { - private DefaultObjectNameGenerator generator = new DefaultObjectNameGenerator(NoStemStemmer.getInstance()); - - private DbRelationship makeRelationship(String srcEntity, String srcKey, String targetEntity, String targetKey, - boolean toMany) { + private final DefaultObjectNameGenerator generator = new DefaultObjectNameGenerator(); + + private DbRelationship makeRelationship( + String srcEntity, + String srcKey, + String targetEntity, + String targetKey, + boolean toMany) { DbRelationship relationship = new DbRelationship(); relationship.addJoin(new DbJoin(relationship, srcKey, targetKey)); diff --git a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/naming/PatternObjectNameGeneratorTest.java b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/naming/PatternObjectNameGeneratorTest.java new file mode 100644 index 000000000..8139091f2 --- /dev/null +++ b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/naming/PatternObjectNameGeneratorTest.java @@ -0,0 +1,56 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.cayenne.dbsync.naming; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class PatternObjectNameGeneratorTest { + + + @Test + public void dbEntityBaseName_NoMatch() { + assertEquals("xyzabc", new PatternObjectNameGenerator("^pre").dbEntityBaseName("xyzabc")); + } + + @Test + public void dbEntityBaseName() { + assertEquals("lowercase", new PatternObjectNameGenerator("^pre").dbEntityBaseName("prelowercase")); + assertEquals("UPPERCASE", new PatternObjectNameGenerator("^pre").dbEntityBaseName("PREUPPERCASE")); + } + + @Test + public void stripHead() { + assertEquals("name", new PatternObjectNameGenerator("^strip_").dbEntityBaseName("strip_name")); + assertEquals("strip_name", new PatternObjectNameGenerator("^strip_").dbEntityBaseName("strip_strip_name")); + } + + @Test + public void stripTail() { + assertEquals("name", new PatternObjectNameGenerator("_strip$").dbEntityBaseName("name_strip")); + assertEquals("name_strip", new PatternObjectNameGenerator("_strip$").dbEntityBaseName("name_strip_strip")); + } + + @Test + public void stripiddle() { + assertEquals("start_end", new PatternObjectNameGenerator("_strip").dbEntityBaseName("start_strip_end")); + assertEquals("start_end", new PatternObjectNameGenerator("_strip").dbEntityBaseName("start_strip_strip_end")); + } +} diff --git a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/naming/PatternStemmerTest.java b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/naming/PatternStemmerTest.java deleted file mode 100644 index c61b11568..000000000 --- a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/naming/PatternStemmerTest.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.cayenne.dbsync.naming; - -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -public class PatternStemmerTest { - - @Test - public void stemNoMatch() { - assertEquals("xyzabc", new PatternStemmer("^pre", false).stem("xyzabc")); - } - - @Test - public void stemCaseSensitive() { - assertEquals("PREUPPERCASE", new PatternStemmer("^pre", true).stem("PREUPPERCASE")); - assertEquals("UPPERCASE", new PatternStemmer("^pre", true).stem("preUPPERCASE")); - } - - @Test - public void stemCaseInsensitive() { - assertEquals("lowercase", new PatternStemmer("^pre", false).stem("prelowercase")); - assertEquals("UPPERCASE", new PatternStemmer("^pre", false).stem("PREUPPERCASE")); - } - - @Test - public void stemHead() { - assertEquals("name", new PatternStemmer("^strip_", false).stem("strip_name")); - assertEquals("strip_name", new PatternStemmer("^strip_", false).stem("strip_strip_name")); - } - - @Test - public void stemTail() { - assertEquals("name", new PatternStemmer("_strip$", false).stem("name_strip")); - assertEquals("name_strip", new PatternStemmer("_strip$", false).stem("name_strip_strip")); - } - - @Test - public void stemMiddle() { - assertEquals("start_end", new PatternStemmer("_strip", false).stem("start_strip_end")); - assertEquals("start_end", new PatternStemmer("_strip", false).stem("start_strip_strip_end")); - } -} diff --git a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbimport/DefaultDbImportActionTest.java b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbimport/DefaultDbImportActionTest.java index c5bebb86f..3d940f3a1 100644 --- a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbimport/DefaultDbImportActionTest.java +++ b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbimport/DefaultDbImportActionTest.java @@ -34,9 +34,8 @@ import org.apache.cayenne.dbsync.merge.token.db.CreateTableToDb; import org.apache.cayenne.dbsync.merge.token.model.AddColumnToModel; import org.apache.cayenne.dbsync.merge.token.model.AddRelationshipToModel; import org.apache.cayenne.dbsync.merge.token.model.CreateTableToModel; -import org.apache.cayenne.dbsync.naming.DefaultObjectNameGenerator; -import org.apache.cayenne.dbsync.naming.NoStemStemmer; import org.apache.cayenne.dbsync.naming.ObjectNameGenerator; +import org.apache.cayenne.dbsync.naming.DefaultObjectNameGenerator; import org.apache.cayenne.dbsync.reverse.configuration.ToolsModule; import org.apache.cayenne.dbsync.reverse.dbload.DbLoader; import org.apache.cayenne.dbsync.reverse.dbload.DbLoaderConfiguration; @@ -51,9 +50,9 @@ import org.apache.cayenne.project.Project; import org.apache.cayenne.resource.Resource; import org.apache.cayenne.resource.URLResource; import org.apache.cayenne.util.Util; -import org.slf4j.Logger; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.slf4j.Logger; import javax.sql.DataSource; import java.io.File; @@ -67,12 +66,8 @@ import java.util.LinkedList; import java.util.List; import static java.util.Arrays.asList; -import static org.apache.cayenne.dbsync.merge.builders.ObjectMother.dbAttr; -import static org.apache.cayenne.dbsync.merge.builders.ObjectMother.dbEntity; -import static org.apache.cayenne.dbsync.merge.builders.ObjectMother.objAttr; -import static org.apache.cayenne.dbsync.merge.builders.ObjectMother.objEntity; +import static org.apache.cayenne.dbsync.merge.builders.ObjectMother.*; import static org.junit.jupiter.api.Assertions.*; -import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.*; @@ -110,7 +105,7 @@ public class DefaultDbImportActionTest { when(config.createMergeDelegate()).thenReturn(new DefaultModelMergeDelegate()); when(config.getDbLoaderConfig()).thenReturn(new DbLoaderConfiguration()); when(config.getTargetDataMap()).thenReturn(new File("xyz.map.xml")); - when(config.createNameGenerator()).thenReturn(new DefaultObjectNameGenerator(NoStemStemmer.getInstance())); + when(config.createNameGenerator()).thenReturn(new DefaultObjectNameGenerator()); when(config.createMeaningfulPKFilter()).thenReturn(NamePatternMatcher.EXCLUDE_ALL); DbLoader dbLoader = new DbLoader(mockAdapter, mockConnection, config.getDbLoaderConfig(), mockDelegate, mockNameGenerator) { @@ -146,7 +141,7 @@ public class DefaultDbImportActionTest { when(config.getTargetDataMap()).thenReturn(FILE_STUB); when(config.createMergeDelegate()).thenReturn(new DefaultModelMergeDelegate()); when(config.getDbLoaderConfig()).thenReturn(new DbLoaderConfiguration()); - when(config.createNameGenerator()).thenReturn(new DefaultObjectNameGenerator(NoStemStemmer.getInstance())); + when(config.createNameGenerator()).thenReturn(new DefaultObjectNameGenerator()); when(config.createMeaningfulPKFilter()).thenReturn(NamePatternMatcher.EXCLUDE_ALL); DbLoader dbLoader = new DbLoader(mockAdapter, mockConnection, config.getDbLoaderConfig(), mockDelegate, mockNameGenerator) { diff --git a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbimport/ManyToManyCandidateEntityTest.java b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbimport/ManyToManyCandidateEntityTest.java index eccc3a378..0d45ac0a6 100644 --- a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbimport/ManyToManyCandidateEntityTest.java +++ b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbimport/ManyToManyCandidateEntityTest.java @@ -32,7 +32,6 @@ import org.apache.cayenne.configuration.xml.XMLDataChannelDescriptorLoader; import org.apache.cayenne.configuration.xml.XMLDataMapLoader; import org.apache.cayenne.configuration.xml.XMLReaderProvider; import org.apache.cayenne.dbsync.naming.DefaultObjectNameGenerator; -import org.apache.cayenne.dbsync.naming.NoStemStemmer; import org.apache.cayenne.di.AdhocObjectFactory; import org.apache.cayenne.di.ClassLoaderManager; import org.apache.cayenne.di.DIBootstrap; @@ -101,7 +100,7 @@ public class ManyToManyCandidateEntityTest { ObjEntity manyToManyEntity = map.getObjEntity("Table1Table2"); ManyToManyCandidateEntity.build(manyToManyEntity) - .optimizeRelationships(new DefaultObjectNameGenerator(NoStemStemmer.getInstance())); + .optimizeRelationships(new DefaultObjectNameGenerator()); ObjEntity table1Entity = map.getObjEntity("Table1"); ObjEntity table2Entity = map.getObjEntity("Table2"); diff --git a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbload/DbLoaderIT.java b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbload/DbLoaderIT.java index 9e9cbe350..d73c0fb5b 100644 --- a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbload/DbLoaderIT.java +++ b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbload/DbLoaderIT.java @@ -21,7 +21,6 @@ package org.apache.cayenne.dbsync.reverse.dbload; import org.apache.cayenne.dba.DbAdapter; import org.apache.cayenne.dbsync.naming.DefaultObjectNameGenerator; -import org.apache.cayenne.dbsync.naming.NoStemStemmer; import org.apache.cayenne.dbsync.reverse.dbimport.ExcludeColumn; import org.apache.cayenne.dbsync.reverse.dbimport.IncludeTable; import org.apache.cayenne.dbsync.reverse.dbimport.ReverseEngineering; @@ -31,8 +30,8 @@ import org.apache.cayenne.map.DataMap; import org.apache.cayenne.map.DbAttribute; import org.apache.cayenne.map.DbEntity; import org.apache.cayenne.map.DbRelationship; -import org.apache.cayenne.unit.CayenneTestsEnv; import org.apache.cayenne.unit.CayenneProjects; +import org.apache.cayenne.unit.CayenneTestsEnv; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -142,11 +141,11 @@ public class DbLoaderIT { } private DbLoader createDbLoader() { - return new DbLoader(adapter, connection, CONFIG, null, new DefaultObjectNameGenerator(NoStemStemmer.getInstance())); + return new DbLoader(adapter, connection, CONFIG, null, new DefaultObjectNameGenerator()); } private DbLoader createDbLoader(DbLoaderConfiguration configuration) { - return new DbLoader(adapter, connection, configuration, null, new DefaultObjectNameGenerator(NoStemStemmer.getInstance())); + return new DbLoader(adapter, connection, configuration, null, new DefaultObjectNameGenerator()); } @AfterEach diff --git a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbload/RelationshipsLoaderIT.java b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbload/RelationshipsLoaderIT.java index a46c34964..445b525c0 100644 --- a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbload/RelationshipsLoaderIT.java +++ b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbload/RelationshipsLoaderIT.java @@ -20,7 +20,6 @@ package org.apache.cayenne.dbsync.reverse.dbload; import org.apache.cayenne.dbsync.naming.DefaultObjectNameGenerator; -import org.apache.cayenne.dbsync.naming.NoStemStemmer; import org.apache.cayenne.map.DbEntity; import org.apache.cayenne.map.DbRelationship; import org.junit.jupiter.api.Test; @@ -56,7 +55,7 @@ public class RelationshipsLoaderIT extends BaseLoaderIT { exportedKeyLoader.load(metaData, store); // *** TESTING THIS *** - RelationshipLoader relationshipLoader = new RelationshipLoader(EMPTY_CONFIG, delegate, new DefaultObjectNameGenerator(NoStemStemmer.getInstance())); + RelationshipLoader relationshipLoader = new RelationshipLoader(EMPTY_CONFIG, delegate, new DefaultObjectNameGenerator()); relationshipLoader.load(metaData, store); Collection<DbRelationship> rels = getDbEntity("ARTIST").getRelationships(); @@ -95,7 +94,7 @@ public class RelationshipsLoaderIT extends BaseLoaderIT { new PrimaryKeyLoader(EMPTY_CONFIG, delegate).load(metaData, store); new ExportedKeyLoader(EMPTY_CONFIG, delegate).load(metaData, store); - new RelationshipLoader(EMPTY_CONFIG, delegate, new DefaultObjectNameGenerator(NoStemStemmer.getInstance())).load(metaData, store); + new RelationshipLoader(EMPTY_CONFIG, delegate, new DefaultObjectNameGenerator()).load(metaData, store); // COMPOUND_FK_TEST has a 2-column FK (F_KEY1, F_KEY2) -> COMPOUND_PK_TEST (KEY1, KEY2) DbEntity fkEntity = getDbEntity("COMPOUND_FK_TEST"); @@ -132,7 +131,7 @@ public class RelationshipsLoaderIT extends BaseLoaderIT { new PrimaryKeyLoader(EMPTY_CONFIG, delegate).load(metaData, store); new ExportedKeyLoader(EMPTY_CONFIG, delegate).load(metaData, store); - new RelationshipLoader(EMPTY_CONFIG, delegate, new DefaultObjectNameGenerator(NoStemStemmer.getInstance())).load(metaData, store); + new RelationshipLoader(EMPTY_CONFIG, delegate, new DefaultObjectNameGenerator()).load(metaData, store); // TWO_FK_B has two separate single-column FKs (A_ID1, A_ID2) -> TWO_FK_A (ID) DbEntity bEntity = getDbEntity("TWO_FK_B"); diff --git a/cayenne-maven-plugin/src/test/java/org/apache/cayenne/stubs/CustomObjectNameGenerator.java b/cayenne-maven-plugin/src/test/java/org/apache/cayenne/stubs/CustomObjectNameGenerator.java index bea713b69..c22c2f3ac 100644 --- a/cayenne-maven-plugin/src/test/java/org/apache/cayenne/stubs/CustomObjectNameGenerator.java +++ b/cayenne-maven-plugin/src/test/java/org/apache/cayenne/stubs/CustomObjectNameGenerator.java @@ -19,11 +19,6 @@ package org.apache.cayenne.stubs; -import java.util.List; -import java.util.Objects; - -import org.apache.cayenne.dbsync.naming.DbEntityNameStemmer; -import org.apache.cayenne.dbsync.naming.NoStemStemmer; import org.apache.cayenne.dbsync.naming.ObjectNameGenerator; import org.apache.cayenne.map.DbAttribute; import org.apache.cayenne.map.DbEntity; @@ -31,17 +26,9 @@ import org.apache.cayenne.map.DbJoin; import org.apache.cayenne.map.DbRelationship; import org.apache.cayenne.util.Util; -public class CustomObjectNameGenerator implements ObjectNameGenerator { - - private DbEntityNameStemmer dbEntityNameStemmer; - - public CustomObjectNameGenerator() { - this.dbEntityNameStemmer = NoStemStemmer.getInstance(); - } +import java.util.List; - public CustomObjectNameGenerator(DbEntityNameStemmer dbEntityNameStemmer) { - this.dbEntityNameStemmer = dbEntityNameStemmer; - } +public class CustomObjectNameGenerator implements ObjectNameGenerator { @Override public String objRelationshipName(DbRelationship... relationshipChain) { @@ -53,14 +40,9 @@ public class CustomObjectNameGenerator implements ObjectNameGenerator { return null; } - protected String stemmed(String dbEntityName) { - return dbEntityNameStemmer.stem(Objects.requireNonNull(dbEntityName)); - } - @Override public String objEntityName(DbEntity dbEntity) { - String baseName = stemmed(dbEntity.getName()); - return "Custom" + Util.underscoredToJava(baseName, true); + return "Custom" + Util.underscoredToJava(dbEntity.getName(), true); } @Override diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/action/CreateObjEntityAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/action/CreateObjEntityAction.java index 8c61b0b8b..0f0d10558 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/action/CreateObjEntityAction.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/action/CreateObjEntityAction.java @@ -22,9 +22,8 @@ import org.apache.cayenne.configuration.ConfigurationNode; import org.apache.cayenne.configuration.DataChannelDescriptor; import org.apache.cayenne.dbsync.filter.NamePatternMatcher; import org.apache.cayenne.dbsync.merge.context.EntityMergeSupport; -import org.apache.cayenne.dbsync.naming.DefaultObjectNameGenerator; import org.apache.cayenne.dbsync.naming.NameBuilder; -import org.apache.cayenne.dbsync.naming.NoStemStemmer; +import org.apache.cayenne.dbsync.naming.DefaultObjectNameGenerator; import org.apache.cayenne.map.DataMap; import org.apache.cayenne.map.DbEntity; import org.apache.cayenne.map.ObjEntity; @@ -87,7 +86,7 @@ public class CreateObjEntityAction extends AppAction { entity.setDbEntity(dbEntity); // TODO: use injectable name generator - String baseName = new DefaultObjectNameGenerator(NoStemStemmer.getInstance()).objEntityName(dbEntity); + String baseName = new DefaultObjectNameGenerator().objEntityName(dbEntity); entity.setName(NameBuilder .of(entity, dbEntity.getDataMap()) .preferredName(baseName) @@ -99,9 +98,9 @@ public class CreateObjEntityAction extends AppAction { dataMap.addObjEntity(entity); // TODO: Modeler-controlled defaults for all the hardcoded boolean flags here. - EntityMergeSupport merger = new EntityMergeSupport(new DefaultObjectNameGenerator(NoStemStemmer.getInstance()), + EntityMergeSupport merger = new EntityMergeSupport(new DefaultObjectNameGenerator(), NamePatternMatcher.EXCLUDE_ALL, true, false); - merger.setNameGenerator(new DbEntitySyncAction.PreserveRelationshipNameGenerator(NoStemStemmer.getInstance())); + merger.setNameGenerator(new DbEntitySyncAction.PreserveRelationshipNameGenerator()); merger.addEntityMergeListener(DeleteRuleUpdater.getEntityMergeListener()); merger.synchronizeWithDbEntity(entity); diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/action/DbEntitySyncAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/action/DbEntitySyncAction.java index fb8afcc91..30d81d15d 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/action/DbEntitySyncAction.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/action/DbEntitySyncAction.java @@ -21,15 +21,13 @@ package org.apache.cayenne.modeler.ui.action; import org.apache.cayenne.configuration.DataChannelDescriptor; import org.apache.cayenne.dbsync.merge.context.EntityMergeSupport; -import org.apache.cayenne.dbsync.naming.DbEntityNameStemmer; import org.apache.cayenne.dbsync.naming.DefaultObjectNameGenerator; -import org.apache.cayenne.dbsync.naming.NoStemStemmer; import org.apache.cayenne.map.DbAttribute; import org.apache.cayenne.map.DbEntity; import org.apache.cayenne.map.DbRelationship; import org.apache.cayenne.map.ObjEntity; -import org.apache.cayenne.modeler.event.model.ObjEntityEvent; import org.apache.cayenne.modeler.Application; +import org.apache.cayenne.modeler.event.model.ObjEntityEvent; import org.apache.cayenne.modeler.project.ProjectSession; import org.apache.cayenne.modeler.toolkit.AppAction; import org.apache.cayenne.modeler.ui.entitysync.EntitySyncDialog; @@ -81,7 +79,7 @@ public class DbEntitySyncAction extends AppAction { return; } - merger.setNameGenerator(new PreserveRelationshipNameGenerator(NoStemStemmer.getInstance())); + merger.setNameGenerator(new PreserveRelationshipNameGenerator()); DbEntitySyncUndoableEdit undoableEdit = new DbEntitySyncUndoableEdit(session, (DataChannelDescriptor) session.project().getRootNode(), session.getSelectedDataMap()); @@ -129,10 +127,6 @@ public class DbEntitySyncAction extends AppAction { static class PreserveRelationshipNameGenerator extends DefaultObjectNameGenerator { - public PreserveRelationshipNameGenerator(DbEntityNameStemmer dbEntityNameStemmer) { - super(dbEntityNameStemmer); - } - @Override public String objRelationshipName(DbRelationship... relationshipChain) { if (relationshipChain.length == 0) { diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/action/ObjEntitySyncAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/action/ObjEntitySyncAction.java index 2c2c025fe..a96833b3e 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/action/ObjEntitySyncAction.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/action/ObjEntitySyncAction.java @@ -21,14 +21,13 @@ package org.apache.cayenne.modeler.ui.action; import org.apache.cayenne.configuration.DataChannelDescriptor; import org.apache.cayenne.dbsync.merge.context.EntityMergeSupport; -import org.apache.cayenne.dbsync.naming.NoStemStemmer; import org.apache.cayenne.map.ObjEntity; -import org.apache.cayenne.modeler.event.model.ObjEntityEvent; import org.apache.cayenne.modeler.Application; +import org.apache.cayenne.modeler.event.display.ObjEntityDisplayEvent; +import org.apache.cayenne.modeler.event.model.ObjEntityEvent; import org.apache.cayenne.modeler.project.ProjectSession; import org.apache.cayenne.modeler.toolkit.AppAction; import org.apache.cayenne.modeler.ui.entitysync.EntitySyncDialog; -import org.apache.cayenne.modeler.event.display.ObjEntityDisplayEvent; import javax.swing.*; import java.awt.*; @@ -79,7 +78,7 @@ public class ObjEntitySyncAction extends AppAction { return; } - merger.setNameGenerator(new DbEntitySyncAction.PreserveRelationshipNameGenerator(NoStemStemmer.getInstance())); + merger.setNameGenerator(new DbEntitySyncAction.PreserveRelationshipNameGenerator()); if (merger.synchronizeWithDbEntity(entity)) { session diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/dbmerge/MergerOptionsDialog.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/dbmerge/MergerOptionsDialog.java index 03ca46d78..440919837 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/dbmerge/MergerOptionsDialog.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/dbmerge/MergerOptionsDialog.java @@ -33,7 +33,6 @@ import org.apache.cayenne.dbsync.merge.factory.MergerTokenFactoryProvider; import org.apache.cayenne.dbsync.merge.token.MergerToken; import org.apache.cayenne.dbsync.merge.token.db.AbstractToDbToken; import org.apache.cayenne.dbsync.naming.DefaultObjectNameGenerator; -import org.apache.cayenne.dbsync.naming.NoStemStemmer; import org.apache.cayenne.dbsync.reverse.dbimport.DefaultDbImportAction; import org.apache.cayenne.dbsync.reverse.dbload.DbLoader; import org.apache.cayenne.dbsync.reverse.dbload.DbLoaderConfiguration; @@ -46,33 +45,22 @@ import org.apache.cayenne.dbsync.reverse.filters.PatternFilter; import org.apache.cayenne.dbsync.reverse.filters.TableFilter; import org.apache.cayenne.map.DataMap; import org.apache.cayenne.map.ObjEntity; -import org.apache.cayenne.modeler.pref.adapters.FileChooserPrefs; -import org.apache.cayenne.modeler.pref.dbconnector.DBConnector; import org.apache.cayenne.modeler.dbconnector.DBConnectorFactory; import org.apache.cayenne.modeler.event.model.DataMapEvent; +import org.apache.cayenne.modeler.pref.adapters.FileChooserPrefs; +import org.apache.cayenne.modeler.pref.dbconnector.DBConnector; +import org.apache.cayenne.modeler.project.ProjectSession; +import org.apache.cayenne.modeler.toolkit.ProjectDialog; import org.apache.cayenne.modeler.toolkit.border.TopBorder; import org.apache.cayenne.modeler.toolkit.text.CMTextArea; -import org.apache.cayenne.modeler.toolkit.ProjectDialog; -import org.apache.cayenne.modeler.project.ProjectSession; import org.apache.cayenne.modeler.ui.validation.ValidationDialog; import org.apache.cayenne.project.Project; import org.apache.cayenne.validation.ValidationResult; import org.slf4j.LoggerFactory; import javax.sql.DataSource; -import javax.swing.Box; -import javax.swing.JButton; -import javax.swing.JOptionPane; -import javax.swing.JPanel; -import javax.swing.JScrollPane; -import javax.swing.JTabbedPane; -import javax.swing.ScrollPaneConstants; -import javax.swing.SwingConstants; -import java.awt.BorderLayout; -import java.awt.Container; -import java.awt.Dimension; -import java.awt.FlowLayout; -import java.awt.Window; +import javax.swing.*; +import java.awt.*; import java.io.File; import java.io.FileWriter; import java.io.IOException; @@ -215,7 +203,7 @@ public class MergerOptionsDialog extends ProjectDialog { dbImport = new DbLoader(adapter, conn, config, new LoggingDbLoaderDelegate(LoggerFactory.getLogger(DbLoader.class)), - new DefaultObjectNameGenerator(NoStemStemmer.getInstance())) + new DefaultObjectNameGenerator()) .load(); } catch (SQLException e) { throw new CayenneRuntimeException("Can't doLoad dataMap from db.", e); diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/entitysync/EntitySyncDialog.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/entitysync/EntitySyncDialog.java index 7df14e555..c0f4eb942 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/entitysync/EntitySyncDialog.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/entitysync/EntitySyncDialog.java @@ -24,23 +24,16 @@ import com.jgoodies.forms.layout.CellConstraints; import com.jgoodies.forms.layout.FormLayout; import org.apache.cayenne.dbsync.filter.NamePatternMatcher; import org.apache.cayenne.dbsync.merge.context.EntityMergeSupport; -import org.apache.cayenne.dbsync.naming.DefaultObjectNameGenerator; -import org.apache.cayenne.dbsync.naming.NoStemStemmer; import org.apache.cayenne.dbsync.naming.ObjectNameGenerator; +import org.apache.cayenne.dbsync.naming.DefaultObjectNameGenerator; import org.apache.cayenne.map.DbEntity; import org.apache.cayenne.map.ObjEntity; import org.apache.cayenne.modeler.Application; -import org.apache.cayenne.modeler.toolkit.AppDialog; import org.apache.cayenne.modeler.NameGeneratorPreferences; +import org.apache.cayenne.modeler.toolkit.AppDialog; -import javax.swing.JButton; -import javax.swing.JCheckBox; -import javax.swing.JLabel; -import javax.swing.JPanel; -import java.awt.BorderLayout; -import java.awt.Container; -import java.awt.FlowLayout; -import java.awt.Window; +import javax.swing.*; +import java.awt.*; import java.util.Collection; import java.util.Collections; @@ -97,7 +90,7 @@ public class EntitySyncDialog extends AppDialog { try { namingStrategy = NameGeneratorPreferences.getInstance().createNamingStrategy(app); } catch (Throwable e) { - namingStrategy = new DefaultObjectNameGenerator(NoStemStemmer.getInstance()); + namingStrategy = new DefaultObjectNameGenerator(); } // TODO: Modeler-controlled defaults for all the hardcoded boolean flags here.
