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 }