public abstract class DataLoader extends SharedClassObject implements DataObject.Factory
FileObject
s and creates appropriate
DataObject
s 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.
Modifier and Type | Class and Description |
---|---|
static interface |
DataLoader.RecognizedFiles
Buffer holding a list of primary and secondary files marked as already recognized, to prevent further scanning.
|
Modifier and Type | Field and Description |
---|---|
static String |
PROP_ACTIONS
property name of list of actions
|
static String |
PROP_DISPLAY_NAME
property name of display name
|
Modifier | Constructor and Description |
---|---|
protected |
DataLoader(Class<? extends DataObject> representationClass)
Deprecated.
Use
DataLoader.DataLoader(String) instead. |
protected |
DataLoader(String representationClassName)
Create a new data loader.
|
Modifier and Type | Method and Description |
---|---|
protected String |
actionsContext()
Identifies the name of context in layer files where the
loader wishes to store its own actions and also read them.
|
protected boolean |
clearSharedData() |
protected SystemAction[] |
defaultActions()
Deprecated.
Instead of overriding this method it is preferable to override
DataLoader.actionsContext() . |
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.
|
DataObject |
findDataObject(FileObject fo,
Set<? super FileObject> 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 <T extends DataLoader> |
getLoader(Class<T> loaderClass)
Get a registered loader from the pool.
|
Class<? extends DataObject> |
getRepresentationClass()
Get the representation class for this data loader, as passed to the constructor.
|
String |
getRepresentationClassName()
Get the name of the representation class for this data loader.
|
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.
|
addNotify, addPropertyChangeListener, equals, finalize, findObject, findObject, firePropertyChange, getLock, getProperty, hashCode, initialize, putProperty, putProperty, removeNotify, removePropertyChangeListener, reset, writeReplace
public static final String PROP_DISPLAY_NAME
public static final String PROP_ACTIONS
@Deprecated protected DataLoader(Class<? extends DataObject> representationClass)
DataLoader.DataLoader(String)
instead.representationClass
- the superclass (not necessarily) of all objects
returned from DataLoader.findDataObject(org.openide.filesystems.FileObject, java.util.Set<? super org.openide.filesystems.FileObject>)
. 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.protected DataLoader(String representationClassName)
DataLoader.findDataObject(org.openide.filesystems.FileObject, java.util.Set<? super org.openide.filesystems.FileObject>)
.representationClassName
- the name of the superclass for all objects
returned from
DataLoader.findDataObject(org.openide.filesystems.FileObject, java.util.Set<? super org.openide.filesystems.FileObject>)
. 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.public final Class<? extends DataObject> getRepresentationClass()
public final String getRepresentationClassName()
DataLoader.getRepresentationClass()
public final SystemAction[] getActions()
null
if this loader does not have any
actionsprotected String actionsContext()
Action
instance can be registered
in the context and it will be visible in the default DataNode
for data object created by this loader. Only SystemAction can however
be manipulated from DataLoader getActions/setActions methods.
The default implementation returns null to indicate that no
layer reading should be used (use DataLoader.defaultActions()
instead).
JSeparator
instances may be used to separate items.
Suggested context name: Loaders/PRIMARY-FILE/MIME-TYPE/Actions
@Deprecated protected SystemAction[] defaultActions()
DataLoader.actionsContext()
.public final void setActions(SystemAction[] 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<? extends org.openide.loaders.DataObject>)
).
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
.
actions
- actions for this loader or null
if it should not have anyDataLoader.getActions()
public final String getDisplayName()
protected final void setDisplayName(String displayName)
displayName
- new nameprotected String defaultDisplayName()
public final DataObject findDataObject(FileObject fo, Set<? super FileObject> recognized) throws IOException
findDataObject
in interface DataObject.Factory
fo
- file objectrecognized
- set of already processed filesIOException
DataObjectExistsException
- if the data object for the
primary file already existsInvalidClassException
- if the class is not instance of
DataLoader.getRepresentationClass()
DataLoader
public final DataObject findDataObject(FileObject fo, DataLoader.RecognizedFiles recognized) throws IOException
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.
fo
- file object to recognizerecognized
- recognized file buffernull
if the handler cannot
recognize this object (or its group)DataObjectExistsException
- if the data object for the
primary file already existsIOException
- if the object is recognized but cannot be createdInvalidClassException
- if the class is not instance of
DataLoader.getRepresentationClass()
DataLoader.handleFindDataObject(org.openide.filesystems.FileObject, org.openide.loaders.DataLoader.RecognizedFiles)
protected abstract DataObject handleFindDataObject(FileObject fo, DataLoader.RecognizedFiles recognized) throws IOException
fo
- file object to recognizerecognized
- recognized file buffernull
DataObjectExistsException
- as in #findDataObject
IOException
- as in #findDataObject
DataLoader.findDataObject(org.openide.filesystems.FileObject, java.util.Set<? super org.openide.filesystems.FileObject>)
public final void markFile(FileObject fo) throws IOException
This method is used by DataObject.markFiles()
.
fo
- file to markIOException
- if setting the file's attribute failedpublic void writeExternal(ObjectOutput oo) throws IOException
writeExternal
in interface Externalizable
writeExternal
in class SharedClassObject
oo
- ignoredIOException
public void readExternal(ObjectInput oi) throws IOException, ClassNotFoundException
readExternal
in interface Externalizable
readExternal
in class SharedClassObject
oi
- input source to read fromSafeException
- 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 streamIOException
ClassNotFoundException
protected boolean clearSharedData()
clearSharedData
in class SharedClassObject
public static <T extends DataLoader> T getLoader(Class<T> loaderClass)
loaderClass
- exact class of the loader (not its data object representation class)null
if there is no such loader registeredDataLoaderPool.allLoaders()