001 /* 002 * SonarQube, open source software quality management tool. 003 * Copyright (C) 2008-2014 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.batch.fs.internal; 021 022 import org.sonar.api.batch.fs.InputFile; 023 import org.sonar.api.utils.PathUtils; 024 025 import javax.annotation.CheckForNull; 026 027 import java.io.File; 028 import java.io.Serializable; 029 030 /** 031 * @since 4.2 032 */ 033 public class DefaultInputFile implements InputFile, Serializable { 034 035 private final String relativePath; 036 private String absolutePath; 037 private String language; 038 private Type type = Type.MAIN; 039 private Status status; 040 private String hash; 041 private int lines; 042 private String key; 043 044 public DefaultInputFile(String relativePath) { 045 this.relativePath = PathUtils.sanitize(relativePath); 046 } 047 048 @Override 049 public String relativePath() { 050 return relativePath; 051 } 052 053 /** 054 * Marked as nullable just for the unit tests that do not call {@link #setFile(java.io.File)} 055 * previously. 056 */ 057 @Override 058 @CheckForNull 059 public String absolutePath() { 060 return absolutePath; 061 } 062 063 @Override 064 public File file() { 065 if (absolutePath == null) { 066 throw new IllegalStateException("Can not return the java.io.File because absolute path is not set (see method setFile(java.io.File))"); 067 } 068 return new File(absolutePath); 069 } 070 071 /** 072 * Marked as nullable just for the unit tests that do not call {@link #setLanguage(String)} 073 * previously. 074 */ 075 @CheckForNull 076 @Override 077 public String language() { 078 return language; 079 } 080 081 @Override 082 public Type type() { 083 return type; 084 } 085 086 /** 087 * Marked as nullable just for the unit tests that do not previously call 088 * {@link #setStatus(org.sonar.api.batch.fs.InputFile.Status)} 089 */ 090 @CheckForNull 091 @Override 092 public Status status() { 093 return status; 094 } 095 096 /** 097 * Digest hash of the file. Marked as nullable just for the unit tests 098 * that do not previously call {@link #setHash(String)} 099 */ 100 @CheckForNull 101 public String hash() { 102 return hash; 103 } 104 105 @Override 106 public int lines() { 107 return lines; 108 } 109 110 /** 111 * Component key. It's marked as nullable just for the unit tests that 112 * do not previously call {@link #setKey(String)}. 113 */ 114 @CheckForNull 115 public String key() { 116 return key; 117 } 118 119 public DefaultInputFile setAbsolutePath(String s) { 120 this.absolutePath = PathUtils.sanitize(s); 121 return this; 122 } 123 124 public DefaultInputFile setLanguage(String language) { 125 this.language = language; 126 return this; 127 } 128 129 public DefaultInputFile setFile(File file) { 130 setAbsolutePath(file.getAbsolutePath()); 131 return this; 132 } 133 134 public DefaultInputFile setType(Type type) { 135 this.type = type; 136 return this; 137 } 138 139 public DefaultInputFile setStatus(Status status) { 140 this.status = status; 141 return this; 142 } 143 144 public DefaultInputFile setHash(String hash) { 145 this.hash = hash; 146 return this; 147 } 148 149 public DefaultInputFile setLines(int lines) { 150 this.lines = lines; 151 return this; 152 } 153 154 public DefaultInputFile setKey(String s) { 155 this.key = s; 156 return this; 157 } 158 159 @Override 160 public boolean equals(Object o) { 161 if (this == o) { 162 return true; 163 } 164 if (!(o instanceof DefaultInputFile)) { 165 return false; 166 } 167 168 DefaultInputFile that = (DefaultInputFile) o; 169 return relativePath.equals(that.relativePath); 170 } 171 172 @Override 173 public int hashCode() { 174 return relativePath.hashCode(); 175 } 176 177 @Override 178 public String toString() { 179 return "[relative=" + relativePath + ", abs=" + absolutePath + "]"; 180 } 181 }