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.apache.commons.lang.builder.ToStringBuilder;
023 import org.sonar.api.measures.Metric;
024 import org.sonar.api.resources.Resource;
025
026 import java.util.Arrays;
027 import java.util.Date;
028 import java.util.List;
029
030 /**
031 * A class to query TimeMachine on a given resource
032 * <p/>
033 * <p>The query is constructed by setting filters on metrics and on dates</p>
034 * <p>It is to be noted that all filters will be applied regardless of their coherence</p>
035 *
036 * @since 1.10
037 */
038 public class TimeMachineQuery {
039
040 private Resource resource;
041 private List<Metric> metrics;
042 private Date from;
043 private Date to;
044 private boolean onlyLastAnalysis = false;
045 private boolean fromCurrentAnalysis = false;
046 private boolean toCurrentAnalysis = false;
047
048 /**
049 * <p>Create a TimeMachine query for a given resource
050 * </p>
051 * Apart from the resource the query is empty, i.e. will return all data for the resource
052 *
053 * @param resource the resource
054 */
055 public TimeMachineQuery(Resource resource) {
056 this.resource = resource;
057 }
058
059 /**
060 * @return the resource of the Query
061 */
062 public Resource getResource() {
063 return resource;
064 }
065
066 /**
067 * Sets the resource of the query
068 *
069 * @param resource the resource
070 * @return this
071 */
072 public TimeMachineQuery setResource(Resource resource) {
073 this.resource = resource;
074 return this;
075 }
076
077 /**
078 * @return the metrics beloging to the query
079 */
080 public List<Metric> getMetrics() {
081 return metrics;
082 }
083
084 /**
085 * Sets the metrics to return
086 *
087 * @param metrics the list of metrics
088 * @return this
089 */
090 public TimeMachineQuery setMetrics(List<Metric> metrics) {
091 this.metrics = metrics;
092 return this;
093 }
094
095 /**
096 * Sets the metrics to return
097 *
098 * @param metrics the list of metrics
099 * @return this
100 */
101 public TimeMachineQuery setMetrics(Metric... metrics) {
102 this.metrics = Arrays.asList(metrics);
103 return this;
104 }
105
106 /**
107 * Unsets the metrics
108 *
109 * @return this
110 */
111 public TimeMachineQuery unsetMetrics() {
112 this.metrics = null;
113 return this;
114 }
115
116 /**
117 * @return the from date of the query
118 */
119 public Date getFrom() {
120 return from;
121 }
122
123 /**
124 * Sets the from date to be used in the query
125 *
126 * @param from the from date
127 * @return this
128 */
129 public TimeMachineQuery setFrom(Date from) {
130 this.from = from;
131 return this;
132 }
133
134 /**
135 * @param b whether to use the latest analysis as a from date
136 * @return this
137 */
138 public TimeMachineQuery setFromCurrentAnalysis(boolean b) {
139 this.fromCurrentAnalysis = b;
140 return this;
141 }
142
143 /**
144 * @param b whether to use the latest analysis as a to date
145 * @return this
146 */
147 public TimeMachineQuery setToCurrentAnalysis(boolean b) {
148 this.toCurrentAnalysis = b;
149 return this;
150 }
151
152 /**
153 * @return whether the latest analysis is used as a from date
154 */
155 public boolean isFromCurrentAnalysis() {
156 return fromCurrentAnalysis;
157 }
158
159 /**
160 * @return whether the latest analysis is used as a to date
161 */
162 public boolean isToCurrentAnalysis() {
163 return toCurrentAnalysis;
164 }
165
166 /**
167 * @return the to date of the query
168 */
169 public Date getTo() {
170 return to;
171 }
172
173 /**
174 * Sets the to date to be used in the query
175 *
176 * @param to the to date
177 * @return this
178 */
179 public TimeMachineQuery setTo(Date to) {
180 this.to = to;
181 return this;
182 }
183
184 /**
185 * @return whether to return only the latest analysis
186 */
187 public boolean isOnlyLastAnalysis() {
188 return onlyLastAnalysis;
189 }
190
191 /**
192 *
193 * @param onlyLastAnalysis whether to only return the latest analysis
194 * @return this
195 */
196 public TimeMachineQuery setOnlyLastAnalysis(boolean onlyLastAnalysis) {
197 this.onlyLastAnalysis = onlyLastAnalysis;
198 return this;
199 }
200
201 @Override
202 public String toString() {
203 return new ToStringBuilder(this)
204 .append("resource", resource)
205 .append("metrics", metrics)
206 .append("from", from)
207 .append("to", to)
208 .toString();
209 }
210 }