|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
java.lang.Objectorg.apache.slide.common.AbstractServiceBase
org.apache.slide.common.AbstractSimpleService
org.apache.slide.store.AbstractStore
org.apache.slide.store.ExtendedStore
Store that allows for transactional caching of data. Takes over much modified code from StandardStore. That's why Remy is listed as author as well.
| Nested Class Summary | |
protected class |
ExtendedStore.TxCacheWrapper
|
protected class |
ExtendedStore.TxContentCacheWrapper
|
| Fields inherited from class org.apache.slide.store.AbstractStore |
contentIndexer, contentStore, lockStore, macroStore, nodeStore, parameters, propertiesIndexer, resourceManagers, revisionDescriptorsStore, revisionDescriptorStore, securityStore, sequenceStore |
| Fields inherited from class org.apache.slide.common.AbstractSimpleService |
currentContext, rollbackOnly, status, transactionTimeout, TX_IDLE, TX_PREPARED, TX_SUSPENDED |
| Fields inherited from class org.apache.slide.common.AbstractServiceBase |
namespace, scope |
| Fields inherited from interface javax.transaction.xa.XAResource |
TMENDRSCAN, TMFAIL, TMJOIN, TMNOFLAGS, TMONEPHASE, TMRESUME, TMSTARTRSCAN, TMSUCCESS, TMSUSPEND, XA_OK, XA_RDONLY |
| Constructor Summary | |
ExtendedStore()
|
|
| Method Summary | |
void |
commit(javax.transaction.xa.Xid xid,
boolean onePhase)
Commit the global transaction specified by xid. |
void |
createObject(Uri uri,
ObjectNode object)
Create a new object in the Descriptors Store. |
void |
createRevisionContent(Uri uri,
NodeRevisionDescriptor revisionDescriptor,
NodeRevisionContent revisionContent)
Create a new revision |
void |
createRevisionDescriptor(Uri uri,
NodeRevisionDescriptor revisionDescriptor)
Create new revision descriptor. |
void |
createRevisionDescriptors(Uri uri,
NodeRevisionDescriptors revisionDescriptors)
Create new revision descriptors. |
void |
end(javax.transaction.xa.Xid xid,
int flags)
Ends the work performed on behalf of a transaction branch. |
java.util.Enumeration |
enumerateLocks(Uri uri)
Enumerate locks on an object. |
java.util.Enumeration |
enumeratePermissions(Uri uri)
Enumerate locks on an object. |
protected void |
fatalError(java.lang.Error e)
|
protected void |
fatalError(java.lang.RuntimeException re)
|
protected java.util.Vector |
fillLocksCache(Uri uri)
|
protected java.util.Vector |
fillPermissionsCache(Uri uri)
|
void |
forget(javax.transaction.xa.Xid xid)
Tell the resource manager to forget about a heuristically completed transaction branch. |
void |
grantPermission(Uri uri,
NodePermission permission)
Store an object permissions in the Descriptors Store. |
protected void |
init(int globalObjectCacheSize,
int globalPermissionCacheSize,
int globalLockCacheSize,
int globalDescrtiptorsCacheSize,
int globalDescrtiptorCacheSize,
boolean contentCachingEnabled,
int globalContentCacheSize,
long contentCacheBytes,
int txContentCacheSize,
long txContentCacheBytes,
long maxByteSizePerEntry,
boolean noGlobalCacheInTx)
|
protected void |
invalidateCacheUponError(Uri uri)
|
void |
killLock(Uri uri,
NodeLock lock)
Kills a lock. |
(package private) void |
logAccess(Uri uri,
boolean write)
|
void |
macroCopy(Uri sourceUri,
Uri targetUri,
boolean overwrite,
boolean recursive)
Recursively copies an object. |
void |
macroDelete(Uri targetUri)
Deletes an object recursively. |
void |
macroMove(Uri sourceUri,
Uri targetUri,
boolean overwrite)
Recursively moves an object. |
int |
prepare(javax.transaction.xa.Xid xid)
Ask the resource manager to prepare for a transaction commit of the transaction specified in xid. |
void |
putLock(Uri uri,
NodeLock lock)
Puts a lock on a subject. |
void |
removeLock(Uri uri,
NodeLock lock)
Removes (cancels) a lock. |
void |
removeObject(Uri uri,
ObjectNode object)
Remove an object from the Descriptors Store. |
void |
removeObjectFromCache(java.lang.Object key)
Removes an object from all internal caches. |
void |
removeObjectHierachyFromCache(Uri folderUri)
Removes an object hierarchy from all internal caches. |
void |
removeRevisionContent(Uri uri,
NodeRevisionDescriptor revisionDescriptor)
Remove revision. |
void |
removeRevisionDescriptor(Uri uri,
NodeRevisionNumber number)
Remove revision descriptor. |
void |
removeRevisionDescriptors(Uri uri)
Remove revision descriptors. |
void |
renewLock(Uri uri,
NodeLock lock)
Renews a lock. |
void |
resetCache()
|
ObjectNode |
retrieveObject(Uri uri)
Retrive an object from the Descriptors Store. |
NodeRevisionContent |
retrieveRevisionContent(Uri uri,
NodeRevisionDescriptor revisionDescriptor)
Retrive revision content. |
NodeRevisionDescriptor |
retrieveRevisionDescriptor(Uri uri,
NodeRevisionNumber revisionNumber)
Retrieve revision descriptor. |
NodeRevisionDescriptors |
retrieveRevisionDescriptors(Uri uri)
Retrieve a revision descriptors. |
void |
revokePermission(Uri uri,
NodePermission permission)
Store an object permissions in the Descriptors Store. |
void |
revokePermissions(Uri uri)
Revoke all the permissions on the object. |
void |
rollback(javax.transaction.xa.Xid xid)
Inform the resource manager to roll back work done on behalf of a transaction branch. |
void |
setParameters(java.util.Hashtable parameters)
Remeber the store parameters to initialise the default child stores on request |
void |
start(javax.transaction.xa.Xid xid,
int flags)
Start work on behalf of a transaction branch specified in xid. |
void |
storeObject(Uri uri,
ObjectNode object)
Store an object in the Descriptors Store. |
void |
storeRevisionContent(Uri uri,
NodeRevisionDescriptor revisionDescriptor,
NodeRevisionContent revisionContent)
Modify the latest revision of an object. |
void |
storeRevisionDescriptor(Uri uri,
NodeRevisionDescriptor revisionDescriptor)
Update revision descriptor. |
void |
storeRevisionDescriptors(Uri uri,
NodeRevisionDescriptors revisionDescriptors)
Update revision descriptors. |
java.lang.String |
toString()
|
| Methods inherited from class org.apache.slide.common.AbstractSimpleService |
getTransactionTimeout, isSameRM, recover, setTransactionTimeout |
| Methods inherited from class org.apache.slide.common.AbstractServiceBase |
cacheResults, connectIfNeeded, connectIfNeeded, getLogger |
| Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
| Methods inherited from interface org.apache.slide.common.Service |
cacheResults, connectIfNeeded, connectIfNeeded, getLogger |
| Methods inherited from interface javax.transaction.xa.XAResource |
getTransactionTimeout, isSameRM, recover, setTransactionTimeout |
| Field Detail |
protected static final int DEFAULT_OBJECT_GLOBAL_CACHE_SIZE
protected static final java.lang.String GLOBAL_OBJECT_CACHE_SIZE_PARAMETER
protected static final int DEFAULT_GLOBAL_PERMISSION_CACHE_SIZE
protected static final java.lang.String GLOBAL_PERMISSION_CACHE_SIZE_PARAMETER
protected static final int DEFAULT_GLOBAL_LOCK_CACHE_SIZE
protected static final java.lang.String GLOBAL_LOCK_CACHE_SIZE_PARAMETER
protected static final int DEFAULT_GLOBAL_DESCRIPTORS_CACHE_SIZE
protected static final java.lang.String GLOBAL_DESCRIPTORS_CACHE_SIZE_PARAMETER
protected static final int DEFAULT_GLOBAL_DESCRIPTOR_CACHE_SIZE
protected static final java.lang.String GLOBAL_DESCRIPTOR_CACHE_SIZE_PARAMETER
protected static final int DEFAULT_GLOBAL_CONTENT_CACHE_SIZE
protected static final java.lang.String GLOBAL_CONTENT_CACHE_SIZE_PARAMETER
protected static final boolean DEFAULT_ENABLE_CONTENT_CACHING
protected static final java.lang.String ENABLE_CONTENT_CACHING_PARAMETER
protected static final int DEFAULT_TX_CONTENT_CACHE_SIZE
protected static final java.lang.String TX_CONTENT_CACHE_SIZE_PARAMETER
protected static final long DEFAULT_CONTENT_CACHE_BYTES
protected static final java.lang.String CONTENT_CACHE_BYTES_PARAMETER
protected static final long DEFAULT_TX_CONTENT_CACHE_BYTES
protected static final java.lang.String TX_CONTENT_CACHE_BYTES_PARAMETER
protected static final long DEFAULT_MAX_CONTENT_BYTES_PER_ENTRY
protected static final java.lang.String MAX_CONTENT_BYTES_PER_ENTRY_PARAMETER
protected static final java.lang.String CACHE_MODE_PARAMETER
protected static final java.lang.String CACHE_MODE_FULL
protected static final java.lang.String CACHE_MODE_LOCAL
protected static final java.lang.String CACHE_MODE_NO_GLOBAL_IN_TX
protected static final java.lang.String CACHE_MODE_OFF
protected static final java.lang.String DEFAULT_CACHE_MODE
protected static final int DEFAULT_CACHE_TIMEOUT
protected static final java.lang.String CACHE_TIMEOUT_PARAMETER
protected static final int DEFAULT_TLOCK_TIMEOUT
protected static final java.lang.String TLOCK_TIMEOUT_PARAMETER
protected java.lang.ThreadLocal activeTransactionBranch
protected ExtendedStore.TxContentCacheWrapper contentCache
protected ExtendedStore.TxCacheWrapper objectsCache
protected ExtendedStore.TxCacheWrapper permissionsCache
protected ExtendedStore.TxCacheWrapper locksCache
protected ExtendedStore.TxCacheWrapper descriptorsCache
protected ExtendedStore.TxCacheWrapper descriptorCache
protected long cacheTimeout
protected boolean globalCacheOff
int globalObjectCacheSize
int globalPermissionCacheSize
int globalLockCacheSize
int globalDescrtiptorsCacheSize
int globalDescrtiptorCacheSize
boolean contentCachingEnabled
int globalContentCacheSize
long contentCacheBytes
int txContentCacheSize
long txContentCacheBytes
long maxByteSizePerEntry
boolean noGlobalCacheInTx
| Constructor Detail |
public ExtendedStore()
| Method Detail |
public void setParameters(java.util.Hashtable parameters)
throws ServiceParameterErrorException,
ServiceParameterMissingException
AbstractStore
setParameters in interface ServicesetParameters in class AbstractStoreparameters - Hashtable containing the parameters' name
and associated value
ServiceParameterErrorException - Incorrect service parameter
ServiceParameterMissingException - Service parameter missingpublic void resetCache()
public void removeObjectFromCache(java.lang.Object key)
key - the key under which the object is stored in the caches.public void removeObjectHierachyFromCache(Uri folderUri)
void logAccess(Uri uri,
boolean write)
public NodeRevisionContent retrieveRevisionContent(Uri uri,
NodeRevisionDescriptor revisionDescriptor)
throws ServiceAccessException,
RevisionNotFoundException
AbstractStore
retrieveRevisionContent in interface ContentStoreretrieveRevisionContent in class AbstractStoreuri - UrirevisionDescriptor - Node revision descriptor
ServiceAccessException
RevisionNotFoundException
public void createRevisionContent(Uri uri,
NodeRevisionDescriptor revisionDescriptor,
NodeRevisionContent revisionContent)
throws ServiceAccessException,
RevisionAlreadyExistException
AbstractStore
createRevisionContent in interface ContentStorecreateRevisionContent in class AbstractStoreuri - UrirevisionDescriptor - Node revision descriptorrevisionContent - Node revision content
ServiceAccessException
RevisionAlreadyExistException
public void storeRevisionContent(Uri uri,
NodeRevisionDescriptor revisionDescriptor,
NodeRevisionContent revisionContent)
throws ServiceAccessException,
RevisionNotFoundException
AbstractStore
storeRevisionContent in interface ContentStorestoreRevisionContent in class AbstractStoreuri - UrirevisionDescriptor - Node revision descriptorrevisionContent - Node revision content
ServiceAccessException
RevisionNotFoundException
public void removeRevisionContent(Uri uri,
NodeRevisionDescriptor revisionDescriptor)
throws ServiceAccessException
AbstractStore
removeRevisionContent in interface ContentStoreremoveRevisionContent in class AbstractStoreuri - UrirevisionDescriptor - Node revision descriptor
ServiceAccessException
public ObjectNode retrieveObject(Uri uri)
throws ServiceAccessException,
ObjectNotFoundException
AbstractStore
retrieveObject in interface NodeStoreretrieveObject in class AbstractStoreuri - Uri of the object we want to retrieve
ObjectNotFoundException - The object to retrieve was not found
ServiceAccessException - Error accessing the Descriptors Store
public void storeObject(Uri uri,
ObjectNode object)
throws ServiceAccessException,
ObjectNotFoundException
AbstractStore
storeObject in interface NodeStorestoreObject in class AbstractStoreobject - Object to update
ObjectNotFoundException - The object to update was not found
ServiceAccessException - Error accessing the Descriptors Store
public void createObject(Uri uri,
ObjectNode object)
throws ServiceAccessException,
ObjectAlreadyExistsException
AbstractStore
createObject in interface NodeStorecreateObject in class AbstractStoreobject - SlideObjecturi - Uri of the object we want to create
ServiceAccessException - Error accessing the Descriptors Store
ObjectAlreadyExistsException - An object already exists
at this Uri
public void removeObject(Uri uri,
ObjectNode object)
throws ServiceAccessException,
ObjectNotFoundException
AbstractStore
removeObject in interface NodeStoreremoveObject in class AbstractStoreobject - Object to remove
ObjectNotFoundException - The object to remove was not found
ServiceAccessException - Error accessing the Descriptors Store
public void grantPermission(Uri uri,
NodePermission permission)
throws ServiceAccessException
AbstractStore
grantPermission in interface SecurityStoregrantPermission in class AbstractStorepermission - Permission we want to create
ServiceAccessException - Error accessing the Descriptors Store
public void revokePermission(Uri uri,
NodePermission permission)
throws ServiceAccessException
AbstractStore
revokePermission in interface SecurityStorerevokePermission in class AbstractStorepermission - Permission we want to create
ServiceAccessException - Error accessing the Descriptors Store
public void revokePermissions(Uri uri)
throws ServiceAccessException
AbstractStore
revokePermissions in interface SecurityStorerevokePermissions in class AbstractStoreuri - Uri of the object
ServiceAccessException - Error accessing the Descriptors Store
public java.util.Enumeration enumeratePermissions(Uri uri)
throws ServiceAccessException
AbstractStore
enumeratePermissions in interface SecurityStoreenumeratePermissions in class AbstractStoreuri - Uri of the subject
locks
which have been put on the subject
ServiceAccessException - Service access error
public void putLock(Uri uri,
NodeLock lock)
throws ServiceAccessException
AbstractStore
putLock in interface LockStoreputLock in class AbstractStorelock - Lock token
ServiceAccessException - Service access error
public void renewLock(Uri uri,
NodeLock lock)
throws ServiceAccessException,
LockTokenNotFoundException
AbstractStore
renewLock in interface LockStorerenewLock in class AbstractStorelock - Token to renew
LockTokenNotFoundException - Lock token was not found
ServiceAccessException - Service access error
public void removeLock(Uri uri,
NodeLock lock)
throws ServiceAccessException,
LockTokenNotFoundException
AbstractStore
removeLock in interface LockStoreremoveLock in class AbstractStorelock - Token to remove
LockTokenNotFoundException - Lock token was not found
ServiceAccessException - Service access error
public void killLock(Uri uri,
NodeLock lock)
throws ServiceAccessException,
LockTokenNotFoundException
AbstractStore
killLock in interface LockStorekillLock in class AbstractStorelock - Token to remove
ServiceAccessException - Service access error
LockTokenNotFoundException - Lock token was not found
public java.util.Enumeration enumerateLocks(Uri uri)
throws ServiceAccessException
AbstractStore
enumerateLocks in interface LockStoreenumerateLocks in class AbstractStoreuri - Uri of the subject
locks
which have been put on the subject
ServiceAccessException - Service access error
public NodeRevisionDescriptors retrieveRevisionDescriptors(Uri uri)
throws ServiceAccessException,
RevisionDescriptorNotFoundException
AbstractStore
retrieveRevisionDescriptors in interface RevisionDescriptorsStoreretrieveRevisionDescriptors in class AbstractStoreuri - Uri
RevisionDescriptorNotFoundException - Revision descriptor
was not found
ServiceAccessException - Service access error
public void createRevisionDescriptors(Uri uri,
NodeRevisionDescriptors revisionDescriptors)
throws ServiceAccessException
AbstractStore
createRevisionDescriptors in interface RevisionDescriptorsStorecreateRevisionDescriptors in class AbstractStoreuri - UrirevisionDescriptors - Node revision descriptors
ServiceAccessException - Service access error
public void storeRevisionDescriptors(Uri uri,
NodeRevisionDescriptors revisionDescriptors)
throws ServiceAccessException,
RevisionDescriptorNotFoundException
AbstractStore
storeRevisionDescriptors in interface RevisionDescriptorsStorestoreRevisionDescriptors in class AbstractStoreuri - UrirevisionDescriptors - Node revision descriptors
RevisionDescriptorNotFoundException - Revision descriptor
was not found
ServiceAccessException - Service access error
public void removeRevisionDescriptors(Uri uri)
throws ServiceAccessException
AbstractStore
removeRevisionDescriptors in interface RevisionDescriptorsStoreremoveRevisionDescriptors in class AbstractStoreuri - Uri
ServiceAccessException - Service access error
public NodeRevisionDescriptor retrieveRevisionDescriptor(Uri uri,
NodeRevisionNumber revisionNumber)
throws ServiceAccessException,
RevisionDescriptorNotFoundException
AbstractStore
retrieveRevisionDescriptor in interface RevisionDescriptorStoreretrieveRevisionDescriptor in class AbstractStoreuri - urirevisionNumber - Node revision number
ServiceAccessException
RevisionDescriptorNotFoundException
public void createRevisionDescriptor(Uri uri,
NodeRevisionDescriptor revisionDescriptor)
throws ServiceAccessException
AbstractStore
createRevisionDescriptor in interface RevisionDescriptorStorecreateRevisionDescriptor in class AbstractStoreuri - UrirevisionDescriptor - Node revision descriptor
ServiceAccessException - Service access error
public void storeRevisionDescriptor(Uri uri,
NodeRevisionDescriptor revisionDescriptor)
throws ServiceAccessException,
RevisionDescriptorNotFoundException
AbstractStore
storeRevisionDescriptor in interface RevisionDescriptorStorestoreRevisionDescriptor in class AbstractStoreuri - UrirevisionDescriptor - Node revision descriptor
ServiceAccessException - Service access error
RevisionDescriptorNotFoundException - Revision descriptor
was not found
public void removeRevisionDescriptor(Uri uri,
NodeRevisionNumber number)
throws ServiceAccessException
AbstractStore
removeRevisionDescriptor in interface RevisionDescriptorStoreremoveRevisionDescriptor in class AbstractStoreuri - Uri
ServiceAccessException - Service access error
public void forget(javax.transaction.xa.Xid xid)
throws javax.transaction.xa.XAException
AbstractStore
forget in interface javax.transaction.xa.XAResourceforget in class AbstractStorexid - A global transaction identifier
javax.transaction.xa.XAException - An error has occurred. Possible exception values
are XAER_RMERR, XAER_RMFAIL, XAER_NOTA, XAER_INVAL, or XAER_PROTO.
public void rollback(javax.transaction.xa.Xid xid)
throws javax.transaction.xa.XAException
AbstractStore
rollback in interface javax.transaction.xa.XAResourcerollback in class AbstractStorexid - A global transaction identifier
javax.transaction.xa.XAException - An error has occurred
public void commit(javax.transaction.xa.Xid xid,
boolean onePhase)
throws javax.transaction.xa.XAException
AbstractStore
commit in interface javax.transaction.xa.XAResourcecommit in class AbstractStorexid - A global transaction identifieronePhase - If true, the resource manager should use a one-phase
commit protocol to commit the work done on behalf of xid.
javax.transaction.xa.XAException - An error has occurred. Possible XAExceptions
are XA_HEURHAZ, XA_HEURCOM, XA_HEURRB, XA_HEURMIX, XAER_RMERR,
XAER_RMFAIL, XAER_NOTA, XAER_INVAL, or XAER_PROTO. If the resource
manager did not commit the transaction and the paramether onePhase is
set to true, the resource manager may throw one of the XA_RB*
exceptions. Upon return, the resource manager has rolled back the
branch's work and has released all held resources.
public int prepare(javax.transaction.xa.Xid xid)
throws javax.transaction.xa.XAException
AbstractStore
prepare in interface javax.transaction.xa.XAResourceprepare in class AbstractStorexid - A global transaction identifier
javax.transaction.xa.XAException - An error has occurred. Possible exception
values are: XA_RB*, XAER_RMERR, XAER_RMFAIL, XAER_NOTA, XAER_INVAL,
or XAER_PROTO.
public void start(javax.transaction.xa.Xid xid,
int flags)
throws javax.transaction.xa.XAException
AbstractStore
start in interface javax.transaction.xa.XAResourcestart in class AbstractStorexid - A global transaction identifier to be associated with the
resourceflags - One of TMNOFLAGS, TMJOIN, or TMRESUME
javax.transaction.xa.XAException - An error has occurred. Possible exceptions are
XA_RB*, XAER_RMERR, XAER_RMFAIL, XAER_DUPID, XAER_OUTSIDE, XAER_NOTA,
XAER_INVAL, or XAER_PROTO.
public void end(javax.transaction.xa.Xid xid,
int flags)
throws javax.transaction.xa.XAException
AbstractStore
end in interface javax.transaction.xa.XAResourceend in class AbstractStorexid - A global transaction identifier that is the same as what
was used previously in the start method.flags - One of TMSUCCESS, TMFAIL, or TMSUSPEND
javax.transaction.xa.XAException - An error has occurred. Possible XAException
values are XAER_RMERR, XAER_RMFAILED, XAER_NOTA, XAER_INVAL,
XAER_PROTO, or XA_RB*.public java.lang.String toString()
protected java.util.Vector fillPermissionsCache(Uri uri)
throws ServiceAccessException
ServiceAccessException
protected java.util.Vector fillLocksCache(Uri uri)
throws ServiceAccessException
ServiceAccessException
protected void init(int globalObjectCacheSize,
int globalPermissionCacheSize,
int globalLockCacheSize,
int globalDescrtiptorsCacheSize,
int globalDescrtiptorCacheSize,
boolean contentCachingEnabled,
int globalContentCacheSize,
long contentCacheBytes,
int txContentCacheSize,
long txContentCacheBytes,
long maxByteSizePerEntry,
boolean noGlobalCacheInTx)
protected void fatalError(java.lang.Error e)
protected void fatalError(java.lang.RuntimeException re)
protected void invalidateCacheUponError(Uri uri)
public void macroDelete(Uri targetUri)
throws ServiceAccessException,
ObjectNotFoundException
MacroStore
macroDelete in interface MacroStoremacroDelete in class AbstractStoreServiceAccessException
ObjectNotFoundExceptionMacroStore.macroDelete(org.apache.slide.common.Uri)
public void macroCopy(Uri sourceUri,
Uri targetUri,
boolean overwrite,
boolean recursive)
throws ServiceAccessException,
ObjectNotFoundException,
ObjectAlreadyExistsException
MacroStore
macroCopy in interface MacroStoremacroCopy in class AbstractStoreServiceAccessException
ObjectNotFoundException
ObjectAlreadyExistsExceptionMacroStore.macroCopy(Uri, Uri, boolean, boolean)
public void macroMove(Uri sourceUri,
Uri targetUri,
boolean overwrite)
throws ServiceAccessException,
ObjectNotFoundException,
ObjectAlreadyExistsException
MacroStore
macroMove in interface MacroStoremacroMove in class AbstractStoreServiceAccessException
ObjectNotFoundException
ObjectAlreadyExistsExceptionMacroStore.macroMove(Uri, Uri, boolean)
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||