001/*
002 * Sonar, open source software quality management tool.
003 * Copyright (C) 2008-2012 SonarSource
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 */
020package org.sonar.batch;
021
022import org.sonar.api.batch.Event;
023import org.sonar.api.batch.SensorContext;
024import org.sonar.api.batch.SonarIndex;
025import org.sonar.api.design.Dependency;
026import org.sonar.api.measures.Measure;
027import org.sonar.api.measures.MeasuresFilter;
028import org.sonar.api.measures.Metric;
029import org.sonar.api.resources.Project;
030import org.sonar.api.resources.ProjectLink;
031import org.sonar.api.resources.Resource;
032import org.sonar.api.rules.Violation;
033
034import java.util.Collection;
035import java.util.Date;
036import java.util.List;
037import java.util.Set;
038
039public class DefaultSensorContext implements SensorContext {
040
041  private SonarIndex index;
042  private Project project;
043
044  public DefaultSensorContext(SonarIndex index, Project project) {
045    this.index = index;
046    this.project = project;
047  }
048
049  public Project getProject() {
050    return project;
051  }
052
053  public boolean index(Resource resource) {
054    return index.index(resource);
055  }
056
057  public boolean index(Resource resource, Resource parentReference) {
058    return index.index(resource, parentReference);
059  }
060
061  public boolean isExcluded(Resource reference) {
062    return index.isExcluded(reference);
063  }
064
065  public boolean isIndexed(Resource reference, boolean acceptExcluded) {
066    return index.isIndexed(reference, acceptExcluded);
067  }
068
069  public Resource getParent(Resource reference) {
070    return index.getParent(reference);
071  }
072
073  public Collection<Resource> getChildren(Resource reference) {
074    return index.getChildren(reference);
075  }
076
077  public Measure getMeasure(Metric metric) {
078    return index.getMeasure(project, metric);
079  }
080
081  public <M> M getMeasures(MeasuresFilter<M> filter) {
082    return index.getMeasures(project, filter);
083  }
084
085  public Measure saveMeasure(Measure measure) {
086    return index.addMeasure(project, measure);
087  }
088
089  public Measure saveMeasure(Metric metric, Double value) {
090    return index.addMeasure(project, new Measure(metric, value));
091  }
092
093  public Measure getMeasure(Resource resource, Metric metric) {
094    return index.getMeasure(resource, metric);
095  }
096
097  public String saveResource(Resource resource) {
098    Resource persistedResource = index.addResource(resource);
099    if (persistedResource != null) {
100      return persistedResource.getEffectiveKey();
101    }
102    return null;
103  }
104
105  public boolean saveResource(Resource resource, Resource parentReference) {
106    return index.index(resource, parentReference);
107  }
108
109  public Resource getResource(Resource resource) {
110    return index.getResource(resource);
111  }
112
113  public <M> M getMeasures(Resource resource, MeasuresFilter<M> filter) {
114    return index.getMeasures(resource, filter);
115  }
116
117  public Measure saveMeasure(Resource resource, Metric metric, Double value) {
118    return index.addMeasure(resourceOrProject(resource), new Measure(metric, value));
119  }
120
121  public Measure saveMeasure(Resource resource, Measure measure) {
122    return index.addMeasure(resourceOrProject(resource), measure);
123  }
124
125  public void saveViolation(Violation violation, boolean force) {
126    if (violation.getResource() == null) {
127      violation.setResource(resourceOrProject(violation.getResource()));
128    }
129    index.addViolation(violation, force);
130  }
131
132  public void saveViolation(Violation violation) {
133    saveViolation(violation, false);
134  }
135
136  public void saveViolations(Collection<Violation> violations) {
137    if (violations != null) {
138      for (Violation violation : violations) {
139        saveViolation(violation);
140      }
141    }
142  }
143
144  public Dependency saveDependency(Dependency dependency) {
145    return index.addDependency(dependency);
146  }
147
148  public Set<Dependency> getDependencies() {
149    return index.getDependencies();
150  }
151
152  public Collection<Dependency> getIncomingDependencies(Resource to) {
153    return index.getIncomingEdges(resourceOrProject(to));
154  }
155
156  public Collection<Dependency> getOutgoingDependencies(Resource from) {
157    return index.getOutgoingEdges(resourceOrProject(from));
158  }
159
160  public void saveSource(Resource reference, String source) {
161    index.setSource(reference, source);
162  }
163
164  public void saveLink(ProjectLink link) {
165    index.addLink(link);
166  }
167
168  public void deleteLink(String key) {
169    index.deleteLink(key);
170  }
171
172  public List<Event> getEvents(Resource resource) {
173    return index.getEvents(resource);
174  }
175
176  public Event createEvent(Resource resource, String name, String description, String category, Date date) {
177    return index.addEvent(resource, name, description, category, date);
178  }
179
180  public void deleteEvent(Event event) {
181    index.deleteEvent(event);
182  }
183
184  private Resource resourceOrProject(Resource resource) {
185    return (resource != null ? resource : project);
186  }
187}