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 java.io.File;
026 import java.io.Serializable;
027
028 /**
029 * @since 4.2
030 */
031 public class DefaultInputFile implements InputFile, Serializable {
032
033 private final String relativePath;
034 private final String moduleKey;
035 private String absolutePath;
036 private String language;
037 private Type type = Type.MAIN;
038 private Status status;
039 private String hash;
040 private int lines;
041 private String encoding;
042 long[] originalLineOffsets;
043 byte[][] lineHashes;
044
045 public DefaultInputFile(String moduleKey, String relativePath) {
046 this.moduleKey = moduleKey;
047 this.relativePath = PathUtils.sanitize(relativePath);
048 }
049
050 @Override
051 public String relativePath() {
052 return relativePath;
053 }
054
055 @Override
056 public String absolutePath() {
057 return absolutePath;
058 }
059
060 @Override
061 public File file() {
062 if (absolutePath == null) {
063 throw new IllegalStateException("Can not return the java.io.File because absolute path is not set (see method setFile(java.io.File))");
064 }
065 return new File(absolutePath);
066 }
067
068 @Override
069 public String language() {
070 return language;
071 }
072
073 @Override
074 public Type type() {
075 return type;
076 }
077
078 /**
079 * {@link #setStatus(org.sonar.api.batch.fs.InputFile.Status)}
080 */
081 @Override
082 public Status status() {
083 return status;
084 }
085
086 /**
087 * Digest hash of the file.
088 */
089 public String hash() {
090 return hash;
091 }
092
093 @Override
094 public int lines() {
095 return lines;
096 }
097
098 /**
099 * Component key.
100 */
101 public String key() {
102 return new StringBuilder().append(moduleKey).append(":").append(relativePath).toString();
103 }
104
105 public String moduleKey() {
106 return moduleKey;
107 }
108
109 public String encoding() {
110 return encoding;
111 }
112
113 public long[] originalLineOffsets() {
114 return originalLineOffsets;
115 }
116
117 public byte[][] lineHashes() {
118 return lineHashes;
119 }
120
121 public DefaultInputFile setAbsolutePath(String s) {
122 this.absolutePath = PathUtils.sanitize(s);
123 return this;
124 }
125
126 public DefaultInputFile setLanguage(String language) {
127 this.language = language;
128 return this;
129 }
130
131 public DefaultInputFile setFile(File file) {
132 setAbsolutePath(file.getAbsolutePath());
133 return this;
134 }
135
136 public DefaultInputFile setType(Type type) {
137 this.type = type;
138 return this;
139 }
140
141 public DefaultInputFile setStatus(Status status) {
142 this.status = status;
143 return this;
144 }
145
146 public DefaultInputFile setHash(String hash) {
147 this.hash = hash;
148 return this;
149 }
150
151 public DefaultInputFile setLines(int lines) {
152 this.lines = lines;
153 return this;
154 }
155
156 public DefaultInputFile setEncoding(String encoding) {
157 this.encoding = encoding;
158 return this;
159 }
160
161 public DefaultInputFile setOriginalLineOffsets(long[] originalLineOffsets) {
162 this.originalLineOffsets = originalLineOffsets;
163 return this;
164 }
165
166 public DefaultInputFile setLineHashes(byte[][] lineHashes) {
167 this.lineHashes = lineHashes;
168 return this;
169 }
170
171 @Override
172 public boolean equals(Object o) {
173 if (this == o) {
174 return true;
175 }
176 if (!(o instanceof DefaultInputFile)) {
177 return false;
178 }
179
180 DefaultInputFile that = (DefaultInputFile) o;
181 return moduleKey.equals(that.moduleKey) && relativePath.equals(that.relativePath);
182 }
183
184 @Override
185 public int hashCode() {
186 return moduleKey.hashCode() + relativePath.hashCode() * 13;
187 }
188
189 @Override
190 public String toString() {
191 return "[moduleKey=" + moduleKey + ", relative=" + relativePath + ", abs=" + absolutePath + "]";
192 }
193
194 }