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    }