Project

General

Profile

1
package eu.dnetlib.openaire.api;
2

    
3
import java.io.StringWriter;
4
import java.util.ArrayList;
5
import java.util.HashMap;
6
import java.util.List;
7
import java.util.Map;
8

    
9
import com.google.common.base.Function;
10
import com.google.common.collect.Lists;
11
import eu.dnetlib.miscutils.functional.hash.Hashing;
12
import eu.dnetlib.rmi.enabling.ISLookUpService;
13
import org.apache.commons.lang3.StringUtils;
14

    
15
/**
16
 * Created by michele on 15/01/16.
17
 */
18
public class SinglePublicationSubmitterUtils {
19

    
20
	private final ISLookUpService lookupService;
21

    
22
	public SinglePublicationSubmitterUtils(final ISLookUpService lookupService) {
23
		this.lookupService = lookupService;
24
	}
25

    
26
	public Map<String, String> calculateProjectInfo(final String link) {
27
		final Map<String, String> info = new HashMap<String, String>();
28
		final String[] arr = link.split("/");
29
		//info:eu-repo/grantAgreement/EC/FP7/244909/EU/Making Capabilities Work/WorkAble
30

    
31
		final String funderId = calculateFunderId(arr[2]);
32
		info.put("id", calculateProjectId(arr[2], arr[3], arr[4]));
33
		info.put("funderShortName", arr[2]);
34
		info.put("fundingName", arr[3]);
35
		info.put("code", arr[4]);
36
		info.put("jurisdiction", arr[5]);
37
		info.put("title", StringUtils.isNotBlank(arr[6]) ? arr[6] : arr[7]);
38
		info.put("acronym", arr[7]);
39
		info.put("funderId", funderId);
40
		info.put("funderName", calculateFunderName(arr[2]));
41
		info.put("fundingId", funderId + "::" + arr[3]);
42

    
43
		return info;
44
	}
45

    
46
	private String calculateProjectId(final String funderShortName, String funding, String code) {
47
		final String suffix = Hashing.md5(code);
48

    
49
		if (funderShortName.equalsIgnoreCase("ec")) {
50
			if (funding.equalsIgnoreCase("fp7")) {
51
				return "corda_______::" + suffix;
52
			} else {
53
				return "corda__h2020::" + suffix;
54
			}
55
		} else if (funderShortName.equalsIgnoreCase("arc")) {
56
			return "arc_________::" + suffix;
57
		} else if (funderShortName.equalsIgnoreCase("fct")) {
58
			return "fct_________::" + suffix;
59
		} else if (funderShortName.equalsIgnoreCase("nhmrc")) {
60
			return "nhmrc_______::" + suffix;
61
		} else if (funderShortName.equalsIgnoreCase("wt")) {
62
			return "wt__________::" + suffix;
63
		} else {
64
			return "";
65
		}
66
	}
67

    
68
	private String calculateFunderId(final String funderShortName) {
69
		if (funderShortName.equalsIgnoreCase("ec")) {
70
			return "ec__________::EC";
71
		} else if (funderShortName.equalsIgnoreCase("arc")) {
72
			return "arc_________::ARC";
73
		} else if (funderShortName.equalsIgnoreCase("fct")) {
74
			return "fct_________::FCT";
75
		} else if (funderShortName.equalsIgnoreCase("nhmrc")) {
76
			return "nhmrc_______::NHMRC";
77
		} else if (funderShortName.equalsIgnoreCase("wt")) {
78
			return "wt__________::WT";
79
		} else {
80
			return "";
81
		}
82
	}
83

    
84
	private String calculateFunderName(final String funderShortName) {
85
		if (funderShortName.equalsIgnoreCase("ec")) {
86
			return "European Commission";
87
		} else if (funderShortName.equalsIgnoreCase("arc")) {
88
			return "Australian Research Council (ARC)";
89
		} else if (funderShortName.equalsIgnoreCase("fct")) {
90
			return "Fundação para a Ciência e a Tecnologia";
91
		} else if (funderShortName.equalsIgnoreCase("nhmrc")) {
92
			return "National Health and Medical Research Council (NHMRC)";
93
		} else if (funderShortName.equalsIgnoreCase("wt")) {
94
			return "Wellcome Trust";
95
		} else {
96
			return "";
97
		}
98
	}
99

    
100
	public List<ContextInfo> processContexts(List<String> list) {
101
		return Lists.newArrayList(Lists.transform(list, new Function<String, ContextInfo>() {
102
			@Override
103
			public ContextInfo apply(final String s) {
104
				return createContextInfo(s.split("::"), 0);
105
			}
106

    
107
			private ContextInfo createContextInfo(final String[] arr, final int pos) {
108
				final StringWriter id = new StringWriter();
109
				id.write(arr[0]);
110
				for (int i = 0; i < pos; i++) {
111
					id.write("::");
112
					id.write(arr[i + 1]);
113
				}
114
				final String elem = (pos == 0) ? "context" : (pos == 1) ? "category" : "concept";
115
				final ContextInfo info = new ContextInfo(elem, id.toString());
116
				if (pos + 1 < arr.length) {
117
					info.getChildren().add(createContextInfo(arr, pos + 1));
118
				}
119
				return info;
120
			}
121
		}));
122

    
123
	}
124

    
125
	public class ContextInfo {
126

    
127
		private String elem;
128
		private String id;
129
		private List<ContextInfo> children = new ArrayList<ContextInfo>();
130

    
131
		public ContextInfo(final String elem,
132
				final String id) {
133
			this.elem = elem;
134
			this.id = id;
135
		}
136

    
137
		public String getElem() {
138
			return elem;
139
		}
140

    
141
		public void setElem(final String elem) {
142
			this.elem = elem;
143
		}
144

    
145
		public String getId() {
146
			return id;
147
		}
148

    
149
		public void setId(final String id) {
150
			this.id = id;
151
		}
152

    
153
		public List<ContextInfo> getChildren() {
154
			return children;
155
		}
156

    
157
		public void setChildren(final List<ContextInfo> children) {
158
			this.children = children;
159
		}
160

    
161
		public boolean isRoot() {
162
			return elem.equals("context");
163
		}
164
	}
165
}
(3-3/3)