dnet-applications/libs/dnet-wf-service/src/main/java/eu/dnetlib/manager/wf/nodes/aggregation/MetadataXsltTransformNode.java

48 lines
1.5 KiB
Java

package eu.dnetlib.manager.wf.nodes.aggregation;
import java.util.HashMap;
import java.util.Map;
import java.util.stream.Stream;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import eu.dnetlib.data.mapping.RecordTransformer;
import eu.dnetlib.data.mapping.xslt.XsltTransformFactory;
import eu.dnetlib.data.mdstore.model.records.MetadataRecord;
import eu.dnetlib.data.mdstore.model.records.MetadataRecordImpl;
import eu.dnetlib.manager.wf.annotations.WfInputParam;
import eu.dnetlib.manager.wf.annotations.WfNode;
import eu.dnetlib.manager.wf.nodes.stream.StreamMapperNode;
@WfNode("applyXslt")
public class MetadataXsltTransformNode extends StreamMapperNode<MetadataRecord, MetadataRecord> {
@WfInputParam
private String ruleId;
@Autowired
private XsltTransformFactory xsltTransformFactory;
@Override
protected Stream<MetadataRecord> mapStream(final Stream<MetadataRecord> input) {
try {
final Map<String, String> params = new HashMap<>();
// TODO: which params ?
final RecordTransformer<String, String> xslt = xsltTransformFactory.getTransformer(ruleId, params);
final long now = System.currentTimeMillis();
return input.map(in -> {
final MetadataRecord out = new MetadataRecordImpl();
BeanUtils.copyProperties(in, out);
out.setBody(xslt.transform(in.getBody()));
out.setDateOfTransformation(now);
return out;
});
} catch (final Exception e) {
throw new RuntimeException(e);
}
}
}