How can I be notified when a file is modified and saved??
The DataObject.Registry in LoadersAPI gives you a set of modified DataObjects. You can also add a listener and be notified when the set of modified objects changes.
If you have a FileObject and want to listen for save events, you will need to get its DataObject by calling DataObject.find()
.
To listen on a single DataObject for save events, simply add a PropertyChangeListener
and listen for changes in DataObject.PROP_MODIFIED
.
Note that listening for something to be saved is not the same as listening for any changes in the file - you are really listening only for (directly or indirectly) user-initiated save events, as in the user pressing CTRL-S when the file is modified and opened in the editor. For notifications about any changes in a file, instead attach a FileChangeListener
to the underlying FileObject
.
Track the currently modified files by DataObject Registry listening - Sample code
DataObject.Registry registries = DataObject.getRegistry();
registries.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
System.out.println("ChangedListener: o = " + e.getSource().getClass());
System.out.println("ChangedListener: o.source = " + e.getSource());
}
});
DataObject[] objects = registries.getModified();
for (int i = 0; i < objects.length; i++) {
DataObject dataObj = objects[I];
System.out.println("data object name = " + dataObj.getName());
System.out.println("data object pimary file name = " + dataObj.getPrimaryFile().getName());
Set fss = dataObj.files();
Iterator iter = fss.iterator();
while (iter.hasNext()) {
FileObject fo = (FileObject) iter.next();
System.out.println("\tset file object: " + fo.getName());
}
}