org.persvr.data
Class PersistableObject

java.lang.Object
  extended by NativeObject
      extended by org.persvr.data.PersistableObject
All Implemented Interfaces:
ObservablePersistable, Persistable
Direct Known Subclasses:
CapabilityObject, LazyNativeObject, NonCachingNativeObject, Schema

public class PersistableObject
extends NativeObject
implements ObservablePersistable

This class add capabilites to Rhino scriptable objects for persisting data

Author:
Kris Zyp

Nested Class Summary
static class PersistableObject.FullSet
           
 
Field Summary
static java.lang.Object ADDITION
           
protected static java.util.Map<java.security.Principal,java.util.Map<Persistable,PermissionLevel>> computedPermissions
           
static int ENTRY_SET_INCLUDE_DONT_ENUM
           
static int ENTRY_SET_INCLUDE_GETTER_SETTER_FUNCTIONS
           
protected  ObjectId id
           
static java.util.Map<java.lang.String,PermissionLevel> permissionNames
           
 
Constructor Summary
PersistableObject()
           
 
Method Summary
static void addListener(PropertyChangeSetListener listener)
          This is used to listen for changes in an object that have been read in this transaction.
protected  java.lang.Object checkPut(java.lang.String name, java.lang.Object obj, boolean alwaysPersist)
           
static int checkSecurity(Persistable data, int level)
           
static void commitPut(java.util.Map.Entry<TransactionValue,Transaction.ChangeUpdate> changeEntry, Transaction transaction, boolean recordHistory)
           
static PermissionLevel computeAccessLevel(PersistableArray permissionObject, User user)
          Deprecated. 
static java.lang.Object convertToDateJavaDate(java.lang.Object value)
           
 void delete()
          Deletes the current object.
 void delete(java.lang.String name)
           
static void enableSecurity(boolean enable)
           
 java.util.Set<java.util.Map.Entry<java.lang.String,java.lang.Object>> entrySet(int options)
           
 java.lang.Object get(int index)
           
 java.lang.Object get(int index, Scriptable start)
           
 java.lang.Object get(java.lang.String name)
          Gets a field without using JS getters
 java.lang.Object get(java.lang.String name, Scriptable start)
           
 int getAccessLevel()
          Get the access level of the object
static java.lang.Object getCoreValue(PersistableObject obj, java.lang.String name)
          Deprecated. 
 PersistableList<Persistable> getHistory()
          Returns a history of changes to the object
 ObjectId getId()
           
 java.lang.Object[] getIds()
           
 java.util.Date getLastModified()
          Gets the last committed modification to the object
 Persistable getParent()
          Returns the parent of this object.
protected static java.util.List getPermissionObject(Persistable data)
           
static java.util.Map<ObjectId,java.util.Set<java.lang.String>> getReadSet()
           
 Persistable getSchema()
          Returns the schema for this object
static java.util.Map<ObjectId,java.util.Set<java.lang.String>> getWatchSet(PropertyChangeSetListener listener)
          Stops listening for the
static PersistableArray initArray(DataSource source, java.util.Iterator iterator)
           
protected  void initializeProperty(java.lang.String name, java.lang.Object value)
           
static PersistableObject initObject(DataSource source)
           
static boolean isSecurityEnabled()
           
 java.util.Set<java.lang.String> keySet(boolean includeDontEnum)
           
 java.lang.Object noCheckGet(java.lang.String key)
           
 void onCreation()
          Called when an persistent object is first created (not when the Java object is created to restore state)
 void put(int index, Scriptable start, java.lang.Object obj)
           
 void put(java.lang.String name, Scriptable start, java.lang.Object obj)
           
 void recordObjectRead()
           
static void removeListener(java.beans.PropertyChangeListener listener)
           
static void resetComputedPermissions()
           
 java.lang.Object set(java.lang.String name, java.lang.Object value)
          Sets a value into a field persistently (even it has been declared persistent in the structure) without using JS setters
static java.util.Map<ObjectId,java.util.Set<java.lang.String>> startReadSet()
           
 java.lang.String toString()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

id

protected ObjectId id

ADDITION

public static final java.lang.Object ADDITION

computedPermissions

protected static java.util.Map<java.security.Principal,java.util.Map<Persistable,PermissionLevel>> computedPermissions

permissionNames

public static java.util.Map<java.lang.String,PermissionLevel> permissionNames

ENTRY_SET_INCLUDE_DONT_ENUM

public static final int ENTRY_SET_INCLUDE_DONT_ENUM
See Also:
Constant Field Values

ENTRY_SET_INCLUDE_GETTER_SETTER_FUNCTIONS

public static final int ENTRY_SET_INCLUDE_GETTER_SETTER_FUNCTIONS
See Also:
Constant Field Values
Constructor Detail

PersistableObject

public PersistableObject()
Method Detail

noCheckGet

public java.lang.Object noCheckGet(java.lang.String key)
Specified by:
noCheckGet in interface Persistable

