View Javadoc

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   * handler for client reference tracking.
15   * 
16  s * @author Rory Graves
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       * Record a reference to the given id by the given client.
29       * @param clientId The client holding the reference.
30       * @param id The id to record.
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  }