CAY-2897 Add no-op default implementations to the GraphChangeHandler interface
diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index 32f5728..be179ec 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -17,6 +17,7 @@
 CAY-2873 Change Orderings.orderedList() to accept a Collection rather than a List
 CAY-2884 Upgrade gradle to 8.13
 CAY-2893 Update velocity-engine-core dependency
+CAY-2897 Add no-op default implementations to the GraphChangeHandler interface
 
 Bug Fixes:
 
diff --git a/cayenne-commitlog/src/main/java/org/apache/cayenne/commitlog/DeletedDiffProcessor.java b/cayenne-commitlog/src/main/java/org/apache/cayenne/commitlog/DeletedDiffProcessor.java
index e55d21c..5598787 100644
--- a/cayenne-commitlog/src/main/java/org/apache/cayenne/commitlog/DeletedDiffProcessor.java
+++ b/cayenne-commitlog/src/main/java/org/apache/cayenne/commitlog/DeletedDiffProcessor.java
@@ -27,7 +27,6 @@
 import org.apache.cayenne.commitlog.model.MutableChangeMap;
 import org.apache.cayenne.commitlog.model.MutableObjectChange;
 import org.apache.cayenne.commitlog.model.ObjectChangeType;
-import org.apache.cayenne.graph.ArcId;
 import org.apache.cayenne.graph.GraphChangeHandler;
 import org.apache.cayenne.map.DbRelationship;
 import org.apache.cayenne.query.ObjectIdQuery;
@@ -124,29 +123,4 @@
 
 		});
 	}
-
-	@Override
-	public void nodeIdChanged(Object nodeId, Object newId) {
-		// do nothing
-	}
-
-	@Override
-	public void nodeCreated(Object nodeId) {
-		// do nothing
-	}
-
-	@Override
-	public void nodePropertyChanged(Object nodeId, String property, Object oldValue, Object newValue) {
-		// do nothing
-	}
-
-	@Override
-	public void arcCreated(Object nodeId, Object targetNodeId, ArcId arcId) {
-		// do nothing
-	}
-
-	@Override
-	public void arcDeleted(Object nodeId, Object targetNodeId, ArcId arcId) {
-		// do nothing
-	}
 }
diff --git a/cayenne/src/main/java/org/apache/cayenne/DataChannelSyncCallbackAction.java b/cayenne/src/main/java/org/apache/cayenne/DataChannelSyncCallbackAction.java
index e48ce8c..2120123 100644
--- a/cayenne/src/main/java/org/apache/cayenne/DataChannelSyncCallbackAction.java
+++ b/cayenne/src/main/java/org/apache/cayenne/DataChannelSyncCallbackAction.java
@@ -144,10 +144,6 @@
     }
 
     @Override
-    public void nodeIdChanged(Object nodeId, Object newId) {
-    }
-
-    @Override
     public void nodePropertyChanged(
             Object nodeId,
             String property,
diff --git a/cayenne/src/main/java/org/apache/cayenne/access/DataContextMergeHandler.java b/cayenne/src/main/java/org/apache/cayenne/access/DataContextMergeHandler.java
index 1a15d9b..7d9db3e 100644
--- a/cayenne/src/main/java/org/apache/cayenne/access/DataContextMergeHandler.java
+++ b/cayenne/src/main/java/org/apache/cayenne/access/DataContextMergeHandler.java
@@ -150,11 +150,6 @@
     }
 
     @Override
-    public void nodeCreated(Object nodeId) {
-        // noop
-    }
-
-    @Override
     public void nodeRemoved(Object nodeId) {
         ObjectStore os = context.getObjectStore();
         synchronized (os) {
diff --git a/cayenne/src/main/java/org/apache/cayenne/access/ObjectStore.java b/cayenne/src/main/java/org/apache/cayenne/access/ObjectStore.java
index 00309af..372fba3 100644
--- a/cayenne/src/main/java/org/apache/cayenne/access/ObjectStore.java
+++ b/cayenne/src/main/java/org/apache/cayenne/access/ObjectStore.java
@@ -439,35 +439,10 @@
         // re-register changed object ids
         if (!parentChanges.isNoop()) {
             parentChanges.apply(new GraphChangeHandler() {
-
-                @Override
-                public void arcCreated(Object nodeId, Object targetNodeId, ArcId arcId) {
-                }
-
-                @Override
-                public void arcDeleted(Object nodeId, Object targetNodeId, ArcId arcId) {
-                }
-
-                @Override
-                public void nodeCreated(Object nodeId) {
-                }
-
                 @Override
                 public void nodeIdChanged(Object nodeId, Object newId) {
                     processIdChange(nodeId, newId);
                 }
-
-                @Override
-                public void nodePropertyChanged(
-                        Object nodeId,
-                        String property,
-                        Object oldValue,
-                        Object newValue) {
-                }
-
-                @Override
-                public void nodeRemoved(Object nodeId) {
-                }
             });
         }
 
diff --git a/cayenne/src/main/java/org/apache/cayenne/access/PrefetchProcessorNode.java b/cayenne/src/main/java/org/apache/cayenne/access/PrefetchProcessorNode.java
index d194c07..7e4d602 100644
--- a/cayenne/src/main/java/org/apache/cayenne/access/PrefetchProcessorNode.java
+++ b/cayenne/src/main/java/org/apache/cayenne/access/PrefetchProcessorNode.java
@@ -270,21 +270,5 @@
                 hasArcDiff = true;
             }
         }
