001    /*
002     * Sonar, open source software quality management tool.
003     * Copyright (C) 2009 SonarSource SA
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.api.resources;
021    
022    /**
023     * The interface to implement to create a resource in Sonar
024     *
025     * @since 1.10
026     */
027    public abstract class Resource<PARENT extends Resource> {
028    
029      public static final String SCOPE_SET = "PRJ";
030      public static final String SCOPE_SPACE = "DIR";
031      public static final String SCOPE_ENTITY = "FIL";
032      public static final String SCOPE_LIBRARY = "LIB";
033    
034      /**
035       * Use SCOPE_SET instead
036       */
037      @Deprecated
038      public static final String SCOPE_PROJECT = SCOPE_SET;
039    
040      /**
041       * Use SCOPE_SPACE instead
042       */
043      @Deprecated
044      public static final String SCOPE_DIRECTORY = SCOPE_SPACE;
045    
046      /**
047       * Use SCOPE_ENTITY instead
048       */
049      @Deprecated
050      public static final String SCOPE_FILE = SCOPE_ENTITY;
051    
052    
053      public static final String QUALIFIER_VIEW = "VW";
054      public static final String QUALIFIER_SUBVIEW = "SVW";
055      public static final String QUALIFIER_LIB = "LIB";
056      public static final String QUALIFIER_PROJECT = "TRK";
057      public static final String QUALIFIER_MODULE = "BRC";
058      public static final String QUALIFIER_PACKAGE = "PAC";
059      public static final String QUALIFIER_DIRECTORY = "DIR";
060      public static final String QUALIFIER_FILE = "FIL";
061      public static final String QUALIFIER_CLASS = "CLA";
062      public static final String QUALIFIER_FIELD = "FLD";
063      public static final String QUALIFIER_METHOD = "MET";
064      public static final String QUALIFIER_UNIT_TEST_CLASS = "UTS";
065    
066      /**
067       * Use QUALIFIER_PROJECT instead
068       */
069      @Deprecated
070      public static final String QUALIFIER_PROJECT_TRUNK = QUALIFIER_PROJECT;
071    
072      /**
073       * Use QUALIFIER_MODULE instead
074       */
075      @Deprecated
076      public static final String QUALIFIER_PROJECT_BRANCH = QUALIFIER_MODULE;
077    
078      private Integer id = null;
079    
080      private String key = null;
081    
082      private String effectiveKey = null;
083    
084      private boolean isExcluded = false;
085    
086    
087      /**
088       * @return the resource key
089       */
090      public final String getKey() {
091        return key;
092      }
093    
094      protected void setKey(String s) {
095        this.key = s;
096      }
097    
098      /**
099       * @return the resource name
100       */
101      public abstract String getName();
102    
103      /**
104       * @return the resource long name
105       */
106      public abstract String getLongName();
107    
108      /**
109       * @return the resource description
110       */
111      public abstract String getDescription();
112    
113      /**
114       * @return the language
115       */
116      public abstract Language getLanguage();
117    
118      /**
119       * @return the scope
120       */
121      public abstract String getScope();
122    
123      /**
124       * @return the qualifier
125       */
126      public abstract String getQualifier();
127    
128      /**
129       * The parent is used to build the resources tree, for example for relations between classes, packages and projects.
130       * <p>Return null if the parent is the project.</p>
131       */
132      public abstract PARENT getParent();
133    
134      /**
135       * Check resource against an Ant pattern, like mypackag?/*Foo.java. It's used for example
136       * to match resource exclusions.
137       *
138       * @param antPattern Ant-like pattern (with **, * and ?). It includes file suffixes.
139       * @return true if the resource matches the Ant pattern
140       */
141      public abstract boolean matchFilePattern(String antPattern);
142    
143    
144      public final Integer getId() {
145        return id;
146      }
147    
148      /**
149       * Internal use only
150       */
151      public Resource setId(Integer id) {
152        this.id = id;
153        return this;
154      }
155    
156      public final String getEffectiveKey() {
157        return effectiveKey;
158      }
159    
160      /**
161       * Internal use only
162       */
163      public final Resource setEffectiveKey(String effectiveKey) {
164        this.effectiveKey = effectiveKey;
165        return this;
166      }
167    
168      public final boolean isExcluded() {
169        return isExcluded;
170      }
171    
172      /**
173       * Internal use only
174       */
175      public final Resource setExcluded(boolean b) {
176        isExcluded = b;
177        return this;
178      }
179    
180      @Override
181      public boolean equals(Object o) {
182        if (this == o) {
183          return true;
184        }
185        if (o == null || getClass() != o.getClass()) {
186          return false;
187        }
188    
189        Resource resource = (Resource) o;
190        return key.equals(resource.key);
191    
192      }
193    
194      @Override
195      public int hashCode() {
196        return key.hashCode();
197      }
198    }