package org.molgenis.data.i18n;
import org.molgenis.data.DataService;
import org.molgenis.data.i18n.model.I18nStringMetaData;
import org.molgenis.data.i18n.model.LanguageFactory;
import org.molgenis.data.meta.MetaDataService;
import org.molgenis.data.meta.SystemEntityType;
import org.molgenis.data.meta.model.AttributeMetadata;
import org.molgenis.data.meta.model.EntityTypeMetadata;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Component;
import java.util.stream.Stream;
import static java.util.Objects.requireNonNull;
import static org.molgenis.data.meta.AttributeType.STRING;
import static org.molgenis.data.meta.AttributeType.TEXT;
/**
* Enriches system entity meta data with internationalization attributes.
*
* @see SystemEntityType
*/
@Component
public class SystemEntityTypeI18nInitializer
{
private final MetaDataService metaDataService;
private final DataService dataService;
private final LanguageFactory languageFactory;
@Autowired
public SystemEntityTypeI18nInitializer(MetaDataService metaDataService, DataService dataService,
LanguageFactory languageFactory)
{
this.metaDataService = requireNonNull(metaDataService);
this.dataService = requireNonNull(dataService);
this.languageFactory = requireNonNull(languageFactory);
}
/**
* Initialize internationalization attributes
*
* @param event application event
*/
public void initialize(ContextRefreshedEvent event)
{
ApplicationContext ctx = event.getApplicationContext();
Stream<String> languageCodes = LanguageService.getLanguageCodes();
EntityTypeMetadata entityTypeMeta = ctx.getBean(EntityTypeMetadata.class);
AttributeMetadata attrMetaMeta = ctx.getBean(AttributeMetadata.class);
I18nStringMetaData i18nStringMeta = ctx.getBean(I18nStringMetaData.class);
languageCodes.forEach(languageCode ->
{
entityTypeMeta.addAttribute(EntityTypeMetadata.LABEL + '-' + languageCode).setNillable(true)
.setLabel("Label (" + languageCode + ')');
entityTypeMeta.addAttribute(EntityTypeMetadata.DESCRIPTION + '-' + languageCode).setNillable(true)
.setLabel("Description (" + languageCode + ')').setDataType(TEXT);
attrMetaMeta.addAttribute(AttributeMetadata.LABEL + '-' + languageCode).setNillable(true)
.setLabel("Label (" + languageCode + ')');
attrMetaMeta.addAttribute(AttributeMetadata.DESCRIPTION + '-' + languageCode).setNillable(true)
.setLabel("Description (" + languageCode + ')').setDataType(TEXT);
i18nStringMeta.addAttribute(languageCode).setNillable(true).setDataType(STRING);
});
}
}