enableSecurity

public static void enableSecurity(boolean enable)

isSecurityEnabled

public static boolean isSecurityEnabled()

getId

public ObjectId getId()
Specified by:
getId in interface Persistable

getCoreValue

@Deprecated
public static java.lang.Object getCoreValue(PersistableObject obj,
                                                       java.lang.String name)
Deprecated. 


get

public java.lang.Object get(java.lang.String name)
Description copied from interface: Persistable
Gets a field without using JS getters

Specified by:
get in interface Persistable
Returns:

get

public java.lang.Object get(java.lang.String name,
                            Scriptable start)

set

public java.lang.Object set(java.lang.String name,
                            java.lang.Object value)
Description copied from interface: Persistable
Sets a value into a field persistently (even it has been declared persistent in the structure) without using JS setters

Specified by:
set in interface Persistable
Returns:

put

public void put(int index,
                Scriptable start,
                java.lang.Object obj)

commitPut

public static void commitPut(java.util.Map.Entry<TransactionValue,Transaction.ChangeUpdate> changeEntry,
                             Transaction transaction,
                             boolean recordHistory)
                      throws java.lang.Exception
Throws:
java.lang.Exception

getHistory

public PersistableList<Persistable> getHistory()
Description copied from interface: Persistable
Returns a history of changes to the object

Specified by:
getHistory in interface Persistable
Returns:

getSchema

public Persistable getSchema()
Description copied from interface: Persistable
Returns the schema for this object

Specified by:
getSchema in interface Persistable
Returns:

checkPut

protected java.lang.Object checkPut(java.lang.String name,
                                    java.lang.Object obj,
                                    boolean alwaysPersist)

put

public void put(java.lang.String name,
                Scriptable start,
                java.lang.Object obj)

delete

public void delete(java.lang.String name)

initializeProperty

protected void initializeProperty(java.lang.String name,
                                  java.lang.Object value)

convertToDateJavaDate

public static java.lang.Object convertToDateJavaDate(java.lang.Object value)

initObject

public static PersistableObject initObject(DataSource source)

initArray

public static PersistableArray initArray(DataSource source,
                                         java.util.Iterator iterator)

startReadSet

public static java.util.Map<ObjectId,java.util.Set<java.lang.String>> startReadSet()

getReadSet

public static java.util.Map<ObjectId,java.util.Set<java.lang.String>> getReadSet()

addListener

public static void addListener(PropertyChangeSetListener listener)
This is used to listen for changes in an object that have been read in this transaction. You MUST keep a reference to the listener as long as you wish the it to listen. Once the listener doesn't have a reference it can be reclaimed and it will no longer listen.

Parameters:
listener -

removeListener

public static void removeListener(java.beans.PropertyChangeListener listener)

getWatchSet

public static java.util.Map<ObjectId,java.util.Set<java.lang.String>> getWatchSet(PropertyChangeSetListener listener)
Stops listening for the

Parameters:
listener -

resetComputedPermissions

public static void resetComputedPermissions()

computeAccessLevel

@Deprecated
public static PermissionLevel computeAccessLevel(PersistableArray permissionObject,
                                                            User user)
Deprecated. 

This is used by PersistentAcl and I am planning on hiding it

Parameters:
permissionObject -
targetOfComputation -
Returns:

getAccessLevel

public int getAccessLevel()
Description copied from interface: Persistable
Get the access level of the object

Specified by:
getAccessLevel in interface Persistable
Returns:

checkSecurity

public static int checkSecurity(Persistable data,
                                int level)

getPermissionObject

protected static java.util.List getPermissionObject(Persistable data)

get

public java.lang.Object get(int index)

get

public java.lang.Object get(int index,
                            Scriptable start)

getLastModified

public java.util.Date getLastModified()
Description copied from interface: Persistable
Gets the last committed modification to the object

Specified by:
getLastModified in interface Persistable
Returns:

entrySet

public java.util.Set<java.util.Map.Entry<java.lang.String,java.lang.Object>> entrySet(int options)
Specified by:
entrySet in interface Persistable

keySet

public java.util.Set<java.lang.String> keySet(boolean includeDontEnum)

recordObjectRead

public void recordObjectRead()
Specified by:
recordObjectRead in interface ObservablePersistable

getIds

public java.lang.Object[] getIds()

toString

public java.lang.String toString()

delete

public void delete()
Description copied from interface: Persistable
Deletes the current object. This is included for REST compatibility, but this can be a very slow operation because it must track down references. It is much faster to delete a reference to an object so it does not need to determine references itself.

Specified by:
delete in interface Persistable

getParent

public Persistable getParent()
Description copied from interface: Persistable
Returns the parent of this object. Persevere has three internal uses for parents:

Specified by:
getParent in interface Persistable
Returns:

onCreation

public void onCreation()
Description copied from interface: Persistable
Called when an persistent object is first created (not when the Java object is created to restore state)

Specified by:
onCreation in interface Persistable