View Javadoc

1   /*
2    * Created on 8 Apr 2009
3    *
4    */
5   package org.sourceforge.jemm.database.components;
6   
7   import org.sourceforge.jemm.database.components.interfaces.DBRootHandler;
8   import org.sourceforge.jemm.database.components.se.StorageEngineRootIF;
9   import org.sourceforge.jemm.types.ID;
10  
11  /**
12   * @author Rory Graves
13   *
14   */
15  public class DefaultDBRootHandler implements DBRootHandler {
16  	
17      private ObjectStatusListener objectStatusListener;
18      private final StorageEngineRootIF rootIF;
19      
20      public DefaultDBRootHandler(StorageEngine storageEngine) {    	
21      	this.rootIF = storageEngine.getRootIF();
22  	}
23  
24      @Override
25  	public synchronized void setObjectStatusListener(ObjectStatusListener objectStatusListener) {
26      	this.objectStatusListener = objectStatusListener;
27      }
28      
29      /**
30       * @param rootName
31       * @param newValue
32       */
33      @Override
34      public synchronized void setRoot(String rootName, ID newValue) {
35          ID oldValue = rootIF.getRoot(rootName);
36  
37          if(newValue == null)
38              rootIF.removeRoot(rootName);
39          else {
40              objectStatusListener.rootRefAdded(newValue);
41              rootIF.setRoot(rootName, newValue);
42          }
43  
44          if(oldValue != null)
45              objectStatusListener.rootRefCleared(oldValue);
46      }
47  
48      /**
49       * Set the given root, if the current value of the root is null.
50       * @param rootName The name of the root.
51       * @param newValue The new value to set
52       * @return The old value of the root, (i.e. the current value if the set fails, or null if it does)
53       */
54      @Override
55      public synchronized ID setRootIfNull(String rootName, ID newValue) {
56          ID oldValue = rootIF.getRoot(rootName);
57          if(oldValue != null)
58              return oldValue;
59          
60          setRoot(rootName, newValue);
61          return newValue;
62      }
63  
64      /**
65       * Return the current value of the root.
66       * @param rootName The name of the root.
67       * @return The current value of the root reference 'rootName'
68       */
69      @Override
70      public synchronized ID getRoot(String rootName) {
71          return rootIF.getRoot(rootName);
72      }
73  }