import com.google.common.collect.Maps;
import org.apache.commons.lang.ObjectUtils;
+import org.apache.commons.lang.StringUtils;
import org.sonar.api.BatchExtension;
import org.sonar.api.database.DatabaseSession;
import org.sonar.api.database.model.Snapshot;
import org.sonar.api.resources.Qualifiers;
import org.sonar.api.resources.Resource;
+import javax.annotation.Nullable;
+import javax.persistence.Query;
+
import java.util.Collection;
import java.util.Collections;
import java.util.List;
public List<Object[]> getPastMeasures(Resource resource, PastSnapshot projectPastSnapshot) {
if (projectPastSnapshot != null && projectPastSnapshot.getProjectSnapshot() != null) {
- return getPastMeasures(resource.getEffectiveKey(), projectPastSnapshot.getProjectSnapshot());
+ return getPastMeasures(resource.getEffectiveKey(), resource.getPath(), projectPastSnapshot.getProjectSnapshot());
}
return Collections.emptyList();
}
public List<Object[]> getPastMeasures(String resourceKey, Snapshot projectPastSnapshot) {
+ return getPastMeasures(resourceKey, null, projectPastSnapshot);
+ }
+
+ public List<Object[]> getPastMeasures(String resourceKey, @Nullable String path, Snapshot projectPastSnapshot) {
String sql = "select m.metric_id, m.characteristic_id, m.person_id, m.rule_id, m.value from project_measures m, snapshots s" +
" where m.snapshot_id=s.id and m.metric_id in (:metricIds) " +
" and (s.root_snapshot_id=:rootSnapshotId or s.id=:rootSnapshotId) " +
- " and s.status=:status and s.project_id=(select p.id from projects p where p.kee=:resourceKey and p.qualifier<>:lib)";
- return session.createNativeQuery(sql)
+ " and s.status=:status and s.project_id=(select p.id from projects p where p.kee=:resourceKey and p.qualifier<>:lib"
+ + (StringUtils.isNotBlank(path) ? " and p.path=:path" : "")
+ + ")";
+ Query q = session.createNativeQuery(sql)
.setParameter("metricIds", metricByIds.keySet())
.setParameter("rootSnapshotId", ObjectUtils.defaultIfNull(projectPastSnapshot.getRootId(), projectPastSnapshot.getId()))
.setParameter("resourceKey", resourceKey)
.setParameter("lib", Qualifiers.LIBRARY)
- .setParameter("status", Snapshot.STATUS_PROCESSED)
- .getResultList();
+ .setParameter("status", Snapshot.STATUS_PROCESSED);
+ if (StringUtils.isNotBlank(path)) {
+ q.setParameter("path", path);
+ }
+ return q.getResultList();
}
public static int getMetricId(Object[] row) {