You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by ab...@apache.org on 2019/07/04 08:43:32 UTC
[cayenne] 01/03: CAY-2539 Import procedures with the help of
MergerToken
This is an automated email from the ASF dual-hosted git repository.
abulatski pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cayenne.git
commit e14d2c3b15e967ea22ed4fc6c5c1bec5be619702
Author: Arseni Bulatski <an...@gmail.com>
AuthorDate: Mon Jul 1 15:17:43 2019 +0300
CAY-2539 Import procedures with the help of MergerToken
---
RELEASE-NOTES.txt | 1 +
.../apache/cayenne/dbsync/merge/DataMapMerger.java | 16 ++-
.../cayenne/dbsync/merge/ProcedureDictionary.java | 69 +++++++++++++
.../cayenne/dbsync/merge/ProcedureMerger.java | 112 +++++++++++++++++++++
.../merge/factory/DefaultMergerTokenFactory.java | 29 +++++-
.../dbsync/merge/factory/MergerTokenFactory.java | 13 ++-
.../dbsync/merge/token/db/AddProcedureToDb.java | 55 ++++++++++
.../dbsync/merge/token/db/DropProcedureToDb.java | 55 ++++++++++
.../merge/token/model/CreateProcedureToModel.java | 57 +++++++++++
.../merge/token/model/DropProcedureToModel.java | 57 +++++++++++
.../reverse/dbimport/DefaultDbImportAction.java | 55 +---------
.../reverse/dbload/DefaultModelMergeDelegate.java | 11 ++
.../dbsync/reverse/dbload/ModelMergeDelegate.java | 4 +
.../reverse/dbload/ProxyModelMergeDelegate.java | 11 ++
.../cayenne/dbsync/merge/DataMapMergerTest.java | 28 +++++-
.../dbsync/merge/builders/DataMapBuilder.java | 21 +++-
.../dbsync/merge/builders/ObjectMother.java | 8 ++
.../dbsync/merge/builders/ProcedureBuilder.java | 56 +++++++++++
.../dbsync/merge/token/TokensReverseTest.java | 11 +-
.../apache/cayenne/dba/DefaultQuotingStrategy.java | 2 +-
.../java/org/apache/cayenne/map/Procedure.java | 14 +--
.../apache/cayenne/tools/DbImporterMojoTest.java | 24 +++++
.../tools/dbimport/testDropProcedure-pom.xml | 49 +++++++++
.../tools/dbimport/testDropProcedure.map.xml | 32 ++++++
.../dbimport/testDropProcedure.map.xml-result | 31 ++++++
.../cayenne/tools/dbimport/testDropProcedure.sql | 25 +++++
.../tools/dbimport/testImportProcedure-pom.xml | 51 ++++++++++
.../tools/dbimport/testImportProcedure.map.xml | 31 ++++++
.../dbimport/testImportProcedure.map.xml-result | 35 +++++++
.../cayenne/tools/dbimport/testImportProcedure.sql | 29 ++++++
.../tools/dbimport/testSameProcedure-pom.xml | 51 ++++++++++
.../tools/dbimport/testSameProcedure.map.xml | 32 ++++++
.../dbimport/testSameProcedure.map.xml-result | 35 +++++++
.../cayenne/tools/dbimport/testSameProcedure.sql | 29 ++++++
.../dialog/db/load/ModelerDbImportAction.java | 39 +------
35 files changed, 1064 insertions(+), 114 deletions(-)
diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index 89bf59d..8c995c7 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -23,6 +23,7 @@ CAY-2518 Add method to append having qualifier expression to ObjectSelect
CAY-2520 Split ObjectId into several specialized variants
CAY-2522 Make ObjectSelect a direct query
CAY-2525 Deprecate OpenBase adapter
+CAY-2539 Import procedures with the help of MergerToken
CAY-2540 Modeler: redesign dbRelationship editor dialog
CAY-2542 Modeler: redesign ObjRelationship editor dialog
CAY-2543 Move ResultSetMapping generation from metadata to translator
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/DataMapMerger.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/DataMapMerger.java
index 628872c..bc2c8f5 100644
--- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/DataMapMerger.java
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/DataMapMerger.java
@@ -19,6 +19,11 @@
package org.apache.cayenne.dbsync.merge;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Objects;
+
import org.apache.cayenne.dbsync.merge.factory.MergerTokenFactory;
import org.apache.cayenne.dbsync.merge.token.EmptyValueForNullProvider;
import org.apache.cayenne.dbsync.merge.token.MergerToken;
@@ -31,11 +36,6 @@ import org.apache.cayenne.map.DbAttribute;
import org.apache.cayenne.map.DbEntity;
import org.apache.cayenne.map.DbRelationship;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Objects;
-
/**
* Synchronization of data base store and Cayenne model.
*/
@@ -62,6 +62,7 @@ public class DataMapMerger implements Merger<DataMap> {
createDbEntityMerger(original, importedFromDb);
createRelationshipMerger();
createAttributeMerger();
+ createProcedureMerger(original ,importedFromDb);
return createTokens();
}
@@ -102,6 +103,11 @@ public class DataMapMerger implements Merger<DataMap> {
mergerList.add(dbRelationshipMerger);
}
+ private void createProcedureMerger(DataMap original, DataMap imported) {
+ ProcedureMerger procedureMerger = new ProcedureMerger(tokenFactory, original, imported, filters);
+ mergerList.add(procedureMerger);
+ }
+
public static Builder builder(MergerTokenFactory tokenFactory) {
return new Builder(tokenFactory);
}
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/ProcedureDictionary.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/ProcedureDictionary.java
new file mode 100644
index 0000000..6ca374d
--- /dev/null
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/ProcedureDictionary.java
@@ -0,0 +1,69 @@
+/*****************************************************************
+ * 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.merge;
+
+import java.util.Collection;
+import java.util.LinkedList;
+
+import org.apache.cayenne.dbsync.reverse.filters.FiltersConfig;
+import org.apache.cayenne.dbsync.reverse.filters.PatternFilter;
+import org.apache.cayenne.map.DataMap;
+import org.apache.cayenne.map.Procedure;
+
+/**
+ * @since 4.2
+ */
+public class ProcedureDictionary extends MergerDictionary<Procedure> {
+
+ private final DataMap container;
+
+ private final FiltersConfig filtersConfig;
+
+ ProcedureDictionary(DataMap container, FiltersConfig filtersConfig) {
+ this.container = container;
+ this.filtersConfig = filtersConfig;
+ }
+
+ @Override
+ String getName(Procedure entity) {
+ return entity.getName();
+ }
+
+ @Override
+ Collection<Procedure> getAll() {
+ return filter();
+ }
+
+ private Collection<Procedure> filter() {
+ if(filtersConfig == null) {
+ return container.getProcedures();
+ }
+
+ Collection<Procedure> existingFiltered = new LinkedList<>();
+ for(Procedure procedure : container.getProcedures()) {
+ PatternFilter patternFilter = filtersConfig
+ .proceduresFilter(procedure.getCatalog(), procedure.getSchema());
+ if(patternFilter != null && patternFilter.isIncluded(procedure.getName())) {
+ existingFiltered.add(procedure);
+ }
+ }
+ return existingFiltered;
+ }
+}
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/ProcedureMerger.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/ProcedureMerger.java
new file mode 100644
index 0000000..7bc5362
--- /dev/null
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/ProcedureMerger.java
@@ -0,0 +1,112 @@
+/*****************************************************************
+ * 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.merge;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.cayenne.dbsync.merge.factory.MergerTokenFactory;
+import org.apache.cayenne.dbsync.merge.token.MergerToken;
+import org.apache.cayenne.dbsync.reverse.filters.FiltersConfig;
+import org.apache.cayenne.map.DataMap;
+import org.apache.cayenne.map.Procedure;
+import org.apache.cayenne.map.ProcedureParameter;
+
+/**
+ * @since 4.2
+ */
+public class ProcedureMerger extends AbstractMerger<DataMap, Procedure> {
+
+ private final FiltersConfig filtersConfig;
+ private DataMap originalDataMap;
+ private DataMap importedDataMap;
+
+ ProcedureMerger(MergerTokenFactory tokenFactory, DataMap original, DataMap imported,
+ FiltersConfig filtersConfig) {
+ super(tokenFactory);
+ this.filtersConfig = filtersConfig;
+ originalDataMap = original;
+ importedDataMap = imported;
+ }
+
+ @Override
+ public List<MergerToken> createMergeTokens() {
+ return createMergeTokens(originalDataMap, importedDataMap);
+ }
+
+ @Override
+ MergerDictionaryDiff<Procedure> createDiff(DataMap original, DataMap imported) {
+ return new MergerDictionaryDiff.Builder<Procedure>()
+ .originalDictionary(new ProcedureDictionary(original, filtersConfig))
+ .importedDictionary(new ProcedureDictionary(imported, filtersConfig))
+ .build();
+ }
+
+ @Override
+ Collection<MergerToken> createTokensForMissingOriginal(Procedure imported) {
+ return Collections.singletonList(getTokenFactory().createDropProcedureToDb(imported));
+ }
+
+ @Override
+ Collection<MergerToken> createTokensForMissingImported(Procedure original) {
+ return Collections.singletonList(getTokenFactory().createAddProcedureToDb(original));
+ }
+
+ @Override
+ Collection<MergerToken> createTokensForSame(MergerDiffPair<Procedure> same) {
+ Procedure original = same.getOriginal();
+ Procedure imported = same.getImported();
+ if(needToCreateTokens(original, imported)) {
+ List<MergerToken> tokens = new ArrayList<>();
+ tokens.add(getTokenFactory().createAddProcedureToDb(original));
+ tokens.add(getTokenFactory().createDropProcedureToDb(imported));
+ return tokens;
+ }
+ return null;
+ }
+
+ private boolean needToCreateTokens(Procedure original, Procedure imported) {
+ List<ProcedureParameter> originalParams = original.getCallParameters();
+ List<ProcedureParameter> importedParams = imported.getCallParameters();
+ if(originalParams.size() != importedParams.size()) {
+ return true;
+ }
+ for(ProcedureParameter oP : originalParams) {
+ boolean found = false;
+ for(ProcedureParameter iP : importedParams) {
+ if(oP.getName().equals(iP.getName()) &&
+ oP.getType() == iP.getType() &&
+ oP.getPrecision() == iP.getPrecision() &&
+ oP.getMaxLength() == iP.getMaxLength() &&
+ oP.getDirection() == iP.getDirection()) {
+ found = true;
+ break;
+ }
+ }
+ if(!found) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+}
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/DefaultMergerTokenFactory.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/DefaultMergerTokenFactory.java
index a011466..4b9af94 100644
--- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/DefaultMergerTokenFactory.java
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/DefaultMergerTokenFactory.java
@@ -18,12 +18,16 @@
****************************************************************/
package org.apache.cayenne.dbsync.merge.factory;
+import java.util.Collection;
+
import org.apache.cayenne.dbsync.merge.token.MergerToken;
import org.apache.cayenne.dbsync.merge.token.ValueForNullProvider;
import org.apache.cayenne.dbsync.merge.token.db.AddColumnToDb;
+import org.apache.cayenne.dbsync.merge.token.db.AddProcedureToDb;
import org.apache.cayenne.dbsync.merge.token.db.AddRelationshipToDb;
import org.apache.cayenne.dbsync.merge.token.db.CreateTableToDb;
import org.apache.cayenne.dbsync.merge.token.db.DropColumnToDb;
+import org.apache.cayenne.dbsync.merge.token.db.DropProcedureToDb;
import org.apache.cayenne.dbsync.merge.token.db.DropRelationshipToDb;
import org.apache.cayenne.dbsync.merge.token.db.DropTableToDb;
import org.apache.cayenne.dbsync.merge.token.db.SetAllowNullToDb;
@@ -34,8 +38,10 @@ import org.apache.cayenne.dbsync.merge.token.db.SetPrimaryKeyToDb;
import org.apache.cayenne.dbsync.merge.token.db.SetValueForNullToDb;
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.CreateProcedureToModel;
import org.apache.cayenne.dbsync.merge.token.model.CreateTableToModel;
import org.apache.cayenne.dbsync.merge.token.model.DropColumnToModel;
+import org.apache.cayenne.dbsync.merge.token.model.DropProcedureToModel;
import org.apache.cayenne.dbsync.merge.token.model.DropRelationshipToModel;
import org.apache.cayenne.dbsync.merge.token.model.DropTableToModel;
import org.apache.cayenne.dbsync.merge.token.model.SetAllowNullToModel;
@@ -46,8 +52,7 @@ import org.apache.cayenne.dbsync.merge.token.model.SetPrimaryKeyToModel;
import org.apache.cayenne.map.DbAttribute;
import org.apache.cayenne.map.DbEntity;
import org.apache.cayenne.map.DbRelationship;
-
-import java.util.Collection;
+import org.apache.cayenne.map.Procedure;
/**
* @since 4.0
@@ -156,6 +161,26 @@ public class DefaultMergerTokenFactory implements MergerTokenFactory {
}
@Override
+ public MergerToken createAddProcedureToDb(Procedure procedure) {
+ return new AddProcedureToDb(procedure);
+ }
+
+ @Override
+ public MergerToken createAddProcedureToModel(Procedure procedure) {
+ return new CreateProcedureToModel(procedure);
+ }
+
+ @Override
+ public MergerToken createDropProcedureToDb(Procedure procedure) {
+ return new DropProcedureToDb(procedure);
+ }
+
+ @Override
+ public MergerToken createDropProcedureToModel(Procedure procedure) {
+ return new DropProcedureToModel(procedure);
+ }
+
+ @Override
public MergerToken createSetPrimaryKeyToDb(
DbEntity entity,
Collection<DbAttribute> primaryKeyOriginal,
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/MergerTokenFactory.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/MergerTokenFactory.java
index 3b91321..60d9c9d 100644
--- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/MergerTokenFactory.java
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/MergerTokenFactory.java
@@ -18,13 +18,14 @@
****************************************************************/
package org.apache.cayenne.dbsync.merge.factory;
+import java.util.Collection;
+
import org.apache.cayenne.dbsync.merge.token.MergerToken;
import org.apache.cayenne.dbsync.merge.token.ValueForNullProvider;
import org.apache.cayenne.map.DbAttribute;
import org.apache.cayenne.map.DbEntity;
import org.apache.cayenne.map.DbRelationship;
-
-import java.util.Collection;
+import org.apache.cayenne.map.Procedure;
public interface MergerTokenFactory {
@@ -74,6 +75,14 @@ public interface MergerTokenFactory {
MergerToken createDropRelationshipToModel(DbEntity entity, DbRelationship rel);
+ MergerToken createAddProcedureToDb(Procedure procedure);
+
+ MergerToken createAddProcedureToModel(Procedure procedure);
+
+ MergerToken createDropProcedureToDb(Procedure procedure);
+
+ MergerToken createDropProcedureToModel(Procedure procedure);
+
MergerToken createSetPrimaryKeyToDb(
DbEntity entity,
Collection<DbAttribute> primaryKeyOriginal,
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/AddProcedureToDb.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/AddProcedureToDb.java
new file mode 100644
index 0000000..1481888
--- /dev/null
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/AddProcedureToDb.java
@@ -0,0 +1,55 @@
+/*****************************************************************
+ * 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.merge.token.db;
+
+import java.util.List;
+
+import org.apache.cayenne.dba.DbAdapter;
+import org.apache.cayenne.dbsync.merge.factory.MergerTokenFactory;
+import org.apache.cayenne.dbsync.merge.token.MergerToken;
+import org.apache.cayenne.map.Procedure;
+
+/**
+ * @since 4.2
+ */
+public class AddProcedureToDb extends AbstractToDbToken {
+
+ private Procedure procedure;
+
+ public AddProcedureToDb(Procedure procedure) {
+ super("Add procedure to db", 120);
+ this.procedure = procedure;
+ }
+
+ @Override
+ public List<String> createSql(DbAdapter adapter) {
+ throw new UnsupportedOperationException("Can't generate SQL for procedure");
+ }
+
+ @Override
+ public String getTokenValue() {
+ return procedure.getName();
+ }
+
+ @Override
+ public MergerToken createReverse(MergerTokenFactory factory) {
+ return factory.createDropProcedureToModel(procedure);
+ }
+}
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/DropProcedureToDb.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/DropProcedureToDb.java
new file mode 100644
index 0000000..05f5163
--- /dev/null
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/DropProcedureToDb.java
@@ -0,0 +1,55 @@
+/*****************************************************************
+ * 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.merge.token.db;
+
+import java.util.List;
+
+import org.apache.cayenne.dba.DbAdapter;
+import org.apache.cayenne.dbsync.merge.factory.MergerTokenFactory;
+import org.apache.cayenne.dbsync.merge.token.MergerToken;
+import org.apache.cayenne.map.Procedure;
+
+/**
+ * @since 4.2
+ */
+public class DropProcedureToDb extends AbstractToDbToken {
+
+ private Procedure procedure;
+
+ public DropProcedureToDb(Procedure procedure) {
+ super("Drop procedure to db", 7);
+ this.procedure = procedure;
+ }
+
+ @Override
+ public List<String> createSql(DbAdapter adapter) {
+ throw new UnsupportedOperationException("Can't drop procedure to db.");
+ }
+
+ @Override
+ public String getTokenValue() {
+ return procedure.getName();
+ }
+
+ @Override
+ public MergerToken createReverse(MergerTokenFactory factory) {
+ return factory.createAddProcedureToModel(procedure);
+ }
+}
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/model/CreateProcedureToModel.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/model/CreateProcedureToModel.java
new file mode 100644
index 0000000..83c1371
--- /dev/null
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/model/CreateProcedureToModel.java
@@ -0,0 +1,57 @@
+/*****************************************************************
+ * 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.merge.token.model;
+
+import org.apache.cayenne.dbsync.merge.context.MergerContext;
+import org.apache.cayenne.dbsync.merge.factory.MergerTokenFactory;
+import org.apache.cayenne.dbsync.merge.token.MergerToken;
+import org.apache.cayenne.map.DataMap;
+import org.apache.cayenne.map.Procedure;
+
+/**
+ * @since 4.2
+ */
+public class CreateProcedureToModel extends AbstractToModelToken {
+
+ private Procedure procedure;
+
+ public CreateProcedureToModel(Procedure procedure) {
+ super("Add procedure to model", 125);
+ this.procedure = procedure;
+ }
+
+ @Override
+ public String getTokenValue() {
+ return procedure.getName();
+ }
+
+ @Override
+ public MergerToken createReverse(MergerTokenFactory factory) {
+ return factory.createDropProcedureToDb(procedure);
+ }
+
+ @Override
+ public void execute(MergerContext context) {
+ DataMap dataMap = context.getDataMap();
+ dataMap.addProcedure(procedure);
+
+ context.getDelegate().procedureAdded(procedure);
+ }
+}
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/model/DropProcedureToModel.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/model/DropProcedureToModel.java
new file mode 100644
index 0000000..19bc07b
--- /dev/null
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/model/DropProcedureToModel.java
@@ -0,0 +1,57 @@
+/*****************************************************************
+ * 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.merge.token.model;
+
+import org.apache.cayenne.dbsync.merge.context.MergerContext;
+import org.apache.cayenne.dbsync.merge.factory.MergerTokenFactory;
+import org.apache.cayenne.dbsync.merge.token.MergerToken;
+import org.apache.cayenne.map.Procedure;
+
+/**
+ * @since 4.2
+ */
+public class DropProcedureToModel extends AbstractToModelToken {
+
+ private Procedure procedure;
+
+ public DropProcedureToModel(Procedure procedure) {
+ super("Drop procedure to model", 60);
+ this.procedure = procedure;
+ }
+
+ @Override
+ public String getTokenValue() {
+ return procedure.getName();
+ }
+
+ @Override
+ public MergerToken createReverse(MergerTokenFactory factory) {
+ return factory.createAddProcedureToDb(procedure);
+ }
+
+ @Override
+ public void execute(MergerContext context) {
+ if(procedure == null) {
+ return;
+ }
+ context.getDataMap().removeProcedure(procedure.getName());
+ context.getDelegate().procedureRemoved(procedure);
+ }
+}
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbimport/DefaultDbImportAction.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbimport/DefaultDbImportAction.java
index 1728116..2130498 100644
--- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbimport/DefaultDbImportAction.java
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbimport/DefaultDbImportAction.java
@@ -54,14 +54,12 @@ import org.apache.cayenne.dbsync.reverse.dbload.ProxyModelMergeDelegate;
import org.apache.cayenne.dbsync.reverse.filters.CatalogFilter;
import org.apache.cayenne.dbsync.reverse.filters.FiltersConfig;
import org.apache.cayenne.dbsync.reverse.filters.FiltersConfigBuilder;
-import org.apache.cayenne.dbsync.reverse.filters.PatternFilter;
import org.apache.cayenne.di.Inject;
import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.map.DbEntity;
import org.apache.cayenne.map.EntityResolver;
import org.apache.cayenne.map.ObjEntity;
import org.apache.cayenne.map.ObjRelationship;
-import org.apache.cayenne.map.Procedure;
import org.apache.cayenne.project.Project;
import org.apache.cayenne.project.ProjectSaver;
import org.apache.cayenne.resource.URLResource;
@@ -153,7 +151,6 @@ public class DefaultDbImportAction implements DbImportAction {
syncDataMapProperties(targetDataMap, config);
applyTokens(targetDataMap, tokens, config);
- syncProcedures(targetDataMap, sourceDataMap, filters);
saveLoaded(targetDataMap, config);
this.loadedDataMap = null;
@@ -201,7 +198,7 @@ public class DefaultDbImportAction implements DbImportAction {
}
this.loadedDataMap = targetDataMap;
- // In that moment our data map fills with sorce map
+ // In that moment our data map fills with source map
// transform source DataMap before merging
transformSourceBeforeMerge(sourceDataMap, targetDataMap, config);
@@ -219,7 +216,6 @@ public class DefaultDbImportAction implements DbImportAction {
hasChanges |= checkDataMapProperties(targetDataMap, config);
hasChanges |= hasTokensToImport(tokens);
- hasChanges |= checkIncludedProcedures(sourceDataMap, filters);
return sourceDataMap;
}
@@ -275,24 +271,6 @@ public class DefaultDbImportAction implements DbImportAction {
return defaultPackage.equals(targetDataMap.getDefaultPackage());
}
- protected boolean hasChangesForProcedure(Procedure procedure) {
- PatternFilter proceduresFilter = filters.proceduresFilter(procedure.getCatalog(), procedure.getSchema());
- return proceduresFilter != null && proceduresFilter.isIncluded(procedure.getName());
- }
-
- protected boolean checkIncludedProcedures(DataMap loadedDataMap, FiltersConfig filters) {
- Collection<Procedure> procedures = loadedDataMap.getProcedures();
- boolean hasChanges = false;
- for (Procedure procedure : procedures) {
- if(!hasChangesForProcedure(procedure)) {
- continue;
- }
- hasChanges = true;
- }
- return hasChanges;
- }
-
-
private void syncDataMapProperties(DataMap targetDataMap, DbImportConfiguration config) {
String defaultPackage = config.getDefaultPackage();
if (defaultPackage == null || isBlank(defaultPackage)) {
@@ -384,8 +362,7 @@ public class DefaultDbImportAction implements DbImportAction {
return dataMap;
}
- private List<MergerToken> reverse(MergerTokenFactory mergerTokenFactory, Iterable<MergerToken> mergeTokens)
- throws IOException {
+ private List<MergerToken> reverse(MergerTokenFactory mergerTokenFactory, Iterable<MergerToken> mergeTokens) {
List<MergerToken> tokens = new LinkedList<>();
for (MergerToken token : mergeTokens) {
@@ -449,38 +426,10 @@ public class DefaultDbImportAction implements DbImportAction {
relationshipsSanity(targetDataMap);
}
- protected void addMessageToLogs(String message, List<String> messages) {
- messages.add(message);
- }
-
protected void logMessages(List<String> messages) {
messages.forEach(logger::info);
}
-
- protected void syncProcedures(DataMap targetDataMap, DataMap loadedDataMap, FiltersConfig filters) {
- Collection<Procedure> procedures = loadedDataMap.getProcedures();
- List<String> messages = new LinkedList<>();
-
- for (Procedure procedure : procedures) {
- PatternFilter proceduresFilter = filters.proceduresFilter(procedure.getCatalog(), procedure.getSchema());
- if (proceduresFilter == null || !proceduresFilter.isIncluded(procedure.getName())) {
- continue;
- }
-
- Procedure oldProcedure = targetDataMap.getProcedure(procedure.getName());
- // maybe we need to compare oldProcedure's and procedure's fully qualified names?
- if (oldProcedure != null) {
- targetDataMap.removeProcedure(procedure.getName());
- addMessageToLogs("Replace procedure " + procedure.getName(), messages);
- } else {
- addMessageToLogs("Add new procedure " + procedure.getName(), messages);
- }
- targetDataMap.addProcedure(procedure);
- }
- logMessages(messages);
- }
-
/**
* Save imported data.
* This can create DataMap and/or Project files.
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbload/DefaultModelMergeDelegate.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbload/DefaultModelMergeDelegate.java
index e0c6f18..689e337 100644
--- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbload/DefaultModelMergeDelegate.java
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbload/DefaultModelMergeDelegate.java
@@ -25,6 +25,7 @@ import org.apache.cayenne.map.DbRelationship;
import org.apache.cayenne.map.ObjAttribute;
import org.apache.cayenne.map.ObjEntity;
import org.apache.cayenne.map.ObjRelationship;
+import org.apache.cayenne.map.Procedure;
/**
* A default noop implementation of {@link ModelMergeDelegate}.
@@ -87,4 +88,14 @@ public class DefaultModelMergeDelegate implements ModelMergeDelegate {
public void objRelationshipRemoved(ObjRelationship rel) {
}
+ @Override
+ public void procedureAdded(Procedure procedure) {
+
+ }
+
+ @Override
+ public void procedureRemoved(Procedure procedure) {
+
+ }
+
}
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbload/ModelMergeDelegate.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbload/ModelMergeDelegate.java
index 5f4b663..466d3bb 100644
--- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbload/ModelMergeDelegate.java
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbload/ModelMergeDelegate.java
@@ -27,6 +27,7 @@ import org.apache.cayenne.map.DbRelationship;
import org.apache.cayenne.map.ObjAttribute;
import org.apache.cayenne.map.ObjEntity;
import org.apache.cayenne.map.ObjRelationship;
+import org.apache.cayenne.map.Procedure;
/**
* A interface used to tell about modifications performed on the model by
@@ -62,4 +63,7 @@ public interface ModelMergeDelegate {
void objRelationshipRemoved(ObjRelationship rel);
+ void procedureAdded(Procedure procedure);
+
+ void procedureRemoved(Procedure procedure);
}
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbload/ProxyModelMergeDelegate.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbload/ProxyModelMergeDelegate.java
index 2f95cc5..0c50580 100644
--- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbload/ProxyModelMergeDelegate.java
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/dbload/ProxyModelMergeDelegate.java
@@ -25,6 +25,7 @@ import org.apache.cayenne.map.DbRelationship;
import org.apache.cayenne.map.ObjAttribute;
import org.apache.cayenne.map.ObjEntity;
import org.apache.cayenne.map.ObjRelationship;
+import org.apache.cayenne.map.Procedure;
/**
* @since 4.0
@@ -106,4 +107,14 @@ public class ProxyModelMergeDelegate implements ModelMergeDelegate {
public void objRelationshipRemoved(ObjRelationship rel) {
delegate.objRelationshipRemoved(rel);
}
+
+ @Override
+ public void procedureAdded(Procedure procedure) {
+ delegate.procedureAdded(procedure);
+ }
+
+ @Override
+ public void procedureRemoved(Procedure procedure) {
+ delegate.procedureRemoved(procedure);
+ }
}
diff --git a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/DataMapMergerTest.java b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/DataMapMergerTest.java
index c656518..4f14d81 100644
--- a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/DataMapMergerTest.java
+++ b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/DataMapMergerTest.java
@@ -18,19 +18,23 @@
****************************************************************/
package org.apache.cayenne.dbsync.merge;
+import java.util.List;
+
import org.apache.cayenne.dbsync.merge.builders.DbEntityBuilder;
import org.apache.cayenne.dbsync.merge.factory.HSQLMergerTokenFactory;
import org.apache.cayenne.dbsync.merge.token.MergerToken;
import org.apache.cayenne.dbsync.merge.token.db.SetColumnTypeToDb;
+import org.apache.cayenne.dbsync.reverse.filters.FiltersConfig;
+import org.apache.cayenne.dbsync.reverse.filters.PatternFilter;
import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.map.DbEntity;
+import org.apache.cayenne.map.ProcedureParameter;
import org.junit.Test;
-import java.util.List;
-
import static org.apache.cayenne.dbsync.merge.builders.ObjectMother.dataMap;
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.procedure;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
@@ -464,6 +468,26 @@ public class DataMapMergerTest {
assertEquals(0, dbMerger().createMergeTokens(dataMap1, dataMap2).size());
}
+ @Test
+ public void testProcedures() {
+ DataMap dataMap1 = dataMap().with(
+ procedure("proc1")
+ .callParameters(new ProcedureParameter("test"))
+ ).build();
+
+ DataMap dataMap2 = dataMap().build();
+
+ PatternFilter patternFilter = new PatternFilter();
+ patternFilter.include("proc1");
+ FiltersConfig filtersConfig = FiltersConfig
+ .create(null, null, null, patternFilter);
+ DataMapMerger merger = DataMapMerger
+ .builder(factory())
+ .filters(filtersConfig)
+ .build();
+ assertEquals(1, merger.createMergeTokens(dataMap1, dataMap2).size());
+ }
+
private DataMapMerger dbMerger() {
return DataMapMerger.build(factory());
}
diff --git a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/builders/DataMapBuilder.java b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/builders/DataMapBuilder.java
index 3878bee..5a7d518 100644
--- a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/builders/DataMapBuilder.java
+++ b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/builders/DataMapBuilder.java
@@ -18,12 +18,13 @@
****************************************************************/
package org.apache.cayenne.dbsync.merge.builders;
+import java.util.Collections;
+
import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.map.DbEntity;
import org.apache.cayenne.map.EntityResolver;
import org.apache.cayenne.map.ObjEntity;
-
-import java.util.Collections;
+import org.apache.cayenne.map.Procedure;
/**
* @since 4.0.
@@ -108,6 +109,22 @@ public class DataMapBuilder extends DefaultBuilder<DataMap> {
return this;
}
+ public DataMapBuilder with(ProcedureBuilder... procedures) {
+ for(ProcedureBuilder builder : procedures) {
+ obj.addProcedure(builder.build());
+ }
+
+ return this;
+ }
+
+ public DataMapBuilder with(Procedure... procedures) {
+ for(Procedure procedure : procedures) {
+ obj.addProcedure(procedure);
+ }
+
+ return this;
+ }
+
public DataMap build() {
if (obj.getNamespace() == null) {
obj.setNamespace(new EntityResolver(Collections.singleton(obj)));
diff --git a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/builders/ObjectMother.java b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/builders/ObjectMother.java
index e543a25..51a1af4 100644
--- a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/builders/ObjectMother.java
+++ b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/builders/ObjectMother.java
@@ -67,4 +67,12 @@ public class ObjectMother {
return new DbAttributeBuilder();
}
+ public static ProcedureBuilder procedure(String name) {
+ return procedure().name(name);
+ }
+
+ public static ProcedureBuilder procedure() {
+ return new ProcedureBuilder();
+ }
+
}
diff --git a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/builders/ProcedureBuilder.java b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/builders/ProcedureBuilder.java
new file mode 100644
index 0000000..8b75c44
--- /dev/null
+++ b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/builders/ProcedureBuilder.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.merge.builders;
+
+import java.util.Arrays;
+
+import org.apache.cayenne.map.Procedure;
+import org.apache.cayenne.map.ProcedureParameter;
+import org.apache.cayenne.util.Util;
+
+public class ProcedureBuilder extends DefaultBuilder<Procedure> {
+
+ public ProcedureBuilder() {
+ super(new Procedure());
+ }
+
+ public ProcedureBuilder name() {
+ return name(getRandomJavaName());
+ }
+
+ public ProcedureBuilder name(String name) {
+ obj.setName(name);
+ return this;
+ }
+
+ public ProcedureBuilder callParameters(ProcedureParameter... procedureParameters) {
+ obj.setCallParameters(Arrays.asList(procedureParameters));
+
+ return this;
+ }
+
+ public Procedure build() {
+ if(obj.getName() == null) {
+ obj.setName(Util.capitalized(getRandomJavaName()));
+ }
+
+ return obj;
+ }
+}
diff --git a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/token/TokensReverseTest.java b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/token/TokensReverseTest.java
index f221e2e..31d992b 100644
--- a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/token/TokensReverseTest.java
+++ b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/token/TokensReverseTest.java
@@ -19,17 +19,18 @@
package org.apache.cayenne.dbsync.merge.token;
+import java.util.Collections;
+
import org.apache.cayenne.dbsync.merge.factory.HSQLMergerTokenFactory;
import org.apache.cayenne.dbsync.merge.factory.MergerTokenFactory;
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.Procedure;
import org.junit.Assert;
import org.junit.Test;
-import java.util.Collections;
-
import static org.apache.cayenne.dbsync.merge.builders.ObjectMother.dbAttr;
import static org.apache.cayenne.dbsync.merge.builders.ObjectMother.dbEntity;
@@ -45,6 +46,7 @@ public class TokensReverseTest {
DbRelationship rel = new DbRelationship("rel");
rel.setSourceEntity(entity);
rel.addJoin(new DbJoin(rel, attr.getName(), "dontKnow"));
+ Procedure procedure = new Procedure("Test");
testOneToOneReverse(factory().createAddColumnToDb(entity, attr));
testOneToOneReverse(factory().createAddColumnToModel(entity, attr));
@@ -74,6 +76,11 @@ public class TokensReverseTest {
testOneToOneReverse(factory().createSetPrimaryKeyToModel(entity, Collections.singleton(attr), Collections.singleton(attr2), "PK"));
testOneToOneReverse(factory().createSetValueForNullToDb(entity, attr, new DefaultValueForNullProvider()));
+
+ testOneToOneReverse(factory().createDropProcedureToDb(procedure));
+ testOneToOneReverse(factory().createAddProcedureToDb(procedure));
+ testOneToOneReverse(factory().createDropProcedureToModel(procedure));
+ testOneToOneReverse(factory().createAddProcedureToModel(procedure));
}
private void testOneToOneReverse(MergerToken token) {
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/DefaultQuotingStrategy.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/DefaultQuotingStrategy.java
index 0ba17ff..f61a710 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/dba/DefaultQuotingStrategy.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/DefaultQuotingStrategy.java
@@ -25,7 +25,7 @@ import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.map.DbAttribute;
import org.apache.cayenne.map.DbEntity;
import org.apache.cayenne.map.DbJoin;
-import org.apache.cayenne.map.Entity;
+import org.apache.cayenne.map.Procedure;
/**
* @since 4.0 this is a top-level class.
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/map/Procedure.java b/cayenne-server/src/main/java/org/apache/cayenne/map/Procedure.java
index 45b009a..4d77524 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/map/Procedure.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/map/Procedure.java
@@ -19,17 +19,17 @@
package org.apache.cayenne.map;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
import org.apache.cayenne.configuration.ConfigurationNode;
import org.apache.cayenne.configuration.ConfigurationNodeVisitor;
import org.apache.cayenne.util.CayenneMapEntry;
import org.apache.cayenne.util.XMLEncoder;
import org.apache.cayenne.util.XMLSerializable;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
/**
* A mapping descriptor for a database stored procedure.
*/
@@ -112,8 +112,8 @@ public class Procedure implements ConfigurationNode, CayenneMapEntry, XMLSeriali
* Utility function to generate fully qualified name for procedure
*/
public static String generateFullyQualifiedName(String catalog, String schema, String name) {
- return (catalog != null ? catalog + '.' : "")
- + (schema != null ? schema + '.' : "")
+ return (catalog != null && !catalog.isEmpty() ? catalog + '.' : "")
+ + (schema != null && !schema.isEmpty() ? schema + '.' : "")
+ name;
}
diff --git a/maven-plugins/cayenne-maven-plugin/src/test/java/org/apache/cayenne/tools/DbImporterMojoTest.java b/maven-plugins/cayenne-maven-plugin/src/test/java/org/apache/cayenne/tools/DbImporterMojoTest.java
index f39f629..8dc70ee 100644
--- a/maven-plugins/cayenne-maven-plugin/src/test/java/org/apache/cayenne/tools/DbImporterMojoTest.java
+++ b/maven-plugins/cayenne-maven-plugin/src/test/java/org/apache/cayenne/tools/DbImporterMojoTest.java
@@ -292,6 +292,21 @@ public class DbImporterMojoTest extends AbstractMojoTestCase {
}
@Test
+ public void testImportProcedure() throws Exception {
+ test("testImportProcedure");
+ }
+
+ @Test
+ public void testDropProcedure() throws Exception {
+ test("testDropProcedure");
+ }
+
+ @Test
+ public void testSameProcedures() throws Exception {
+ test("testSameProcedure");
+ }
+
+ @Test
public void testFilteringConfig() throws Exception {
DbImporterMojo cdbImport = getCdbImport("config/pom-01.xml");
@@ -423,6 +438,15 @@ public class DbImporterMojoTest extends AbstractMojoTestCase {
}
}
+ try(ResultSet procedures = connection.getMetaData()
+ .getProcedures(null, null,"PROC")) {
+ while(procedures.next()) {
+ String schema = procedures.getString("PROCEDURE_SCHEM");
+ String name = procedures.getString("PROCEDURE_NAME");
+ execute(stmt, "DROP PROCEDURE " + (isBlank(schema) ? "" : schema + ".") + name);
+ }
+ }
+
try (ResultSet schemas = connection.getMetaData().getSchemas()) {
while (schemas.next()) {
String schem = schemas.getString("TABLE_SCHEM");
diff --git a/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testDropProcedure-pom.xml b/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testDropProcedure-pom.xml
new file mode 100644
index 0000000..0a4f58e
--- /dev/null
+++ b/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testDropProcedure-pom.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ~ 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.
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
+ http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+ <name>DbImporterMojo Test1</name>
+ <groupId>org.apache.maven.plugin-testing</groupId>
+ <artifactId>maven-plugin-testing</artifactId>
+ <version>1.0-SNAPSHOT</version>
+
+ <modelVersion>4.0.0</modelVersion>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>cayenne-maven-plugin</artifactId>
+ <configuration>
+ <map>target/test-classes/org/apache/cayenne/tools/dbimport/testDropProcedure.map.xml</map>
+ <dataSource>
+ <driver>org.apache.derby.jdbc.EmbeddedDriver</driver>
+ <url>jdbc:derby:memory:DbImporterMojoTest;create=true</url>
+ </dataSource>
+ <dbImport>
+ <includeTable>.*</includeTable>
+ </dbImport>
+ <project implementation="org.apache.cayenne.stubs.CayenneProjectStub"/>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
\ No newline at end of file
diff --git a/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testDropProcedure.map.xml b/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testDropProcedure.map.xml
new file mode 100644
index 0000000..9db1d27
--- /dev/null
+++ b/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testDropProcedure.map.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ~ 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.
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
+<data-map xmlns="http://cayenne.apache.org/schema/10/modelMap"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://cayenne.apache.org/schema/10/modelMap https://cayenne.apache.org/schema/10/modelMap.xsd"
+ project-version="10">
+ <procedure name="PROC" schema="SCHEMA_01"/>
+ <db-entity name="TABLE1" schema="SCHEMA_01">
+ <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" isMandatory="true" length="10"/>
+ <db-attribute name="T1_NAME" type="VARCHAR" length="45"/>
+ </db-entity>
+ <obj-entity name="Table1" className="Table1" dbEntityName="TABLE1">
+ <obj-attribute name="t1Name" type="java.lang.String" db-attribute-path="T1_NAME"/>
+ </obj-entity>
+</data-map>
\ No newline at end of file
diff --git a/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testDropProcedure.map.xml-result b/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testDropProcedure.map.xml-result
new file mode 100644
index 0000000..57f4845
--- /dev/null
+++ b/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testDropProcedure.map.xml-result
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ~ 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.
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
+<data-map xmlns="http://cayenne.apache.org/schema/10/modelMap"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://cayenne.apache.org/schema/10/modelMap https://cayenne.apache.org/schema/10/modelMap.xsd"
+ project-version="10">
+ <db-entity name="TABLE2" schema="SCHEMA_01">
+ <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" isMandatory="true" length="10"/>
+ <db-attribute name="T1_NAME" type="VARCHAR" length="45"/>
+ </db-entity>
+ <obj-entity name="Table2" className="Table2" dbEntityName="TABLE2">
+ <obj-attribute name="t1Name" type="java.lang.String" db-attribute-path="T1_NAME"/>
+ </obj-entity>
+</data-map>
\ No newline at end of file
diff --git a/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testDropProcedure.sql b/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testDropProcedure.sql
new file mode 100644
index 0000000..3bb9edf
--- /dev/null
+++ b/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testDropProcedure.sql
@@ -0,0 +1,25 @@
+-- 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.
+
+CREATE SCHEMA schema_01;
+SET SCHEMA schema_01;
+
+CREATE TABLE schema_01.table2 (
+ id INTEGER NOT NULL,
+ t1_name VARCHAR (45),
+ PRIMARY KEY (id)
+);
\ No newline at end of file
diff --git a/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testImportProcedure-pom.xml b/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testImportProcedure-pom.xml
new file mode 100644
index 0000000..898872d
--- /dev/null
+++ b/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testImportProcedure-pom.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ~ 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.
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
+ http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+ <name>DbImporterMojo Test1</name>
+ <groupId>org.apache.maven.plugin-testing</groupId>
+ <artifactId>maven-plugin-testing</artifactId>
+ <version>1.0-SNAPSHOT</version>
+
+ <modelVersion>4.0.0</modelVersion>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>cayenne-maven-plugin</artifactId>
+ <configuration>
+ <map>target/test-classes/org/apache/cayenne/tools/dbimport/testImportProcedure.map.xml</map>
+ <dataSource>
+ <driver>org.apache.derby.jdbc.EmbeddedDriver</driver>
+ <url>jdbc:derby:memory:DbImporterMojoTest;create=true</url>
+ </dataSource>
+ <dbImport>
+ <includeTable>.*</includeTable>
+ <includeProcedure>PROC</includeProcedure>
+ </dbImport>
+ <project implementation="org.apache.cayenne.stubs.CayenneProjectStub"/>
+
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
\ No newline at end of file
diff --git a/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testImportProcedure.map.xml b/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testImportProcedure.map.xml
new file mode 100644
index 0000000..b8fec94
--- /dev/null
+++ b/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testImportProcedure.map.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ~ 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.
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
+<data-map xmlns="http://cayenne.apache.org/schema/10/modelMap"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://cayenne.apache.org/schema/10/modelMap https://cayenne.apache.org/schema/10/modelMap.xsd"
+ project-version="10">
+ <db-entity name="TABLE1" schema="SCHEMA_01">
+ <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" isMandatory="true" length="10"/>
+ <db-attribute name="T1_NAME" type="VARCHAR" length="45"/>
+ </db-entity>
+ <obj-entity name="Table1" className="Table1" dbEntityName="TABLE1">
+ <obj-attribute name="t1Name" type="java.lang.String" db-attribute-path="T1_NAME"/>
+ </obj-entity>
+</data-map>
\ No newline at end of file
diff --git a/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testImportProcedure.map.xml-result b/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testImportProcedure.map.xml-result
new file mode 100644
index 0000000..6a1d2d9
--- /dev/null
+++ b/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testImportProcedure.map.xml-result
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ~ 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.
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
+<data-map xmlns="http://cayenne.apache.org/schema/10/modelMap"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://cayenne.apache.org/schema/10/modelMap https://cayenne.apache.org/schema/10/modelMap.xsd"
+ project-version="10">
+ <procedure name="PROC" schema="SCHEMA_01">
+ <procedure-parameter name="TEST" type="INTEGER" length="4" direction="in"/>
+ <procedure-parameter name="TOTAL" type="DECIMAL" length="24" precision="2" direction="out"/>
+ </procedure>
+ <db-entity name="TABLE2" schema="SCHEMA_01">
+ <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" isMandatory="true" length="10"/>
+ <db-attribute name="T1_NAME" type="VARCHAR" length="45"/>
+ </db-entity>
+ <obj-entity name="Table2" className="Table2" dbEntityName="TABLE2">
+ <obj-attribute name="t1Name" type="java.lang.String" db-attribute-path="T1_NAME"/>
+ </obj-entity>
+</data-map>
\ No newline at end of file
diff --git a/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testImportProcedure.sql b/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testImportProcedure.sql
new file mode 100644
index 0000000..55fb31e
--- /dev/null
+++ b/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testImportProcedure.sql
@@ -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
+--
+-- 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.
+
+CREATE SCHEMA schema_01;
+SET SCHEMA schema_01;
+
+CREATE TABLE schema_01.table2 (
+ id INTEGER NOT NULL,
+ t1_name VARCHAR (45),
+ PRIMARY KEY (id)
+);
+
+CREATE PROCEDURE PROC(IN test INTEGER, OUT TOTAL DECIMAL(10,2))
+PARAMETER STYLE JAVA READS SQL DATA LANGUAGE JAVA EXTERNAL NAME
+'org.apache.cayenne.test'
\ No newline at end of file
diff --git a/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testSameProcedure-pom.xml b/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testSameProcedure-pom.xml
new file mode 100644
index 0000000..6f8205d
--- /dev/null
+++ b/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testSameProcedure-pom.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ~ 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.
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
+ http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+ <name>DbImporterMojo Test1</name>
+ <groupId>org.apache.maven.plugin-testing</groupId>
+ <artifactId>maven-plugin-testing</artifactId>
+ <version>1.0-SNAPSHOT</version>
+
+ <modelVersion>4.0.0</modelVersion>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>cayenne-maven-plugin</artifactId>
+ <configuration>
+ <map>target/test-classes/org/apache/cayenne/tools/dbimport/testSameProcedure.map.xml</map>
+ <dataSource>
+ <driver>org.apache.derby.jdbc.EmbeddedDriver</driver>
+ <url>jdbc:derby:memory:DbImporterMojoTest;create=true</url>
+ </dataSource>
+ <dbImport>
+ <includeTable>.*</includeTable>
+ <includeProcedure>PROC</includeProcedure>
+ </dbImport>
+ <project implementation="org.apache.cayenne.stubs.CayenneProjectStub"/>
+
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
\ No newline at end of file
diff --git a/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testSameProcedure.map.xml b/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testSameProcedure.map.xml
new file mode 100644
index 0000000..9db1d27
--- /dev/null
+++ b/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testSameProcedure.map.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ~ 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.
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
+<data-map xmlns="http://cayenne.apache.org/schema/10/modelMap"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://cayenne.apache.org/schema/10/modelMap https://cayenne.apache.org/schema/10/modelMap.xsd"
+ project-version="10">
+ <procedure name="PROC" schema="SCHEMA_01"/>
+ <db-entity name="TABLE1" schema="SCHEMA_01">
+ <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" isMandatory="true" length="10"/>
+ <db-attribute name="T1_NAME" type="VARCHAR" length="45"/>
+ </db-entity>
+ <obj-entity name="Table1" className="Table1" dbEntityName="TABLE1">
+ <obj-attribute name="t1Name" type="java.lang.String" db-attribute-path="T1_NAME"/>
+ </obj-entity>
+</data-map>
\ No newline at end of file
diff --git a/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testSameProcedure.map.xml-result b/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testSameProcedure.map.xml-result
new file mode 100644
index 0000000..6a1d2d9
--- /dev/null
+++ b/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testSameProcedure.map.xml-result
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ~ 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.
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
+<data-map xmlns="http://cayenne.apache.org/schema/10/modelMap"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://cayenne.apache.org/schema/10/modelMap https://cayenne.apache.org/schema/10/modelMap.xsd"
+ project-version="10">
+ <procedure name="PROC" schema="SCHEMA_01">
+ <procedure-parameter name="TEST" type="INTEGER" length="4" direction="in"/>
+ <procedure-parameter name="TOTAL" type="DECIMAL" length="24" precision="2" direction="out"/>
+ </procedure>
+ <db-entity name="TABLE2" schema="SCHEMA_01">
+ <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" isMandatory="true" length="10"/>
+ <db-attribute name="T1_NAME" type="VARCHAR" length="45"/>
+ </db-entity>
+ <obj-entity name="Table2" className="Table2" dbEntityName="TABLE2">
+ <obj-attribute name="t1Name" type="java.lang.String" db-attribute-path="T1_NAME"/>
+ </obj-entity>
+</data-map>
\ No newline at end of file
diff --git a/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testSameProcedure.sql b/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testSameProcedure.sql
new file mode 100644
index 0000000..55fb31e
--- /dev/null
+++ b/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testSameProcedure.sql
@@ -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
+--
+-- 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.
+
+CREATE SCHEMA schema_01;
+SET SCHEMA schema_01;
+
+CREATE TABLE schema_01.table2 (
+ id INTEGER NOT NULL,
+ t1_name VARCHAR (45),
+ PRIMARY KEY (id)
+);
+
+CREATE PROCEDURE PROC(IN test INTEGER, OUT TOTAL DECIMAL(10,2))
+PARAMETER STYLE JAVA READS SQL DATA LANGUAGE JAVA EXTERNAL NAME
+'org.apache.cayenne.test'
\ No newline at end of file
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/ModelerDbImportAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/ModelerDbImportAction.java
index 1dd536f..f7b1236 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/ModelerDbImportAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/ModelerDbImportAction.java
@@ -19,8 +19,7 @@
package org.apache.cayenne.modeler.dialog.db.load;
-import javax.swing.JDialog;
-import javax.swing.JOptionPane;
+import javax.swing.*;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.io.IOException;
@@ -37,10 +36,8 @@ import org.apache.cayenne.dbsync.merge.factory.MergerTokenFactoryProvider;
import org.apache.cayenne.dbsync.merge.token.MergerToken;
import org.apache.cayenne.dbsync.reverse.dbimport.DbImportConfiguration;
import org.apache.cayenne.dbsync.reverse.dbimport.DefaultDbImportAction;
-import org.apache.cayenne.dbsync.reverse.filters.FiltersConfig;
import org.apache.cayenne.di.Inject;
import org.apache.cayenne.map.DataMap;
-import org.apache.cayenne.map.Procedure;
import org.apache.cayenne.modeler.Application;
import org.apache.cayenne.modeler.editor.DbImportController;
import org.apache.cayenne.project.ProjectSaver;
@@ -145,14 +142,6 @@ public class ModelerDbImportAction extends DefaultDbImportAction {
}
@Override
- protected void addMessageToLogs(String message, List<String> messages) {
- String formattedMessage = String.format(" %-20s", message);
- messages.add(formattedMessage);
- resultDialog.addRowToOutput(formattedMessage, targetMap);
- hasTokenToMerge = true;
- }
-
- @Override
protected void logMessages(List<String> messages) {
super.logMessages(messages);
if (!hasTokenToMerge) {
@@ -170,30 +159,4 @@ public class ModelerDbImportAction extends DefaultDbImportAction {
protected DataMap existingTargetMap(DbImportConfiguration configuration) throws IOException {
return targetMap;
}
-
- @Override
- protected boolean checkIncludedProcedures(DataMap loadedDataMap, FiltersConfig filters) {
- Collection<Procedure> procedures = loadedDataMap.getProcedures();
- boolean hasProceduresToMerge = false;
- for (Procedure procedure : procedures) {
- if(!hasChangesForProcedure(procedure)) {
- continue;
- }
- hasProceduresToMerge = true;
- Procedure oldProcedure = targetMap.getProcedure(procedure.getName());
-
- String msg = "";
- if (oldProcedure != null) {
- msg = "Replace procedure " + procedure.getName();
- } else {
- msg = "Create procedure " + procedure.getName();
- }
- String formattedMessage = String.format(" %-20s", msg);
- resultDialog.addRowToOutput(formattedMessage, targetMap);
- }
- if(!hasTokenToMerge && !hasProceduresToMerge) {
- resultDialog.addMsg(targetMap);
- }
- return hasProceduresToMerge;
- }
}
\ No newline at end of file