package ariba.ui.meta.jpa; import ariba.ui.meta.persistence.ContextBinder; import ariba.ui.meta.persistence.PersistenceMeta; import ariba.ui.meta.core.UIMeta; import ariba.ui.meta.core.ObjectMeta; import ariba.ui.aribaweb.util.AWJarWalker; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import javax.persistence.Entity; import javax.persistence.Embeddable; import javax.persistence.OneToMany; import javax.persistence.ManyToMany; import javax.persistence.Column; import java.lang.annotation.Annotation; import java.lang.reflect.AnnotatedElement; import java.util.List; import java.util.Map; public class Initialization { private static boolean _DidInit = false; public static void initialize () { if (_DidInit) return; _DidInit = true; PersistenceMeta.initialize(); // Set up JPAContext provider JPAContext.initialize(); // Auto-bind ObjectContexts to AWPages ContextBinder.initialize(); AWJarWalker.registerAnnotationListener(Entity.class, new AWJarWalker.AnnotationListener () { public void annotationDiscovered(String className, String annotationType) { Log.metajpa.debug("++++++++ Entity Annotation on class: " + className); PersistenceMeta.registerEntityClass(className); } }); AWJarWalker.registerAnnotationListener(Embeddable.class, new AWJarWalker.AnnotationListener () { public void annotationDiscovered(String className, String annotationType) { Log.metajpa.debug("++++++++ Embeddable Annotation on class: " + className); PersistenceMeta.registerEntityClass(className); } }); UIMeta.getInstance().registerAnnotationListener(OneToMany.class, new ObjectMeta.AnnotationProcessor() { public void processAnnotation(Annotation annotation, AnnotatedElement prop, List predicateList, Map propertyMap, boolean isAction) { if (!isAction) ObjectMeta.addTrait("ownedToMany", propertyMap); } }); UIMeta.getInstance().registerAnnotationListener(ManyToMany.class, new ObjectMeta.AnnotationProcessor() { public void processAnnotation(Annotation annotation, AnnotatedElement prop, List predicateList, Map propertyMap, boolean isAction) { if (!isAction) ObjectMeta.addTrait("manyToMany", propertyMap); } }); UIMeta.getInstance().registerAnnotationListener(Column.class, new ObjectMeta.AnnotationProcessor() { public void processAnnotation(Annotation annotation, AnnotatedElement prop, List predicateList, Map propertyMap, boolean isAction) { if (!((Column)annotation).nullable()) ObjectMeta.addTrait("required", propertyMap); } }); } }