Do not expose FileObjects from VCS filesystem. Use the FileObjects from MasterFS where possible. BLD200412071900
authormentlicher@netbeans.org
Tue, 07 Dec 2004 18:53:06 +0000
changeset 5472294a44acc631
parent 5471 b69cdaf98d66
child 5473 e4a06604edbd
Do not expose FileObjects from VCS filesystem. Use the FileObjects from MasterFS where possible.
This is a fix of issue #51955.
vcscore/src/org/netbeans/modules/vcscore/versioning/impl/FileNode.java
vcscore/src/org/netbeans/modules/vcscore/versioning/impl/FileSystemNode.java
vcscore/src/org/netbeans/modules/vcscore/versioning/impl/FolderChildren.java
vcscore/src/org/netbeans/modules/vcscore/versioning/impl/FolderNode.java
     1.1 --- a/vcscore/src/org/netbeans/modules/vcscore/versioning/impl/FileNode.java	Mon Dec 06 12:58:25 2004 +0000
     1.2 +++ b/vcscore/src/org/netbeans/modules/vcscore/versioning/impl/FileNode.java	Tue Dec 07 18:53:06 2004 +0000
     1.3 @@ -17,6 +17,7 @@
     1.4  import org.openide.util.actions.SystemAction;
     1.5  import org.openide.util.RequestProcessor;
     1.6  
     1.7 +import org.netbeans.modules.vcscore.VcsAttributes;
     1.8  import org.netbeans.modules.vcscore.versioning.*;
     1.9  
    1.10  import javax.swing.*;
    1.11 @@ -78,12 +79,8 @@
    1.12      
    1.13      private RevisionList getRevisionList(boolean refresh) {
    1.14          VersioningFileSystem vfs;
    1.15 -        try {
    1.16 -            vfs = VersioningFileSystem.findFor(getFile().getFileSystem());
    1.17 -            return vfs.getVersions().getRevisions(getFile().getPath(), refresh);
    1.18 -        } catch (FileStateInvalidException exc) {
    1.19 -            return null;
    1.20 -        }
    1.21 +        vfs = VersioningFileSystem.findFor((FileSystem) getFile().getAttribute(VcsAttributes.VCS_NATIVE_FS));
    1.22 +        return vfs.getVersions().getRevisions((String) getFile().getAttribute(VcsAttributes.VCS_NATIVE_PACKAGE_NAME_EXT), refresh);
    1.23      }
    1.24  
    1.25      private final Object childrenRefreshingLock = new Object();
     2.1 --- a/vcscore/src/org/netbeans/modules/vcscore/versioning/impl/FileSystemNode.java	Mon Dec 06 12:58:25 2004 +0000
     2.2 +++ b/vcscore/src/org/netbeans/modules/vcscore/versioning/impl/FileSystemNode.java	Tue Dec 07 18:53:06 2004 +0000
     2.3 @@ -53,18 +53,33 @@
     2.4      * @param root folder to work on
     2.5      */
     2.6      public FileSystemNode(FileObject root) {
     2.7 +        super(getRootChildren(root));
     2.8 +        this.root = root;
     2.9 +        init();
    2.10 +    }
    2.11 +    
    2.12 +    private static final Children getRootChildren(FileObject root) {
    2.13 +        FileObject masterRoot = FileUtil.toFileObject(FileUtil.toFile(root));
    2.14 +        if (masterRoot != null) root = masterRoot;
    2.15          // TODO I'm hiding here a bug in FS, it wrongly works over deleted roots and shows random files!
    2.16          // visible after deserialization of old setting that used already deleted folders
    2.17 -        super(FileUtil.toFile(root).exists() ? new FolderChildren(root) : Children.LEAF);
    2.18 -        this.root = root;
    2.19 -        init();
    2.20 +        if (FileUtil.toFile(root).exists()) {
    2.21 +            return new FolderChildren(root);
    2.22 +        } else {
    2.23 +            return Children.LEAF;
    2.24 +        }
    2.25      }
    2.26  
    2.27      public Cookie getCookie(Class type) {
    2.28          // mimics DataNode because some actions heavily depends on DataObject cookie existence
    2.29          if (type.isAssignableFrom(DataObject.class) || type.isAssignableFrom(DataFolder.class)) {
    2.30              try {
    2.31 -                return DataObject.find(root);
    2.32 +                FileObject masterRoot = FileUtil.toFileObject(FileUtil.toFile(root));
    2.33 +                if (masterRoot != null) {
    2.34 +                    return DataObject.find(masterRoot);
    2.35 +                } else {
    2.36 +                    return DataObject.find(root);
    2.37 +                }
    2.38              } catch (DataObjectNotFoundException e) {
    2.39                  // ignore, call super later on
    2.40              }
    2.41 @@ -262,7 +277,7 @@
    2.42          }
    2.43          if (org.openide.filesystems.FileSystem.PROP_ROOT.equals(ev.getPropertyName())) {
    2.44              this.root = fileSystem().getRoot();
    2.45 -            setChildren(new FolderChildren(root));
    2.46 +            setChildren(getRootChildren(root));
    2.47          }
    2.48      }
    2.49  
     3.1 --- a/vcscore/src/org/netbeans/modules/vcscore/versioning/impl/FolderChildren.java	Mon Dec 06 12:58:25 2004 +0000
     3.2 +++ b/vcscore/src/org/netbeans/modules/vcscore/versioning/impl/FolderChildren.java	Tue Dec 07 18:53:06 2004 +0000
     3.3 @@ -23,6 +23,7 @@
     3.4  import java.io.File;
     3.5  
     3.6  import org.netbeans.api.queries.*;
     3.7 +import org.netbeans.modules.vcscore.VcsAttributes;
     3.8  
     3.9  import org.netbeans.modules.vcscore.versioning.VersioningFileSystem;
    3.10  
    3.11 @@ -156,13 +157,10 @@
    3.12  
    3.13              VersioningFileSystem versioningFS;
    3.14              boolean visibleByFS  = true;
    3.15 -            try {
    3.16 -                versioningFS = VersioningFileSystem.findFor(file.getFileSystem());
    3.17 -                if (versioningFS != null) {
    3.18 -                    File iofile = FileUtil.toFile(file);
    3.19 -                    visibleByFS = versioningFS.getFileFilter().accept(iofile.getParentFile(), iofile.getName());
    3.20 -                }
    3.21 -            } catch (FileStateInvalidException e) {
    3.22 +            versioningFS = VersioningFileSystem.findFor((FileSystem) file.getAttribute(VcsAttributes.VCS_NATIVE_FS));
    3.23 +            if (versioningFS != null) {
    3.24 +                File iofile = FileUtil.toFile(file);
    3.25 +                visibleByFS = versioningFS.getFileFilter().accept(iofile.getParentFile(), iofile.getName());
    3.26              }
    3.27  
    3.28              // merge with visibility query results (hide .bak etc.) 
     4.1 --- a/vcscore/src/org/netbeans/modules/vcscore/versioning/impl/FolderNode.java	Mon Dec 06 12:58:25 2004 +0000
     4.2 +++ b/vcscore/src/org/netbeans/modules/vcscore/versioning/impl/FolderNode.java	Tue Dec 07 18:53:06 2004 +0000
     4.3 @@ -38,6 +38,7 @@
     4.4  import java.util.Set;
     4.5  import java.util.Collections;
     4.6  
     4.7 +import org.netbeans.modules.vcscore.VcsAttributes;
     4.8  import org.netbeans.modules.vcscore.caching.FileStatusProvider;
     4.9  import org.netbeans.modules.vcscore.versioning.VersioningFileSystem;
    4.10  
    4.11 @@ -135,15 +136,9 @@
    4.12      }
    4.13  
    4.14      private void init(FileObject file) {
    4.15 -        try {
    4.16 -            FileSystem fs = file.getFileSystem();
    4.17 -            vcsFileStatusListener = new VCSFileStatusListener();
    4.18 -            fs.addFileStatusListener((FileStatusListener) WeakListeners.create(FileStatusListener.class, vcsFileStatusListener, fs));
    4.19 -        } catch (FileStateInvalidException exc) {
    4.20 -            ErrorManager err = ErrorManager.getDefault();
    4.21 -            err.notify(ErrorManager.INFORMATIONAL, exc);
    4.22 -            return;
    4.23 -        }
    4.24 +        FileSystem fs = (FileSystem) file.getAttribute(VcsAttributes.VCS_NATIVE_FS);
    4.25 +        vcsFileStatusListener = new VCSFileStatusListener();
    4.26 +        fs.addFileStatusListener((FileStatusListener) WeakListeners.create(FileStatusListener.class, vcsFileStatusListener, fs));
    4.27      }
    4.28  
    4.29      public String getName() {
    4.30 @@ -318,12 +313,8 @@
    4.31  
    4.32      private FileStatusProvider getFileStatusProvider() {
    4.33          VersioningFileSystem vfs;
    4.34 -        try {
    4.35 -            vfs = VersioningFileSystem.findFor(file.getFileSystem());
    4.36 -            return vfs.getFileStatusProvider();
    4.37 -        } catch (FileStateInvalidException exc) {
    4.38 -            return null;
    4.39 -        }
    4.40 +        vfs = VersioningFileSystem.findFor((FileSystem) file.getAttribute(VcsAttributes.VCS_NATIVE_FS));
    4.41 +        return vfs.getFileStatusProvider();
    4.42      }
    4.43  
    4.44      /**
    4.45 @@ -335,7 +326,7 @@
    4.46          if (status == null) {
    4.47              FileStatusProvider statusProvider = getFileStatusProvider();
    4.48              if (statusProvider == null) return null;
    4.49 -            status = statusProvider.getFileStatus(file.getPath());
    4.50 +            status = statusProvider.getFileStatus((String) file.getAttribute(VcsAttributes.VCS_NATIVE_PACKAGE_NAME_EXT));
    4.51          }
    4.52          return status;
    4.53      }
    4.54 @@ -349,7 +340,7 @@
    4.55          if (locker == null) {
    4.56              FileStatusProvider statusProvider = getFileStatusProvider();
    4.57              if (statusProvider == null) return null;
    4.58 -            locker = statusProvider.getFileLocker(file.getPath());
    4.59 +            locker = statusProvider.getFileLocker((String) file.getAttribute(VcsAttributes.VCS_NATIVE_PACKAGE_NAME_EXT));
    4.60          }
    4.61          return locker;
    4.62      }
    4.63 @@ -363,7 +354,7 @@
    4.64          if (revision == null) {
    4.65              FileStatusProvider statusProvider = getFileStatusProvider();
    4.66              if (statusProvider == null) return null;
    4.67 -            revision = statusProvider.getFileRevision(file.getPath());
    4.68 +            revision = statusProvider.getFileRevision((String) file.getAttribute(VcsAttributes.VCS_NATIVE_PACKAGE_NAME_EXT));
    4.69          }
    4.70          return revision;
    4.71      }
    4.72 @@ -377,7 +368,7 @@
    4.73          if (sticky == null) {
    4.74              FileStatusProvider statusProvider = getFileStatusProvider();
    4.75              if (statusProvider == null) return null;
    4.76 -            sticky = statusProvider.getFileSticky(file.getPath());
    4.77 +            sticky = statusProvider.getFileSticky((String) file.getAttribute(VcsAttributes.VCS_NATIVE_PACKAGE_NAME_EXT));
    4.78          }
    4.79          return sticky;
    4.80      }
    4.81 @@ -386,7 +377,7 @@
    4.82      private class VCSFileStatusListener implements FileStatusListener {
    4.83          public void annotationChanged(FileStatusEvent ev) {
    4.84              if (ev.hasChanged(file)) {
    4.85 -                String name = file.getPath();
    4.86 +                String name = (String) file.getAttribute(VcsAttributes.VCS_NATIVE_PACKAGE_NAME_EXT);
    4.87                  String newState;
    4.88                  String oldState;
    4.89                  FileStatusProvider statusProvider = null;