001 /* 002 * Sonar, open source software quality management tool. 003 * Copyright (C) 2008-2011 SonarSource 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.core.metric; 021 022 import com.google.common.collect.Lists; 023 import com.google.common.collect.Maps; 024 import org.sonar.api.measures.Metric; 025 import org.sonar.jpa.session.DatabaseSessionFactory; 026 027 import java.util.Collection; 028 import java.util.List; 029 import java.util.Map; 030 031 public final class CacheMetricFinder extends DefaultMetricFinder { 032 033 private Map<String, Metric> metricsByKey = Maps.newLinkedHashMap(); 034 private Map<Integer, Metric> metricsById = Maps.newLinkedHashMap(); 035 036 public CacheMetricFinder(DatabaseSessionFactory sessionFactory) { 037 super(sessionFactory); 038 } 039 040 public void start() { 041 Collection<Metric> metrics = doFindAll(); 042 for (Metric metric : metrics) { 043 metricsByKey.put(metric.getKey(), metric); 044 metricsById.put(metric.getId(), metric); 045 } 046 } 047 048 @Override 049 public Metric findById(int metricId) { 050 return metricsById.get(metricId); 051 } 052 053 @Override 054 public Metric findByKey(String key) { 055 return metricsByKey.get(key); 056 } 057 058 @Override 059 public Collection<Metric> findAll(List<String> metricKeys) { 060 List<Metric> result = Lists.newLinkedList(); 061 for (String metricKey : metricKeys) { 062 Metric metric = findByKey(metricKey); 063 if (metric != null) { 064 result.add(metric); 065 } 066 } 067 return result; 068 } 069 070 @Override 071 public Collection<Metric> findAll() { 072 return metricsByKey.values(); 073 } 074 }