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
FieldsModifier and TypeFieldDescriptionprotected booleanprotected Map<EventQueueID, ghidra.framework.data.DomainObjectChangeSupport> protected static final Stringprotected Lockprotected Stringprotected booleanFields 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
ConstructorsModifierConstructorDescriptionprotectedDomainObjectAdapter(String name, int timeInterval, Object consumer) Construct a new DomainObjectAdapter. -
Method Summary
Modifier and TypeMethodDescriptionvoidaddCloseListener(DomainObjectClosedListener listener) Adds a listener that will be notified when this DomainObject is closed.booleanaddConsumer(Object consumer) Adds the given object as a consumer.voidAdds a listener that will be notified when this DomainFile associated with this DomainObject changes, such as when a 'Save As' action occurs.voidAdds a listener for this object.voidprotected voidclose()createPrivateEventQueue(DomainObjectListener listener, int maxDelay) Creates a private event queue that can be flushed independently from the main event queue.protected voidvoidFires the specified event.voidMakes sure all pending domainEvents have been sent.voidFlush events from the specified event queue.protected FileSystemReturns the hidden user-filesystem associated with this objects domain file, or null if unknown.booleanReturn "changed" statusReturns the list of consumers on this domainObjectstatic ContentHandler<?> Get theContentHandlerassociated with the specified domain objectstatic ContentHandler<?> getContentHandler(Class<? extends DomainObject> dobjClass) Get theContentHandlerassociated with the specified domain object classstatic ContentHandler<?> getContentHandler(String contentType) Get theContentHandlerassociated with the specified content-type.static Set<ContentHandler<?>> Get allContentHandlersabstract StringReturns 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.longReturns a long value that gets incremented every time a change, undo, or redo takes place.getName()Get the name of this domain object.booleanReturns true if the user has exclusive access to the domain object.voidInvalidates any caching in a program and generate aDomainObjectEvent.RESTOREDevent.booleanReturns whether the object has changed.booleanReturns true if this object is sending out events as it is changed.booleanReturns true if this object has been marked as Temporary.booleanReturns true if the given consumer is using this object.voidNotify the domain object that the specified consumer is no longer using it.voidRemoves the given close listener.voidRemoves the given DomainObjectFileListener listener.voidRemove the listener for this object.booleanRemoves the specified private event queueprotected voidsetChanged(boolean state) protected voidSet theDomainFileassociated with this instance.voidsetEventsEnabled(boolean v) If true, domain object change events are sent.voidSet the name for this domain object.voidsetTemporary(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, waitMethods 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.RESTOREDevent. NOTE: Over-using this method can adversely affect system performance. -
release
Description copied from interface:DomainObjectNotify 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:
releasein 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:DomainObjectGet the domain file for this domain object.- Specified by:
getDomainFilein 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:DomainObjectGet the name of this domain object.- Specified by:
getNamein interfaceDomainObject- Returns:
- the name
-
toString
-
setName
Description copied from interface:DomainObjectSet the name for this domain object.- Specified by:
setNamein interfaceDomainObject- Parameters:
newName- object name
-
isChanged
public boolean isChanged()Description copied from interface:DomainObjectReturns whether the object has changed.- Specified by:
isChangedin interfaceDomainObject- Returns:
- whether the object has changed.
-
setTemporary
public void setTemporary(boolean state) Description copied from interface:DomainObjectSet 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:
setTemporaryin interfaceDomainObject- Parameters:
state- if true object is marked as temporary
-
isTemporary
public boolean isTemporary()Description copied from interface:DomainObjectReturns true if this object has been marked as Temporary.- Specified by:
isTemporaryin interfaceDomainObject- Returns:
- true if this object has been marked as Temporary.
-
setDomainFile
Set theDomainFileassociated 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:DomainObjectMakes sure all pending domainEvents have been sent.- Specified by:
flushEventsin interfaceDomainObject
-
getChangeStatus
public boolean getChangeStatus()Return "changed" status- Returns:
- true if this object has changed
-
addListener
Description copied from interface:DomainObjectAdds a listener for this object.- Specified by:
addListenerin interfaceDomainObject- Parameters:
l- listener notified when any change occurs to this domain object
-
removeListener
Description copied from interface:DomainObjectRemove the listener for this object.- Specified by:
removeListenerin interfaceDomainObject- Parameters:
l- listener
-
addCloseListener
Description copied from interface:DomainObjectAdds 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:
addCloseListenerin interfaceDomainObject- Parameters:
listener- the reference to add
-
removeCloseListener
Description copied from interface:DomainObjectRemoves the given close listener.- Specified by:
removeCloseListenerin interfaceDomainObject- Parameters:
listener- the listener to remove.
-
addDomainFileListener
Description copied from interface:DomainObjectAdds 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:
addDomainFileListenerin interfaceDomainObject- Parameters:
listener- the listener to be notified when the associated DomainFile changes
-
removeDomainFileListener
Description copied from interface:DomainObjectRemoves the given DomainObjectFileListener listener.- Specified by:
removeDomainFileListenerin interfaceDomainObject- Parameters:
listener- the listener to remove.
-
createPrivateEventQueue
Description copied from interface:DomainObjectCreates a private event queue that can be flushed independently from the main event queue.- Specified by:
createPrivateEventQueuein 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:DomainObjectRemoves the specified private event queue- Specified by:
removePrivateEventQueuein 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:DomainObjectFlush events from the specified event queue.- Specified by:
flushPrivateEventQueuein interfaceDomainObject- Parameters:
id- the id specifying the event queue to be flushed.
-
getDescription
Description copied from interface:DomainObjectReturns a word or short phrase that best describes or categorizes the object in terms that a user will understand.- Specified by:
getDescriptionin interfaceDomainObject- Returns:
- the description
-
fireEvent
Fires the specified event.- Parameters:
ev- event to fire
-
setEventsEnabled
public void setEventsEnabled(boolean v) Description copied from interface:DomainObjectIf 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:
setEventsEnabledin interfaceDomainObject- Parameters:
v- true means to enable events
-
isSendingEvents
public boolean isSendingEvents()Description copied from interface:DomainObjectReturns 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:
isSendingEventsin interfaceDomainObject- Returns:
- true if sending events
- See Also:
-
hasExclusiveAccess
public boolean hasExclusiveAccess()Description copied from interface:DomainObjectReturns 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:
hasExclusiveAccessin interfaceDomainObject- Returns:
- true if has exclusive access
-
checkExclusiveAccess
- Throws:
LockException
-
setChanged
protected void setChanged(boolean state) -
addConsumer
Description copied from interface:DomainObjectAdds 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:
addConsumerin 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:
isUsedByin 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:DomainObjectReturns the list of consumers on this domainObject- Specified by:
getConsumerListin interfaceDomainObject- Returns:
- the list of consumers.
-
getContentHandler
Get theContentHandlerassociated 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 theContentHandlerassociated 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 theContentHandlerassociated with the specified domain object- Parameters:
dobj- domain object- Returns:
- content handler
- Throws:
IOException- if no content handler can be found
-
getContentHandlers
Get allContentHandlers- Returns:
- collection of content handlers
-
getMetadata
Description copied from interface:DomainObjectReturns 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:
getMetadatain interfaceDomainObject- Returns:
- a map containing all the stored metadata associated with this domain object.
-
getModificationNumber
public long getModificationNumber()Description copied from interface:DomainObjectReturns a long value that gets incremented every time a change, undo, or redo takes place. Useful for implementing a lazy caching system.- Specified by:
getModificationNumberin interfaceDomainObject- Returns:
- a long value that is incremented for every change to the program.
-
fatalErrorOccurred
-