Project

General

Profile

1
package eu.dnetlib.openaire.directindex.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 org.apache.commons.lang.StringUtils;
13

    
14
/**
15
 * Created by michele on 15/01/16.
16
 */
17
public class OpenAIRESubmitterUtils {
18

    
19
	private static final org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(OpenAIRESubmitterUtils.class);
20

    
21
	public Map<String, String> calculateProjectInfo(final String link) {
22
		final Map<String, String> info = new HashMap<String, String>();
23
		final String[] arr = link.split("/");
24
		// info:eu-repo/grantAgreement/EC/FP7/244909/EU/Making Capabilities Work/WorkAble
25

    
26
		if (arr.length > 4) {
27
			final String acronym = arr.length > 7 ? arr[7] : "";
28
			final String title = arr.length > 6 ? StringUtils.isNotBlank(arr[6]) ? arr[6] : acronym : "";
29
			final String jurisdiction = arr.length > 5 ? arr[5] : "";
30
			final String funderId = calculateFunderId(arr[2], arr[3]);
31
			info.put("id", calculateProjectId(arr[2], arr[3], arr[4]));
32
			info.put("funderShortName", arr[2]);
33
			info.put("fundingName", arr[3]);
34
			info.put("code", arr[4]);
35
			info.put("jurisdiction", jurisdiction);
36
			info.put("title", title);
37
			info.put("acronym", acronym);
38
			info.put("funderId", funderId);
39
			info.put("funderName", calculateFunderName(arr[2]));
40
			info.put("fundingId", funderId + "::" + arr[3]);
41
		}
42
		return info;
43
	}
44

    
45
	protected String calculateFunderPrefix(final String funderShortName, final String funding){
46
		switch(funderShortName.toLowerCase()){
47
		case "conicyt":
48
			return "conicytf____::";
49
		case "ec":
50
			if (funding.equalsIgnoreCase("fp7")) {
51
				return "corda_______::";
52
			} else {
53
				return "corda__h2020::";
54
			}
55
		case "hrzz":
56
		case "mzos":
57
			return "irb_hr______::";
58
		case "tara":
59
			return "taraexp_____::";
60
		case "tubitak":
61
			return "tubitakf____::";
62
		default:
63
			String prefix = funderShortName.toLowerCase();
64
			//ensure we have 12 chars
65
			while(prefix.length() < 12) prefix += "_";
66
			return prefix +"::";
67
		}
68
	}
69

    
70
	protected String calculateProjectId(final String funderShortName, final String funding, final String code) {
71
		final String suffix = Hashing.md5(code);
72
		final String funderPrefix = calculateFunderPrefix(funderShortName, funding);
73
		return funderPrefix + suffix;
74
	}
75

    
76
	protected String calculateFunderId(final String funderShortName, final String funding) {
77
		switch (funderShortName.toLowerCase()) {
78
		case "ec":
79
			return "ec__________::EC";
80
		default:
81
			String prefix = calculateFunderPrefix(funderShortName, funding);
82
			return prefix + funderShortName.toUpperCase();
83
		}
84
	}
85

    
86

    
87
	protected String calculateFunderName(final String funderShortName) {
88

    
89
		switch (funderShortName.toLowerCase()) {
90
		case "aff":
91
		case "aka":
92
			return "Academy of Finland";
93
		case "arc":
94
			return "Australian Research Council (ARC)";
95
		case "conicyt":
96
			return "Comisión Nacional de Investigación Científica y Tecnológica";
97
		case "ec":
98
			return "European Commission";
99
		case "fct":
100
			return "Fundação para a Ciência e a Tecnologia, I.P.";
101
		case "fwf":
102
			return "Austrian Science Fund (FWF)";
103
		case "hrzz":
104
			return "Croatian Science Foundation (CSF)";
105
		case "mestd":
106
			return "Ministry of Education, Science and Technological Development of Republic of Serbia";
107
		case "miur":
108
			return "Ministero dell'Istruzione dell'Università e della Ricerca";
109
		case "mzos":
110
			return "Ministry of Science, Education and Sports of the Republic of Croatia (MSES)";
111
		case "nhmrc":
112
			return "National Health and Medical Research Council (NHMRC)";
113
		case "nih":
114
			return "National Institutes of Health";
115
		case "nsf":
116
			return "National Science Foundation";
117
		case "nwo":
118
			return "Netherlands Organisation for Scientific Research (NWO)";
119
		case "rcuk":
120
			return "Research Council UK";
121
		case "sfi":
122
			return "Science Foundation Ireland";
123
		case "sgov":
124
			return "Gobierno de España";
125
		case "snsf":
126
			return "Swiss National Science Foundation";
127
		case "tara":
128
			return "Tara Expeditions Foundation";
129
		case "tubitak":
130
			return "Türkiye Bilimsel ve Teknolojik Araştırma Kurumu";
131
		case "wt":
132
			return "Wellcome Trust";
133
		default:
134
			log.error("Funder short name '"+funderShortName+"' not managed");
135
			return "";
136
		}
137
	}
138

    
139
	public List<ContextInfo> processContexts(final List<String> list) {
140
		return Lists.newArrayList(Lists.transform(list, new Function<String, ContextInfo>() {
141

    
142
			@Override
143
			public ContextInfo apply(final String s) {
144
				return createContextInfo(s.split("::"), 0);
145
			}
146

    
147
			private ContextInfo createContextInfo(final String[] arr, final int pos) {
148
				final StringWriter id = new StringWriter();
149
				id.write(arr[0]);
150
				for (int i = 0; i < pos; i++) {
151
					id.write("::");
152
					id.write(arr[i + 1]);
153
				}
154
				final String elem = (pos == 0) ? "context" : (pos == 1) ? "category" : "concept";
155
				final ContextInfo info = new ContextInfo(elem, id.toString());
156
				if ((pos + 1) < arr.length) {
157
					info.getChildren().add(createContextInfo(arr, pos + 1));
158
				}
159
				return info;
160
			}
161
		}));
162

    
163
	}
164

    
165
	public class ContextInfo {
166

    
167
		private String elem;
168
		private String id;
169
		private List<ContextInfo> children = new ArrayList<ContextInfo>();
170

    
171
		public ContextInfo(final String elem,
172
				final String id) {
173
			this.elem = elem;
174
			this.id = id;
175
		}
176

    
177
		public String getElem() {
178
			return elem;
179
		}
180

    
181
		public void setElem(final String elem) {
182
			this.elem = elem;
183
		}
184

    
185
		public String getId() {
186
			return id;
187
		}
188

    
189
		public void setId(final String id) {
190
			this.id = id;
191
		}
192

    
193
		public List<ContextInfo> getChildren() {
194
			return children;
195
		}
196

    
197
		public void setChildren(final List<ContextInfo> children) {
198
			this.children = children;
199
		}
200

    
201
		public boolean isRoot() {
202
			return elem.equals("context");
203
		}
204
	}
205
}
(4-4/7)