001 /* 002 @license.text@ 003 */ 004 package biz.hammurapi.metrics.persistent; 005 006 import java.sql.SQLException; 007 import java.util.ArrayList; 008 import java.util.Collection; 009 import java.util.Iterator; 010 import java.util.StringTokenizer; 011 012 import biz.hammurapi.sql.SQLProcessor; 013 014 /** 015 * Locates metric id by name (path) 016 * @author Pavel Vlasov 017 * @version $Revision$ 018 */ 019 public class MetricLocator { 020 private MetricsEngine engine; 021 022 public MetricLocator(SQLProcessor processor) { 023 engine=new MetricsEngine(processor); 024 } 025 026 MetricLocator(MetricsEngine engine) { 027 this.engine=engine; 028 } 029 030 public int[] findRoots() throws SQLException { 031 Collection roots=engine.getOrderedRootMetrics(new ArrayList()); 032 int[] ret=new int[roots.size()]; 033 Iterator it=roots.iterator(); 034 for (int i=0; it.hasNext(); i++) { 035 ret[i]=((Number) it.next()).intValue(); 036 } 037 return ret; 038 } 039 040 041 public Number find(String category) throws SQLException { 042 Number ret=null; 043 if (category!=null) { 044 StringTokenizer st=new StringTokenizer(category, "."); 045 while (st.hasMoreTokens()) { 046 String nextToken = st.nextToken(); 047 if (ret==null) { 048 ret=engine.getRootMetricId(nextToken); 049 } else { 050 ret=engine.getMetricId(ret.intValue(),nextToken); 051 } 052 053 if (ret==null) { 054 break; 055 } 056 } 057 } 058 return ret; 059 } 060 061 public Number find(int root, String category) throws SQLException { 062 Number ret=new Integer(root); 063 if (category!=null) { 064 StringTokenizer st=new StringTokenizer(category, "."); 065 while (st.hasMoreTokens()) { 066 String nextToken = st.nextToken(); 067 if (ret==null) { 068 ret=engine.getRootMetricId(nextToken); 069 } else { 070 ret=engine.getMetricId(ret.intValue(),nextToken); 071 } 072 073 if (ret==null) { 074 break; 075 } 076 } 077 } 078 return ret; 079 } 080 081 }