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/12/14 19:12:46 UTC
[10/16] cayenne git commit: CAY-2169 - split Tokens to model and db
packages - all tests are passing - fix SQL syntax for HSQLDB allow column
NULL value - fix some problems with tokens sort,
but still it's far from perfect (see CAY-2170)
http://git-wip-us.apache.org/repos/asf/cayenne/blob/725e6ae9/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/model/DropColumnToModel.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/model/DropColumnToModel.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/model/DropColumnToModel.java
new file mode 100644
index 0000000..d477eb3
--- /dev/null
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/model/DropColumnToModel.java
@@ -0,0 +1,80 @@
+/*****************************************************************
+ * 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.merge.token.model;
+
+import org.apache.cayenne.dbsync.merge.context.MergerContext;
+import org.apache.cayenne.dbsync.merge.factory.MergerTokenFactory;
+import org.apache.cayenne.dbsync.merge.token.MergerToken;
+import org.apache.cayenne.map.DbAttribute;
+import org.apache.cayenne.map.DbEntity;
+import org.apache.cayenne.map.DbJoin;
+import org.apache.cayenne.map.DbRelationship;
+import org.apache.cayenne.map.ObjAttribute;
+import org.apache.cayenne.map.ObjEntity;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * A {@link MergerToken} to remove a {@link DbAttribute} from a {@link DbEntity}.
+ *
+ */
+public class DropColumnToModel extends AbstractToModelToken.EntityAndColumn {
+
+ public DropColumnToModel(DbEntity entity, DbAttribute column) {
+ super("Drop Column", entity, column);
+ }
+
+ @Override
+ public MergerToken createReverse(MergerTokenFactory factory) {
+ return factory.createAddColumnToDb(getEntity(), getColumn());
+ }
+
+ @Override
+ public void execute(MergerContext mergerContext) {
+
+ // remove relationships mapped to column. duplicate List to prevent
+ // ConcurrentModificationException
+ List<DbRelationship> dbRelationships = new ArrayList<DbRelationship>(getEntity()
+ .getRelationships());
+ for (DbRelationship dbRelationship : dbRelationships) {
+ for (DbJoin join : dbRelationship.getJoins()) {
+ if (join.getSource() == getColumn() || join.getTarget() == getColumn()) {
+ remove(mergerContext.getDelegate(), dbRelationship, true);
+ }
+ }
+ }
+
+ // remove ObjAttribute mapped to same column
+ for (ObjEntity objEntity : getEntity().mappedObjEntities()) {
+ ObjAttribute objAttribute = objEntity.getAttributeForDbAttribute(getColumn());
+ if (objAttribute != null) {
+ objEntity.removeAttribute(objAttribute.getName());
+ mergerContext.getDelegate().objAttributeRemoved(objAttribute);
+ }
+
+ }
+
+ // remove DbAttribute
+ getEntity().removeAttribute(getColumn().getName());
+
+ mergerContext.getDelegate().dbAttributeRemoved(getColumn());
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/725e6ae9/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/model/DropRelationshipToModel.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/model/DropRelationshipToModel.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/model/DropRelationshipToModel.java
new file mode 100644
index 0000000..8d1a267
--- /dev/null
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/model/DropRelationshipToModel.java
@@ -0,0 +1,52 @@
+/*****************************************************************
+ * 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.merge.token.model;
+
+import org.apache.cayenne.dbsync.merge.context.MergerContext;
+import org.apache.cayenne.dbsync.merge.factory.MergerTokenFactory;
+import org.apache.cayenne.dbsync.merge.token.MergerToken;
+import org.apache.cayenne.map.DbEntity;
+import org.apache.cayenne.map.DbRelationship;
+
+public class DropRelationshipToModel extends AbstractToModelToken.Entity {
+
+ private final DbRelationship relationship;
+
+ public DropRelationshipToModel(DbEntity entity, DbRelationship relationship) {
+ super("Drop db-relationship ", entity);
+ this.relationship = relationship;
+ }
+
+ @Override
+ public MergerToken createReverse(MergerTokenFactory factory) {
+ return factory.createAddRelationshipToDb(getEntity(), relationship);
+ }
+
+ @Override
+ public void execute(MergerContext mergerContext) {
+ remove(mergerContext.getDelegate(), relationship, true);
+ }
+
+ @Override
+ public String getTokenValue() {
+ return AddRelationshipToModel.getTokenValue(relationship);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/725e6ae9/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/model/DropTableToModel.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/model/DropTableToModel.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/model/DropTableToModel.java
new file mode 100644
index 0000000..16c7d46
--- /dev/null
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/model/DropTableToModel.java
@@ -0,0 +1,54 @@
+/*****************************************************************
+ * 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.merge.token.model;
+
+import org.apache.cayenne.dbsync.merge.context.MergerContext;
+import org.apache.cayenne.dbsync.merge.factory.MergerTokenFactory;
+import org.apache.cayenne.dbsync.merge.token.MergerToken;
+import org.apache.cayenne.map.DataMap;
+import org.apache.cayenne.map.DbEntity;
+import org.apache.cayenne.map.ObjEntity;
+
+/**
+ * A {@link MergerToken} to remove a {@link DbEntity} from a {@link DataMap}. Any
+ * {@link ObjEntity} mapped to the {@link DbEntity} will also be removed.
+ *
+ */
+public class DropTableToModel extends AbstractToModelToken.Entity {
+
+ public DropTableToModel(DbEntity entity) {
+ super("Drop Table", entity);
+ }
+
+ @Override
+ public MergerToken createReverse(MergerTokenFactory factory) {
+ return factory.createCreateTableToDb(getEntity());
+ }
+
+ @Override
+ public void execute(MergerContext mergerContext) {
+ for (ObjEntity objEntity : getEntity().mappedObjEntities()) {
+ objEntity.getDataMap().removeObjEntity(objEntity.getName(), true);
+ mergerContext.getDelegate().objEntityRemoved(objEntity);
+ }
+ getEntity().getDataMap().removeDbEntity(getEntity().getName(), true);
+ mergerContext.getDelegate().dbEntityRemoved(getEntity());
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/725e6ae9/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/model/SetAllowNullToModel.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/model/SetAllowNullToModel.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/model/SetAllowNullToModel.java
new file mode 100644
index 0000000..7ac7a7d
--- /dev/null
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/model/SetAllowNullToModel.java
@@ -0,0 +1,48 @@
+/*****************************************************************
+ * 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.merge.token.model;
+
+import org.apache.cayenne.dbsync.merge.context.MergerContext;
+import org.apache.cayenne.dbsync.merge.factory.MergerTokenFactory;
+import org.apache.cayenne.dbsync.merge.token.MergerToken;
+import org.apache.cayenne.map.DbAttribute;
+import org.apache.cayenne.map.DbEntity;
+
+/**
+ * A {@link MergerToken} to set the mandatory field of a {@link DbAttribute} to false
+ *
+ */
+public class SetAllowNullToModel extends AbstractToModelToken.EntityAndColumn {
+
+ public SetAllowNullToModel(DbEntity entity, DbAttribute column) {
+ super("Set Allow Null", entity, column);
+ }
+
+ @Override
+ public MergerToken createReverse(MergerTokenFactory factory) {
+ return factory.createSetNotNullToDb(getEntity(), getColumn());
+ }
+
+ @Override
+ public void execute(MergerContext mergerContext) {
+ getColumn().setMandatory(false);
+ mergerContext.getDelegate().dbAttributeModified(getColumn());
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/725e6ae9/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/model/SetColumnTypeToModel.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/model/SetColumnTypeToModel.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/model/SetColumnTypeToModel.java
new file mode 100644
index 0000000..baf7e7d
--- /dev/null
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/model/SetColumnTypeToModel.java
@@ -0,0 +1,98 @@
+/*****************************************************************
+ * 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.merge.token.model;
+
+import org.apache.cayenne.dba.TypesMapping;
+import org.apache.cayenne.dbsync.merge.context.MergerContext;
+import org.apache.cayenne.dbsync.merge.factory.MergerTokenFactory;
+import org.apache.cayenne.dbsync.merge.token.MergerToken;
+import org.apache.cayenne.map.DbAttribute;
+import org.apache.cayenne.map.DbEntity;
+
+/**
+ * A {@link MergerToken} that modifies one original {@link DbAttribute} to match another
+ * new {@link DbAttribute}s type, maxLength and precision. The name and mandatory fields
+ * are not modified by this token.
+ *
+ */
+public class SetColumnTypeToModel extends AbstractToModelToken.Entity {
+
+ private DbAttribute columnOriginal;
+ private DbAttribute columnNew;
+
+ public SetColumnTypeToModel(DbEntity entity, DbAttribute columnOriginal, DbAttribute columnNew) {
+ super("Set Column Type", entity);
+ this.columnOriginal = columnOriginal;
+ this.columnNew = columnNew;
+ }
+
+ @Override
+ public MergerToken createReverse(MergerTokenFactory factory) {
+ return factory.createSetColumnTypeToDb(getEntity(), columnNew, columnOriginal);
+ }
+
+ @Override
+ public void execute(MergerContext mergerContext) {
+ columnOriginal.setType(columnNew.getType());
+ columnOriginal.setMaxLength(columnNew.getMaxLength());
+ columnOriginal.setAttributePrecision(columnNew.getAttributePrecision());
+ columnOriginal.setScale(columnNew.getScale());
+ mergerContext.getDelegate().dbAttributeModified(columnOriginal);
+ }
+
+ @Override
+ public String getTokenValue() {
+ StringBuilder sb = new StringBuilder();
+ sb.append(getEntity().getName());
+ sb.append(".");
+ sb.append(columnNew.getName());
+
+ if (columnOriginal.getType() != columnNew.getType()) {
+ sb.append(" type: ");
+ sb.append(TypesMapping.getSqlNameByType(columnOriginal.getType()));
+ sb.append(" -> ");
+ sb.append(TypesMapping.getSqlNameByType(columnNew.getType()));
+ }
+
+ if (columnOriginal.getMaxLength() != columnNew.getMaxLength()) {
+ sb.append(" maxLength: ");
+ sb.append(columnOriginal.getMaxLength());
+ sb.append(" -> ");
+ sb.append(columnNew.getMaxLength());
+ }
+
+ if (columnOriginal.getAttributePrecision() != columnNew.getAttributePrecision()) {
+ sb.append(" precision: ");
+ sb.append(columnOriginal.getAttributePrecision());
+ sb.append(" -> ");
+ sb.append(columnNew.getAttributePrecision());
+ }
+
+ if (columnOriginal.getScale() != columnNew.getScale()) {
+ sb.append(" scale: ");
+ sb.append(columnOriginal.getScale());
+ sb.append(" -> ");
+ sb.append(columnNew.getScale());
+ }
+
+ return sb.toString();
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/725e6ae9/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/model/SetNotNullToModel.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/model/SetNotNullToModel.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/model/SetNotNullToModel.java
new file mode 100644
index 0000000..d839322
--- /dev/null
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/model/SetNotNullToModel.java
@@ -0,0 +1,48 @@
+/*****************************************************************
+ * 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.merge.token.model;
+
+import org.apache.cayenne.dbsync.merge.context.MergerContext;
+import org.apache.cayenne.dbsync.merge.factory.MergerTokenFactory;
+import org.apache.cayenne.dbsync.merge.token.MergerToken;
+import org.apache.cayenne.map.DbAttribute;
+import org.apache.cayenne.map.DbEntity;
+
+/**
+ * A {@link MergerToken} to set the mandatory field of a {@link DbAttribute} to true
+ *
+ */
+public class SetNotNullToModel extends AbstractToModelToken.EntityAndColumn {
+
+ public SetNotNullToModel(DbEntity entity, DbAttribute column) {
+ super("Set Not Null", entity, column);
+ }
+
+ @Override
+ public MergerToken createReverse(MergerTokenFactory factory) {
+ return factory.createSetAllowNullToDb(getEntity(), getColumn());
+ }
+
+ @Override
+ public void execute(MergerContext mergerContext) {
+ getColumn().setMandatory(true);
+ mergerContext.getDelegate().dbAttributeModified(getColumn());
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/725e6ae9/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/model/SetPrimaryKeyToModel.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/model/SetPrimaryKeyToModel.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/model/SetPrimaryKeyToModel.java
new file mode 100644
index 0000000..93d9cf0
--- /dev/null
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/model/SetPrimaryKeyToModel.java
@@ -0,0 +1,83 @@
+/*****************************************************************
+ * 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.merge.token.model;
+
+import org.apache.cayenne.dbsync.merge.context.MergerContext;
+import org.apache.cayenne.dbsync.merge.factory.MergerTokenFactory;
+import org.apache.cayenne.dbsync.merge.token.MergerToken;
+import org.apache.cayenne.map.DbAttribute;
+import org.apache.cayenne.map.DbEntity;
+import org.apache.cayenne.map.event.AttributeEvent;
+
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+
+public class SetPrimaryKeyToModel extends AbstractToModelToken.Entity {
+
+ private Collection<DbAttribute> primaryKeyOriginal;
+ private Collection<DbAttribute> primaryKeyNew;
+ private String detectedPrimaryKeyName;
+ private Set<String> primaryKeyNewAttributeNames = new HashSet<String>();
+
+ public SetPrimaryKeyToModel(DbEntity entity,
+ Collection<DbAttribute> primaryKeyOriginal,
+ Collection<DbAttribute> primaryKeyNew, String detectedPrimaryKeyName) {
+ super("Set Primary Key", entity);
+
+ this.primaryKeyOriginal = primaryKeyOriginal;
+ this.primaryKeyNew = primaryKeyNew;
+ this.detectedPrimaryKeyName = detectedPrimaryKeyName;
+
+ for (DbAttribute attr : primaryKeyNew) {
+ primaryKeyNewAttributeNames.add(attr.getName().toUpperCase());
+ }
+ }
+
+ @Override
+ public MergerToken createReverse(MergerTokenFactory factory) {
+ return factory.createSetPrimaryKeyToDb(
+ getEntity(),
+ primaryKeyNew,
+ primaryKeyOriginal,
+ detectedPrimaryKeyName);
+ }
+
+ @Override
+ public void execute(MergerContext mergerContext) {
+ DbEntity e = getEntity();
+
+ for (DbAttribute attr : e.getAttributes()) {
+
+ boolean wasPrimaryKey = attr.isPrimaryKey();
+ boolean willBePrimaryKey = primaryKeyNewAttributeNames.contains(attr
+ .getName()
+ .toUpperCase());
+
+ if (wasPrimaryKey != willBePrimaryKey) {
+ attr.setPrimaryKey(willBePrimaryKey);
+ e.dbAttributeChanged(new AttributeEvent(this, attr, e));
+ mergerContext.getDelegate().dbAttributeModified(attr);
+ }
+
+ }
+
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/725e6ae9/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/AddColumnToModelIT.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/AddColumnToModelIT.java b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/AddColumnToModelIT.java
deleted file mode 100644
index 318e0da..0000000
--- a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/AddColumnToModelIT.java
+++ /dev/null
@@ -1,100 +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.dbsync.merge;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-
-import java.sql.Types;
-import java.util.List;
-
-import org.apache.cayenne.dbsync.merge.token.AddColumnToModel;
-import org.apache.cayenne.dbsync.merge.token.MergerToken;
-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.junit.Test;
-
-public class AddColumnToModelIT extends MergeCase {
-
- @Test
- public void testAddColumn() throws Exception {
- dropTableIfPresent("NEW_TABLE");
- assertTokensAndExecute(0, 0);
-
- DbEntity dbEntity = new DbEntity("NEW_TABLE");
-
- DbAttribute column1 = new DbAttribute("ID", Types.INTEGER, dbEntity);
- column1.setMandatory(true);
- column1.setPrimaryKey(true);
- dbEntity.addAttribute(column1);
-
- DbAttribute column2 = new DbAttribute("NAME", Types.VARCHAR, dbEntity);
- column2.setMaxLength(10);
- column2.setMandatory(false);
- dbEntity.addAttribute(column2);
-
- map.addDbEntity(dbEntity);
-
- assertTokensAndExecute(1, 0);
- assertTokensAndExecute(0, 0);
-
- ObjEntity objEntity = new ObjEntity("NewTable");
- objEntity.setDbEntity(dbEntity);
- ObjAttribute oatr1 = new ObjAttribute("name");
- oatr1.setDbAttributePath(column2.getName());
- oatr1.setType("java.lang.String");
- objEntity.addAttribute(oatr1);
- map.addObjEntity(objEntity);
-
- // remove name column
- objEntity.removeAttribute(oatr1.getName());
- dbEntity.removeAttribute(column2.getName());
- assertNull(objEntity.getAttribute(oatr1.getName()));
- assertEquals(0, objEntity.getAttributes().size());
- assertNull(dbEntity.getAttribute(column2.getName()));
-
- List<MergerToken> tokens = createMergeTokens();
- assertEquals(1, tokens.size());
- MergerToken token = tokens.get(0);
- if (token.getDirection().isToDb()) {
- token = token.createReverse(mergerFactory());
- }
- assertTrue(token instanceof AddColumnToModel);
- execute(token);
- assertEquals(1, objEntity.getAttributes().size());
- assertEquals("java.lang.String", objEntity.getAttributes().iterator()
- .next().getType());
-
- // clear up
- map.removeObjEntity(objEntity.getName(), true);
- map.removeDbEntity(dbEntity.getName(), true);
- resolver.refreshMappingCache();
- assertNull(map.getObjEntity(objEntity.getName()));
- assertNull(map.getDbEntity(dbEntity.getName()));
- assertFalse(map.getDbEntities().contains(dbEntity));
-
- assertTokensAndExecute(1, 0);
- assertTokensAndExecute(0, 0);
- }
-
-}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/725e6ae9/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/CreateTableToModelIT.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/CreateTableToModelIT.java b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/CreateTableToModelIT.java
deleted file mode 100644
index b3a695b..0000000
--- a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/CreateTableToModelIT.java
+++ /dev/null
@@ -1,100 +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.dbsync.merge;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-
-import java.sql.Types;
-import java.util.List;
-
-import org.apache.cayenne.dbsync.merge.token.CreateTableToModel;
-import org.apache.cayenne.dbsync.merge.token.MergerToken;
-import org.apache.cayenne.map.DbAttribute;
-import org.apache.cayenne.map.DbEntity;
-import org.apache.cayenne.map.ObjEntity;
-import org.junit.Test;
-
-public class CreateTableToModelIT extends MergeCase {
-
- @Test
- public void testAddTable() throws Exception {
- dropTableIfPresent("NEW_TABLE");
- assertTokensAndExecute(0, 0);
-
- DbEntity dbEntity = new DbEntity("NEW_TABLE");
-
- DbAttribute column1 = new DbAttribute("ID", Types.INTEGER, dbEntity);
- column1.setMandatory(true);
- column1.setPrimaryKey(true);
- dbEntity.addAttribute(column1);
-
- DbAttribute column2 = new DbAttribute("NAME", Types.VARCHAR, dbEntity);
- column2.setMaxLength(10);
- column2.setMandatory(false);
- dbEntity.addAttribute(column2);
-
- // for the new entity to the db
- execute(mergerFactory().createCreateTableToDb(dbEntity));
-
- List<MergerToken> tokens = createMergeTokens();
- assertEquals(1, tokens.size());
- MergerToken token = tokens.get(0);
- if (token.getDirection().isToDb()) {
- token = token.createReverse(mergerFactory());
- }
- assertTrue(token.getClass().getName(), token instanceof CreateTableToModel);
-
- execute(token);
-
- ObjEntity objEntity = null;
- for (ObjEntity candidate : map.getObjEntities()) {
- if (dbEntity.getName().equalsIgnoreCase(candidate.getDbEntityName())) {
- objEntity = candidate;
- break;
- }
- }
- assertNotNull(objEntity);
-
- assertEquals(objEntity.getClassName(), map.getDefaultPackage() + "." + objEntity.getName());
- assertEquals(objEntity.getSuperClassName(), map.getDefaultSuperclass());
- assertEquals(objEntity.getClientClassName(), map.getDefaultClientPackage() + "." + objEntity.getName());
- assertEquals(objEntity.getClientSuperClassName(), map.getDefaultClientSuperclass());
-
- assertEquals(1, objEntity.getAttributes().size());
- assertEquals("java.lang.String", objEntity.getAttributes().iterator().next().getType());
-
- // clear up
- // fix psql case issue
- map.removeDbEntity(objEntity.getDbEntity().getName(), true);
- map.removeObjEntity(objEntity.getName(), true);
- map.removeDbEntity(dbEntity.getName(), true);
- resolver.refreshMappingCache();
- assertNull(map.getObjEntity(objEntity.getName()));
- assertNull(map.getDbEntity(dbEntity.getName()));
- assertFalse(map.getDbEntities().contains(dbEntity));
-
- assertTokensAndExecute(1, 0);
- assertTokensAndExecute(0, 0);
- }
-}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/725e6ae9/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/DataMapMergerTest.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/DataMapMergerTest.java b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/DataMapMergerTest.java
index c70752a..7bcb1c2 100644
--- a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/DataMapMergerTest.java
+++ b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/DataMapMergerTest.java
@@ -21,7 +21,7 @@ package org.apache.cayenne.dbsync.merge;
import org.apache.cayenne.dbsync.merge.builders.DbEntityBuilder;
import org.apache.cayenne.dbsync.merge.factory.HSQLMergerTokenFactory;
import org.apache.cayenne.dbsync.merge.token.MergerToken;
-import org.apache.cayenne.dbsync.merge.token.SetColumnTypeToDb;
+import org.apache.cayenne.dbsync.merge.token.db.SetColumnTypeToDb;
import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.map.DbEntity;
import org.junit.Test;
http://git-wip-us.apache.org/repos/asf/cayenne/blob/725e6ae9/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/DropColumnToModelIT.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/DropColumnToModelIT.java b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/DropColumnToModelIT.java
deleted file mode 100644
index b0a23a7..0000000
--- a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/DropColumnToModelIT.java
+++ /dev/null
@@ -1,238 +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.dbsync.merge;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import java.sql.Types;
-import java.util.List;
-
-import org.apache.cayenne.dbsync.merge.token.DropColumnToModel;
-import org.apache.cayenne.dbsync.merge.token.DropRelationshipToModel;
-import org.apache.cayenne.dbsync.merge.token.MergerToken;
-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.ObjAttribute;
-import org.apache.cayenne.map.ObjEntity;
-import org.apache.cayenne.map.ObjRelationship;
-import org.junit.Test;
-
-public class DropColumnToModelIT extends MergeCase {
-
- @Test
- public void testSimpleColumn() throws Exception {
- dropTableIfPresent("NEW_TABLE");
-
- assertTokensAndExecute(0, 0);
-
- DbEntity dbEntity = new DbEntity("NEW_TABLE");
-
- DbAttribute column1 = new DbAttribute("ID", Types.INTEGER, dbEntity);
- column1.setMandatory(true);
- column1.setPrimaryKey(true);
- dbEntity.addAttribute(column1);
-
- DbAttribute column2 = new DbAttribute("NAME", Types.VARCHAR, dbEntity);
- column2.setMaxLength(10);
- column2.setMandatory(false);
- dbEntity.addAttribute(column2);
-
- map.addDbEntity(dbEntity);
-
- assertTokensAndExecute(1, 0);
- assertTokensAndExecute(0, 0);
-
- ObjEntity objEntity = new ObjEntity("NewTable");
- objEntity.setDbEntity(dbEntity);
- ObjAttribute oatr1 = new ObjAttribute("name");
- oatr1.setDbAttributePath(column2.getName());
- oatr1.setType("java.lang.String");
- objEntity.addAttribute(oatr1);
- map.addObjEntity(objEntity);
-
- // force drop name column in db
- MergerToken token = mergerFactory().createDropColumnToDb(dbEntity, column2);
- execute(token);
-
- List<MergerToken> tokens = createMergeTokens();
- assertEquals(1, tokens.size());
- token = tokens.get(0);
- if (token.getDirection().isToDb()) {
- token = token.createReverse(mergerFactory());
- }
- assertTrue(token instanceof DropColumnToModel);
- execute(token);
- assertNull(dbEntity.getAttribute(column2.getName()));
- assertNull(objEntity.getAttribute(oatr1.getName()));
-
- // clear up
- map.removeObjEntity(objEntity.getName(), true);
- map.removeDbEntity(dbEntity.getName(), true);
- resolver.refreshMappingCache();
- assertNull(map.getObjEntity(objEntity.getName()));
- assertNull(map.getDbEntity(dbEntity.getName()));
- assertFalse(map.getDbEntities().contains(dbEntity));
-
- assertTokensAndExecute(1, 0);
- assertTokensAndExecute(0, 0);
- }
-
- @Test
- public void testRemoveFKColumnWithoutRelationshipInDb() throws Exception {
- dropTableIfPresent("NEW_TABLE");
- dropTableIfPresent("NEW_TABLE2");
-
- assertTokensAndExecute(0, 0);
-
- 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);
- DbAttribute e2col3 = new DbAttribute("NAME", Types.VARCHAR, dbEntity2);
- e2col3.setMaxLength(10);
- dbEntity2.addAttribute(e2col3);
-
- map.addDbEntity(dbEntity2);
-
- assertTokensAndExecute(2, 0);
- assertTokensAndExecute(0, 0);
-
- // force drop fk column in db
- execute(mergerFactory().createDropColumnToDb(dbEntity2, e2col2));
-
- // create db relationships, but do not sync them to db
- 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());
-
- // create ObjEntities
- ObjEntity objEntity1 = new ObjEntity("NewTable");
- objEntity1.setDbEntity(dbEntity1);
- ObjAttribute oatr1 = new ObjAttribute("name");
- oatr1.setDbAttributePath(e1col2.getName());
- oatr1.setType("java.lang.String");
- objEntity1.addAttribute(oatr1);
- map.addObjEntity(objEntity1);
- ObjEntity objEntity2 = new ObjEntity("NewTable2");
- objEntity2.setDbEntity(dbEntity2);
- ObjAttribute o2a1 = new ObjAttribute("name");
- o2a1.setDbAttributePath(e2col3.getName());
- o2a1.setType("java.lang.String");
- objEntity2.addAttribute(o2a1);
- map.addObjEntity(objEntity2);
-
- // create ObjRelationships
- assertEquals(0, objEntity1.getRelationships().size());
- assertEquals(0, objEntity2.getRelationships().size());
- ObjRelationship objRel1To2 = new ObjRelationship("objRel1To2");
- objRel1To2.addDbRelationship(rel1To2);
- objRel1To2.setSourceEntity(objEntity1);
- objRel1To2.setTargetEntityName(objEntity2);
- objEntity1.addRelationship(objRel1To2);
- ObjRelationship objRel2To1 = new ObjRelationship("objRel2To1");
- objRel2To1.addDbRelationship(rel2To1);
- objRel2To1.setSourceEntity(objEntity2);
- objRel2To1.setTargetEntityName(objEntity1);
- objEntity2.addRelationship(objRel2To1);
- assertEquals(1, objEntity1.getRelationships().size());
- assertEquals(1, objEntity2.getRelationships().size());
- assertSame(objRel1To2, objRel2To1.getReverseRelationship());
- assertSame(objRel2To1, objRel1To2.getReverseRelationship());
-
- // try do use the merger to remove the column and relationship in the
- // model
- List<MergerToken> tokens = createMergeTokens();
- assertTokens(tokens, 2, 0);
- // TODO: reversing the following two tokens should also reverse the
- // order
- MergerToken token0 = tokens.get(0).createReverse(mergerFactory());
- MergerToken token1 = tokens.get(1).createReverse(mergerFactory());
- if (!(token0 instanceof DropRelationshipToModel && token1 instanceof DropColumnToModel || token1 instanceof DropRelationshipToModel
- && token0 instanceof DropColumnToModel)) {
- fail();
- }
- // do not execute DropRelationshipToModel, only DropColumnToModel.
- if (token1 instanceof DropColumnToModel) {
- execute(token1);
- } else {
- execute(token0);
- }
-
- // check after merging
- assertNull(dbEntity2.getAttribute(e2col2.getName()));
- assertEquals(0, dbEntity1.getRelationships().size());
- assertEquals(0, dbEntity2.getRelationships().size());
- assertEquals(0, objEntity1.getRelationships().size());
- assertEquals(0, objEntity2.getRelationships().size());
-
- // clear up
-
- dbEntity1.removeRelationship(rel1To2.getName());
- dbEntity2.removeRelationship(rel2To1.getName());
- map.removeObjEntity(objEntity1.getName(), true);
- map.removeDbEntity(dbEntity1.getName(), true);
- map.removeObjEntity(objEntity2.getName(), true);
- map.removeDbEntity(dbEntity2.getName(), true);
- resolver.refreshMappingCache();
- assertNull(map.getObjEntity(objEntity1.getName()));
- assertNull(map.getDbEntity(dbEntity1.getName()));
- assertNull(map.getObjEntity(objEntity2.getName()));
- assertNull(map.getDbEntity(dbEntity2.getName()));
- assertFalse(map.getDbEntities().contains(dbEntity1));
- assertFalse(map.getDbEntities().contains(dbEntity2));
-
- assertTokensAndExecute(2, 0);
- assertTokensAndExecute(0, 0);
- }
-}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/725e6ae9/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/DropRelationshipToModelIT.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/DropRelationshipToModelIT.java b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/DropRelationshipToModelIT.java
deleted file mode 100644
index d2ac514..0000000
--- a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/DropRelationshipToModelIT.java
+++ /dev/null
@@ -1,193 +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.dbsync.merge;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.fail;
-
-import java.sql.Types;
-import java.util.List;
-
-import org.apache.cayenne.dbsync.merge.token.DropColumnToModel;
-import org.apache.cayenne.dbsync.merge.token.DropRelationshipToModel;
-import org.apache.cayenne.dbsync.merge.token.MergerToken;
-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.ObjAttribute;
-import org.apache.cayenne.map.ObjEntity;
-import org.apache.cayenne.map.ObjRelationship;
-import org.junit.Test;
-
-public class DropRelationshipToModelIT extends MergeCase {
-
- @Test
- public void testForeignKey() throws Exception {
- dropTableIfPresent("NEW_TABLE");
- dropTableIfPresent("NEW_TABLE2");
-
- assertTokensAndExecute(0, 0);
-
- 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);
- DbAttribute e2col3 = new DbAttribute("NAME", Types.VARCHAR, dbEntity2);
- e2col3.setMaxLength(10);
- dbEntity2.addAttribute(e2col3);
-
- 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());
-
- assertTokensAndExecute(3, 0);
- assertTokensAndExecute(0, 0);
-
- // create ObjEntities
- ObjEntity objEntity1 = new ObjEntity("NewTable");
- objEntity1.setDbEntity(dbEntity1);
- ObjAttribute oatr1 = new ObjAttribute("name");
- oatr1.setDbAttributePath(e1col2.getName());
- oatr1.setType("java.lang.String");
- objEntity1.addAttribute(oatr1);
- map.addObjEntity(objEntity1);
- ObjEntity objEntity2 = new ObjEntity("NewTable2");
- objEntity2.setDbEntity(dbEntity2);
- ObjAttribute o2a1 = new ObjAttribute("name");
- o2a1.setDbAttributePath(e2col3.getName());
- o2a1.setType("java.lang.String");
- objEntity2.addAttribute(o2a1);
- map.addObjEntity(objEntity2);
-
- // create ObjRelationships
- assertEquals(0, objEntity1.getRelationships().size());
- assertEquals(0, objEntity2.getRelationships().size());
- ObjRelationship objRel1To2 = new ObjRelationship("objRel1To2");
- objRel1To2.addDbRelationship(rel1To2);
- objRel1To2.setSourceEntity(objEntity1);
- objRel1To2.setTargetEntityName(objEntity2);
- objEntity1.addRelationship(objRel1To2);
- ObjRelationship objRel2To1 = new ObjRelationship("objRel2To1");
- objRel2To1.addDbRelationship(rel2To1);
- objRel2To1.setSourceEntity(objEntity2);
- objRel2To1.setTargetEntityName(objEntity1);
- objEntity2.addRelationship(objRel2To1);
- assertEquals(1, objEntity1.getRelationships().size());
- assertEquals(1, objEntity2.getRelationships().size());
- assertSame(objRel1To2, objRel2To1.getReverseRelationship());
- assertSame(objRel2To1, objRel1To2.getReverseRelationship());
-
- // remove relationship and fk from model, merge to db and read to model
- dbEntity2.removeRelationship(rel2To1.getName());
- dbEntity1.removeRelationship(rel1To2.getName());
- dbEntity2.removeAttribute(e2col2.getName());
- List<MergerToken> tokens = createMergeTokens();
-
- /**
- * Add Relationship NEW_TABLE->NEW_TABLE2 To Model
- * Drop Relationship NEW_TABLE2->NEW_TABLE To DB
- * Drop Column NEW_TABLE2.FK To DB
- * */
- assertTokens(tokens, 2, 0);
- for (MergerToken token : tokens) {
- if (token.getDirection().isToDb()) {
- execute(token);
- }
- }
- assertTokensAndExecute(0, 0);
-
- dbEntity2.addRelationship(rel2To1);
- dbEntity1.addRelationship(rel1To2);
- dbEntity2.addAttribute(e2col2);
-
- // try do use the merger to remove the relationship in the model
- tokens = createMergeTokens();
- assertTokens(tokens, 2, 0);
- // TODO: reversing the following two tokens should also reverse the
- // order
- MergerToken token0 = tokens.get(0).createReverse(mergerFactory());
- MergerToken token1 = tokens.get(1).createReverse(mergerFactory());
- if (!(token0 instanceof DropRelationshipToModel && token1 instanceof DropColumnToModel || token1 instanceof DropRelationshipToModel
- && token0 instanceof DropColumnToModel)) {
- fail();
- }
- execute(token0);
- execute(token1);
-
- // check after merging
- assertNull(dbEntity2.getAttribute(e2col2.getName()));
- assertEquals(0, dbEntity1.getRelationships().size());
- assertEquals(0, dbEntity2.getRelationships().size());
- assertEquals(0, objEntity1.getRelationships().size());
- assertEquals(0, objEntity2.getRelationships().size());
-
- // clear up
- dbEntity1.removeRelationship(rel1To2.getName());
- dbEntity2.removeRelationship(rel2To1.getName());
- map.removeObjEntity(objEntity1.getName(), true);
- map.removeDbEntity(dbEntity1.getName(), true);
- map.removeObjEntity(objEntity2.getName(), true);
- map.removeDbEntity(dbEntity2.getName(), true);
- resolver.refreshMappingCache();
- assertNull(map.getObjEntity(objEntity1.getName()));
- assertNull(map.getDbEntity(dbEntity1.getName()));
- assertNull(map.getObjEntity(objEntity2.getName()));
- assertNull(map.getDbEntity(dbEntity2.getName()));
- assertFalse(map.getDbEntities().contains(dbEntity1));
- assertFalse(map.getDbEntities().contains(dbEntity2));
-
- assertTokensAndExecute(2, 0);
- assertTokensAndExecute(0, 0);
- }
-}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/725e6ae9/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/DropTableToModelIT.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/DropTableToModelIT.java b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/DropTableToModelIT.java
deleted file mode 100644
index 63e0047..0000000
--- a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/DropTableToModelIT.java
+++ /dev/null
@@ -1,96 +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.dbsync.merge;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-
-import java.sql.Types;
-import java.util.List;
-
-import org.apache.cayenne.dbsync.merge.token.DropTableToModel;
-import org.apache.cayenne.dbsync.merge.token.MergerToken;
-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.junit.Test;
-
-public class DropTableToModelIT extends MergeCase {
-
- @Test
- public void testDropTable() throws Exception {
- dropTableIfPresent("NEW_TABLE");
- assertTokensAndExecute(0, 0);
-
- DbEntity dbEntity = new DbEntity("NEW_TABLE");
-
- DbAttribute column1 = new DbAttribute("ID", Types.INTEGER, dbEntity);
- column1.setMandatory(true);
- column1.setPrimaryKey(true);
- dbEntity.addAttribute(column1);
-
- DbAttribute column2 = new DbAttribute("NAME", Types.VARCHAR, dbEntity);
- column2.setMaxLength(10);
- column2.setMandatory(false);
- dbEntity.addAttribute(column2);
-
- map.addDbEntity(dbEntity);
-
- assertTokensAndExecute(1, 0);
- assertTokensAndExecute(0, 0);
-
- ObjEntity objEntity = new ObjEntity("NewTable");
- objEntity.setDbEntity(dbEntity);
- ObjAttribute oatr1 = new ObjAttribute("name");
- oatr1.setDbAttributePath(column2.getName());
- oatr1.setType("java.lang.String");
- objEntity.addAttribute(oatr1);
- map.addObjEntity(objEntity);
-
- // force drop table in db
- MergerToken token = mergerFactory().createDropTableToDb(dbEntity);
- execute(token);
-
- List<MergerToken> tokens = createMergeTokens();
- assertEquals(1, tokens.size());
- token = tokens.get(0);
- if (token.getDirection().isToDb()) {
- token = token.createReverse(mergerFactory());
- }
- assertTrue(token instanceof DropTableToModel);
- execute(token);
- resolver.refreshMappingCache();
- assertNull(map.getDbEntity(dbEntity.getName()));
- assertNull(map.getObjEntity(objEntity.getName()));
-
- // clear up
- map.removeObjEntity(objEntity.getName(), true);
- map.removeDbEntity(dbEntity.getName(), true);
- resolver.refreshMappingCache();
- assertNull(map.getObjEntity(objEntity.getName()));
- assertNull(map.getDbEntity(dbEntity.getName()));
- assertFalse(map.getDbEntities().contains(dbEntity));
-
- assertTokensAndExecute(0, 0);
- }
-
-}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/725e6ae9/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/MergeCase.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/MergeCase.java b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/MergeCase.java
index 08eae3c..a722856 100644
--- a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/MergeCase.java
+++ b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/MergeCase.java
@@ -25,7 +25,7 @@ import org.apache.cayenne.dba.DbAdapter;
import org.apache.cayenne.dbsync.merge.context.MergerContext;
import org.apache.cayenne.dbsync.merge.factory.MergerTokenFactory;
import org.apache.cayenne.dbsync.merge.factory.MergerTokenFactoryProvider;
-import org.apache.cayenne.dbsync.merge.token.AbstractToDbToken;
+import org.apache.cayenne.dbsync.merge.token.db.AbstractToDbToken;
import org.apache.cayenne.dbsync.merge.token.MergerToken;
import org.apache.cayenne.dbsync.naming.DefaultObjectNameGenerator;
import org.apache.cayenne.dbsync.naming.NoStemStemmer;
@@ -99,8 +99,8 @@ public abstract class MergeCase extends DbSyncCase {
assertTokensAndExecute(0, 0);
}
- protected DbMerger.Builder merger() {
- return DbMerger.builder(mergerFactory());
+ protected DataMapMerger.Builder merger() {
+ return DataMapMerger.builder(mergerFactory());
}
protected List<MergerToken> createMergeTokens() {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/725e6ae9/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/SetAllowNullToDbIT.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/SetAllowNullToDbIT.java b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/SetAllowNullToDbIT.java
deleted file mode 100644
index 6391ad0..0000000
--- a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/SetAllowNullToDbIT.java
+++ /dev/null
@@ -1,66 +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.dbsync.merge;
-
-import static org.junit.Assert.assertNotNull;
-
-import java.sql.Types;
-
-import org.apache.cayenne.map.DbAttribute;
-import org.apache.cayenne.map.DbEntity;
-import org.junit.Test;
-
-public class SetAllowNullToDbIT extends MergeCase {
-
- @Test
- public void test() throws Exception {
- DbEntity dbEntity = map.getDbEntity("PAINTING");
- assertNotNull(dbEntity);
-
- // create and add new column to model and db
- DbAttribute column = new DbAttribute("NEWCOL2", Types.VARCHAR, dbEntity);
-
- try {
-
- column.setMandatory(true);
- column.setMaxLength(10);
- dbEntity.addAttribute(column);
- assertTokensAndExecute(2, 0);
-
- // check that is was merged
- assertTokensAndExecute(0, 0);
-
- // set null
- column.setMandatory(false);
-
- // merge to db
- assertTokensAndExecute(1, 0);
-
- // check that is was merged
- assertTokensAndExecute(0, 0);
-
- // clean up
- } finally {
- dbEntity.removeAttribute(column.getName());
- assertTokensAndExecute(1, 0);
- assertTokensAndExecute(0, 0);
- }
- }
-
-}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/725e6ae9/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/SetNotNullToDbIT.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/SetNotNullToDbIT.java b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/SetNotNullToDbIT.java
deleted file mode 100644
index 508d0f8..0000000
--- a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/SetNotNullToDbIT.java
+++ /dev/null
@@ -1,62 +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.dbsync.merge;
-
-import static org.junit.Assert.assertNotNull;
-
-import java.sql.Types;
-
-import org.apache.cayenne.map.DbAttribute;
-import org.apache.cayenne.map.DbEntity;
-import org.junit.Test;
-
-public class SetNotNullToDbIT extends MergeCase {
-
- @Test
- public void test() throws Exception {
- DbEntity dbEntity = map.getDbEntity("PAINTING");
- assertNotNull(dbEntity);
-
- // 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);
- assertTokensAndExecute(1, 0);
-
- // check that is was merged
- assertTokensAndExecute(0, 0);
-
- // set not null
- column.setMandatory(true);
-
- // merge to db
- assertTokensAndExecute(1, 0);
-
- // check that is was merged
- assertTokensAndExecute(0, 0);
-
- // clean up
- dbEntity.removeAttribute(column.getName());
- assertTokensAndExecute(1, 0);
- assertTokensAndExecute(0, 0);
- }
-
-}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/725e6ae9/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/SetPrimaryKeyToDbIT.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/SetPrimaryKeyToDbIT.java b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/SetPrimaryKeyToDbIT.java
deleted file mode 100644
index 3b513e7..0000000
--- a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/SetPrimaryKeyToDbIT.java
+++ /dev/null
@@ -1,58 +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.dbsync.merge;
-
-import java.sql.Types;
-
-import org.apache.cayenne.map.DbAttribute;
-import org.apache.cayenne.map.DbEntity;
-import org.junit.Test;
-
-public class SetPrimaryKeyToDbIT extends MergeCase {
-
- @Test
- public void test() throws Exception {
- dropTableIfPresent("NEW_TABLE");
- assertTokensAndExecute(0, 0);
-
- DbEntity dbEntity1 = new DbEntity("NEW_TABLE");
-
- DbAttribute e1col1 = new DbAttribute("ID1", Types.INTEGER, dbEntity1);
- e1col1.setMandatory(true);
- e1col1.setPrimaryKey(true);
- dbEntity1.addAttribute(e1col1);
- map.addDbEntity(dbEntity1);
-
- assertTokensAndExecute(1, 0);
- assertTokensAndExecute(0, 0);
-
- DbAttribute e1col2 = new DbAttribute("ID2", Types.INTEGER, dbEntity1);
- e1col2.setMandatory(true);
- dbEntity1.addAttribute(e1col2);
-
- assertTokensAndExecute(2, 0);
- assertTokensAndExecute(0, 0);
-
- e1col1.setPrimaryKey(false);
- e1col2.setPrimaryKey(true);
-
- assertTokensAndExecute(1, 0);
- assertTokensAndExecute(0, 0);
- }
-}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/725e6ae9/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/TokenComparatorTest.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/TokenComparatorTest.java b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/TokenComparatorTest.java
deleted file mode 100644
index edb43fa..0000000
--- a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/TokenComparatorTest.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.dbsync.merge;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-import org.apache.cayenne.dbsync.merge.token.AddColumnToDb;
-import org.apache.cayenne.dbsync.merge.token.AddColumnToModel;
-import org.apache.cayenne.dbsync.merge.token.AddRelationshipToDb;
-import org.apache.cayenne.dbsync.merge.token.AddRelationshipToModel;
-import org.apache.cayenne.dbsync.merge.token.CreateTableToDb;
-import org.apache.cayenne.dbsync.merge.token.CreateTableToModel;
-import org.apache.cayenne.dbsync.merge.token.DropColumnToDb;
-import org.apache.cayenne.dbsync.merge.token.DropColumnToModel;
-import org.apache.cayenne.dbsync.merge.token.DropRelationshipToDb;
-import org.apache.cayenne.dbsync.merge.token.DropRelationshipToModel;
-import org.apache.cayenne.dbsync.merge.token.DropTableToDb;
-import org.apache.cayenne.dbsync.merge.token.DropTableToModel;
-import org.apache.cayenne.dbsync.merge.token.MergerToken;
-import org.apache.cayenne.dbsync.merge.token.TokenComparator;
-import org.junit.Before;
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
-
-public class TokenComparatorTest {
-
- TokenComparator comparator;
-
- @Before
- public void setUp() {
- comparator = new TokenComparator();
- }
-
- private List<String> toClassesNames(List<MergerToken> sort) {
- List<String> res = new ArrayList<String>(sort.size());
- for (MergerToken mergerToken : sort) {
- res.add(mergerToken.getClass().getSimpleName());
- }
- return res;
- }
-
- @Test
- public void testToModelTokensCompare() throws Exception {
- List<MergerToken> tokens = Arrays.<MergerToken>asList(
- new DropColumnToModel(null, null),
- new DropRelationshipToModel(null, null),
- new DropTableToModel(null),
- new AddColumnToDb(null, null),
- new AddRelationshipToModel(null, null),
- new AddColumnToModel(null, null),
- new CreateTableToModel(null));
- Collections.sort(tokens, comparator);
-
- List<String> actual = toClassesNames(tokens);
- List<String> expected = Arrays.asList(
- "AddColumnToDb",
- "AddColumnToModel",
- "CreateTableToModel",
- "DropColumnToModel",
- "DropRelationshipToModel",
- "DropTableToModel",
- "AddRelationshipToModel"
- );
-
- assertEquals(expected, actual);
- }
-
- @Test
- public void testToDbTokensCompare() throws Exception {
- List<MergerToken> tokens = Arrays.<MergerToken>asList(
- new DropColumnToDb(null, null),
- new DropRelationshipToDb(null, null),
- new DropTableToDb(null),
- new AddColumnToModel(null, null),
- new AddRelationshipToDb(null, null),
- new AddColumnToDb(null, null),
- new CreateTableToDb(null));
- Collections.sort(tokens, comparator);
-
- List<String> actual = toClassesNames(tokens);
- List<String> expected = Arrays.asList(
- "AddColumnToModel",
- "DropRelationshipToDb",
- "DropColumnToDb",
- "DropTableToDb",
- "AddColumnToDb",
- "AddRelationshipToDb",
- "CreateTableToDb"
- );
-
- assertEquals(expected, actual);
- }
-
-}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/725e6ae9/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/TokensReverseTest.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/TokensReverseTest.java b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/TokensReverseTest.java
deleted file mode 100644
index da1ce9d..0000000
--- a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/TokensReverseTest.java
+++ /dev/null
@@ -1,91 +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.dbsync.merge;
-
-import org.apache.cayenne.dbsync.merge.factory.HSQLMergerTokenFactory;
-import org.apache.cayenne.dbsync.merge.factory.MergerTokenFactory;
-import org.apache.cayenne.dbsync.merge.token.DefaultValueForNullProvider;
-import org.apache.cayenne.dbsync.merge.token.MergerToken;
-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.dbsync.merge.builders.ObjectMother.dbAttr;
-import static org.apache.cayenne.dbsync.merge.builders.ObjectMother.dbEntity;
-
-/**
- * @since 4.0.
- */
-public class TokensReverseTest {
-
- @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"));
-
- testOneToOneReverse(factory().createAddColumnToDb(entity, attr));
- testOneToOneReverse(factory().createAddColumnToModel(entity, attr));
- testOneToOneReverse(factory().createDropColumnToDb(entity, attr));
- testOneToOneReverse(factory().createDropColumnToModel(entity, attr));
-
- testOneToOneReverse(factory().createAddRelationshipToDb(entity, rel));
- testOneToOneReverse(factory().createAddRelationshipToModel(entity, rel));
- testOneToOneReverse(factory().createDropRelationshipToDb(entity, rel));
- testOneToOneReverse(factory().createDropRelationshipToModel(entity, rel));
-
- testOneToOneReverse(factory().createCreateTableToDb(entity));
- testOneToOneReverse(factory().createCreateTableToModel(entity));
- testOneToOneReverse(factory().createDropTableToDb(entity));
- testOneToOneReverse(factory().createDropTableToModel(entity));
-
- testOneToOneReverse(factory().createSetAllowNullToDb(entity, attr));
- testOneToOneReverse(factory().createSetAllowNullToModel(entity, attr));
- testOneToOneReverse(factory().createSetNotNullToDb(entity, attr));
- testOneToOneReverse(factory().createSetNotNullToModel(entity, attr));
-
- DbAttribute attr2 = dbAttr().build();
- testOneToOneReverse(factory().createSetColumnTypeToDb(entity, attr, attr2));
- testOneToOneReverse(factory().createSetColumnTypeToModel(entity, attr, attr2));
-
- testOneToOneReverse(factory().createSetPrimaryKeyToDb(entity, Collections.singleton(attr), Collections.singleton(attr2), "PK"));
- testOneToOneReverse(factory().createSetPrimaryKeyToModel(entity, Collections.singleton(attr), Collections.singleton(attr2), "PK"));
-
- testOneToOneReverse(factory().createSetValueForNullToDb(entity, attr, new DefaultValueForNullProvider()));
- }
-
- private void testOneToOneReverse(MergerToken token) {
- MergerToken token2 = token.createReverse(factory()).createReverse(factory());
-
- Assert.assertEquals(token.getTokenName(), token2.getTokenName());
- Assert.assertEquals(token.getTokenValue(), token2.getTokenValue());
- Assert.assertEquals(token.getDirection(), token2.getDirection());
- }
-
- private MergerTokenFactory factory() {
- return new HSQLMergerTokenFactory();
- }
-}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/725e6ae9/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/TokensToModelExecutionTest.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/TokensToModelExecutionTest.java b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/TokensToModelExecutionTest.java
deleted file mode 100644
index fde39c3..0000000
--- a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/TokensToModelExecutionTest.java
+++ /dev/null
@@ -1,81 +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.dbsync.merge;
-
-import org.apache.cayenne.access.DataNode;
-import org.apache.cayenne.dbsync.merge.context.MergerContext;
-import org.apache.cayenne.dbsync.merge.factory.DefaultMergerTokenFactory;
-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.dbsync.merge.builders.ObjectMother.dataMap;
-import static org.apache.cayenne.dbsync.merge.builders.ObjectMother.dbAttr;
-import static org.apache.cayenne.dbsync.merge.builders.ObjectMother.dbEntity;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-/**
- * @since 4.0.
- */
-public class TokensToModelExecutionTest {
-
- @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();
- new DefaultMergerTokenFactory().createCreateTableToModel(entity).execute(context);
-
- assertEquals(1, dataMap.getDbEntityMap().size());
- assertEquals(1, dataMap.getObjEntities().size());
- assertEquals(entity, dataMap.getDbEntity(entity.getName()));
-
- new DefaultMergerTokenFactory().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();
- new DefaultMergerTokenFactory().createAddColumnToModel(entity, attr).execute(context);
-
- assertEquals(1, dataMap.getDbEntityMap().size());
- assertEquals(1, entity.getAttributes().size());
- assertEquals(attr, entity.getAttribute(attr.getName()));
-
- new DefaultMergerTokenFactory().createDropColumnToModel(entity, attr).execute(context);
- assertEquals(1, dataMap.getDbEntityMap().size());
- assertTrue(entity.getAttributes().isEmpty());
- assertTrue(dataMap.getObjEntityMap().isEmpty());
- }
-}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/725e6ae9/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/ValueForNullIT.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/ValueForNullIT.java b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/ValueForNullIT.java
deleted file mode 100644
index 03a572b..0000000
--- a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/ValueForNullIT.java
+++ /dev/null
@@ -1,127 +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.dbsync.merge;
-
-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.dbsync.merge.token.DefaultValueForNullProvider;
-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;
-
-import java.sql.Types;
-import java.util.List;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-
-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.Builder merger() {
- return super.merger().valueForNullProvider(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/725e6ae9/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/token/TokenComparatorTest.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/token/TokenComparatorTest.java b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/token/TokenComparatorTest.java
new file mode 100644
index 0000000..fc69a56
--- /dev/null
+++ b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/token/TokenComparatorTest.java
@@ -0,0 +1,113 @@
+/*****************************************************************
+ * 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.merge.token;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.cayenne.dbsync.merge.token.db.AddColumnToDb;
+import org.apache.cayenne.dbsync.merge.token.db.AddRelationshipToDb;
+import org.apache.cayenne.dbsync.merge.token.db.CreateTableToDb;
+import org.apache.cayenne.dbsync.merge.token.db.DropColumnToDb;
+import org.apache.cayenne.dbsync.merge.token.db.DropRelationshipToDb;
+import org.apache.cayenne.dbsync.merge.token.db.DropTableToDb;
+import org.apache.cayenne.dbsync.merge.token.model.AddColumnToModel;
+import org.apache.cayenne.dbsync.merge.token.model.AddRelationshipToModel;
+import org.apache.cayenne.dbsync.merge.token.model.CreateTableToModel;
+import org.apache.cayenne.dbsync.merge.token.model.DropColumnToModel;
+import org.apache.cayenne.dbsync.merge.token.model.DropRelationshipToModel;
+import org.apache.cayenne.dbsync.merge.token.model.DropTableToModel;
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+public class TokenComparatorTest {
+
+ TokenComparator comparator;
+
+ @Before
+ public void setUp() {
+ comparator = new TokenComparator();
+ }
+
+ private List<String> toClassesNames(List<MergerToken> sort) {
+ List<String> res = new ArrayList<String>(sort.size());
+ for (MergerToken mergerToken : sort) {
+ res.add(mergerToken.getClass().getSimpleName());
+ }
+ return res;
+ }
+
+ @Test
+ public void testToModelTokensCompare() throws Exception {
+ List<MergerToken> tokens = Arrays.<MergerToken>asList(
+ new DropColumnToModel(null, null),
+ new DropRelationshipToModel(null, null),
+ new DropTableToModel(null),
+ new AddColumnToDb(null, null),
+ new AddRelationshipToModel(null, null),
+ new AddColumnToModel(null, null),
+ new CreateTableToModel(null));
+ Collections.sort(tokens, comparator);
+
+ List<String> actual = toClassesNames(tokens);
+ List<String> expected = Arrays.asList(
+ "AddColumnToDb",
+ "AddColumnToModel",
+ "CreateTableToModel",
+ "DropColumnToModel",
+ "DropRelationshipToModel",
+ "DropTableToModel",
+ "AddRelationshipToModel"
+ );
+
+ assertEquals(expected, actual);
+ }
+
+ @Test
+ public void testToDbTokensCompare() throws Exception {
+ List<MergerToken> tokens = Arrays.<MergerToken>asList(
+ new DropColumnToDb(null, null),
+ new DropRelationshipToDb(null, null),
+ new DropTableToDb(null),
+ new AddColumnToModel(null, null),
+ new AddRelationshipToDb(null, null),
+ new AddColumnToDb(null, null),
+ new CreateTableToDb(null));
+ Collections.sort(tokens, comparator);
+
+ List<String> actual = toClassesNames(tokens);
+ List<String> expected = Arrays.asList(
+ "AddColumnToModel",
+ "DropColumnToDb",
+ "DropRelationshipToDb",
+ "DropTableToDb",
+ "AddColumnToDb",
+ "CreateTableToDb",
+ "AddRelationshipToDb"
+ );
+
+ assertEquals(expected, actual);
+ }
+
+}