package eu.dnetlib.iis.wf.export.actionmanager.module; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.apache.commons.collections.CollectionUtils; import org.apache.hadoop.conf.Configuration; import eu.dnetlib.actionmanager.actions.AtomicAction; import eu.dnetlib.actionmanager.common.Agent; import eu.dnetlib.data.proto.OafProtos.Oaf; import eu.dnetlib.data.proto.OafProtos.OafEntity; import eu.dnetlib.data.proto.ResultProtos.Result; import eu.dnetlib.data.proto.ResultProtos.Result.Context; import eu.dnetlib.data.proto.ResultProtos.Result.Metadata; import eu.dnetlib.data.proto.TypeProtos.Type; import eu.dnetlib.iis.export.schemas.Concept; import eu.dnetlib.iis.export.schemas.DocumentToConceptIds; import eu.dnetlib.iis.wf.export.actionmanager.cfg.StaticConfigurationProvider; /** * {@link DocumentToResearchInitiatives} action builder module. * * @author mhorst * */ public abstract class AbstractDocumentToConceptsActionBuilderModuleFactory extends AbstractActionBuilderFactory<DocumentToConceptIds> { // ------------------------ CONSTRUCTORS -------------------------- public AbstractDocumentToConceptsActionBuilderModuleFactory(AlgorithmName algorithmName) { super(algorithmName); } // ------------------------ LOGIC --------------------------------- @Override public ActionBuilderModule<DocumentToConceptIds> instantiate(Configuration config, Agent agent, String actionSetId) { return new DocumentToConceptsActionBuilderModule(provideTrustLevelThreshold(config), agent, actionSetId); } // ------------------------ INNER CLASS --------------------------- class DocumentToConceptsActionBuilderModule extends AbstractBuilderModule<DocumentToConceptIds> { // ------------------------ CONSTRUCTORS -------------------------- /** * @param trustLevelThreshold trust level threshold or null when all records should be exported * @param agent action manager agent details * @param actionSetId action set identifier */ public DocumentToConceptsActionBuilderModule(Float trustLevelThreshold, Agent agent, String actionSetId) { super(trustLevelThreshold, buildInferenceProvenance(), agent, actionSetId); } // ------------------------ LOGIC ---------------------------------- @Override public List<AtomicAction> build(DocumentToConceptIds object) { Oaf oaf = buildOAFResearchInitiativeConcepts(object); if (oaf != null) { return getActionFactory().createUpdateActions(getActionSetId(), getAgent(), object.getDocumentId().toString(), Type.result, oaf.toByteArray()); } else { return Collections.emptyList(); } } // ------------------------ PRIVATE ---------------------------------- /** * Builds OAF object containing research initiative concepts. */ private Oaf buildOAFResearchInitiativeConcepts(DocumentToConceptIds source) { if (CollectionUtils.isNotEmpty(source.getConcepts())) { Result.Metadata.Builder metaBuilder = Metadata.newBuilder(); List<Context> contexts = new ArrayList<Context>(source.getConcepts().size()); for (Concept concept : source.getConcepts()) { Context.Builder contextBuilder = Context.newBuilder(); contextBuilder.setId(concept.getId().toString()); contextBuilder.setDataInfo(buildInferenceForTrustLevel(StaticConfigurationProvider.ACTION_TRUST_0_9)); contexts.add(contextBuilder.build()); } metaBuilder.addAllContext(contexts); Result.Builder resultBuilder = Result.newBuilder(); resultBuilder.setMetadata(metaBuilder.build()); OafEntity.Builder entityBuilder = OafEntity.newBuilder(); if (source.getDocumentId() != null) { entityBuilder.setId(source.getDocumentId().toString()); } entityBuilder.setType(Type.result); entityBuilder.setResult(resultBuilder.build()); return buildOaf(entityBuilder.build()); } // fallback return null; } } }