package org.molgenis.data.meta.model;
import org.molgenis.data.Sort;
import org.molgenis.data.meta.SystemEntityType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Collections;
import java.util.Set;
import static java.util.Objects.requireNonNull;
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;
import static org.molgenis.data.meta.model.MetaPackage.PACKAGE_META;
import static org.molgenis.data.meta.model.Package.PACKAGE_SEPARATOR;
@Component
public class PackageMetadata extends SystemEntityType
{
private static final String SIMPLE_NAME_ = "Package";
public static final String PACKAGE = PACKAGE_META + PACKAGE_SEPARATOR + SIMPLE_NAME_;
public static final String FULL_NAME = "fullName";
public static final String SIMPLE_NAME = "name";
public static final String LABEL = "label";
public static final String DESCRIPTION = "description";
public static final String PARENT = "parent";
public static final String CHILDREN = "children";
public static final String ENTITY_TYPES = "entityTypes";
public static final String TAGS = "tags";
private TagMetadata tagMetadata;
private EntityTypeMetadata entityTypeMetadata;
public PackageMetadata()
{
super(SIMPLE_NAME_, PACKAGE_META);
}
@Override
public void init()
{
setLabel("Package");
setDescription("Grouping of related entities");
addAttribute(FULL_NAME, ROLE_ID, ROLE_LABEL).setLabel("Qualified name");
addAttribute(SIMPLE_NAME).setNillable(false).setReadOnly(true).setLabel("Name");
addAttribute(LABEL).setLabel("Label");
addAttribute(DESCRIPTION).setDataType(TEXT).setLabel("Description");
Attribute parentAttr = addAttribute(PARENT).setReadOnly(true).setDataType(XREF).setRefEntity(this)
.setLabel("Parent");
addAttribute(CHILDREN).setReadOnly(true).setDataType(ONE_TO_MANY).setMappedBy(parentAttr)
.setOrderBy(new Sort(LABEL)).setRefEntity(this).setLabel("Children");
addAttribute(ENTITY_TYPES).setReadOnly(true).setDataType(ONE_TO_MANY)
.setMappedBy(entityTypeMetadata.getAttribute(EntityTypeMetadata.PACKAGE))
.setOrderBy(new Sort(EntityTypeMetadata.LABEL)).setOrderBy(new Sort(LABEL)).setRefEntity(entityTypeMetadata)
.setLabel("Entity types");
addAttribute(TAGS).setDataType(MREF).setRefEntity(tagMetadata).setLabel("Tags");
}
// setter injection instead of constructor injection to avoid unresolvable circular dependencies
@Autowired
public void setTagMetadata(TagMetadata tagMetadata)
{
this.tagMetadata = requireNonNull(tagMetadata);
}
@Autowired
public void setEntityTypeMetadata(EntityTypeMetadata entityTypeMetadata)
{
this.entityTypeMetadata = requireNonNull(entityTypeMetadata);
}
@Override
public Set<SystemEntityType> getDependencies()
{
return Collections.singleton(entityTypeMetadata);
}
}