001    /*
002     * SonarQube, open source software quality management tool.
003     * Copyright (C) 2008-2014 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     */
020    package org.sonar.api.batch;
021    
022    import org.sonar.api.batch.fs.InputFile;
023    import org.sonar.api.design.Dependency;
024    import org.sonar.api.measures.Measure;
025    import org.sonar.api.measures.MeasuresFilter;
026    import org.sonar.api.measures.Metric;
027    import org.sonar.api.resources.ProjectLink;
028    import org.sonar.api.resources.Resource;
029    import org.sonar.api.rules.Violation;
030    
031    import javax.annotation.CheckForNull;
032    
033    import java.io.Serializable;
034    import java.util.Collection;
035    import java.util.Date;
036    import java.util.List;
037    import java.util.Set;
038    
039    /**
040     * @since 1.10
041     * @deprecated since 4.5
042     */
043    @Deprecated
044    public interface SensorContext {
045    
046      /**
047       * Indexes a resource as a direct child of project. This method does nothing and returns true if the resource already indexed.
048       *
049       * @return false if the resource is excluded
050       * @deprecated since 4.2 Resource indexing is done by the platform for all physical resources.
051       */
052      @Deprecated
053      boolean index(Resource resource);
054    
055      /**
056       * Indexes a resource. This method does nothing if the resource is already indexed.
057       *
058       * @param resource        the resource to index. Not nullable
059       * @param parentReference a reference to the parent. If null, the the resource is indexed as a direct child of project.
060       * @return false if the parent is not indexed or if the resource is excluded
061       * @deprecated since 4.2 Resource indexing is done by the platform for all physical resources.
062       */
063      @Deprecated
064      boolean index(Resource resource, Resource parentReference);
065    
066      /**
067       * Returns true if the referenced resource is indexed and excluded.
068       *
069       * @since 2.6
070       * @deprecated since 4.2 Excluded resources are not indexed.
071       */
072      @Deprecated
073      boolean isExcluded(Resource reference);
074    
075      /**
076       * Returns true if the referenced resource is indexed.
077       *
078       * @since 2.6
079       * @deprecated since 4.2 Excluded resources are not indexed.
080       */
081      @Deprecated
082      boolean isIndexed(Resource reference, boolean acceptExcluded);
083    
084      /**
085       * Search for an indexed resource.
086       *
087       * @param reference the resource reference
088       * @return the indexed resource, null if it's not indexed
089       * @since 1.10. Generic types since 2.6.
090       */
091      @CheckForNull
092      <R extends Resource> R getResource(R reference);
093    
094      /**
095       * @since 2.6
096       */
097      Resource getParent(Resource reference);
098    
099      /**
100       * @since 2.6
101       */
102    
103      Collection<Resource> getChildren(Resource reference);
104    
105      // ----------- MEASURES ON PROJECT --------------
106    
107      /**
108       * Find a project measure
109       */
110      <G extends Serializable> Measure<G> getMeasure(Metric<G> metric);
111    
112      /**
113       * All measures of the project. Never return null.
114       */
115      <M> M getMeasures(MeasuresFilter<M> filter);
116    
117      /**
118       * Add a measure on project
119       */
120      Measure saveMeasure(Measure measure);
121    
122      /**
123       * Add a measure on project
124       */
125      Measure saveMeasure(Metric metric, Double value);
126    
127      // ----------- MEASURES ON RESOURCES --------------
128    
129      /**
130       * Find a measure for this project
131       */
132      <G extends Serializable> Measure<G> getMeasure(Resource resource, Metric<G> metric);
133    
134      /**
135       * Key is updated when saving the resource.
136       *
137       * @return the key as saved in database. Null if the resource is set as excluded.
138       * @deprecated use the methods index()
139       */
140      @Deprecated
141      String saveResource(Resource resource);
142    
143      /**
144       * Find all measures for this project. Never return null.
145       */
146      <M> M getMeasures(Resource resource, MeasuresFilter<M> filter);
147    
148      /**
149       * Add or update a measure.
150       * <p>
151       * The resource is automatically saved, so there is no need to execute the method saveResource(). Does nothing if the resource is set as
152       * excluded.
153       * </p>
154       */
155      Measure saveMeasure(Resource resource, Metric metric, Double value);
156    
157      /**
158       * Add or update a measure.
159       * <p>
160       * The resource is automatically saved, so there is no need to execute the method saveResource(). Does nothing if the resource is set as
161       * excluded.
162       * </p>
163       */
164      Measure saveMeasure(Resource resource, Measure measure);
165    
166      // ----------- RULE VIOLATIONS --------------
167    
168      /**
169       * Save a coding rule violation.
170       *
171       * @param force allows to force creation of violation even if it was supressed by {@link org.sonar.api.rules.ViolationFilter}
172       * @since 2.5
173       */
174      void saveViolation(Violation violation, boolean force);
175    
176      /**
177       * Save a coding rule violation.
178       */
179      void saveViolation(Violation violation);
180    
181      /**
182       * Saves a list of violations.
183       */
184      void saveViolations(Collection<Violation> violations);
185    
186      // ----------- DEPENDENCIES BETWEEN RESOURCES --------------
187    
188      /**
189       * Build a new dependency : from depends upon to. The dependency is NOT saved. The method saveDependency() must still be executed.
190       */
191      Dependency saveDependency(Dependency dependency);
192    
193      Set<Dependency> getDependencies();
194    
195      Collection<Dependency> getIncomingDependencies(Resource to);
196    
197      Collection<Dependency> getOutgoingDependencies(Resource from);
198    
199      // ----------- FILE SOURCES --------------
200    
201      /**
202       * Save the source code of a file. The file must be have been indexed before.
203       *
204       * @throws org.sonar.api.resources.DuplicatedSourceException if the source has already been set on this resource
205       * @since 1.10. Returns a boolean since 2.6.
206       * @deprecated since 4.2 Source import is done by the platform
207       */
208      @Deprecated
209      void saveSource(Resource reference, String source);
210    
211      // ----------- LINKS --------------
212    
213      /**
214       * add a link to an external page like project homepage, sources (subversion, ...), continuous integration server... Example :
215       * context.addLink(new ProjectLink("maven_site, "Maven site", "http://my.maven.com)
216       */
217      void saveLink(ProjectLink link);
218    
219      /**
220       * remove a link. It does not fail if key is unknown.
221       */
222      void deleteLink(String key);
223    
224      // ----------- EVENTS --------------
225    
226      /**
227       * @param resource set null for project events
228       */
229      List<Event> getEvents(Resource resource);
230    
231      /**
232       * Creates an event for a given date
233       *
234       * @param name        the event name
235       * @param description the event description
236       * @param category    the event category
237       * @param date        the event date
238       * @return the created event
239       */
240      Event createEvent(Resource resource, String name, String description, String category, Date date);
241    
242      /**
243       * Deletes an event
244       *
245       * @param event the event to delete
246       */
247      void deleteEvent(Event event);
248    
249      /**
250       * Experimental
251       * @since 4.2
252       */
253      Measure saveMeasure(InputFile inputFile, Metric metric, Double value);
254    
255      /**
256       * Experimental
257       * @since 4.2
258       */
259      Measure saveMeasure(InputFile inputFile, Measure measure);
260    }