Project

General

Profile

1
package eu.dnetlib.iis.export.actionmanager.module;
2

    
3
import java.util.Collections;
4
import java.util.List;
5

    
6
import org.apache.commons.lang.StringUtils;
7
import org.apache.hadoop.conf.Configuration;
8

    
9
import eu.dnetlib.actionmanager.actions.AtomicAction;
10
import eu.dnetlib.actionmanager.common.Agent;
11
import eu.dnetlib.data.proto.FieldTypeProtos.ExtraInfo;
12
import eu.dnetlib.data.proto.OafProtos.Oaf;
13
import eu.dnetlib.data.proto.OafProtos.OafEntity;
14
import eu.dnetlib.data.proto.TypeProtos.Type;
15
import eu.dnetlib.iis.common.citations.schemas.CitationEntry;
16
import eu.dnetlib.iis.common.hbase.HBaseConstants;
17
import eu.dnetlib.iis.export.actionmanager.module.toxml.CitationsXmlConverter;
18
import eu.dnetlib.iis.export.schemas.Citations;
19

    
20

    
21
/**
22
 * {@link Citations} based action builder module.
23
 * @author mhorst
24
 *
25
 */
26
public class CitationsActionBuilderModuleFactory 
27
		implements ActionBuilderFactory<Citations> {
28
	
29
	public static final String EXTRA_INFO_NAME = "result citations";
30
	public static final String EXTRA_INFO_TYPOLOGY = "citations";
31
	
32
	private static final AlgorithmName algorithmName = AlgorithmName.document_referencedDocuments;
33
	
34
	class CitationActionBuilderModule extends AbstractBuilderModule
35
	implements ActionBuilderModule<Citations> {
36
	
37
		CitationsXmlConverter converter = new CitationsXmlConverter();
38
		
39
		/**
40
		 * Default constructor.
41
		 * @param predefinedTrust
42
		 * @param actionSetId
43
		 */
44
		public CitationActionBuilderModule(String predefinedTrust,
45
				String actionSetId) {
46
			super(predefinedTrust, actionSetId, algorithmName);
47
		}
48
	
49
		@Override
50
		public List<AtomicAction> build(Citations object, Agent agent) {
51
			Oaf oaf = buildOAFCitations(object);
52
			if (oaf!=null) {
53
				return actionFactory.createUpdateActions(
54
						actionSetId,
55
						agent, object.getDocumentId().toString(), Type.result, 
56
						oaf.toByteArray());	
57
			} else {
58
				return Collections.emptyList();
59
			}
60
		}
61
		
62
		/**
63
		 * Builds OAF object containing document statistics.
64
		 * @param source
65
		 * @return OAF object containing document statistics
66
		 */
67
		protected Oaf buildOAFCitations(Citations source) {
68
			if (source.getCitations()!=null && source.getCitations().size()>0) {
69
				OafEntity.Builder entityBuilder = OafEntity.newBuilder();
70
				if (source.getDocumentId()!=null) {
71
					entityBuilder.setId(source.getDocumentId().toString());	
72
				}
73
				ExtraInfo.Builder extraInfoBuilder = ExtraInfo.newBuilder();
74
				extraInfoBuilder.setValue(converter.serialize(
75
						normalize(source.getCitations())));
76
				extraInfoBuilder.setName(EXTRA_INFO_NAME);
77
				extraInfoBuilder.setTypology(EXTRA_INFO_TYPOLOGY);
78
				extraInfoBuilder.setProvenance(this.inferenceProvenance);
79
				extraInfoBuilder.setTrust(getPredefinedTrust());
80
				entityBuilder.addExtraInfo(extraInfoBuilder.build());
81
				entityBuilder.setType(Type.result);
82
				return buildOaf(entityBuilder.build());
83
			}
84
//			fallback
85
			return null;
86
		}
87
		
88
		/**
89
		 * Performs confidence level normalization. Removes empty lists.
90
		 * Removes 50| prefix from publication identifier.
91
		 * @param source
92
		 * @return {@link CitationEntry} objects having confidence level value normalized.
93
		 */
94
		private List<CitationEntry> normalize(List<CitationEntry> source) {
95
			if (source!=null) {
96
				for (CitationEntry currentEntry : source) {
97
					if (currentEntry.getConfidenceLevel()!=null) {
98
						currentEntry.setConfidenceLevel(
99
								currentEntry.getConfidenceLevel() * getConfidenceToTrustLevelNormalizationFactor());
100
					}
101
					if (currentEntry.getExternalDestinationDocumentIds().isEmpty()) {
102
						currentEntry.setExternalDestinationDocumentIds(null);
103
					}
104
					if (currentEntry.getDestinationDocumentId()!=null) {
105
						currentEntry.setDestinationDocumentId(
106
								StringUtils.split(currentEntry.getDestinationDocumentId().toString(), 
107
										HBaseConstants.ROW_PREFIX_SEPARATOR)[1]);
108
					}
109
				}
110
			}
111
			return source;
112
		}
113
	}
114
	
115
	@Override
116
	public AlgorithmName getAlgorithName() {
117
		return algorithmName;
118
	}
119

    
120
	@Override
121
	public ActionBuilderModule<Citations> instantiate(String predefinedTrust,
122
			String actionSetId, Configuration config) {
123
		return new CitationActionBuilderModule(predefinedTrust, actionSetId);
124
	}
125

    
126
}
(8-8/19)