package org.molgenis.file.ingest.meta; import com.google.common.collect.ImmutableList; import org.molgenis.data.meta.SystemEntityType; import org.molgenis.data.meta.model.EntityTypeMetadata; import org.molgenis.util.RegexUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import static org.molgenis.data.meta.AttributeType.*; import static org.molgenis.data.meta.model.EntityType.AttributeRole.*; import static org.molgenis.data.meta.model.Package.PACKAGE_SEPARATOR; import static org.molgenis.data.system.model.RootSystemPackage.PACKAGE_SYSTEM; @Component public class FileIngestMetaData extends SystemEntityType { private static final String SIMPLE_NAME = "FileIngest"; public static final String FILE_INGEST = PACKAGE_SYSTEM + PACKAGE_SEPARATOR + SIMPLE_NAME; public static final String ID = "id"; public static final String NAME = "name"; public static final String DESCRIPTION = "description"; public static final String URL = "url"; public static final String LOADER = "loader"; public static final String ENTITY_META_DATA = "entityType"; public static final String CRONEXPRESSION = "cronexpression"; public static final String ACTIVE = "active"; public static final String FAILURE_EMAIL = "failureEmail"; public static final ImmutableList<String> LOADERS = ImmutableList.of("CSV"); private final EntityTypeMetadata entityTypeMetadata; @Autowired public FileIngestMetaData(EntityTypeMetadata entityTypeMetadata) { super(SIMPLE_NAME, PACKAGE_SYSTEM); this.entityTypeMetadata = entityTypeMetadata; } @Override public void init() { setLabel("File ingest"); addAttribute(ID, ROLE_ID).setAuto(true).setNillable(false); addAttribute(NAME, ROLE_LABEL, ROLE_LOOKUP).setLabel("Name").setNillable(false); addAttribute(DESCRIPTION).setDataType(TEXT).setLabel("Description").setNillable(true); addAttribute(URL).setLabel("Url").setDescription("Url of the file to download.").setNillable(false); addAttribute(LOADER).setDataType(ENUM).setEnumOptions(LOADERS).setLabel("Loader type").setNillable(false); addAttribute(ENTITY_META_DATA).setDataType(XREF).setRefEntity(entityTypeMetadata) .setLabel("Target EntityType").setNillable(false); addAttribute(CRONEXPRESSION).setLabel("Cronexpression").setNillable(false) .setValidationExpression("$('" + CRONEXPRESSION + "').matches(" + RegexUtils.CRON_REGEX + ").value()"); addAttribute(ACTIVE).setDataType(BOOL).setLabel("Active").setNillable(false); addAttribute(FAILURE_EMAIL).setDataType(EMAIL).setLabel("Failure email") .setDescription("Leave blank if you don't want to receive emails if the jobs failed.") .setNillable(true); } }