-
-        @Override
-        public void nodeIdChanged(Object nodeId, Object newId) {
-        }
-
-        @Override
-        public void nodeCreated(Object nodeId) {
-        }
-
-        @Override
-        public void nodeRemoved(Object nodeId) {
-        }
-
-        @Override
-        public void nodePropertyChanged(Object nodeId, String property, Object oldValue, Object newValue) {
-        }
     }
 }
diff --git a/cayenne/src/main/java/org/apache/cayenne/access/flush/ArcValuesCreationHandler.java b/cayenne/src/main/java/org/apache/cayenne/access/flush/ArcValuesCreationHandler.java
index 8e6d1e5..275f918 100644
--- a/cayenne/src/main/java/org/apache/cayenne/access/flush/ArcValuesCreationHandler.java
+++ b/cayenne/src/main/java/org/apache/cayenne/access/flush/ArcValuesCreationHandler.java
@@ -245,23 +245,6 @@
         }
     }
 
-    // not interested in following events in this handler
-    @Override
-    public void nodeIdChanged(Object nodeId, Object newId) {
-    }
-
-    @Override
-    public void nodeCreated(Object nodeId) {
-    }
-
-    @Override
-    public void nodeRemoved(Object nodeId) {
-    }
-
-    @Override
-    public void nodePropertyChanged(Object nodeId, String property, Object oldValue, Object newValue) {
-    }
-
     private static class ValuePropagationVisitor implements DbRowOpVisitor<Void> {
         private final DbAttribute attribute;
         private final boolean add;
diff --git a/cayenne/src/main/java/org/apache/cayenne/access/flush/DataDomainIndirectDiffBuilder.java b/cayenne/src/main/java/org/apache/cayenne/access/flush/DataDomainIndirectDiffBuilder.java
index e330db0..1b6f56b 100644
--- a/cayenne/src/main/java/org/apache/cayenne/access/flush/DataDomainIndirectDiffBuilder.java
+++ b/cayenne/src/main/java/org/apache/cayenne/access/flush/DataDomainIndirectDiffBuilder.java
@@ -85,24 +85,4 @@
             }
         }
     }
-
-    @Override
-    public void nodeIdChanged(Object nodeId, Object newId) {
-        // noop
-    }
-
-    @Override
-    public void nodeCreated(Object nodeId) {
-        // noop
-    }
-
-    @Override
-    public void nodeRemoved(Object nodeId) {
-        // noop
-    }
-
-    @Override
-    public void nodePropertyChanged(Object nodeId, String property, Object oldValue, Object newValue) {
-        // noop
-    }
 }
diff --git a/cayenne/src/main/java/org/apache/cayenne/graph/GraphChangeHandler.java b/cayenne/src/main/java/org/apache/cayenne/graph/GraphChangeHandler.java
index dc7aa46..d265166 100644
--- a/cayenne/src/main/java/org/apache/cayenne/graph/GraphChangeHandler.java
+++ b/cayenne/src/main/java/org/apache/cayenne/graph/GraphChangeHandler.java
@@ -32,34 +32,40 @@
     /**
      * Notifies implementing object that a node was assigned a new id.
      */
-    void nodeIdChanged(Object nodeId, Object newId);
+    default void nodeIdChanged(Object nodeId, Object newId) {
+    }
 
     /**
      * Notifies implementing object that a new node was created in the graph.
      */
-    void nodeCreated(Object nodeId);
+    default void nodeCreated(Object nodeId) {
+    }
 
     /**
      * Notifies implementing object that a node was removed from the graph.
      */
-    void nodeRemoved(Object nodeId);
+    default void nodeRemoved(Object nodeId) {
+    }
 
     /**
      * Notifies implementing object that a node's property was modified.
      */
-    void nodePropertyChanged(
+    default void nodePropertyChanged(
             Object nodeId,
             String property,
             Object oldValue,
-            Object newValue);
+            Object newValue) {
+    }
 
     /**
      * Notifies implementing object that a new arc was created between two nodes.
      */
-    void arcCreated(Object nodeId, Object targetNodeId, ArcId arcId);
+    default void arcCreated(Object nodeId, Object targetNodeId, ArcId arcId) {
+    }
 
     /**
      * Notifies implementing object that an arc between two nodes was deleted.
      */
-    void arcDeleted(Object nodeId, Object targetNodeId, ArcId arcId);
+    default void arcDeleted(Object nodeId, Object targetNodeId, ArcId arcId) {
+    }
 }
diff --git a/cayenne/src/main/java/org/apache/cayenne/graph/GraphMap.java b/cayenne/src/main/java/org/apache/cayenne/graph/GraphMap.java
index 2c0fede..e7d5649 100644
--- a/cayenne/src/main/java/org/apache/cayenne/graph/GraphMap.java
+++ b/cayenne/src/main/java/org/apache/cayenne/graph/GraphMap.java
@@ -71,39 +71,4 @@
         return nodes.remove(nodeId);
     }
 
-    // *** methods for tracking local changes declared in GraphChangeHandler interface
-
-    @Override
-    public void arcCreated(Object nodeId, Object targetNodeId, ArcId arcId) {
-        // noop
-    }
-
-    @Override
-    public void arcDeleted(Object nodeId, Object targetNodeId, ArcId arcId) {
-        // noop
-    }
-
-    @Override
-    public void nodeCreated(Object nodeId) {
-        // noop
-    }
-
-    @Override
-    public void nodeRemoved(Object nodeId) {
-        // noop
-    }
-
-    @Override
-    public void nodeIdChanged(Object nodeId, Object newId) {
-        // noop
-    }
-
-    @Override
-    public void nodePropertyChanged(
-            Object nodeId,
-            String property,
-            Object oldValue,
-            Object newValue) {
-        // noop
-    }
 }