package fr.openwide.core.test.metamodel;
import java.util.List;
import javax.persistence.metamodel.Attribute;
import javax.persistence.metamodel.EntityType;
import org.junit.Assert;
import org.junit.Test;
import com.google.common.collect.Lists;
import fr.openwide.core.test.AbstractJpaCoreTestCase;
import fr.openwide.core.test.business.person.model.Person;
import fr.openwide.core.test.business.person.model.PersonSubTypeA;
import fr.openwide.core.test.business.person.model.QPerson;
public class TestMetaModel extends AbstractJpaCoreTestCase {
@Test
public void testMetaModel() throws NoSuchFieldException, SecurityException {
try {
super.testMetaModel();
Assert.fail("");
} catch (IllegalStateException e) {
}
// lien vers un objet non primitif
EntityType<?> personEntityType = getEntityManager().getMetamodel().entity(Person.class);
Attribute<?, ?> otherPersonAttribute = personEntityType.getAttribute(QPerson.person.otherPerson.getMetadata().getName());
try {
List<Class<?>> classes = Lists.newArrayList();
super.testMetaModel(otherPersonAttribute, classes);
Assert.fail("");
} catch (IllegalStateException e) {
// on n'autorise pas le lien vers un objet de type inconnu (car va être sérialisé en base)
}
{
List<Class<?>> classes = Lists.newArrayList();
classes.add(PersonSubTypeA.class);
super.testMetaModel(otherPersonAttribute, classes);
}
try {
// lien vers une énumération ordinale
Attribute<?, ?> enumerationAttribute = personEntityType.getAttribute(QPerson.person.enumeration.getMetadata().getName());
List<Class<?>> classes = Lists.newArrayList();
super.testMetaModel(enumerationAttribute, classes);
Assert.fail("");
} catch (IllegalStateException e) {
// on n'autorise pas le lien vers une énumération ordinale
}
{
// lien vers une énumération textuelle
Attribute<?, ?> enumerationStringAttribute = personEntityType.getAttribute(QPerson.person.enumerationString.getMetadata().getName());
List<Class<?>> classes = Lists.newArrayList();
super.testMetaModel(enumerationStringAttribute, classes);
}
try {
// lien vers une liste énumération ordinale
Attribute<?, ?> enumerationListAttribute = personEntityType.getAttribute(QPerson.person.enumList.getMetadata().getName());
List<Class<?>> classes = Lists.newArrayList();
super.testMetaModel(enumerationListAttribute, classes);
Assert.fail("");
} catch (IllegalStateException e) {
// on n'autorise pas le lien vers une liste d'énumération ordinale
}
{
// lien vers une liste énumération textuelle
Attribute<?, ?> enumerationListStringAttribute = personEntityType.getAttribute(QPerson.person.enumListString.getMetadata().getName());
List<Class<?>> classes = Lists.newArrayList();
super.testMetaModel(enumerationListStringAttribute, classes);
}
try {
// lien vers une map clé d'énumération ordinale
Attribute<?, ?> enumerationMapAttribute = personEntityType.getAttribute(QPerson.person.enumMap.getMetadata().getName());
List<Class<?>> classes = Lists.newArrayList();
super.testMetaModel(enumerationMapAttribute, classes);
Assert.fail("");
} catch (IllegalStateException e) {
// on n'autorise pas le lien vers une énumération ordinale
}
{
// lien vers une map clé d'énumération textuelle
Attribute<?, ?> enumerationMapStringAttribute = personEntityType.getAttribute(QPerson.person.enumMapString.getMetadata().getName());
List<Class<?>> classes = Lists.newArrayList();
super.testMetaModel(enumerationMapStringAttribute, classes);
}
try {
// lien vers une map valeur énumération ordinale
Attribute<?, ?> enumerationMapValueAttribute = personEntityType.getAttribute(QPerson.person.enumMapValue.getMetadata().getName());
List<Class<?>> classes = Lists.newArrayList();
super.testMetaModel(enumerationMapValueAttribute, classes);
Assert.fail("");
} catch (IllegalStateException e) {
// on n'autorise pas le lien vers une énumération ordinale
}
{
// lien vers une map clé d'énumération textuelle
Attribute<?, ?> enumerationMapValueStringAttribute = personEntityType.getAttribute(QPerson.person.enumMapValueString.getMetadata().getName());
List<Class<?>> classes = Lists.newArrayList();
super.testMetaModel(enumerationMapValueStringAttribute, classes);
}
}
}