databionics.project
Class DataManager

java.lang.Object
  extended by databionics.project.DataManager

public class DataManager
extends java.lang.Object

DataManager ensures access to globally used Objects, providing unlimited number of flags, specified by unique strings, if recomputation has to be done. If DataObject changes, all flags are set to false. Defining dependencies between Objects ensures, that changing an Object also removes dependent Objects. Data is organized in DataManager instances. Each instance contains a DataSet of DataObjects. These Objects contains a list of flags, dynamically arranged by input strings. Each of the objects Manager, Set, Object, dependencies and flag are identified by unique strings. Internally the all objects are managed by synchronized hashtables. (Multiple instances / synchronization (multithread behaviour) for get and put still untested) DataManager | +------> Instance1 -> Instance2 -> Instance3 -> ... | +-> identifier | +-> DataObject1 -> DataObject2 -> DataObject3 -> ... | +---> identifier | +---> data | +---> flag1 -> flag2 -> flag3 -> ... | +---> dependent1 -> dependent2 -> ... TODO - JUnit test - Object independent clone(), (1.5 cast()) - toStream - workspace toString - reverse dependencies - function evaluation depending on flag mask. Decision, whether recomputation is necessary, made by DataManager - get Object[] ? Accessable Objects: Type = (identifiers) -----------------|--------------- Object = (Object) Flag = (Object,flag) dependency = ((Object),(Object)) HOWTO Using one instance: If you don't need to manage similar sets of data, you can access data without specifying the current instance as argument. If no argument is given, the default instance is used. Identifier for the default instance is "default". Using several instances: If you decide to use more than one instance, you can create new instances, by adding an Object to a nonexistant instance. You have to keep track of your instances yourself. Don't use multiple instances of DataManagers, since methods and fields are declared static for secure access. Avoid unessecary computations: Each DataObject contains a list of flag identifiers, which will be set to false if DataObject changes. If the necessary computations are finished, set a unique flag, which will ensure that computation isn't done twice, I. Add unique flag to specified Object after computation is done II. Add check, whether computation should be done, before computation Keeping your workspace clean: Creating an Object also should define dependencies to other Objects, such that changing an Object removes the dependent Objects as well. Adding new DataObjects in your implementation: (e.g. changing a file format for LrnFile) If you want to change the file format or type of Object in your implementation, just add the old and the new DataObject to DataManager in your IO - Function, such that the old and new format is accessable. If changeover to new DataObject is done in all corresponding implementations, remove the old input functions. I. add new DataObject to DataManager, leave old DataObject - Code untouched. II. change the DataObject access in old implementation successively. III. If you're sure old DataObject access is completely removed, remove old code from input functions, Checking your DataManager workspace: To list your currently initialized DataObjects, use toString().

Author:
mt TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates

Field Summary
protected static org.apache.log4j.Logger log
           
 
Constructor Summary
DataManager()
           
 
Method Summary
static void clear(java.lang.String currentInstance)
           
static void clearAll()
           
static boolean contains(java.lang.String identifier)
           
static boolean contains(java.lang.String identifier, java.lang.String currentInstance)
           
static java.lang.Object get(java.lang.String identifier)
          obtain an Object from workspace.
static java.lang.Object get(java.lang.String identifier, java.lang.String currentInstance)
           
static java.lang.Object getCopy(java.lang.String identifier)
          obtain a copy of specified Object.
static java.lang.Object getCopy(java.lang.String identifier, java.lang.String currentInstance)
           
static java.lang.String getDefaultInstance()
          returns the default instance identifier
static boolean getFlag(java.lang.String identifier, java.lang.String flagID)
           
static boolean getFlag(java.lang.String identifier, java.lang.String flagID, java.lang.String currentInstance)
           
static void put(java.lang.String identifier, java.lang.Object data)
          put an Object into workspace (default instance)
static void put(java.lang.String identifier, java.lang.Object data, java.lang.String currentInstance)
          put an Object in workspace at specified instance.
static void put(java.lang.String identifier, java.lang.Object data, java.lang.String[] dependencies)
           
static boolean remove(java.lang.String identifier)
          remove an Object from default instance workspace, including all dependents.
static boolean remove(java.lang.String identifier, java.lang.String currentInstance)
          remove an Object from workspace, including all dependents.
static void setDefaultInstance(java.lang.String id)
          sets the default instance identifier
static boolean setDependency(java.lang.String identifier, java.lang.String dependent)
          make an Object dependent to another Ovject, such that chaging the specified Object will remove the dependent
