/* * SonarQube * Copyright (C) 2009-2017 SonarSource SA * mailto:info AT sonarsource DOT com * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ package org.sonar.api.resources; import java.io.Serializable; import javax.annotation.CheckForNull; import javax.annotation.Nullable; import org.apache.commons.lang.StringUtils; import org.sonar.api.batch.fs.InputComponent; /** * @since 1.10 * @deprecated since 5.6 replaced by {@link InputComponent} */ @Deprecated public abstract class Resource implements Serializable { /** * @deprecated since 2.6. Use Scopes.PROJECT. */ @Deprecated public static final String SCOPE_SET = Scopes.PROJECT; /** * @deprecated since 2.6. Use Scopes.DIRECTORY. */ @Deprecated public static final String SCOPE_SPACE = Scopes.DIRECTORY; /** * @deprecated since 2.6. Use Scopes.FILE. */ @Deprecated public static final String SCOPE_ENTITY = Scopes.FILE; /** * @deprecated since 2.6. Use Qualifiers.VIEW. */ @Deprecated public static final String QUALIFIER_VIEW = Qualifiers.VIEW; /** * @deprecated since 2.6. Use Qualifiers.SUBVIEW. */ @Deprecated public static final String QUALIFIER_SUBVIEW = Qualifiers.SUBVIEW; /** * @deprecated since 2.6. Use Qualifiers.LIBRARY. */ @Deprecated public static final String QUALIFIER_LIB = Qualifiers.LIBRARY; /** * @deprecated since 2.6. Use Qualifiers.PROJECT. */ @Deprecated public static final String QUALIFIER_PROJECT = Qualifiers.PROJECT; /** * @deprecated since 2.6. Use Qualifiers.MODULE. */ @Deprecated public static final String QUALIFIER_MODULE = Qualifiers.MODULE; /** * @deprecated since 2.6. Use Qualifiers.DIRECTORY. */ @Deprecated public static final String QUALIFIER_DIRECTORY = Qualifiers.DIRECTORY; /** * @deprecated since 2.6. Use Qualifiers.FILE. */ @Deprecated public static final String QUALIFIER_FILE = Qualifiers.FILE; private Integer id; private String key; private String uuid; private String path; private String effectiveKey; /** * @return the resource key */ public final String getKey() { return key; } /** * Internal use only */ public void setKey(String s) { this.key = s; } /** * @since 5.0 */ public final String getUuid() { return uuid; } /** * Internal use only */ public void setUuid(String s) { this.uuid = s; } /** * @return the resource name */ public abstract String getName(); /** * @return the resource long name */ public abstract String getLongName(); /** * @return the resource description */ public abstract String getDescription(); /** * @return the language of the resource. Only {@link File}s may have a non null value. * @deprecated since 5.1 use {@link #language()} */ @Deprecated @CheckForNull public abstract Language getLanguage(); /** * @return the language of the resource. Only {@link File}s may have a non null value. */ @CheckForNull public String language() { Language l = getLanguage(); return l != null ? l.getKey() : null; } /** * @return the scope */ public abstract String getScope(); /** * The qualifier tells the type of the resource. For example, it can be a File, a Class, a Project, a Unit Test... * * @return the qualifier * @see org.sonar.api.resources.Qualifiers for the list of qualifiers * @see org.sonar.api.resources.ResourceUtils to find out if a resource if a class, a unit test,... from its qualifier */ public abstract String getQualifier(); /** * The parent is used to build the resources tree, for example for relations between files, directories and projects. * <p> * Return null if the parent is the current project (or module in case of multi-module). * */ @CheckForNull public abstract Resource getParent(); /** * Check resource against an Ant pattern, like mypackag?/*Foo.java. It's used for example to match resource exclusions. * * @param antPattern Ant-like pattern (with **, * and ?). It includes file suffixes. * @return true if the resource matches the Ant pattern */ public abstract boolean matchFilePattern(String antPattern); public final Integer getId() { return id; } /** * Internal use only */ public Resource setId(Integer id) { this.id = id; return this; } public String getPath() { return path; } public Resource setPath(@Nullable String path) { this.path = normalize(path); return this; } @CheckForNull protected static String normalize(@Nullable String path) { if (StringUtils.isBlank(path)) { return null; } String normalizedPath = path; normalizedPath = normalizedPath.replace('\\', '/'); normalizedPath = StringUtils.trim(normalizedPath); if (Directory.SEPARATOR.equals(normalizedPath)) { return Directory.SEPARATOR; } normalizedPath = StringUtils.removeStart(normalizedPath, Directory.SEPARATOR); normalizedPath = StringUtils.removeEnd(normalizedPath, Directory.SEPARATOR); return normalizedPath; } public String getEffectiveKey() { return effectiveKey; } /** * Internal use only */ public final Resource setEffectiveKey(String effectiveKey) { this.effectiveKey = effectiveKey; return this; } /** * @deprecated since 2.6. */ @Deprecated public final boolean isExcluded() { return false; } /** * Internal use only * * @deprecated since 2.6 should use SensorContext#isExcluded(resource). It will make inheritance of Resource easier. */ @Deprecated public final Resource setExcluded(boolean b) { return this; } @Override public boolean equals(Object o) { if (this == o) { return true; } if (o == null) { return false; } if (getClass() != o.getClass()) { return false; } Resource resource = (Resource) o; return key.equals(resource.key); } @Override public int hashCode() { // For File and Directory using deprecatedKey, key can be null return key != null ? key.hashCode() : super.hashCode(); } }