1
2
3
4 package org.sourceforge.jemm.database.components;
5
6 import java.util.Iterator;
7
8 import org.sourceforge.jemm.database.ClientId;
9 import org.sourceforge.jemm.database.components.interfaces.DBClientRefHandler;
10 import org.sourceforge.jemm.database.components.se.StorageEngineClientRefIF;
11 import org.sourceforge.jemm.types.ID;
12
13
14
15
16
17
18 public class DefaultDBClientRefHandler implements DBClientRefHandler {
19
20 private ObjectStatusListener objectStatusListener;
21 private final StorageEngineClientRefIF clientRefIF;
22
23 public DefaultDBClientRefHandler(StorageEngine storageEngine) {
24 this.clientRefIF = storageEngine.getClientRefIF();
25 }
26
27
28
29
30
31
32 public void recordReference(ClientId clientId, ID id) {
33 if(id == null)
34 throw new IllegalArgumentException("id cannot be null");
35
36 boolean refAdded = clientRefIF.recordReference(clientId,id);
37 if(refAdded)
38 objectStatusListener.clientRefAdded(id);
39 }
40
41 public void setObjectStatusListener(ObjectStatusListener objectStatusListener) {
42 this.objectStatusListener = objectStatusListener;
43 }
44
45 public void clearReference(ClientId clientId, ID id) {
46 clientRefIF.clearReference(clientId,id);
47 objectStatusListener.clientRefCleared(id);
48 }
49
50 public boolean hasReference(ClientId clientId, ID id) {
51 return clientRefIF.hasReference(clientId,id);
52 }
53
54 @Override
55 public void clientDisconnect(ClientId clientId) {
56 Iterator<ID> itr = clientRefIF.referenceIterator(clientId);
57 while(itr.hasNext()) {
58 ID id = itr.next();
59 objectStatusListener.clientRefCleared(id);
60 }
61
62 clientRefIF.removeAllRefs(clientId);
63 }
64 }