Package ghidra.program.database

# Class DataTypeArchiveDB

java.lang.Object
ghidra.framework.data.DomainObjectAdapter
ghidra.framework.data.DomainObjectAdapterDB
ghidra.program.database.DataTypeArchiveDB

All Implemented Interfaces:
  `DBConstants`, `ErrorHandler`, `DataTypeManagerOwner`, `DomainObject`, `Undoable`, `UndoableDomainObject`, `DataTypeManagerDomainObject`, `DataTypeArchive`, `DataTypeArchiveChangeManager`

public class DataTypeArchiveDB extends DomainObjectAdapterDB implements DataTypeArchive, DataTypeArchiveChangeManager
Database implementation for Data Type Archive.

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `static final String`
  `ARCHIVE_INFO`
  Name of data type archive information property list
  `static final String`
  `ARCHIVE_SETTINGS`
  Name of data type archive settings property list
  `static final String`
  `CREATED_WITH_GHIDRA_VERSION`
  Name of Ghidra version property
  `static final String`
  `DATE_CREATED`
  Name of date created property
  `static final Date`
  `JANUARY_1_1970`
  A date from January 1, 1970

  ### Fields inherited from class ghidra.framework.data.DomainObjectAdapterDB

  `changeSet, dbh, NUM_UNDOS, options`

  ### Fields inherited from class ghidra.framework.data.DomainObjectAdapter

  `changed, changeSupportMap, DEFAULT_NAME, lock, metadata, name, temporary`

  ### Fields inherited from interface ghidra.program.model.listing.DataTypeArchive

  `DATA_TYPE_ARCHIVE_INFO, DATA_TYPE_ARCHIVE_SETTINGS`

  ### Fields inherited from interface ghidra.program.util.DataTypeArchiveChangeManager

  `DOCR_CATEGORY_ADDED, DOCR_CATEGORY_MOVED, DOCR_CATEGORY_REMOVED, DOCR_CATEGORY_RENAMED, DOCR_CUSTOM_FORMAT_ADDED, DOCR_CUSTOM_FORMAT_REMOVED, DOCR_DATA_TYPE_ADDED, DOCR_DATA_TYPE_CHANGED, DOCR_DATA_TYPE_MOVED, DOCR_DATA_TYPE_REMOVED, DOCR_DATA_TYPE_RENAMED, DOCR_DATA_TYPE_REPLACED, DOCR_DATA_TYPE_SETTING_CHANGED`

  ### Fields inherited from interface db.DBConstants

  `CREATE, READ_ONLY, UPDATE, UPGRADE`

  ### 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

  Constructors
  Constructor
  Description
  `DataTypeArchiveDB(DBHandle dbh, int openMode, TaskMonitor monitor, Object consumer)`
  Constructs a new DataTypeArchiveDB
  `DataTypeArchiveDB(DomainFolder folder, String name, Object consumer)`
  Constructs a new DataTypeArchiveDB within a project folder.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `categoryAdded(long categoryID, int type, Object oldValue, Object newValue)`
  Notification that a category was added.
  `void`
  `categoryChanged(long categoryID, int type, Object oldValue, Object newValue)`
  Notification that a category was changed.
  `protected void`
  `clearCache(boolean all)`
  `protected void`
  `close()`
  `void`
  `dataTypeAdded(long dataTypeID, int type, Object oldValue, Object newValue)`
  Notification that a data type was added.
  `void`
  `dataTypeChanged(long dataTypeID, int type, boolean isAutoResponseChange, Object oldValue, Object newValue)`
  notification the a data type has changed
  `ghidra.program.database.DataTypeArchiveDBChangeSet`
  `getChanges()`
  Get the data type archive changes since the last save as a set of addresses.
  `Date`
  `getCreationDate()`
  Returns the creation date of this data type archive.
  `DataTypeManager`
  `getDataTypeManager()`
  Gets the associated data type manager.
  `int`
  `getDefaultPointerSize()`
  Gets the default pointer size as it may be stored within the data type archive.
  `String`
  `getDescription()`
  Returns a word or short phrase that best describes or categorizes the object in terms that a user will understand.
  `Map<String,String>`
  `getMetadata()`
  Returns a map containing all the stored metadata associated with this domain object.
  `void`
  `invalidate()`
  Invalidates any caching in a data type archive.
  `boolean`
  `isChangeable()`
  Returns true if changes are permitted.
  `protected boolean`
  `propertyChanged(String propertyName, Object oldValue, Object newValue)`
  Notification of property change
  `protected void`
  `setChanged(boolean b)`
  `void`
  `setChanged(int type, Object oldValue, Object newValue)`
  Mark the state this Data Type Archive as having changed and generate the event.
  `protected void`
  `setDomainFile(DomainFile df)`
  `void`
  `setName(String newName)`
  Set the name for this domain object.
  `void`
  `setObjChanged(int type, Object affectedObj, Object oldValue, Object newValue)`
  Mark the state of a Program as having changed and generate the event.
  `void`
  `updateID()`
  `protected void`
  `updateMetadata()`
  This method is called before a save, saveAs, or saveToPackedFile to update common meta data

  ### Methods inherited from class ghidra.framework.data.DomainObjectAdapterDB

  `addSynchronizedDomainObject, addTransactionListener, canLock, canRedo, canSave, canUndo, clearUndo, clearUndo, dbError, endTransaction, flushWriteCache, forceLock, getAllRedoNames, getAllUndoNames, getChangeSet, getCurrentTransactionInfo, getDBHandle, getOptions, getOptionsNames, getRedoName, getSynchronizedDomainObjects, getUndoName, getUndoStackDepth, getUserData, hasTerminatedTransaction, invalidateWriteCache, isChanged, isClosed, isLocked, loadMetadata, lock, openTransaction, performPropertyListAlterations, redo, releaseSynchronizedDomainObject, removeTransactionListener, save, saveMetadata, saveToPackedFile, startTransaction, startTransaction, undo, unlock`

  ### Methods inherited from class ghidra.framework.data.DomainObjectAdapter

  `addCloseListener, addConsumer, addDomainFileListener, addListener, checkExclusiveAccess, createPrivateEventQueue, fatalErrorOccurred, fireEvent, flushEvents, flushPrivateEventQueue, getAssociatedUserFilesystem, getChangeStatus, getConsumerList, getContentHandler, getDomainFile, getLock, getModificationNumber, getName, hasExclusiveAccess, isSendingEvents, isTemporary, isUsedBy, release, removeCloseListener, removeDomainFileListener, removeListener, removePrivateEventQueue, setDefaultContentClass, setEventsEnabled, setTemporary, toString`

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

  ### Methods inherited from interface ghidra.program.model.listing.DataTypeArchive

  `hasExclusiveAccess`

  ### Methods inherited from interface ghidra.framework.model.DomainObject

  `addCloseListener, addConsumer, addDomainFileListener, addListener, canLock, canSave, createPrivateEventQueue, flushEvents, flushPrivateEventQueue, forceLock, getConsumerList, getDomainFile, getModificationNumber, getName, getOptions, getOptionsNames, isChanged, isClosed, isLocked, isSendingEvents, isTemporary, isUsedBy, lock, release, removeCloseListener, removeDomainFileListener, removeListener, removePrivateEventQueue, save, saveToPackedFile, setEventsEnabled, setTemporary, unlock`

  ### Methods inherited from interface ghidra.framework.model.Undoable

  `addTransactionListener, canRedo, canUndo, clearUndo, getAllRedoNames, getAllUndoNames, getRedoName, getUndoName, redo, removeTransactionListener, undo`

  ### Methods inherited from interface ghidra.framework.model.UndoableDomainObject

  `addSynchronizedDomainObject, endTransaction, getCurrentTransactionInfo, getSynchronizedDomainObjects, hasTerminatedTransaction, openTransaction, releaseSynchronizedDomainObject, startTransaction, startTransaction, withTransaction, withTransaction`

