org.openide.loaders
Class DataLoader

java.lang.Object
  |
  +--org.openide.util.SharedClassObject
        |
        +--org.openide.loaders.DataLoader
All Implemented Interfaces:
Externalizable, Serializable
Direct Known Subclasses:
MultiFileLoader

public abstract class DataLoader
extends SharedClassObject

A data loader recognizes FileObjects and creates appropriate DataObjects to represent them. The created data object must be a subclass of the representation class provided in the constructor.

Subclasses of DataLoader should be made JavaBeans with additional parameters, so a user may configure the loaders in the loader pool.

See Also:
Serialized Form

Inner Class Summary
static interface DataLoader.RecognizedFiles
          Buffer holding a list of primary and secondary files marked as already recognized, to prevent further scanning.
 
Field Summary
static String PROP_ACTIONS
          property name of list of actions
static String PROP_DISPLAY_NAME
          property name of display name
 
Constructor Summary
protected DataLoader(Class representationClass)
          Create a new data loader.
protected DataLoader(String representationClassName)
          Create a new data loader.
 
Method Summary
protected  boolean clearSharedData()
          Indicate whether the shared data of the last existing instance of this class should be cleared when that instance is finalized.
protected  SystemAction[] defaultActions()
          Get default actions.
protected  String defaultDisplayName()
          Get the default display name of this loader.
 DataObject findDataObject(FileObject fo, DataLoader.RecognizedFiles recognized)
          Find a data object appropriate to the given file object--the meat of this class.
 SystemAction[] getActions()
          Get actions.
 String getDisplayName()
          Get the current display name of this loader.
static DataLoader getLoader(Class loaderClass)
          Get a registered loader from the pool.
 Class getRepresentationClass()
           
protected abstract  DataObject handleFindDataObject(FileObject fo, DataLoader.RecognizedFiles recognized)
          Find a data object appropriate to the given file object (as implemented in subclasses).
 void markFile(FileObject fo)
          Utility method to mark a file as belonging to this loader.
 void readExternal(ObjectInput oi)
          Reads actions and display name from the stream.
 void setActions(SystemAction[] actions)
          Set actions.
protected  void setDisplayName(String displayName)
          Set the display name for this loader.
 void writeExternal(ObjectOutput oo)
          Writes nothing to the stream.
 
Methods inherited from class org.openide.util.SharedClassObject
addNotify, addPropertyChangeListener, equals, finalize, findObject, findObject, firePropertyChange, getLock, getProperty, hashCode, initialize, putProperty, putProperty, removeNotify, removePropertyChangeListener, writeReplace
 
Methods inherited from class java.lang.Object
clone, getClass, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

PROP_DISPLAY_NAME

public static final String PROP_DISPLAY_NAME
property name of display name

PROP_ACTIONS

public static final String PROP_ACTIONS
property name of list of actions
Constructor Detail

DataLoader

protected DataLoader(Class representationClass)
Create a new data loader. Pass its representation class as a parameter to the constructor. It is recommended that representation class is superclass of all DataObjects produced by the loaded, but it is not required any more.
Parameters:
representationClass - the superclass (not necessarily) of all objects returned from findDataObject(org.openide.filesystems.FileObject, org.openide.loaders.DataLoader.RecognizedFiles). The class may be anything but should be chosen to be as close as possible to the actual class of objects returned from the loader, to best identify the loader's data objects to listeners.

DataLoader

protected DataLoader(String representationClassName)
Create a new data loader. Pass its representation class name as a parameter to the constructor. The constructor is then allowed to return only subclasses of the representation class as the result of findDataObject(org.openide.filesystems.FileObject, org.openide.loaders.DataLoader.RecognizedFiles).
Parameters:
representationClassName - the name of the superclass for all objects returned from findDataObject(org.openide.filesystems.FileObject, org.openide.loaders.DataLoader.RecognizedFiles). The class may be anything but should be chosen to be as close as possible to the actual class of objects returned from the loader, to best identify the loader's data objects to listeners.
Since:
1.10
Method Detail

getRepresentationClass

public final Class getRepresentationClass()

getActions

public final SystemAction[] getActions()
Get actions. These actions are used to compose a popup menu for the data object. Also these actions should be customizable by the user, so he can modify the popup menu on a data object.
Returns:
array of system actions or null if this loader does not have any actions

defaultActions

