11package com .alibaba .crr .composite ;
22
33import com .alibaba .crr .CrrTransmit ;
4- import com .alibaba .crr .CrrTransmitCallback ;
54import edu .umd .cs .findbugs .annotations .NonNull ;
65
76import java .util .HashMap ;
2423 *
2524 * @author Jerry Lee (oldratlee at gmail dot com)
2625 */
27- public class CompositeCrrTransmit implements CrrTransmit <Capture , Backup > {
26+ public final class CompositeCrrTransmit implements CrrTransmit <Capture , Backup > {
2827 private static final Logger logger = Logger .getLogger (CompositeCrrTransmit .class .getName ());
2928
3029 private final Set <CrrTransmit <Object , Object >> registeredCrrTransmitSet = new CopyOnWriteArraySet <>();
3130
32- private final CrrTransmitCallback callback ;
31+ private final CompositeCrrTransmitCallback callback ;
3332
34- public CompositeCrrTransmit (CrrTransmitCallback callback ) {
33+ public CompositeCrrTransmit (CompositeCrrTransmitCallback callback ) {
3534 this .callback = callback ;
3635 }
3736
@@ -53,7 +52,7 @@ public Capture capture() {
5352 }
5453 }
5554 }
56- return new Snapshot (crrTransmit2Value );
55+ return new Snapshot (crrTransmit2Value , null );
5756 }
5857
5958 /**
@@ -66,9 +65,9 @@ public Capture capture() {
6665 */
6766 @ NonNull
6867 public Backup replay (@ NonNull Capture captured ) {
69- callback .beforeReplay ();
70- final Snapshot capturedSnapshot = (Snapshot ) captured ;
68+ final Object data = callback .beforeReplay ();
7169
70+ final Snapshot capturedSnapshot = (Snapshot ) captured ;
7271 final HashMap <CrrTransmit <Object , Object >, Object > crrTransmit2Value = new HashMap <>(capturedSnapshot .crrTransmit2Value .size ());
7372 for (Map .Entry <CrrTransmit <Object , Object >, Object > entry : capturedSnapshot .crrTransmit2Value .entrySet ()) {
7473 CrrTransmit <Object , Object > crrTransmit = entry .getKey ();
@@ -82,8 +81,9 @@ public Backup replay(@NonNull Capture captured) {
8281 }
8382 }
8483 }
85- callback .afterReplay ();
86- return new Snapshot (crrTransmit2Value );
84+
85+ final Object afterData = callback .afterReplay (data );
86+ return new Snapshot (crrTransmit2Value , afterData );
8787 }
8888
8989 /**
@@ -103,7 +103,8 @@ public Backup replay(@NonNull Capture captured) {
103103 */
104104 @ NonNull
105105 public Backup clear () {
106- callback .beforeReplay ();
106+ final Object data = callback .beforeReplay ();
107+
107108 final HashMap <CrrTransmit <Object , Object >, Object > crrTransmit2Value = new HashMap <>(registeredCrrTransmitSet .size ());
108109 for (CrrTransmit <Object , Object > crrTransmit : registeredCrrTransmitSet ) {
109110 try {
@@ -115,8 +116,9 @@ public Backup clear() {
115116 }
116117 }
117118 }
118- callback .afterReplay ();
119- return new Snapshot (crrTransmit2Value );
119+
120+ final Object afterData = callback .afterReplay (data );
121+ return new Snapshot (crrTransmit2Value , afterData );
120122 }
121123
122124 /**
@@ -127,8 +129,10 @@ public Backup clear() {
127129 * @see #clear()
128130 */
129131 public void restore (@ NonNull Backup backup ) {
130- callback .beforeRestore ();
131- for (Map .Entry <CrrTransmit <Object , Object >, Object > entry : ((Snapshot ) backup ).crrTransmit2Value .entrySet ()) {
132+ final Snapshot snapshot = (Snapshot ) backup ;
133+ final Object data = callback .beforeRestore (snapshot .data );
134+
135+ for (Map .Entry <CrrTransmit <Object , Object >, Object > entry : snapshot .crrTransmit2Value .entrySet ()) {
132136 CrrTransmit <Object , Object > crrTransmit = entry .getKey ();
133137 try {
134138 Object transmitBackup = entry .getValue ();
@@ -140,14 +144,17 @@ public void restore(@NonNull Backup backup) {
140144 }
141145 }
142146 }
143- callback .afterRestore ();
147+
148+ callback .afterRestore (data );
144149 }
145150
146151 private static class Snapshot implements Capture , Backup {
147152 final HashMap <CrrTransmit <Object , Object >, Object > crrTransmit2Value ;
153+ final Object data ;
148154
149- Snapshot (HashMap <CrrTransmit <Object , Object >, Object > crrTransmit2Value ) {
155+ Snapshot (HashMap <CrrTransmit <Object , Object >, Object > crrTransmit2Value , Object data ) {
150156 this .crrTransmit2Value = crrTransmit2Value ;
157+ this .data = data ;
151158 }
152159 }
153160
0 commit comments