- ## Field Details

  - ### ARCHIVE_INFO

    public static final String ARCHIVE_INFO
    Name of data type archive information property list
    See Also:
      - Constant Field Values

  - ### ARCHIVE_SETTINGS

    public static final String ARCHIVE_SETTINGS
    Name of data type archive settings property list
    See Also:
      - Constant Field Values

  - ### DATE_CREATED

    public static final String DATE_CREATED
    Name of date created property
    See Also:
      - Constant Field Values

  - ### CREATED_WITH_GHIDRA_VERSION

    public static final String CREATED_WITH_GHIDRA_VERSION
    Name of Ghidra version property
    See Also:
      - Constant Field Values

  - ### JANUARY_1_1970

    public static final Date JANUARY_1_1970
    A date from January 1, 1970

- ## Constructor Details

  - ### DataTypeArchiveDB

    public DataTypeArchiveDB(DomainFolder folder, String name, Object consumer) throws IOException, DuplicateNameException, InvalidNameException
    Constructs a new DataTypeArchiveDB within a project folder.
    Parameters:
      `folder` - folder within which the project archive will be created
      `name` - the name of the data type archive
      `consumer` - the object that is using this data type archive.
    Throws:
      `IOException` - if there is an error accessing the database.
      `InvalidNameException`
      `DuplicateNameException`

  - ### DataTypeArchiveDB

    public DataTypeArchiveDB(DBHandle dbh, int openMode, TaskMonitor monitor, Object consumer) throws IOException, VersionException, CancelledException
    Constructs a new DataTypeArchiveDB
    Parameters:
      `dbh` - a handle to an open data type archive database.
      `openMode` - one of: READ_ONLY: the original database will not be modified UPDATE: the database can be written to. UPGRADE: the database is upgraded to the latest schema as it is opened.
      `monitor` - TaskMonitor that allows the open to be canceled.
      `consumer` - the object that keeping the program open.
    Throws:
      `IOException` - if an error accessing the database occurs.
      `VersionException` - if database version does not match implementation, UPGRADE may be possible.
      `CancelledException` - if instantiation is canceled by monitor

