Package ghidra.framework.model
Interface DomainObject
- All Known Subinterfaces:
DataTypeArchive
,DataTypeManagerDomainObject
,Program
,UndoableDomainObject
- All Known Implementing Classes:
DataTypeArchiveDB
,DomainObjectAdapter
,DomainObjectAdapterDB
,ProgramDB
,URLLinkObject
public interface DomainObject
DomainObject
is the interface that must be supported by
data objects that are persistent. DomainObject
s maintain an
association with a DomainFile
. A DomainObject
that
has never been saved will have a null DomainFile
.-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final int
Event type generated when the domain file associated with the domain object changes.static final int
Event type generated when this domain object is closed.static final int
Event type generated when a fatal error occurs which renders the domain object invalid.static final int
Event type generated when the object name changes.static final int
Event type generated when domain object is restored.static final int
Event type generated when the domain object is saved.static final int
Event type generated when a property on this DomainObject is changed.static final Object
Object to synchronize on for undo/redo operations. -
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 for this object.boolean
canLock()
Returns true if a modification lock can be obtained on this domain object.boolean
canSave()
Returns true if this object can be saved; a read-only file cannot be saved.createPrivateEventQueue
(DomainObjectListener listener, int maxDelay) Creates a private event queue that can be flushed independently from the main event queue.void
Makes sure all pending domainEvents have been sent.void
Flush events from the specified event queue.void
Force transaction lock and terminate current transaction.Returns the list of consumers on this domainObjectReturns 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.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.getOptions
(String propertyListName) Get the property list for the given name.Returns all properties lists contained by this domain object.boolean
Returns true if the user has exclusive access to the domain object.boolean
Returns true if changes are permitted.boolean
Returns whether the object has changed.boolean
isClosed()
Returns true if this domain object has been closed as a result of the last releaseboolean
isLocked()
Returns true if the domain object currently has a modification lock enabled.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 (has open) this domain object.boolean
Attempt to obtain a modification lock on the domain object.void
Notify the domain object that the specified consumer is no longer using it.void
Removes the given close listener.void
Remove the listener for this object.boolean
Removes the specified private event queuevoid
save
(String comment, TaskMonitor monitor) Saves changes to the DomainFile.void
saveToPackedFile
(File outputFile, TaskMonitor monitor) Saves (i.e., serializes) the current content to a packed file.void
setEventsEnabled
(boolean enabled) 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.void
unlock()
Release a modification lock previously granted with the lock method.
-
Field Details
-
undoLock
Object to synchronize on for undo/redo operations. -
DO_OBJECT_SAVED
static final int DO_OBJECT_SAVEDEvent type generated when the domain object is saved.- See Also:
-
DO_DOMAIN_FILE_CHANGED
static final int DO_DOMAIN_FILE_CHANGEDEvent type generated when the domain file associated with the domain object changes.- See Also:
-
DO_OBJECT_RENAMED
static final int DO_OBJECT_RENAMEDEvent type generated when the object name changes.- See Also:
-
DO_OBJECT_RESTORED
static final int DO_OBJECT_RESTOREDEvent type generated when domain object is restored.- See Also:
-
DO_PROPERTY_CHANGED
static final int DO_PROPERTY_CHANGEDEvent type generated when a property on this DomainObject is changed.- See Also:
-
DO_OBJECT_CLOSED
static final int DO_OBJECT_CLOSEDEvent type generated when this domain object is closed.- See Also:
-
DO_OBJECT_ERROR
static final int DO_OBJECT_ERROREvent type generated when a fatal error occurs which renders the domain object invalid.- See Also:
-
-
Method Details
-
isChanged
boolean isChanged()Returns whether the object has changed.- Returns:
- whether the object has changed.
-
setTemporary
void setTemporary(boolean state) 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.- Parameters:
state
- if true object is marked as temporary
-
isTemporary
boolean isTemporary()Returns true if this object has been marked as Temporary.- Returns:
- true if this object has been marked as Temporary.
-
isChangeable
boolean isChangeable()Returns true if changes are permitted.- Returns:
- true if changes are permitted.
-
canSave
boolean canSave()Returns true if this object can be saved; a read-only file cannot be saved.- Returns:
- true if this object can be saved
-
save
Saves changes to the DomainFile.- Parameters:
comment
- comment used for new versionmonitor
- monitor that shows the progress of the save- Throws:
IOException
- thrown if there was an error accessing this domain objectReadOnlyException
- thrown if this DomainObject is read only and cannot be savedCancelledException
- thrown if the user canceled the save operation
-
saveToPackedFile
Saves (i.e., serializes) the current content to a packed file.- Parameters:
outputFile
- packed output filemonitor
- progress monitor- Throws:
IOException
- if an exception occursCancelledException
- if the user cancelsUnsupportedOperationException
- if not supported by object implementation
-
release
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.- Parameters:
consumer
- the consumer (e.g., tool, plugin, etc) of the domain object previously established with the addConsumer method.
-
addListener
Adds a listener for this object.- Parameters:
dol
- listener notified when any change occurs to this domain object
-
removeListener
Remove the listener for this object.- Parameters:
dol
- listener
-
addCloseListener
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.- Parameters:
listener
- the reference to add
-
removeCloseListener
Removes the given close listener.- Parameters:
listener
- the listener to remove.
-
createPrivateEventQueue
Creates a private event queue that can be flushed independently from the main event queue.- 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
Removes the specified private event queue- Parameters:
id
- the id of the queue to remove.- Returns:
- true if the id represents a valid queue that was removed.
-
getDescription
String getDescription()Returns a word or short phrase that best describes or categorizes the object in terms that a user will understand.- Returns:
- the description
-
getName
String getName()Get the name of this domain object.- Returns:
- the name
-
setName
Set the name for this domain object.- Parameters:
name
- object name
-
getDomainFile
DomainFile getDomainFile()Get the domain file for this domain object.- Returns:
- the associated domain file
-
addConsumer
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.- Parameters:
consumer
- domain object consumer- Returns:
- false if this domain object has already been closed
-
getConsumerList
Returns the list of consumers on this domainObject- Returns:
- the list of consumers.
-
isUsedBy
Returns true if the given consumer is using (has open) this domain object.- 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;
-
setEventsEnabled
void setEventsEnabled(boolean enabled) 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.
- Parameters:
enabled
- true means to enable events
-
isSendingEvents
boolean isSendingEvents()Returns true if this object is sending out events as it is changed. The default is true. You can change this value by callingsetEventsEnabled(boolean)
.- Returns:
- true if sending events
- See Also:
-
flushEvents
void flushEvents()Makes sure all pending domainEvents have been sent. -
flushPrivateEventQueue
Flush events from the specified event queue.- Parameters:
id
- the id specifying the event queue to be flushed.
-
canLock
boolean canLock()Returns true if a modification lock can be obtained on this domain object. Care should be taken with using this method since this will not prevent another thread from modifying the domain object.- Returns:
- true if can lock
-
isLocked
boolean isLocked()Returns true if the domain object currently has a modification lock enabled.- Returns:
- true if locked
-
lock
Attempt to obtain a modification lock on the domain object. Multiple locks may be granted on this domain object, although all lock owners must release their lock in a timely fashion.- Parameters:
reason
- very short reason for requesting lock- Returns:
- true if lock obtained successfully, else false which indicates that a modification is in process.
-
forceLock
Force transaction lock and terminate current transaction.- Parameters:
rollback
- true if rollback of non-commited changes should occurs, false if commit should be done. NOTE: it can be potentially detrimental to commit an incomplete transaction which should be avoided.reason
- very short reason for requesting lock
-
unlock
void unlock()Release a modification lock previously granted with the lock method. -
getOptionsNames
Returns all properties lists contained by this domain object.- Returns:
- all property lists contained by this domain object.
-
getOptions
Get the property list for the given name.- Parameters:
propertyListName
- name of property list- Returns:
- the options
-
isClosed
boolean isClosed()Returns true if this domain object has been closed as a result of the last release- Returns:
- true if closed
-
hasExclusiveAccess
boolean hasExclusiveAccess()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.- Returns:
- true if has exclusive access
-
getMetadata
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.- Returns:
- a map containing all the stored metadata associated with this domain object.
-
getModificationNumber
long getModificationNumber()Returns a long value that gets incremented every time a change, undo, or redo takes place. Useful for implementing a lazy caching system.- Returns:
- a long value that is incremented for every change to the program.
-