1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.model;
20
21 import java.io.Serializable;
22
23 public abstract class BaseObject implements Serializable, Cloneable, InputLocationTracker {
24 protected transient ChildrenTracking childrenTracking;
25
26 protected Object delegate;
27
28 public BaseObject() {}
29
30 public BaseObject(Object delegate, BaseObject parent) {
31 this.delegate = delegate;
32 this.childrenTracking = parent != null ? parent::replace : null;
33 }
34
35 public BaseObject(Object delegate, ChildrenTracking parent) {
36 this.delegate = delegate;
37 this.childrenTracking = parent;
38 }
39
40 public Object getDelegate() {
41 return delegate;
42 }
43
44 public void update(Object newDelegate) {
45 if (delegate != newDelegate) {
46 if (childrenTracking != null) {
47 childrenTracking.replace(delegate, newDelegate);
48 }
49 delegate = newDelegate;
50 }
51 }
52
53 protected boolean replace(Object oldDelegate, Object newDelegate) {
54 return false;
55 }
56
57 @FunctionalInterface
58 protected interface ChildrenTracking {
59 boolean replace(Object oldDelegate, Object newDelegate);
60 }
61 }