001 /* 002 @license.text@ 003 */ 004 package biz.hammurapi.metrics.persistent; 005 006 import java.sql.SQLException; 007 import java.util.Iterator; 008 009 import biz.hammurapi.sql.SQLProcessor; 010 011 /** 012 * Normalizes metric names - eliminates duplicates. 013 * @author Pavel Vlasov 014 * @version $Revision$ 015 */ 016 public class MetricNormalizer { 017 private MetricsEngine engine; 018 019 public MetricNormalizer(SQLProcessor processor) { 020 engine=new MetricsEngine(processor); 021 } 022 023 MetricNormalizer(MetricsEngine engine) { 024 this.engine=engine; 025 } 026 027 public void normalize() throws SQLException { 028 for (boolean needToContinue=true; needToContinue;) { 029 needToContinue=false; 030 Metric prev=null; 031 Iterator it=engine.getMetricsToNormalize().iterator(); 032 while (it.hasNext()) { 033 needToContinue=true; 034 Metric metric=(Metric) it.next(); 035 if (prev!=null 036 && (metric.getParent()==null ? prev.getParent()==null : metric.getParent().equals(prev.getParent())) 037 && metric.getName().equals(prev.getName())) { 038 039 engine.moveSlices(prev.getId(), metric.getId()); 040 engine.moveChildren(prev.getId(), metric.getId()); 041 engine.deleteMetric(metric.getId()); 042 } else { 043 prev=metric; 044 } 045 } 046 } 047 } 048 }