Commit 6cfce0a5 authored by Matthieu Bonnouvrier's avatar Matthieu Bonnouvrier
Browse files

Improvement of DAO and implementation

parent 7bcd8ffe
Pipeline #262466 failed with stages
in 4 minutes and 44 seconds
#
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0x00007fae1b83732b, pid=188769, tid=188787
#
# JRE version: OpenJDK Runtime Environment (11.0.11+9) (build 11.0.11+9-Ubuntu-0ubuntu2.20.10)
# Java VM: OpenJDK 64-Bit Server VM (11.0.11+9-Ubuntu-0ubuntu2.20.10, mixed mode, sharing, tiered, compressed oops, g1 gc, linux-amd64)
# Problematic frame:
# C [libjimage.so+0x332b]
#
# Core dump will be written. Default location: Core dumps may be processed with "/usr/share/apport/apport %p %s %c %d %P %E" (or dumping to /home/mbr@kereval.com/Documents/Gazelle/patient-registry/patient-registry-service/core.188769)
#
# If you would like to submit a bug report, please visit:
# https://bugs.launchpad.net/ubuntu/+source/openjdk-lts
#
--------------- S U M M A R Y ------------
Command Line: -agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost:46797 -ea -javaagent:/home/mbr@kereval.com/.eclipse/360744286_linux_gtk_x86_64/configuration/org.eclipse.osgi/222/0/.cp/lib/javaagent-shaded.jar -Dfile.encoding=UTF-8 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner -version 3 -port 46111 -testLoaderClass org.eclipse.jdt.internal.junit5.runner.JUnit5TestLoader -loaderpluginname org.eclipse.jdt.junit5.runtime -classNames net.ihe.gazelle.app.patientregistryservice.adapter.dao.pamsimulator.service.patient.PatientCrossReferenceDAOImplTest
Host:
\ No newline at end of file
#
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0x00007f486804532b, pid=189587, tid=189603
#
# JRE version: OpenJDK Runtime Environment (11.0.11+9) (build 11.0.11+9-Ubuntu-0ubuntu2.20.10)
# Java VM: OpenJDK 64-Bit Server VM (11.0.11+9-Ubuntu-0ubuntu2.20.10, mixed mode, sharing, tiered, compressed oops, g1 gc, linux-amd64)
# Problematic frame:
# C [libjimage.so+0x332b]
#
# Core dump will be written. Default location: Core dumps may be processed with "/usr/share/apport/apport %p %s %c %d %P %E" (or dumping to /home/mbr@kereval.com/Documents/Gazelle/patient-registry/patient-registry-service/core.189587)
#
# If you would like to submit a bug report, please visit:
# https://bugs.launchpad.net/ubuntu/+source/openjdk-lts
#
--------------- S U M M A R Y ------------
Command Line: -agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost:33683 -ea -javaagent:/home/mbr@kereval.com/.eclipse/360744286_linux_gtk_x86_64/configuration/org.eclipse.osgi/222/0/.cp/lib/javaagent-shaded.jar -Dfile.encoding=UTF-8 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner -version 3 -port 33139 -testLoaderClass org.eclipse.jdt.internal.junit5.runner.JUnit5TestLoader -loaderpluginname org.eclipse.jdt.junit5.runtime -classNames net.ihe.gazelle.app.patientregistryservice.adapter.dao.pamsimulator.service.patient.PatientCrossReferenceDAOImplTest
Host:
\ No newline at end of file
#
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0x00007f924eb9832b, pid=199710, tid=199727
#
# JRE version: OpenJDK Runtime Environment (11.0.11+9) (build 11.0.11+9-Ubuntu-0ubuntu2.20.10)
# Java VM: OpenJDK 64-Bit Server VM (11.0.11+9-Ubuntu-0ubuntu2.20.10, mixed mode, sharing, tiered, compressed oops, g1 gc, linux-amd64)
# Problematic frame:
# C [libjimage.so+0x332b]
#
# Core dump will be written. Default location: Core dumps may be processed with "/usr/share/apport/apport %p %s %c %d %P %E" (or dumping to /home/mbr@kereval.com/Documents/Gazelle/patient-registry/patient-registry-service/core.199710)
#
# If you would like to submit a bug report, please visit:
# https://bugs.launchpad.net/ubuntu/+source/openjdk-lts
#
--------------- S U M M A R Y ------------
Command Line: -agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost:35843 -ea -javaagent:/home/mbr@kereval.com/.eclipse/360744286_linux_gtk_x86_64/configuration/org.eclipse.osgi/222/0/.cp/lib/javaagent-shaded.jar -Dfile.encoding=UTF-8 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner -version 3 -port 42603 -testLoaderClass org.eclipse.jdt.internal.junit5.runner.JUnit5TestLoader -loaderpluginname org.eclipse.jdt.junit5.runtime -classNames net.ihe.gazelle.app.patientregistryservice.adapter.dao.pamsimulator.service.patient.PatientCrossReferenceDAOImplTest
Host:
\ No newline at end of file
......@@ -2,11 +2,15 @@ package net.ihe.gazelle.app.patientregistryservice.adapter.dao.pamsimulator.serv
import net.ihe.gazelle.app.patientregistryapi.application.SearchCrossReferenceException;
import net.ihe.gazelle.app.patientregistryapi.business.EntityIdentifier;
import net.ihe.gazelle.app.patientregistryapi.business.PatientAliases;
import net.ihe.gazelle.app.patientregistryservice.adapter.dao.pamsimulator.model.patient.PatientDB;
import net.ihe.gazelle.app.patientregistryservice.adapter.dao.pamsimulator.model.references.CrossReferenceDB;
import java.util.List;
public interface PatientCrossReferenceDAO {
List<PatientAliases> searchForPatientAliasesInSourceIdentifier(EntityIdentifier sourceIdentifier) throws SearchCrossReferenceException;
PatientDB searchForPatientDBWithSourceIdentifier(EntityIdentifier sourceIdentifier) throws SearchCrossReferenceException;
List<CrossReferenceDB> searchForPatientAliasesWithPatientDB(PatientDB patient) throws SearchCrossReferenceException;
}
......@@ -2,22 +2,20 @@ package net.ihe.gazelle.app.patientregistryservice.adapter.dao.pamsimulator.serv
import net.ihe.gazelle.app.patientregistryapi.application.SearchCrossReferenceException;
import net.ihe.gazelle.app.patientregistryapi.business.EntityIdentifier;
import net.ihe.gazelle.app.patientregistryapi.business.Patient;
import net.ihe.gazelle.app.patientregistryapi.business.PatientAliases;
import net.ihe.gazelle.app.patientregistryservice.adapter.dao.EntityManagerProducer;
import net.ihe.gazelle.app.patientregistryservice.adapter.dao.pamsimulator.converter.IdentifierConverter;
import net.ihe.gazelle.app.patientregistryservice.adapter.dao.pamsimulator.converter.PatientAliasesConverter;
import net.ihe.gazelle.app.patientregistryservice.adapter.dao.pamsimulator.model.patient.DesignatorTypeDB;
import net.ihe.gazelle.app.patientregistryservice.adapter.dao.pamsimulator.model.patient.HierarchicDesignatorDB;
import net.ihe.gazelle.app.patientregistryservice.adapter.dao.pamsimulator.model.patient.PatientDB;
import net.ihe.gazelle.app.patientregistryservice.adapter.dao.pamsimulator.model.patient.PatientIdentifierDB;
import net.ihe.gazelle.app.patientregistryservice.adapter.dao.pamsimulator.model.references.CrossReferenceDB;
import net.ihe.gazelle.app.patientregistryservice.application.PatientReadException;
import javax.inject.Inject;
import javax.inject.Named;
import javax.persistence.*;
import javax.persistence.criteria.*;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.NonUniqueResultException;
import javax.persistence.TypedQuery;
import java.util.ArrayList;
import java.util.List;
......@@ -26,8 +24,8 @@ public class PatientCrossReferenceDAOImpl implements PatientCrossReferenceDAO {
private EntityManager entityManager;
//private Constructor
private PatientCrossReferenceDAOImpl() {
}
/**
......@@ -43,117 +41,72 @@ public class PatientCrossReferenceDAOImpl implements PatientCrossReferenceDAO {
this.entityManager = entityManager;
}
//TODO
/*
Ask for :
If the service receives a request with a valid sourceIdentifiter (patient found) but any Patient aliases does not exit
then the service shall return a new patient aliases with the associated patient.
*/
//Si on en trouve aucun, on le crée
/**
* Search for a list of patient alias by a source identifier
*
* @param sourceIdentifier
* @return
* @throws SearchCrossReferenceException
*/
@Override
public List<PatientAliases> searchForPatientAliasesInSourceIdentifier(EntityIdentifier sourceIdentifier) throws SearchCrossReferenceException {
public PatientDB searchForPatientDBWithSourceIdentifier(EntityIdentifier sourceIdentifier) throws SearchCrossReferenceException {
String systemIdentifier = sourceIdentifier.getSystemIdentifier();
String value = sourceIdentifier.getValue();
HierarchicDesignatorDB hierarchicDesignatorDB = searchForHierarchicDesignator(systemIdentifier);
PatientIdentifierDB patientIdentifier = searchForPatientIdentifier(hierarchicDesignatorDB, value);
PatientDB patientDB = searchforPatient(patientIdentifier);
if (!isExistingPatientAliases(patientDB)) {
createPatientAliases(patientDB);
}
List<CrossReferenceDB> crossReferences = searchForPatientAliases(patientDB);
crossReferences = deleteKnownPatient(patientDB, crossReferences);
return PatientAliasesConverter.toListOfPatientAliases(crossReferences);
}
private HierarchicDesignatorDB searchForHierarchicDesignator(String systemIdentifier) {
TypedQuery<HierarchicDesignatorDB> queryForAPatient = entityManager.createNamedQuery("HierarchicDesignatorDB.findByUniversalID", HierarchicDesignatorDB.class);
queryForAPatient.setParameter("universalID", systemIdentifier);
return queryForAPatient.getSingleResult();
return patientDB;
}
private PatientIdentifierDB searchForPatientIdentifier(HierarchicDesignatorDB hierarchicDesignatorDB, String idNumber) {
TypedQuery<PatientIdentifierDB> queryForAPatient = entityManager.createNamedQuery("PatientIdentifierDB.findByHierarchicDomainAndId", PatientIdentifierDB.class);
queryForAPatient.setParameter("domain_id", hierarchicDesignatorDB);
queryForAPatient.setParameter("id_number",idNumber);
return queryForAPatient.getSingleResult();
}
private PatientDB searchforPatient(PatientIdentifierDB patientIdentifier) {
TypedQuery<PatientDB> queryForAPatient = entityManager.createNamedQuery("PatientDB.findByPatientIdentifier", PatientDB.class);
queryForAPatient.setParameter("patientIdentifier", patientIdentifier);
return queryForAPatient.getSingleResult();
}
//TODO Javadoc
@Override
public List<CrossReferenceDB> searchForPatientAliasesWithPatientDB(PatientDB patientDB) throws SearchCrossReferenceException {
if (patientDB != null) {
String uuid = patientDB.getUuid();
if (uuid == null || uuid.isBlank()) {
throw new IllegalArgumentException("The uuid of patientDB shall not be null");
}
TypedQuery<CrossReferenceDB> queryForPatientAliases = entityManager.createNamedQuery("CrossReferenceDB.findByPatient", CrossReferenceDB.class);
queryForPatientAliases.setParameter("patient", patientDB);
List<CrossReferenceDB> crossReferenceDBS = queryForPatientAliases.getResultList();
if (crossReferenceDBS.isEmpty()) {
throw new SearchCrossReferenceException("No PatientAliases found with given patient ");
}
return crossReferenceDBS;
}
throw new IllegalArgumentException("Patient Cannot be null ");
private boolean isExistingPatientAliases(PatientDB patient) {
TypedQuery<Long> queryForPatientAliases = entityManager.createNamedQuery("CrossReferenceDB.countPatient", Long.class);
queryForPatientAliases.setParameter("patient", patient);
Long count = queryForPatientAliases.getSingleResult();
return count > 0;
}
private List<CrossReferenceDB> searchForPatientAliases(PatientDB patient) {
TypedQuery<CrossReferenceDB> queryForPatientAliases = entityManager.createNamedQuery("CrossReferenceDB.findByPatient", CrossReferenceDB.class);
queryForPatientAliases.setParameter("patient", patient);
return queryForPatientAliases.getResultList();
private HierarchicDesignatorDB searchForHierarchicDesignator(String systemIdentifier) throws SearchCrossReferenceException {
try {
TypedQuery<HierarchicDesignatorDB> queryForAPatient = entityManager.createNamedQuery("HierarchicDesignatorDB.findByUniversalID", HierarchicDesignatorDB.class);
queryForAPatient.setParameter("universalID", systemIdentifier);
HierarchicDesignatorDB hierarchicDesignatorDB = queryForAPatient.getSingleResult();
return hierarchicDesignatorDB;
} catch (NoResultException | NonUniqueResultException exception) {
throw new SearchCrossReferenceException("System not found");
}
}
private List<CrossReferenceDB> deleteKnownPatient(PatientDB patientDB, List<CrossReferenceDB> crossReferences) {
List<CrossReferenceDB> crossReferencesCopy = new ArrayList<>(crossReferences);
for (CrossReferenceDB crossReference : crossReferencesCopy) {
if (crossReference.getPatients().size() > 1) {
crossReference.getPatients().remove(patientDB);
}
private PatientIdentifierDB searchForPatientIdentifier(HierarchicDesignatorDB hierarchicDesignatorDB, String idNumber) throws SearchCrossReferenceException {
try {
TypedQuery<PatientIdentifierDB> queryForAPatient = entityManager.createNamedQuery("PatientIdentifierDB.findByHierarchicDomainAndId", PatientIdentifierDB.class);
queryForAPatient.setParameter("domain_id", hierarchicDesignatorDB);
queryForAPatient.setParameter("id_number", idNumber);
return queryForAPatient.getSingleResult();
} catch (NoResultException | NonUniqueResultException exception) {
throw new SearchCrossReferenceException("PatientIdentifier not found");
}
return crossReferencesCopy;
}
private void createPatientAliases(PatientDB patientDB) {
CrossReferenceDB crossReference = new CrossReferenceDB(patientDB.getFirstName());
List<PatientDB> patients = new ArrayList<>();
patients.add(patientDB);
crossReference.setPatients(patients);
entityManager.persist(crossReference);
entityManager.flush();
private PatientDB searchforPatient(PatientIdentifierDB patientIdentifier) throws SearchCrossReferenceException {
try {
TypedQuery<PatientDB> queryForAPatient = entityManager.createNamedQuery("PatientDB.findByPatientIdentifier", PatientDB.class);
queryForAPatient.setParameter("patientIdentifier", patientIdentifier);
return queryForAPatient.getSingleResult();
} catch (NoResultException | NonUniqueResultException exception) {
throw new SearchCrossReferenceException("Patient not found with with corresponding PatientIdentifier");
}
}
// @Override
// public void createDomain(String domainIdentifier, String domainName) {
// HierarchicDesignatorDB domain = new HierarchicDesignatorDB(domainName, domainIdentifier, "ISO", null);
// domain.setUsage(DesignatorTypeDB.PATIENT_ID);
// entityManager.persist(domain);
// entityManager.flush();
// }
// CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
// CriteriaQuery criteriaQuery = criteriaBuilder.createQuery(PatientAliases.class);
// From from = criteriaQuery.from(PatientAliases.class);
//
//
// Path<String> uuidFromPatientAliases = from.get("uuid");
//
// List<Predicate> predicates = new ArrayList<>();
// predicates.add(criteriaBuilder.equal(uuidFromPatientAliases, sourceIdentifier));
//
// Predicate finalPredicate = criteriaBuilder.and(predicates.toArray(new Predicate[predicates.size()]));
//
// TypedQuery<PatientAliases> query = entityManager.createQuery(criteriaQuery.select(from).where(finalPredicate).distinct(true));
// try {
// return query.getResultList();
// } catch (NoResultException e) {
// throw new SearchCrossReferenceException("The source identifier is unknown");
// }
}
......@@ -6,6 +6,10 @@ import net.ihe.gazelle.app.patientregistryapi.application.SearchCrossReferenceEx
import net.ihe.gazelle.app.patientregistryapi.business.EntityIdentifier;
import net.ihe.gazelle.app.patientregistryapi.business.Patient;
import net.ihe.gazelle.app.patientregistryapi.business.PatientAliases;
import net.ihe.gazelle.app.patientregistryservice.adapter.dao.pamsimulator.converter.PatientAliasesConverter;
import net.ihe.gazelle.app.patientregistryservice.adapter.dao.pamsimulator.converter.PatientConverter;
import net.ihe.gazelle.app.patientregistryservice.adapter.dao.pamsimulator.model.patient.PatientDB;
import net.ihe.gazelle.app.patientregistryservice.adapter.dao.pamsimulator.model.references.CrossReferenceDB;
import net.ihe.gazelle.app.patientregistryservice.adapter.dao.pamsimulator.service.PatientCrossReferenceDAO;
import javax.inject.Inject;
......@@ -41,10 +45,20 @@ public class PatientCrossReferenceSearchImpl implements PatientCrossReferenceSea
public PatientAliases search(EntityIdentifier sourceIdentifier) throws SearchCrossReferenceException {
checkSourceIdentifier(sourceIdentifier);
List<PatientAliases> patientAliases = patientCrossReferenceDAO
.searchForPatientAliasesInSourceIdentifier(sourceIdentifier);
PatientAliases patientAlias = mergePatientAliases(patientAliases);
return patientAlias;
PatientDB patientDB = null;
try {
patientDB = patientCrossReferenceDAO.searchForPatientDBWithSourceIdentifier(sourceIdentifier);
List<CrossReferenceDB> crossReferenceDBS = patientCrossReferenceDAO.searchForPatientAliasesWithPatientDB(patientDB);
PatientAliases patientAlias = processingOnResult(crossReferenceDBS,patientDB);
return patientAlias;
} catch (SearchCrossReferenceException searchCrossReferenceException){
if (searchCrossReferenceException.getMessage().equals("No X-refFound ")) {
return convertPatientDBTPatientAliases(patientDB);
}
//TO Catch Exception.
}
//TODO
throw new SearchCrossReferenceException("To defined ");
}
/**
......@@ -70,9 +84,6 @@ public class PatientCrossReferenceSearchImpl implements PatientCrossReferenceSea
if (value == null || value.isBlank()) {
throw new SearchCrossReferenceException("The value from sourceIdentifier cannot be null or empty");
}
if (domainDao == null || !domainDao.exist(systemIdentifier)) {
throw new SearchCrossReferenceException("This source identifier does not exist");
}
}
/**
......@@ -92,21 +103,42 @@ public class PatientCrossReferenceSearchImpl implements PatientCrossReferenceSea
}
/**
* Merge a list of patient alias into one
*
* @param patientAliases
* @return
* @param crossReferenceDBS
* @param patientDB
* @return PatientAliases
*/
private PatientAliases mergePatientAliases(List<PatientAliases> patientAliases) {
private PatientAliases processingOnResult(List<CrossReferenceDB> crossReferenceDBS,PatientDB patientDB) {
List<CrossReferenceDB> cleanListOfXRef = deleteKnownPatientInCrossReference(patientDB,crossReferenceDBS);
List<PatientAliases> patientAliasesList = PatientAliasesConverter.toListOfPatientAliases(cleanListOfXRef);
PatientAliases patientAlias = new PatientAliases();
if (patientAliases.size() >= 1) {
patientAlias = patientAliases.get(0);
}
if (patientAliases.size() > 1) {
patientAlias.addMembers(getUniqueMemberFromPatientAliases(patientAliases));
if (patientAliasesList.size() == 1) {
return patientAliasesList.get(0);
}else {
PatientAliases patientAliasOk = new PatientAliases();
for (PatientAliases patientAliases :patientAliasesList) {
patientAliasOk.addMembers(patientAliases.getMembers());
}
return patientAliasOk;
}
return patientAlias;
}
private PatientAliases convertPatientDBTPatientAliases(PatientDB patientDB) {
PatientAliases patientAliases = new PatientAliases();
patientAliases.addMember(PatientConverter.toPatient(patientDB));
return patientAliases;
}
private List<CrossReferenceDB> deleteKnownPatientInCrossReference(PatientDB patientDB, List<CrossReferenceDB> crossReferences){
for (CrossReferenceDB crossReference :crossReferences) {
if (crossReference.getPatients().size() > 1) {
crossReference.getPatients().remove(patientDB);
}
}
return crossReferences;
}
}
package net.ihe.gazelle.app.patientregistryservice.adapter.dao.pamsimulator.service.patient;
import net.ihe.gazelle.app.patientregistryapi.application.PatientCrossReferenceSearch;
import net.ihe.gazelle.app.patientregistryapi.application.SearchCrossReferenceException;
import net.ihe.gazelle.app.patientregistryapi.business.EntityIdentifier;
import net.ihe.gazelle.app.patientregistryapi.business.GenderCode;
......@@ -34,9 +33,9 @@ import static org.junit.jupiter.api.Assertions.assertThrows;
public class PatientCrossReferenceDAOImplTest {
private static final String PERSISTENCE_UNIT_NAME_CONST = "PersistenceUnitTest";
private PatientCrossReferenceDAO patientCrossReferenceDAO;
private static PatientCrossReferenceDAO patientCrossReferenceDAO;
private EntityManager entityManager;
private static EntityManager entityManager;
/**
* database init
......@@ -48,12 +47,10 @@ public class PatientCrossReferenceDAOImplTest {
}
@BeforeAll
public void startup()throws ParseException {
public static void startup()throws ParseException {
entityManager = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME_CONST).createEntityManager();
patientCrossReferenceDAO = new PatientCrossReferenceDAOImpl(entityManager);
System.out.println("initializeEntityManager");
addTestEntitiesToDB(entityManager);
System.out.println("addTestEntitiesToDB");
}
/**
......@@ -106,9 +103,10 @@ public class PatientCrossReferenceDAOImplTest {
@Test
void testNoHierarchicDesignatorDB(){
EntityIdentifier entityIdentifier = new EntityIdentifier();
SearchCrossReferenceException exception = assertThrows(SearchCrossReferenceException.class, () -> patientCrossReferenceDAO.searchForPatientAliasesInSourceIdentifier(entityIdentifier));
}
@Test
public void testEntityManager() {
// for (int i = 1; i < 20; i++) {
......@@ -138,8 +136,8 @@ public class PatientCrossReferenceDAOImplTest {
entityManager.merge(patientIdentifierDB);
}
private void addTestEntitiesToDB(EntityManager entityManager) throws ParseException {
initilizeDb(entityManager);
private static void addTestEntitiesToDB(EntityManager entityManager) throws ParseException {
initializeDb(entityManager);
// List<Patient> patientObjects = generatePatient();
// List<PatientDB> patientDBObjects = convertPatientToPatientDB(patientObjects);
// for (PatientDB patientDB : patientDBObjects) {
......@@ -262,7 +260,7 @@ public class PatientCrossReferenceDAOImplTest {
return patientDBObjects;
}
private void initilizeDb(EntityManager entityManager) {
private static void initializeDb(EntityManager entityManager) {
HierarchicDesignatorDB hierarchicDesignatorDB = new HierarchicDesignatorDB();
hierarchicDesignatorDB.setUniversalID("test");
hierarchicDesignatorDB.setUniversalIDType("ISO");
......
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
\ No newline at end of file
......@@ -220,9 +220,27 @@
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.4.2</version>
<version>5.6.0</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.junit.platform/junit-platform-commons -->
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-commons</artifactId>
<version>1.7.2</version>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-launcher</artifactId>
<version>1.7.2</version>
</dependency>
<dependency>
<groupId>org.junit</groupId>
<artifactId>junit-commons</artifactId>
<version>5.7.0-M1</version>
<type>pom</type>
</dependency>
<!-- Logger Model -->
<dependency>
<groupId>net.ihe.gazelle</groupId>
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment