001/*
002 * SonarQube, open source software quality management tool.
003 * Copyright (C) 2008-2013 SonarSource
004 * mailto:contact AT sonarsource DOT com
005 *
006 * SonarQube is free software; you can redistribute it and/or
007 * modify it under the terms of the GNU Lesser General Public
008 * License as published by the Free Software Foundation; either
009 * version 3 of the License, or (at your option) any later version.
010 *
011 * SonarQube is distributed in the hope that it will be useful,
012 * but WITHOUT ANY WARRANTY; without even the implied warranty of
013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
014 * Lesser General Public License for more details.
015 *
016 * You should have received a copy of the GNU Lesser General Public License
017 * along with this program; if not, write to the Free Software Foundation,
018 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
019 */
020package org.sonar.api.scan.filesystem.internal;
021
022import javax.annotation.CheckForNull;
023import java.io.File;
024import java.io.Serializable;
025import java.util.Map;
026
027public interface InputFile extends Serializable {
028
029  /**
030   * Canonical path of source directory.
031   * Example: <code>/path/to/module/src/main/java</code> or <code>C:\path\to\module\src\main\java</code>
032   */
033  String ATTRIBUTE_SOURCEDIR_PATH = "SRC_DIR_PATH";
034
035  /**
036   * Relative path from source directory. File separator is the forward slash ('/'),
037   * even on MSWindows.
038   */
039  String ATTRIBUTE_SOURCE_RELATIVE_PATH = "SRC_REL_PATH";
040
041  /**
042   * Detected language
043   */
044  String ATTRIBUTE_LANGUAGE = "LANG";
045
046  /**
047   *
048   */
049  String ATTRIBUTE_TYPE = "TYPE";
050  String TYPE_SOURCE = "SOURCE";
051  String TYPE_TEST = "TEST";
052
053  String ATTRIBUTE_STATUS = "STATUS";
054  String STATUS_SAME = "SAME";
055  String STATUS_CHANGED = "CHANGED";
056  String STATUS_ADDED = "ADDED";
057
058  String ATTRIBUTE_HASH = "HASH";
059
060
061  /**
062   * Path is relative from module base directory. Path is unique and identifies file
063   * within given <code>{@link org.sonar.api.scan.filesystem.ModuleFileSystem}</code>.
064   * File separator is the forward slash ('/'), even on MSWindows.
065   * <p/>
066   * Returns <code>src/main/java/com/Foo.java</code> if module base dir is
067   * <code>/absolute/path/to/module</code> and if file is
068   * <code>/absolute/path/to/module/src/main/java/com/Foo.java</code>.
069   * <p/>
070   * Returned path is never null.
071   */
072  String path();
073
074  /**
075   * Not-null canonical path. File separator is forward slash ('/'), even on MSWindows.
076   */
077  String absolutePath();
078
079  File file();
080
081  /**
082   * Not-null filename, including extension
083   */
084  String name();
085
086  /**
087   * Not-null type (is it a source file or a unit test file?).
088   * See constant values prefixed by <code>TYPE_</code>, for example {@link #TYPE_SOURCE}.
089   */
090  String type();
091
092  /**
093   * Does the given attribute have the given value ?
094   */
095  boolean has(String attribute, String value);
096
097  /**
098   * See list of attribute keys in constants starting with ATTRIBUTE_.
099   */
100  @CheckForNull
101  String attribute(String key);
102
103  Map<String, String> attributes();
104}