Revision 46998
Added by Claudio Atzori almost 7 years ago
DatasourceManagerServiceImpl.java | ||
---|---|---|
1 | 1 |
package eu.dnetlib.enabling.datasources; |
2 | 2 |
|
3 | 3 |
import java.io.StringReader; |
4 |
import java.util.Collections; |
|
5 |
import java.util.Date; |
|
6 |
import java.util.HashMap; |
|
7 |
import java.util.List; |
|
8 |
import java.util.Map; |
|
4 |
import java.util.*; |
|
9 | 5 |
import java.util.Map.Entry; |
6 |
import java.util.stream.Collectors; |
|
10 | 7 |
|
8 |
import com.google.common.collect.Iterables; |
|
9 |
import com.google.common.collect.Lists; |
|
10 |
import com.google.common.collect.Maps; |
|
11 |
import eu.dnetlib.enabling.datasources.rmi.*; |
|
12 |
import eu.dnetlib.enabling.tools.AbstractBaseService; |
|
11 | 13 |
import org.apache.commons.lang.StringEscapeUtils; |
12 | 14 |
import org.apache.commons.lang.StringUtils; |
13 | 15 |
import org.apache.commons.lang.math.NumberUtils; |
... | ... | |
18 | 20 |
import org.dom4j.io.SAXReader; |
19 | 21 |
import org.springframework.beans.factory.annotation.Required; |
20 | 22 |
|
21 |
import com.google.common.base.Function; |
|
22 |
import com.google.common.collect.Iterables; |
|
23 |
import com.google.common.collect.Lists; |
|
24 |
import com.google.common.collect.Maps; |
|
23 |
import static eu.dnetlib.enabling.datasources.DatasourceFunctions.asMapOfSqlValues; |
|
24 |
import static eu.dnetlib.enabling.datasources.DatasourceFunctions.asSqlValue; |
|
25 | 25 |
|
26 |
import eu.dnetlib.enabling.datasources.rmi.BrowsableField; |
|
27 |
import eu.dnetlib.enabling.datasources.rmi.BrowseTerm; |
|
28 |
import eu.dnetlib.enabling.datasources.rmi.DatasourceConstants; |
|
29 |
import eu.dnetlib.enabling.datasources.rmi.DatasourceDesc; |
|
30 |
import eu.dnetlib.enabling.datasources.rmi.DatasourceManagerService; |
|
31 |
import eu.dnetlib.enabling.datasources.rmi.DatasourceManagerServiceException; |
|
32 |
import eu.dnetlib.enabling.datasources.rmi.IfaceDesc; |
|
33 |
import eu.dnetlib.enabling.datasources.rmi.RepositoryMapEntry; |
|
34 |
import eu.dnetlib.enabling.datasources.rmi.SearchInterfacesEntry; |
|
35 |
import eu.dnetlib.enabling.datasources.rmi.SimpleDatasourceDesc; |
|
36 |
import eu.dnetlib.enabling.tools.AbstractBaseService; |
|
37 | 26 |
|
38 | 27 |
public class DatasourceManagerServiceImpl extends AbstractBaseService implements DatasourceManagerService { |
39 | 28 |
|
... | ... | |
49 | 38 |
ds.setAggregator("OPENAIRE"); |
50 | 39 |
} |
51 | 40 |
|
52 |
final Map<String, Object> params = DatasourceFunctions.asMapOfSqlValues(ds);
|
|
41 |
final Map<String, Object> params = asMapOfSqlValues(ds); |
|
53 | 42 |
|
54 | 43 |
if ((ds.getOrganization() != null) && !ds.getOrganization().trim().isEmpty()) { |
55 | 44 |
params.put("hasOrganization", 1); |
... | ... | |
61 | 50 |
public boolean deleteDatasource(final String dsId) throws DatasourceManagerServiceException { |
62 | 51 |
final Map<String, Object> params = Maps.newHashMap(); |
63 | 52 |
|
64 |
params.put("dsId", DatasourceFunctions.asSqlValue(dsId)); |
|
65 | 53 |
|
54 |
|
|
55 |
params.put("dsId", asSqlValue(dsId)); |
|
56 |
|
|
66 | 57 |
return datasourceManagerClients.updateSQL(dsId, "deleteDatasource.sql.st", params, true, true); |
67 | 58 |
} |
68 | 59 |
|
69 | 60 |
@Override |
70 | 61 |
public DatasourceDesc getDatasource(final String dsId) throws DatasourceManagerServiceException { |
71 |
final List<DatasourceDesc> list = datasourceManagerClients.getDatasourcesByCondition("ds.id = " + DatasourceFunctions.asSqlValue(dsId));
|
|
62 |
final List<DatasourceDesc> list = datasourceManagerClients.getDatasourcesByCondition("ds.id = " + asSqlValue(dsId)); |
|
72 | 63 |
if (list.size() != 1) { throw new DatasourceManagerServiceException("Datasource not found, id=" + dsId); } |
73 | 64 |
|
74 | 65 |
return list.get(0); |
... | ... | |
91 | 82 |
if (!cond.isEmpty()) { |
92 | 83 |
cond += " and "; |
93 | 84 |
} |
94 |
cond += "ag.compatibilityclass=" + DatasourceFunctions.asSqlValue(compliance);
|
|
85 |
cond += "ag.compatibilityclass=" + asSqlValue(compliance); |
|
95 | 86 |
} |
96 | 87 |
|
97 | 88 |
if ((contentDescription != null) && !contentDescription.isEmpty()) { |
98 | 89 |
if (!cond.isEmpty()) { |
99 | 90 |
cond += " and "; |
100 | 91 |
} |
101 |
cond += "ag.contentdescriptionclass=" + DatasourceFunctions.asSqlValue(contentDescription);
|
|
92 |
cond += "ag.contentdescriptionclass=" + asSqlValue(contentDescription); |
|
102 | 93 |
} |
103 | 94 |
|
104 | 95 |
if ((iisProcessingWorkflow != null) && !iisProcessingWorkflow.isEmpty()) { |
... | ... | |
112 | 103 |
if (!cond.isEmpty()) { |
113 | 104 |
cond += " and "; |
114 | 105 |
} |
115 |
cond += "ds.collectedfrom=" + DatasourceFunctions.asSqlValue(collectedFrom);
|
|
106 |
cond += "ds.collectedfrom=" + asSqlValue(collectedFrom); |
|
116 | 107 |
} |
117 | 108 |
|
118 | 109 |
return datasourceManagerClients.getDatasourcesByCondition(cond); |
... | ... | |
122 | 113 |
public boolean updateActivationStatus(final String dsId, final String ifaceId, final boolean active) throws DatasourceManagerServiceException { |
123 | 114 |
final Map<String, Object> params = Maps.newHashMap(); |
124 | 115 |
|
125 |
params.put("active", DatasourceFunctions.asSqlValue(active));
|
|
126 |
params.put("ifaceId", DatasourceFunctions.asSqlValue(ifaceId));
|
|
127 |
params.put("dsId", DatasourceFunctions.asSqlValue(dsId));
|
|
116 |
params.put("active", asSqlValue(active)); |
|
117 |
params.put("ifaceId", asSqlValue(ifaceId)); |
|
118 |
params.put("dsId", asSqlValue(dsId)); |
|
128 | 119 |
|
129 | 120 |
return datasourceManagerClients.updateSQL(dsId, "updateActivationStatus.sql.st", params, false, true); |
130 | 121 |
} |
... | ... | |
133 | 124 |
public boolean updateLevelOfCompliance(final String dsId, final String ifaceId, final String level) throws DatasourceManagerServiceException { |
134 | 125 |
final Map<String, Object> params = Maps.newHashMap(); |
135 | 126 |
|
136 |
params.put("level", DatasourceFunctions.asSqlValue(level));
|
|
137 |
params.put("ifaceId", DatasourceFunctions.asSqlValue(ifaceId));
|
|
138 |
params.put("dsId", DatasourceFunctions.asSqlValue(dsId));
|
|
127 |
params.put("level", asSqlValue(level)); |
|
128 |
params.put("ifaceId", asSqlValue(ifaceId)); |
|
129 |
params.put("dsId", asSqlValue(dsId)); |
|
139 | 130 |
|
140 | 131 |
return datasourceManagerClients.updateSQL(dsId, "updateLevelOfCompliance.sql.st", params, false, true); |
141 | 132 |
} |
... | ... | |
148 | 139 |
@Override |
149 | 140 |
public boolean updateContentDescription(final String dsId, final String ifaceId, final String desc) throws DatasourceManagerServiceException { |
150 | 141 |
final Map<String, Object> params = Maps.newHashMap(); |
151 |
params.put("desc", DatasourceFunctions.asSqlValue(desc));
|
|
152 |
params.put("ifaceId", DatasourceFunctions.asSqlValue(ifaceId));
|
|
153 |
params.put("dsId", DatasourceFunctions.asSqlValue(dsId));
|
|
142 |
params.put("desc", asSqlValue(desc)); |
|
143 |
params.put("ifaceId", asSqlValue(ifaceId)); |
|
144 |
params.put("dsId", asSqlValue(dsId)); |
|
154 | 145 |
|
155 | 146 |
return datasourceManagerClients.updateSQL(dsId, "updateContentDescription.sql.st", params, false, true); |
156 | 147 |
} |
... | ... | |
164 | 155 |
public boolean addInterface(final String dsId, final IfaceDesc iface) throws DatasourceManagerServiceException { |
165 | 156 |
final Map<String, Object> params = Maps.newHashMap(); |
166 | 157 |
|
167 |
params.put("datasource", DatasourceFunctions.asSqlValue(dsId));
|
|
168 |
params.put("id", DatasourceFunctions.asSqlValue(iface.getId()));
|
|
169 |
params.put("typology", DatasourceFunctions.asSqlValue(iface.getTypology()));
|
|
170 |
params.put("protocol", DatasourceFunctions.asSqlValue(iface.getAccessProtocol()));
|
|
171 |
params.put("baseUrl", DatasourceFunctions.asSqlValue(iface.getBaseUrl()));
|
|
172 |
params.put("description", DatasourceFunctions.asSqlValue(iface.getContentDescription()));
|
|
173 |
params.put("compliance", DatasourceFunctions.asSqlValue(iface.getCompliance()));
|
|
158 |
params.put("datasource", asSqlValue(dsId)); |
|
159 |
params.put("id", asSqlValue(iface.getId())); |
|
160 |
params.put("typology", asSqlValue(iface.getTypology())); |
|
161 |
params.put("protocol", asSqlValue(iface.getAccessProtocol())); |
|
162 |
params.put("baseUrl", asSqlValue(iface.getBaseUrl())); |
|
163 |
params.put("description", asSqlValue(iface.getContentDescription())); |
|
164 |
params.put("compliance", asSqlValue(iface.getCompliance())); |
|
174 | 165 |
|
175 |
final Map<String, String> accessParams = new HashMap<String, String>();
|
|
166 |
final Map<String, String> accessParams = new HashMap<>(); |
|
176 | 167 |
if (iface.getAccessParams() != null) { |
177 | 168 |
for (final Entry<String, String> e : iface.getAccessParams().entrySet()) { |
178 |
accessParams.put(DatasourceFunctions.asSqlValue(e.getKey()), DatasourceFunctions.asSqlValue(e.getValue()));
|
|
169 |
accessParams.put(asSqlValue(e.getKey()), asSqlValue(e.getValue()));
|
|
179 | 170 |
} |
180 | 171 |
} |
181 | 172 |
params.put("accessParams", accessParams); |
182 | 173 |
|
183 |
final Map<String, String> extraFields = new HashMap<String, String>();
|
|
174 |
final Map<String, String> extraFields = new HashMap<>(); |
|
184 | 175 |
if (iface.getExtraFields() != null) { |
185 | 176 |
for (final Entry<String, String> e : iface.getExtraFields().entrySet()) { |
186 |
extraFields.put(DatasourceFunctions.asSqlValue(e.getKey()), DatasourceFunctions.asSqlValue(e.getValue()));
|
|
177 |
extraFields.put(asSqlValue(e.getKey()), asSqlValue(e.getValue()));
|
|
187 | 178 |
} |
188 | 179 |
} |
189 | 180 |
params.put("extraFields", extraFields); |
... | ... | |
195 | 186 |
public boolean deleteInterface(final String dsId, final String ifcId) throws DatasourceManagerServiceException { |
196 | 187 |
final Map<String, Object> params = Maps.newHashMap(); |
197 | 188 |
|
198 |
params.put("datasource", DatasourceFunctions.asSqlValue(dsId));
|
|
199 |
params.put("id", DatasourceFunctions.asSqlValue(ifcId));
|
|
189 |
params.put("datasource", asSqlValue(dsId)); |
|
190 |
params.put("id", asSqlValue(ifcId)); |
|
200 | 191 |
|
201 | 192 |
return datasourceManagerClients.updateSQL(dsId, "deleteInterface.sql.st", params, false, true); |
202 | 193 |
} |
... | ... | |
224 | 215 |
|
225 | 216 |
final Map<String, Object> params = Maps.newHashMap(); |
226 | 217 |
|
227 |
params.put("dsId", DatasourceFunctions.asSqlValue(openaireDsId));
|
|
228 |
params.put("ifaceId", DatasourceFunctions.asSqlValue(ifaceId));
|
|
229 |
params.put("field", DatasourceFunctions.asSqlValue(field));
|
|
218 |
params.put("dsId", asSqlValue(openaireDsId)); |
|
219 |
params.put("ifaceId", asSqlValue(ifaceId)); |
|
220 |
params.put("field", asSqlValue(field)); |
|
230 | 221 |
params.put("accessParam", accessParam); |
231 | 222 |
|
232 | 223 |
if (value != null) { |
233 |
params.put("value", DatasourceFunctions.asSqlValue(value));
|
|
224 |
params.put("value", asSqlValue(value)); |
|
234 | 225 |
} |
235 | 226 |
|
236 | 227 |
if (datasourceManagerClients.isDefinedParam(ifaceId, field)) { |
... | ... | |
247 | 238 |
public boolean deleteAccessParamOrExtraField(final String dsId, final String ifaceId, final String field) throws DatasourceManagerServiceException { |
248 | 239 |
final Map<String, Object> params = Maps.newHashMap(); |
249 | 240 |
|
250 |
params.put("dsId", DatasourceFunctions.asSqlValue(dsId));
|
|
251 |
params.put("ifaceId", DatasourceFunctions.asSqlValue(ifaceId));
|
|
252 |
params.put("field", DatasourceFunctions.asSqlValue(field));
|
|
241 |
params.put("dsId", asSqlValue(dsId)); |
|
242 |
params.put("ifaceId", asSqlValue(ifaceId)); |
|
243 |
params.put("field", asSqlValue(field)); |
|
253 | 244 |
|
254 | 245 |
return datasourceManagerClients.updateSQL(dsId, "deleteApiCollectionsRow.sql.st", params, false, true); |
255 | 246 |
} |
... | ... | |
295 | 286 |
private boolean deleteOldExtraFields(final String dsId, final String ifaceId) throws DatasourceManagerServiceException { |
296 | 287 |
final Map<String, Object> params = Maps.newHashMap(); |
297 | 288 |
|
298 |
params.put("dsId", DatasourceFunctions.asSqlValue(dsId));
|
|
299 |
params.put("ifaceId", DatasourceFunctions.asSqlValue(ifaceId));
|
|
289 |
params.put("dsId", asSqlValue(dsId)); |
|
290 |
params.put("ifaceId", asSqlValue(ifaceId)); |
|
300 | 291 |
|
301 | 292 |
return datasourceManagerClients.updateSQL(dsId, "deleteOldExtraFields.sql.st", params, false, false); |
302 | 293 |
} |
... | ... | |
305 | 296 |
throws DatasourceManagerServiceException { |
306 | 297 |
final Map<String, Object> params = Maps.newHashMap(); |
307 | 298 |
|
308 |
params.put("dsId", DatasourceFunctions.asSqlValue(dsId));
|
|
309 |
params.put("ifaceId", DatasourceFunctions.asSqlValue(ifaceId));
|
|
310 |
params.put("field", DatasourceFunctions.asSqlValue(field));
|
|
299 |
params.put("dsId", asSqlValue(dsId)); |
|
300 |
params.put("ifaceId", asSqlValue(ifaceId)); |
|
301 |
params.put("field", asSqlValue(field)); |
|
311 | 302 |
params.put("accessParam", accessParam); |
312 | 303 |
|
313 | 304 |
if (value != null) { |
314 |
params.put("value", DatasourceFunctions.asSqlValue(value));
|
|
305 |
params.put("value", asSqlValue(value)); |
|
315 | 306 |
} |
316 | 307 |
|
317 | 308 |
if (accessParam && datasourceManagerClients.isDefinedParam(ifaceId, field)) { |
... | ... | |
337 | 328 |
final String dsId = datasourceManagerClients.findDatasourceId(repoId); |
338 | 329 |
|
339 | 330 |
final Map<String, Object> params = Maps.newHashMap(); |
340 |
params.put("dsId", DatasourceFunctions.asSqlValue(dsId));
|
|
341 |
params.put("ifaceId", DatasourceFunctions.asSqlValue(ifaceId));
|
|
342 |
params.put("field", DatasourceFunctions.asSqlValue(DatasourceConstants.OVERRIDING_COMPLIANCE_FIELD));
|
|
331 |
params.put("dsId", asSqlValue(dsId)); |
|
332 |
params.put("ifaceId", asSqlValue(ifaceId)); |
|
333 |
params.put("field", asSqlValue(DatasourceConstants.OVERRIDING_COMPLIANCE_FIELD)); |
|
343 | 334 |
|
344 | 335 |
if (StringUtils.isEmpty(compliance)) { |
345 | 336 |
params.put("delete", true); |
346 | 337 |
log.debug("Removing compliance"); |
347 | 338 |
} else { |
348 |
params.put("value", DatasourceFunctions.asSqlValue(compliance));
|
|
339 |
params.put("value", asSqlValue(compliance)); |
|
349 | 340 |
if (datasourceManagerClients.isDefinedParam(ifaceId, DatasourceConstants.OVERRIDING_COMPLIANCE_FIELD)) { |
350 | 341 |
params.put("update", true); |
351 | 342 |
log.debug("Updating compliance: " + compliance); |
... | ... | |
359 | 350 |
|
360 | 351 |
@Override |
361 | 352 |
public List<BrowsableField> listBrowsableFields() throws DatasourceManagerServiceException { |
362 |
return Lists.transform(getBrowsableFields(), new Function<DbBrowsableField, BrowsableField>() { |
|
363 |
|
|
364 |
@Override |
|
365 |
public BrowsableField apply(final DbBrowsableField f) { |
|
366 |
return new BrowsableField(f.getId(), f.getLabel()); |
|
367 |
} |
|
368 |
}); |
|
353 |
return getBrowsableFields().stream() |
|
354 |
.map(f -> new BrowsableField(f.getId(), f.getLabel())) |
|
355 |
.collect(Collectors.toList()); |
|
369 | 356 |
} |
370 | 357 |
|
371 | 358 |
@Override |
... | ... | |
410 | 397 |
|
411 | 398 |
final SAXReader reader = new SAXReader(); |
412 | 399 |
final Iterable<String> iter = datasourceManagerClients.searchSQL("searchRepoInterfaces.sql.st", params); |
413 |
return Lists.newArrayList(Iterables.transform(iter, new Function<String, SearchInterfacesEntry>() { |
|
400 |
return Lists.newArrayList(Iterables.transform(iter, s -> { |
|
401 |
final SearchInterfacesEntry iface = new SearchInterfacesEntry(); |
|
402 |
try { |
|
403 |
final Document doc = reader.read(new StringReader(s)); |
|
404 |
final String country = doc.valueOf("/ROW/FIELD[@name='country']"); |
|
414 | 405 |
|
415 |
@Override |
|
416 |
public SearchInterfacesEntry apply(final String s) { |
|
417 |
final SearchInterfacesEntry iface = new SearchInterfacesEntry(); |
|
418 |
try { |
|
419 |
final Document doc = reader.read(new StringReader(s)); |
|
420 |
final String country = doc.valueOf("/ROW/FIELD[@name='country']"); |
|
406 |
iface.setRepoId(doc.valueOf("/ROW/FIELD[@name='repoid']")); |
|
407 |
iface.setRepoCountry(StringUtils.isEmpty(country) ? "-" : country.toUpperCase()); |
|
408 |
iface.setRepoName(StringEscapeUtils.unescapeXml(doc.valueOf("/ROW/FIELD[@name='reponame']"))); |
|
409 |
iface.setRepoPrefix(doc.valueOf("/ROW/FIELD[@name='repoprefix']")); |
|
421 | 410 |
|
422 |
iface.setRepoId(doc.valueOf("/ROW/FIELD[@name='repoid']")); |
|
423 |
iface.setRepoCountry(StringUtils.isEmpty(country) ? "-" : country.toUpperCase()); |
|
424 |
iface.setRepoName(StringEscapeUtils.unescapeXml(doc.valueOf("/ROW/FIELD[@name='reponame']"))); |
|
425 |
iface.setRepoPrefix(doc.valueOf("/ROW/FIELD[@name='repoprefix']")); |
|
426 |
|
|
427 |
iface.setId(doc.valueOf("/ROW/FIELD[@name='id']")); |
|
428 |
iface.setActive(Boolean.valueOf(doc.valueOf("/ROW/FIELD[@name='active']"))); |
|
429 |
iface.setProtocol(doc.valueOf("/ROW/FIELD[@name='protocol']")); |
|
430 |
iface.setCompliance(doc.valueOf("/ROW/FIELD[@name='compliance']")); |
|
431 |
iface.setAggrDate(doc.valueOf("/ROW/FIELD[@name='aggrdate']")); |
|
432 |
iface.setAggrTotal(NumberUtils.toInt(doc.valueOf("/ROW/FIELD[@name='aggrtotal']"), 0)); |
|
433 |
} catch (final Exception e) { |
|
434 |
log.error(e); |
|
435 |
} |
|
436 |
return iface; |
|
411 |
iface.setId(doc.valueOf("/ROW/FIELD[@name='id']")); |
|
412 |
iface.setActive(Boolean.valueOf(doc.valueOf("/ROW/FIELD[@name='active']"))); |
|
413 |
iface.setProtocol(doc.valueOf("/ROW/FIELD[@name='protocol']")); |
|
414 |
iface.setCompliance(doc.valueOf("/ROW/FIELD[@name='compliance']")); |
|
415 |
iface.setAggrDate(doc.valueOf("/ROW/FIELD[@name='aggrdate']")); |
|
416 |
iface.setAggrTotal(NumberUtils.toInt(doc.valueOf("/ROW/FIELD[@name='aggrtotal']"), 0)); |
|
417 |
} catch (final Exception e) { |
|
418 |
log.error(e); |
|
437 | 419 |
} |
420 |
return iface; |
|
438 | 421 |
})); |
439 | 422 |
} catch (final Exception e) { |
440 | 423 |
log.error("Error searching field " + field + " - value: " + value, e); |
... | ... | |
455 | 438 |
|
456 | 439 |
try { |
457 | 440 |
final Iterable<String> iter = datasourceManagerClients.searchSQL("findReposMap.sql.st", null); |
458 |
return Lists.newArrayList(Iterables.transform(iter, new Function<String, RepositoryMapEntry>() { |
|
459 |
|
|
460 |
@Override |
|
461 |
public RepositoryMapEntry apply(final String s) { |
|
462 |
final RepositoryMapEntry r = new RepositoryMapEntry(); |
|
463 |
try { |
|
464 |
final Document doc = reader.read(new StringReader(s)); |
|
465 |
r.setId(doc.valueOf("/ROW/FIELD[@name='id']")); |
|
466 |
r.setName(StringEscapeUtils.unescapeXml(doc.valueOf("/ROW/FIELD[@name='name']"))); |
|
467 |
r.setLat(NumberUtils.toFloat(doc.valueOf("/ROW/FIELD[@name='lat']"), 0)); |
|
468 |
r.setLng(NumberUtils.toFloat(doc.valueOf("/ROW/FIELD[@name='lng']"), 0)); |
|
469 |
} catch (final Exception e) { |
|
470 |
log.error(e); |
|
471 |
} |
|
472 |
return r; |
|
441 |
return Lists.newArrayList(Iterables.transform(iter, s -> { |
|
442 |
final RepositoryMapEntry r = new RepositoryMapEntry(); |
|
443 |
try { |
|
444 |
final Document doc = reader.read(new StringReader(s)); |
|
445 |
r.setId(doc.valueOf("/ROW/FIELD[@name='id']")); |
|
446 |
r.setName(StringEscapeUtils.unescapeXml(doc.valueOf("/ROW/FIELD[@name='name']"))); |
|
447 |
r.setLat(NumberUtils.toFloat(doc.valueOf("/ROW/FIELD[@name='lat']"), 0)); |
|
448 |
r.setLng(NumberUtils.toFloat(doc.valueOf("/ROW/FIELD[@name='lng']"), 0)); |
|
449 |
} catch (final Exception e) { |
|
450 |
log.error(e); |
|
473 | 451 |
} |
452 |
return r; |
|
474 | 453 |
})); |
475 | 454 |
} catch (final Exception e) { |
476 | 455 |
log.error("Error obtaing repo map entries", e); |
Also available in: Unified diff
committing work in progress in the dedicated branch