Index: src/org/openide/filesystems/FileUtil.java =================================================================== RCS file: /cvs/openide/src/org/openide/filesystems/FileUtil.java,v retrieving revision 1.80 diff -u -r1.80 FileUtil.java --- src/org/openide/filesystems/FileUtil.java 2 Apr 2004 10:45:21 -0000 1.80 +++ src/org/openide/filesystems/FileUtil.java 5 Apr 2004 16:40:59 -0000 @@ -273,6 +273,17 @@ } /** Finds appropriate FileObjects to java.io.File if possible. + * If not possible then null is returned. + * @param file File whose coresponding FileObjects will be looked for + * @return corresponding FileObject or null + * @since X.XX + */ + public static FileObject toFileObject (File file) { + FileObject[] fileObjects = fromFile (file); + return (fileObjects != null && fileObjects.length > 0) ? fileObjects[0] : null; + } + + /** Finds appropriate FileObjects to java.io.File if possible. * If not possible then empty array is returned. More FileObjects may * correspond to one java.io.File that`s why array is returned. * @param file File whose coresponding FileObjects will be looked for. @@ -281,6 +292,7 @@ * @return corresponding FileObjects or empty array if no * corresponding FileObject exists. * @since 1.29 + * @deprecated Use method {@link #toFileObject toFileObject} */ public static FileObject[] fromFile (File file) { if (!file.equals(normalizeFile(file))) { @@ -826,29 +838,6 @@ } /** - * This method is very similar to URLMapper.findFileObjects(URL) with - * difference that it returns just one file object and that it knows - * which file object must be used from available ones. - * - * @param url url to be converted to file object - * @return file object corresponding to url or null if no one was found - * @since XXX - */ - public static FileObject findFileObject(URL url) { - FileObject fos[] = URLMapper.findFileObjects(url); - if (fos.length == 0) { - return null; - } - // prefer file object from master filesystem - for (int i=0; i findURL(FileObject fo, int type) . * @param url to wanted FileObjects * @return a suitable arry of FileObjects, or empty array if not successful - * @since 2.22*/ + * @since 2.22 + * @deprecated use method {@link #findFileObject findFileObject} + */ public static FileObject[] findFileObjects (URL url) { /** first basic implementation */ Set retSet = new HashSet (); @@ -131,9 +133,38 @@ return retVal; } - /** Get an array of FileObjects for this url + /** Find an appropiate instance of FileObject that addresses this url + * + * @param url url to be converted to file object + * @return file object corresponding to url or null if no one was found + * @since X.XX + */ + public static FileObject findFileObject (URL url) { + FileObject[] results = null; + + Iterator instances = getInstances().iterator(); + while (instances.hasNext() && results == null) { + URLMapper mapper = (URLMapper) instances.next(); + if (mapper == getDefault ()) continue; + results = mapper.getFileObjects (url); + } + + /** first basic implementation */ + if (results == null) { + results = getDefault ().getFileObjects (url); + } + + return (results != null && results.length > 0) ? results[0] : null; + } + + + /** Get an array of FileObjects for this url. There is no reason to return array + * with size greater than one because method {@link #findFileObject findFileObject} + * uses just first element (next elements won't be accepted anyway). + *

There isn't necessary to return array here. + * The only one reason is just backward compatibility.

* @param url to wanted FileObjects - * @return a suitable arry of FileObjects, or null + * @return an array of FileObjects with size no greater than one, or null * @since 2.22*/ public abstract FileObject[] getFileObjects (URL url); Index: test/unit/src/org/openide/filesystems/FileUtilTestHidden.java =================================================================== RCS file: /cvs/openide/test/unit/src/org/openide/filesystems/FileUtilTestHidden.java,v retrieving revision 1.1 diff -u -r1.1 FileUtilTestHidden.java --- test/unit/src/org/openide/filesystems/FileUtilTestHidden.java 5 Apr 2004 16:35:55 -0000 1.1 +++ test/unit/src/org/openide/filesystems/FileUtilTestHidden.java 5 Apr 2004 16:41:00 -0000 @@ -51,4 +51,23 @@ assertNotNull(testFile); assertTrue(testFile.exists()); } + + public void testToFileObject () throws Exception { + assertNotNull(root); + FileObject testFo = root.getFileObject("fileutildir/tofileobject.txt"); + assertNotNull(testFo); + + File rootFile = FileUtil.toFile(root); + assertNotNull(rootFile); + assertTrue(rootFile.exists()); + + File testFile = new File (rootFile, "fileutildir/tofileobject.txt"); + assertNotNull(testFile); + assertTrue(testFile.exists()); + + FileObject testFo2 = FileUtil.toFileObject(testFile); + assertNotNull(testFo2); + assertEquals(testFo2, testFo); + } + } Index: test/unit/src/org/openide/filesystems/URLMapperTestHidden.java =================================================================== RCS file: /cvs/openide/test/unit/src/org/openide/filesystems/URLMapperTestHidden.java,v retrieving revision 1.4 diff -u -r1.4 URLMapperTestHidden.java --- test/unit/src/org/openide/filesystems/URLMapperTestHidden.java 5 Apr 2004 15:37:31 -0000 1.4 +++ test/unit/src/org/openide/filesystems/URLMapperTestHidden.java 5 Apr 2004 16:41:00 -0000 @@ -94,6 +94,29 @@ } } + public void testConversions2 () throws Exception { + assertNotNull(root); + implTestConversions2(root); + + + Enumeration en = root.getChildren(true); + while (en.hasMoreElements()) { + FileObject fileObject = (FileObject) en.nextElement(); + implTestConversions2(fileObject); + } + + } + + private void implTestConversions2 (FileObject fo) { + URL urlFromMapper = URLMapper.findURL(fo, getURLType()); + if (isNullURLExpected(urlFromMapper, fo)) return; + + assertNotNull(urlFromMapper); + + FileObject fileObject = URLMapper.findFileObject(urlFromMapper); + assertEquals(fo, fileObject); + } + private void implTestIfReachable(FileObject fo) throws Exception { URL urlFromMapper = URLMapper.findURL(fo, getURLType());