package org.molgenis.test.data; import org.molgenis.data.Entity; import org.molgenis.data.meta.AttributeType; import org.molgenis.data.meta.model.*; import org.molgenis.data.support.DynamicEntity; import org.molgenis.data.support.EntityWithComputedAttributes; import org.molgenis.test.data.staticentity.TestEntityStaticMetaData; import org.molgenis.test.data.staticentity.TestRefEntityStaticMetaData; import org.molgenis.util.MolgenisDateFormat; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; import java.text.DateFormat; import java.text.ParseException; import java.util.Collections; import java.util.Date; import java.util.List; import java.util.stream.IntStream; import java.util.stream.Stream; import static java.util.stream.Collectors.toList; import static org.molgenis.data.meta.AttributeType.*; import static org.molgenis.data.meta.model.EntityType.AttributeRole.ROLE_ID; import static org.molgenis.data.meta.model.EntityType.AttributeRole.ROLE_LABEL; @Component public class EntityTestHarness { public static final String ATTR_ID = "id_attr"; public static final String ATTR_STRING = "string_attr"; public static final String ATTR_BOOL = "bool_attr"; public static final String ATTR_CATEGORICAL = "categorical_attr"; public static final String ATTR_CATEGORICAL_MREF = "categorical_mref_attr"; public static final String ATTR_DATE = "date_attr"; public static final String ATTR_DATETIME = "datetime_attr"; public static final String ATTR_DECIMAL = "decimal_attr"; public static final String ATTR_HTML = "html_attr"; public static final String ATTR_HYPERLINK = "hyperlink_attr"; public static final String ATTR_LONG = "long_attr"; public static final String ATTR_INT = "int_attr"; public static final String ATTR_SCRIPT = "script_attr"; public static final String ATTR_EMAIL = "email_attr"; public static final String ATTR_XREF = "xref_attr"; public static final String ATTR_MREF = "mref_attr"; public static final String ATTR_REF_ID = "ref_id_attr"; public static final String ATTR_REF_STRING = "ref_string_attr"; public static final String ATTR_COMPUTED_INT = "computed_int_attr"; public static final String ATTR_COMPOUND = "compound_attr"; public static final String ATTR_COMPOUND_CHILD_INT = "compound_child_int_attr"; @Autowired private PackageFactory packageFactory; @Autowired private EntityTypeFactory entityTypeFactory; @Autowired private AttributeFactory attributeFactory; @Autowired TestEntityStaticMetaData staticTestEntityStaticMetaData; @Autowired TestRefEntityStaticMetaData staticTestRefEntityStaticMetaData; @Autowired private TestPackage testPackage; private Date date; private Date dateTime; @PostConstruct public void postConstruct() { } public EntityType createStaticRefTestEntityType() { return staticTestRefEntityStaticMetaData; } public EntityType createStaticTestEntityType() { return staticTestEntityStaticMetaData; } public EntityType createDynamicRefEntityType() { return entityTypeFactory.create().setSimpleName("TypeTestRefDynamic").setBackend("PostgreSQL") .addAttribute(createAttribute(ATTR_REF_ID, STRING), ROLE_ID) .addAttribute(createAttribute(ATTR_REF_STRING, STRING).setNillable(false), ROLE_LABEL); } public EntityType createDynamicTestEntityType() { EntityType refEntityType = createDynamicRefEntityType(); EntityType entityType = entityTypeFactory.create().setSimpleName("TypeTestDynamic") .setBackend("PostgreSQL"); entityType .addAttribute(createAttribute(ATTR_ID, STRING).setAuto(true), ROLE_ID) .addAttribute(createAttribute(ATTR_STRING, STRING).setNillable(false), ROLE_LABEL) .addAttribute(createAttribute(ATTR_BOOL, BOOL)) .addAttribute(createAttribute(ATTR_CATEGORICAL, CATEGORICAL).setRefEntity(refEntityType)) .addAttribute(createAttribute(ATTR_CATEGORICAL_MREF, CATEGORICAL_MREF).setRefEntity(refEntityType)) .addAttribute(createAttribute(ATTR_DATE, DATE)).addAttribute(createAttribute(ATTR_DATETIME, DATE_TIME)) .addAttribute(createAttribute(ATTR_EMAIL, EMAIL)).addAttribute(createAttribute(ATTR_DECIMAL, DECIMAL)) .addAttribute(createAttribute(ATTR_HTML, HTML)).addAttribute(createAttribute(ATTR_HYPERLINK, HYPERLINK)) .addAttribute(createAttribute(ATTR_LONG, LONG)).addAttribute(createAttribute(ATTR_INT, INT)) .addAttribute(createAttribute(ATTR_SCRIPT, SCRIPT)) .addAttribute(createAttribute(ATTR_XREF, XREF).setRefEntity(refEntityType)) .addAttribute(createAttribute(ATTR_MREF, MREF).setRefEntity(refEntityType)) .addAttribute(createAttribute(ATTR_COMPUTED_INT, INT).setExpression(ATTR_INT)); // Add a compound attribute Attribute compound = createAttribute(ATTR_COMPOUND, COMPOUND); Attribute child = createAttribute(ATTR_COMPOUND_CHILD_INT, INT).setParent(compound); return entityType.addAttribute(compound).addAttribute(child); } private Attribute createAttribute(String name, AttributeType dataType) { return attributeFactory.create().setName(name).setDataType(dataType); } public List<Entity> createTestRefEntities(EntityType refEntityType, int numberOfEntities) { return IntStream.range(0, numberOfEntities).mapToObj(i -> createRefEntity(refEntityType, i)) .collect(toList()); } public Stream<Entity> createTestEntities(EntityType entityType, int numberOfEntities, List<Entity> refEntities) { return IntStream.range(0, numberOfEntities) .mapToObj(i -> createEntity(entityType, i, refEntities.get(i % refEntities.size()))); } private Entity createRefEntity(EntityType refEntityType, int id) { Entity refEntity = new DynamicEntity(refEntityType); refEntity.set(ATTR_REF_ID, "" + id); refEntity.set(ATTR_REF_STRING, "refstring" + id); return refEntity; } private Entity createEntity(EntityType entityType, int id, Entity refEntity) { if (date == null || dateTime == null) generateDateAndDateTime(); Entity entity = new DynamicEntity(entityType); entity.set(ATTR_ID, "" + id); entity.set(ATTR_STRING, "string1"); entity.set(ATTR_BOOL, id % 2 == 0); entity.set(ATTR_CATEGORICAL, refEntity); entity.set(ATTR_CATEGORICAL_MREF, Collections.singletonList(refEntity)); entity.set(ATTR_DATE, date); entity.set(ATTR_DATETIME, dateTime); entity.set(ATTR_EMAIL, "this.is@mail.address"); entity.set(ATTR_DECIMAL, id + 0.123); entity.set(ATTR_HTML, id % 2 == 1 ? "<html>where is my head and where is my body</html>" : null); entity.set(ATTR_HYPERLINK, "http://www.molgenis.org"); entity.set(ATTR_LONG, id * 1000000L); entity.set(ATTR_INT, 10 + id); entity.set(ATTR_SCRIPT, "/bin/blaat/script.sh"); entity.set(ATTR_XREF, refEntity); entity.set(ATTR_MREF, Collections.singletonList(refEntity)); entity.set(ATTR_COMPOUND_CHILD_INT, 10 + id); return new EntityWithComputedAttributes(entity); } private void generateDateAndDateTime() { DateFormat dateFormat = MolgenisDateFormat.getDateFormat(); DateFormat dateTimeFormat = MolgenisDateFormat.getDateTimeFormat(); try { date = dateFormat.parse("2012-12-21"); dateTime = dateTimeFormat.parse("1985-08-12T11:12:13+0500"); } catch (ParseException e) { e.printStackTrace(); } } }