package com.googlecode.tawus.internal; import java.util.HashSet; import java.util.Set; import org.apache.tapestry5.ioc.internal.services.ClassNameLocatorImpl; import org.apache.tapestry5.ioc.internal.services.ClasspathURLConverterImpl; import org.apache.tapestry5.ioc.services.ClassNameLocator; import com.googlecode.tawus.internal.def.EntityDef; import com.googlecode.tawus.services.EntityLocator; public abstract class AbstractEntityLocator implements EntityLocator { private Set<EntityDef> entityDefs = new HashSet<EntityDef>(); public AbstractEntityLocator(Set<String> packageNames) { ClassNameLocator locator = new ClassNameLocatorImpl(new ClasspathURLConverterImpl()); for(String packageName : packageNames) { for(String className : locator.locateClassNames(packageName)) { try { final Class<?> entityClass = Class.forName(className); if(isEntity(entityClass)) { entityDefs.add(new EntityDef() { public String getServiceId() { return entityClass.getSimpleName() + "DAO"; } public Class<?> getType() { return entityClass; } @Override public String toString() { return "Entity Definition for " + getServiceId(); } }); } } catch(ClassNotFoundException e) { throw new RuntimeException(e); } } } } public abstract boolean isEntity(Class<?> entityClass); public Set<EntityDef> getEntityDefs() { return entityDefs; } }