001    /*
002     * Copyright (C) 2010 eXo Platform SAS.
003     *
004     * This is free software; you can redistribute it and/or modify it
005     * under the terms of the GNU Lesser General Public License as
006     * published by the Free Software Foundation; either version 2.1 of
007     * the License, or (at your option) any later version.
008     *
009     * This software is distributed in the hope that it will be useful,
010     * but WITHOUT ANY WARRANTY; without even the implied warranty of
011     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
012     * Lesser General Public License for more details.
013     *
014     * You should have received a copy of the GNU Lesser General Public
015     * License along with this software; if not, write to the Free
016     * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
017     * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
018     */
019    
020    package org.crsh.vfs.spi.file;
021    
022    import org.crsh.vfs.spi.AbstractFSDriver;
023    
024    import java.io.File;
025    import java.io.IOException;
026    import java.net.URL;
027    import java.util.Arrays;
028    import java.util.Collections;
029    
030    /**
031     * @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a>
032     * @version $Revision$
033     */
034    public class FileDriver extends AbstractFSDriver<File> {
035    
036      /** . */
037      private final File root;
038    
039      /**
040       * Create a new file driver.
041       *
042       * @param root the root
043       * @throws NullPointerException if the root argument is null
044       */
045      public FileDriver(File root) throws NullPointerException {
046        if (root == null) {
047          throw new NullPointerException();
048        }
049    
050        //
051        this.root = root;
052      }
053    
054      public File root() throws IOException {
055        return root;
056      }
057    
058      public String name(File handle) throws IOException {
059        return handle.getName();
060      }
061    
062      public boolean isDir(File handle) throws IOException {
063        return handle.isDirectory();
064      }
065    
066      public Iterable<File> children(File handle) throws IOException {
067        File[] files = handle.listFiles();
068        return files != null ? Arrays.asList(files) : Collections.<File>emptyList();
069      }
070    
071      public URL toURL(File handle) throws IOException {
072        return handle.toURI().toURL();
073      }
074    }