001 /* 002 * Sonar, open source software quality management tool. 003 * Copyright (C) 2008-2011 SonarSource 004 * mailto:contact AT sonarsource DOT com 005 * 006 * Sonar 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 * Sonar 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 017 * License along with Sonar; if not, write to the Free Software 018 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02 019 */ 020 package org.sonar.java.api; 021 022 import org.apache.commons.lang.StringUtils; 023 import org.sonar.api.resources.*; 024 025 /** 026 * @since 2.6 027 */ 028 public final class JavaClass extends Resource { 029 030 public static final String SCOPE = Scopes.PROGRAM_UNIT; 031 public static final String QUALIFIER = Qualifiers.CLASS; 032 public static final int UNKNOWN_LINE = -1; 033 034 private int fromLine = UNKNOWN_LINE; 035 private int toLine = UNKNOWN_LINE; 036 037 private JavaClass(String name) { 038 setKey(name); 039 } 040 041 private JavaClass(String name, int fromLine, int toLine) { 042 setKey(name); 043 this.fromLine = fromLine; 044 this.toLine = toLine; 045 } 046 047 public String getPackageName() { 048 if (StringUtils.contains(getKey(), JavaUtils.PACKAGE_SEPARATOR)) { 049 return StringUtils.substringBeforeLast(getKey(), JavaUtils.PACKAGE_SEPARATOR); 050 } 051 return ""; 052 } 053 054 public String getClassName() { 055 String className = StringUtils.substringAfterLast(getKey(), JavaUtils.PACKAGE_SEPARATOR); 056 return StringUtils.defaultIfEmpty(className, getKey()); 057 } 058 059 public int getFromLine() { 060 return fromLine; 061 } 062 063 public int getToLine() { 064 return toLine; 065 } 066 067 @Override 068 public String getName() { 069 return getKey(); 070 } 071 072 @Override 073 public String getLongName() { 074 return getKey(); 075 } 076 077 @Override 078 public String getDescription() { 079 return null; 080 } 081 082 @Override 083 public Language getLanguage() { 084 return Java.INSTANCE; 085 } 086 087 @Override 088 public String getScope() { 089 return SCOPE; 090 } 091 092 @Override 093 public String getQualifier() { 094 return QUALIFIER; 095 } 096 097 @Override 098 public Resource getParent() { 099 return null; 100 } 101 102 @Override 103 public boolean matchFilePattern(String antPattern) { 104 return false; 105 } 106 107 @Override 108 public String toString() { 109 return getName(); 110 } 111 112 public static JavaClass create(String name) { 113 return new JavaClass(name); 114 } 115 116 public static JavaClass create(String packageName, String className) { 117 if (StringUtils.isBlank(packageName)) { 118 return new JavaClass(className); 119 } 120 return new JavaClass(toName(packageName, className)); 121 } 122 123 private static String toName(String packageName, String className) { 124 if (StringUtils.isBlank(packageName)) { 125 return className; 126 } 127 return new StringBuilder().append(packageName).append(JavaUtils.PACKAGE_SEPARATOR).append(className).toString(); 128 } 129 130 public static class Builder { 131 private String name; 132 private int fromLine = UNKNOWN_LINE; 133 private int toLine = UNKNOWN_LINE; 134 135 public Builder setName(String name) { 136 this.name = name; 137 return this; 138 } 139 140 public Builder setName(String packageName, String className) { 141 this.name = toName(packageName, className); 142 return this; 143 } 144 145 public Builder setFromLine(int fromLine) { 146 this.fromLine = Math.max(UNKNOWN_LINE, fromLine); 147 return this; 148 } 149 150 public Builder setToLine(int toLine) { 151 this.toLine = Math.max(UNKNOWN_LINE, toLine); 152 return this; 153 } 154 155 public JavaClass create() { 156 return new JavaClass(name, fromLine, toLine); 157 } 158 } 159 }