Project

General

Profile

1
package eu.dnetlib.openaire.community;
2

    
3
import java.util.Arrays;
4
import java.util.List;
5
import java.util.Map;
6
import java.util.Optional;
7
import java.util.stream.Collectors;
8
import java.util.stream.Stream;
9

    
10
import com.google.common.escape.Escaper;
11
import com.google.common.xml.XmlEscapers;
12
import eu.dnetlib.openaire.context.Concept;
13
import eu.dnetlib.openaire.context.Context;
14
import eu.dnetlib.openaire.context.Param;
15
import org.apache.commons.lang3.StringUtils;
16

    
17
import static eu.dnetlib.openaire.common.Utils.escape;
18
import static eu.dnetlib.openaire.community.CommunityConstants.*;
19

    
20
public class CommunityMappingUtils {
21

    
22
	public static CommunitySummary asCommunitySummary(final Context c) {
23
		final CommunitySummary summary = new CommunitySummary();
24

    
25
		summary.setId(c.getId());
26
		summary.setShortName(c.getLabel());
27
		summary.setQueryId(c.getId() + PIPE_SEPARATOR + c.getLabel());
28

    
29
		final Map<String, List<Param>> params = c.getParams();
30
		if (params.containsKey(CSUMMARY_DESCRIPTION)) {
31
			summary.setDescription(asCsv(params.get(CSUMMARY_DESCRIPTION)));
32
		}
33
		if (params.containsKey(CSUMMARY_LOGOURL)) {
34
			summary.setLogoUrl(asCsv(params.get(CSUMMARY_LOGOURL)));
35
		}
36
		if (params.containsKey(CSUMMARY_NAME)) {
37
			summary.setName(asCsv(params.get(CSUMMARY_NAME)));
38
		}
39
		if (params.containsKey(CSUMMARY_MANAGER)) {
40
			summary.setManagers(
41
					asValues(params.get(CSUMMARY_MANAGER))
42
					.map(s -> s.split(CSV_DELIMITER))
43
					.map(Arrays::asList)
44
					.flatMap(List::stream)
45
					.collect(Collectors.toList()));
46
		}
47

    
48
		return summary;
49
	}
50

    
51
	public static CommunityDetails asCommunityProfile(final Context c) {
52

    
53
		final CommunityDetails p = new CommunityDetails(asCommunitySummary(c));
54
		p.setType(c.getType());
55
		p.setCreationDate(c.getDateofcreation());
56
		final Map<String, List<Param>> params = c.getParams();
57
		if (params.containsKey(CPROFILE_SUBJECT)) {
58
			p.setSubjects(asValues(params.get(CPROFILE_SUBJECT))
59
					.map(s -> s.split(CSV_DELIMITER))
60
					.map(Arrays::asList)
61
					.flatMap(List::stream)
62
					.collect(Collectors.toList()));
63
		}
64

    
65
		return p;
66
	}
67

    
68
	public static CommunityProject asCommunityProject(final String communityId, final Concept c) {
69

    
70
		final Map<String, List<Param>> p = c.getParams();
71
		final CommunityProject project = new CommunityProject();
72
		project.setCommunityId(communityId);
73
		project.setId(StringUtils.substringAfterLast(c.getId(), ID_SEPARATOR));
74
		project.setOpenaireId(firstValue(p, OPENAIRE_ID));
75
		project.setFunder(firstValue(p, CPROJECT_FUNDER));
76
		project.setGrantId(firstValue(p, CPROJECT_NUMBER));
77
		project.setName(firstValue(p, CPROJECT_FULLNAME));
78
		project.setAcronym(firstValue(p, CPROJECT_ACRONYM));
79

    
80
		return project;
81
	}
82

    
83
	public static CommunityContentprovider asCommunityDataprovider(final String communityId, final Concept c) {
84

    
85
		final Map<String, List<Param>> p = c.getParams();
86
		final CommunityContentprovider d = new CommunityContentprovider();
87
		d.setCommunityId(communityId);
88
		d.setId(StringUtils.substringAfterLast(c.getId(), ID_SEPARATOR));
89
		d.setOpenaireId(firstValue(p, OPENAIRE_ID));
90
		d.setName(firstValue(p, CCONTENTPROVIDER_NAME));
91
		d.setOfficialname(firstValue(p, CCONTENTPROVIDER_OFFICIALNAME));
92

    
93
		return d;
94
	}
95

    
96
	private static String firstValue(final Map<String, List<Param>> p, final String paramName) {
97
		final Optional<String> first = asValues(p.get(paramName)).findFirst();
98
		return first.isPresent() ? first.get() : null;
99
	}
100

    
101
	private static String asCsv(final List<Param> params) {
102
		return asValues(params)
103
				.collect(Collectors.joining(CSV_DELIMITER));
104
	}
105

    
106
	private static Stream<String> asValues(final List<Param> params) {
107
		return params == null ? Stream.empty() : params.stream()
108
				.map(Param::getValue)
109
				.distinct();
110
	}
111

    
112
	public static String asProjectXML(final String contextId, final CommunityProject project) {
113
		final Escaper esc = XmlEscapers.xmlAttributeEscaper();
114
		final StringBuilder sb = new StringBuilder();
115
		sb.append(
116
				String.format(
117
						"<concept claim='true' id='%s%s%s%s' label='%s'>\n",
118
						escape(esc, contextId), PROJECTS_ID_SUFFIX, ID_SEPARATOR, escape(esc, project.getId()), escape(esc, project.getAcronym())));
119
		sb.append(paramXML(CPROJECT_FULLNAME, project.getName()));
120
		sb.append(paramXML(CPROJECT_ACRONYM, project.getAcronym()));
121
		sb.append(paramXML(CPROJECT_NUMBER, project.getGrantId()));
122
		sb.append(paramXML(CPROJECT_FUNDER, project.getFunder()));
123
		sb.append(paramXML(OPENAIRE_ID, project.getOpenaireId()));
124
		sb.append("</concept>\n");
125
		return sb.toString();
126
	}
127

    
128
	public static String asContentProviderXML(final String contextId, final CommunityContentprovider ccp) {
129
		final Escaper esc = XmlEscapers.xmlAttributeEscaper();
130
		final StringBuilder sb = new StringBuilder();
131
		sb.append(
132
				String.format(
133
						"<concept claim='true' id='%s%s%s%s' label='%s'>\n",
134
						escape(esc, contextId), CONTENTPROVIDERS_ID_SUFFIX, ID_SEPARATOR, escape(esc, ccp.getId()), escape(esc, ccp.getName())));
135
		sb.append(paramXML(OPENAIRE_ID, ccp.getOpenaireId()));
136
		sb.append(paramXML(CCONTENTPROVIDER_NAME, ccp.getName()));
137
		sb.append(paramXML(CCONTENTPROVIDER_OFFICIALNAME, ccp.getOfficialname()));
138
		sb.append("</concept>\n");
139
		return sb.toString();
140
	}
141

    
142
	private static String paramXML(final String paramName, final String value) {
143
		return String.format("<param name='%s'>%s</param>\n", paramName, escape(XmlEscapers.xmlContentEscaper(), value));
144
	}
145

    
146
}
(7-7/11)