Class InstanceDataObject

All Implemented Interfaces:
Serializable, org.openide.cookies.InstanceCookie, org.openide.cookies.InstanceCookie.Of, org.openide.nodes.Node.Cookie, org.openide.util.HelpCtx.Provider, org.openide.util.Lookup.Provider

public class InstanceDataObject extends MultiDataObject implements org.openide.cookies.InstanceCookie.Of
A data object whose only purpose is to supply InstanceCookie. The instances are created by default instantiation; the name of the class to instantiate is stored on disk, typically right in the file name.

This data object is generally used to configure menus and toolbars, though it could be used in any situation requiring instances to be present in a folder; for example, anything using FolderInstance.

Typical instance classes are subclasses of SystemAction to make menu items or toolbar buttons; JSeparator for a menu separator; or JToolBar.Separator for a toolbar separator.

Use create(org.openide.loaders.DataFolder, java.lang.String, java.lang.String) and remove(org.openide.loaders.DataFolder, java.lang.String, java.lang.String) to make the objects. Better yet, use an XML filesystem to install them declaratively.

Instance data object by default recognizes all files with .instance suffix. Such file can have associated optional file attributes:

instanceCreate
instantionalized Object (e.g. created by methodvalue at XML filesystem)
instanceOf
String that is tokenized at ':', ',', ';' and whitespace boundaries. Resulting tokens represent class names that created instance is instanceof. Utilizing it may improve performance.
(optional file attributes documented since 3.34).
See Also:
  • Field Details

  • Constructor Details

  • Method Details

    • find

      public static InstanceDataObject find(DataFolder folder, String name, String className)
      Finds instance of specified name in a given folder.
      Parameters:
      folder - the folder to create the instance data object in
      name - the name to give to the object (can be null if no special name besides the class name is needed)
      className - the name of the class the new object should provide an instance of
      Returns:
      the found instance data object or null if it does not exist
    • find

      public static InstanceDataObject find(DataFolder folder, String name, Class<?> clazz)
      Finds instance of specified name in a given folder.
      Parameters:
      folder - the folder to create the instance data object in
      name - the name to give to the object (can be null if no special name besides the class name is needed)
      clazz - the class to create instance for (see class header for details)
      Returns:
      the found instance data object or null if it does not exist
    • create

      public static InstanceDataObject create(DataFolder folder, String name, String className) throws IOException
      Create a new InstanceDataObject in a given folder. If object with specified name already exists, it is returned. You should specify the name if there is a chance another file of the same instance class already exists in the folder; or just to provide a more descriptive name, which will appear in the Explorer for example.

      Note: use of XML layers to install instances is generally preferred.

      Parameters:
      folder - the folder to create the instance data object in
      name - the name to give to the object (can be null if no special name besides the class name is needed) but name cannot be empty
      className - the name of the class the new object should provide an instance of (see class header for details)
      Returns:
      the newly created or existing instance data object
      Throws:
      IOException - if the file cannot be created
    • create

      public static InstanceDataObject create(DataFolder folder, String name, Class<?> clazz) throws IOException
      Create a new InstanceDataObject in a given folder. If object with specified name already exists, it is returned. You should specify the name if there is a chance another file of the same instance class already exists in the folder; or just to provide a more descriptive name, which will appear in the Explorer for example.

      Note: use of XML layers to install instances is generally preferred.

      Parameters:
      folder - the folder to create the instance data object in
      name - the name to give to the object (can be null if no special name besides the class name is needed)
      clazz - the class to create instance for (see class header for details)
      Returns:
      the newly created or existing instance data object
      Throws:
      IOException - if the file cannot be created
    • create

      public static InstanceDataObject create(DataFolder folder, String name, Object instance, org.openide.modules.ModuleInfo info) throws IOException
      Create a new InstanceDataObject containing settings in a given folder. If object with specified name already exists, it is returned. If the module info is null then the origin module info of an instance class is tried to find out.

      Note: use of XML layers to install instances is generally preferred.

      Parameters:
      folder - the folder to create the instance data object in
      name - the name to give to the object (can be null if no special name besides the class name is needed) but name cannot be empty
      instance - the serializable instance
      info - the module info describing the settings provenance (can be null)
      Returns:
      the newly created or existing instance data object
      Throws:
      IOException - if the file cannot be created
      Since:
      1.28
    • create

      public static InstanceDataObject create(DataFolder folder, String name, Object instance, org.openide.modules.ModuleInfo info, boolean create) throws IOException
      Create a new InstanceDataObject containing settings in a given folder. If the module info is null then the origin module info of an instance class is tried to find out.

      Note: use of XML layers to install instances is generally preferred.

      Parameters:
      folder - the folder to create the instance data object in
      name - the name to give to the object (can be null if no special name besides the class name is needed) but name cannot be empty
      instance - the serializable instance
      info - the module info describing the settings provenance (can be null)
      create - true - always create new file; false - store to existing file if exist
      Returns:
      the newly created or existing instance data object
      Throws:
      IOException - if the file cannot be created
      Since:
      2.9
    • remove

      public static boolean remove(DataFolder folder, String name, String className)
      Remove an existing instance data object. If you have the exact file name, just call DataObject.delete(); this method lets you delete an instance you do not have an exact record of the file name for, based on the same information used to create it.

      Note: use of XML layers to install instances is generally preferred.

      Parameters:
      folder - the folder to remove the file from
      name - the name of the instance (can be null)
      className - the name of class the object referred to (see class header for details)
      Returns:
      true if the instance was succesfully removed, false if not
    • remove

      public static boolean remove(DataFolder folder, String name, Class<?> clazz)
      Remove an existing instance data object. If you have the exact file name, just call DataObject.delete(); this method lets you delete an instance you do not have an exact record of the file name for, based on the same information used to create it.

      Note: use of XML layers to install instances is generally preferred.

      Parameters:
      folder - the folder to remove the file from
      name - the name of the instance (can be null)
      clazz - the class the object referred to (see class header for details)
      Returns:
      true if the instance was succesfully removed, false if not
    • getHelpCtx

      public org.openide.util.HelpCtx getHelpCtx()
      Description copied from class: DataObject
      Get help context for this object.
      Specified by:
      getHelpCtx in interface org.openide.util.HelpCtx.Provider
      Overrides:
      getHelpCtx in class MultiDataObject
      Returns:
      the help context
    • createNodeDelegate

      protected org.openide.nodes.Node createNodeDelegate()
      Description copied from class: MultiDataObject
      Provides node that should represent this data object.
      Overrides:
      createNodeDelegate in class MultiDataObject
      Returns:
      the node representation
      See Also:
    • getCookie

      public <T extends org.openide.nodes.Node.Cookie> T getCookie(Class<T> clazz)
      Description copied from class: MultiDataObject
      Look for a cookie in the current cookie set matching the requested class.
      Overrides:
      getCookie in class MultiDataObject
      Parameters:
      clazz - the class to look for
      Returns:
      an instance of that class, or null if this class of cookie is not supported
    • getLookup

      public org.openide.util.Lookup getLookup()
      Description copied from class: DataObject
      Represents a context of the data object. This method is a more general replacement for DataObject.getCookie(java.lang.Class<T>) and should preferably be used instead of the old method. The default implementation inside a data object returns the getNodeDelegate().getLookup() - which is the most compatible behaviour with previous versions. However this code has significant potential to deadlocks. That is why the preferred advice is to override the method to:
       class MyDataObject extends MultiDataObject {
         public @Override Lookup getLookup() {
           return getCookieSet().getLookup();
         }
       }
       

      Warning: the DataObject.getCookie(java.lang.Class<T>) method and DataObject.getLookup() method are ment to be interchangable - e.g. if you override one of them be sure to override also the other and try as much as possible to keep the same content in each of them. The default implementation tries to do that as much as possible.

      Specified by:
      getLookup in interface org.openide.util.Lookup.Provider
      Overrides:
      getLookup in class MultiDataObject
      Returns:
      lookup representing this data object and its content
    • instanceName

      public String instanceName()
      Specified by:
      instanceName in interface org.openide.cookies.InstanceCookie
    • instanceClass

      public Class<?> instanceClass() throws IOException, ClassNotFoundException
      Specified by:
      instanceClass in interface org.openide.cookies.InstanceCookie
      Throws:
      IOException
      ClassNotFoundException
    • instanceOf

      public boolean instanceOf(Class<?> type)
      Query if this instance can create object of given type.
      Specified by:
      instanceOf in interface org.openide.cookies.InstanceCookie.Of
      Parameters:
      type - the type to create
      Returns:
      true or false
    • instanceCreate

      public Object instanceCreate() throws IOException, ClassNotFoundException
      Specified by:
      instanceCreate in interface org.openide.cookies.InstanceCookie
      Throws:
      IOException
      ClassNotFoundException
    • getName

      public String getName()
      Description copied from class: DataObject
      Get the name of the data object.

      The default implementation uses the name of the primary file.

      Overrides:
      getName in class DataObject
      Returns:
      the name
    • handleRename

      protected org.openide.filesystems.FileObject handleRename(String name) throws IOException
      Description copied from class: DataObject
      Rename this object (implemented in subclasses).
      Overrides:
      handleRename in class MultiDataObject
      Parameters:
      name - name to rename the object to
      Returns:
      new primary file of the object
      Throws:
      IOException - if an error occures
    • handleCreateFromTemplate

      protected DataObject handleCreateFromTemplate(DataFolder df, String name) throws IOException
      Description copied from class: DataObject
      Create a new data object from template (implemented in subclasses). This method should copy the content of the template to the destination folder and assign a new name to the new object.
      Overrides:
      handleCreateFromTemplate in class MultiDataObject
      Parameters:
      df - data folder to create object in
      name - name to give to the new object (or null if the name should be chosen according to the template)
      Returns:
      the new data object
      Throws:
      IOException - if an error occured
    • handleCopy

      protected DataObject handleCopy(DataFolder df) throws IOException
      Copy a service sanely. For settings and serializable beans, special methods are used to write out the resulting files, and the name to use is taken from the *display name* of the current file, as this is what the user is accustomed to seeing (for ServiceType's especially).
      Overrides:
      handleCopy in class MultiDataObject
      Parameters:
      df - the new folder
      Returns:
      data object for the new primary
      Throws:
      IOException - if there was a problem copying
      See Also:
    • dispose

      protected void dispose()
      Description copied from class: DataObject
      Allows subclasses to discard the object. When an object is discarded, it is released from the list of objects registered in the system. Then the contents of the parent folder (if it still exists) are rescanned, which may result in the creation of a new data object for the primary file.

      The normal use of this method is to change the type of a data object. Because this would usually only be invoked from the original data object, it is protected.

      Overrides:
      dispose in class DataObject
    • handleDelete

      protected void handleDelete() throws IOException
      Description copied from class: DataObject
      Delete this object (implemented by subclasses).
      Overrides:
      handleDelete in class MultiDataObject
      Throws:
      IOException - if an error occures