001    package org.sonar.core.components;
002    
003    import com.google.common.collect.Lists;
004    import org.sonar.api.measures.Metric;
005    import org.sonar.api.measures.MetricFinder;
006    import org.sonar.jpa.session.DatabaseSessionFactory;
007    
008    import java.util.Collection;
009    import java.util.List;
010    
011    public class DefaultMetricFinder implements MetricFinder {
012    
013      private DatabaseSessionFactory sessionFactory;
014    
015      public DefaultMetricFinder(DatabaseSessionFactory sessionFactory) {
016        this.sessionFactory = sessionFactory;
017      }
018    
019      public Metric findById(int id) {
020        return sessionFactory.getSession().getSingleResult(Metric.class, "id", id, "enabled", true);
021      }
022    
023      public Metric findByKey(String key) {
024        return sessionFactory.getSession().getSingleResult(Metric.class, "key", key, "enabled", true);
025      }
026    
027      public Collection<Metric> findAll(List<String> metricKeys) {
028        List<Metric> result = Lists.newLinkedList();
029        for (String metricKey : metricKeys) {
030          Metric metric = findByKey(metricKey);
031          if (metric != null) {
032            result.add(metric);
033          }
034        }
035        return result;
036      }
037    
038      public Collection<Metric> findAll() {
039        return doFindAll();
040      }
041    
042      protected Collection<Metric> doFindAll() {
043        return sessionFactory.getSession().getResults(Metric.class, "enabled", true);
044      }
045    
046    }