Project

General

Profile

1
package eu.dnetlib.msro.openaireplus.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
	public Map<String, String> calculateProjectInfo(final String link) {
20
		final Map<String, String> info = new HashMap<String, String>();
21
		final String[] arr = link.split("/");
22
		// info:eu-repo/grantAgreement/EC/FP7/244909/EU/Making Capabilities Work/WorkAble
23

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

    
43
	private String calculateProjectId(final String funderShortName, final String funding, final String code) {
44
		final String suffix = Hashing.md5(code);
45

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

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

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

    
97
	public List<ContextInfo> processContexts(final List<String> list) {
98
		return Lists.newArrayList(Lists.transform(list, new Function<String, ContextInfo>() {
99

    
100
			@Override
101
			public ContextInfo apply(final String s) {
102
				return createContextInfo(s.split("::"), 0);
103
			}
104

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

    
121
	}
122

    
123
	public class ContextInfo {
124

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

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

    
135
		public String getElem() {
136
			return elem;
137
		}
138

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

    
143
		public String getId() {
144
			return id;
145
		}
146

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

    
151
		public List<ContextInfo> getChildren() {
152
			return children;
153
		}
154

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

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