|
org.openide.filesystems 7.1 | |||||||||
PREV NEXT | FRAMES NO FRAMES |
See:
Description
File System API | |
---|---|
org.openide.filesystems | NetBeans internally uses the concept of a virtual filesystem. |
NetBeans internally uses the concept of a virtual filesystem. This module provide APIs for accessing such virtual files as well as some support classes to make writing of custom vitual filesystems easier.
Repository.getDefaultFileSystem's content can now be influenced by adding own FileSystems into global Lookup.getDefault(). This is supposed to work in a standalone mode as well as inside NetBeans Platform. The tutorial is available in the usecases section of achitecture description.
FileUtil.createData
and FileUtil.createFolder
that take java.io.File
as a parameter.
Added two utility methods for creation of folders and data files
that take java.io.File
as a parameter:
public static FileObject createFolder (final File folder) throws IOException
and
public static FileObject createData (final File folder) throws IOException
XMLFileSystem's
methodvalue now supports also Map
attribute, so one can write factory methods that are completely
independent on filesystems by creating methods like
static Object methodName(Map attrs)
or
static Object methodName(Map attrs, String s)
.
FileObject.getOutputStream
that doesn't take FileLock
as a parameter.
Although newly added method FileObject.getOutputStream
doesn't take FileLock
as a parameter, the implementation
is responsible for taking a lock before OutputStream
is
returned and thus FileAlreadyLockedException
exception is thrown
when FileObject
is already locked.
IllegalArgumentException
is thrown from
FileUtil.toFileObject
was changed
Because of performance reason piece of code
checking whether file was properly normalized is called conditionally just
in case that assertions are enabled. Then
IllegalArgumentException
can't be thrown if
assertions are disabled.
Many of the usecases are described at the overall documentation, in a way how to register a mime type. Some of the additional usecases are covered here.
Since version 7.1 there is a way to change the content of system file system in a dynamic way. As system file systems contains various definitions (in NetBeans Platform menus, toolbars, layout of windows, etc.) it de-facto allows global change to these settings for example when user logs into some system.
First thing to do is to create an implementation of filesystem. It can be created either from scratch, or by subclassing AbstractFileSystem, or MultiFileSystem. In this example we will subclass the MultiFileSystem:
public class LoginFileSystem extends MultiFileSystem { private static LoginFileSystem INSTANCE; public LoginFileSystem() { // let's create the filesystem empty, because the user // is not yet logged in INSTANCE = this; } public static void assignURL(URL u) throws SAXException { INSTANCE.setDelegates(new XMLFileSystem(u)); } }
It is necessary to register this instance in lookup by creating the file:
META-INF/services/org.openide.filesystems.FileSystem
with a single line containing the full
name of your filesystem - e.g. your.module.LoginFileSystem
.
When done, the system will find out your registration of the filesystem
on startup and will merge the content of the filesystem into the
default system file system. You can show a dialog letting the user
to log in to some system anytime later, and when the user is successfully
in, just call LoginFileSystem.assignURL(url)
where the
URL is an XML file in the same format
as used for regular layer files inside of many NetBeans modules.
The system will notice the change in the content and notify all the
config file listeners accordingly.
Of course, instead of XMLFileSystem you can use for example memory file system, or any other you write yourself.
|
|
|
The sources for the module are in NetBeans CVS in openide/fs directory.
XXX no answer for deploy-dependencies
Read more about the implementation in the answers to architecture questions.
|
org.openide.filesystems 7.1 | |||||||||
PREV NEXT | FRAMES NO FRAMES |