# This patch file was generated by NetBeans IDE # Following Index: paths are relative to: /space/work/all3/openide/masterfs # This patch can be applied using context Tools: Patch action on respective folder. # It uses platform neutral UTF-8 encoding and \n newlines. # Above lines and this line are ignored by the patching process. Index: apichanges.xml *** /space/work/all3/openide/masterfs/apichanges.xml Base (1.5) --- /space/work/all3/openide/masterfs/apichanges.xml Locally Modified (Based On 1.5) *************** *** 23,28 **** --- 23,45 ---- MasterFileSystem API + + + ProvidedExtensions.beforeChange was added. + + + + + +

+ ProvidedExtensions.beforeChangewhich is called by + MasterFileSystem when FileObject + is going to be modified by asking for OutputStream. +

+
+ + +
ProvidedExtensions.getDeleteHandler was added. Index: src/org/netbeans/modules/masterfs/filebasedfs/fileobjects/FileObj.java *** /space/work/all3/openide/masterfs/src/org/netbeans/modules/masterfs/filebasedfs/fileobjects/FileObj.java Base (1.22) --- /space/work/all3/openide/masterfs/src/org/netbeans/modules/masterfs/filebasedfs/fileobjects/FileObj.java Locally Modified (Based On 1.22) *************** *** 42,48 **** /** * @author rm111737 */ ! class FileObj extends BaseFileObj { static final long serialVersionUID = -1133540210876356809L; private long lastModified = -1; private boolean realLastModifiedCached; --- 42,48 ---- /** * @author rm111737 */ ! public class FileObj extends BaseFileObj { static final long serialVersionUID = -1133540210876356809L; private long lastModified = -1; private boolean realLastModifiedCached; *************** *** 54,62 **** --- 54,70 ---- } public OutputStream getOutputStream(final FileLock lock) throws IOException { + return getOutputStream(lock, null); + } + + public OutputStream getOutputStream(final FileLock lock, ProvidedExtensions extensions) throws IOException { final File f = getFileName().getFile(); + if (extensions != null) { + extensions.beforeChange(this); + } final MutualExclusionSupport.Closeable closable = MutualExclusionSupport.getDefault().addResource(this, false); + FileOutputStream retVal = null; try { retVal = new FileOutputStream(f) { Index: manifest.mf *** /space/work/all3/openide/masterfs/manifest.mf Base (1.15) --- /space/work/all3/openide/masterfs/manifest.mf Locally Modified (Based On 1.15) *************** *** 1,5 **** Manifest-Version: 1.0 OpenIDE-Module: org.netbeans.modules.masterfs/1 OpenIDE-Module-Localizing-Bundle: org/netbeans/modules/masterfs/resources/Bundle.properties ! OpenIDE-Module-Specification-Version: 1.9 --- 1,5 ---- Manifest-Version: 1.0 OpenIDE-Module: org.netbeans.modules.masterfs/1 OpenIDE-Module-Localizing-Bundle: org/netbeans/modules/masterfs/resources/Bundle.properties ! OpenIDE-Module-Specification-Version: 1.10 Index: src/org/netbeans/modules/masterfs/MasterFileObject.java *** /space/work/all3/openide/masterfs/src/org/netbeans/modules/masterfs/MasterFileObject.java Base (1.60) --- /space/work/all3/openide/masterfs/src/org/netbeans/modules/masterfs/MasterFileObject.java Locally Modified (Based On 1.60) *************** *** 26,32 **** import org.openide.filesystems.*; import org.openide.util.Utilities; import org.netbeans.modules.masterfs.filebasedfs.fileobjects.ReplaceForSerialization; - import javax.swing.event.EventListenerList; import java.io.IOException; import java.io.InputStream; --- 26,31 ---- *************** *** 34,39 **** --- 33,39 ---- import java.util.*; import java.util.logging.Level; import java.util.logging.Logger; + import org.netbeans.modules.masterfs.filebasedfs.fileobjects.FileObj; import org.netbeans.modules.masterfs.filebasedfs.fileobjects.FolderObj; import org.netbeans.modules.masterfs.filebasedfs.utils.FileInfo; import org.netbeans.modules.masterfs.providers.ProvidedExtensions; *************** *** 155,161 **** FileObject deleg = getValidOrInvalid(getDelegate().getPrefered()); FileLock lck = (deleg.isValid()) ? Delegate.getLockForDelegate(lock, deleg) : null; ! return deleg.getOutputStream(lck); } /** --- 155,162 ---- FileObject deleg = getValidOrInvalid(getDelegate().getPrefered()); FileLock lck = (deleg.isValid()) ? Delegate.getLockForDelegate(lock, deleg) : null; ! return (deleg instanceof FileObj)? ((FileObj)deleg).getOutputStream(lck, getExtensions()) ! : deleg.getOutputStream(lck); } /** *************** *** 949,958 **** } private static ProvidedExtensions.DeleteHandler getDeleteHandler(File f) { ! ProvidedExtensions pe; ! pe = ((MasterFileSystem.StatusImpl)MasterFileSystem.getDefault().getStatus()).getExtensions(); ! return pe.getDeleteHandler(f); } private static final class AtomicAction implements FileSystem.AtomicAction { --- 950,960 ---- } private static ProvidedExtensions.DeleteHandler getDeleteHandler(File f) { ! return getExtensions().getDeleteHandler(f); ! } ! private static ProvidedExtensions getExtensions() { ! return ((MasterFileSystem.StatusImpl)MasterFileSystem.getDefault().getStatus()).getExtensions(); } private static final class AtomicAction implements FileSystem.AtomicAction { Index: src/org/netbeans/modules/masterfs/providers/ProvidedExtensions.java *** /space/work/all3/openide/masterfs/src/org/netbeans/modules/masterfs/providers/ProvidedExtensions.java Base (1.4) --- /space/work/all3/openide/masterfs/src/org/netbeans/modules/masterfs/providers/ProvidedExtensions.java Locally Modified (Based On 1.4) *************** *** 115,118 **** --- 115,127 ---- public void deleteSuccess(FileObject fo) {} public void deleteFailure(FileObject fo) {} public void beforeDelete(FileObject fo) {} + + + /* + * Called by MasterFileSystem when FileObject + * is going to be modified by asking for OutputStream + * @see org.openide.filesystems.FileObject#getOutputStream + * @param fo file which is going to be notified + */ + public void beforeChange(FileObject fo) {} } Index: src/org/netbeans/modules/masterfs/ProvidedExtensionsProxy.java *** /space/work/all3/openide/masterfs/src/org/netbeans/modules/masterfs/ProvidedExtensionsProxy.java Base (1.4) --- /space/work/all3/openide/masterfs/src/org/netbeans/modules/masterfs/ProvidedExtensionsProxy.java Locally Modified (Based On 1.4) *************** *** 137,143 **** --- 137,154 ---- } } } + + public void beforeChange(FileObject f) { + for (Iterator it = annotationProviders.iterator(); it.hasNext();) { + AnnotationProvider provider = (AnnotationProvider) it.next(); + InterceptionListener iListener = (provider != null) ? provider.getInterceptionListener() : null; + if (iListener instanceof ProvidedExtensions) { + ((ProvidedExtensions)iListener).beforeChange(f); } + } + } + } Index: test/unit/src/org/netbeans/modules/masterfs/providers/ProvidedExtensionsTest.java *** /space/work/all3/openide/masterfs/test/unit/src/org/netbeans/modules/masterfs/providers/ProvidedExtensionsTest.java Base (1.4) --- /space/work/all3/openide/masterfs/test/unit/src/org/netbeans/modules/masterfs/providers/ProvidedExtensionsTest.java Locally Modified (Based On 1.4) *************** *** 82,87 **** --- 82,102 ---- } + public void testImplsBeforeChange() throws IOException { + FileObject fo = FileUtil.toFileObject(getWorkDir()); + assertNotNull(fo); + assertNotNull(iListener); + FileObject toChange = fo.createData("aa"); + assertNotNull(toChange); + OutputStream os = toChange.getOutputStream(); + try { + assertEquals(1, iListener.implsBeforeChangeCalls); + } finally { + os.close(); + } + + } + public void testImplsMove() throws IOException { FileObject fo = FileUtil.toFileObject(getWorkDir()); assertNotNull(fo); *************** *** 368,373 **** --- 383,389 ---- private int moveImplCalls; private int implsRenameCalls; private int renameImplCalls; + private int implsBeforeChangeCalls; private static boolean implsMoveRetVal = true; private static boolean implsRenameRetVal = true; *************** *** 380,387 **** --- 396,408 ---- moveImplCalls = 0; implsRenameCalls = 0; renameImplCalls = 0; + implsBeforeChangeCalls = 0; } + public void beforeChange(FileObject f) { + implsBeforeChangeCalls++; + } + public ProvidedExtensions.DeleteHandler getDeleteHandler(File f) { return (!isImplsDeleteRetVal()) ? null : new ProvidedExtensions.DeleteHandler(){ final Set s = new HashSet();