    001/*
    002 * Copyright (c) 2007-2017 Xplenty, Inc. All Rights Reserved.
    003 *
    004 * Project and contact information: http://www.cascading.org/
    005 *
    006 * This file is part of the Cascading project.
    007 *
    008 * Licensed under the Apache License, Version 2.0 (the "License");
    009 * you may not use this file except in compliance with the License.
    010 * You may obtain a copy of the License at
    011 *
    012 *     http://www.apache.org/licenses/LICENSE-2.0
    013 *
    014 * Unless required by applicable law or agreed to in writing, software
    015 * distributed under the License is distributed on an "AS IS" BASIS,
    016 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    017 * See the License for the specific language governing permissions and
    018 * limitations under the License.
    019 */
    020
    021package cascading.tap.type;
    022
    023import java.io.IOException;
    024
    025import cascading.flow.FlowProcess;
    026
    027/** Interface FileType marks specific platform {@link cascading.tap.Tap} classes as representing a file like interface. */
    028public interface FileType<Config>
    029  {
    030  /**
    031   * Method isDirectory returns true if the underlying resource represents a directory or folder instead
    032   * of an individual file.
    033   *
    034   * @param flowProcess
    035   * @return boolean
    036   * @throws java.io.IOException
    037   */
    038  boolean isDirectory( FlowProcess<? extends Config> flowProcess ) throws IOException;
    039
    040  /**
    041   * Method isDirectory returns true if the underlying resource represents a directory or folder instead
    042   * of an individual file.
    043   *
    044   * @param conf of JobConf
    045   * @return boolean
    046   * @throws java.io.IOException
    047   */
    048  boolean isDirectory( Config conf ) throws IOException;
    049
    050  /**
    051   * Method getChildIdentifiers returns an array of child identifiers if this resource is a directory.
    052   * <p/>
    053   * This method will skip Hadoop log directories ({@code _log}).
    054   *
    055   * @param flowProcess
    056   * @return String[]
    057   * @throws java.io.IOException
    058   */
    059  String[] getChildIdentifiers( FlowProcess<? extends Config> flowProcess ) throws IOException;
    060
    061  /**
    062   * Method getChildIdentifiers returns an array of child identifiers if this resource is a directory.
    063   * <p/>
    064   * This method will skip Hadoop log directories ({@code _log}).
    065   *
    066   * @param conf of JobConf
    067   * @return String[]
    068   * @throws java.io.IOException
    069   */
    070  String[] getChildIdentifiers( Config conf ) throws IOException;
    071
    072  String[] getChildIdentifiers( FlowProcess<? extends Config> flowProcess, int depth, boolean fullyQualified ) throws IOException;
    073
    074  String[] getChildIdentifiers( Config conf, int depth, boolean fullyQualified ) throws IOException;
    075
    076  /**
    077   * Method getSize returns the size of the file referenced by this tap.
    078   *
    079   * @param flowProcess
    080   * @return The size of the file reference by this tap.
    081   * @throws java.io.IOException
    082   */
    083  long getSize( FlowProcess<? extends Config> flowProcess ) throws IOException;
    084
    085  /**
    086   * Method getSize returns the size of the file referenced by this tap.
    087   *
    088   * @param conf of type Config
    089   * @return The size of the file reference by this tap.
    090   * @throws java.io.IOException
    091   */
    092  long getSize( Config conf ) throws IOException;
    093  }