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