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    }