package org.molgenis.data.settings; import org.molgenis.data.DataService; import org.molgenis.data.Entity; import org.molgenis.data.EntityManager; import org.molgenis.data.meta.SystemEntityType; import org.molgenis.data.meta.model.Attribute; import org.molgenis.data.support.DynamicEntity; import org.molgenis.security.core.runas.RunAsSystem; import org.springframework.beans.factory.annotation.Autowired; import static org.molgenis.data.meta.model.Package.PACKAGE_SEPARATOR; import static org.molgenis.data.settings.SettingsPackage.PACKAGE_SETTINGS; import static org.molgenis.util.EntityUtils.getTypedValue; public abstract class DefaultSettingsEntityType extends SystemEntityType { public static final String ATTR_ID = "id"; @Autowired private DataService dataService; @Autowired private EntityManager entityManager; @Autowired public SettingsEntityType settingsEntityType; @Autowired private SettingsPackage settingsPackage; public DefaultSettingsEntityType(String id) { super(id, PACKAGE_SETTINGS); } @Override public void init() { setExtends(settingsEntityType); setPackage(settingsPackage); } @RunAsSystem public Entity getSettings() { return dataService.findOneById(getName(), getSimpleName()); } public static String getSettingsEntityName(String id) { return PACKAGE_SETTINGS + PACKAGE_SEPARATOR + id; } Entity getDefaultSettings() { Entity defaultSettingsEntity = new DynamicEntity(this); for (Attribute attr : this.getAtomicAttributes()) { // default values are stored/retrieved as strings, so we convert them to the required type here. String defaultValue = attr.getDefaultValue(); if (defaultValue != null) { Object typedDefaultValue = getTypedValue(defaultValue, attr, entityManager); defaultSettingsEntity.set(attr.getName(), typedDefaultValue); } } return defaultSettingsEntity; } }