Class DataTypeManagerDB

    • Constructor Detail

      • DataTypeManagerDB

        protected DataTypeManagerDB()
        Construct a temporary data-type manager. Note that this manager does not support the save or saveAs operation.
      • DataTypeManagerDB

        protected DataTypeManagerDB​(ResourceFile packedDBfile,
                                    int openMode)
                             throws java.io.IOException
        Constructor for a data-type manager backed by a packed database file. When opening for UPDATE an automatic upgrade will be performed if required.
        Parameters:
        packedDBfile - packed datatype archive file (i.e., *.gdt resource).
        openMode - open mode CREATE, READ_ONLY or UPDATE (see DBConstants)
        Throws:
        java.io.IOException - a low-level IO error. This exception may also be thrown when a version error occurs (cause is VersionException).
    • Method Detail

      • getDomainFileID

        protected abstract java.lang.String getDomainFileID()
      • getPath

        protected abstract java.lang.String getPath()
      • updateID

        public void updateID()
      • getFavorites

        public java.util.List<DataType> getFavorites()
        Description copied from interface: DataTypeManager
        Returns a list of datatypes that have been designated as favorites.
        Specified by:
        getFavorites in interface DataTypeManager
        Returns:
        the list of favorite datatypes in this manager.
      • isFavorite

        public boolean isFavorite​(DataType dataType)
        Description copied from interface: DataTypeManager
        Returns true if the given datatype has been designated as a favorite. If the datatype does not belong to this datatype manager, then false will be returned.
        Specified by:
        isFavorite in interface DataTypeManager
        Parameters:
        dataType - the datatype to check.
        Returns:
        true if the given datatype is a favorite in this manager.
      • setFavorite

        public void setFavorite​(DataType dataType,
                                boolean isFavorite)
        Description copied from interface: DataTypeManager
        Sets the given dataType to be either a favorite or not a favorite.
        Specified by:
        setFavorite in interface DataTypeManager
        Parameters:
        dataType - the datatype for which to change its status as a favorite.
        isFavorite - true if the datatype is to be a favorite or false otherwise.
      • getUniqueName

        public java.lang.String getUniqueName​(CategoryPath path,
                                              java.lang.String baseName)
        Description copied from interface: DataTypeManager
        Returns a unique name not currently used by any other dataType or category with the same baseName
        Specified by:
        getUniqueName in interface DataTypeManager
        Parameters:
        path - the path of the name
        baseName - the base name to be made unique
        Returns:
        a unique name starting with baseName
      • getUniqueName

        public java.lang.String getUniqueName​(CategoryPath path1,
                                              CategoryPath path2,
                                              java.lang.String baseName)
      • getCategory

        public Category getCategory​(long id)
        Get the category for the given ID.
        Specified by:
        getCategory in interface DataTypeManager
        Parameters:
        id - id of the desired category
        Returns:
        null if no category exists with the given ID.
      • resolve

        public DataType resolve​(DataType dataType,
                                DataTypeConflictHandler handler)
        Description copied from interface: DataTypeManager
        Returns a dataType that is "in" (ie suitable implementation) this Manager, creating a new one if necessary. Also the returned dataType will be in a category in this dataTypeManager that is equivalent to the category of the passed in dataType.
        Specified by:
        resolve in interface DataTypeManager
        Parameters:
        dataType - the dataType to be resolved.
        handler - used to resolve conflicts with existing dataTypes.
        Returns:
        an equivalent dataType that "belongs" to this dataTypeManager.
      • getUnusedConflictName

        public java.lang.String getUnusedConflictName​(CategoryPath path,
                                                      java.lang.String name)
        This method gets a ".conflict" name that is not currently used by any data types in the indicated category of the data type manager.
        Parameters:
        dtm - the data type manager.
        path - the category path of the category where the new data type live in the data type manager.
        name - The name of the data type. This name may or may not contain ".conflict" as part of it. If the name contains ".conflict", only the part of the name that comes prior to the ".conflict" will be used to determine a new unused conflict name.
        Returns:
        the unused conflict name
      • addDataType

        public DataType addDataType​(DataType originalDataType,
                                    DataTypeConflictHandler handler)
        Description copied from interface: DataTypeManager
        Returns a data type after adding it to this data manager. The returned dataType will be in a category in this dataTypeManager that is equivalent to the category of the passed in dataType.
        Specified by:
        addDataType in interface DataTypeManager
        Parameters:
        originalDataType - the dataType to be resolved.
        handler - used to resolve conflicts with existing dataTypes.
        Returns:
        an equivalent dataType that "belongs" to this dataTypeManager.
      • removeSourceArchive

        public void removeSourceArchive​(SourceArchive sourceArchive)
        Description copied from interface: DataTypeManager
        Removes the source archive from this manager. This will disassociate all data types in this manager from the given archive.
        Specified by:
        removeSourceArchive in interface DataTypeManager
        Parameters:
        sourceArchive - the archive
      • replaceDataType

        public DataType replaceDataType​(DataType existingDt,
                                        DataType replacementDt,
                                        boolean updateCategoryPath)
                                 throws DataTypeDependencyException
        Description copied from interface: DataTypeManager
        Replace an existing dataType with another. All instances and references will be updated to use the replacement dataType.
        Specified by:
        replaceDataType in interface DataTypeManager
        Parameters:
        existingDt - the dataType to be replaced.
        replacementDt - the dataType to use as the replacement.
        updateCategoryPath - if true, the replacementDt will have its categoryPath changed to the exitingDt's path.
        Returns:
        the resolved replacement dataType.
        Throws:
        DataTypeDependencyException - if the replacement datatype depends on the existing dataType;
      • replaceDataTypeIDs

        protected abstract void replaceDataTypeIDs​(long oldID,
                                                   long newID)
      • replaceSourceArchive

        public void replaceSourceArchive​(SourceArchive oldSourceArchive,
                                         SourceArchive newSourceArchive)
        Replace one source archive (oldDTM) with another (newDTM). Any data types whose source was the oldDTM will be changed to have a source that is the newDTM. The oldDTM will no longer be referenced as a source by this data type manager.
        Parameters:
        oldDTM - data type manager for the old source archive
        newDTM - data type manager for the new source archive
        Throws:
        InvalidInputException - if the oldDTM isn't currently a source archive for this data type manager or if the old and new source archives already have the same unique ID.
      • findDataTypes

        public void findDataTypes​(java.lang.String name,
                                  java.util.List<DataType> list)
        Description copied from interface: DataTypeManager
        Begin searching at the root category for all data types with the given name. Places all the data types in this data type manager with the given name into the list.
        Specified by:
        findDataTypes in interface DataTypeManager
        Parameters:
        name - name of the data type
        list - list that will be populated with matching DataType objects
      • findDataTypes

        public void findDataTypes​(java.lang.String name,
                                  java.util.List<DataType> list,
                                  boolean caseSensitive,
                                  TaskMonitor monitor)
        Description copied from interface: DataTypeManager
        Begin searching at the root category for all data types with names that match the given name that may contain wildcards.
        Specified by:
        findDataTypes in interface DataTypeManager
        Parameters:
        name - name to match; may contain wildcards
        list - list that will be populated with matching DataType objects
        caseSensitive - true if the match is case sensitive
        monitor - task monitor to cancel the search
      • getDataType

        public DataType getDataType​(DataTypePath dataTypePath)
        Description copied from interface: DataTypeManager
        Find the dataType for the given dataTypePath.
        Specified by:
        getDataType in interface DataTypeManager
        Parameters:
        dataTypePath - the DataTypePath for the datatype
        Returns:
        the datatype for the given path.
      • getDataType

        public DataType getDataType​(java.lang.String dataTypePath)
        Description copied from interface: DataTypeManager
        Retrieve the data type with the fully qualified path. So you can get the data named "bar" in the category "foo" by calling getDataType("/foo/bar"). This method can be problematic now that datatype names can contain slashes. It will work provided that the part of the datatype name that precedes its internal slash is not also the name of a category in the same category as the datatype. For example, if you call getDataType("/a/b/c"), and "b/c" is the name of your datatype, it will find it unless there is also a category "b" under category "a". A better solution is to use the DataTypeManager.getDataType(DataTypePath) method because the DataTypePath keeps the category and datatype name separate.
        Specified by:
        getDataType in interface DataTypeManager
        Parameters:
        dataTypePath - path
        Returns:
        the dataType or null if it isn't found
      • findEnumValueNames

        public void findEnumValueNames​(long value,
                                       java.util.Set<java.lang.String> enumValueNames)
        Description copied from interface: DataTypeManager
        Adds all enum value names that match the given value, to the given set.
        Specified by:
        findEnumValueNames in interface DataTypeManager
        Parameters:
        value - the value to look for enum name matches
        enumValueNames - the set to add matches to.
      • getResolvedID

        public long getResolvedID​(DataType dt)
        Description copied from interface: DataTypeManager
        Returns the dataTypeId for the given dataType. If the dataType is not currently in the dataTypeManger, it will be added
        Specified by:
        getResolvedID in interface DataTypeManager
        Parameters:
        dt - the data type
        Returns:
        the ID of the resolved type
      • getID

        public long getID​(DataType dt)
        Description copied from interface: DataTypeManager
        Returns the dataTypeId for the given dataType. If the dataType does not exist, a -1 will be returned
        Specified by:
        getID in interface DataTypeManager
        Parameters:
        dt - the datatype to get an id for
        Returns:
        the ID of the type
      • getDataType

        public DataType getDataType​(long dataTypeID)
        Description copied from interface: DataTypeManager
        Returns the dataType associated with the given dataTypeId or null if the dataTypeId is not valid
        Specified by:
        getDataType in interface DataTypeManager
        Parameters:
        dataTypeID - the ID
        Returns:
        the type
      • addInvalidatedListener

        public void addInvalidatedListener​(InvalidatedListener listener)
        Description copied from interface: DataTypeManager
        Adds a listener that will be notified when this manager's cache is invalidated. This will happen when the system has changed and the manager cannot determine the exact change, like during an undo or a redo.
        Specified by:
        addInvalidatedListener in interface DataTypeManager
        Parameters:
        listener - The listener to add
      • remove

        public boolean remove​(DataType dataType,
                              TaskMonitor monitor)
        Description copied from interface: DataTypeManager
        Remove the given datatype from this manager
        Specified by:
        remove in interface DataTypeManager
        Parameters:
        dataType - the dataType to be removed
        monitor - the task monitor
        Returns:
        true if the data type existed and was removed
      • disassociate

        public void disassociate​(DataType dataType)
        Description copied from interface: DataTypeManager
        If the indicated data type is associated with a source archive, this will remove the association and the data type will become local to this data type manager.
        Specified by:
        disassociate in interface DataTypeManager
        Parameters:
        dataType - the data type to be disassociated from a source archive.
      • addDataTypeToDelete

        protected void addDataTypeToDelete​(long id)
      • contains

        public boolean contains​(DataType dataType)
        Description copied from interface: DataTypeManager
        Return true if the given dataType exists in this data type manager
        Specified by:
        contains in interface DataTypeManager
        Parameters:
        dataType - the type
        Returns:
        true if the type is in this manager
      • containsCategory

        public boolean containsCategory​(CategoryPath path)
        Description copied from interface: DataTypeManager
        Returns true if the given category path exists in this datatype manager
        Specified by:
        containsCategory in interface DataTypeManager
        Parameters:
        path - the path
        Returns:
        true if the given category path exists in this datatype manager
      • createCategory

        public Category createCategory​(CategoryPath path)
        Description copied from interface: DataTypeManager
        Create a category for the given path; returns the current category if it already exits
        Specified by:
        createCategory in interface DataTypeManager
        Parameters:
        path - the path
        Returns:
        the category
      • getDataTypes

        public DataType[] getDataTypes​(CategoryPath path)
        Gets the datatypes in the given category path
        Parameters:
        path - the category path in which to look for datatypes
      • getDataType

        public DataType getDataType​(CategoryPath path,
                                    java.lang.String name)
        Description copied from interface: DataTypeManager
        Gets the data type with the indicated name in the indicated category.
        Specified by:
        getDataType in interface DataTypeManager
        Parameters:
        path - the path for the category
        name - the data type's name
        Returns:
        the data type.
      • getCategoryCount

        public int getCategoryCount()
        Description copied from interface: DataTypeManager
        Returns the total number of data type categories
        Specified by:
        getCategoryCount in interface DataTypeManager
        Returns:
        the count
      • getDataTypeCount

        public int getDataTypeCount​(boolean includePointersAndArrays)
        Description copied from interface: DataTypeManager
        Returns the total number of defined data types.
        Specified by:
        getDataTypeCount in interface DataTypeManager
        Parameters:
        includePointersAndArrays - if true all pointers and array data types will be included
        Returns:
        the count
      • isChanged

        public boolean isChanged()
      • getSourceArchives

        public java.util.List<SourceArchive> getSourceArchives()
        Description copied from interface: DataTypeManager
        Returns a list of source archives not including the builtin or the program's archive.
        Specified by:
        getSourceArchives in interface DataTypeManager
        Returns:
        a list of source archives not including the builtin or the program's archive.
      • getSourceArchive

        public SourceArchive getSourceArchive​(java.lang.String fileID)
      • getSourceArchive

        public SourceArchive getSourceArchive​(UniversalID sourceID)
        Description copied from interface: DataTypeManager
        Returns the source archive for the given ID
        Specified by:
        getSourceArchive in interface DataTypeManager
        Parameters:
        sourceID - the ID
        Returns:
        the archive; null if the ID is null; null if the archive does not exist
      • updateSourceArchiveName

        public boolean updateSourceArchiveName​(java.lang.String archiveFileID,
                                               java.lang.String name)
        Description copied from interface: DataTypeManager
        Updates the name associated with a source archive in this data type manager.
        Specified by:
        updateSourceArchiveName in interface DataTypeManager
        Parameters:
        archiveFileID - Universal domain file ID of the source data type archive that has a new name.
        name - the new name of the program or archive.
        Returns:
        true if the name associated with the source data type archive was changed. false if it wasn't changed.
      • updateSourceArchiveName

        public boolean updateSourceArchiveName​(UniversalID sourceID,
                                               java.lang.String name)
        Description copied from interface: DataTypeManager
        Updates the name associated with a source archive in this data type manager.
        Specified by:
        updateSourceArchiveName in interface DataTypeManager
        Parameters:
        sourceID - Universal archive ID of the source data type archive that has a new name.
        name - the new name of the program or archive.
        Returns:
        true if the name associated with the source data type archive was changed. false if it wasn't changed.
      • getDataTypes

        public java.util.List<DataType> getDataTypes​(SourceArchive sourceArchive)
        Description copied from interface: DataTypeManager
        Returns all data types within this manager that have as their source the given archive
        Specified by:
        getDataTypes in interface DataTypeManager
        Parameters:
        sourceArchive - the archive
        Returns:
        the types
      • dbError

        public void dbError​(java.io.IOException e)
        Handles IOExceptions
        Parameters:
        e - the exception to handle
      • getAllDataTypes

        public java.util.Iterator<DataType> getAllDataTypes()
        Description copied from interface: DataTypeManager
        Returns an iterator over all the dataTypes in this manager
        Specified by:
        getAllDataTypes in interface DataTypeManager
        Returns:
        an iterator over all the dataTypes in this manager
      • getAllDataTypes

        public void getAllDataTypes​(java.util.List<DataType> list)
        Description copied from interface: DataTypeManager
        Adds all data types to the specified list.]
        Specified by:
        getAllDataTypes in interface DataTypeManager
        Parameters:
        list - the result list into which the types will be placed
      • getAllComposites

        public java.util.Iterator<Composite> getAllComposites()
        Description copied from interface: DataTypeManager
        Returns an iterator over all composite data types (structures and unions) in this manager
        Specified by:
        getAllComposites in interface DataTypeManager
        Returns:
        the iterator
      • invalidateCache

        public void invalidateCache()
        Invalidates the cache.
      • setLongSettingsValue

        public boolean setLongSettingsValue​(Address dataAddr,
                                            java.lang.String name,
                                            long value)
        Set the long value for instance settings.
        Parameters:
        dataAddr - min address of data
        name - settings name
        value - value of setting
        Returns:
        true if the settings actually changed
      • setStringSettingsValue

        public boolean setStringSettingsValue​(Address dataAddr,
                                              java.lang.String name,
                                              java.lang.String value)
        Set the string value for instance settings.
        Parameters:
        dataAddr - min address of data
        name - settings name
        value - value of setting
        Returns:
        true if the settings actually changed
      • setByteSettingsValue

        public boolean setByteSettingsValue​(Address dataAddr,
                                            java.lang.String name,
                                            byte[] byteValue)
        Set the byte array value for instance settings.
        Parameters:
        dataAddr - min address of data ata
        name - settings name
        byteValue - byte array value of setting
        Returns:
        true if the settings actually changed
      • setSettings

        public boolean setSettings​(Address dataAddr,
                                   java.lang.String name,
                                   java.lang.Object value)
        Set the Object settings.
        Parameters:
        dataAddr - min address of data
        name - the name of the settings
        value - the value for the settings, must be either a String, byte[] or Long
      • getLongSettingsValue

        public java.lang.Long getLongSettingsValue​(Address dataAddr,
                                                   java.lang.String name)
        Get the long value for an instance setting.
        Parameters:
        dataAddr - min address of data
        name - settings name
        Returns:
        null if the named setting was not found
      • getStringSettingsValue

        public java.lang.String getStringSettingsValue​(Address dataAddr,
                                                       java.lang.String name)
        Get the String value for an instance setting.
        Parameters:
        dataAddr - min address of data
        name - settings name
        Returns:
        null if the named setting was not found
      • getByteSettingsValue

        public byte[] getByteSettingsValue​(Address dataAddr,
                                           java.lang.String name)
        Get the byte array value for an instance setting.
        Parameters:
        dataAddr - min address of data
        name - settings name
        Returns:
        null if the named setting was not found
      • getSettings

        public java.lang.Object getSettings​(Address dataAddr,
                                            java.lang.String name)
        Gets the value of a settings as an object (either String, byte[], or Long).
        Parameters:
        dataAddr - the address of the data for this settings
        name - the name of settings.
      • clearSetting

        public boolean clearSetting​(Address dataAddr,
                                    java.lang.String name)
        Clear the setting.
        Parameters:
        dataAddr - min address of data
        name - settings name
      • clearAllSettings

        public void clearAllSettings​(Address dataAddr)
        Clear all settings at the given address.
        Parameters:
        dataAddr - the address for this settings.
      • clearSettings

        public void clearSettings​(Address start,
                                  Address end,
                                  TaskMonitor monitor)
                           throws CancelledException
        Clears all settings in the given address range.
        Parameters:
        start - the first address of the range to clear
        end - the last address of the range to clear.
        monitor - the progress monitor for this operation.
        Throws:
        CancelledException - if the user cancels the operation.
      • moveAddressRange

        public void moveAddressRange​(Address fromAddr,
                                     Address toAddr,
                                     long length,
                                     TaskMonitor monitor)
                              throws CancelledException
        Move the settings in the range to the new start address.
        Parameters:
        fromAddr - start address from where to move
        toAddr - new Address to move to
        length - number of addresses to move.
        monitor - progress monitor
        Throws:
        CancelledException
      • isUpdatable

        public boolean isUpdatable()
        Description copied from interface: DataTypeManager
        Returns true if this DataTypeManager can be modified.
        Specified by:
        isUpdatable in interface DataTypeManager
        Returns:
        true if this DataTypeMangaer can be modified.
      • getNames

        public java.lang.String[] getNames​(Address dataAddr)
        Returns all the Settings names for the given address.
        Parameters:
        dataAddr - the address
      • isEmptySetting

        public boolean isEmptySetting​(Address dataAddr)
        Returns true if no settings are set for the given address.
        Parameters:
        dataAddr - the address to test.
      • getDataTypesContaining

        public java.util.Set<DataType> getDataTypesContaining​(DataType dataType)
        Description copied from interface: DataTypeManager
        Returns the data types within this data type manager that contain the specified data type.
        Specified by:
        getDataTypesContaining in interface DataTypeManager
        Parameters:
        dataType - the data type
        Returns:
        a set of data types that contain the specified data type.
      • getPointer

        public Pointer getPointer​(DataType dt)
        Description copied from interface: DataTypeManager
        Returns a default sized pointer to the given datatype. The pointer size is established dynamically based upon the data organization established by the compiler specification.
        Specified by:
        getPointer in interface DataTypeManager
        Parameters:
        dt - the pointed to data type
        Returns:
        the pointer
      • getPointer

        public Pointer getPointer​(DataType dt,
                                  int size)
        Description copied from interface: DataTypeManager
        Returns a pointer of the given size to the given datatype. Note: It is preferred to use default sized pointers when possible (i.e., size=-1, see DataTypeManager.getPointer(DataType)) instead of explicitly specifying the size value.
        Specified by:
        getPointer in interface DataTypeManager
        Parameters:
        dt - the pointed to data type
        size - the size of the pointer to be created or -1 for a default sized pointer
        Returns:
        the pointer
      • deleteAddressRange

        public void deleteAddressRange​(Address startAddr,
                                       Address endAddr,
                                       TaskMonitor monitor)
                                throws CancelledException
        Removes all settings in the range
        Parameters:
        startAddr - the first address in the range.
        endAddr - the last address in the range.
        monitor - the progress monitor
        Throws:
        CancelledException - if the user cancelled the operation.
      • isCreatingDataType

        protected boolean isCreatingDataType()
        Returns:
        true if manager is in the process of adding/creating a new type
      • dataTypeAdded

        protected void dataTypeAdded​(DataType newDt,
                                     DataType originalDataType)
      • dataTypeReplaced

        protected void dataTypeReplaced​(long existingDtID,
                                        DataTypePath replacedDataTypePath,
                                        DataType replacementDt)
      • dataTypeDeleted

        protected void dataTypeDeleted​(long deletedID,
                                       DataTypePath deletedDataTypePath)
      • dataTypeNameChanged

        protected void dataTypeNameChanged​(DataType dt,
                                           java.lang.String oldName)
      • categoryCreated

        protected void categoryCreated​(Category cat)
      • categoryRemoved

        protected void categoryRemoved​(Category parent,
                                       java.lang.String name,
                                       long categoryID)
      • favoritesChanged

        protected void favoritesChanged​(DataType dataType,
                                        boolean isFavorite)
      • sourceArchiveChanged

        public void sourceArchiveChanged​(UniversalID sourceArchiveID)
      • sourceArchiveAdded

        protected void sourceArchiveAdded​(UniversalID sourceArchiveID)
      • findDataTypeForID

        public DataType findDataTypeForID​(UniversalID datatypeID)
        Description copied from interface: DataTypeManager
        Get's the data type with the matching universal data type id.
        Specified by:
        findDataTypeForID in interface DataTypeManager
        Parameters:
        datatypeID - The universal id of the data type to search for
        Returns:
        The data type with the matching UUID, or null if no such data type can be found.
      • getDataOrganization

        public DataOrganization getDataOrganization()
        Description copied from interface: DataTypeManager
        Get the data organization associated with this data type manager. Note that the DataOrganization settings may not be changed dynamically.
        Specified by:
        getDataOrganization in interface DataTypeManager
        Returns:
        data organization (will never be null)