CAY-2030 Capturing a stream of commit changes

API usability improvements


Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/e00a641b
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/e00a641b
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/e00a641b

Branch: refs/heads/master
Commit: e00a641b82013dad61c3a01a7a868792166eac2a
Parents: 58c7c3b
Author: Andrus Adamchik <and...@objectstyle.com>
Authored: Mon Oct 12 13:06:40 2015 -0400
Committer: aadamchik <aadamc...@apache.org>
Committed: Mon Oct 12 14:42:25 2015 -0400

----------------------------------------------------------------------
 .../lifecycle/changemap/AttributeChange.java    |  2 +-
 .../changemap/MutableAttributeChange.java       |  5 ++++
 .../changemap/MutableObjectChange.java          | 21 ++++++++++++-
 .../MutableToManyRelationshipChange.java        |  5 ++++
 .../MutableToOneRelationshipChange.java         |  5 ++++
 .../lifecycle/changemap/ObjectChange.java       |  2 ++
 .../lifecycle/changemap/PropertyChange.java     | 29 ++++++++++++++++++
 .../changemap/PropertyChangeVisitor.java        | 31 ++++++++++++++++++++
 .../changemap/ToManyRelationshipChange.java     |  2 +-
 .../changemap/ToOneRelationshipChange.java      |  2 +-
 10 files changed, 100 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/e00a641b/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/changemap/AttributeChange.java
----------------------------------------------------------------------
diff --git 
a/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/changemap/AttributeChange.java
 
b/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/changemap/AttributeChange.java
index bdb9cb6..c70786c 100644
--- 
a/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/changemap/AttributeChange.java
+++ 
b/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/changemap/AttributeChange.java
@@ -24,7 +24,7 @@ package org.apache.cayenne.lifecycle.changemap;
  * 
  * @since 4.0
  */