static boolean setDependency(java.lang.String identifier, java.lang.String[] dependent)
          make a list of Objects in workspace depending on another Object (s.
static boolean setDependency(java.lang.String identifier, java.lang.String[] dependent, java.lang.String currentInstance)
          make a list of Objects in workspace depending on another Object (s.
static boolean setDependency(java.lang.String identifier, java.lang.String dependent, java.lang.String currentInstance)
          make an Object dependent to another Ovject, such that chaging the specified Object will remove the dependent.
static boolean setFlag(java.lang.String identifier, java.lang.String flagID)
          set a flag for specified DataObject in default instance
static boolean setFlag(java.lang.String identifier, java.lang.String flagID, java.lang.String currentInstance)
          set a flag for specified DataObject in
 java.lang.String toString()
          String of workspace variables
 java.lang.String[] workspaceToString()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

log

protected static org.apache.log4j.Logger log
Constructor Detail

DataManager

public DataManager()
Method Detail

setDefaultInstance

public static void setDefaultInstance(java.lang.String id)
sets the default instance identifier


getDefaultInstance

public static java.lang.String getDefaultInstance()
returns the default instance identifier

Returns:

workspaceToString

public java.lang.String[] workspaceToString()

toString

public java.lang.String toString()
String of workspace variables

Overrides:
toString in class java.lang.Object
Returns:
instances and current known variables

setFlag

public static boolean setFlag(java.lang.String identifier,
                              java.lang.String flagID)
set a flag for specified DataObject in default instance

Returns:
true, if flag could be set. false if flag already exists

setFlag

public static boolean setFlag(java.lang.String identifier,
                              java.lang.String flagID,
                              java.lang.String currentInstance)
set a flag for specified DataObject in

Parameters:
currentInstance -
Returns:
true, if flag could be set. false if flag already exists

getFlag

public static boolean getFlag(java.lang.String identifier,
                              java.lang.String flagID)
Parameters:
identifier -
flagID -
Returns:
true, if flag is set

getFlag

public static boolean getFlag(java.lang.String identifier,
                              java.lang.String flagID,
                              java.lang.String currentInstance)
                       throws java.lang.ArrayIndexOutOfBoundsException
Parameters:
identifier -
flagID -
currentInstance -
Returns:
true, if flag is set
Throws:
java.lang.ArrayIndexOutOfBoundsException

setDependency

public static boolean setDependency(java.lang.String identifier,
                                    java.lang.String dependent)
make an Object dependent to another Ovject, such that chaging the specified Object will remove the dependent

Parameters:
-
Returns:

setDependency

public static boolean setDependency(java.lang.String identifier,
                                    java.lang.String dependent,
                                    java.lang.String currentInstance)
make an Object dependent to another Ovject, such that chaging the specified Object will remove the dependent. Using another instance than default.

Parameters:
identifier -
dependent -
currentInstance -
Returns:

setDependency

public static boolean setDependency(java.lang.String identifier,
                                    java.lang.String[] dependent)
make a list of Objects in workspace depending on another Object (s. setDependency)

Parameters:
identifier -
dependent -
Returns:

setDependency

public static boolean setDependency(java.lang.String identifier,
                                    java.lang.String[] dependent,
                                    java.lang.String currentInstance)
make a list of Objects in workspace depending on another Object (s. setDependency)

Parameters:
identifier -
dependent -
currentInstance -
Returns:

put

public static void put(java.lang.String identifier,
                       java.lang.Object data)
put an Object into workspace (default instance)

Parameters:
-

put

public static void put(java.lang.String identifier,
                       java.lang.Object data,
                       java.lang.String currentInstance)
                throws databionics.project.NotLockedException
put an Object in workspace at specified instance. Formerly set locks will be removed.

Parameters:
identifier -
data -
currentInstance -
Throws:
databionics.project.NotLockedException

put

public static void put(java.lang.String identifier,
                       java.lang.Object data,
                       java.lang.String[] dependencies)

remove

public static boolean remove(java.lang.String identifier)
remove an Object from default instance workspace, including all dependents. If the Object is locked, a LockedException is thrown.

Parameters:
identifier -
Returns:

remove

public static boolean remove(java.lang.String identifier,
                             java.lang.String currentInstance)
remove an Object from workspace, including all dependents. If the Object is locked, a LockedException is thrown.

Parameters:
identifier -
currentInstance -
Returns:

get

public static java.lang.Object get(java.lang.String identifier)
obtain an Object from workspace. Until putting the Object back to workspace, a lock is set on this Object. To avoid setting lock, use getCopy. Even, when Object isn't chaged, a put call is needed to release the lock

Parameters:
identifier -
Returns:

get

public static java.lang.Object get(java.lang.String identifier,
                                   java.lang.String currentInstance)
Parameters:
identifier -
currentInstance -
Returns:

getCopy

public static java.lang.Object getCopy(java.lang.String identifier)
                                throws java.lang.CloneNotSupportedException
obtain a copy of specified Object. Until java1.5 you may get a reference. since casting at runtime isn't provided.

Parameters:
identifier -
Returns:
Throws:
java.lang.CloneNotSupportedException

getCopy

public static java.lang.Object getCopy(java.lang.String identifier,
                                       java.lang.String currentInstance)
                                throws java.lang.CloneNotSupportedException
Parameters:
identifier -
currentInstance -
Returns:
Throws:
java.lang.CloneNotSupportedException

contains

public static boolean contains(java.lang.String identifier,
                               java.lang.String currentInstance)
Parameters:
identifier -
currentInstance -
Returns:

contains

public static boolean contains(java.lang.String identifier)
Parameters:
identifier -
Returns:

clear

public static void clear(java.lang.String currentInstance)

clearAll

public static void clearAll()


Copyright © 2005-2006 Databionics Research Group. All Rights Reserved.