Package ghidra.framework.data
Class DomainObjectAdapter
java.lang.Object
ghidra.framework.data.DomainObjectAdapter
- All Implemented Interfaces:
DomainObject
- Direct Known Subclasses:
DomainObjectAdapterDB
An abstract class that provides default behavior for DomainObject(s), specifically it handles
listeners and change status; the derived class must provide the getDescription() method.
-
Field Summary
Modifier and TypeFieldDescriptionprotected boolean
protected Map
<EventQueueID, ghidra.framework.data.DomainObjectChangeSupport> protected static final String
protected Lock
protected String
protected boolean
Fields inherited from interface ghidra.framework.model.DomainObject
DO_DOMAIN_FILE_CHANGED, DO_OBJECT_CLOSED, DO_OBJECT_ERROR, DO_OBJECT_RENAMED, DO_OBJECT_RESTORED, DO_OBJECT_SAVED, DO_PROPERTY_CHANGED, undoLock
-
Constructor Summary
ModifierConstructorDescriptionprotected
DomainObjectAdapter
(String name, int timeInterval, Object consumer) Construct a new DomainObjectAdapter. -
Method Summary
Modifier and TypeMethodDescriptionvoid
addCloseListener
(DomainObjectClosedListener listener) Adds a listener that will be notified when this DomainObject is closed.boolean
addConsumer
(Object consumer) Adds the given object as a consumer.void
Adds a listener that will be notified when this DomainFile associated with this DomainObject changes, such as when a 'Save As' action occurs.void
Adds a listener for this object.void
protected void
close()
createPrivateEventQueue
(DomainObjectListener listener, int maxDelay) Creates a private event queue that can be flushed independently from the main event queue.protected void
void
Fires the specified event.void
Makes sure all pending domainEvents have been sent.void
Flush events from the specified event queue.protected FileSystem
Returns the hidden user-filesystem associated with this objects domain file, or null if unknown.boolean
Return "changed" statusReturns the list of consumers on this domainObjectstatic ContentHandler
<?> Get theContentHandler
associated with the specified domain objectstatic ContentHandler
<?> getContentHandler
(Class<? extends DomainObject> dobjClass) Get theContentHandler
associated with the specified domain object classstatic ContentHandler
<?> getContentHandler
(String contentType) Get theContentHandler
associated with the specified content-type.static Set
<ContentHandler<?>> Get allContentHandler
sabstract String
Returns a word or short phrase that best describes or categorizes the object in terms that a user will understand.Get the domain file for this domain object.getLock()
Returns a map containing all the stored metadata associated with this domain object.long
Returns a long value that gets incremented every time a change, undo, or redo takes place.getName()
Get the name of this domain object.boolean
Returns true if the user has exclusive access to the domain object.void
Invalidates any caching in a program and generate aDomainObjectEvent.RESTORED
event.boolean
Returns whether the object has changed.boolean
Returns true if this object is sending out events as it is changed.boolean
Returns true if this object has been marked as Temporary.boolean
Returns true if the given consumer is using this object.void
Notify the domain object that the specified consumer is no longer using it.void
Removes the given close listener.void
Removes the given DomainObjectFileListener listener.void
Remove the listener for this object.boolean
Removes the specified private event queueprotected void
setChanged
(boolean state) protected void
Set theDomainFile
associated with this instance.void
setEventsEnabled
(boolean v) If true, domain object change events are sent.void
Set the name for this domain object.void
setTemporary
(boolean state) Set the temporary state of this object.toString()
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Methods inherited from interface ghidra.framework.model.DomainObject
addSynchronizedDomainObject, addTransactionListener, canLock, canRedo, canSave, canUndo, clearUndo, endTransaction, forceLock, getAllRedoNames, getAllUndoNames, getCurrentTransactionInfo, getOptions, getOptionsNames, getRedoName, getSynchronizedDomainObjects, getUndoName, hasTerminatedTransaction, isChangeable, isClosed, isLocked, lock, openTransaction, redo, releaseSynchronizedDomainObject, removeTransactionListener, save, saveToPackedFile, startTransaction, startTransaction, undo, unlock, withTransaction, withTransaction
-
Field Details
-
DEFAULT_NAME
- See Also:
-
name
-
changeSupportMap
-
metadata
-
changed
protected boolean changed -
temporary
protected boolean temporary -
lock
-
-
Constructor Details
-
DomainObjectAdapter
Construct a new DomainObjectAdapter. If construction of this object fails, be sure to release with consumer.- Parameters:
name
- name of the objecttimeInterval
- the time (in milliseconds) to wait before the event queue is flushed. If a new event comes in before the time expires the timer is reset.consumer
- the object that created this domain object
-
-
Method Details
-
invalidate
public void invalidate()Invalidates any caching in a program and generate aDomainObjectEvent.RESTORED
event. NOTE: Over-using this method can adversely affect system performance. -
release
Description copied from interface:DomainObject
Notify the domain object that the specified consumer is no longer using it. When the last consumer invokes this method, the domain object will be closed and will become invalid.- Specified by:
release
in interfaceDomainObject
- Parameters:
consumer
- the consumer (e.g., tool, plugin, etc) of the domain object previously established with the addConsumer method.
-
getLock
-
getDomainFile
Description copied from interface:DomainObject
Get the domain file for this domain object.- Specified by:
getDomainFile
in interfaceDomainObject
- Returns:
- the associated domain file
-
getAssociatedUserFilesystem
Returns the hidden user-filesystem associated with this objects domain file, or null if unknown.- Returns:
- user data file system
-
getName
Description copied from interface:DomainObject
Get the name of this domain object.- Specified by:
getName
in interfaceDomainObject
- Returns:
- the name
-
toString
-
setName
Description copied from interface:DomainObject
Set the name for this domain object.- Specified by:
setName
in interfaceDomainObject
- Parameters:
newName
- object name
-
isChanged
public boolean isChanged()Description copied from interface:DomainObject
Returns whether the object has changed.- Specified by:
isChanged
in interfaceDomainObject
- Returns:
- whether the object has changed.
-
setTemporary
public void setTemporary(boolean state) Description copied from interface:DomainObject
Set the temporary state of this object. If this object is temporary, the isChanged() method will always return false. The default temporary state is false.- Specified by:
setTemporary
in interfaceDomainObject
- Parameters:
state
- if true object is marked as temporary
-
isTemporary
public boolean isTemporary()Description copied from interface:DomainObject
Returns true if this object has been marked as Temporary.- Specified by:
isTemporary
in interfaceDomainObject
- Returns:
- true if this object has been marked as Temporary.
-
setDomainFile
Set theDomainFile
associated with this instance.- Parameters:
df
- domain file- Throws:
DomainObjectException
- if a severe failure occurs during the operation.
-
close
protected void close() -
flushEvents
public void flushEvents()Description copied from interface:DomainObject
Makes sure all pending domainEvents have been sent.- Specified by:
flushEvents
in interfaceDomainObject
-
getChangeStatus
public boolean getChangeStatus()Return "changed" status- Returns:
- true if this object has changed
-
addListener
Description copied from interface:DomainObject
Adds a listener for this object.- Specified by:
addListener
in interfaceDomainObject
- Parameters:
l
- listener notified when any change occurs to this domain object
-
removeListener
Description copied from interface:DomainObject
Remove the listener for this object.- Specified by:
removeListener
in interfaceDomainObject
- Parameters:
l
- listener
-
addCloseListener
Description copied from interface:DomainObject
Adds a listener that will be notified when this DomainObject is closed. This is meant for clients to have a chance to cleanup, such as reference removal.- Specified by:
addCloseListener
in interfaceDomainObject
- Parameters:
listener
- the reference to add
-
removeCloseListener
Description copied from interface:DomainObject
Removes the given close listener.- Specified by:
removeCloseListener
in interfaceDomainObject
- Parameters:
listener
- the listener to remove.
-
addDomainFileListener
Description copied from interface:DomainObject
Adds a listener that will be notified when this DomainFile associated with this DomainObject changes, such as when a 'Save As' action occurs. Unlike DomainObject events, these notifications are not buffered and happen immediately when the DomainFile is changed.- Specified by:
addDomainFileListener
in interfaceDomainObject
- Parameters:
listener
- the listener to be notified when the associated DomainFile changes
-
removeDomainFileListener
Description copied from interface:DomainObject
Removes the given DomainObjectFileListener listener.- Specified by:
removeDomainFileListener
in interfaceDomainObject
- Parameters:
listener
- the listener to remove.
-
createPrivateEventQueue
Description copied from interface:DomainObject
Creates a private event queue that can be flushed independently from the main event queue.- Specified by:
createPrivateEventQueue
in interfaceDomainObject
- Parameters:
listener
- the listener to be notified of domain object events.maxDelay
- the time interval (in milliseconds) used to buffer events.- Returns:
- a unique identifier for this private queue.
-
removePrivateEventQueue
Description copied from interface:DomainObject
Removes the specified private event queue- Specified by:
removePrivateEventQueue
in interfaceDomainObject
- Parameters:
id
- the id of the queue to remove.- Returns:
- true if the id represents a valid queue that was removed.
-
flushPrivateEventQueue
Description copied from interface:DomainObject
Flush events from the specified event queue.- Specified by:
flushPrivateEventQueue
in interfaceDomainObject
- Parameters:
id
- the id specifying the event queue to be flushed.
-
getDescription
Description copied from interface:DomainObject
Returns a word or short phrase that best describes or categorizes the object in terms that a user will understand.- Specified by:
getDescription
in interfaceDomainObject
- Returns:
- the description
-
fireEvent
Fires the specified event.- Parameters:
ev
- event to fire
-
setEventsEnabled
public void setEventsEnabled(boolean v) Description copied from interface:DomainObject
If true, domain object change events are sent. If false, no events are sent.NOTE: disabling events could cause plugins to be out of sync!
NOTE: when re-enabling events, an event will be sent to the system to signal that every listener should update.
- Specified by:
setEventsEnabled
in interfaceDomainObject
- Parameters:
v
- true means to enable events
-
isSendingEvents
public boolean isSendingEvents()Description copied from interface:DomainObject
Returns true if this object is sending out events as it is changed. The default is true. You can change this value by callingDomainObject.setEventsEnabled(boolean)
.- Specified by:
isSendingEvents
in interfaceDomainObject
- Returns:
- true if sending events
- See Also:
-
hasExclusiveAccess
public boolean hasExclusiveAccess()Description copied from interface:DomainObject
Returns true if the user has exclusive access to the domain object. Exclusive access means either the object is not shared or the user has an exclusive checkout on the object.- Specified by:
hasExclusiveAccess
in interfaceDomainObject
- Returns:
- true if has exclusive access
-
checkExclusiveAccess
- Throws:
LockException
-
setChanged
protected void setChanged(boolean state) -
addConsumer
Description copied from interface:DomainObject
Adds the given object as a consumer. The release method must be invoked with this same consumer instance when this domain object is no longer in-use.- Specified by:
addConsumer
in interfaceDomainObject
- Parameters:
consumer
- domain object consumer- Returns:
- false if this domain object has already been closed
-
isUsedBy
Returns true if the given consumer is using this object.- Specified by:
isUsedBy
in interfaceDomainObject
- Parameters:
consumer
- the object to test to see if it is a consumer of this domain object.- Returns:
- true if the given consumer is using (has open) this domain object;
-
getConsumerList
Description copied from interface:DomainObject
Returns the list of consumers on this domainObject- Specified by:
getConsumerList
in interfaceDomainObject
- Returns:
- the list of consumers.
-
getContentHandler
Get theContentHandler
associated with the specified content-type.- Parameters:
contentType
- domain object content type- Returns:
- content handler
- Throws:
IOException
- if no content handler can be found
-
getContentHandler
public static ContentHandler<?> getContentHandler(Class<? extends DomainObject> dobjClass) throws IOException Get theContentHandler
associated with the specified domain object class- Parameters:
dobjClass
- domain object class- Returns:
- content handler
- Throws:
IOException
- if no content handler can be found
-
getContentHandler
Get theContentHandler
associated with the specified domain object- Parameters:
dobj
- domain object- Returns:
- content handler
- Throws:
IOException
- if no content handler can be found
-
getContentHandlers
Get allContentHandler
s- Returns:
- collection of content handlers
-
getMetadata
Description copied from interface:DomainObject
Returns a map containing all the stored metadata associated with this domain object. The map contains key,value pairs and are ordered by their insertion order.- Specified by:
getMetadata
in interfaceDomainObject
- Returns:
- a map containing all the stored metadata associated with this domain object.
-
getModificationNumber
public long getModificationNumber()Description copied from interface:DomainObject
Returns a long value that gets incremented every time a change, undo, or redo takes place. Useful for implementing a lazy caching system.- Specified by:
getModificationNumber
in interfaceDomainObject
- Returns:
- a long value that is incremented for every change to the program.
-
fatalErrorOccurred
-