package org.hivedb.configuration; import org.hivedb.HiveRuntimeException; import org.hivedb.util.Lists; import org.hivedb.util.functional.DebugMap; import java.util.Arrays; import java.util.Collection; import java.util.List; import java.util.Map; public class PluralHiveConfig implements EntityHiveConfig { private Map<String,EntityConfig> indexConfigurations = new DebugMap<String, EntityConfig>(); private String dimensionName; private Class<?> dimensionClass; public PluralHiveConfig(Map<String, EntityConfig> map, String dimensionName, Class<?> dimensionClass) { this.indexConfigurations = map; this.dimensionClass = dimensionClass; this.dimensionName = dimensionName; } @SuppressWarnings("unchecked") public EntityConfig getEntityConfig(Class<?> clazz) { EntityConfig config = indexConfigurations.get(clazz.getName()); if(config == null){ List<Class> ancestors = getAncestors(clazz); for(Class ancestor : ancestors) { if(indexConfigurations.containsKey(ancestor.getName())){ config = indexConfigurations.get(ancestor.getName()); break; } } } return config; } @SuppressWarnings("unchecked") public EntityConfig getEntityConfig(String className) { Class clazz = null; try { clazz = Class.forName(className); } catch (ClassNotFoundException e) { throw new HiveRuntimeException(e.getMessage(),e); } return getEntityConfig(clazz); } @SuppressWarnings("unchecked") private List<Class> getAncestors(Class<?> clazz) { List<Class> ancestors = Lists.newArrayList(); if (!clazz.isInterface()) ancestors.add(clazz.getSuperclass()); ancestors.addAll(Arrays.asList(clazz.getInterfaces())); return ancestors; } public void add(String className, EntityConfig config) { this.indexConfigurations.put(className, config); } public Collection<EntityConfig> getEntityConfigs() { return indexConfigurations.values(); } public String getPartitionDimensionName() { return this.dimensionName; } public Class<?> getPartitionDimensionType() { return this.dimensionClass; } }