package org.jboss.seam; import org.jboss.seam.contexts.Contexts; /** * Base class of metamodels. For a class which * is neither an entity nor a Seam component, * the concrete type of the metamodel object * will be Model. For components or entities * it is a subclass of Model. * * @author Gavin King * */ public class Model { private Class<?> beanClass; public Model(Class<?> beanClass) { this.beanClass = beanClass; } public final Class<?> getBeanClass() { return beanClass; } @SuppressWarnings("deprecation") public static Model forClass(Class clazz) { if ( !Contexts.isApplicationContextActive() ) { throw new IllegalStateException("No application context active"); } String name = getModelName(clazz); Model model = (Model) Contexts.getApplicationContext().get(name); if ( model==null ) { model = clazz.isAnnotationPresent(javax.persistence.Entity.class) ? new Entity(clazz) : new Model(clazz); Contexts.getApplicationContext().set(name, model); } return model; } static String getModelName(Class clazz) { return clazz.getName() + ".model"; } }