You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2016/09/29 17:38:48 UTC
[02/15] cayenne git commit: CAY-2116 Split schema synchronization
code in a separate module
http://git-wip-us.apache.org/repos/asf/cayenne/blob/2f7b1d53/cayenne-server/src/test/java/org/apache/cayenne/merge/TokensReversTest.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/merge/TokensReversTest.java b/cayenne-server/src/test/java/org/apache/cayenne/merge/TokensReversTest.java
deleted file mode 100644
index e13531e..0000000
--- a/cayenne-server/src/test/java/org/apache/cayenne/merge/TokensReversTest.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * 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.merge;
-
-import org.apache.cayenne.dba.hsqldb.HSQLMergerFactory;
-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.junit.Assert;
-import org.junit.Test;
-
-import java.util.Collections;
-
-import static org.apache.cayenne.merge.builders.ObjectMother.dbAttr;
-import static org.apache.cayenne.merge.builders.ObjectMother.dbEntity;
-
-/**
- * @since 4.0.
- */
-public class TokensReversTest {
-
- @Test
- public void testReverses() {
- DbAttribute attr = dbAttr().build();
- DbEntity entity = dbEntity().attributes(attr).build();
- DbRelationship rel = new DbRelationship("rel");
- rel.setSourceEntity(entity);
- rel.addJoin(new DbJoin(rel, attr.getName(), "dontKnow"));
-
- test(factory().createAddColumnToDb(entity, attr));
- test(factory().createAddColumnToModel(entity, attr));
- test(factory().createDropColumnToDb(entity, attr));
- test(factory().createDropColumnToModel(entity, attr));
-
- test(factory().createAddRelationshipToDb(entity, rel));
- test(factory().createAddRelationshipToModel(entity, rel));
- test(factory().createDropRelationshipToDb(entity, rel));
- test(factory().createDropRelationshipToModel(entity, rel));
-
- test(factory().createCreateTableToDb(entity));
- test(factory().createCreateTableToModel(entity));
- test(factory().createDropTableToDb(entity));
- test(factory().createDropTableToModel(entity));
-
- test(factory().createSetAllowNullToDb(entity, attr));
- test(factory().createSetAllowNullToModel(entity, attr));
- test(factory().createSetNotNullToDb(entity, attr));
- test(factory().createSetNotNullToModel(entity, attr));
-
- DbAttribute attr2 = dbAttr().build();
- test(factory().createSetColumnTypeToDb(entity, attr, attr2));
- test(factory().createSetColumnTypeToModel(entity, attr, attr2));
-
- test(factory().createSetPrimaryKeyToDb(entity, Collections.singleton(attr), Collections.singleton(attr2), "PK"));
- test(factory().createSetPrimaryKeyToModel(entity, Collections.singleton(attr), Collections.singleton(attr2), "PK"));
-
- test(factory().createSetValueForNullToDb(entity, attr, new DefaultValueForNullProvider()));
- }
-
- private void test(MergerToken token1) {
- MergerToken token2 = token1.createReverse(factory()).createReverse(factory());
-
- Assert.assertEquals(token1.getTokenName(), token2.getTokenName());
- Assert.assertEquals(token1.getTokenValue(), token2.getTokenValue());
- Assert.assertEquals(token1.getDirection(), token2.getDirection());
- }
-
- private MergerFactory factory() {
- return new HSQLMergerFactory();
- }
-}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/2f7b1d53/cayenne-server/src/test/java/org/apache/cayenne/merge/TokensToModelExecution.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/merge/TokensToModelExecution.java b/cayenne-server/src/test/java/org/apache/cayenne/merge/TokensToModelExecution.java
deleted file mode 100644
index 094914b..0000000
--- a/cayenne-server/src/test/java/org/apache/cayenne/merge/TokensToModelExecution.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * 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.merge;
-
-import org.apache.cayenne.access.DataNode;
-import org.apache.cayenne.map.DataMap;
-import org.apache.cayenne.map.DbAttribute;
-import org.apache.cayenne.map.DbEntity;
-import org.junit.Test;
-
-import static org.apache.cayenne.merge.builders.ObjectMother.dataMap;
-import static org.apache.cayenne.merge.builders.ObjectMother.dbAttr;
-import static org.apache.cayenne.merge.builders.ObjectMother.dbEntity;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-/**
- * @since 4.0.
- */
-public class TokensToModelExecution {
-
- @Test
- public void testCreateAndDropTable() throws Exception {
- DbEntity entity = dbEntity().build();
-
- DataMap dataMap = dataMap().build();
- assertTrue(dataMap.getDbEntityMap().isEmpty());
- assertTrue(dataMap.getObjEntityMap().isEmpty());
-
- MergerContext context = MergerContext.builder(dataMap).dataNode(new DataNode()).build();
- factory().createCreateTableToModel(entity).execute(context);
-
- assertEquals(1, dataMap.getDbEntityMap().size());
- assertEquals(1, dataMap.getObjEntities().size());
- assertEquals(entity, dataMap.getDbEntity(entity.getName()));
-
- factory().createDropTableToModel(entity).execute(context);
- assertTrue(dataMap.getDbEntityMap().isEmpty());
- assertTrue(dataMap.getObjEntityMap().isEmpty());
- }
-
- @Test
- public void testCreateAndDropColumn() throws Exception {
- DbAttribute attr = dbAttr("attr").build();
- DbEntity entity = dbEntity().build();
-
- DataMap dataMap = dataMap().with(entity).build();
- assertEquals(1, dataMap.getDbEntityMap().size());
- assertTrue(dataMap.getObjEntityMap().isEmpty());
-
- MergerContext context = MergerContext.builder(dataMap).dataNode(new DataNode()).build();
- factory().createAddColumnToModel(entity, attr).execute(context);
-
- assertEquals(1, dataMap.getDbEntityMap().size());
- assertEquals(1, entity.getAttributes().size());
- assertEquals(attr, entity.getAttribute(attr.getName()));
-
- factory().createDropColumnToModel(entity, attr).execute(context);
- assertEquals(1, dataMap.getDbEntityMap().size());
- assertTrue(entity.getAttributes().isEmpty());
- assertTrue(dataMap.getObjEntityMap().isEmpty());
- }
-
- private MergerFactory factory() {
- return new MergerFactory();
- }
-}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/2f7b1d53/cayenne-server/src/test/java/org/apache/cayenne/merge/ValueForNullIT.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/merge/ValueForNullIT.java b/cayenne-server/src/test/java/org/apache/cayenne/merge/ValueForNullIT.java
deleted file mode 100644
index fb43eb3..0000000
--- a/cayenne-server/src/test/java/org/apache/cayenne/merge/ValueForNullIT.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * 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.merge;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-
-import java.sql.Types;
-import java.util.List;
-
-import junit.framework.AssertionFailedError;
-
-import org.apache.cayenne.DataObject;
-import org.apache.cayenne.Persistent;
-import org.apache.cayenne.access.DataContext;
-import org.apache.cayenne.access.jdbc.SQLParameterBinding;
-import org.apache.cayenne.di.Inject;
-import org.apache.cayenne.exp.Expression;
-import org.apache.cayenne.exp.ExpressionFactory;
-import org.apache.cayenne.map.DbAttribute;
-import org.apache.cayenne.map.DbEntity;
-import org.apache.cayenne.map.ObjAttribute;
-import org.apache.cayenne.map.ObjEntity;
-import org.apache.cayenne.query.SelectQuery;
-import org.junit.Test;
-
-public class ValueForNullIT extends MergeCase {
-
- private static final String DEFAULT_VALUE_STRING = "DEFSTRING";
-
- @Inject
- private DataContext context;
-
- @Test
- public void test() throws Exception {
- DbEntity dbEntity = map.getDbEntity("PAINTING");
- assertNotNull(dbEntity);
- ObjEntity objEntity = map.getObjEntity("Painting");
- assertNotNull(objEntity);
-
- // insert some rows before adding "not null" column
- final int nrows = 10;
- for (int i = 0; i < nrows; i++) {
- DataObject o = (DataObject) context.newObject("Painting");
- o.writeProperty("paintingTitle", "ptitle" + i);
- }
- context.commitChanges();
-
- // create and add new column to model and db
- DbAttribute column = new DbAttribute("NEWCOL2", Types.VARCHAR, dbEntity);
-
- column.setMandatory(false);
- column.setMaxLength(10);
- dbEntity.addAttribute(column);
- assertTrue(dbEntity.getAttributes().contains(column));
- assertEquals(column, dbEntity.getAttribute(column.getName()));
- assertTokensAndExecute(1, 0);
-
- // need obj attr to be able to query
- ObjAttribute objAttr = new ObjAttribute("newcol2");
- objAttr.setDbAttributePath(column.getName());
- objEntity.addAttribute(objAttr);
-
- // check that is was merged
- assertTokensAndExecute(0, 0);
-
- // set not null
- column.setMandatory(true);
-
- // merge to db
- assertTokensAndExecute(2, 0);
-
- // check that is was merged
- assertTokensAndExecute(0, 0);
-
- // check values for null
- Expression qual = ExpressionFactory.matchExp(objAttr.getName(), DEFAULT_VALUE_STRING);
- SelectQuery query = new SelectQuery("Painting", qual);
- List<Persistent> rows = context.performQuery(query);
- assertEquals(nrows, rows.size());
-
- // clean up
- dbEntity.removeAttribute(column.getName());
- assertTokensAndExecute(1, 0);
- assertTokensAndExecute(0, 0);
- }
-
- @Override
- protected DbMerger createMerger(MergerFactory mergerFactory, final ValueForNullProvider valueForNullProvider) {
- return super.createMerger(mergerFactory, new DefaultValueForNullProvider() {
-
- @Override
- protected SQLParameterBinding get(DbEntity entity, DbAttribute column) {
- int type = column.getType();
- switch (type) {
- case Types.VARCHAR:
- return new SQLParameterBinding(DEFAULT_VALUE_STRING, type, -1);
- default:
- throw new AssertionFailedError("should not get here");
- }
- }
-
- @Override
- public boolean hasValueFor(DbEntity entity, DbAttribute column) {
- return true;
- }
-
- });
- }
-
-}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/2f7b1d53/cayenne-server/src/test/java/org/apache/cayenne/merge/builders/Builder.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/merge/builders/Builder.java b/cayenne-server/src/test/java/org/apache/cayenne/merge/builders/Builder.java
deleted file mode 100644
index fd379c7..0000000
--- a/cayenne-server/src/test/java/org/apache/cayenne/merge/builders/Builder.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * 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.merge.builders;
-
-/**
- * Base interface for all domain builders
- *
- * @since 4.0.
- */
-public interface Builder<T> {
-
- /**
- * Build valid object. If some required data omitted it will be filled with random data.
- * */
- T build();
-
- /**
- * Build valid object and add some optional fields randomly.
- * */
- T random();
-
-}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/2f7b1d53/cayenne-server/src/test/java/org/apache/cayenne/merge/builders/DataMapBuilder.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/merge/builders/DataMapBuilder.java b/cayenne-server/src/test/java/org/apache/cayenne/merge/builders/DataMapBuilder.java
deleted file mode 100644
index 662ba2a..0000000
--- a/cayenne-server/src/test/java/org/apache/cayenne/merge/builders/DataMapBuilder.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * 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.merge.builders;
-
-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;
-
-/**
- * @since 4.0.
- */
-public class DataMapBuilder extends DefaultBuilder<DataMap> {
-
- public DataMapBuilder() {
- this(new DataMap());
- }
-
- public DataMapBuilder(DataMap dataMap) {
- super(dataMap);
- }
-
- public DataMapBuilder with(DbEntity ... entities) {
- for (DbEntity entity : entities) {
- obj.addDbEntity(entity);
- }
-
- return this;
- }
-
- public DataMapBuilder with(DbEntityBuilder ... entities) {
- for (DbEntityBuilder entity : entities) {
- obj.addDbEntity(entity.build());
- }
-
- return this;
- }
-
- public DataMapBuilder withDbEntities(int count) {
- for (int i = 0; i < count; i++) {
- obj.addDbEntity(ObjectMother.dbEntity().random());
- }
-
- return this;
- }
-
- public DataMapBuilder with(ObjEntity... entities) {
- for (ObjEntity entity : entities) {
- obj.addObjEntity(entity);
- }
-
- return this;
- }
-
- public DataMapBuilder with(ObjEntityBuilder ... entities) {
- for (ObjEntityBuilder entity : entities) {
- obj.addObjEntity(entity.build());
- }
-
- return this;
- }
-
- public DataMapBuilder withObjEntities(int count) {
- for (int i = 0; i < count; i++) {
- obj.addObjEntity(ObjectMother.objEntity().random());
- }
-
- return this;
- }
-
- public DataMapBuilder join(String from, String to) {
- return join(null, from, to);
- }
-
- public DataMapBuilder join(String name, String from, String to) {
- String[] fromSplit = from.split("\\.");
- DbEntity fromEntity = obj.getDbEntity(fromSplit[0]);
- if (fromEntity == null) {
- throw new IllegalArgumentException("Entity '" + fromSplit[0] + "' is undefined");
- }
-
- String[] toSplit = to.split("\\.");
-
- fromEntity.addRelationship(new DbRelationshipBuilder(name)
- .from(fromEntity, fromSplit[1])
- .to(toSplit[0], toSplit[1])
-
- .build());
-
- return this;
- }
-
- public DataMap build() {
- if (obj.getNamespace() == null) {
- obj.setNamespace(new EntityResolver(Collections.singleton(obj)));
- }
-
- return obj;
- }
-
- @Override
- public DataMap random() {
- if (dataFactory.chance(90)) {
- withDbEntities(dataFactory.getNumberUpTo(10));
- }
-
-
- return build();
- }
-}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/2f7b1d53/cayenne-server/src/test/java/org/apache/cayenne/merge/builders/DbAttributeBuilder.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/merge/builders/DbAttributeBuilder.java b/cayenne-server/src/test/java/org/apache/cayenne/merge/builders/DbAttributeBuilder.java
deleted file mode 100644
index 1682b50..0000000
--- a/cayenne-server/src/test/java/org/apache/cayenne/merge/builders/DbAttributeBuilder.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * 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.merge.builders;
-
-import org.apache.cayenne.datafactory.DictionaryValueProvider;
-import org.apache.cayenne.datafactory.ValueProvider;
-import org.apache.cayenne.dba.TypesMapping;
-import org.apache.cayenne.map.DbAttribute;
-
-import static org.apache.commons.lang.StringUtils.isEmpty;
-
-/**
- * @since 4.0.
- */
-public class DbAttributeBuilder extends DefaultBuilder<DbAttribute> {
-
- private static final ValueProvider<String> TYPES_RANDOM = new DictionaryValueProvider<String>(ValueProvider.RANDOM) {
- @Override
- protected String[] values() {
- return TypesMapping.getDatabaseTypes();
- }
- };
-
- public DbAttributeBuilder() {
- super(new DbAttribute());
- }
-
- public DbAttributeBuilder name() {
- return name(getRandomJavaName());
- }
-
- public DbAttributeBuilder name(String name) {
- obj.setName(name);
-
- return this;
- }
-
- public DbAttributeBuilder type() {
- return type(TYPES_RANDOM.randomValue());
- }
-
- public DbAttributeBuilder type(String item) {
- obj.setType(TypesMapping.getSqlTypeByName(item));
-
- return this;
- }
-
- public DbAttributeBuilder typeInt() {
- return type(TypesMapping.SQL_INTEGER);
- }
-
- public DbAttributeBuilder typeBigInt() {
- return type(TypesMapping.SQL_BIGINT);
- }
-
- public DbAttributeBuilder typeVarchar(int length) {
- type(TypesMapping.SQL_VARCHAR);
- length(length);
-
- return this;
- }
-
- private DbAttributeBuilder length(int length) {
- obj.setMaxLength(length);
-
- return this;
- }
-
- public DbAttributeBuilder primaryKey() {
- obj.setPrimaryKey(true);
-
- return this;
- }
-
- public DbAttributeBuilder mandatory() {
- obj.setMandatory(true);
-
- return this;
- }
-
- @Override
- public DbAttribute build() {
- if (isEmpty(obj.getName())) {
- name();
- }
-
- if (obj.getType() == TypesMapping.NOT_DEFINED) {
- type();
- }
-
- return obj;
- }
-
- @Override
- public DbAttribute random() {
- return build();
- }
-
-}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/2f7b1d53/cayenne-server/src/test/java/org/apache/cayenne/merge/builders/DbEntityBuilder.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/merge/builders/DbEntityBuilder.java b/cayenne-server/src/test/java/org/apache/cayenne/merge/builders/DbEntityBuilder.java
deleted file mode 100644
index 9cbd456..0000000
--- a/cayenne-server/src/test/java/org/apache/cayenne/merge/builders/DbEntityBuilder.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * 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.merge.builders;
-
-import org.apache.cayenne.map.DbAttribute;
-import org.apache.cayenne.map.DbEntity;
-import org.apache.commons.lang.StringUtils;
-
-/**
- * @since 4.0.
- */
-public class DbEntityBuilder extends DefaultBuilder<DbEntity> {
-
- public DbEntityBuilder() {
- super(new DbEntity());
- }
-
- public DbEntityBuilder name() {
- return name(getRandomJavaName());
- }
-
- public DbEntityBuilder name(String name) {
- obj.setName(name);
-
- return this;
- }
-
- public DbEntityBuilder attributes(DbAttribute ... attributes) {
- for (DbAttribute attribute : attributes) {
- obj.addAttribute(attribute);
- }
-
- return this;
- }
-
- public DbEntityBuilder attributes(DbAttributeBuilder ... attributes) {
- for (DbAttributeBuilder attribute : attributes) {
- obj.addAttribute(attribute.build());
- }
-
- return this;
- }
-
- public DbEntityBuilder attributes(int numberUpTo) {
- for (int i = 0; i < numberUpTo; i++) {
- try {
- obj.addAttribute(new DbAttributeBuilder().random());
- } catch (IllegalArgumentException e) {
- i--; // try again
- }
- }
-
- return this;
- }
-
-
- @Override
- public DbEntity build() {
- if (obj.getName() == null) {
- obj.setName(StringUtils.capitalize(getRandomJavaName()));
- }
-
- return obj;
- }
-
- @Override
- public DbEntity random() {
- if (dataFactory.chance(99)) {
- attributes(dataFactory.getNumberUpTo(20));
- }
-
- return build();
- }
-}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/2f7b1d53/cayenne-server/src/test/java/org/apache/cayenne/merge/builders/DbRelationshipBuilder.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/merge/builders/DbRelationshipBuilder.java b/cayenne-server/src/test/java/org/apache/cayenne/merge/builders/DbRelationshipBuilder.java
deleted file mode 100644
index 2bf5dba..0000000
--- a/cayenne-server/src/test/java/org/apache/cayenne/merge/builders/DbRelationshipBuilder.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * 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.merge.builders;
-
-import org.apache.cayenne.map.DbEntity;
-import org.apache.cayenne.map.DbJoin;
-import org.apache.cayenne.map.DbRelationship;
-
-/**
- * @since 4.0.
- */
-public class DbRelationshipBuilder extends DefaultBuilder<DbRelationship> {
-
- private String[] from;
- private String[] to;
-
- public DbRelationshipBuilder() {
- super(new DbRelationship());
- }
-
- public DbRelationshipBuilder(String name) {
- super(new DbRelationship(name));
- }
-
- public DbRelationshipBuilder(DbRelationship obj) {
- super(obj);
- }
-
- public DbRelationshipBuilder name() {
- return name(getRandomJavaName());
- }
-
- public DbRelationshipBuilder name(String name) {
- obj.setName(name);
-
- return this;
- }
-
- public DbRelationshipBuilder from(DbEntity entity, String ... columns) {
- obj.setSourceEntity(entity);
- this.from = columns;
-
- return this;
- }
-
- public DbRelationshipBuilder to(String entityName, String ... columns) {
- obj.setTargetEntityName(entityName);
- this.to = columns;
-
- return this;
- }
-
- @Override
- public DbRelationship build() {
- if (obj.getName() == null) {
- name();
- }
-
- if (from.length != to.length) {
- throw new IllegalStateException("from and to columns name size mismatch");
- }
-
- for (int i = 0; i < from.length; i++) {
- obj.addJoin(new DbJoin(obj, from[i], to[i]));
- }
-
- return obj;
- }
-}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/2f7b1d53/cayenne-server/src/test/java/org/apache/cayenne/merge/builders/DefaultBuilder.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/merge/builders/DefaultBuilder.java b/cayenne-server/src/test/java/org/apache/cayenne/merge/builders/DefaultBuilder.java
deleted file mode 100644
index 5e9cea2..0000000
--- a/cayenne-server/src/test/java/org/apache/cayenne/merge/builders/DefaultBuilder.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * 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.merge.builders;
-
-import org.apache.cayenne.datafactory.DataFactory;
-import org.apache.commons.lang.StringUtils;
-
-/**
- * @since 4.0.
- */
-public abstract class DefaultBuilder<T> implements Builder<T> {
-
- protected final DataFactory dataFactory;
- protected final T obj;
-
-
- protected DefaultBuilder(T obj) {
- this.dataFactory = new DataFactory();
- this.obj = obj;
- }
-
- public String getRandomJavaName() {
- int count = dataFactory.getNumberBetween(1, 5);
- StringBuilder res = new StringBuilder();
- for (int i = 0; i < count; i++) {
- res.append(StringUtils.capitalize(dataFactory.getRandomWord()));
- }
-
- return StringUtils.uncapitalize(res.toString());
- }
-
- @Override
- public T build() {
- return obj;
- }
-
- @Override
- public T random() {
- return build();
- }
-}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/2f7b1d53/cayenne-server/src/test/java/org/apache/cayenne/merge/builders/ObjAttributeBuilder.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/merge/builders/ObjAttributeBuilder.java b/cayenne-server/src/test/java/org/apache/cayenne/merge/builders/ObjAttributeBuilder.java
deleted file mode 100644
index 6a74936..0000000
--- a/cayenne-server/src/test/java/org/apache/cayenne/merge/builders/ObjAttributeBuilder.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * 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.merge.builders;
-
-import org.apache.cayenne.map.ObjAttribute;
-
-/**
- * @since 4.0.
- */
-public class ObjAttributeBuilder extends DefaultBuilder<ObjAttribute> {
-
- public ObjAttributeBuilder() {
- super(new ObjAttribute());
- }
-
- public ObjAttributeBuilder name() {
- return name(getRandomJavaName());
- }
-
- public ObjAttributeBuilder name(String name) {
- obj.setName(name);
-
- return this;
- }
-
- public ObjAttributeBuilder type(Class type) {
- obj.setType(type.getCanonicalName());
-
- return this;
- }
-
- public ObjAttributeBuilder dbPath(String path) {
- obj.setDbAttributePath(path);
-
- return this;
- }
-
- @Override
- public ObjAttribute build() {
- if (obj.getName() == null) {
- name();
- }
-
- return obj;
- }
-
- @Override
- public ObjAttribute random() {
- return build();
- }
-}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/2f7b1d53/cayenne-server/src/test/java/org/apache/cayenne/merge/builders/ObjEntityBuilder.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/merge/builders/ObjEntityBuilder.java b/cayenne-server/src/test/java/org/apache/cayenne/merge/builders/ObjEntityBuilder.java
deleted file mode 100644
index dc78b29..0000000
--- a/cayenne-server/src/test/java/org/apache/cayenne/merge/builders/ObjEntityBuilder.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * 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.merge.builders;
-
-import org.apache.cayenne.map.ObjAttribute;
-import org.apache.cayenne.map.ObjEntity;
-import org.apache.commons.lang.StringUtils;
-
-/**
- * @since 4.0.
- */
-public class ObjEntityBuilder extends DefaultBuilder<ObjEntity> {
-
- public ObjEntityBuilder() {
- super(new ObjEntity());
- }
-
- public ObjEntityBuilder name() {
- return name(getRandomJavaName());
- }
-
- public ObjEntityBuilder name(String name) {
- obj.setName(name);
-
- return this;
- }
-
- public ObjEntityBuilder attributes(ObjAttribute... attributes) {
- for (ObjAttribute attribute : attributes) {
- obj.addAttribute(attribute);
- }
-
- return this;
- }
-
- public ObjEntityBuilder attributes(ObjAttributeBuilder ... attributes) {
- for (ObjAttributeBuilder attribute : attributes) {
- obj.addAttribute(attribute.build());
- }
-
- return this;
- }
-
- public ObjEntityBuilder attributes(int numberUpTo) {
- for (int i = 0; i < numberUpTo; i++) {
- obj.addAttribute(new ObjAttributeBuilder().random());
- }
-
- return this;
- }
-
-
- @Override
- public ObjEntity build() {
- if (obj.getName() == null) {
- obj.setName(StringUtils.capitalize(getRandomJavaName()));
- }
-
- return obj;
- }
-
- @Override
- public ObjEntity random() {
- if (dataFactory.chance(99)) {
- attributes(dataFactory.getNumberUpTo(20));
- }
-
- return build();
- }
-
- public ObjEntityBuilder clazz(String s) {
- obj.setClassName(s);
-
- return this;
- }
-
- public ObjEntityBuilder dbEntity(String table) {
- obj.setDbEntityName(table);
-
- return this;
- }
-}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/2f7b1d53/cayenne-server/src/test/java/org/apache/cayenne/merge/builders/ObjectMother.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/merge/builders/ObjectMother.java b/cayenne-server/src/test/java/org/apache/cayenne/merge/builders/ObjectMother.java
deleted file mode 100644
index 76ed761..0000000
--- a/cayenne-server/src/test/java/org/apache/cayenne/merge/builders/ObjectMother.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * 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.merge.builders;
-
-import org.apache.cayenne.map.DataMap;
-
-/**
- * Factory for test data see pattern definition:
- * http://martinfowler.com/bliki/ObjectMother.html
- *
- * @since 4.0.
- */
-public class ObjectMother {
-
- public static DataMapBuilder dataMap() {
- return new DataMapBuilder();
- }
-
- public static DataMapBuilder dataMap(DataMap dataMap) {
- return new DataMapBuilder(dataMap);
- }
-
- public static DbEntityBuilder dbEntity() {
- return new DbEntityBuilder();
- }
-
- public static DbEntityBuilder dbEntity(String name) {
- return new DbEntityBuilder().name(name);
- }
-
- public static ObjEntityBuilder objEntity() {
- return new ObjEntityBuilder();
- }
-
- public static ObjEntityBuilder objEntity(String packageName, String className, String table) {
- return new ObjEntityBuilder()
- .name(className)
- .clazz(packageName + "." + className)
- .dbEntity(table);
- }
-
- public static ObjAttributeBuilder objAttr(String name) {
- return new ObjAttributeBuilder().name(name);
- }
-
- public static DbAttributeBuilder dbAttr(String name) {
- return dbAttr().name(name);
- }
-
- public static DbAttributeBuilder dbAttr() {
- return new DbAttributeBuilder();
- }
-
-}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/2f7b1d53/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/ServerRuntimeProvider.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/ServerRuntimeProvider.java b/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/ServerRuntimeProvider.java
index 29820e0..79c02cf 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/ServerRuntimeProvider.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/ServerRuntimeProvider.java
@@ -29,6 +29,9 @@ import org.apache.cayenne.di.Module;
import org.apache.cayenne.di.Provider;
import org.apache.cayenne.unit.UnitDbAdapter;
+import java.util.Collection;
+import java.util.Collections;
+
public class ServerRuntimeProvider implements Provider<ServerRuntime> {
private ServerCaseProperties properties;
@@ -48,6 +51,7 @@ public class ServerRuntimeProvider implements Provider<ServerRuntime> {
this.unitDbAdapter = unitDbAdapter;
}
+ @Override
public ServerRuntime get() throws ConfigurationException {
String configurationLocation = properties.getConfigurationLocation();
@@ -56,11 +60,18 @@ public class ServerRuntimeProvider implements Provider<ServerRuntime> {
+ "annotate your test case with @UseServerRuntime");
}
- return new ServerRuntime(configurationLocation, new ServerExtraModule());
+ Collection<? extends Module> modules = getExtraModules();
+
+ return new ServerRuntime(configurationLocation, modules.toArray(new Module[modules.size()]));
+ }
+
+ protected Collection<? extends Module> getExtraModules() {
+ return Collections.singleton(new ServerExtraModule());
}
class ServerExtraModule implements Module {
+ @Override
public void configure(Binder binder) {
// these are the objects overriding standard ServerModule definitions or
http://git-wip-us.apache.org/repos/asf/cayenne/blob/2f7b1d53/cayenne-server/src/test/java/org/apache/cayenne/util/EntityMergeSupportIT.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/util/EntityMergeSupportIT.java b/cayenne-server/src/test/java/org/apache/cayenne/util/EntityMergeSupportIT.java
deleted file mode 100644
index e3f1bc3..0000000
--- a/cayenne-server/src/test/java/org/apache/cayenne/util/EntityMergeSupportIT.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * 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.util;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertTrue;
-
-import java.sql.Types;
-import java.util.Arrays;
-
-import org.apache.cayenne.map.DbAttribute;
-import org.apache.cayenne.map.DbEntity;
-import org.apache.cayenne.map.DbJoin;
-import org.apache.cayenne.map.DbRelationship;
-import org.apache.cayenne.map.DeleteRule;
-import org.apache.cayenne.map.ObjEntity;
-import org.apache.cayenne.merge.MergeCase;
-import org.junit.Test;
-
-public class EntityMergeSupportIT extends MergeCase {
-
- @Test
- public void testMerging() {
- DbEntity dbEntity1 = new DbEntity("NEW_TABLE");
-
- DbAttribute e1col1 = new DbAttribute("ID", Types.INTEGER, dbEntity1);
- e1col1.setMandatory(true);
- e1col1.setPrimaryKey(true);
- dbEntity1.addAttribute(e1col1);
-
- DbAttribute e1col2 = new DbAttribute("NAME", Types.VARCHAR, dbEntity1);
- e1col2.setMaxLength(10);
- e1col2.setMandatory(false);
- dbEntity1.addAttribute(e1col2);
-
- map.addDbEntity(dbEntity1);
-
- DbEntity dbEntity2 = new DbEntity("NEW_TABLE2");
- DbAttribute e2col1 = new DbAttribute("ID", Types.INTEGER, dbEntity2);
- e2col1.setMandatory(true);
- e2col1.setPrimaryKey(true);
- dbEntity2.addAttribute(e2col1);
- DbAttribute e2col2 = new DbAttribute("FK", Types.INTEGER, dbEntity2);
- dbEntity2.addAttribute(e2col2);
-
- map.addDbEntity(dbEntity2);
-
- // create db relationships
- DbRelationship rel1To2 = new DbRelationship("rel1To2");
- rel1To2.setSourceEntity(dbEntity1);
- rel1To2.setTargetEntityName(dbEntity2);
- rel1To2.setToMany(true);
- rel1To2.addJoin(new DbJoin(rel1To2, e1col1.getName(), e2col2.getName()));
- dbEntity1.addRelationship(rel1To2);
- DbRelationship rel2To1 = new DbRelationship("rel2To1");
- rel2To1.setSourceEntity(dbEntity2);
- rel2To1.setTargetEntityName(dbEntity1);
- rel2To1.setToMany(false);
- rel2To1.addJoin(new DbJoin(rel2To1, e2col2.getName(), e1col1.getName()));
- dbEntity2.addRelationship(rel2To1);
- assertSame(rel1To2, rel2To1.getReverseRelationship());
- assertSame(rel2To1, rel1To2.getReverseRelationship());
-
- ObjEntity objEntity1 = new ObjEntity("NewTable");
- objEntity1.setDbEntity(dbEntity1);
- map.addObjEntity(objEntity1);
-
- ObjEntity objEntity2 = new ObjEntity("NewTable2");
- objEntity2.setDbEntity(dbEntity2);
- map.addObjEntity(objEntity2);
-
- assertTrue(new EntityMergeSupport(map).synchronizeWithDbEntities(Arrays.asList(objEntity1, objEntity2)));
- assertNotNull(objEntity1.getAttribute("name"));
- assertNotNull(objEntity1.getRelationship("rel1To2"));
- assertNotNull(objEntity2.getRelationship("rel2To1"));
-
- assertEquals(objEntity1.getRelationship("rel1To2").getDeleteRule(), DeleteRule.DEFAULT_DELETE_RULE_TO_MANY);
- assertEquals(objEntity2.getRelationship("rel2To1").getDeleteRule(), DeleteRule.DEFAULT_DELETE_RULE_TO_ONE);
-
- map.removeObjEntity(objEntity2.getName());
- map.removeObjEntity(objEntity1.getName());
- map.removeDbEntity(dbEntity2.getName());
- map.removeDbEntity(dbEntity1.getName());
- }
-}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/2f7b1d53/cayenne-server/src/test/resources/org/apache/cayenne/access/loader/cayenne-relationship-optimisation.xml
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/resources/org/apache/cayenne/access/loader/cayenne-relationship-optimisation.xml b/cayenne-server/src/test/resources/org/apache/cayenne/access/loader/cayenne-relationship-optimisation.xml
deleted file mode 100644
index d4fea49..0000000
--- a/cayenne-server/src/test/resources/org/apache/cayenne/access/loader/cayenne-relationship-optimisation.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<domain project-version="6">
- <map name="relationship-optimisation"/>
-</domain>
http://git-wip-us.apache.org/repos/asf/cayenne/blob/2f7b1d53/cayenne-server/src/test/resources/org/apache/cayenne/access/loader/relationship-optimisation.map.xml
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/resources/org/apache/cayenne/access/loader/relationship-optimisation.map.xml b/cayenne-server/src/test/resources/org/apache/cayenne/access/loader/relationship-optimisation.map.xml
deleted file mode 100644
index e68645f..0000000
--- a/cayenne-server/src/test/resources/org/apache/cayenne/access/loader/relationship-optimisation.map.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<data-map xmlns="http://cayenne.apache.org/schema/3.0/modelMap"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://cayenne.apache.org/schema/3.0/modelMap http://cayenne.apache.org/schema/3.0/modelMap.xsd"
- project-version="6">
- <property name="defaultPackage" value="com.objectstyle"/>
- <db-entity name="table1" catalog="many_to_many_test">
- <db-attribute name="id1" type="INTEGER" isPrimaryKey="true" isMandatory="true" length="10"/>
- <db-attribute name="table1col" type="VARCHAR" length="45"/>
- </db-entity>
- <db-entity name="table1_table2" catalog="many_to_many_test">
- <db-attribute name="fk1" type="INTEGER" isPrimaryKey="true" isMandatory="true" length="10"/>
- <db-attribute name="fk2" type="INTEGER" isPrimaryKey="true" isMandatory="true" length="10"/>
- </db-entity>
- <db-entity name="table2" catalog="many_to_many_test">
- <db-attribute name="id2" type="INTEGER" isPrimaryKey="true" isMandatory="true" length="10"/>
- <db-attribute name="table2col" type="VARCHAR" length="45"/>
- </db-entity>
- <obj-entity name="Table1" className="com.objectstyle.Table1" dbEntityName="table1">
- <obj-attribute name="table1col" type="java.lang.String" db-attribute-path="table1col"/>
- </obj-entity>
- <obj-entity name="Table1Table2" className="com.objectstyle.Table1Table2" dbEntityName="table1_table2">
- </obj-entity>
- <obj-entity name="Table2" className="com.objectstyle.Table2" dbEntityName="table2">
- <obj-attribute name="table2col" type="java.lang.String" db-attribute-path="table2col"/>
- </obj-entity>
- <db-relationship name="table1Table2Array" source="table1" target="table1_table2" toDependentPK="true" toMany="true">
- <db-attribute-pair source="id1" target="fk1"/>
- </db-relationship>
- <db-relationship name="toTable1" source="table1_table2" target="table1" toMany="false">
- <db-attribute-pair source="fk1" target="id1"/>
- </db-relationship>
- <db-relationship name="toTable2" source="table1_table2" target="table2" toMany="false">
- <db-attribute-pair source="fk2" target="id2"/>
- </db-relationship>
- <db-relationship name="table1Table2Array" source="table2" target="table1_table2" toDependentPK="true" toMany="true">
- <db-attribute-pair source="id2" target="fk2"/>
- </db-relationship>
- <obj-relationship name="table1Table2Array" source="Table1" target="Table1Table2" deleteRule="Deny" db-relationship-path="table1Table2Array"/>
- <obj-relationship name="toTable1" source="Table1Table2" target="Table1" deleteRule="Nullify" db-relationship-path="toTable1"/>
- <obj-relationship name="toTable2" source="Table1Table2" target="Table2" deleteRule="Nullify" db-relationship-path="toTable2"/>
- <obj-relationship name="table1Table2Array" source="Table2" target="Table1Table2" deleteRule="Deny" db-relationship-path="table1Table2Array"/>
-</data-map>
http://git-wip-us.apache.org/repos/asf/cayenne/blob/2f7b1d53/cayenne-tools/pom.xml
----------------------------------------------------------------------
diff --git a/cayenne-tools/pom.xml b/cayenne-tools/pom.xml
index 581c7df..15816c5 100644
--- a/cayenne-tools/pom.xml
+++ b/cayenne-tools/pom.xml
@@ -42,6 +42,13 @@
<scope>test</scope>
<type>test-jar</type>
</dependency>
+ <dependency>
+ <groupId>org.apache.cayenne</groupId>
+ <artifactId>cayenne-dbsync</artifactId>
+ <version>${project.version}</version>
+ <scope>test</scope>
+ <type>test-jar</type>
+ </dependency>
<dependency>
<groupId>org.apache.cayenne.build-tools</groupId>
@@ -94,6 +101,13 @@
<version>${project.version}</version>
</dependency>
+ <dependency>
+ <groupId>org.apache.cayenne</groupId>
+ <artifactId>cayenne-dbsync</artifactId>
+ <version>${project.version}</version>
+ <scope>compile</scope>
+ </dependency>
+
<dependency>
<groupId>foundrylogic.vpp</groupId>
<artifactId>vpp</artifactId>
http://git-wip-us.apache.org/repos/asf/cayenne/blob/2f7b1d53/cayenne-tools/src/main/java/org/apache/cayenne/gen/ClassGenerationAction.java
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/main/java/org/apache/cayenne/gen/ClassGenerationAction.java b/cayenne-tools/src/main/java/org/apache/cayenne/gen/ClassGenerationAction.java
index f7471a6..e8b6b76 100644
--- a/cayenne-tools/src/main/java/org/apache/cayenne/gen/ClassGenerationAction.java
+++ b/cayenne-tools/src/main/java/org/apache/cayenne/gen/ClassGenerationAction.java
@@ -18,18 +18,8 @@
****************************************************************/
package org.apache.cayenne.gen;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.OutputStreamWriter;
-import java.io.Writer;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Properties;
-
import org.apache.cayenne.CayenneRuntimeException;
-import org.apache.cayenne.access.loader.NamePatternMatcher;
+import org.apache.cayenne.dbsync.reverse.NamePatternMatcher;
import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.map.Embeddable;
import org.apache.cayenne.map.ObjEntity;
@@ -41,6 +31,16 @@ import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.runtime.RuntimeConstants;
import org.apache.velocity.runtime.log.NullLogSystem;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+
public class ClassGenerationAction {
static final String TEMPLATES_DIR_NAME = "templates/v1_2/";
http://git-wip-us.apache.org/repos/asf/cayenne/blob/2f7b1d53/cayenne-tools/src/main/java/org/apache/cayenne/tools/AntDataPortDelegate.java
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/main/java/org/apache/cayenne/tools/AntDataPortDelegate.java b/cayenne-tools/src/main/java/org/apache/cayenne/tools/AntDataPortDelegate.java
index 828d744..3e98829 100644
--- a/cayenne-tools/src/main/java/org/apache/cayenne/tools/AntDataPortDelegate.java
+++ b/cayenne-tools/src/main/java/org/apache/cayenne/tools/AntDataPortDelegate.java
@@ -19,19 +19,19 @@
package org.apache.cayenne.tools;
-import java.util.Iterator;
-import java.util.List;
-import java.util.regex.Pattern;
-
import org.apache.cayenne.access.DataPort;
import org.apache.cayenne.access.DataPortDelegate;
-import org.apache.cayenne.access.loader.NamePatternMatcher;
+import org.apache.cayenne.dbsync.reverse.NamePatternMatcher;
import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.map.DbEntity;
import org.apache.cayenne.query.Query;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.Task;
+import java.util.Iterator;
+import java.util.List;
+import java.util.regex.Pattern;
+
/**
* DataPortDelegate implementation that works in the context of Ant DataPortTask
* task execution, performing entity filtering and logging functions.
http://git-wip-us.apache.org/repos/asf/cayenne/blob/2f7b1d53/cayenne-tools/src/main/java/org/apache/cayenne/tools/CayenneGeneratorEntityFilterAction.java
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/main/java/org/apache/cayenne/tools/CayenneGeneratorEntityFilterAction.java b/cayenne-tools/src/main/java/org/apache/cayenne/tools/CayenneGeneratorEntityFilterAction.java
index 49329a7..08a39df 100644
--- a/cayenne-tools/src/main/java/org/apache/cayenne/tools/CayenneGeneratorEntityFilterAction.java
+++ b/cayenne-tools/src/main/java/org/apache/cayenne/tools/CayenneGeneratorEntityFilterAction.java
@@ -18,16 +18,16 @@
****************************************************************/
package org.apache.cayenne.tools;
+import org.apache.cayenne.dbsync.reverse.NameFilter;
+import org.apache.cayenne.map.DataMap;
+import org.apache.cayenne.map.Embeddable;
+import org.apache.cayenne.map.ObjEntity;
+
import java.net.MalformedURLException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
-import org.apache.cayenne.access.loader.NameFilter;
-import org.apache.cayenne.map.DataMap;
-import org.apache.cayenne.map.Embeddable;
-import org.apache.cayenne.map.ObjEntity;
-
/**
* Performs entity filtering to build a collection of entities that should be used in
* class generation.
http://git-wip-us.apache.org/repos/asf/cayenne/blob/2f7b1d53/cayenne-tools/src/main/java/org/apache/cayenne/tools/CayenneGeneratorTask.java
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/main/java/org/apache/cayenne/tools/CayenneGeneratorTask.java b/cayenne-tools/src/main/java/org/apache/cayenne/tools/CayenneGeneratorTask.java
index 6ed29cb..6edcd6c 100644
--- a/cayenne-tools/src/main/java/org/apache/cayenne/tools/CayenneGeneratorTask.java
+++ b/cayenne-tools/src/main/java/org/apache/cayenne/tools/CayenneGeneratorTask.java
@@ -19,7 +19,7 @@
package org.apache.cayenne.tools;
import foundrylogic.vpp.VPPConfig;
-import org.apache.cayenne.access.loader.NamePatternMatcher;
+import org.apache.cayenne.dbsync.reverse.NamePatternMatcher;
import org.apache.cayenne.gen.ArtifactsGenerationMode;
import org.apache.cayenne.gen.ClassGenerationAction;
import org.apache.cayenne.gen.ClientClassGenerationAction;
http://git-wip-us.apache.org/repos/asf/cayenne/blob/2f7b1d53/cayenne-tools/src/main/java/org/apache/cayenne/tools/DbGeneratorTask.java
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/main/java/org/apache/cayenne/tools/DbGeneratorTask.java b/cayenne-tools/src/main/java/org/apache/cayenne/tools/DbGeneratorTask.java
index 5e0ab99..faa3653 100644
--- a/cayenne-tools/src/main/java/org/apache/cayenne/tools/DbGeneratorTask.java
+++ b/cayenne-tools/src/main/java/org/apache/cayenne/tools/DbGeneratorTask.java
@@ -19,12 +19,10 @@
package org.apache.cayenne.tools;
-import java.sql.Driver;
-import java.util.Collections;
-
import org.apache.cayenne.access.DbGenerator;
import org.apache.cayenne.datasource.DriverDataSource;
import org.apache.cayenne.dba.DbAdapter;
+import org.apache.cayenne.dbsync.CayenneDbSyncModule;
import org.apache.cayenne.di.DIBootstrap;
import org.apache.cayenne.di.Injector;
import org.apache.cayenne.log.NoopJdbcEventLogger;
@@ -36,6 +34,9 @@ import org.apache.commons.logging.Log;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
+import java.sql.Driver;
+import java.util.Collections;
+
/**
* An Ant Task that is a frontend to Cayenne DbGenerator allowing schema
* generation from DataMap using Ant.
@@ -68,7 +69,7 @@ public class DbGeneratorTask extends CayenneTask {
validateAttributes();
ClassLoader loader = null;
- Injector injector = DIBootstrap.createInjector(new ToolsModule(logger));
+ Injector injector = DIBootstrap.createInjector(new CayenneDbSyncModule(), new ToolsModule(logger));
try {
loader = Thread.currentThread().getContextClassLoader();
Thread.currentThread().setContextClassLoader(DbGeneratorTask.class.getClassLoader());
http://git-wip-us.apache.org/repos/asf/cayenne/blob/2f7b1d53/cayenne-tools/src/main/java/org/apache/cayenne/tools/DbImporterTask.java
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/main/java/org/apache/cayenne/tools/DbImporterTask.java b/cayenne-tools/src/main/java/org/apache/cayenne/tools/DbImporterTask.java
index e4fa545..f1797f1 100644
--- a/cayenne-tools/src/main/java/org/apache/cayenne/tools/DbImporterTask.java
+++ b/cayenne-tools/src/main/java/org/apache/cayenne/tools/DbImporterTask.java
@@ -18,7 +18,6 @@
****************************************************************/
package org.apache.cayenne.tools;
-import org.apache.cayenne.access.loader.filters.LegacyFilterConfigBridge;
import org.apache.cayenne.configuration.ConfigurationNameMapper;
import org.apache.cayenne.configuration.DataNodeDescriptor;
import org.apache.cayenne.configuration.XMLDataMapLoader;
@@ -32,12 +31,14 @@ import org.apache.cayenne.dbimport.DefaultReverseEngineeringLoader;
import org.apache.cayenne.dbimport.ExcludeColumn;
import org.apache.cayenne.dbimport.ExcludeProcedure;
import org.apache.cayenne.dbimport.ExcludeTable;
-import org.apache.cayenne.dbimport.FiltersConfigBuilder;
import org.apache.cayenne.dbimport.IncludeColumn;
import org.apache.cayenne.dbimport.IncludeProcedure;
import org.apache.cayenne.dbimport.IncludeTable;
import org.apache.cayenne.dbimport.ReverseEngineering;
import org.apache.cayenne.dbimport.Schema;
+import org.apache.cayenne.dbsync.CayenneDbSyncModule;
+import org.apache.cayenne.dbsync.reverse.FiltersConfigBuilder;
+import org.apache.cayenne.dbsync.reverse.filters.LegacyFilterConfigBridge;
import org.apache.cayenne.di.DIBootstrap;
import org.apache.cayenne.di.Injector;
import org.apache.cayenne.map.DataMap;
@@ -91,7 +92,7 @@ public class DbImporterTask extends Task {
config.setTableTypes(reverseEngineering.getTableTypes());
if (isReverseEngineeringDefined) {
- Injector injector = DIBootstrap.createInjector(new ToolsModule(logger), new DbImportModule());
+ Injector injector = DIBootstrap.createInjector(new CayenneDbSyncModule(), new ToolsModule(logger), new DbImportModule());
validateDbImportConfiguration(config, injector);
@@ -120,7 +121,7 @@ public class DbImporterTask extends Task {
XMLDataMapLoader xmlDataMapLoader = new XMLDataMapLoader();
DataMap dataMap = xmlDataMapLoader.load(resource);
if (dataMap.getReverseEngineering() != null) {
- Injector injector = DIBootstrap.createInjector(new ToolsModule(logger), new DbImportModule());
+ Injector injector = DIBootstrap.createInjector(new CayenneDbSyncModule(), new ToolsModule(logger), new DbImportModule());
try {
ConfigurationNameMapper nameMapper = injector.getInstance(ConfigurationNameMapper.class);
String reverseEngineeringLocation = nameMapper.configurationLocation(ReverseEngineering.class, dataMap.getReverseEngineering().getName());
http://git-wip-us.apache.org/repos/asf/cayenne/blob/2f7b1d53/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportConfiguration.java
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportConfiguration.java b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportConfiguration.java
index 0914fb5..e69905a 100644
--- a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportConfiguration.java
+++ b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportConfiguration.java
@@ -19,28 +19,28 @@
package org.apache.cayenne.tools.dbimport;
import org.apache.cayenne.CayenneRuntimeException;
-import org.apache.cayenne.access.DbLoader;
-import org.apache.cayenne.access.loader.DbLoaderConfiguration;
-import org.apache.cayenne.access.DbLoaderDelegate;
-import org.apache.cayenne.access.loader.DefaultDbLoaderDelegate;
-import org.apache.cayenne.access.loader.LoggingDbLoaderDelegate;
-import org.apache.cayenne.access.loader.NameFilter;
-import org.apache.cayenne.access.loader.filters.CatalogFilter;
-import org.apache.cayenne.access.loader.filters.FiltersConfig;
import org.apache.cayenne.configuration.DataNodeDescriptor;
import org.apache.cayenne.conn.DataSourceInfo;
import org.apache.cayenne.dba.DbAdapter;
+import org.apache.cayenne.dbsync.merge.DbMergerConfig;
+import org.apache.cayenne.dbsync.merge.DefaultModelMergeDelegate;
+import org.apache.cayenne.dbsync.merge.EntityMergeSupport;
+import org.apache.cayenne.dbsync.merge.ModelMergeDelegate;
+import org.apache.cayenne.dbsync.reverse.DbLoader;
+import org.apache.cayenne.dbsync.reverse.DbLoaderConfiguration;
+import org.apache.cayenne.dbsync.reverse.DbLoaderDelegate;
+import org.apache.cayenne.dbsync.reverse.DefaultDbLoaderDelegate;
+import org.apache.cayenne.dbsync.reverse.LoggingDbLoaderDelegate;
+import org.apache.cayenne.dbsync.reverse.NameFilter;
+import org.apache.cayenne.dbsync.reverse.NamePatternMatcher;
+import org.apache.cayenne.dbsync.reverse.filters.CatalogFilter;
+import org.apache.cayenne.dbsync.reverse.filters.FiltersConfig;
import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.map.DbEntity;
import org.apache.cayenne.map.EntityResolver;
import org.apache.cayenne.map.naming.LegacyNameGenerator;
import org.apache.cayenne.map.naming.ObjectNameGenerator;
-import org.apache.cayenne.merge.DbMergerConfig;
-import org.apache.cayenne.merge.DefaultModelMergeDelegate;
-import org.apache.cayenne.merge.ModelMergeDelegate;
import org.apache.cayenne.resource.URLResource;
-import org.apache.cayenne.access.loader.NamePatternMatcher;
-import org.apache.cayenne.util.EntityMergeSupport;
import org.apache.commons.logging.Log;
import java.io.File;
@@ -48,7 +48,6 @@ import java.io.IOException;
import java.net.MalformedURLException;
import java.sql.Connection;
import java.util.Collections;
-import java.util.List;
import static org.apache.commons.lang.StringUtils.isNotEmpty;
http://git-wip-us.apache.org/repos/asf/cayenne/blob/2f7b1d53/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportDbLoaderDelegate.java
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportDbLoaderDelegate.java b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportDbLoaderDelegate.java
index 7772b73..bc6abab 100644
--- a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportDbLoaderDelegate.java
+++ b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportDbLoaderDelegate.java
@@ -19,7 +19,7 @@
package org.apache.cayenne.tools.dbimport;
-import org.apache.cayenne.access.loader.DefaultDbLoaderDelegate;
+import org.apache.cayenne.dbsync.reverse.DefaultDbLoaderDelegate;
import org.apache.cayenne.map.DbEntity;
import org.apache.cayenne.map.ObjEntity;
http://git-wip-us.apache.org/repos/asf/cayenne/blob/2f7b1d53/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportModule.java
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportModule.java b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportModule.java
index 18cc197..754071e 100644
--- a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportModule.java
+++ b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportModule.java
@@ -29,8 +29,8 @@ import org.apache.cayenne.tools.configuration.ToolsModule;
/**
* A DI module that bootstraps {@link DbImportAction}. Should be used in
- * conjunction with {@link ToolsModule}.
- *
+ * conjunction with {@link ToolsModule} and {@link org.apache.cayenne.dbsync.CayenneDbSyncModule}.
+ *
* @since 4.0
*/
public class DbImportModule implements Module {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/2f7b1d53/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DefaultDbImportAction.java
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DefaultDbImportAction.java b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DefaultDbImportAction.java
index c51300f..d344946 100644
--- a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DefaultDbImportAction.java
+++ b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DefaultDbImportAction.java
@@ -18,26 +18,27 @@
*/
package org.apache.cayenne.tools.dbimport;
-import org.apache.cayenne.access.DbLoader;
import org.apache.cayenne.configuration.ConfigurationTree;
import org.apache.cayenne.configuration.DataNodeDescriptor;
import org.apache.cayenne.configuration.server.DataSourceFactory;
import org.apache.cayenne.configuration.server.DbAdapterFactory;
import org.apache.cayenne.dba.DbAdapter;
+import org.apache.cayenne.dbsync.merge.AbstractToModelToken;
+import org.apache.cayenne.dbsync.merge.AddRelationshipToDb;
+import org.apache.cayenne.dbsync.merge.DbMerger;
+import org.apache.cayenne.dbsync.merge.MergerContext;
+import org.apache.cayenne.dbsync.merge.factory.MergerTokenFactoryProvider;
+import org.apache.cayenne.dbsync.merge.MergerToken;
+import org.apache.cayenne.dbsync.merge.ModelMergeDelegate;
+import org.apache.cayenne.dbsync.merge.ProxyModelMergeDelegate;
+import org.apache.cayenne.dbsync.merge.factory.MergerTokenFactory;
+import org.apache.cayenne.dbsync.reverse.DbLoader;
import org.apache.cayenne.di.Inject;
import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.map.EntityResolver;
import org.apache.cayenne.map.MapLoader;
import org.apache.cayenne.map.ObjEntity;
import org.apache.cayenne.map.ObjRelationship;
-import org.apache.cayenne.merge.AbstractToModelToken;
-import org.apache.cayenne.merge.AddRelationshipToDb;
-import org.apache.cayenne.merge.DbMerger;
-import org.apache.cayenne.merge.MergerContext;
-import org.apache.cayenne.merge.MergerFactory;
-import org.apache.cayenne.merge.MergerToken;
-import org.apache.cayenne.merge.ModelMergeDelegate;
-import org.apache.cayenne.merge.ProxyModelMergeDelegate;
import org.apache.cayenne.project.Project;
import org.apache.cayenne.project.ProjectSaver;
import org.apache.cayenne.resource.URLResource;
@@ -73,17 +74,20 @@ public class DefaultDbImportAction implements DbImportAction {
private final DataSourceFactory dataSourceFactory;
private final DbAdapterFactory adapterFactory;
private final MapLoader mapLoader;
+ private final MergerTokenFactoryProvider mergerTokenFactoryProvider;
public DefaultDbImportAction(@Inject Log logger,
@Inject ProjectSaver projectSaver,
@Inject DataSourceFactory dataSourceFactory,
@Inject DbAdapterFactory adapterFactory,
- @Inject MapLoader mapLoader) {
+ @Inject MapLoader mapLoader,
+ @Inject MergerTokenFactoryProvider mergerTokenFactoryProvider) {
this.logger = logger;
this.projectSaver = projectSaver;
this.dataSourceFactory = dataSourceFactory;
this.adapterFactory = adapterFactory;
this.mapLoader = mapLoader;
+ this.mergerTokenFactoryProvider = mergerTokenFactoryProvider;
}
protected static List<MergerToken> sort(List<MergerToken> reverse) {
@@ -135,9 +139,9 @@ public class DefaultDbImportAction implements DbImportAction {
saveLoaded(config.initializeDataMap(loadedFomDb));
} else {
- MergerFactory mergerFactory = adapter.mergerFactory();
+ MergerTokenFactory mergerTokenFactory = mergerTokenFactoryProvider.get(adapter);
- List<MergerToken> mergeTokens = new DbMerger(mergerFactory)
+ List<MergerToken> mergeTokens = new DbMerger(mergerTokenFactory)
.createMergeTokens(existing, loadedFomDb, config.getDbLoaderConfig());
if (mergeTokens.isEmpty()) {
logger.info("");
@@ -157,7 +161,7 @@ public class DefaultDbImportAction implements DbImportAction {
super.objEntityAdded(ent);
}
- }, existing, log(sort(reverse(mergerFactory, mergeTokens))));
+ }, existing, log(sort(reverse(mergerTokenFactory, mergeTokens))));
DbLoader.flattenManyToManyRelationships(executed, loadedObjEntities, config.getNameGenerator());
relationshipsSanity(executed);
@@ -207,14 +211,14 @@ public class DefaultDbImportAction implements DbImportAction {
}
private List<MergerToken> reverse(
- MergerFactory mergerFactory,
+ MergerTokenFactory mergerTokenFactory,
Iterable<MergerToken> mergeTokens) throws IOException {
List<MergerToken> tokens = new LinkedList<>();
for (MergerToken token : mergeTokens) {
if (token instanceof AbstractToModelToken) {
continue;
}
- tokens.add(token.createReverse(mergerFactory));
+ tokens.add(token.createReverse(mergerTokenFactory));
}
return tokens;
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/2f7b1d53/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/DefaultTypeMapperBuilder.java
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/DefaultTypeMapperBuilder.java b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/DefaultTypeMapperBuilder.java
index 52fc3d0..c8cab3a 100644
--- a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/DefaultTypeMapperBuilder.java
+++ b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/DefaultTypeMapperBuilder.java
@@ -18,9 +18,9 @@
****************************************************************/
package org.apache.cayenne.tools.dbimport.config;
-import org.apache.cayenne.access.loader.mapper.DbType;
-import org.apache.cayenne.access.loader.mapper.DefaultJdbc2JavaTypeMapper;
-import org.apache.cayenne.access.loader.mapper.Jdbc2JavaTypeMapper;
+import org.apache.cayenne.dbsync.reverse.mapper.DbType;
+import org.apache.cayenne.dbsync.reverse.mapper.DefaultJdbc2JavaTypeMapper;
+import org.apache.cayenne.dbsync.reverse.mapper.Jdbc2JavaTypeMapper;
import org.apache.commons.lang.ClassUtils;
import org.apache.commons.logging.Log;
http://git-wip-us.apache.org/repos/asf/cayenne/blob/2f7b1d53/cayenne-tools/src/test/java/org/apache/cayenne/tools/NamePatternMatcherTest.java
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/test/java/org/apache/cayenne/tools/NamePatternMatcherTest.java b/cayenne-tools/src/test/java/org/apache/cayenne/tools/NamePatternMatcherTest.java
index 161f44e..3482843 100644
--- a/cayenne-tools/src/test/java/org/apache/cayenne/tools/NamePatternMatcherTest.java
+++ b/cayenne-tools/src/test/java/org/apache/cayenne/tools/NamePatternMatcherTest.java
@@ -19,12 +19,12 @@
package org.apache.cayenne.tools;
-import static org.apache.cayenne.access.loader.NamePatternMatcher.replaceWildcardInStringWithString;
-import static org.junit.Assert.assertEquals;
-
-import org.apache.cayenne.access.loader.NamePatternMatcher;
+import org.apache.cayenne.dbsync.reverse.NamePatternMatcher;
import org.junit.Test;
+import static org.apache.cayenne.dbsync.reverse.NamePatternMatcher.replaceWildcardInStringWithString;
+import static org.junit.Assert.assertEquals;
+
public class NamePatternMatcherTest {
/**
http://git-wip-us.apache.org/repos/asf/cayenne/blob/2f7b1d53/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/DbImportModuleTest.java
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/DbImportModuleTest.java b/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/DbImportModuleTest.java
index 62b65ea..1e34d4e 100644
--- a/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/DbImportModuleTest.java
+++ b/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/DbImportModuleTest.java
@@ -18,6 +18,7 @@
****************************************************************/
package org.apache.cayenne.tools.dbimport;
+import org.apache.cayenne.dbsync.CayenneDbSyncModule;
import org.apache.cayenne.di.DIBootstrap;
import org.apache.cayenne.di.Injector;
import org.apache.cayenne.tools.configuration.ToolsModule;
@@ -33,7 +34,7 @@ public class DbImportModuleTest {
public void testModuleContents() {
Log log = mock(Log.class);
- Injector i = DIBootstrap.createInjector(new ToolsModule(log), new DbImportModule());
+ Injector i = DIBootstrap.createInjector(new CayenneDbSyncModule(), new ToolsModule(log), new DbImportModule());
assertTrue(i.getInstance(DbImportAction.class) instanceof DbImportAction);
}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/2f7b1d53/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/DefaultDbImportActionTest.java
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/DefaultDbImportActionTest.java b/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/DefaultDbImportActionTest.java
index 474b827..5a7c357 100644
--- a/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/DefaultDbImportActionTest.java
+++ b/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/DefaultDbImportActionTest.java
@@ -19,26 +19,28 @@
package org.apache.cayenne.tools.dbimport;
import org.apache.cayenne.CayenneRuntimeException;
-import org.apache.cayenne.access.DbLoader;
-import org.apache.cayenne.access.DbLoaderDelegate;
-import org.apache.cayenne.access.loader.DbLoaderConfiguration;
import org.apache.cayenne.configuration.DataNodeDescriptor;
import org.apache.cayenne.configuration.server.DataSourceFactory;
import org.apache.cayenne.configuration.server.DbAdapterFactory;
import org.apache.cayenne.dba.DbAdapter;
+import org.apache.cayenne.dbsync.CayenneDbSyncModule;
+import org.apache.cayenne.dbsync.merge.AddColumnToDb;
+import org.apache.cayenne.dbsync.merge.AddRelationshipToDb;
+import org.apache.cayenne.dbsync.merge.CreateTableToDb;
+import org.apache.cayenne.dbsync.merge.CreateTableToModel;
+import org.apache.cayenne.dbsync.merge.DefaultModelMergeDelegate;
+import org.apache.cayenne.dbsync.merge.factory.MergerTokenFactoryProvider;
+import org.apache.cayenne.dbsync.merge.MergerToken;
+import org.apache.cayenne.dbsync.merge.builders.DataMapBuilder;
+import org.apache.cayenne.dbsync.merge.factory.DefaultMergerTokenFactory;
+import org.apache.cayenne.dbsync.reverse.DbLoader;
+import org.apache.cayenne.dbsync.reverse.DbLoaderConfiguration;
+import org.apache.cayenne.dbsync.reverse.DbLoaderDelegate;
import org.apache.cayenne.di.DIBootstrap;
import org.apache.cayenne.di.Injector;
import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.map.DbEntity;
import org.apache.cayenne.map.MapLoader;
-import org.apache.cayenne.merge.AddColumnToDb;
-import org.apache.cayenne.merge.AddRelationshipToDb;
-import org.apache.cayenne.merge.CreateTableToDb;
-import org.apache.cayenne.merge.CreateTableToModel;
-import org.apache.cayenne.merge.DefaultModelMergeDelegate;
-import org.apache.cayenne.merge.MergerFactory;
-import org.apache.cayenne.merge.MergerToken;
-import org.apache.cayenne.merge.builders.DataMapBuilder;
import org.apache.cayenne.project.FileProjectSaver;
import org.apache.cayenne.project.Project;
import org.apache.cayenne.resource.URLResource;
@@ -57,10 +59,10 @@ import java.util.LinkedList;
import java.util.List;
import static java.util.Arrays.asList;
-import static org.apache.cayenne.merge.builders.ObjectMother.dbAttr;
-import static org.apache.cayenne.merge.builders.ObjectMother.dbEntity;
-import static org.apache.cayenne.merge.builders.ObjectMother.objAttr;
-import static org.apache.cayenne.merge.builders.ObjectMother.objEntity;
+import static org.apache.cayenne.dbsync.merge.builders.ObjectMother.dbAttr;
+import static org.apache.cayenne.dbsync.merge.builders.ObjectMother.dbEntity;
+import static org.apache.cayenne.dbsync.merge.builders.ObjectMother.objAttr;
+import static org.apache.cayenne.dbsync.merge.builders.ObjectMother.objEntity;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
@@ -287,7 +289,6 @@ public class DefaultDbImportActionTest {
private DefaultDbImportAction buildDbImportAction(Log log, FileProjectSaver projectSaver, MapLoader mapLoader) throws Exception {
DbAdapter dbAdapter = mock(DbAdapter.class);
- when(dbAdapter.mergerFactory()).thenReturn(new MergerFactory());
DbAdapterFactory adapterFactory = mock(DbAdapterFactory.class);
when(adapterFactory.createAdapter(any(DataNodeDescriptor.class), any(DataSource.class))).thenReturn(dbAdapter);
@@ -296,13 +297,16 @@ public class DefaultDbImportActionTest {
DataSource mock = mock(DataSource.class);
when(dataSourceFactory.getDataSource(any(DataNodeDescriptor.class))).thenReturn(mock);
- return new DefaultDbImportAction(log, projectSaver, dataSourceFactory, adapterFactory, mapLoader);
+ MergerTokenFactoryProvider mergerTokenFactoryProvider = mock(MergerTokenFactoryProvider.class);
+ when(mergerTokenFactoryProvider.get(any(DbAdapter.class))).thenReturn(new DefaultMergerTokenFactory());
+
+ return new DefaultDbImportAction(log, projectSaver, dataSourceFactory, adapterFactory, mapLoader, mergerTokenFactoryProvider);
}
@Test
public void testSaveLoaded() throws Exception {
Log log = mock(Log.class);
- Injector i = DIBootstrap.createInjector(new ToolsModule(log), new DbImportModule());
+ Injector i = DIBootstrap.createInjector(new CayenneDbSyncModule(), new ToolsModule(log), new DbImportModule());
DefaultDbImportAction action = (DefaultDbImportAction) i.getInstance(DbImportAction.class);
http://git-wip-us.apache.org/repos/asf/cayenne/blob/2f7b1d53/docs/doc/src/main/resources/RELEASE-NOTES.txt
----------------------------------------------------------------------
diff --git a/docs/doc/src/main/resources/RELEASE-NOTES.txt b/docs/doc/src/main/resources/RELEASE-NOTES.txt
index aa04b5f..fcd7155 100644
--- a/docs/doc/src/main/resources/RELEASE-NOTES.txt
+++ b/docs/doc/src/main/resources/RELEASE-NOTES.txt
@@ -32,6 +32,7 @@ CAY-2107 cayenne-crypto: Lazy initialization of crypto subsystem
CAY-2111 Unbind transaction object from the current thread for iterated queries
CAY-2112 Expose callback for "performInTransaction"
CAY-2113 cdbimport: Reverse-engineering reinstates previously ignored columns
+CAY-2116 Split schema synchronization code in a separate module
Bug Fixes:
http://git-wip-us.apache.org/repos/asf/cayenne/blob/2f7b1d53/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/Main.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/Main.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/Main.java
index 80f8748..838f736 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/Main.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/Main.java
@@ -19,15 +19,8 @@
package org.apache.cayenne.modeler;
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.prefs.Preferences;
-
-import javax.swing.SwingUtilities;
-
import org.apache.cayenne.configuration.server.ServerModule;
+import org.apache.cayenne.dbsync.CayenneDbSyncModule;
import org.apache.cayenne.di.DIBootstrap;
import org.apache.cayenne.di.Injector;
import org.apache.cayenne.di.Module;
@@ -39,6 +32,13 @@ import org.apache.cayenne.project.CayenneProjectModule;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import javax.swing.*;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.prefs.Preferences;
+
/**
* Main class responsible for starting CayenneModeler.
*/
@@ -105,6 +105,7 @@ public class Main {
protected Collection<Module> appendModules(Collection<Module> modules) {
modules.add(new ServerModule("CayenneModeler"));
modules.add(new CayenneProjectModule());
+ modules.add(new CayenneDbSyncModule());
modules.add(new CayenneModelerModule());
return modules;
http://git-wip-us.apache.org/repos/asf/cayenne/blob/2f7b1d53/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateObjEntityAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateObjEntityAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateObjEntityAction.java
index 7381886..a4f54fc 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateObjEntityAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateObjEntityAction.java
@@ -19,10 +19,9 @@
package org.apache.cayenne.modeler.action;
-import java.awt.event.ActionEvent;
-
import org.apache.cayenne.configuration.ConfigurationNode;
import org.apache.cayenne.configuration.DataChannelDescriptor;
+import org.apache.cayenne.dbsync.merge.EntityMergeSupport;
import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.map.DbEntity;
import org.apache.cayenne.map.ObjEntity;
@@ -37,7 +36,8 @@ import org.apache.cayenne.modeler.event.EntityDisplayEvent;
import org.apache.cayenne.modeler.undo.CreateObjEntityUndoableEdit;
import org.apache.cayenne.modeler.util.CayenneAction;
import org.apache.cayenne.util.DeleteRuleUpdater;
-import org.apache.cayenne.util.EntityMergeSupport;
+
+import java.awt.event.ActionEvent;
public class CreateObjEntityAction extends CayenneAction {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/2f7b1d53/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DbEntitySyncAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DbEntitySyncAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DbEntitySyncAction.java
index aec4a2d..65294b5 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DbEntitySyncAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DbEntitySyncAction.java
@@ -19,10 +19,8 @@
package org.apache.cayenne.modeler.action;
-import java.awt.event.ActionEvent;
-import java.util.Iterator;
-
import org.apache.cayenne.configuration.DataChannelDescriptor;
+import org.apache.cayenne.dbsync.merge.EntityMergeSupport;
import org.apache.cayenne.map.DbEntity;
import org.apache.cayenne.map.ObjEntity;
import org.apache.cayenne.map.event.EntityEvent;
@@ -32,7 +30,9 @@ import org.apache.cayenne.modeler.ProjectController;
import org.apache.cayenne.modeler.dialog.objentity.EntitySyncController;
import org.apache.cayenne.modeler.undo.DbEntitySyncUndoableEdit;
import org.apache.cayenne.modeler.util.CayenneAction;
-import org.apache.cayenne.util.EntityMergeSupport;
+
+import java.awt.event.ActionEvent;
+import java.util.Iterator;
/**
* Action that synchronizes all ObjEntities with the current state of the