package org.hibernate.tool.stat;
import java.util.Map;
import org.hibernate.stat.SecondLevelCacheStatistics;
import org.hibernate.stat.Statistics;
import org.hibernate.internal.util.collections.IdentityMap;
public class StatisticsTreeModel extends AbstractTreeModel {
private final Statistics stats;
String queries = "Queries";
String entities = "Entities";
String collections = "Collections";
String secondlevelcache = "Cache";
Map<Object, Object> im = IdentityMap.instantiateSequenced( 10 );
public StatisticsTreeModel(Statistics stats) {
this.stats = stats;
}
public Object getChild(Object parent, int index) {
if(parent==stats) {
switch(index) {
case 0: return entities;
case 1: return collections;
case 2: return queries;
case 3: return secondlevelcache;
}
} else if(parent==entities) {
return stats.getEntityStatistics(stats.getEntityNames()[index]);
} else if(parent==collections) {
return stats.getCollectionStatistics(stats.getCollectionRoleNames()[index]);
} else if(parent==queries) {
return stats.getQueryStatistics(stats.getQueries()[index]);
} else if(parent==secondlevelcache) {
return stats.getSecondLevelCacheStatistics( stats.getSecondLevelCacheRegionNames()[index]);
} else if(parent instanceof SecondLevelCacheStatistics) {
SecondLevelCacheStatistics slcs = (SecondLevelCacheStatistics) parent;
return slcs.getEntries();
}
return null;
}
public int getChildCount(Object parent) {
if(parent==stats) {
return 4;
} else if(parent==entities) {
return stats.getEntityNames().length;
} else if(parent==collections) {
return stats.getCollectionRoleNames().length;
} else if(parent==queries) {
return stats.getQueries().length;
} else if(parent==secondlevelcache) {
return stats.getSecondLevelCacheRegionNames().length;
} else if(parent instanceof SecondLevelCacheStatistics) {
/*SecondLevelCacheStatistics stats = (SecondLevelCacheStatistics) parent;
return stats.getEntries().size();*/
}
return 0;
}
public int getIndexOfChild(Object parent, Object child) {
throw new IllegalAccessError();
//return 0;
}
public Object getRoot() {
return stats;
}
public boolean isLeaf(Object node) {
return false;
}
public boolean isQueries(Object o) {
return o==queries; // hack
}
public boolean isCollections(Object o) {
return o==collections; // hack
}
public boolean isEntities(Object o) {
return o==entities; // hack
}
public boolean isCache(Object o) {
return o==secondlevelcache;
}
public boolean isContainer(Object o) {
return isEntities( o ) || isQueries( o ) || isCollections( o ) || isCache( o );
}
}