http://git-wip-us.apache.org/repos/asf/cayenne/blob/2ead78b6/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/xml/DbImportSaverDelegate.java ---------------------------------------------------------------------- diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/xml/DbImportSaverDelegate.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/xml/DbImportSaverDelegate.java new file mode 100644 index 0000000..dceb3ee --- /dev/null +++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/xml/DbImportSaverDelegate.java @@ -0,0 +1,46 @@ +/***************************************************************** + * 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.xml; + +import org.apache.cayenne.configuration.xml.DataChannelMetaData; +import org.apache.cayenne.dbsync.reverse.dbimport.ReverseEngineering; +import org.apache.cayenne.map.DataMap; +import org.apache.cayenne.project.extension.BaseSaverDelegate; + +/** + * @since 4.1 + */ +class DbImportSaverDelegate extends BaseSaverDelegate { + + private DataChannelMetaData metaData; + + DbImportSaverDelegate(DataChannelMetaData metaData) { + this.metaData = metaData; + } + + @Override + public Void visitDataMap(DataMap dataMap) { + ReverseEngineering reverseEngineering = metaData.get(dataMap, ReverseEngineering.class); + if(reverseEngineering != null) { + encoder.nested(reverseEngineering, getParentDelegate()); + } + return null; + } +}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/2ead78b6/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/xml/IncludeTableHandler.java ---------------------------------------------------------------------- diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/xml/IncludeTableHandler.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/xml/IncludeTableHandler.java new file mode 100644 index 0000000..edac2b8 --- /dev/null +++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/xml/IncludeTableHandler.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 + * + * 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.xml; + +import org.apache.cayenne.configuration.xml.NamespaceAwareNestedTagHandler; +import org.apache.cayenne.dbsync.reverse.dbimport.ExcludeColumn; +import org.apache.cayenne.dbsync.reverse.dbimport.FilterContainer; +import org.apache.cayenne.dbsync.reverse.dbimport.IncludeColumn; +import org.apache.cayenne.dbsync.reverse.dbimport.IncludeTable; +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; + +/** + * @since 4.1 + */ +class IncludeTableHandler extends NamespaceAwareNestedTagHandler { + + private static final String INCLUDE_TABLE_TAG = "includeTable"; + private static final String INCLUDE_TABLE_NAME_TAG = "name"; + private static final String INCLUDE_COLUMN_TAG = "includeColumn"; + private static final String EXCLUDE_COLUMN_TAG = "excludeColumn"; + + private IncludeTable includeTable; + + private FilterContainer entity; + + IncludeTableHandler(NamespaceAwareNestedTagHandler parentHandler,FilterContainer entity) { + super(parentHandler); + this.entity = entity; + } + + @Override + protected boolean processElement(String namespaceURI, String localName, Attributes attributes) throws SAXException { + switch (localName) { + case INCLUDE_TABLE_TAG: + return true; + } + + return false; + } + + @Override + protected void processCharData(String localName, String data) { + switch (localName) { + case INCLUDE_TABLE_NAME_TAG: + createIncludeTableName(data); + break; + case INCLUDE_COLUMN_TAG: + createIncludeColumn(data); + break; + case EXCLUDE_COLUMN_TAG: + createExcludeColumn(data); + break; + } + } + + private void createExcludeColumn(String excludeColumn) { + if (excludeColumn.trim().length() == 0) { + return; + } + + if (includeTable != null) { + includeTable.addExcludeColumn(new ExcludeColumn(excludeColumn)); + } + } + + private void createIncludeColumn(String includeColumn) { + if (includeColumn.trim().length() == 0) { + return; + } + + if (includeTable != null) { + includeTable.addIncludeColumn(new IncludeColumn(includeColumn)); + } + } + + private void createIncludeTableName(String includeTableName) { + if (includeTableName.trim().length() == 0) { + return; + } + + if (includeTable == null) { + createIncludeTable(); + } + + if (includeTable != null) { + includeTable.setName(includeTableName); + } + } + + private void createIncludeTable() { + includeTable = new IncludeTable(); + entity.addIncludeTable(includeTable); + } +} http://git-wip-us.apache.org/repos/asf/cayenne/blob/2ead78b6/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/xml/SchemaHandler.java ---------------------------------------------------------------------- diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/xml/SchemaHandler.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/xml/SchemaHandler.java new file mode 100644 index 0000000..7476789 --- /dev/null +++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/xml/SchemaHandler.java @@ -0,0 +1,186 @@ +/***************************************************************** + * 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.xml; + +import org.apache.cayenne.configuration.xml.NamespaceAwareNestedTagHandler; +import org.apache.cayenne.dbsync.reverse.dbimport.ExcludeProcedure; +import org.apache.cayenne.dbsync.reverse.dbimport.IncludeTable; +import org.apache.cayenne.dbsync.reverse.dbimport.Schema; +import org.apache.cayenne.dbsync.reverse.dbimport.SchemaContainer; +import org.apache.cayenne.dbsync.reverse.dbimport.IncludeProcedure; +import org.apache.cayenne.dbsync.reverse.dbimport.ExcludeTable; +import org.apache.cayenne.dbsync.reverse.dbimport.IncludeColumn; +import org.apache.cayenne.dbsync.reverse.dbimport.ExcludeColumn; +import org.xml.sax.Attributes; +import org.xml.sax.ContentHandler; +import org.xml.sax.SAXException; + +/** + * @since 4.1 + */ +class SchemaHandler extends NamespaceAwareNestedTagHandler { + + private static final String SCHEMA_TAG = "schema"; + private static final String SCHEMA_NAME_TAG = "name"; + private static final String INCLUDE_TABLE_TAG = "includeTable"; + private static final String EXCLUDE_TABLE_TAG = "excludeTable"; + private static final String INCLUDE_COLUMN_TAG = "includeColumn"; + private static final String EXCLUDE_COLUMN_TAG = "excludeColumn"; + private static final String INCLUDE_PROCEDURE_TAG = "includeProcedure"; + private static final String EXCLUDE_PROCEDURE_TAG = "excludeProcedure"; + + private SchemaContainer entity; + + private Schema schema; + + SchemaHandler(NamespaceAwareNestedTagHandler parentHandler, SchemaContainer entity) { + super(parentHandler); + this.entity = entity; + } + + @Override + protected boolean processElement(String namespaceURI, String localName, Attributes attributes) throws SAXException { + switch (localName) { + case SCHEMA_TAG: + createSchema(); + return true; + } + + return false; + } + + @Override + protected ContentHandler createChildTagHandler(String namespaceURI, String localName, + String qName, Attributes attributes) { + + if (namespaceURI.equals(targetNamespace)) { + switch (localName) { + case INCLUDE_TABLE_TAG: + return new IncludeTableHandler(this, schema); + } + } + + return super.createChildTagHandler(namespaceURI, localName, qName, attributes); + } + + @Override + protected void processCharData(String localName, String data) { + switch (localName) { + case INCLUDE_TABLE_TAG: + createIncludeTable(data); + break; + case SCHEMA_NAME_TAG: + createSchemaName(data); + break; + case EXCLUDE_TABLE_TAG: + createExcludeTable(data); + break; + case INCLUDE_COLUMN_TAG: + createIncludeColumn(data); + break; + case EXCLUDE_COLUMN_TAG: + createExcludeColumn(data); + break; + case INCLUDE_PROCEDURE_TAG: + createIncludeProcedure(data); + break; + case EXCLUDE_PROCEDURE_TAG: + createExcludeProcedure(data); + break; + } + } + + private void createIncludeTable(String includeTableData) { + if (includeTableData.trim().length() == 0) { + return; + } + + if (schema != null) { + IncludeTable includeTable = new IncludeTable(); + includeTable.setName(includeTableData); + schema.addIncludeTable(includeTable); + } + } + + private void createExcludeProcedure(String excludeProcedure) { + if (excludeProcedure.trim().length() == 0) { + return; + } + + if (schema != null) { + schema.addExcludeProcedure(new ExcludeProcedure(excludeProcedure)); + } + } + + private void createIncludeProcedure(String includeProcedure) { + if (includeProcedure.trim().length() == 0) { + return; + } + + if (schema != null) { + schema.addIncludeProcedure(new IncludeProcedure(includeProcedure)); + } + } + + private void createExcludeColumn(String excludeColumn) { + if (excludeColumn.trim().length() == 0) { + return; + } + + if (schema != null) { + schema.addExcludeColumn(new ExcludeColumn(excludeColumn)); + } + } + + private void createIncludeColumn(String includeColumn) { + if (includeColumn.trim().length() == 0) { + return; + } + + if (schema != null) { + schema.addIncludeColumn(new IncludeColumn(includeColumn)); + } + } + + private void createExcludeTable(String excludeTable) { + if (excludeTable.trim().length() == 0) { + return; + } + + if (schema != null) { + schema.addExcludeTable(new ExcludeTable(excludeTable)); + } + } + + private void createSchemaName(String schemaName) { + if (schemaName.trim().length() == 0) { + return; + } + + if (schema != null) { + schema.setName(schemaName); + } + } + + private void createSchema() { + schema = new Schema(); + entity.addSchema(schema); + } +} http://git-wip-us.apache.org/repos/asf/cayenne/blob/2ead78b6/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/builders/DbAttributeBuilder.java ---------------------------------------------------------------------- diff --git a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/builders/DbAttributeBuilder.java b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/builders/DbAttributeBuilder.java index 094a904..5acb389 100644 --- a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/builders/DbAttributeBuilder.java +++ b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/builders/DbAttributeBuilder.java @@ -100,7 +100,7 @@ public class DbAttributeBuilder extends DefaultBuilder<DbAttribute> { @Override public DbAttribute build() { - if (Util.isEmptyString(obj.getName())) { + if (Util.isEmptyString((obj.getName()))) { name(); } http://git-wip-us.apache.org/repos/asf/cayenne/blob/2ead78b6/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbimport/DefaultDbImportActionTest.java ---------------------------------------------------------------------- diff --git a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbimport/DefaultDbImportActionTest.java b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbimport/DefaultDbImportActionTest.java index 364f770..910a8e0 100644 --- a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbimport/DefaultDbImportActionTest.java +++ b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbimport/DefaultDbImportActionTest.java @@ -24,6 +24,7 @@ import org.apache.cayenne.configuration.DataMapLoader; import org.apache.cayenne.configuration.DataNodeDescriptor; import org.apache.cayenne.configuration.server.DataSourceFactory; import org.apache.cayenne.configuration.server.DbAdapterFactory; +import org.apache.cayenne.configuration.xml.DataChannelMetaData; import org.apache.cayenne.dba.DbAdapter; import org.apache.cayenne.dbsync.DbSyncModule; import org.apache.cayenne.dbsync.filter.NamePatternMatcher; @@ -297,13 +298,13 @@ public class DefaultDbImportActionTest { DataSourceFactory dataSourceFactory = mock(DataSourceFactory.class); DataSource mock = mock(DataSource.class); when(dataSourceFactory.getDataSource((DataNodeDescriptor)any())).thenReturn(mock); - + DataChannelMetaData metaData = mock(DataChannelMetaData.class); MergerTokenFactoryProvider mergerTokenFactoryProvider = mock(MergerTokenFactoryProvider.class); when(mergerTokenFactoryProvider.get((DbAdapter)any())).thenReturn(new DefaultMergerTokenFactory()); DataChannelDescriptorLoader dataChannelDescriptorLoader = mock(DataChannelDescriptorLoader.class); - return new DefaultDbImportAction(log, projectSaver, dataSourceFactory, adapterFactory, mapLoader, mergerTokenFactoryProvider, dataChannelDescriptorLoader) { + return new DefaultDbImportAction(log, projectSaver, dataSourceFactory, adapterFactory, mapLoader, mergerTokenFactoryProvider, dataChannelDescriptorLoader, metaData) { protected DbLoader createDbLoader(DbAdapter adapter, Connection connection, http://git-wip-us.apache.org/repos/asf/cayenne/blob/2ead78b6/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/filters/FiltersConfigBuilderTest.java ---------------------------------------------------------------------- diff --git a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/filters/FiltersConfigBuilderTest.java b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/filters/FiltersConfigBuilderTest.java index 4ce8ef3..6aba638 100644 --- a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/filters/FiltersConfigBuilderTest.java +++ b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/filters/FiltersConfigBuilderTest.java @@ -54,7 +54,8 @@ public class FiltersConfigBuilderTest { " IncludeTable: table2\n" + " IncludeColumn: includeColumn\n" + " IncludeTable: table3\n" + - " IncludeColumn: includeColumn\n", engineering.toString()); + " IncludeColumn: includeColumn\n\n" + + " Use primitives", engineering.toString()); } @Test @@ -81,7 +82,8 @@ public class FiltersConfigBuilderTest { " Schema: schemaName02\n" + " IncludeTable: table1\n" + " IncludeColumn: includeColumn\n" + - " ExcludeTable: table2\n", engineering.toString()); + " ExcludeTable: table2\n\n"+ + " Use primitives", engineering.toString()); } @Test @@ -106,7 +108,8 @@ public class FiltersConfigBuilderTest { " Schema: null\n" + " IncludeTable: null\n" + " ExcludeColumn: calculated_.*\n" + - " ExcludeTable: SYS_.*\n", engineering.toString()); + " ExcludeTable: SYS_.*\n\n" + + " Use primitives", engineering.toString()); } @Test @@ -120,7 +123,8 @@ public class FiltersConfigBuilderTest { "ReverseEngineering: \n" + " Catalog: null\n" + " Schema: s\n" + - " IncludeTable: null\n", engineering.toString()); + " IncludeTable: null\n\n" + + " Use primitives", engineering.toString()); } @Test @@ -203,7 +207,8 @@ public class FiltersConfigBuilderTest { " IncludeColumn: c_xxx1\n" + " ExcludeColumn: c_xxx2\n" + " IncludeProcedure: p7\n" + - " ExcludeProcedure: p8\n", engineering.toString()); + " ExcludeProcedure: p8\n\n" + + " Use primitives", engineering.toString()); builder.compact(); @@ -259,7 +264,8 @@ public class FiltersConfigBuilderTest { " IncludeProcedure: p5\n" + " IncludeProcedure: p7\n" + " ExcludeProcedure: p6\n" + - " ExcludeProcedure: p8\n", engineering.toString()); + " ExcludeProcedure: p8\n\n" + + " Use primitives", engineering.toString()); } protected IncludeTable includeTable(String name, String incCol, String excCol) { http://git-wip-us.apache.org/repos/asf/cayenne/blob/2ead78b6/cayenne-di/src/main/java/org/apache/cayenne/di/BindingBuilder.java ---------------------------------------------------------------------- diff --git a/cayenne-di/src/main/java/org/apache/cayenne/di/BindingBuilder.java b/cayenne-di/src/main/java/org/apache/cayenne/di/BindingBuilder.java index 49edbe0..4aa2c59 100644 --- a/cayenne-di/src/main/java/org/apache/cayenne/di/BindingBuilder.java +++ b/cayenne-di/src/main/java/org/apache/cayenne/di/BindingBuilder.java @@ -18,9 +18,6 @@ ****************************************************************/ package org.apache.cayenne.di; -import org.apache.cayenne.di.DIRuntimeException; - - /** * A binding builder that helps with fluent binding creation. * http://git-wip-us.apache.org/repos/asf/cayenne/blob/2ead78b6/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/DbImportTask.java ---------------------------------------------------------------------- diff --git a/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/DbImportTask.java b/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/DbImportTask.java index e5a9bd1..d4e50a4 100644 --- a/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/DbImportTask.java +++ b/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/DbImportTask.java @@ -82,8 +82,8 @@ public class DbImportTask extends BaseCayenneTask { DbImportConfiguration config = createConfig(); Injector injector = DIBootstrap.createInjector(new DbSyncModule(), new ToolsModule(getLogger()), new DbImportModule()); - DbImportConfigurationValidator validator = new DbImportConfigurationValidator(reverseEngineering, config, injector); + try { validator.validate(); } catch (Exception ex) { @@ -109,25 +109,27 @@ public class DbImportTask extends BaseCayenneTask { DbImportConfiguration createConfig() { reverseEngineering = config.toReverseEngineering(); - DbImportConfiguration config = new DbImportConfiguration(); + if (reverseEngineering.getCatalogs().size() == 0 && reverseEngineering.isEmptyContainer()) { + config.setUseDataMapReverseEngineering(true); + } config.setAdapter(adapter); - config.setDefaultPackage(reverseEngineering.getDefaultPackage()); config.setDriver(dataSource.getDriver()); - config.setFiltersConfig(new FiltersConfigBuilder(reverseEngineering).build()); - config.setForceDataMapCatalog(reverseEngineering.isForceDataMapCatalog()); - config.setForceDataMapSchema(reverseEngineering.isForceDataMapSchema()); config.setLogger(getLogger()); - config.setMeaningfulPkTables(reverseEngineering.getMeaningfulPkTables()); - config.setNamingStrategy(reverseEngineering.getNamingStrategy()); config.setPassword(dataSource.getPassword()); + config.setTargetDataMap(getDataMapFile()); + config.setUrl(dataSource.getUrl()); + config.setUsername(dataSource.getUsername()); config.setSkipRelationshipsLoading(reverseEngineering.getSkipRelationshipsLoading()); config.setSkipPrimaryKeyLoading(reverseEngineering.getSkipPrimaryKeyLoading()); config.setStripFromTableNames(reverseEngineering.getStripFromTableNames()); config.setTableTypes(reverseEngineering.getTableTypes()); - config.setTargetDataMap(getDataMapFile()); - config.setUrl(dataSource.getUrl()); - config.setUsername(dataSource.getUsername()); + config.setMeaningfulPkTables(reverseEngineering.getMeaningfulPkTables()); + config.setNamingStrategy(reverseEngineering.getNamingStrategy()); + config.setFiltersConfig(new FiltersConfigBuilder(reverseEngineering).build()); + config.setForceDataMapCatalog(reverseEngineering.isForceDataMapCatalog()); + config.setForceDataMapSchema(reverseEngineering.isForceDataMapSchema()); + config.setDefaultPackage(reverseEngineering.getDefaultPackage()); config.setUsePrimitives(reverseEngineering.isUsePrimitives()); config.setUseJava7Types(reverseEngineering.isUseJava7Types()); config.setCayenneProject(cayenneProject); http://git-wip-us.apache.org/repos/asf/cayenne/blob/2ead78b6/cayenne-server/src/main/java/org/apache/cayenne/CayenneDataObject.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/main/java/org/apache/cayenne/CayenneDataObject.java b/cayenne-server/src/main/java/org/apache/cayenne/CayenneDataObject.java index 3cad849..512f712 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/CayenneDataObject.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/CayenneDataObject.java @@ -47,6 +47,8 @@ public class CayenneDataObject extends BaseDataObject { private static final long serialVersionUID = -313743913882350400L; + protected long snapshotVersion = DEFAULT_VERSION; + protected Map<String, Object> values = new HashMap<>(); @Override http://git-wip-us.apache.org/repos/asf/cayenne/blob/2ead78b6/maven-plugins/cayenne-maven-plugin/src/main/java/org/apache/cayenne/tools/DbImporterMojo.java ---------------------------------------------------------------------- diff --git a/maven-plugins/cayenne-maven-plugin/src/main/java/org/apache/cayenne/tools/DbImporterMojo.java b/maven-plugins/cayenne-maven-plugin/src/main/java/org/apache/cayenne/tools/DbImporterMojo.java index e6422c5..7da60af 100644 --- a/maven-plugins/cayenne-maven-plugin/src/main/java/org/apache/cayenne/tools/DbImporterMojo.java +++ b/maven-plugins/cayenne-maven-plugin/src/main/java/org/apache/cayenne/tools/DbImporterMojo.java @@ -122,6 +122,9 @@ public class DbImporterMojo extends AbstractMojo { DbImportConfiguration createConfig(Logger logger) { DbImportConfiguration config = new DbImportConfiguration(); + if (dbImportConfig.getCatalogs().size() == 0 && dbImportConfig.isEmptyContainer()) { + config.setUseDataMapReverseEngineering(true); + } config.setAdapter(adapter); config.setDefaultPackage(dbImportConfig.getDefaultPackage()); config.setDriver(dataSource.getDriver()); http://git-wip-us.apache.org/repos/asf/cayenne/blob/2ead78b6/maven-plugins/cayenne-maven-plugin/src/test/java/org/apache/cayenne/tools/CayenneGeneratorMojoTest.java ---------------------------------------------------------------------- diff --git a/maven-plugins/cayenne-maven-plugin/src/test/java/org/apache/cayenne/tools/CayenneGeneratorMojoTest.java b/maven-plugins/cayenne-maven-plugin/src/test/java/org/apache/cayenne/tools/CayenneGeneratorMojoTest.java index 734e93c..40338fb 100644 --- a/maven-plugins/cayenne-maven-plugin/src/test/java/org/apache/cayenne/tools/CayenneGeneratorMojoTest.java +++ b/maven-plugins/cayenne-maven-plugin/src/test/java/org/apache/cayenne/tools/CayenneGeneratorMojoTest.java @@ -31,31 +31,22 @@ public class CayenneGeneratorMojoTest extends AbstractMojoTestCase { assertNotNull(pom); assertTrue(pom.exists()); - CayenneGeneratorMojo myMojo = (CayenneGeneratorMojo) lookupMojo("cgen", - pom); + CayenneGeneratorMojo myMojo = (CayenneGeneratorMojo) lookupMojo("cgen", pom); assertNotNull(myMojo); myMojo.execute(); - File superTestEntity = new File( - "target/cayenneGeneratedClasses/superPkg/_TestEntity.txt"); - File testEntity = new File( - "target/cayenneGeneratedClasses/pack/TestEntity.txt"); + File superTestEntity = new File("target/cayenneGeneratedClasses/superPkg/_TestEntity.txt"); + File testEntity = new File("target/cayenneGeneratedClasses/pack/TestEntity.txt"); - File superEmbeddable = new File( - "target/cayenneGeneratedClasses/superPkg/_Embeddable.txt"); - File embeddable = new File( - "target/cayenneGeneratedClasses/pack/Embeddable.txt"); + File superEmbeddable = new File("target/cayenneGeneratedClasses/superPkg/_Embeddable.txt"); + File embeddable = new File("target/cayenneGeneratedClasses/pack/Embeddable.txt"); - File superNotIncludedEntity = new File( - "target/cayenneGeneratedClasses/pack/_NotIncludedEntity.txt"); + File superNotIncludedEntity = new File("target/cayenneGeneratedClasses/pack/_NotIncludedEntity.txt"); - File notIncludedEntity = new File( - "target/cayenneGeneratedClasses/pack/NotIncludedEntity.txt"); + File notIncludedEntity = new File("target/cayenneGeneratedClasses/pack/NotIncludedEntity.txt"); - File superExcludedEntity = new File( - "target/cayenneGeneratedClasses/pack/_TestExcludedEntity.txt"); - File excludedEntity = new File( - "target/cayenneGeneratedClasses/pack/TestExcludedEntity.txt"); + File superExcludedEntity = new File("target/cayenneGeneratedClasses/pack/_TestExcludedEntity.txt"); + File excludedEntity = new File("target/cayenneGeneratedClasses/pack/TestExcludedEntity.txt"); assertTrue(superTestEntity.exists()); assertTrue(testEntity.exists()); @@ -73,6 +64,5 @@ public class CayenneGeneratorMojoTest extends AbstractMojoTestCase { assertTrue(content.contains("public static final Property<List<TestRelEntity>> ADDITIONAL_REL = Property.create(\"additionalRel\", List.class);")); assertTrue(content.contains("public void addToAdditionalRel(TestRelEntity obj)")); assertTrue(content.contains("public void removeFromAdditionalRel(TestRelEntity obj)")); - } } http://git-wip-us.apache.org/repos/asf/cayenne/blob/2ead78b6/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testImportWithoutChanges-pom.xml ---------------------------------------------------------------------- diff --git a/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testImportWithoutChanges-pom.xml b/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testImportWithoutChanges-pom.xml index 69831e9..56995b3 100644 --- a/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testImportWithoutChanges-pom.xml +++ b/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testImportWithoutChanges-pom.xml @@ -21,7 +21,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <name>DbImporterMojo Test1</name> + <name>DbImporterMojo Test1</name> <build> <plugins> http://git-wip-us.apache.org/repos/asf/cayenne/blob/2ead78b6/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testInheritance-pom.xml ---------------------------------------------------------------------- diff --git a/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testInheritance-pom.xml b/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testInheritance-pom.xml index 37c18d4..27fca57 100644 --- a/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testInheritance-pom.xml +++ b/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimport/testInheritance-pom.xml @@ -21,7 +21,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <name>DbImporterMojo Test1</name> + <name>DbImporterMojo Test1</name> <build> <plugins> http://git-wip-us.apache.org/repos/asf/cayenne/blob/2ead78b6/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimporter-pom1.xml ---------------------------------------------------------------------- diff --git a/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimporter-pom1.xml b/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimporter-pom1.xml index 3bb6207..76bd257 100644 --- a/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimporter-pom1.xml +++ b/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimporter-pom1.xml @@ -21,7 +21,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <name>DbImporterMojo Test1</name> + <name>DbImporterMojo Test1</name> <build> <plugins> http://git-wip-us.apache.org/repos/asf/cayenne/blob/2ead78b6/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimporter-pom3.xml ---------------------------------------------------------------------- diff --git a/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimporter-pom3.xml b/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimporter-pom3.xml index be64020..04bc4ff 100644 --- a/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimporter-pom3.xml +++ b/maven-plugins/cayenne-maven-plugin/src/test/resources/org/apache/cayenne/tools/dbimporter-pom3.xml @@ -21,7 +21,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <name>DbImporterMojo Test1</name> + <name>DbImporterMojo Test1</name> <build> <plugins> http://git-wip-us.apache.org/repos/asf/cayenne/blob/2ead78b6/modeler/cayenne-modeler/pom.xml ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/pom.xml b/modeler/cayenne-modeler/pom.xml index ef96ba8..794ebd3 100644 --- a/modeler/cayenne-modeler/pom.xml +++ b/modeler/cayenne-modeler/pom.xml @@ -20,8 +20,20 @@ <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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> - - <parent> + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-compiler-plugin</artifactId> + <configuration> + <source>1.8</source> + <target>1.8</target> + </configuration> + </plugin> + </plugins> + </build> + + <parent> <groupId>org.apache.cayenne.modeler</groupId> <artifactId>cayenne-modeler-parent</artifactId> <version>4.1.M2-SNAPSHOT</version> http://git-wip-us.apache.org/repos/asf/cayenne/blob/2ead78b6/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerFrame.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerFrame.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerFrame.java index 52cfcd3..ffc02fa 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerFrame.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerFrame.java @@ -232,7 +232,6 @@ public class CayenneModelerFrame extends JFrame implements DataNodeDisplayListen projectMenu.addSeparator(); projectMenu.add(getAction(RemoveAction.class).buildMenu()); - toolMenu.add(getAction(ReverseEngineeringAction.class).buildMenu()); toolMenu.add(getAction(InferRelationshipsAction.class).buildMenu()); toolMenu.add(getAction(ImportEOModelAction.class).buildMenu()); toolMenu.addSeparator(); http://git-wip-us.apache.org/repos/asf/cayenne/blob/2ead78b6/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/AddCatalogAction.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/AddCatalogAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/AddCatalogAction.java new file mode 100644 index 0000000..50ebe74 --- /dev/null +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/AddCatalogAction.java @@ -0,0 +1,91 @@ +/***************************************************************** + * 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.modeler.action; + +import org.apache.cayenne.dbsync.reverse.dbimport.Catalog; +import org.apache.cayenne.dbsync.reverse.dbimport.ReverseEngineering; +import org.apache.cayenne.modeler.Application; +import org.apache.cayenne.modeler.dialog.db.load.DbImportTreeNode; +import org.apache.cayenne.modeler.undo.DbImportTreeUndoableEdit; + +import javax.swing.tree.TreePath; +import java.awt.event.ActionEvent; + +/** + * @since 4.1 + */ +public class AddCatalogAction extends TreeManipulationAction { + + private static final String ACTION_NAME = "Add Catalog"; + private static final String ICON_NAME = "icon-dbi-catalog.png"; + + AddCatalogAction(Application application) { + super(ACTION_NAME, application); + insertableNodeClass = Catalog.class; + } + + public String getIconName() { + return ICON_NAME; + } + + @Override + public void performAction(ActionEvent e) { + boolean updateSelected = false; + tree.stopEditing(); + String name = insertableNodeName != null ? insertableNodeName : EMPTY_NAME; + if (tree.getSelectionPath() == null) { + TreePath root = new TreePath(tree.getRootNode()); + tree.setSelectionPath(root); + } + if (foundNode == null) { + selectedElement = tree.getSelectedNode(); + } else { + selectedElement = foundNode; + } + parentElement = (DbImportTreeNode) selectedElement.getParent(); + if (parentElement == null) { + parentElement = selectedElement; + } + Catalog newCatalog = new Catalog(name); + ReverseEngineering reverseEngineeringOldCopy = new ReverseEngineering(tree.getReverseEngineering()); + if (reverseEngineeringIsEmpty()) { + tree.getRootNode().removeAllChildren(); + } + if (canBeInserted(selectedElement)) { + ((ReverseEngineering) selectedElement.getUserObject()).addCatalog(newCatalog); + selectedElement.add(new DbImportTreeNode(newCatalog)); + updateSelected = true; + } else if (canInsert()) { + ((ReverseEngineering) parentElement.getUserObject()).addCatalog(newCatalog); + parentElement.add(new DbImportTreeNode(newCatalog)); + updateSelected = false; + } + if (!isMultipleAction) { + updateAfterInsert(updateSelected); + } + ReverseEngineering reverseEngineeringNewCopy = new ReverseEngineering(tree.getReverseEngineering()); + if ((!isMultipleAction) && (!insertableNodeName.equals(EMPTY_NAME))) { + DbImportTreeUndoableEdit undoableEdit = new DbImportTreeUndoableEdit( + reverseEngineeringOldCopy, reverseEngineeringNewCopy, tree, getProjectController() + ); + getProjectController().getApplication().getUndoManager().addEdit(undoableEdit); + } + } +} http://git-wip-us.apache.org/repos/asf/cayenne/blob/2ead78b6/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/AddExcludeColumnAction.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/AddExcludeColumnAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/AddExcludeColumnAction.java new file mode 100644 index 0000000..d36c7e2 --- /dev/null +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/AddExcludeColumnAction.java @@ -0,0 +1,41 @@ +/***************************************************************** + * 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.modeler.action; + +import org.apache.cayenne.dbsync.reverse.dbimport.ExcludeColumn; +import org.apache.cayenne.modeler.Application; + +/** + * @since 4.1 + */ +public class AddExcludeColumnAction extends AddPatternParamAction { + + private static final String ACTION_NAME = "Add Exclude Column"; + private static final String ICON_NAME = "icon-dbi-excludeColumn.png"; + + public AddExcludeColumnAction(Application application) { + super(ACTION_NAME, application); + insertableNodeClass = ExcludeColumn.class; + } + + public String getIconName() { + return ICON_NAME; + } +} http://git-wip-us.apache.org/repos/asf/cayenne/blob/2ead78b6/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/AddExcludeProcedureAction.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/AddExcludeProcedureAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/AddExcludeProcedureAction.java new file mode 100644 index 0000000..09ec188 --- /dev/null +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/AddExcludeProcedureAction.java @@ -0,0 +1,41 @@ +/***************************************************************** + * 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.modeler.action; + +import org.apache.cayenne.dbsync.reverse.dbimport.ExcludeProcedure; +import org.apache.cayenne.modeler.Application; + +/** + * @since 4.1 + */ +public class AddExcludeProcedureAction extends AddPatternParamAction { + + private static final String ACTION_NAME = "Add Exclude Procedure"; + private static final String ICON_NAME = "icon-dbi-excludeProcedure.png"; + + public AddExcludeProcedureAction(Application application) { + super(ACTION_NAME, application); + insertableNodeClass = ExcludeProcedure.class; + } + + public String getIconName() { + return ICON_NAME; + } +} http://git-wip-us.apache.org/repos/asf/cayenne/blob/2ead78b6/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/AddExcludeTableAction.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/AddExcludeTableAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/AddExcludeTableAction.java new file mode 100644 index 0000000..58baef2 --- /dev/null +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/AddExcludeTableAction.java @@ -0,0 +1,41 @@ +/***************************************************************** + * 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.modeler.action; + +import org.apache.cayenne.dbsync.reverse.dbimport.ExcludeTable; +import org.apache.cayenne.modeler.Application; + +/** + * @since 4.1 + */ +public class AddExcludeTableAction extends AddPatternParamAction { + + private static final String ACTION_NAME = "Add Exclude Table"; + private static final String ICON_NAME = "icon-dbi-excludeTable.png"; + + public AddExcludeTableAction(Application application) { + super(ACTION_NAME, application); + insertableNodeClass = ExcludeTable.class; + } + + public String getIconName() { + return ICON_NAME; + } +} http://git-wip-us.apache.org/repos/asf/cayenne/blob/2ead78b6/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/AddIncludeColumnAction.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/AddIncludeColumnAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/AddIncludeColumnAction.java new file mode 100644 index 0000000..e2b27b1 --- /dev/null +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/AddIncludeColumnAction.java @@ -0,0 +1,41 @@ +/***************************************************************** + * 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.modeler.action; + +import org.apache.cayenne.dbsync.reverse.dbimport.IncludeColumn; +import org.apache.cayenne.modeler.Application; + +/** + * @since 4.1 + */ +public class AddIncludeColumnAction extends AddPatternParamAction { + + private static final String ACTION_NAME = "Add Include Column"; + private static final String ICON_NAME = "icon-dbi-includeColumn.png"; + + public AddIncludeColumnAction(Application application) { + super(ACTION_NAME, application); + insertableNodeClass = IncludeColumn.class; + } + + public String getIconName() { + return ICON_NAME; + } +} http://git-wip-us.apache.org/repos/asf/cayenne/blob/2ead78b6/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/AddIncludeProcedureAction.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/AddIncludeProcedureAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/AddIncludeProcedureAction.java new file mode 100644 index 0000000..6a04a63 --- /dev/null +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/AddIncludeProcedureAction.java @@ -0,0 +1,41 @@ +/***************************************************************** + * 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.modeler.action; + +import org.apache.cayenne.dbsync.reverse.dbimport.IncludeProcedure; +import org.apache.cayenne.modeler.Application; + +/** + * @since 4.1 + */ +public class AddIncludeProcedureAction extends AddPatternParamAction { + + private static final String ACTION_NAME = "Add Include Procedure"; + private static final String ICON_NAME = "icon-dbi-includeProcedure.png"; + + public AddIncludeProcedureAction(Application application) { + super(ACTION_NAME, application); + insertableNodeClass = IncludeProcedure.class; + } + + public String getIconName() { + return ICON_NAME; + } +} http://git-wip-us.apache.org/repos/asf/cayenne/blob/2ead78b6/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/AddIncludeTableAction.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/AddIncludeTableAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/AddIncludeTableAction.java new file mode 100644 index 0000000..136a166 --- /dev/null +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/AddIncludeTableAction.java @@ -0,0 +1,92 @@ +/***************************************************************** + * 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.modeler.action; + +import org.apache.cayenne.dbsync.reverse.dbimport.FilterContainer; +import org.apache.cayenne.dbsync.reverse.dbimport.IncludeTable; +import org.apache.cayenne.dbsync.reverse.dbimport.ReverseEngineering; +import org.apache.cayenne.modeler.Application; +import org.apache.cayenne.modeler.dialog.db.load.DbImportTreeNode; +import org.apache.cayenne.modeler.undo.DbImportTreeUndoableEdit; + +import javax.swing.tree.TreePath; +import java.awt.event.ActionEvent; + +/** + * @since 4.1 + */ +public class AddIncludeTableAction extends TreeManipulationAction { + + private static final String ACTION_NAME = "Add Include Table"; + private static final String ICON_NAME = "icon-dbi-includeTable.png"; + + AddIncludeTableAction(Application application) { + super(ACTION_NAME, application); + insertableNodeClass = IncludeTable.class; + } + + public String getIconName() { + return ICON_NAME; + } + + @Override + public void performAction(ActionEvent e) { + boolean updateSelected = false; + tree.stopEditing(); + String name = insertableNodeName != null ? insertableNodeName : EMPTY_NAME; + if (tree.getSelectionPath() == null) { + TreePath root = new TreePath(tree.getRootNode()); + tree.setSelectionPath(root); + } + if (foundNode == null) { + selectedElement = tree.getSelectedNode(); + } else { + selectedElement = foundNode; + } + parentElement = (DbImportTreeNode) selectedElement.getParent(); + ReverseEngineering reverseEngineeringOldCopy = new ReverseEngineering(tree.getReverseEngineering()); + IncludeTable newTable = new IncludeTable(name); + if (reverseEngineeringIsEmpty()) { + tree.getRootNode().removeAllChildren(); + } + if (canBeInserted(selectedElement)) { + ((FilterContainer) selectedElement.getUserObject()).addIncludeTable(newTable); + selectedElement.add(new DbImportTreeNode(newTable)); + updateSelected = true; + } else { + if (parentElement == null) { + parentElement = tree.getRootNode(); + } + ((FilterContainer) parentElement.getUserObject()).addIncludeTable(newTable); + parentElement.add(new DbImportTreeNode(newTable)); + updateSelected = false; + } + if (!isMultipleAction) { + updateAfterInsert(updateSelected); + } + ReverseEngineering reverseEngineeringNewCopy = new ReverseEngineering(tree.getReverseEngineering()); + if ((!isMultipleAction) && (!insertableNodeName.equals(EMPTY_NAME))) { + DbImportTreeUndoableEdit undoableEdit = new DbImportTreeUndoableEdit( + reverseEngineeringOldCopy, reverseEngineeringNewCopy, tree, getProjectController() + ); + getProjectController().getApplication().getUndoManager().addEdit(undoableEdit); + } + } +} http://git-wip-us.apache.org/repos/asf/cayenne/blob/2ead78b6/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/AddPatternParamAction.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/AddPatternParamAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/AddPatternParamAction.java new file mode 100644 index 0000000..78479fc --- /dev/null +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/AddPatternParamAction.java @@ -0,0 +1,140 @@ +/***************************************************************** + * 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.modeler.action; + +import org.apache.cayenne.dbsync.reverse.dbimport.ExcludeColumn; +import org.apache.cayenne.dbsync.reverse.dbimport.ExcludeProcedure; +import org.apache.cayenne.dbsync.reverse.dbimport.ExcludeTable; +import org.apache.cayenne.dbsync.reverse.dbimport.FilterContainer; +import org.apache.cayenne.dbsync.reverse.dbimport.IncludeColumn; +import org.apache.cayenne.dbsync.reverse.dbimport.IncludeProcedure; +import org.apache.cayenne.dbsync.reverse.dbimport.IncludeTable; +import org.apache.cayenne.dbsync.reverse.dbimport.PatternParam; +import org.apache.cayenne.dbsync.reverse.dbimport.ReverseEngineering; +import org.apache.cayenne.modeler.Application; +import org.apache.cayenne.modeler.dialog.db.load.DbImportTreeNode; +import org.apache.cayenne.modeler.undo.DbImportTreeUndoableEdit; + +import javax.swing.tree.TreePath; +import java.awt.event.ActionEvent; + +/** + * @since 4.1 + */ +public abstract class AddPatternParamAction extends TreeManipulationAction { + + private Class paramClass; + + AddPatternParamAction(String name, Application application) { + super(name, application); + } + + private void addPatternParamToContainer(Class paramClass, Object selectedObject, String name, DbImportTreeNode node) { + FilterContainer container = (FilterContainer) selectedObject; + PatternParam element = null; + if (paramClass == ExcludeTable.class) { + element = new ExcludeTable(name); + container.addExcludeTable((ExcludeTable) element); + } else if (paramClass == IncludeColumn.class) { + element = new IncludeColumn(name); + container.addIncludeColumn((IncludeColumn) element); + } else if (paramClass == ExcludeColumn.class) { + element = new ExcludeColumn(name); + container.addExcludeColumn((ExcludeColumn) element); + } else if (paramClass == IncludeProcedure.class) { + element = new IncludeProcedure(name); + container.addIncludeProcedure((IncludeProcedure) element); + } else if (paramClass == ExcludeProcedure.class) { + element = new ExcludeProcedure(name); + container.addExcludeProcedure((ExcludeProcedure) element); + } + node.add(new DbImportTreeNode(element)); + } + + private void addPatternParamToIncludeTable(Class paramClass, Object selectedObject, String name, DbImportTreeNode node) { + IncludeTable includeTable = (IncludeTable) selectedObject; + PatternParam element = null; + if (paramClass == IncludeColumn.class) { + element = new IncludeColumn(name); + includeTable.addIncludeColumn((IncludeColumn) element); + + } else if (paramClass == ExcludeColumn.class) { + element = new ExcludeColumn(name); + includeTable.addExcludeColumn((ExcludeColumn) element); + } + node.add(new DbImportTreeNode(element)); + } + + @Override + public void performAction(ActionEvent e) { + tree.stopEditing(); + String name = insertableNodeName != null ? insertableNodeName : EMPTY_NAME; + boolean updateSelected; + if (tree.getSelectionPath() == null) { + TreePath root = new TreePath(tree.getRootNode()); + tree.setSelectionPath(root); + } + if (foundNode == null) { + selectedElement = tree.getSelectedNode(); + } else { + selectedElement = foundNode; + } + parentElement = (DbImportTreeNode) selectedElement.getParent(); + Object selectedObject; + ReverseEngineering reverseEngineeringOldCopy = new ReverseEngineering(tree.getReverseEngineering()); + if (reverseEngineeringIsEmpty()) { + tree.getRootNode().removeAllChildren(); + } + if (canBeInserted(selectedElement)) { + selectedObject = selectedElement.getUserObject(); + if (selectedObject instanceof FilterContainer) { + addPatternParamToContainer(paramClass, selectedObject, name, selectedElement); + } else if (selectedObject instanceof IncludeTable) { + addPatternParamToIncludeTable(paramClass, selectedObject, name, selectedElement); + } + updateSelected = true; + } else { + if (parentElement == null) { + parentElement = tree.getRootNode(); + } + selectedObject = parentElement.getUserObject(); + if (selectedObject instanceof FilterContainer) { + addPatternParamToContainer(paramClass, selectedObject, name, parentElement); + } else if (selectedObject instanceof IncludeTable) { + addPatternParamToIncludeTable(paramClass, selectedObject, name, parentElement); + } + updateSelected = false; + } + if (!isMultipleAction) { + updateAfterInsert(updateSelected); + } + ReverseEngineering reverseEngineeringNewCopy = new ReverseEngineering(tree.getReverseEngineering()); + if ((!isMultipleAction) && (!insertableNodeName.equals(EMPTY_NAME))) { + DbImportTreeUndoableEdit undoableEdit = new DbImportTreeUndoableEdit( + reverseEngineeringOldCopy, reverseEngineeringNewCopy, tree, getProjectController() + ); + getProjectController().getApplication().getUndoManager().addEdit(undoableEdit); + } + } + + public void setParamClass(Class paramClass) { + this.paramClass = paramClass; + } +} http://git-wip-us.apache.org/repos/asf/cayenne/blob/2ead78b6/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/AddSchemaAction.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/AddSchemaAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/AddSchemaAction.java new file mode 100644 index 0000000..817b17c --- /dev/null +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/AddSchemaAction.java @@ -0,0 +1,97 @@ +/***************************************************************** + * 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.modeler.action; + +import org.apache.cayenne.dbsync.reverse.dbimport.Catalog; +import org.apache.cayenne.dbsync.reverse.dbimport.ReverseEngineering; +import org.apache.cayenne.dbsync.reverse.dbimport.Schema; +import org.apache.cayenne.dbsync.reverse.dbimport.SchemaContainer; +import org.apache.cayenne.modeler.Application; +import org.apache.cayenne.modeler.dialog.db.load.DbImportTreeNode; +import org.apache.cayenne.modeler.undo.DbImportTreeUndoableEdit; + +import javax.swing.tree.TreePath; +import java.awt.event.ActionEvent; + +/** + * @since 4.1 + */ +public class AddSchemaAction extends TreeManipulationAction { + + private static final String ACTION_NAME = "Add Schema"; + private static final String ICON_NAME = "icon-dbi-schema.png"; + + AddSchemaAction(Application application) { + super(ACTION_NAME, application); + insertableNodeClass = Schema.class; + } + + public String getIconName() { + return ICON_NAME; + } + + @Override + public void performAction(ActionEvent e) { + boolean updateSelected = false; + tree.stopEditing(); + String name = insertableNodeName != null ? insertableNodeName : EMPTY_NAME; + if (tree.getSelectionPath() == null) { + TreePath root = new TreePath(tree.getRootNode()); + tree.setSelectionPath(root); + } + if (foundNode == null) { + selectedElement = tree.getSelectedNode(); + } else { + selectedElement = foundNode; + } + parentElement = (DbImportTreeNode) selectedElement.getParent(); + if (parentElement == null) { + parentElement = tree.getRootNode(); + } + Schema newSchema = new Schema(name); + ReverseEngineering reverseEngineeringOldCopy = new ReverseEngineering(tree.getReverseEngineering()); + if (reverseEngineeringIsEmpty()) { + tree.getRootNode().removeAllChildren(); + } + if (canBeInserted(selectedElement)) { + ((SchemaContainer) selectedElement.getUserObject()).addSchema(newSchema); + selectedElement.add(new DbImportTreeNode(newSchema)); + updateSelected = true; + } else if (canInsert()) { + if (parentElement.isReverseEngineering()) { + ((ReverseEngineering) parentElement.getUserObject()).addSchema(newSchema); + } else { + ((Catalog) parentElement.getUserObject()).addSchema(newSchema); + } + parentElement.add(new DbImportTreeNode(newSchema)); + updateSelected = false; + } + if (!isMultipleAction) { + updateAfterInsert(updateSelected); + } + ReverseEngineering reverseEngineeringNewCopy = new ReverseEngineering(tree.getReverseEngineering()); + if ((!isMultipleAction) && (!insertableNodeName.equals(EMPTY_NAME))) { + DbImportTreeUndoableEdit undoableEdit = new DbImportTreeUndoableEdit( + reverseEngineeringOldCopy, reverseEngineeringNewCopy, tree, getProjectController() + ); + getProjectController().getApplication().getUndoManager().addEdit(undoableEdit); + } + } +} http://git-wip-us.apache.org/repos/asf/cayenne/blob/2ead78b6/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DBWizardAction.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DBWizardAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DBWizardAction.java index cd5de6f..0fbaac3 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DBWizardAction.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DBWizardAction.java @@ -25,7 +25,7 @@ import java.util.Collections; import java.util.List; import javax.swing.JOptionPane; - + import org.apache.cayenne.dbsync.reverse.dbload.DbLoader; import org.apache.cayenne.modeler.Application; import org.apache.cayenne.modeler.dialog.db.DataSourceWizard; @@ -44,6 +44,7 @@ public abstract class DBWizardAction<T extends DbActionOptionsDialog> extends Ca protected DataSourceWizard dataSourceWizardDialog(String title) { // connect DataSourceWizard connectWizard = new DataSourceWizard(getProjectController(), title); + connectWizard.setProjectController(getProjectController()); if (!connectWizard.startupAction()) { return null; } @@ -51,7 +52,7 @@ public abstract class DBWizardAction<T extends DbActionOptionsDialog> extends Ca return connectWizard; } - protected abstract T createDialog(Collection<String> catalogs, Collection<String> schemas, String currentCatalog, String currentSchema); + protected abstract T createDialog(Collection<String> catalogs, Collection<String> schemas, String currentCatalog, String currentSchema, int command); protected T loaderOptionDialog(DataSourceWizard connectWizard) { @@ -81,16 +82,24 @@ public abstract class DBWizardAction<T extends DbActionOptionsDialog> extends Ca JOptionPane.ERROR_MESSAGE); return null; } - - final T optionsDialog = createDialog(catalogs, schemas, currentCatalog, currentSchema); + T optionsDialog = getStartDialog(catalogs, schemas, currentCatalog, currentSchema); optionsDialog.setVisible(true); - if (optionsDialog.getChoice() == DbActionOptionsDialog.SELECT) { - return optionsDialog; + while ((optionsDialog.getChoice() != DbActionOptionsDialog.CANCEL)) { + if (optionsDialog.getChoice() == DbActionOptionsDialog.SELECT) { + return optionsDialog; + } + optionsDialog = createDialog(catalogs, schemas, currentCatalog, currentSchema, optionsDialog.getChoice()); + optionsDialog.setVisible(true); } return null; } + private T getStartDialog(List<String> catalogs, List<String> schemas, String currentCatalog, String currentSchema) { + int command = DbActionOptionsDialog.SELECT; + return createDialog(catalogs, schemas, currentCatalog, currentSchema, command); + } + @SuppressWarnings("unchecked") private List<String> getCatalogs(DataSourceWizard connectWizard, Connection connection) throws Exception { if(!connectWizard.getAdapter().supportsCatalogsOnReverseEngineering()) { http://git-wip-us.apache.org/repos/asf/cayenne/blob/2ead78b6/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DbEntityCounterpartAction.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DbEntityCounterpartAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DbEntityCounterpartAction.java index 700b951..b3755cd 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DbEntityCounterpartAction.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DbEntityCounterpartAction.java @@ -21,6 +21,9 @@ package org.apache.cayenne.modeler.action; import java.util.Iterator; +import javax.swing.tree.TreePath; + +import org.apache.cayenne.configuration.DataChannelDescriptor; import org.apache.cayenne.map.DbEntity; import org.apache.cayenne.map.Entity; import org.apache.cayenne.map.ObjEntity; http://git-wip-us.apache.org/repos/asf/cayenne/blob/2ead78b6/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DefaultActionManager.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DefaultActionManager.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DefaultActionManager.java index fa427f8..a626365 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DefaultActionManager.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DefaultActionManager.java @@ -98,6 +98,20 @@ public class DefaultActionManager implements ActionManager { registerAction(new ImportEOModelAction(application)); registerAction(new GenerateDBAction(application)); registerAction(new MigrateAction(application)); + registerAction(new AddSchemaAction(application)).setAlwaysOn(true); + registerAction(new AddCatalogAction(application)).setAlwaysOn(true); + registerAction(new AddIncludeTableAction(application)).setAlwaysOn(true); + registerAction(new AddExcludeTableAction(application)).setAlwaysOn(true); + registerAction(new AddIncludeColumnAction(application)).setAlwaysOn(true); + registerAction(new AddExcludeColumnAction(application)).setAlwaysOn(true); + registerAction(new AddIncludeProcedureAction(application)).setAlwaysOn(true); + registerAction(new AddExcludeProcedureAction(application)).setAlwaysOn(true); + registerAction(new GetDbConnectionAction(application)).setAlwaysOn(true); + registerAction(new EditNodeAction(application)).setAlwaysOn(true); + registerAction(new DeleteNodeAction(application)).setAlwaysOn(true); + registerAction(new MoveImportNodeAction(application)).setAlwaysOn(true); + registerAction(new LoadDbSchemaAction(application)).setAlwaysOn(true); + registerAction(new MoveInvertNodeAction(application)).setAlwaysOn(true); registerAction(new AboutAction(application)).setAlwaysOn(true); registerAction(new DocumentationAction(application)).setAlwaysOn(true); registerAction(new ConfigurePreferencesAction(application)).setAlwaysOn(true); http://git-wip-us.apache.org/repos/asf/cayenne/blob/2ead78b6/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DeleteNodeAction.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DeleteNodeAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DeleteNodeAction.java new file mode 100644 index 0000000..4645ee7 --- /dev/null +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DeleteNodeAction.java @@ -0,0 +1,175 @@ +/***************************************************************** + * 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.modeler.action; + +import org.apache.cayenne.dbsync.reverse.dbimport.Catalog; +import org.apache.cayenne.dbsync.reverse.dbimport.ExcludeColumn; +import org.apache.cayenne.dbsync.reverse.dbimport.ExcludeProcedure; +import org.apache.cayenne.dbsync.reverse.dbimport.ExcludeTable; +import org.apache.cayenne.dbsync.reverse.dbimport.FilterContainer; +import org.apache.cayenne.dbsync.reverse.dbimport.IncludeColumn; +import org.apache.cayenne.dbsync.reverse.dbimport.IncludeProcedure; +import org.apache.cayenne.dbsync.reverse.dbimport.IncludeTable; +import org.apache.cayenne.dbsync.reverse.dbimport.PatternParam; +import org.apache.cayenne.dbsync.reverse.dbimport.ReverseEngineering; +import org.apache.cayenne.dbsync.reverse.dbimport.Schema; +import org.apache.cayenne.modeler.Application; +import org.apache.cayenne.modeler.dialog.db.load.DbImportTreeNode; +import org.apache.cayenne.modeler.editor.DbImportModel; +import org.apache.cayenne.modeler.editor.DbImportView; +import org.apache.cayenne.modeler.editor.DraggableTreePanel; +import org.apache.cayenne.modeler.undo.DbImportTreeUndoableEdit; + +import javax.swing.tree.DefaultTreeModel; +import javax.swing.tree.TreePath; +import java.awt.event.ActionEvent; +import java.util.ArrayList; + +/** + * @since 4.1 + */ +public class DeleteNodeAction extends TreeManipulationAction { + + private static final String ACTION_NAME = "Delete"; + private static final String ICON_NAME = "icon-trash.png"; + + private DraggableTreePanel panel; + + DeleteNodeAction(Application application) { + super(ACTION_NAME, application); + } + + public String getIconName() { + return ICON_NAME; + } + + private void removePatternParams(FilterContainer container, Object selectedObject) { + container.getExcludeTables().remove(selectedObject); + container.getIncludeColumns().remove(selectedObject); + container.getExcludeColumns().remove(selectedObject); + container.getIncludeProcedures().remove(selectedObject); + container.getExcludeProcedures().remove(selectedObject); + } + + private void deleteChilds(Catalog catalog) { + Object selectedObject = this.selectedElement.getUserObject(); + if (selectedObject instanceof Schema) { + catalog.getSchemas().remove(selectedObject); + } else if (selectedObject instanceof IncludeTable) { + catalog.getIncludeTables().remove(selectedObject); + } else if (selectedObject instanceof PatternParam) { + removePatternParams(catalog, selectedObject); + } + } + + private void deleteChilds(Schema schema) { + Object selectedObject = this.selectedElement.getUserObject(); + if (selectedObject instanceof IncludeTable) { + schema.getIncludeTables().remove(selectedObject); + } else if (selectedObject instanceof PatternParam) { + removePatternParams(schema, selectedObject); + } + } + + private void deleteChilds(IncludeTable includeTable) { + Object selectedObject = this.selectedElement.getUserObject(); + includeTable.getIncludeColumns().remove(selectedObject); + includeTable.getExcludeColumns().remove(selectedObject); + } + + private void deleteChilds(ReverseEngineering reverseEngineering) { + Object selectedObject = this.selectedElement.getUserObject(); + if (selectedObject instanceof Catalog) { + reverseEngineering.getCatalogs().remove(selectedObject); + } else if (selectedObject instanceof Schema) { + reverseEngineering.getSchemas().remove(selectedObject); + } else if (selectedObject instanceof IncludeTable) { + reverseEngineering.getIncludeTables().remove(selectedObject); + } else if (selectedObject instanceof ExcludeTable) { + reverseEngineering.getExcludeTables().remove(selectedObject); + } else if (selectedObject instanceof IncludeColumn) { + reverseEngineering.getIncludeColumns().remove(selectedObject); + } else if (selectedObject instanceof ExcludeColumn) { + reverseEngineering.getExcludeColumns().remove(selectedObject); + } else if (selectedObject instanceof IncludeProcedure) { + reverseEngineering.getIncludeProcedures().remove(selectedObject); + } else if (selectedObject instanceof ExcludeProcedure) { + reverseEngineering.getExcludeProcedures().remove(selectedObject); + } + } + + private void updateParentChilds() { + DbImportModel model = (DbImportModel) tree.getModel(); + model.removeNodeFromParent(selectedElement); + getProjectController().setDirty(true); + model.reload(parentElement); + } + + @Override + public void performAction(ActionEvent e) { + tree.stopEditing(); + final TreePath[] paths = tree.getSelectionPaths(); + final DbImportView rootParent = ((DbImportView) panel.getParent().getParent()); + rootParent.getLoadDbSchemaButton().setEnabled(false); + rootParent.getReverseEngineeringProgress().setVisible(true); + if (paths != null) { + ReverseEngineering reverseEngineeringOldCopy = new ReverseEngineering(tree.getReverseEngineering()); + rootParent.lockToolbarButtons(); + for (TreePath path : paths) { + selectedElement = (DbImportTreeNode) path.getLastPathComponent(); + parentElement = (DbImportTreeNode) selectedElement.getParent(); + if (parentElement != null) { + Object parentUserObject = parentElement.getUserObject(); + if (parentUserObject instanceof ReverseEngineering) { + ReverseEngineering reverseEngineering = (ReverseEngineering) parentUserObject; + deleteChilds(reverseEngineering); + } else if (parentUserObject instanceof Catalog) { + Catalog catalog = (Catalog) parentUserObject; + deleteChilds(catalog); + } else if (parentUserObject instanceof Schema) { + Schema schema = (Schema) parentUserObject; + deleteChilds(schema); + } else if (parentUserObject instanceof IncludeTable) { + IncludeTable includeTable = (IncludeTable) parentUserObject; + deleteChilds(includeTable); + } + } + } + if (paths.length > 1) { + getProjectController().setDirty(true); + ArrayList<DbImportTreeNode> expandList = tree.getTreeExpandList(); + tree.translateReverseEngineeringToTree(tree.getReverseEngineering(), false); + tree.expandTree(expandList); + } else { + updateParentChilds(); + } + ReverseEngineering reverseEngineeringNewCopy = new ReverseEngineering(tree.getReverseEngineering()); + getProjectController().getApplication().getUndoManager().addEdit( + new DbImportTreeUndoableEdit(reverseEngineeringOldCopy, reverseEngineeringNewCopy, tree, getProjectController()) + ); + rootParent.getLoadDbSchemaButton().setEnabled(true); + rootParent.getReverseEngineeringProgress().setVisible(false); + } + } + + public void setPanel(DraggableTreePanel panel) { + this.panel = panel; + } +} http://git-wip-us.apache.org/repos/asf/cayenne/blob/2ead78b6/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/EditNodeAction.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/EditNodeAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/EditNodeAction.java new file mode 100644 index 0000000..ac0fa46 --- /dev/null +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/EditNodeAction.java @@ -0,0 +1,93 @@ +/***************************************************************** + * 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.modeler.action; + +import org.apache.cayenne.dbsync.reverse.dbimport.FilterContainer; +import org.apache.cayenne.dbsync.reverse.dbimport.PatternParam; +import org.apache.cayenne.dbsync.reverse.dbimport.ReverseEngineering; +import org.apache.cayenne.modeler.Application; +import org.apache.cayenne.modeler.dialog.db.load.DbImportTreeNode; +import org.apache.cayenne.modeler.undo.DbImportTreeUndoableEdit; +import org.apache.cayenne.util.Util; + +import java.awt.event.ActionEvent; + +/** + * @since 4.1 + */ +public class EditNodeAction extends TreeManipulationAction { + + private static final String ACTION_NAME = "Rename"; + private static final String ICON_NAME = "icon-edit.png"; + + private String actionName; + + EditNodeAction(Application application) { + super(ACTION_NAME, application); + } + + public String getIconName() { + return ICON_NAME; + } + + @Override + public void performAction(ActionEvent e) { + if (tree.isEditing()) { + return; + } + if (e != null) { + if (tree.getSelectionPath() != null) { + tree.startEditingAtPath(tree.getSelectionPath()); + } + } + if (actionName == null) { + return; + } + if (tree.getSelectionPath() != null) { + selectedElement = tree.getSelectedNode(); + parentElement = (DbImportTreeNode) selectedElement.getParent(); + if (parentElement != null) { + Object selectedObject = selectedElement.getUserObject(); + ReverseEngineering reverseEngineeringOldCopy = new ReverseEngineering(tree.getReverseEngineering()); + if (!Util.isEmptyString(actionName)) { + if (selectedObject instanceof FilterContainer) { + ((FilterContainer) selectedObject).setName(actionName); + } else if (selectedObject instanceof PatternParam) { + ((PatternParam) selectedObject).setPattern(actionName); + } + updateModel(true); + selectedElement = null; + } + ReverseEngineering reverseEngineeringNewCopy = new ReverseEngineering(tree.getReverseEngineering()); + if (!actionName.equals(EMPTY_NAME)) { + DbImportTreeUndoableEdit undoableEdit = new DbImportTreeUndoableEdit( + reverseEngineeringOldCopy, reverseEngineeringNewCopy, tree, getProjectController() + ); + getProjectController().getApplication().getUndoManager().addEdit(undoableEdit); + } + } + } + } + + public void setActionName(String name) { + this.actionName = name; + } + +}