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 */ 020 package org.sonar.api.scan.filesystem.internal; 021 022 import javax.annotation.CheckForNull; 023 import java.io.File; 024 import java.io.Serializable; 025 import java.util.Map; 026 027 public 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 }