001 /* 002 * Sonar, open source software quality management tool. 003 * Copyright (C) 2009 SonarSource SA 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.api.batch; 021 022 import org.sonar.api.design.Dependency; 023 import org.sonar.api.measures.Measure; 024 import org.sonar.api.measures.MeasuresFilter; 025 import org.sonar.api.measures.Metric; 026 import org.sonar.api.resources.ProjectLink; 027 import org.sonar.api.resources.Resource; 028 import org.sonar.api.rules.Violation; 029 030 import java.util.Collection; 031 import java.util.Date; 032 import java.util.List; 033 import java.util.Set; 034 035 /** 036 * @since 1.10 037 */ 038 public interface SensorContext { 039 040 // ----------- MEASURES ON PROJECT -------------- 041 042 /** 043 * Find a project measure 044 */ 045 Measure getMeasure(Metric metric); 046 047 /** 048 * All measures of the project. Never return null. 049 */ 050 <M> M getMeasures(MeasuresFilter<M> filter); 051 052 /** 053 * Add a measure on project 054 */ 055 Measure saveMeasure(Measure measure); 056 057 /** 058 * Add a measure on project 059 */ 060 Measure saveMeasure(Metric metric, Double value); 061 062 // ----------- MEASURES ON RESOURCES -------------- 063 064 /** 065 * Find a measure for this project 066 */ 067 Measure getMeasure(Resource resource, Metric metric); 068 069 /** 070 * Key is updated when saving the resource. 071 * 072 * @return the key as saved in database. Null if the resource is set as excluded. 073 */ 074 String saveResource(Resource resource); 075 076 /** 077 * @return the resource saved in sonar index 078 */ 079 Resource getResource(Resource resource); 080 081 /** 082 * Find all measures for this project. Never return null. 083 */ 084 <M> M getMeasures(Resource resource, MeasuresFilter<M> filter); 085 086 /** 087 * Add or update a measure. 088 * <p> 089 * The resource is automatically saved, so there is no need to execute the method saveResource(). Does nothing if the resource is set as 090 * excluded. 091 * </p> 092 */ 093 Measure saveMeasure(Resource resource, Metric metric, Double value); 094 095 /** 096 * Add or update a measure. 097 * <p> 098 * The resource is automatically saved, so there is no need to execute the method saveResource(). Does nothing if the resource is set as 099 * excluded. 100 * </p> 101 */ 102 Measure saveMeasure(Resource resource, Measure measure); 103 104 // ----------- RULE VIOLATIONS -------------- 105 106 /** 107 * Save a coding rule violation. 108 * 109 * @since 2.5 110 * @param force allows to force creation of violation even if it was supressed by {@link org.sonar.api.rules.ViolationFilter} 111 */ 112 void saveViolation(Violation violation, boolean force); 113 114 /** 115 * Save a coding rule violation. 116 */ 117 void saveViolation(Violation violation); 118 119 /** 120 * Saves a list of violations. 121 */ 122 void saveViolations(Collection<Violation> violations); 123 124 // ----------- DEPENDENCIES BETWEEN RESOURCES -------------- 125 126 /** 127 * Build a new dependency : from depends upon to. The dependency is NOT saved. The method saveDependency() must still be executed. 128 */ 129 Dependency saveDependency(Dependency dependency); 130 131 Set<Dependency> getDependencies(); 132 133 Collection<Dependency> getIncomingDependencies(Resource to); 134 135 Collection<Dependency> getOutgoingDependencies(Resource from); 136 137 // ----------- FILE SOURCES -------------- 138 139 /** 140 * Does nothing if the resource is set as excluded. 141 */ 142 void saveSource(Resource resource, String source); 143 144 // ----------- LINKS -------------- 145 146 /** 147 * add a link to an external page like project homepage, sources (subversion, ...), continuous integration server... Example : 148 * context.addLink(new ProjectLink("maven_site, "Maven site", "http://my.maven.com) 149 */ 150 void saveLink(ProjectLink link); 151 152 /** 153 * remove a link. It does not fail if key is unknown. 154 */ 155 void deleteLink(String key); 156 157 // ----------- EVENTS -------------- 158 159 /** 160 * @param resource set null for project events 161 */ 162 List<Event> getEvents(Resource resource); 163 164 /** 165 * Creates an event for a given date 166 * 167 * @param name the event name 168 * @param description the event description 169 * @param category the event category 170 * @param date the event date 171 * @return the created event 172 */ 173 Event createEvent(Resource resource, String name, String description, String category, Date date); 174 175 /** 176 * Deletes an event 177 * 178 * @param event the event to delete 179 */ 180 void deleteEvent(Event event); 181 182 }