-public interface AttributeChange {
+public interface AttributeChange extends PropertyChange {
 
        Object getOldValue();
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/e00a641b/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/changemap/MutableAttributeChange.java
----------------------------------------------------------------------
diff --git 
a/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/changemap/MutableAttributeChange.java
 
b/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/changemap/MutableAttributeChange.java
index 4d4ebbf..5dcb17a 100644
--- 
a/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/changemap/MutableAttributeChange.java
+++ 
b/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/changemap/MutableAttributeChange.java
@@ -26,6 +26,11 @@ public class MutableAttributeChange implements 
AttributeChange {
        private Object oldValue;
        private Object newValue;
 
+       @Override
+       public void accept(PropertyChangeVisitor visitor) {
+               visitor.visitAttribute(this);
+       }
+
        public void setOldValue(Object oldValue) {
                this.oldValue = oldValue;
        }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/e00a641b/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/changemap/MutableObjectChange.java
----------------------------------------------------------------------
diff --git 
a/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/changemap/MutableObjectChange.java
 
b/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/changemap/MutableObjectChange.java
index 95c81bc..47fa7b2 100644
--- 
a/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/changemap/MutableObjectChange.java
+++ 
b/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/changemap/MutableObjectChange.java
@@ -58,6 +58,25 @@ public class MutableObjectChange implements ObjectChange {
        }
 
        @Override
+       public Map<String, ? extends PropertyChange> getChanges() {
+               Map<String, PropertyChange> allChanges = new HashMap<>();
+
+               if (attributeChanges != null) {
+                       allChanges.putAll(attributeChanges);
+               }
+
+               if (toOneRelationshipChanges != null) {
+                       allChanges.putAll(toOneRelationshipChanges);
+               }
+
+               if (toManyRelationshipChanges != null) {
+                       allChanges.putAll(toManyRelationshipChanges);
+               }
+
+               return allChanges;
+       }
+
+       @Override
        public Map<String, ? extends AttributeChange> getAttributeChanges() {
                return attributeChanges != null ? attributeChanges : 
Collections.<String, AttributeChange> emptyMap();
        }
@@ -158,7 +177,7 @@ public class MutableObjectChange implements ObjectChange {
 
                return pChange;
        }
-       
+
        private MutableToManyRelationshipChange getOrCreateToManyChange(String 
property) {
                MutableToManyRelationshipChange pChange = 
toManyRelationshipChanges != null
                                ? toManyRelationshipChanges.get(property) : 
null;

http://git-wip-us.apache.org/repos/asf/cayenne/blob/e00a641b/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/changemap/MutableToManyRelationshipChange.java
----------------------------------------------------------------------
diff --git 
a/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/changemap/MutableToManyRelationshipChange.java
 
b/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/changemap/MutableToManyRelationshipChange.java
index 215a542..7b5a9cf 100644
--- 
a/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/changemap/MutableToManyRelationshipChange.java
+++ 
b/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/changemap/MutableToManyRelationshipChange.java
@@ -33,6 +33,11 @@ public class MutableToManyRelationshipChange implements 
ToManyRelationshipChange
        private Collection<ObjectId> removed;
 
        @Override
+       public void accept(PropertyChangeVisitor visitor) {
+               visitor.visitToManyRelationship(this);
+       }
+       
+       @Override
        public Collection<ObjectId> getAdded() {
                return added == null ? Collections.<ObjectId> emptyList() : 
added;
        }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/e00a641b/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/changemap/MutableToOneRelationshipChange.java
----------------------------------------------------------------------
diff --git 
a/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/changemap/MutableToOneRelationshipChange.java
 
b/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/changemap/MutableToOneRelationshipChange.java
index d0269d6..2501224 100644
--- 
a/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/changemap/MutableToOneRelationshipChange.java
+++ 
b/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/changemap/MutableToOneRelationshipChange.java
@@ -29,6 +29,11 @@ public class MutableToOneRelationshipChange implements 
ToOneRelationshipChange {
        private ObjectId newValue;
 
        @Override
+       public void accept(PropertyChangeVisitor visitor) {
+               visitor.visitToOneRelationship(this);
+       }
+
+       @Override
        public ObjectId getOldValue() {
                return oldValue;
        }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/e00a641b/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/changemap/ObjectChange.java
----------------------------------------------------------------------
diff --git 
a/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/changemap/ObjectChange.java
 
b/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/changemap/ObjectChange.java
index 6f41d5f..b7ed806 100644
--- 
a/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/changemap/ObjectChange.java
+++ 
b/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/changemap/ObjectChange.java
@@ -35,6 +35,8 @@ public interface ObjectChange {
 
        ObjectId getPostCommitId();
 
+       Map<String, ? extends PropertyChange> getChanges();
+
        Map<String, ? extends AttributeChange> getAttributeChanges();
 
        Map<String, ? extends ToOneRelationshipChange> 
getToOneRelationshipChanges();

http://git-wip-us.apache.org/repos/asf/cayenne/blob/e00a641b/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/changemap/PropertyChange.java
----------------------------------------------------------------------
diff --git 
a/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/changemap/PropertyChange.java
 
b/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/changemap/PropertyChange.java
new file mode 100644
index 0000000..852642f
--- /dev/null
+++ 
b/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/changemap/PropertyChange.java
@@ -0,0 +1,29 @@
+/*****************************************************************
+ *   Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ ****************************************************************/
+package org.apache.cayenne.lifecycle.changemap;
+
+/**
+ * A base interface for various types of property changes.
+ * 
+ * @since 4.0
+ */
+public interface PropertyChange {
+
+       void accept(PropertyChangeVisitor visitor);
+}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/e00a641b/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/changemap/PropertyChangeVisitor.java
----------------------------------------------------------------------
diff --git 
a/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/changemap/PropertyChangeVisitor.java
 
b/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/changemap/PropertyChangeVisitor.java
new file mode 100644
index 0000000..b49d4bc
--- /dev/null
+++ 
b/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/changemap/PropertyChangeVisitor.java
@@ -0,0 +1,31 @@
+/*****************************************************************
+ *   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.lifecycle.changemap;
+
+/**
+ * @since 4.0
+ */
+public interface PropertyChangeVisitor {
+
+       void visitAttribute(AttributeChange change);
+
+       void visitToOneRelationship(ToOneRelationshipChange change);
+
+       void visitToManyRelationship(ToManyRelationshipChange change);
+}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/e00a641b/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/changemap/ToManyRelationshipChange.java
----------------------------------------------------------------------
diff --git 
a/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/changemap/ToManyRelationshipChange.java
 
b/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/changemap/ToManyRelationshipChange.java
index 8fcdc59..95fb394 100644
--- 
a/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/changemap/ToManyRelationshipChange.java
+++ 
b/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/changemap/ToManyRelationshipChange.java
@@ -27,7 +27,7 @@ import org.apache.cayenne.ObjectId;
  * 
  * @since 4.0
  */
-public interface ToManyRelationshipChange {
+public interface ToManyRelationshipChange extends PropertyChange {
 
        Collection<ObjectId> getAdded();
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/e00a641b/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/changemap/ToOneRelationshipChange.java
----------------------------------------------------------------------
diff --git 
a/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/changemap/ToOneRelationshipChange.java
 
b/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/changemap/ToOneRelationshipChange.java
index 0b592ea..7c5cc47 100644
--- 
a/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/changemap/ToOneRelationshipChange.java
+++ 
b/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/changemap/ToOneRelationshipChange.java
@@ -23,7 +23,7 @@ import org.apache.cayenne.ObjectId;
 /**
  * @since 4.0
  */
-public interface ToOneRelationshipChange {
+public interface ToOneRelationshipChange extends PropertyChange {
 
        ObjectId getOldValue();
 

Reply via email to