protected SystemAction[] defaultActions()
Get default actions.
Returns:
array of default system actions or null if this loader does not have any actions. Typical example of usage:
 return new SystemAction[] {
                    SystemAction.get (OpenAction.class), ...
                    SystemAction.get (PropertiesAction.class)
                };
 

setActions

public final void setActions(SystemAction[] actions)
Set actions.

Note that this method is public, not protected, so it is possible for anyone to modify the loader's popup actions externally (after finding the loader using DataLoaderPool.firstProducerOf(java.lang.Class)). While this is possible, anyone doing so must take care to place new actions into sensible positions, including consideration of separators. This may also adversely affect the intended feel of the data objects. A preferable solution is generally to use service actions.

Parameters:
actions - actions for this loader or null if it should not have any
See Also:
getActions()

getDisplayName

public final String getDisplayName()
Get the current display name of this loader.
Returns:
display name

setDisplayName

protected final void setDisplayName(String displayName)
Set the display name for this loader. Only subclasses should set the name.
Parameters:
displayName - new name

defaultDisplayName

protected String defaultDisplayName()
Get the default display name of this loader.
Returns:
default display name

findDataObject

public final DataObject findDataObject(FileObject fo,
                                       DataLoader.RecognizedFiles recognized)
                                throws IOException
Find a data object appropriate to the given file object--the meat of this class.

For example: for files with the same basename but extensions .java and .class, the handler should return the same DataObject.

The loader can add all files it has recognized into the recognized buffer. Then all these files will be excluded from further processing.

Parameters:
fo - file object to recognize
recognized - recognized file buffer
Returns:
suitable data object or null if the handler cannot recognize this object (or its group)
Throws:
DataObjectExistsException - if the data object for the primary file already exists
IOException - if the object is recognized but cannot be created
InvalidClassException - if the class is not instance of getRepresentationClass()
See Also:
handleFindDataObject(org.openide.filesystems.FileObject, org.openide.loaders.DataLoader.RecognizedFiles)

handleFindDataObject

protected abstract DataObject handleFindDataObject(FileObject fo,
                                                   DataLoader.RecognizedFiles recognized)
                                            throws IOException
Find a data object appropriate to the given file object (as implemented in subclasses).
Parameters:
fo - file object to recognize
recognized - recognized file buffer
Returns:
the data object or null
Throws:
DataObjectExistsException - as in #findDataObject
IOException - as in #findDataObject
See Also:
findDataObject(org.openide.filesystems.FileObject, org.openide.loaders.DataLoader.RecognizedFiles)

markFile

public final void markFile(FileObject fo)
                    throws IOException
Utility method to mark a file as belonging to this loader. When the file is to be recognized this loader will be used first.

This method is used by DataObject.markFiles().

Parameters:
fo - file to mark
Throws:
IOException - if setting the file's attribute failed

writeExternal

public void writeExternal(ObjectOutput oo)
                   throws IOException
Writes nothing to the stream.
Overrides:
writeExternal in class SharedClassObject
Parameters:
oo - ignored

readExternal

public void readExternal(ObjectInput oi)
                  throws IOException,
                         ClassNotFoundException
Reads actions and display name from the stream.
Overrides:
readExternal in class SharedClassObject
Parameters:
oi - input source to read from
Throws:
SafeException - if some of the actions is not found in the stream, but all the content has been read ok. Subclasses can catch this exception and continue reading from the stream

clearSharedData

protected boolean clearSharedData()
Description copied from class: SharedClassObject
Indicate whether the shared data of the last existing instance of this class should be cleared when that instance is finalized. Subclasses may perform additional tasks on finalization if desired. This method should be overridden in lieu of SharedClassObject.finalize().

The default implementation returns true. Classes which have precious shared data may want to return false, so that all instances may be finalized, after which new instances will pick up the same shared variables without requiring a recalculation.

Overrides:
clearSharedData in class SharedClassObject
Following copied from class: org.openide.util.SharedClassObject
Returns:
true if all shared data should be cleared, false if it should stay in memory

getLoader

public static DataLoader getLoader(Class loaderClass)
Get a registered loader from the pool.
Parameters:
loaderClass - exact class of the loader (not its data object representation class)
Returns:
the loader instance, or null if there is no such loader registered
See Also:
DataLoaderPool.allLoaders()


Built on December 12 2001.  |  Portions Copyright 1997-2001 Sun Microsystems, Inc. All rights reserved.