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