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
020package org.crsh.vfs.spi;
021
022import java.io.IOException;
023
024public abstract class AbstractFSDriver<H> implements FSDriver<H> {
025
026  /**
027   * A simple implementation that iterates over the children to return the one specified
028   * by the <code>name</code> argument. Subclasses can override this method to provide
029   * a more efficient implementation.
030   *
031   * @param handle the directory handle
032   * @param name the child name
033   * @return the child or null
034   * @throws IOException any io exception
035   */
036  @Override
037  public H child(H handle, String name) throws IOException {
038    if (handle == null) {
039      throw new NullPointerException();
040    }
041    if (name == null) {
042      throw new NullPointerException();
043    }
044    for (H child : children(handle)) {
045      String childName = name(child);
046      if (childName.equals(name)) {
047        return child;
048      }
049    }
050    return null;
051  }
052}