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 */
020package org.sonar.api.batch;
021
022import org.sonar.api.design.Dependency;
023import org.sonar.api.measures.Measure;
024import org.sonar.api.measures.MeasuresFilter;
025import org.sonar.api.resources.Project;
026import org.sonar.api.resources.ProjectLink;
027import org.sonar.api.resources.Resource;
028import org.sonar.api.rules.Violation;
029import org.sonar.api.violations.ViolationQuery;
030import org.sonar.graph.DirectedGraphAccessor;
031
032import javax.annotation.CheckForNull;
033
034import java.util.Collection;
035import java.util.Date;
036import java.util.List;
037import java.util.Set;
038
039/**
040 * @deprecated since 4.5.2 should not be used by plugins.
041 */
042@Deprecated
043public abstract class SonarIndex implements DirectedGraphAccessor<Resource, Dependency> {
044
045  /**
046   * Indexes a resource as a direct child of project. This method does nothing and returns true if the resource already indexed.
047   * If the method resource.getParent() does not return null, then this parent will be indexed too.
048   *
049   * @return false if the resource is excluded
050   * @since 2.6
051   */
052  public abstract boolean index(Resource resource);
053
054  /**
055   * Indexes a resource. This method does nothing if the resource is already indexed.
056   *
057   * @param resource        the resource to index. Not nullable
058   * @param parentReference a reference to the indexed parent. If null, the resource is indexed as a direct child of project.
059   * @return false if the parent is not indexed or if the resource is excluded
060   * @since 2.6
061   */
062  public abstract boolean index(Resource resource, Resource parentReference);
063
064  /**
065   * Returns true if the referenced resource is excluded. An excluded resource is not indexed.
066   * @since 2.6
067   */
068  public abstract boolean isExcluded(Resource reference);
069
070  /**
071   * @since 2.6
072   */
073  public abstract boolean isIndexed(Resource reference, boolean acceptExcluded);
074
075  /**
076   * Search for an indexed resource.
077   *
078   * @param reference the resource reference
079   * @return the indexed resource, null if it's not indexed
080   * @since 1.10. Generic types since 2.6.
081   */
082  public abstract <R extends Resource> R getResource(R reference);
083
084  /**
085   * @since 2.6
086   */
087  public abstract Resource getParent(Resource reference);
088
089  /**
090   * @since 2.6
091   */
092
093  public abstract Collection<Resource> getChildren(Resource reference);
094
095  /**
096   * Save the source code of a file. The file must be have been indexed before.
097   * Note: the source stream is not closed.
098   *
099   * @throws org.sonar.api.resources.DuplicatedSourceException
100   *          if the source has already been set on this resource
101   * @deprecated since 4.2 should not be used by plugins
102   */
103  @Deprecated
104  public abstract void setSource(Resource reference, String source);
105
106  /**
107   * @return source code associated with a specified resource, <code>null</code> if not available 
108   * (for example when sonar.importSources=false)
109   * @since 2.9
110   */
111  @CheckForNull
112  public abstract String getSource(Resource resource);
113
114  public abstract Project getProject();
115
116  public final Collection<Resource> getResources() {
117    return getVertices();
118  }
119
120  /**
121   * Indexes the resource.
122   * @return the indexed resource, even if it's excluded
123   * @deprecated since 2.6. Use methods index()
124   */
125  @Deprecated
126  public abstract Resource addResource(Resource resource);
127
128  @CheckForNull
129  public abstract Measure getMeasure(Resource resource, org.sonar.api.batch.measure.Metric<?> metric);
130
131  @CheckForNull
132  public abstract <M> M getMeasures(Resource resource, MeasuresFilter<M> filter);
133
134  /**
135   * Returns the violations that match the {@link ViolationQuery} parameters.
136   *
137   * @since 2.8
138   * @param violationQuery
139   *          the request parameters specified as a {@link ViolationQuery}
140   * @return the list of violations that match those parameters
141   * @deprecated in 3.6
142   */
143  @Deprecated
144  public abstract List<Violation> getViolations(ViolationQuery violationQuery);
145
146  /**
147   * Returns all the active (= non switched-off) violations found on the given resource. Equivalent to
148   * {@link #getViolations(ViolationQuery)} called with <code>ViolationQuery.create().forResource(resource).ignoreSwitchedOff(true)</code>
149   * as a parameter.
150   *
151   * @since 2.7
152   * @return the list of violations
153   * @deprecated in 3.6
154   */
155  @Deprecated
156  public final List<Violation> getViolations(Resource resource) {
157    return getViolations(ViolationQuery.create().forResource(resource));
158  }
159
160  /**
161   * @since 2.5
162   * @deprecated in 3.6
163   */
164  @Deprecated
165  public abstract void addViolation(Violation violation, boolean force);
166
167  /**
168   * @deprecated in 3.6
169   */
170  @Deprecated
171  public final void addViolation(Violation violation) {
172    addViolation(violation, false);
173  }
174
175  /**
176   * Warning: the resource is automatically indexed for backward-compatibility, but it should be explictly
177   * indexed before. Next versions will deactivate this automatic indexation.
178   */
179  public abstract Measure addMeasure(Resource resource, Measure measure);
180
181  public abstract Dependency addDependency(Dependency dependency);
182
183  public abstract Set<Dependency> getDependencies();
184
185  public abstract void addLink(ProjectLink link);
186
187  public abstract void deleteLink(String key);
188
189  public abstract List<Event> getEvents(Resource resource);
190
191  public abstract void deleteEvent(Event event);
192
193  public abstract Event addEvent(Resource resource, String name, String description, String category, Date date);
194
195  public final Collection<Dependency> getOutgoingDependencies(Resource from) {
196    return getOutgoingEdges(from);
197  }
198
199  public final Collection<Dependency> getIncomingDependencies(Resource to) {
200    return getIncomingEdges(to);
201  }
202}