Added in Utils methods that initialize the validation profiles based on the guidelines provided

This commit is contained in:
Katerina 2024-06-28 13:23:22 +03:00
parent 98aeeb6377
commit af7c7a2edc
4 changed files with 61 additions and 138 deletions

View File

@ -2,7 +2,7 @@ package eu.dnetlib.validatorapi.controllers;
import eu.dnetlib.validator2.validation.XMLApplicationProfile;
import eu.dnetlib.validator2.validation.guideline.Guideline;
import eu.dnetlib.validator2.validation.guideline.openaire.*;
import eu.dnetlib.validator2.validation.guideline.openaire.AbstractOpenAireProfile;
import eu.dnetlib.validatorapi.entities.*;
import eu.dnetlib.validatorapi.exceptions.ValidationException;
import eu.dnetlib.validatorapi.repositories.SummaryValidationJobRepository;
@ -12,6 +12,8 @@ import eu.dnetlib.validatorapi.repositories.ValidationResultRepository;
import eu.dnetlib.validatorapi.routes.FairOaiPmhRoute2;
import eu.dnetlib.validatorapi.routes.SimpleOaiPmhRoute;
import eu.dnetlib.validatorapi.utils.CheckCertificate;
import eu.dnetlib.validatorapi.utils.PrefixInitializer;
import eu.dnetlib.validatorapi.utils.ProfileInitializer;
import org.apache.camel.CamelContext;
import org.apache.camel.Exchange;
import org.apache.camel.ProducerTemplate;
@ -79,8 +81,8 @@ public class ValidationController {
@RequestParam(name="set", required = false) String set, @RequestParam(name="metadataPrefix", defaultValue = "oai_dc") String metadataPrefix,
@RequestParam(name="batchsize", defaultValue = "50") int batchSize) {
AbstractOpenAireProfile profile = initializeOpenAireProfile(guidelinesProfileName);
AbstractOpenAireProfile fairProfile = initializeFairProfile(guidelinesProfileName);
AbstractOpenAireProfile profile = ProfileInitializer.initializeOpenAireProfile(guidelinesProfileName);
AbstractOpenAireProfile fairProfile = ProfileInitializer.initializeFairProfile(guidelinesProfileName);
if (profile == null && fairProfile == null) {
log.error("Exception: No valid guidelines");
new Exception("Validation Job stopped unexpectedly. No valid guidelines were provided.");
@ -193,9 +195,9 @@ public class ValidationController {
@RequestParam(name="numberOfRecords", defaultValue = "10") int numberOfRecords,
@RequestParam(name="set", required = false) Optional<String> set) {
AbstractOpenAireProfile profile = initializeOpenAireProfile(guidelinesProfileName);
AbstractOpenAireProfile fairProfile = initializeFairProfile(guidelinesProfileName);
String metadataPrefix = initializeMetadataPrefix(guidelinesProfileName);
AbstractOpenAireProfile profile = ProfileInitializer.initializeOpenAireProfile(guidelinesProfileName);
AbstractOpenAireProfile fairProfile = ProfileInitializer.initializeFairProfile(guidelinesProfileName);
String metadataPrefix = PrefixInitializer.initializeMetadataPrefix(guidelinesProfileName);
if (profile == null && fairProfile == null) {
log.error("Exception: No valid guidelines " + guidelinesProfileName + ".");
@ -401,54 +403,7 @@ public class ValidationController {
return "-";
}
private AbstractOpenAireProfile initializeOpenAireProfile(String guidelinesProfileName) {
System.out.println("GUIDELINES " + guidelinesProfileName);
if (guidelinesProfileName.equals("OpenAIRE Guidelines for Data Archives Profile v2")) {
return new DataArchiveGuidelinesV2Profile();
} else if (guidelinesProfileName.equals("OpenAIRE Guidelines for Literature Repositories Profile v3")) {
return new LiteratureGuidelinesV3Profile();
} else if (guidelinesProfileName.equals("OpenAIRE Guidelines for Literature Repositories Profile v4")) {
return new LiteratureGuidelinesV4Profile();
} else if (guidelinesProfileName.equals("OpenAIRE FAIR Guidelines for Data Repositories Profile")) {//in case they give only fair. TODO: is ti possible?
return new FAIR_Data_GuidelinesProfile();
}
return null;
}
private String initializeMetadataPrefix(String guidelinesProfileName) {
if (guidelinesProfileName.equals("OpenAIRE Guidelines for Data Archives Profile v2") ||
guidelinesProfileName.equals("OpenAIRE FAIR Guidelines for Data Repositories Profile")) {
return "oai_datacite";
} else if (guidelinesProfileName.equals("OpenAIRE Guidelines for Literature Repositories Profile v3")) {
return "oai_dc";
} else if (guidelinesProfileName.equals("OpenAIRE Guidelines for Literature Repositories Profile v4")) {
return "oai_openaire";
}
return null;
}
private AbstractOpenAireProfile initializeFairProfile(String guidelinesProfileName) {
if (guidelinesProfileName.equals("OpenAIRE Guidelines for Data Archives Profile v2")) {
return new FAIR_Data_GuidelinesProfile();
} else if (guidelinesProfileName.equals("OpenAIRE Guidelines for Literature Repositories Profile v4")) {
return new FAIR_Literature_GuidelinesV4Profile();
}
return null;
}
private Document parseResponse(InputStream stream)
@ -481,8 +436,8 @@ public class ValidationController {
List<RuleInfo> resultRules = null;
List<RuleInfo> fairRules = null;
AbstractOpenAireProfile profile = initializeOpenAireProfile(guidelinesProfileName);
AbstractOpenAireProfile fairProfile = initializeFairProfile(guidelinesProfileName);
AbstractOpenAireProfile profile = ProfileInitializer.initializeOpenAireProfile(guidelinesProfileName);
AbstractOpenAireProfile fairProfile = ProfileInitializer.initializeFairProfile(guidelinesProfileName);
validationJob.guidelines = profile.name();
validationJobRepository.save(validationJob);
@ -581,9 +536,9 @@ public class ValidationController {
//@RequestParam(name="metadataPrefix", defaultValue = "oai_dc") String metadataPrefix
) {
AbstractOpenAireProfile profile = initializeOpenAireProfile(guidelinesProfileName);
AbstractOpenAireProfile fairProfile = initializeFairProfile(guidelinesProfileName);
String metadataPrefix = initializeMetadataPrefix(guidelinesProfileName);
AbstractOpenAireProfile profile = ProfileInitializer.initializeOpenAireProfile(guidelinesProfileName);
AbstractOpenAireProfile fairProfile = ProfileInitializer.initializeFairProfile(guidelinesProfileName);
String metadataPrefix = PrefixInitializer.initializeMetadataPrefix(guidelinesProfileName);
String endpoint = "oaipmh://"+baseURL + "?verb=ListRecords&metadataPrefix=" + metadataPrefix;
ProducerTemplate producerTemplate = camelContext.createProducerTemplate();

View File

@ -1,80 +0,0 @@
package eu.dnetlib.validatorapi.utils;
import org.hibernate.HibernateException;
import org.hibernate.engine.spi.SharedSessionContractImplementor;
import org.hibernate.usertype.UserType;
import java.io.Serializable;
import java.sql.*;
import java.util.Arrays;
public class CustomStringArrayType implements UserType {
@Override
public int[] sqlTypes() {
return new int[]{Types.ARRAY};
}
@Override
public Class returnedClass() {
return String[].class;
}
@Override
public boolean equals(Object o1, Object o2) throws HibernateException {
if (o1 instanceof String[] && o2 instanceof String[]) {
return Arrays.deepEquals((String[])o1, (String[])o2);
} else {
return false;
}
}
@Override
public int hashCode(Object o) throws HibernateException {
return Arrays.hashCode((String[])o);
}
@Override
public Object nullSafeGet(ResultSet resultSet, String[] names,
SharedSessionContractImplementor sharedSessionContractImplementor, Object o)
throws HibernateException, SQLException {
Array array = resultSet.getArray(names[0]);
return array != null ? array.getArray() : null;
}
@Override
public void nullSafeSet(PreparedStatement preparedStatement, Object value, int index,
SharedSessionContractImplementor sharedSessionContractImplementor) throws HibernateException, SQLException {
if (value != null && preparedStatement != null) {
Array array = sharedSessionContractImplementor.connection().createArrayOf("text", (String[])value);
preparedStatement.setArray(index, array);
} else {
preparedStatement.setNull(index, sqlTypes()[0]);
}
}
@Override
public Object deepCopy(Object o) throws HibernateException {
String[] a = (String[])o;
return Arrays.copyOf(a, a.length);
}
@Override
public boolean isMutable() {
return false;
}
@Override
public Serializable disassemble(Object o) throws HibernateException {
return (Serializable) o;
}
@Override
public Object assemble(Serializable serializable, Object o) throws HibernateException {
return serializable;
}
@Override
public Object replace(Object o, Object o1, Object o2) throws HibernateException {
return o;
}
}

View File

@ -1,4 +1,21 @@
package eu.dnetlib.validatorapi.utils;
public class PrefixInitializer {
public static String initializeMetadataPrefix(String guidelinesProfileName) {
if (guidelinesProfileName.equals("OpenAIRE Guidelines for Data Archives Profile v2") ||
guidelinesProfileName.equals("OpenAIRE FAIR Guidelines for Data Repositories Profile")) {
return "oai_datacite";
} else if (guidelinesProfileName.equals("OpenAIRE Guidelines for Literature Repositories Profile v3")) {
return "oai_dc";
} else if (guidelinesProfileName.equals("OpenAIRE Guidelines for Literature Repositories Profile v4")) {
return "oai_openaire";
}
return null;
}
}

View File

@ -1,4 +1,35 @@
package eu.dnetlib.validatorapi.utils;
import eu.dnetlib.validator2.validation.guideline.openaire.*;
public class ProfileInitializer {
public static AbstractOpenAireProfile initializeOpenAireProfile(String guidelinesProfileName) {
if (guidelinesProfileName.equals("OpenAIRE Guidelines for Data Archives Profile v2")) {
return new DataArchiveGuidelinesV2Profile();
} else if (guidelinesProfileName.equals("OpenAIRE Guidelines for Literature Repositories Profile v3")) {
return new LiteratureGuidelinesV3Profile();
} else if (guidelinesProfileName.equals("OpenAIRE Guidelines for Literature Repositories Profile v4")) {
return new LiteratureGuidelinesV4Profile();
} else if (guidelinesProfileName.equals("OpenAIRE FAIR Guidelines for Data Repositories Profile")) {//in case they give only fair. TODO: is ti possible?
return new FAIR_Data_GuidelinesProfile();
}
return null;
}
public static AbstractOpenAireProfile initializeFairProfile(String guidelinesProfileName) {
if (guidelinesProfileName.equals("OpenAIRE Guidelines for Data Archives Profile v2")) {
return new FAIR_Data_GuidelinesProfile();
} else if (guidelinesProfileName.equals("OpenAIRE Guidelines for Literature Repositories Profile v4")) {
return new FAIR_Literature_GuidelinesV4Profile();
}
return null;
}
}