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.measures.Measure;
023 import org.sonar.api.measures.MeasuresFilter;
024 import org.sonar.api.measures.Metric;
025 import org.sonar.api.resources.ProjectLink;
026 import org.sonar.api.resources.Resource;
027 import org.sonar.api.rules.Violation;
028
029 import java.util.Collection;
030 import java.util.Date;
031 import java.util.List;
032
033 /**
034 * @since 1.10
035 */
036 public interface SensorContext {
037
038 // ----------- MEASURES ON PROJECT --------------
039
040 /**
041 * Find a project measure
042 */
043 Measure getMeasure(Metric metric);
044
045 /**
046 * All measures of the project. Never return null.
047 */
048 <M> M getMeasures(MeasuresFilter<M> filter);
049
050 /**
051 * Add a measure on project
052 */
053 Measure saveMeasure(Measure measure);
054
055 /**
056 * Add a measure on project
057 */
058 Measure saveMeasure(Metric metric, Double value);
059
060
061 // ----------- MEASURES ON RESOURCES --------------
062 /**
063 * Find a measure for this project
064 */
065 Measure getMeasure(Resource resource, Metric metric);
066
067 /**
068 * Key is updated when saving the resource.
069 *
070 * @return the key as saved in database. Null if the resource is set as excluded.
071 */
072 String saveResource(Resource resource);
073
074 /**
075 * @return the resource associated to the key
076 */
077 Resource getResource(String key);
078
079 /**
080 * Find all measures for this project. Never return null.
081 */
082 <M> M getMeasures(Resource resource, MeasuresFilter<M> filter);
083
084 /**
085 * Add or update a measure.
086 * <p/>
087 * <p>The resource is automatically saved, so there is no need to execute the method saveResource(). Does nothing if the resource is set as excluded.</p>
088 */
089 Measure saveMeasure(Resource resource, Metric metric, Double value);
090
091 /**
092 * Add or update a measure.
093 * <p/>
094 * <p>The resource is automatically saved, so there is no need to execute the method saveResource(). Does nothing if the resource is set as excluded.</p>
095 */
096 Measure saveMeasure(Resource resource, Measure measure);
097
098
099 // ----------- RULE VIOLATIONS --------------
100
101 /**
102 * Saves a violation on a resource of the context
103 */
104 void saveViolation(Violation violation);
105
106 /**
107 * Saves a list of violations
108 */
109 void saveViolations(Collection<Violation> violations);
110
111 // ----------- FILE SOURCES --------------
112 /**
113 * Does nothing if the resource is set as excluded.
114 */
115 void saveSource(Resource resource, String source);
116
117
118 // ----------- LINKS --------------
119 /**
120 * add a link to an external page like project homepage, sources (subversion, ...), continuous integration server...
121 * Example : context.addLink(new ProjectLink("maven_site, "Maven site", "http://my.maven.com)
122 */
123 void saveLink(ProjectLink link);
124
125 /**
126 * remove a link. It does not fail if key is unknown.
127 */
128 void deleteLink(String key);
129
130
131 // ----------- EVENTS --------------
132
133 /**
134 * @param resource set null for project events
135 */
136 List<Event> getEvents(Resource resource);
137
138 /**
139 * Creates an event for a given date
140 *
141 * @param name the event name
142 * @param description the event description
143 * @param category the event category
144 * @param date the event date
145 * @return the created event
146 */
147 Event createEvent(Resource resource, String name, String description, String category, Date date);
148
149 /**
150 * Deletes an event
151 *
152 * @param event the event to delete
153 */
154 void deleteEvent(Event event);
155 }