1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.tentackle.dbms.trip;
20
21 import org.tentackle.dbms.DbModificationTracker;
22 import org.tentackle.misc.IdSerialNameTuple;
23 import org.tentackle.misc.IdSerialTuple;
24 import org.tentackle.session.MasterSerial;
25 import org.tentackle.session.MasterSerialEvent;
26 import org.tentackle.session.MasterSerialListEvent;
27 import org.tentackle.session.ModificationTracker;
28
29 import java.util.List;
30
31
32
33
34
35
36
37 public class DbModificationTrackerRemoteDelegateImpl<T extends DbModificationTracker>
38 extends RemoteDbDelegateImpl<T>
39 implements DbModificationTrackerRemoteDelegate {
40
41 public DbModificationTrackerRemoteDelegateImpl(RemoteDbSessionImpl session, Class<T> clazz) {
42 super(session, clazz);
43 }
44
45
46 @Override
47 public void configureRemoteSession() {
48 getServerSession().setModificationTrackerSession(true);
49 }
50
51 @Override
52 public MasterSerial selectMasterSerial() {
53 DbModificationTracker tracker = (DbModificationTracker) ModificationTracker.getInstance();
54 return createMasterSerial(tracker.getMasterSerial(), tracker.getGeneration());
55 }
56
57 @Override
58 public IdSerialTuple selectIdSerialForName(String tableName) {
59 return ((DbModificationTracker) ModificationTracker.getInstance()).getIdSerialForName(tableName);
60 }
61
62 @Override
63 public List<IdSerialTuple> selectAllIdSerials() {
64 return ((DbModificationTracker) ModificationTracker.getInstance()).getAllIdSerials();
65 }
66
67 @Override
68 public List<IdSerialNameTuple> selectAllIdSerialNames() {
69 return ((DbModificationTracker) ModificationTracker.getInstance()).getAllIdSerialNames();
70 }
71
72
73
74
75
76
77
78
79
80
81
82
83 protected MasterSerial createMasterSerial(long serial, long generation) {
84 MasterSerialEvent masterSerialEvent = getServerSession().pollMasterSerialEvent();
85 if (masterSerialEvent != null) {
86 masterSerialEvent.setSerial(serial);
87 MasterSerialEvent nextEvent = getServerSession().pollMasterSerialEvent();
88 if (nextEvent != null) {
89 MasterSerialListEvent listEvent = new MasterSerialListEvent();
90 listEvent.setSerial(serial);
91 listEvent.add(masterSerialEvent);
92 while (nextEvent != null) {
93 nextEvent.setSerial(serial);
94 listEvent.add(nextEvent);
95 nextEvent = getServerSession().pollMasterSerialEvent();
96 }
97
98 masterSerialEvent = listEvent.size() == 1 ? listEvent.get(0) : listEvent;
99 }
100 return masterSerialEvent;
101 }
102 return new DefaultMasterSerial(serial, generation);
103 }
104
105 }