/**
*
*/
package org.minnal.instrument.resource;
import org.minnal.instrument.NamingStrategy;
import org.minnal.instrument.entity.EntityNode;
import org.minnal.instrument.entity.EntityNode.EntityNodePath;
import org.minnal.instrument.resource.metadata.ResourceMetaData;
import org.minnal.utils.Node.PathVisitor;
/**
* @author ganeshs
*
*/
public class ResourceEnhancer implements PathVisitor<EntityNodePath, EntityNode> {
private ResourceMetaData resource;
private Class<?> entityClass;
private ResourceWrapper resourceWrapper;
private NamingStrategy namingStrategy;
/**
* @param resource
* @param entityClass
*/
public ResourceEnhancer(ResourceMetaData resource, Class<?> entityClass, NamingStrategy namingStrategy) {
this.resource = resource;
this.entityClass = entityClass;
this.namingStrategy = namingStrategy;
}
/**
* Enhances the resource an returns the enhanced class
*
* @return
*/
public Class<?> enhance() {
resourceWrapper = createResourceWrapper();
EntityNode tree = new EntityNode(entityClass, namingStrategy);
tree.construct();
tree.traverse(this);
return resourceWrapper.wrap();
}
public void visit(EntityNodePath path) {
resourceWrapper.addPath(path);
}
/**
* Creates the resource wrapper
*
* @return
*/
protected ResourceWrapper createResourceWrapper() {
return new ResourceWrapper(resource, entityClass);
}
}