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/08 10:47:46 UTC
[1/2] cayenne git commit: CAY-2130 Stripping common name prefixes on
reverse engineering
Repository: cayenne
Updated Branches:
refs/heads/master 3c79d4ad8 -> 88613547f
CAY-2130 Stripping common name prefixes on reverse engineering
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/f3a4a582
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/f3a4a582
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/f3a4a582
Branch: refs/heads/master
Commit: f3a4a58256cf619e5aa4b5538a688f4c1c185215
Parents: 3c79d4a
Author: Andrus Adamchik <an...@objectstyle.com>
Authored: Tue Nov 8 11:37:00 2016 +0300
Committer: Andrus Adamchik <an...@objectstyle.com>
Committed: Tue Nov 8 12:02:16 2016 +0300
----------------------------------------------------------------------
.../cayenne/dbsync/merge/MergerContext.java | 3 +-
.../dbsync/naming/DbEntityNameStemmer.java | 29 +++++++++++++++
.../naming/DefaultObjectNameGenerator.java | 26 +++++++++----
.../cayenne/dbsync/naming/NoStemStemmer.java | 39 ++++++++++++++++++++
.../cayenne/dbsync/naming/PatternStemmer.java | 38 +++++++++++++++++++
.../dbsync/merge/EntityMergeSupportIT.java | 4 +-
.../apache/cayenne/dbsync/merge/MergeCase.java | 3 +-
.../naming/DefaultObjectNameGeneratorTest.java | 3 +-
.../cayenne/dbsync/reverse/db/DbLoaderIT.java | 3 +-
.../apache/cayenne/tools/DbImporterTask.java | 7 ++++
.../tools/dbimport/DbImportConfiguration.java | 29 ++++++++++++---
.../tools/dbimport/DefaultDbImportAction.java | 22 ++++++++---
.../dbimport/DefaultDbImportActionTest.java | 11 ++++--
.../dbimport/ManyToManyCandidateEntityTest.java | 4 +-
.../modeler/action/CreateObjEntityAction.java | 6 ++-
.../modeler/dialog/db/DbLoaderHelper.java | 2 +-
.../modeler/dialog/db/MergerOptions.java | 3 +-
.../dialog/db/ModelerDbImportAction.java | 11 ++++--
.../modeler/util/NameGeneratorPreferences.java | 3 +-
.../apache/cayenne/tools/DbImporterMojo.java | 8 ++++
20 files changed, 217 insertions(+), 37 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/f3a4a582/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/MergerContext.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/MergerContext.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/MergerContext.java
index b5b6a2a..c69252a 100644
--- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/MergerContext.java
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/MergerContext.java
@@ -23,6 +23,7 @@ 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.DefaultObjectNameGenerator;
+import org.apache.cayenne.dbsync.naming.NoStemStemmer;
import org.apache.cayenne.dbsync.naming.ObjectNameGenerator;
import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.validation.ValidationResult;
@@ -119,7 +120,7 @@ public class MergerContext {
}
if(context.nameGenerator == null) {
- context.nameGenerator = new DefaultObjectNameGenerator();
+ context.nameGenerator = new DefaultObjectNameGenerator(NoStemStemmer.getInstance());
}
if(meaningfulPKsFilter == null) {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/f3a4a582/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/naming/DbEntityNameStemmer.java
----------------------------------------------------------------------
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
new file mode 100644
index 0000000..8c1c4e7
--- /dev/null
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/naming/DbEntityNameStemmer.java
@@ -0,0 +1,29 @@
+/*
+ * 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
+ *
+ * http://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);
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/f3a4a582/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 5f98252..ecfebc3 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
@@ -36,6 +36,11 @@ import java.util.Objects;
*/
public class DefaultObjectNameGenerator implements ObjectNameGenerator {
+ private DbEntityNameStemmer dbEntityNameStemmer;
+
+ public DefaultObjectNameGenerator(DbEntityNameStemmer dbEntityNameStemmer) {
+ this.dbEntityNameStemmer = dbEntityNameStemmer;
+ }
@Override
public String relationshipName(DbRelationship... relationshipChain) {
@@ -56,8 +61,8 @@ public class DefaultObjectNameGenerator implements ObjectNameGenerator {
protected boolean isToMany(DbRelationship... relationshipChain) {
- for(DbRelationship r : relationshipChain) {
- if(r.isToMany()) {
+ for (DbRelationship r : relationshipChain) {
+ if (r.isToMany()) {
return true;
}
}
@@ -65,19 +70,25 @@ public class DefaultObjectNameGenerator implements ObjectNameGenerator {
return false;
}
+ protected String stemmed(String dbEntityName) {
+ return dbEntityNameStemmer.stem(Objects.requireNonNull(dbEntityName));
+ }
+
protected String toManyRelationshipName(DbRelationship... relationshipChain) {
DbRelationship last = relationshipChain[relationshipChain.length - 1];
+ String baseName = stemmed(last.getTargetEntityName());
+
try {
// by default we use English rules here...
- return Noun.pluralOf(last.getTargetEntityName().toLowerCase(), Locale.ENGLISH);
+ return Noun.pluralOf(baseName.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 last.getTargetEntityName();
+ return baseName;
}
}
@@ -98,19 +109,20 @@ public class DefaultObjectNameGenerator implements ObjectNameGenerator {
// return the name of the FK column sans ID
String fkColName = join1.getSourceName();
if (fkColName == null) {
- return Objects.requireNonNull(last.getTargetEntityName());
+ return stemmed(last.getTargetEntityName());
} 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 Objects.requireNonNull(last.getTargetEntityName());
+ return stemmed(last.getTargetEntityName());
}
}
@Override
public String objEntityName(DbEntity dbEntity) {
- return Util.underscoredToJava(dbEntity.getName(), true);
+ String baseName = stemmed(dbEntity.getName());
+ return Util.underscoredToJava(baseName, true);
}
@Override
http://git-wip-us.apache.org/repos/asf/cayenne/blob/f3a4a582/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/naming/NoStemStemmer.java
----------------------------------------------------------------------
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
new file mode 100644
index 0000000..eab087a
--- /dev/null
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/naming/NoStemStemmer.java
@@ -0,0 +1,39 @@
+/*
+ * 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
+ *
+ * http://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;
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/f3a4a582/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/naming/PatternStemmer.java
----------------------------------------------------------------------
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
new file mode 100644
index 0000000..547d4db
--- /dev/null
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/naming/PatternStemmer.java
@@ -0,0 +1,38 @@
+/*
+ * 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
+ *
+ * http://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 PatternStemmer implements DbEntityNameStemmer {
+
+ private String stripPattern;
+
+ public PatternStemmer(String stripPattern) {
+ this.stripPattern = stripPattern;
+ }
+
+ @Override
+ public String stem(String dbEntityName) {
+ throw new UnsupportedOperationException("TODO");
+ }
+
+
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/f3a4a582/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/EntityMergeSupportIT.java
----------------------------------------------------------------------
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 6f25e31..30e1a4b 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
@@ -20,6 +20,7 @@ package org.apache.cayenne.dbsync.merge;
import org.apache.cayenne.dbsync.filter.NamePatternMatcher;
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;
@@ -88,7 +89,8 @@ public class EntityMergeSupportIT extends MergeCase {
objEntity2.setDbEntity(dbEntity2);
map.addObjEntity(objEntity2);
- EntityMergeSupport entityMergeSupport = new EntityMergeSupport(new DefaultObjectNameGenerator(),
+ EntityMergeSupport entityMergeSupport = new EntityMergeSupport(
+ new DefaultObjectNameGenerator(NoStemStemmer.getInstance()),
NamePatternMatcher.EXCLUDE_ALL,
true,
true);
http://git-wip-us.apache.org/repos/asf/cayenne/blob/f3a4a582/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/MergeCase.java
----------------------------------------------------------------------
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 0f4f1b1..ab1e97e 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
@@ -25,6 +25,7 @@ import org.apache.cayenne.dba.DbAdapter;
import org.apache.cayenne.dbsync.merge.factory.MergerTokenFactory;
import org.apache.cayenne.dbsync.merge.factory.MergerTokenFactoryProvider;
import org.apache.cayenne.dbsync.naming.DefaultObjectNameGenerator;
+import org.apache.cayenne.dbsync.naming.NoStemStemmer;
import org.apache.cayenne.dbsync.reverse.db.DbLoader;
import org.apache.cayenne.dbsync.reverse.db.DbLoaderConfiguration;
import org.apache.cayenne.dbsync.reverse.db.LoggingDbLoaderDelegate;
@@ -112,7 +113,7 @@ public abstract class MergeCase extends DbSyncCase {
new DbLoader(conn,
node.getAdapter(),
new LoggingDbLoaderDelegate(LogFactory.getLog(DbLoader.class)),
- new DefaultObjectNameGenerator())
+ new DefaultObjectNameGenerator(NoStemStemmer.getInstance()))
.load(dbImport, loaderConfiguration);
} catch (SQLException e) {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/f3a4a582/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 9bf5fee..7a7cc3c 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,8 +28,7 @@ import static org.junit.Assert.assertEquals;
public class DefaultObjectNameGeneratorTest {
- private DefaultObjectNameGenerator generator = new DefaultObjectNameGenerator();
-
+ private DefaultObjectNameGenerator generator = new DefaultObjectNameGenerator(NoStemStemmer.getInstance());
private DbRelationship makeRelationship(String srcEntity, String srcKey, String targetEntity, String targetKey,
boolean toMany) {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/f3a4a582/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/db/DbLoaderIT.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/db/DbLoaderIT.java b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/db/DbLoaderIT.java
index e9feeff..cf154b8 100644
--- a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/db/DbLoaderIT.java
+++ b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/db/DbLoaderIT.java
@@ -23,6 +23,7 @@ import org.apache.cayenne.configuration.server.ServerRuntime;
import org.apache.cayenne.dba.DbAdapter;
import org.apache.cayenne.dba.TypesMapping;
import org.apache.cayenne.dbsync.naming.DefaultObjectNameGenerator;
+import org.apache.cayenne.dbsync.naming.NoStemStemmer;
import org.apache.cayenne.dbsync.reverse.filters.FiltersConfig;
import org.apache.cayenne.dbsync.reverse.filters.PatternFilter;
import org.apache.cayenne.dbsync.reverse.filters.TableFilter;
@@ -92,7 +93,7 @@ public class DbLoaderIT extends ServerCase {
}
private DbLoader createDbLoader(boolean meaningfulPK, boolean meaningfulFK) {
- return new DbLoader(connection, adapter, null, new DefaultObjectNameGenerator());
+ return new DbLoader(connection, adapter, null, new DefaultObjectNameGenerator(NoStemStemmer.getInstance()));
}
@After
http://git-wip-us.apache.org/repos/asf/cayenne/blob/f3a4a582/cayenne-tools/src/main/java/org/apache/cayenne/tools/DbImporterTask.java
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/main/java/org/apache/cayenne/tools/DbImporterTask.java b/cayenne-tools/src/main/java/org/apache/cayenne/tools/DbImporterTask.java
index d7e04ec..d9bdd5e 100644
--- a/cayenne-tools/src/main/java/org/apache/cayenne/tools/DbImporterTask.java
+++ b/cayenne-tools/src/main/java/org/apache/cayenne/tools/DbImporterTask.java
@@ -197,6 +197,13 @@ public class DbImporterTask extends Task {
config.setNamingStrategy(namingStrategy);
}
+ /**
+ * @since 4.0
+ */
+ public void setStripFromTableNames(String pattern) {
+ config.setStripFromTableNames(pattern);
+ }
+
public void setAdapter(String adapter) {
config.setAdapter(adapter);
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/f3a4a582/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportConfiguration.java
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportConfiguration.java b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportConfiguration.java
index ebc01e0..63dad3a 100644
--- a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportConfiguration.java
+++ b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportConfiguration.java
@@ -26,8 +26,11 @@ import org.apache.cayenne.dbsync.filter.NameFilter;
import org.apache.cayenne.dbsync.filter.NamePatternMatcher;
import org.apache.cayenne.dbsync.merge.DefaultModelMergeDelegate;
import org.apache.cayenne.dbsync.merge.ModelMergeDelegate;
+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.reverse.db.DbLoaderConfiguration;
import org.apache.cayenne.dbsync.reverse.db.DbLoaderDelegate;
import org.apache.cayenne.dbsync.reverse.db.DefaultDbLoaderDelegate;
@@ -54,12 +57,21 @@ public class DbImportConfiguration {
private boolean usePrimitives;
private Log logger;
private String namingStrategy;
+ private String stripFromTableNames;
public DbImportConfiguration() {
this.dataSourceInfo = new DataSourceInfo();
this.dbLoaderConfiguration = new DbLoaderConfiguration();
}
+ public String getStripFromTableNames() {
+ return stripFromTableNames;
+ }
+
+ public void setStripFromTableNames(String stripFromTableNames) {
+ this.stripFromTableNames = stripFromTableNames;
+ }
+
public Log getLogger() {
return logger;
}
@@ -148,13 +160,14 @@ public class DbImportConfiguration {
}
public ObjectNameGenerator createNameGenerator() {
-
- // TODO: load via DI AdhocObjectFactory
-
+
// TODO: not a singleton; called from different places...
+ // custom name generator
+ // TODO: support stemmer in non-standard generators...
+ // TODO: load via DI AdhocObjectFactory
String namingStrategy = getNamingStrategy();
- if (namingStrategy != null) {
+ if (namingStrategy != null && !namingStrategy.equals(DefaultObjectNameGenerator.class.getName())) {
try {
return (ObjectNameGenerator) Class.forName(namingStrategy).newInstance();
} catch (Exception e) {
@@ -162,7 +175,13 @@ public class DbImportConfiguration {
}
}
- return new DefaultObjectNameGenerator();
+ return new DefaultObjectNameGenerator(createStemmer());
+ }
+
+ protected DbEntityNameStemmer createStemmer() {
+ return (stripFromTableNames == null || stripFromTableNames.length() == 0)
+ ? NoStemStemmer.getInstance()
+ : new PatternStemmer(stripFromTableNames);
}
public String getDriver() {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/f3a4a582/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DefaultDbImportAction.java
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DefaultDbImportAction.java b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DefaultDbImportAction.java
index e7307de..1ae9533 100644
--- a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DefaultDbImportAction.java
+++ b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DefaultDbImportAction.java
@@ -36,6 +36,7 @@ import org.apache.cayenne.dbsync.merge.factory.MergerTokenFactoryProvider;
import org.apache.cayenne.dbsync.naming.ObjectNameGenerator;
import org.apache.cayenne.dbsync.reverse.db.DbLoader;
import org.apache.cayenne.dbsync.reverse.db.DbLoaderConfiguration;
+import org.apache.cayenne.dbsync.reverse.db.DbLoaderDelegate;
import org.apache.cayenne.dbsync.reverse.filters.CatalogFilter;
import org.apache.cayenne.dbsync.reverse.filters.FiltersConfig;
import org.apache.cayenne.dbsync.reverse.filters.PatternFilter;
@@ -152,10 +153,11 @@ public class DefaultDbImportAction implements DbImportAction {
DataNodeDescriptor dataNodeDescriptor = config.createDataNodeDescriptor();
DataSource dataSource = dataSourceFactory.getDataSource(dataNodeDescriptor);
DbAdapter adapter = adapterFactory.createAdapter(dataNodeDescriptor, dataSource);
+ ObjectNameGenerator objectNameGenerator = config.createNameGenerator();
DataMap sourceDataMap;
try (Connection connection = dataSource.getConnection()) {
- sourceDataMap = load(config, adapter, connection);
+ sourceDataMap = load(config, adapter, connection, objectNameGenerator);
}
DataMap targetDataMap = existingTargetMap(config);
@@ -184,7 +186,7 @@ public class DefaultDbImportAction implements DbImportAction {
hasChanges |= applyTokens(config.createMergeDelegate(),
targetDataMap,
log(sort(reverse(mergerTokenFactory, tokens))),
- config.createNameGenerator(),
+ objectNameGenerator,
config.createMeaningfulPKFilter(),
config.isUsePrimitives());
hasChanges |= syncProcedures(targetDataMap, sourceDataMap, loaderConfig.getFiltersConfig());
@@ -395,13 +397,21 @@ public class DefaultDbImportAction implements DbImportAction {
projectSaver.save(project);
}
- protected DataMap load(DbImportConfiguration config, DbAdapter adapter, Connection connection) throws Exception {
+ protected DataMap load(DbImportConfiguration config,
+ DbAdapter adapter,
+ Connection connection,
+ ObjectNameGenerator objectNameGenerator) throws Exception {
+
DataMap dataMap = new DataMap("_import_source_");
- createDbLoader(config, adapter, connection).load(dataMap, config.getDbLoaderConfig());
+ createDbLoader(adapter, connection, config.createLoaderDelegate(), objectNameGenerator)
+ .load(dataMap, config.getDbLoaderConfig());
return dataMap;
}
- protected DbLoader createDbLoader(DbImportConfiguration config, DbAdapter adapter, Connection connection) {
- return new DbLoader(connection, adapter, config.createLoaderDelegate(), config.createNameGenerator());
+ protected DbLoader createDbLoader(DbAdapter adapter,
+ Connection connection,
+ DbLoaderDelegate dbLoaderDelegate,
+ ObjectNameGenerator objectNameGenerator) {
+ return new DbLoader(connection, adapter, dbLoaderDelegate, objectNameGenerator);
}
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/f3a4a582/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/DefaultDbImportActionTest.java
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/DefaultDbImportActionTest.java b/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/DefaultDbImportActionTest.java
index 20ccc1d..34365fc 100644
--- a/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/DefaultDbImportActionTest.java
+++ b/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/DefaultDbImportActionTest.java
@@ -35,6 +35,7 @@ import org.apache.cayenne.dbsync.merge.builders.DataMapBuilder;
import org.apache.cayenne.dbsync.merge.factory.DefaultMergerTokenFactory;
import org.apache.cayenne.dbsync.merge.factory.MergerTokenFactoryProvider;
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.reverse.db.DbLoader;
import org.apache.cayenne.dbsync.reverse.db.DbLoaderConfiguration;
@@ -124,7 +125,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());
+ when(config.createNameGenerator()).thenReturn(new DefaultObjectNameGenerator(NoStemStemmer.getInstance()));
when(config.createMeaningfulPKFilter()).thenReturn(NamePatternMatcher.EXCLUDE_ALL);
final boolean[] haveWeTriedToSave = {false};
@@ -166,7 +167,7 @@ public class DefaultDbImportActionTest {
when(params.getTargetDataMap()).thenReturn(FILE_STUB);
when(params.createMergeDelegate()).thenReturn(new DefaultModelMergeDelegate());
when(params.getDbLoaderConfig()).thenReturn(new DbLoaderConfiguration());
- when(params.createNameGenerator()).thenReturn(new DefaultObjectNameGenerator());
+ when(params.createNameGenerator()).thenReturn(new DefaultObjectNameGenerator(NoStemStemmer.getInstance()));
when(params.createMeaningfulPKFilter()).thenReturn(NamePatternMatcher.EXCLUDE_ALL);
final boolean[] haveWeTriedToSave = {false};
@@ -288,8 +289,12 @@ public class DefaultDbImportActionTest {
when(mergerTokenFactoryProvider.get(any(DbAdapter.class))).thenReturn(new DefaultMergerTokenFactory());
return new DefaultDbImportAction(log, projectSaver, dataSourceFactory, adapterFactory, mapLoader, mergerTokenFactoryProvider) {
+
@Override
- protected DbLoader createDbLoader(DbImportConfiguration config, DbAdapter adapter, Connection connection) {
+ protected DbLoader createDbLoader(DbAdapter adapter,
+ Connection connection,
+ DbLoaderDelegate dbLoaderDelegate,
+ ObjectNameGenerator objectNameGenerator) {
return dbLoader;
}
};
http://git-wip-us.apache.org/repos/asf/cayenne/blob/f3a4a582/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/ManyToManyCandidateEntityTest.java
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/ManyToManyCandidateEntityTest.java b/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/ManyToManyCandidateEntityTest.java
index b9632f8..297dd14 100644
--- a/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/ManyToManyCandidateEntityTest.java
+++ b/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/ManyToManyCandidateEntityTest.java
@@ -26,6 +26,7 @@ import org.apache.cayenne.configuration.DefaultConfigurationNameMapper;
import org.apache.cayenne.configuration.XMLDataChannelDescriptorLoader;
import org.apache.cayenne.configuration.XMLDataMapLoader;
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.Binder;
import org.apache.cayenne.di.ClassLoaderManager;
@@ -96,7 +97,8 @@ public class ManyToManyCandidateEntityTest {
public void testOptimisationForManyToManyEntity() {
ObjEntity manyToManyEntity = map.getObjEntity("Table1Table2");
- ManyToManyCandidateEntity.build(manyToManyEntity).optimizeRelationships(new DefaultObjectNameGenerator());
+ ManyToManyCandidateEntity.build(manyToManyEntity).optimizeRelationships(
+ new DefaultObjectNameGenerator(NoStemStemmer.getInstance()));
ObjEntity table1Entity = map.getObjEntity("Table1");
ObjEntity table2Entity = map.getObjEntity("Table2");
http://git-wip-us.apache.org/repos/asf/cayenne/blob/f3a4a582/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateObjEntityAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateObjEntityAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateObjEntityAction.java
index eb084fc..49940df 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateObjEntityAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateObjEntityAction.java
@@ -24,6 +24,7 @@ import org.apache.cayenne.dbsync.filter.NamePatternMatcher;
import org.apache.cayenne.dbsync.merge.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.map.DataMap;
import org.apache.cayenne.map.DbEntity;
import org.apache.cayenne.map.ObjEntity;
@@ -94,7 +95,7 @@ public class CreateObjEntityAction extends CayenneAction {
entity.setDbEntity(dbEntity);
// TODO: use injectable name generator
- String baseName = new DefaultObjectNameGenerator().objEntityName(dbEntity);
+ String baseName = new DefaultObjectNameGenerator(NoStemStemmer.getInstance()).objEntityName(dbEntity);
entity.setName(NameBuilder
.builder(entity, dbEntity.getDataMap())
.baseName(baseName)
@@ -111,7 +112,8 @@ public class CreateObjEntityAction extends CayenneAction {
dataMap.addObjEntity(entity);
// TODO: Modeler-controlled defaults for all the hardcoded boolean flags here.
- EntityMergeSupport merger = new EntityMergeSupport(new DefaultObjectNameGenerator(), NamePatternMatcher.EXCLUDE_ALL, true, true);
+ EntityMergeSupport merger = new EntityMergeSupport(new DefaultObjectNameGenerator(NoStemStemmer.getInstance()),
+ NamePatternMatcher.EXCLUDE_ALL, true, true);
merger.addEntityMergeListener(DeleteRuleUpdater.getEntityMergeListener());
merger.synchronizeWithDbEntity(entity);
http://git-wip-us.apache.org/repos/asf/cayenne/blob/f3a4a582/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DbLoaderHelper.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DbLoaderHelper.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DbLoaderHelper.java
index 4b63ccb..b736eac 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DbLoaderHelper.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/DbLoaderHelper.java
@@ -189,7 +189,7 @@ public class DbLoaderHelper {
config.setMeaningfulPkTables(dialog.getMeaningfulPk());
config.setNamingStrategy(dialog.getNamingStrategy());
-
+
new LoadDataMapTask(Application.getFrame(), "Reengineering DB", reverseEngineering).startAndWait();
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/f3a4a582/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/MergerOptions.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/MergerOptions.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/MergerOptions.java
index 4ee133c..2608aba 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/MergerOptions.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/MergerOptions.java
@@ -32,6 +32,7 @@ import org.apache.cayenne.dbsync.merge.ModelMergeDelegate;
import org.apache.cayenne.dbsync.merge.factory.MergerTokenFactory;
import org.apache.cayenne.dbsync.merge.factory.MergerTokenFactoryProvider;
import org.apache.cayenne.dbsync.naming.DefaultObjectNameGenerator;
+import org.apache.cayenne.dbsync.naming.NoStemStemmer;
import org.apache.cayenne.dbsync.reverse.db.DbLoader;
import org.apache.cayenne.dbsync.reverse.db.DbLoaderConfiguration;
import org.apache.cayenne.dbsync.reverse.db.LoggingDbLoaderDelegate;
@@ -183,7 +184,7 @@ public class MergerOptions extends CayenneController {
new DbLoader(conn,
adapter,
new LoggingDbLoaderDelegate(LogFactory.getLog(DbLoader.class)),
- new DefaultObjectNameGenerator())
+ new DefaultObjectNameGenerator(NoStemStemmer.getInstance()))
.load(dbImport, config);
} catch (SQLException e) {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/f3a4a582/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/ModelerDbImportAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/ModelerDbImportAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/ModelerDbImportAction.java
index 24cc4b2..1b271bb 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/ModelerDbImportAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/ModelerDbImportAction.java
@@ -22,7 +22,9 @@ import org.apache.cayenne.configuration.server.DataSourceFactory;
import org.apache.cayenne.configuration.server.DbAdapterFactory;
import org.apache.cayenne.dba.DbAdapter;
import org.apache.cayenne.dbsync.merge.factory.MergerTokenFactoryProvider;
+import org.apache.cayenne.dbsync.naming.ObjectNameGenerator;
import org.apache.cayenne.dbsync.reverse.db.DbLoader;
+import org.apache.cayenne.dbsync.reverse.db.DbLoaderDelegate;
import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.map.MapLoader;
import org.apache.cayenne.project.ProjectSaver;
@@ -55,10 +57,11 @@ public class ModelerDbImportAction extends DefaultDbImportAction {
}
@Override
- protected DataMap load(DbImportConfiguration config, DbAdapter adapter, Connection connection) throws Exception {
- DataMap dataMap = new DataMap();
- dbLoader.load(dataMap, config.getDbLoaderConfig());
- return dataMap;
+ protected DbLoader createDbLoader(DbAdapter adapter,
+ Connection connection,
+ DbLoaderDelegate dbLoaderDelegate,
+ ObjectNameGenerator objectNameGenerator) {
+ return dbLoader;
}
@Override
http://git-wip-us.apache.org/repos/asf/cayenne/blob/f3a4a582/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/NameGeneratorPreferences.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/NameGeneratorPreferences.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/NameGeneratorPreferences.java
index 92ed76c..65b2f74 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/NameGeneratorPreferences.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/NameGeneratorPreferences.java
@@ -19,6 +19,7 @@
package org.apache.cayenne.modeler.util;
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.modeler.Application;
@@ -98,6 +99,6 @@ public class NameGeneratorPreferences {
}
public static ObjectNameGenerator defaultNameGenerator() {
- return new DefaultObjectNameGenerator();
+ return new DefaultObjectNameGenerator(NoStemStemmer.getInstance());
}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/f3a4a582/plugins/maven-cayenne-plugin/src/main/java/org/apache/cayenne/tools/DbImporterMojo.java
----------------------------------------------------------------------
diff --git a/plugins/maven-cayenne-plugin/src/main/java/org/apache/cayenne/tools/DbImporterMojo.java b/plugins/maven-cayenne-plugin/src/main/java/org/apache/cayenne/tools/DbImporterMojo.java
index 94bd170..3ba39f3 100644
--- a/plugins/maven-cayenne-plugin/src/main/java/org/apache/cayenne/tools/DbImporterMojo.java
+++ b/plugins/maven-cayenne-plugin/src/main/java/org/apache/cayenne/tools/DbImporterMojo.java
@@ -118,6 +118,13 @@ public class DbImporterMojo extends AbstractMojo {
*/
private ReverseEngineering reverseEngineering = new ReverseEngineering();
+ /**
+ * A regular expression that should match the part of the table name to strip before generating DB names.
+ *
+ * @parameter stripFromTableNames="stripFromTableNames"
+ * default-value=""
+ */
+ private String stripFromTableNames;
/**
* JDBC connection URL of a target database.
@@ -196,6 +203,7 @@ public class DbImporterMojo extends AbstractMojo {
config.setTargetDataMap(map);
config.setMeaningfulPkTables(meaningfulPkTables);
config.setNamingStrategy(namingStrategy);
+ config.setStripFromTableNames(stripFromTableNames);
config.setPassword(password);
config.setUrl(url);
config.setUsername(username);
[2/2] cayenne git commit: CAY-2130 Stripping common name prefixes on
reverse engineering
Posted by aa...@apache.org.
CAY-2130 Stripping common name prefixes on reverse engineering
* unit tests
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/88613547
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/88613547
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/88613547
Branch: refs/heads/master
Commit: 88613547fc7bdabfc24f77632ca44f6bd68b4274
Parents: f3a4a58
Author: Andrus Adamchik <an...@objectstyle.com>
Authored: Tue Nov 8 11:37:00 2016 +0300
Committer: Andrus Adamchik <an...@objectstyle.com>
Committed: Tue Nov 8 13:46:50 2016 +0300
----------------------------------------------------------------------
.../cayenne/dbsync/naming/PatternStemmer.java | 20 +++++--
.../dbsync/naming/PatternStemmerTest.java | 61 ++++++++++++++++++++
.../tools/dbimport/DbImportConfiguration.java | 4 +-
docs/doc/src/main/resources/RELEASE-NOTES.txt | 1 +
.../testCustomObjectLayerSettings-pom.xml | 1 +
...testCustomObjectLayerSettings.map.xml-result | 6 ++
.../dbimport/testCustomObjectLayerSettings.sql | 5 ++
7 files changed, 90 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/88613547/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/naming/PatternStemmer.java
----------------------------------------------------------------------
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
index 547d4db..0db0e3d 100644
--- 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
@@ -18,21 +18,29 @@
*/
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 String stripPattern;
+ private Pattern pattern;
+
+ public PatternStemmer(String stripPattern, boolean caseSensitive) {
+
+ int flags = 0;
+ if (!caseSensitive) {
+ flags = flags | Pattern.CASE_INSENSITIVE;
+ }
- public PatternStemmer(String stripPattern) {
- this.stripPattern = stripPattern;
+ this.pattern = Pattern.compile(stripPattern, flags);
}
@Override
public String stem(String dbEntityName) {
- throw new UnsupportedOperationException("TODO");
+ Matcher m = pattern.matcher(dbEntityName);
+ return m.replaceAll("");
}
-
-
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/88613547/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/naming/PatternStemmerTest.java
----------------------------------------------------------------------
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
new file mode 100644
index 0000000..f605745
--- /dev/null
+++ b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/naming/PatternStemmerTest.java
@@ -0,0 +1,61 @@
+/*
+ * 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
+ *
+ * http://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.Test;
+
+import static org.junit.Assert.assertEquals;
+
+public class PatternStemmerTest {
+
+ @Test
+ public void testStemNoMatch() {
+ assertEquals("xyzabc", new PatternStemmer("^pre", false).stem("xyzabc"));
+ }
+
+ @Test
+ public void testStemCaseSensitive() {
+ assertEquals("PREUPPERCASE", new PatternStemmer("^pre", true).stem("PREUPPERCASE"));
+ assertEquals("UPPERCASE", new PatternStemmer("^pre", true).stem("preUPPERCASE"));
+ }
+
+ @Test
+ public void testStemCaseInsensitive() {
+ assertEquals("lowercase", new PatternStemmer("^pre", false).stem("prelowercase"));
+ assertEquals("UPPERCASE", new PatternStemmer("^pre", false).stem("PREUPPERCASE"));
+ }
+
+ @Test
+ public void testStemHead() {
+ assertEquals("name", new PatternStemmer("^strip_", false).stem("strip_name"));
+ assertEquals("strip_name", new PatternStemmer("^strip_", false).stem("strip_strip_name"));
+ }
+
+ @Test
+ public void testStemTail() {
+ assertEquals("name", new PatternStemmer("_strip$", false).stem("name_strip"));
+ assertEquals("name_strip", new PatternStemmer("_strip$", false).stem("name_strip_strip"));
+ }
+
+ @Test
+ public void testStemMiddle() {
+ assertEquals("start_end", new PatternStemmer("_strip", false).stem("start_strip_end"));
+ assertEquals("start_end", new PatternStemmer("_strip", false).stem("start_strip_strip_end"));
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/88613547/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportConfiguration.java
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportConfiguration.java b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportConfiguration.java
index 63dad3a..9bf4ed1 100644
--- a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportConfiguration.java
+++ b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportConfiguration.java
@@ -160,7 +160,7 @@ public class DbImportConfiguration {
}
public ObjectNameGenerator createNameGenerator() {
-
+
// TODO: not a singleton; called from different places...
// custom name generator
@@ -181,7 +181,7 @@ public class DbImportConfiguration {
protected DbEntityNameStemmer createStemmer() {
return (stripFromTableNames == null || stripFromTableNames.length() == 0)
? NoStemStemmer.getInstance()
- : new PatternStemmer(stripFromTableNames);
+ : new PatternStemmer(stripFromTableNames, false);
}
public String getDriver() {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/88613547/docs/doc/src/main/resources/RELEASE-NOTES.txt
----------------------------------------------------------------------
diff --git a/docs/doc/src/main/resources/RELEASE-NOTES.txt b/docs/doc/src/main/resources/RELEASE-NOTES.txt
index bc626be..bb9c6f3 100644
--- a/docs/doc/src/main/resources/RELEASE-NOTES.txt
+++ b/docs/doc/src/main/resources/RELEASE-NOTES.txt
@@ -37,6 +37,7 @@ CAY-2115 DbLoader - allow loading DataMap without Obj layer
CAY-2116 Split schema synchronization code in a separate module
CAY-2118 cdbimport: drop support for the old style of table filtering
CAY-2129 Modeler: reengineer dialog improvements
+CAY-2130 Stripping common name prefixes on reverse engineering
CAY-2132 Adding SybaseSelectTranslator to support TOP/DISTINCT TOP in limited queries
CAY-2133 ObjectNameGenerator refactoring - unifying relationship name generation
http://git-wip-us.apache.org/repos/asf/cayenne/blob/88613547/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testCustomObjectLayerSettings-pom.xml
----------------------------------------------------------------------
diff --git a/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testCustomObjectLayerSettings-pom.xml b/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testCustomObjectLayerSettings-pom.xml
index b57d42e..47ca90d 100644
--- a/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testCustomObjectLayerSettings-pom.xml
+++ b/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testCustomObjectLayerSettings-pom.xml
@@ -34,6 +34,7 @@
<url>jdbc:derby:memory:DbImporterMojoTest;create=true</url>
<meaningfulPkTables>^*$</meaningfulPkTables>
<usePrimitives>true</usePrimitives>
+ <stripFromTableNames>^xyz_</stripFromTableNames>
<reverseEngineering>
<schema>
http://git-wip-us.apache.org/repos/asf/cayenne/blob/88613547/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testCustomObjectLayerSettings.map.xml-result
----------------------------------------------------------------------
diff --git a/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testCustomObjectLayerSettings.map.xml-result b/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testCustomObjectLayerSettings.map.xml-result
index aa301db..9f36c0f 100644
--- a/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testCustomObjectLayerSettings.map.xml-result
+++ b/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testCustomObjectLayerSettings.map.xml-result
@@ -30,6 +30,9 @@
<db-attribute name="COL2" type="INTEGER" length="10"/>
<db-attribute name="ID" type="INTEGER" isPrimaryKey="true" isMandatory="true" length="10"/>
</db-entity>
+ <db-entity name="XYZ_PREFIXED_NEW_TABLE" schema="SCHEMA_01">
+ <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" isMandatory="true" length="10"/>
+ </db-entity>
<obj-entity name="ExistingTable" className="ExistingTable" dbEntityName="EXISTING_TABLE">
<obj-attribute name="col2" type="int" db-attribute-path="COL2"/>
</obj-entity>
@@ -37,4 +40,7 @@
<obj-attribute name="col2" type="int" db-attribute-path="COL2"/>
<obj-attribute name="id" type="int" db-attribute-path="ID"/>
</obj-entity>
+ <obj-entity name="PrefixedNewTable" className="PrefixedNewTable" dbEntityName="XYZ_PREFIXED_NEW_TABLE">
+ <obj-attribute name="id" type="int" db-attribute-path="ID"/>
+ </obj-entity>
</data-map>
http://git-wip-us.apache.org/repos/asf/cayenne/blob/88613547/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testCustomObjectLayerSettings.sql
----------------------------------------------------------------------
diff --git a/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testCustomObjectLayerSettings.sql b/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testCustomObjectLayerSettings.sql
index f8f4192..fe9ccd5 100644
--- a/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testCustomObjectLayerSettings.sql
+++ b/plugins/maven-cayenne-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testCustomObjectLayerSettings.sql
@@ -28,4 +28,9 @@ CREATE TABLE schema_01.existing_table (
id INTEGER NOT NULL,
COL2 INTEGER,
PRIMARY KEY (id)
+ );
+
+CREATE TABLE schema_01.xyz_prefixed_new_table (
+ id INTEGER NOT NULL,
+ PRIMARY KEY (id)
);
\ No newline at end of file