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.java.api;
021
022import org.apache.commons.lang.StringUtils;
023import org.sonar.api.resources.*;
024
025/**
026 * @since 2.6
027 * @deprecated in 4.2. Only file system is handled by SonarQube, not logical components.
028 */
029@Deprecated
030public final class JavaClass extends Resource {
031
032  public static final String SCOPE = Scopes.PROGRAM_UNIT;
033  public static final String QUALIFIER = Qualifiers.CLASS;
034  public static final int UNKNOWN_LINE = -1;
035
036  private int fromLine = UNKNOWN_LINE;
037  private int toLine = UNKNOWN_LINE;
038
039  private JavaClass(String name) {
040    setKey(name);
041  }
042
043  private JavaClass(String name, int fromLine, int toLine) {
044    setKey(name);
045    this.fromLine = fromLine;
046    this.toLine = toLine;
047  }
048
049  public String getPackageName() {
050    if (StringUtils.contains(getKey(), JavaUtils.PACKAGE_SEPARATOR)) {
051      return StringUtils.substringBeforeLast(getKey(), JavaUtils.PACKAGE_SEPARATOR);
052    }
053    return "";
054  }
055
056  public String getClassName() {
057    String className = StringUtils.substringAfterLast(getKey(), JavaUtils.PACKAGE_SEPARATOR);
058    return StringUtils.defaultIfEmpty(className, getKey());
059  }
060
061  public int getFromLine() {
062    return fromLine;
063  }
064
065  public int getToLine() {
066    return toLine;
067  }
068
069  @Override
070  public String getName() {
071    return getKey();
072  }
073
074  @Override
075  public String getLongName() {
076    return getKey();
077  }
078
079  @Override
080  public String getDescription() {
081    return null;
082  }
083
084  @Override
085  public Language getLanguage() {
086    return Java.INSTANCE;
087  }
088
089  @Override
090  public String getScope() {
091    return SCOPE;
092  }
093
094  @Override
095  public String getQualifier() {
096    return QUALIFIER;
097  }
098
099  @Override
100  public Resource getParent() {
101    return null;
102  }
103
104  @Override
105  public boolean matchFilePattern(String antPattern) {
106    return false;
107  }
108
109  @Override
110  public String toString() {
111    return getName();
112  }
113
114  public static JavaClass create(String name) {
115    return new JavaClass(name);
116  }
117
118  public static JavaClass create(String packageName, String className) {
119    if (StringUtils.isBlank(packageName)) {
120      return new JavaClass(className);
121    }
122    return new JavaClass(toName(packageName, className));
123  }
124
125  private static String toName(String packageName, String className) {
126    if (StringUtils.isBlank(packageName)) {
127      return className;
128    }
129    return new StringBuilder().append(packageName).append(JavaUtils.PACKAGE_SEPARATOR).append(className).toString();
130  }
131
132  public static class Builder {
133    private String name;
134    private int fromLine = UNKNOWN_LINE;
135    private int toLine = UNKNOWN_LINE;
136
137    public Builder setName(String name) {
138      this.name = name;
139      return this;
140    }
141
142    public Builder setName(String packageName, String className) {
143      this.name = toName(packageName, className);
144      return this;
145    }
146
147    public Builder setFromLine(int fromLine) {
148      this.fromLine = Math.max(UNKNOWN_LINE, fromLine);
149      return this;
150    }
151
152    public Builder setToLine(int toLine) {
153      this.toLine = Math.max(UNKNOWN_LINE, toLine);
154      return this;
155    }
156
157    public JavaClass create() {
158      return new JavaClass(name, fromLine, toLine);
159    }
160  }
161}