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