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.common.ISClientImpl;
13
import eu.dnetlib.openaire.context.Concept;
14
import eu.dnetlib.openaire.context.Context;
15
import eu.dnetlib.openaire.context.Param;
16
import org.apache.commons.lang3.StringUtils;
17
import org.apache.commons.logging.Log;
18
import org.apache.commons.logging.LogFactory;
19

    
20
import static eu.dnetlib.openaire.common.Utils.escape;
21
import static eu.dnetlib.openaire.community.CommunityConstants.*;
22

    
23
public class CommunityMappingUtils {
24
	private static final Log log = LogFactory.getLog(CommunityMappingUtils.class);
25
	public static CommunitySummary asCommunitySummary(final Context c) {
26
		final CommunitySummary summary = new CommunitySummary();
27

    
28
		summary.setId(c.getId());
29
		summary.setShortName(c.getLabel());
30
		summary.setQueryId(c.getId() + PIPE_SEPARATOR + c.getLabel());
31
		summary.setType(c.getType());
32

    
33
		final Map<String, List<Param>> params = c.getParams();
34
		if (params.containsKey(CSUMMARY_DESCRIPTION)) {
35
			summary.setDescription(asCsv(params.get(CSUMMARY_DESCRIPTION)));
36
		}
37
		if (params.containsKey(CSUMMARY_LOGOURL)) {
38
			summary.setLogoUrl(asCsv(params.get(CSUMMARY_LOGOURL)));
39
		}
40
		if (params.containsKey(CSUMMARY_STATUS)) {
41
			summary.setStatus(CommunityStatus.valueOf(firstValue(params, CSUMMARY_STATUS)));
42
		}
43
		if (params.containsKey(CSUMMARY_NAME)) {
44
			summary.setName(asCsv(params.get(CSUMMARY_NAME)));
45
		}
46
		if (params.containsKey(CSUMMARY_MANAGER)) {
47
			summary.setManagers(splitValues(asValues(params.get(CSUMMARY_MANAGER)), CSV_DELIMITER));
48
		}
49
		if (params.containsKey(CSUMMARY_ZENODOC)) {
50
			summary.setZenodoCommunity(asCsv(params.get(CSUMMARY_ZENODOC)));
51
			log.info("zenodoCommunity: " + asCsv(params.get(CSUMMARY_ZENODOC)));
52
		}
53

    
54
		return summary;
55
	}
56

    
57
	public static CommunityDetails asCommunityProfile(final Context c) {
58

    
59
		final CommunityDetails p = new CommunityDetails(asCommunitySummary(c));
60
		p.setCreationDate(c.getDateofcreation());
61
		final Map<String, List<Param>> params = c.getParams();
62
		if (params.containsKey(CPROFILE_SUBJECT)) {
63
			p.setSubjects(splitValues(asValues(params.get(CPROFILE_SUBJECT)), CSV_DELIMITER));
64
		}
65

    
66
		return p;
67
	}
68

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

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

    
81
		return project;
82
	}
83

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

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

    
94
		return d;
95
	}
96

    
97
	private static List<String> splitValues(final Stream<String> stream, final String separator) {
98
		return stream.map(s -> s.split(separator))
99
				.map(Arrays::asList)
100
				.flatMap(List::stream)
101
				.filter(StringUtils::isNotBlank)
102
				.map(StringUtils::trim)
103
				.collect(Collectors.toList());
104
	}
105

    
106
	private static String firstValue(final Map<String, List<Param>> p, final String paramName) {
107
		final Optional<String> first = asValues(p.get(paramName)).findFirst();
108
		return first.isPresent() ? first.get() : null;
109
	}
110

    
111
	private static String asCsv(final List<Param> params) {
112
		return asValues(params)
113
				.collect(Collectors.joining(CSV_DELIMITER));
114
	}
115

    
116
	private static Stream<String> asValues(final List<Param> params) {
117
		return params == null ? Stream.empty() : params.stream()
118
				.map(Param::getValue)
119
				.map(StringUtils::trim)
120
				.distinct();
121
	}
122

    
123
	public static String asProjectXML(final String contextId, final CommunityProject project) {
124
		final Escaper esc = XmlEscapers.xmlAttributeEscaper();
125
		final StringBuilder sb = new StringBuilder();
126
		sb.append(
127
				String.format(
128
						"<concept claim='true' id='%s%s%s%s' label='%s'>\n",
129
						escape(esc, contextId), PROJECTS_ID_SUFFIX, ID_SEPARATOR, escape(esc, String.valueOf(project.getId())), escape(esc, project.getAcronym())));
130
		sb.append(paramXML(CPROJECT_FULLNAME, project.getName()));
131
		sb.append(paramXML(CPROJECT_ACRONYM, project.getAcronym()));
132
		sb.append(paramXML(CPROJECT_NUMBER, project.getGrantId()));
133
		sb.append(paramXML(CPROJECT_FUNDER, project.getFunder()));
134
		sb.append(paramXML(OPENAIRE_ID, project.getOpenaireId()));
135
		sb.append("</concept>\n");
136
		return sb.toString();
137
	}
138

    
139
	public static String asContentProviderXML(final String contextId, final CommunityContentprovider ccp) {
140
		final Escaper esc = XmlEscapers.xmlAttributeEscaper();
141
		final StringBuilder sb = new StringBuilder();
142
		sb.append(
143
				String.format(
144
						"<concept claim='true' id='%s%s%s%s' label='%s'>\n",
145
						escape(esc, contextId), CONTENTPROVIDERS_ID_SUFFIX, ID_SEPARATOR, escape(esc, String.valueOf(ccp.getId())), escape(esc, ccp.getName())));
146
		sb.append(paramXML(OPENAIRE_ID, ccp.getOpenaireId()));
147
		sb.append(paramXML(CCONTENTPROVIDER_NAME, ccp.getName()));
148
		sb.append(paramXML(CCONTENTPROVIDER_OFFICIALNAME, ccp.getOfficialname()));
149
		sb.append("</concept>\n");
150
		return sb.toString();
151
	}
152

    
153
	private static String paramXML(final String paramName, final String value) {
154
		return String.format("<param name='%s'>%s</param>\n", paramName, escape(XmlEscapers.xmlContentEscaper(), value));
155
	}
156

    
157
}
(7-7/12)