- ## Method Details

  - ### close

    protected void close()
    Overrides:
      `close` in class `DomainObjectAdapterDB`

  - ### setDomainFile

    protected void setDomainFile(DomainFile df)
    Overrides:
      `setDomainFile` in class `DomainObjectAdapter`

  - ### propertyChanged

    protected boolean propertyChanged(String propertyName, Object oldValue, Object newValue)
    Description copied from class: `DomainObjectAdapterDB`
    Notification of property change
    Overrides:
      `propertyChanged` in class `DomainObjectAdapterDB`
    Returns:
      true if change is OK, false value should be reverted

  - ### getDataTypeManager

    public DataTypeManager getDataTypeManager()
    Description copied from interface: `DataTypeManagerOwner`
    Gets the associated data type manager.
    Specified by:
      `getDataTypeManager` in interface `DataTypeManagerOwner`
    Returns:
      the data type manager.
    See Also:
      - `Program.getDataTypeManager()`

  - ### getCreationDate

    public Date getCreationDate()
    Description copied from interface: `DataTypeArchive`
    Returns the creation date of this data type archive. existed, then Jan 1, 1970 is returned.
    Specified by:
      `getCreationDate` in interface `DataTypeArchive`
    Returns:
      the creation date of this data type archive
    See Also:
      - `Program.getCreationDate()`

  - ### getDefaultPointerSize

    public int getDefaultPointerSize()
    Description copied from interface: `DataTypeArchive`
    Gets the default pointer size as it may be stored within the data type archive.
    Specified by:
      `getDefaultPointerSize` in interface `DataTypeArchive`
    Returns:
      default pointer size.
    See Also:
      - `Program.getDefaultPointerSize()`

  - ### getChanges

    public ghidra.program.database.DataTypeArchiveDBChangeSet getChanges()
    Description copied from interface: `DataTypeArchive`
    Get the data type archive changes since the last save as a set of addresses.
    Specified by:
      `getChanges` in interface `DataTypeArchive`
    Returns:
      set of changed addresses within program.
    See Also:
      - `Program.getChanges()`

  - ### dataTypeChanged

    public void dataTypeChanged(long dataTypeID, int type, boolean isAutoResponseChange, Object oldValue, Object newValue)
    notification the a data type has changed
    Parameters:
      `dataTypeID` - the id of the data type that changed.
      `type` - the type of the change (moved, renamed, etc.)
      `isAutoResponseChange` - true if change is an auto-response change caused by another datatype's change (e.g., size, alignment), else false in which case this change will be added to archive change-set to aid merge conflict detection.
      `oldValue` - the old data type.
      `newValue` - the new data type.

  - ### dataTypeAdded

    public void dataTypeAdded(long dataTypeID, int type, Object oldValue, Object newValue)
    Notification that a data type was added.
    Parameters:
      `dataTypeID` - the id if the data type that was added.
      `type` - should always be DATATYPE_ADDED
      `oldValue` - always null
      `newValue` - the data type added.

  - ### categoryChanged

    public void categoryChanged(long categoryID, int type, Object oldValue, Object newValue)
    Notification that a category was changed.
    Parameters:
      `categoryID` - the id of the data type that was added.
      `type` - the type of changed
      `oldValue` - old value depends on the type.
      `newValue` - new value depends on the type.

  - ### categoryAdded

    public void categoryAdded(long categoryID, int type, Object oldValue, Object newValue)
    Notification that a category was added.
    Parameters:
      `categoryID` - the id of the data type that was added.
      `type` - the type of changed (should always be CATEGORY_ADDED)
      `oldValue` - always null
      `newValue` - new value depends on the type.

  - ### setChanged

    public void setChanged(int type, Object oldValue, Object newValue)
    Mark the state this Data Type Archive as having changed and generate the event. Any or all parameters may be null.
    Specified by:
      `setChanged` in interface `DataTypeArchive`
    Specified by:
      `setChanged` in interface `DataTypeArchiveChangeManager`
    Parameters:
      `type` - event type
      `oldValue` - original value
      `newValue` - new value

  - ### setObjChanged

    public void setObjChanged(int type, Object affectedObj, Object oldValue, Object newValue)
    Mark the state of a Program as having changed and generate the event. Any or all parameters may be null. NOTE: ChangeSet data will not be updated since this a very generic change not related to a specific address.
    Specified by:
      `setObjChanged` in interface `DataTypeArchive`
    Specified by:
      `setObjChanged` in interface `DataTypeArchiveChangeManager`
    Parameters:
      `type` - event type
      `affectedObj` - object that is the subject of the event
      `oldValue` - original value or an Object that is related to the event
      `newValue` - new value or an Object that is related to the the event

  - ### setName

    public void setName(String newName)
    Description copied from interface: `DomainObject`
    Set the name for this domain object.
    Specified by:
      `setName` in interface `DomainObject`
    Overrides:
      `setName` in class `DomainObjectAdapter`
    Parameters:
      `newName` - object name

  - ### getDescription

    public String 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 interface `DomainObject`
    Specified by:
      `getDescription` in class `DomainObjectAdapter`
    Returns:
      the description

  - ### clearCache

    protected void clearCache(boolean all)
    Overrides:
      `clearCache` in class `DomainObjectAdapterDB`

  - ### invalidate

    public void invalidate()
    Description copied from interface: `DataTypeArchive`
    Invalidates any caching in a data type archive. NOTE: Over-using this method can adversely affect system performance.
    Specified by:
      `invalidate` in interface `DataTypeArchive`
    See Also:
      - `Program.invalidate()`

  - ### isChangeable

    public boolean isChangeable()
    Description copied from interface: `DomainObject`
    Returns true if changes are permitted.
    Specified by:
      `isChangeable` in interface `DomainObject`
    Returns:
      true if changes are permitted.

  - ### setChanged

    protected void setChanged(boolean b)
    Overrides:
      `setChanged` in class `DomainObjectAdapterDB`

  - ### getMetadata

    public Map<String,String> 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 interface `DomainObject`
    Overrides:
      `getMetadata` in class `DomainObjectAdapter`
    Returns:
      a map containing all the stored metadata associated with this domain object.

  - ### updateMetadata

    protected void updateMetadata() throws IOException
    Description copied from class: `DomainObjectAdapterDB`
    This method is called before a save, saveAs, or saveToPackedFile to update common meta data
    Overrides:
      `updateMetadata` in class `DomainObjectAdapterDB`
    Throws:
      `IOException`

  - ### updateID

    public void updateID()
    Specified by:
      `updateID` in interface `DataTypeArchive`