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 */
020 package org.sonar.batch;
021
022 import org.sonar.api.batch.Event;
023 import org.sonar.api.batch.SensorContext;
024 import org.sonar.api.batch.SonarIndex;
025 import org.sonar.api.design.Dependency;
026 import org.sonar.api.measures.Measure;
027 import org.sonar.api.measures.MeasuresFilter;
028 import org.sonar.api.measures.Metric;
029 import org.sonar.api.resources.Project;
030 import org.sonar.api.resources.ProjectLink;
031 import org.sonar.api.resources.Resource;
032 import org.sonar.api.rules.Violation;
033
034 import java.util.Collection;
035 import java.util.Date;
036 import java.util.List;
037 import java.util.Set;
038
039 public 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 }