001    /*
002     * Copyright (C) 2012 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.FileInputStream;
026    import java.io.IOException;
027    import java.io.InputStream;
028    import java.util.Arrays;
029    import java.util.Collections;
030    
031    public class FileDriver extends AbstractFSDriver<File> {
032    
033      /** . */
034      private final File root;
035    
036      /**
037       * Create a new file driver.
038       *
039       * @param root the root
040       * @throws NullPointerException if the root argument is null
041       */
042      public FileDriver(File root) throws NullPointerException {
043        if (root == null) {
044          throw new NullPointerException();
045        }
046    
047        //
048        this.root = root;
049      }
050    
051      public File root() throws IOException {
052        return root;
053      }
054    
055      public String name(File handle) throws IOException {
056        return handle.getName();
057      }
058    
059      public boolean isDir(File handle) throws IOException {
060        return handle.isDirectory();
061      }
062    
063      public Iterable<File> children(File handle) throws IOException {
064        File[] files = handle.listFiles();
065        return files != null ? Arrays.asList(files) : Collections.<File>emptyList();
066      }
067    
068      public long getLastModified(File handle) throws IOException {
069        return handle.lastModified();
070      }
071    
072      public InputStream open(File handle) throws IOException {
073        return new FileInputStream(handle);
074      }
075    }