Added unit test to verify the generation in the OriginalID the old openaire Identifier generated by OAI

This commit is contained in:
Sandro La Bruzzo 2022-07-20 15:33:37 +02:00
parent 27fbc9b385
commit c8ddb527b3
3 changed files with 53 additions and 64 deletions

View File

@ -26,26 +26,21 @@ public class OafMapperUtils {
if (ModelSupport.isSubClass(left, OafEntity.class)) {
return mergeEntities((OafEntity) left, (OafEntity) right);
} else if (ModelSupport.isSubClass(left, Relation.class)) {
((Relation) left).mergeFrom((Relation) right);
return OafUtils.mergeOAF(left, right);
} else {
throw new IllegalArgumentException("invalid Oaf type:" + left.getClass().getCanonicalName());
}
return left;
}
public static OafEntity mergeEntities(OafEntity left, OafEntity right) {
if (ModelSupport.isSubClass(left, Result.class)) {
return mergeResults((Result) left, (Result) right);
} else if (ModelSupport.isSubClass(left, Datasource.class)) {
left.mergeFrom(right);
} else if (ModelSupport.isSubClass(left, Organization.class)) {
left.mergeFrom(right);
} else if (ModelSupport.isSubClass(left, Project.class)) {
left.mergeFrom(right);
} else if (ModelSupport.isSubClass(left, Datasource.class) || ModelSupport.isSubClass(left, Organization.class) || ModelSupport.isSubClass(left, Project.class))
{
return OafUtils.mergeOAF(left, right);
} else {
throw new IllegalArgumentException("invalid OafEntity subtype:" + left.getClass().getCanonicalName());
}
return left;
}
public static Result mergeResults(Result left, Result right) {
@ -59,13 +54,11 @@ public class OafMapperUtils {
if (!leftFromDelegatedAuthority && rightFromDelegatedAuthority) {
return right;
}
if (new ResultTypeComparator().compare(left, right) < 0) {
left.mergeFrom(right);
return left;
return OafUtils.mergeOAF(left, right);
} else {
right.mergeFrom(left);
return right;
return OafUtils.mergeOAF(right, left);
}
}
@ -419,7 +412,7 @@ public class OafMapperUtils {
public static Measure newMeasureInstance(String id, String value, String key, DataInfo dataInfo) {
Measure m = new Measure();
m.setId(id);
m.setUnit(Arrays.asList(newKeyValueInstance(key, value, dataInfo)));
m.setUnit(Collections.singletonList(newKeyValueInstance(key, value, dataInfo)));
return m;
}
}

View File

@ -240,7 +240,7 @@ public class OafUtils {
* @param enrich second object
* @return the merged object
*/
public static Oaf mergeOAF(Oaf original, Oaf enrich) {
public static <T extends Oaf> T mergeOAF(T original, T enrich) {
if (original == null)
return enrich;
if (enrich == null)
@ -251,10 +251,7 @@ public class OafUtils {
original.getClass().getCanonicalName(),
enrich.getClass().getCanonicalName()));
Oaf result = null;
Oaf result ;
switch (original.getClass().getSimpleName().toLowerCase()) {
case "relation":
@ -278,12 +275,11 @@ public class OafUtils {
case "organization":
result = mergeOAFOrganization((Organization) original, (Organization)enrich);
break;
default:
throw new RuntimeException("Trying to merge an unsupported class");
}
checkArgument(Objects.nonNull(result), "Undefined type on merge, " +
"allowed: relation, publication,otherresearchproduct, software and dataset");
result.setCollectedfrom(
Stream
.concat(
@ -304,7 +300,7 @@ public class OafUtils {
Optional.ofNullable(original.getLastupdatetimestamp()).orElse(0L),
Optional.ofNullable(enrich.getLastupdatetimestamp()).orElse(0L)));
return result;
return (T) result;
}
@ -351,7 +347,7 @@ public class OafUtils {
* @param titles the titles
* @return the main title
*/
private static StructuredProperty getMainTitle(List<StructuredProperty> titles) {
private static StructuredProperty getMainTitle(final List<StructuredProperty> titles) {
// need to check if the list of titles contains more than 1 main title? (in that case, we should chose which
// main title select in the list)
for (StructuredProperty t : titles) {
@ -363,7 +359,7 @@ public class OafUtils {
}
private static OafEntity mergeEntity(OafEntity original, OafEntity enrich) {
private static OafEntity mergeEntity(final OafEntity original,final OafEntity enrich) {
final OafEntity mergedEntity = original;
@ -389,7 +385,7 @@ public class OafUtils {
}
private static Result mergeOAFResult(Result original, Result enrich) {
private static Result mergeOAFResult(final Result original,final Result enrich) {
final Result mergedResult = (Result) mergeEntity(original, enrich);
@ -491,7 +487,7 @@ public class OafUtils {
return mergedResult;
}
private static OtherResearchProduct mergeOAFOtherResearchProduct(OtherResearchProduct original, OtherResearchProduct enrich) {
private static OtherResearchProduct mergeOAFOtherResearchProduct(final OtherResearchProduct original,final OtherResearchProduct enrich) {
final OtherResearchProduct mergedORP = (OtherResearchProduct) mergeOAFResult(original, enrich);
@ -503,7 +499,7 @@ public class OafUtils {
return mergedORP;
}
private static Software mergeOAFSoftware(Software original, Software enrich) {
private static Software mergeOAFSoftware(final Software original, final Software enrich) {
final Software mergedSoftware = (Software) mergeOAFResult(original, enrich);
mergedSoftware.setDocumentationUrl(mergeLists(mergedSoftware.getDocumentationUrl(), enrich.getDocumentationUrl()));

View File

@ -67,7 +67,7 @@ class MergeTest {
a.setCollectedfrom(Arrays.asList(setKV("a", "open"), setKV("b", "closed")));
b.setCollectedfrom(Arrays.asList(setKV("A", "open"), setKV("b", "Open")));
a = (Publication) OafUtils.mergeOAF(a, b);
a = OafUtils.mergeOAF(a, b);
assertNotNull(a.getCollectedfrom());
@ -83,7 +83,7 @@ class MergeTest {
* @return the list
* @throws Exception the exception
*/
private <T extends Result> List<Result> loadResourceResult(final String path, final Class<T> clazz ) throws Exception {
private <T extends Result> List<T> loadResourceResult(final String path, final Class<T> clazz ) throws Exception {
final ObjectMapper mapper = new ObjectMapper();
final InputStream str = Objects.requireNonNull(getClass().getResourceAsStream(path));
// LOAD test publications
@ -104,7 +104,7 @@ class MergeTest {
* @param enrichment the enrichment
* @param overrideAlternateIdentifier the override alternate identifier
*/
private void updatePidIntoPublicationInstance(final List<Result> source, final List<Result>enrichment, final boolean overrideAlternateIdentifier) {
private <T extends Result> void updatePidIntoPublicationInstance(final List<T> source, final List<T>enrichment, final boolean overrideAlternateIdentifier) {
for(int i = 0 ; i< source.size(); i++) {
final Result currentPub = source.get(i);
final Result currentEnrichment = enrichment.get(i);
@ -117,17 +117,17 @@ class MergeTest {
}
private void applyAndVerifyEnrichment(final List<Result> l1, final List<Result> l2) {
private <T extends Result> void applyAndVerifyEnrichment(final List<T> l1, final List<T> l2) {
// Apply Merge and verify that enrichments works
for(int i = 0 ; i< l1.size(); i++) {
final Result currentPub = l2.get(i);
final Result currentEnrichment = l1.get(i);
currentPub.mergeFrom(currentEnrichment);
assertEquals(1, currentPub.getInstance().size());
final Instance currentInstance = Objects.requireNonNull(currentPub.getInstance()).get(0);
final Result result = OafUtils.mergeOAF(currentPub, currentEnrichment);
assertEquals(1, result.getInstance().size());
final Instance currentInstance = Objects.requireNonNull(result.getInstance()).get(0);
assertNotNull(currentInstance.getMeasures());
assertNotNull(currentPub.getTitle());
assertFalse(Result.isAnEnrichment(currentPub));
assertNotNull(result.getTitle());
assertFalse(OafUtils.isAnEnrichment(result));
}
}
@ -140,7 +140,7 @@ class MergeTest {
@Test
void testAPCMerge() throws Exception {
List<Result> publications = loadResourceResult("/eu/dnetlib/dhp/schema/oaf/utils/publication_apc.json", Publication.class);
List<Publication> publications = loadResourceResult("/eu/dnetlib/dhp/schema/oaf/utils/publication_apc.json", Publication.class);
System.out.println(publications.size());
publications.forEach(p -> assertEquals(1, p.getInstance().size()));
publications.forEach(p -> assertTrue(p.getProcessingchargeamount() != null ));
@ -161,7 +161,7 @@ class MergeTest {
Result p1 = publications.get(0);
Result p2 = publications.get(1);
p1.mergeFrom(p2);
p1 = OafUtils.mergeOAF(p1, p2);
assertEquals("1721.47", p1.getProcessingchargeamount().getValue());
assertEquals("EUR", p1.getProcessingchargecurrency().getValue());
@ -180,7 +180,7 @@ class MergeTest {
}
@Test
void testAPCMerge2() throws Exception {
List<Result> publications = loadResourceResult("/eu/dnetlib/dhp/schema/oaf/utils/publication_apc2.json", Publication.class);
List<Publication> publications = loadResourceResult("/eu/dnetlib/dhp/schema/oaf/utils/publication_apc2.json", Publication.class);
System.out.println(publications.size());
publications.forEach(p -> assertEquals(1, p.getInstance().size()));
assertTrue(publications.get(0).getProcessingchargeamount() != null );
@ -242,7 +242,7 @@ class MergeTest {
// 1 TEST UPDATING PID INSTANCE AND MERGE CURRENT PUBLICATION WITH ENRICHMENT
// LOAD test publications
List<Result> publications = loadResourceResult("/eu/dnetlib/dhp/schema/oaf/utils/publications.json", Publication.class);
List<Publication> publications = loadResourceResult("/eu/dnetlib/dhp/schema/oaf/utils/publications.json", Publication.class);
// Assert that each publication has only one instance and inside that all the measure field is empty
publications.forEach(p -> {
assertEquals(1, p.getInstance().size());
@ -251,7 +251,7 @@ class MergeTest {
});
// LOAD test enrichments
List<Result> enrichment = loadResourceResult("/eu/dnetlib/dhp/schema/oaf/utils/enrichment.json", Result.class);
List<Publication> enrichment = loadResourceResult("/eu/dnetlib/dhp/schema/oaf/utils/enrichment.json", Publication.class);
updatePidIntoPublicationInstance(publications, enrichment, false);
applyAndVerifyEnrichment(publications, enrichment);
@ -259,20 +259,20 @@ class MergeTest {
// 2 TEST UPDATING ALTERNATE ID INSTANCE AND MERGE CURRENT PUBLICATION WITH ENRICHMENT
publications = loadResourceResult("/eu/dnetlib/dhp/schema/oaf/utils/publications.json", Publication.class);
enrichment = loadResourceResult("/eu/dnetlib/dhp/schema/oaf/utils/enrichment.json", Result.class);
enrichment = loadResourceResult("/eu/dnetlib/dhp/schema/oaf/utils/enrichment.json", Publication.class);
updatePidIntoPublicationInstance(publications, enrichment, true);
applyAndVerifyEnrichment(publications, enrichment);
// 3 TEST UPDATING PID INSTANCE AND MERGE ENRICHMENT WITH CURRENT PUBLICATION
publications = loadResourceResult("/eu/dnetlib/dhp/schema/oaf/utils/publications.json", Publication.class);
enrichment = loadResourceResult("/eu/dnetlib/dhp/schema/oaf/utils/enrichment.json", Result.class);
enrichment = loadResourceResult("/eu/dnetlib/dhp/schema/oaf/utils/enrichment.json", Publication.class);
updatePidIntoPublicationInstance(publications, enrichment, false);
applyAndVerifyEnrichment( enrichment, publications);
// 4 TEST UPDATING ALTERNATE ID INSTANCE AND MERGE ENRICHMENT WITH CURRENT PUBLICATION
publications = loadResourceResult("/eu/dnetlib/dhp/schema/oaf/utils/publications.json", Publication.class);
enrichment = loadResourceResult("/eu/dnetlib/dhp/schema/oaf/utils/enrichment.json", Result.class);
enrichment = loadResourceResult("/eu/dnetlib/dhp/schema/oaf/utils/enrichment.json", Publication.class);
updatePidIntoPublicationInstance(publications, enrichment, true);
applyAndVerifyEnrichment( enrichment, publications);
@ -292,7 +292,7 @@ class MergeTest {
a.setDateofacceptance(field("2021-06-18"));
b.setDateofacceptance(field("2021-06-19"));
a.mergeFrom(b);
a = OafUtils.mergeOAF(a,b);
assertNotNull(a.getDateofacceptance());
assertEquals("2021-06-18", a.getDateofacceptance().getValue());
@ -310,7 +310,7 @@ class MergeTest {
a.setDateofacceptance(field("2021-06-18"));
b.setDateofacceptance(field("2021-06-19"));
a.mergeFrom(b);
a = OafUtils.mergeOAF(a,b);
assertNotNull(a.getDateofacceptance());
assertEquals("2021-06-19", a.getDateofacceptance().getValue());
@ -328,7 +328,7 @@ class MergeTest {
a.setDateofacceptance(field("2021-06-18"));
b.setDateofacceptance(field("2021-06-19"));
a.mergeFrom(b);
a = OafUtils.mergeOAF(a,b);
assertNotNull(a.getDateofacceptance());
assertEquals("2021-06-18", a.getDateofacceptance().getValue());
@ -345,7 +345,7 @@ class MergeTest {
b.setDateofacceptance(field("2021-06-19"));
a.mergeFrom(b);
a = OafUtils.mergeOAF(a,b);
assertNotNull(a.getDateofacceptance());
assertEquals("2021-06-19", a.getDateofacceptance().getValue());
@ -362,7 +362,7 @@ class MergeTest {
b.setDateofacceptance(field("2021-06-19"));
a.mergeFrom(b);
a = OafUtils.mergeOAF(a,b);
assertNotNull(a.getDateofacceptance());
assertEquals("2021-06-19", a.getDateofacceptance().getValue());
@ -379,7 +379,7 @@ class MergeTest {
b.setDateofacceptance(field("2021-06-19"));
a.mergeFrom(b);
a = OafUtils.mergeOAF(a,b);
assertNotNull(a.getDateofacceptance());
assertEquals("2021-06-19", a.getDateofacceptance().getValue());
@ -396,7 +396,7 @@ class MergeTest {
a.setDateofacceptance(field("2021-06-19"));
a.mergeFrom(b);
a = OafUtils.mergeOAF(a,b);
assertNotNull(a.getDateofacceptance());
assertEquals("2021-06-19", a.getDateofacceptance().getValue());
@ -413,7 +413,7 @@ class MergeTest {
a.setDateofacceptance(field("2021-06-19"));
a.mergeFrom(b);
a = OafUtils.mergeOAF(a,b);
assertNotNull(a.getDateofacceptance());
assertEquals("2021-06-19", a.getDateofacceptance().getValue());
@ -430,7 +430,7 @@ class MergeTest {
a.setDateofacceptance(field("2021-06-19"));
a.mergeFrom(b);
a = OafUtils.mergeOAF(a,b);
assertNotNull(a.getDateofacceptance());
assertEquals("2021-06-19", a.getDateofacceptance().getValue());
@ -448,7 +448,7 @@ class MergeTest {
a.setSubject(Arrays.asList(setSP("a", "open", "classe"), setSP("b", "open", "classe")));
b.setSubject(Arrays.asList(setSP("A", "open", "classe"), setSP("c", "open", "classe")));
a.mergeFrom(b);
a = OafUtils.mergeOAF(a,b);
assertNotNull(a.getSubject());
assertEquals(3, a.getSubject().size());
@ -462,37 +462,37 @@ class MergeTest {
Relation a = createRel(null, null);
Relation b = createRel(null, null);
a.mergeFrom(b);
a = OafUtils.mergeOAF(a,b);
assertEquals(a, b);
a = createRel(true, null);
b = createRel(null, null);
a.mergeFrom(b);
a = OafUtils.mergeOAF(a,b);
assertEquals(true, a.getValidated());
a = createRel(true, null);
b = createRel(false, null);
a.mergeFrom(b);
a = OafUtils.mergeOAF(a,b);
assertEquals(true, a.getValidated());
a = createRel(true, null);
b = createRel(true, "2016-04-05T12:41:19.202Z");
a.mergeFrom(b);
a = OafUtils.mergeOAF(a,b);
assertEquals("2016-04-05T12:41:19.202Z", a.getValidationDate());
a = createRel(true, "2016-05-07T12:41:19.202Z");
b = createRel(true, "2016-04-05T12:41:19.202Z");
a.mergeFrom(b);
a = OafUtils.mergeOAF(a,b);
assertEquals("2016-04-05T12:41:19.202Z", a.getValidationDate());
a = createRel(true, "2020-09-10 11:08:52");
b = createRel(true, "2021-09-10 11:08:52");
a.mergeFrom(b);
a = OafUtils.mergeOAF(a,b);
assertEquals("2020-09-10 11:08:52", a.getValidationDate());
a = createRel(true, "2021-03-16T10:32:42Z");
b = createRel(true, "2020-03-16T10:32:42Z");
a.mergeFrom(b);
a = OafUtils.mergeOAF(a,b);
assertEquals("2020-03-16T10:32:42Z", a.getValidationDate());
@ -506,7 +506,7 @@ class MergeTest {
assertThrows(DateTimeParseException.class, () -> {
Relation a = createRel(true, "Once upon a time ...");
Relation b = createRel(true, "... in a far away land");
a.mergeFrom(b);
a = OafUtils.mergeOAF(a,b);
});
}