diff --git a/smp-server-library/src/main/java/eu/europa/ec/cipa/smp/server/conversion/ServiceGroupConverter.java b/smp-server-library/src/main/java/eu/europa/ec/cipa/smp/server/conversion/ServiceGroupConverter.java index 4711e3b4b92744272e611fb2e4fbb42557d60b5d..b67ca7fa65ea8415a10b7b55d8cb98897335e9e4 100644 --- a/smp-server-library/src/main/java/eu/europa/ec/cipa/smp/server/conversion/ServiceGroupConverter.java +++ b/smp-server-library/src/main/java/eu/europa/ec/cipa/smp/server/conversion/ServiceGroupConverter.java @@ -15,6 +15,7 @@ package eu.europa.ec.cipa.smp.server.conversion; +import eu.europa.ec.edelivery.smp.data.model.DBServiceGroupId; import eu.europa.ec.edelivery.smp.exceptions.ConversionException; import eu.europa.ec.edelivery.smp.exceptions.XmlParsingException; import eu.europa.ec.cipa.smp.server.util.ExtensionUtils; @@ -104,4 +105,8 @@ public class ServiceGroupConverter { throw new ConversionException(e); } } + + public static DBServiceGroupId toDbModel(ParticipantIdentifierType serviceGroupId){ + return new DBServiceGroupId(serviceGroupId.getScheme(), serviceGroupId.getValue()); + } } diff --git a/smp-server-library/src/main/java/eu/europa/ec/cipa/smp/server/conversion/ServiceMetadataConverter.java b/smp-server-library/src/main/java/eu/europa/ec/cipa/smp/server/conversion/ServiceMetadataConverter.java index 90eeedbc9318237589808def44585e1a045cf350..16bce44a3dc63680e9fb688c25388d331fceda6d 100644 --- a/smp-server-library/src/main/java/eu/europa/ec/cipa/smp/server/conversion/ServiceMetadataConverter.java +++ b/smp-server-library/src/main/java/eu/europa/ec/cipa/smp/server/conversion/ServiceMetadataConverter.java @@ -15,7 +15,10 @@ package eu.europa.ec.cipa.smp.server.conversion; +import eu.europa.ec.edelivery.smp.data.model.DBServiceMetadataId; import eu.europa.ec.edelivery.smp.exceptions.XmlParsingException; +import org.oasis_open.docs.bdxr.ns.smp._2016._05.DocumentIdentifier; +import org.oasis_open.docs.bdxr.ns.smp._2016._05.ParticipantIdentifierType; import org.oasis_open.docs.bdxr.ns.smp._2016._05.ServiceMetadata; import org.w3c.dom.Document; import org.w3c.dom.Node; @@ -100,4 +103,10 @@ public class ServiceMetadataConverter { return dbf.newDocumentBuilder(); } + public static DBServiceMetadataId toDbModel(ParticipantIdentifierType participantId, DocumentIdentifier docId){ + return new DBServiceMetadataId(participantId.getScheme(), + participantId.getValue(), + docId.getScheme(), + docId.getValue()); + } } diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/dao/BaseDao.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/dao/BaseDao.java new file mode 100644 index 0000000000000000000000000000000000000000..e0faa253d70df1f9890695832f9555a913945b53 --- /dev/null +++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/dao/BaseDao.java @@ -0,0 +1,67 @@ +/* + * Copyright 2017 European Commission | CEF eDelivery + * + * Licensed under the EUPL, Version 1.1 or – as soon they will be approved by the European Commission - subsequent versions of the EUPL (the "Licence"); + * You may not use this work except in compliance with the Licence. + * + * You may obtain a copy of the Licence at: + * https://joinup.ec.europa.eu/software/page/eupl + * or file: LICENCE-EUPL-v1.1.pdf + * + * Unless required by applicable law or agreed to in writing, software distributed under the Licence is distributed on an "AS IS" basis, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the Licence for the specific language governing permissions and limitations under the Licence. + */ + +package eu.europa.ec.edelivery.smp.data.dao; + +import org.springframework.core.GenericTypeResolver; + +import javax.persistence.EntityExistsException; +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; +import java.io.Serializable; + +/** + * Created by gutowpa on 24/11/2017. + */ +public abstract class BaseDao<E extends Serializable> { + + @PersistenceContext + protected EntityManager em; + + private final Class<E> entityClass; + + public BaseDao() { + entityClass = (Class<E>) GenericTypeResolver.resolveTypeArgument(getClass(), BaseDao.class); + } + + public E find(Object primaryKey) { + return em.find(entityClass, primaryKey); + } + + public void save(E entity) { + try { + em.persist(entity); + } catch(EntityExistsException e){ + em.merge(entity); + } + } + + public void remove(E entity) { + em.remove(entity); + } + + /** + * Removes Entity by given primary key + * + * @return true if entity existed before and was removed in this call. + * False if entity did not exist, so nothing was changed + */ + public boolean removeById(Object primaryKey) { + int removedRecords = em.createQuery("delete from " + entityClass.getName() + " e where e.id = :primaryKey") + .setParameter("primaryKey", primaryKey) + .executeUpdate(); + return removedRecords > 0; + } +} diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/dao/OwnershipDao.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/dao/OwnershipDao.java index d3478ac5548ae28a0085f5e2271301676fb66edd..2a4ac0b9adba90422c8e6a49d90b2f7a5b617ebb 100644 --- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/dao/OwnershipDao.java +++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/dao/OwnershipDao.java @@ -16,29 +16,20 @@ package eu.europa.ec.edelivery.smp.data.dao; import eu.europa.ec.edelivery.smp.data.model.DBOwnership; -import eu.europa.ec.edelivery.smp.data.model.DBServiceGroupID; +import eu.europa.ec.edelivery.smp.data.model.DBServiceGroupId; import org.springframework.stereotype.Repository; -import javax.persistence.EntityManager; -import javax.persistence.PersistenceContext; - /** * Created by gutowpa on 14/11/2017. */ @Repository -public class OwnershipDao { - - @PersistenceContext - EntityManager entityManager; +public class OwnershipDao extends BaseDao<DBOwnership>{ - public void removeByServiceGroupId(DBServiceGroupID serviceGroupID) { - entityManager.createQuery("DELETE FROM DBOwnership o WHERE o.id.businessIdentifierScheme = :scheme and o.id.businessIdentifier = :id") + public void removeByServiceGroupId(DBServiceGroupId serviceGroupID) { + em.createQuery("DELETE FROM DBOwnership o WHERE o.id.businessIdentifierScheme = :scheme and o.id.businessIdentifier = :id") .setParameter("scheme", serviceGroupID.getBusinessIdentifierScheme()) .setParameter("id", serviceGroupID.getBusinessIdentifier()) .executeUpdate(); } - public void save(DBOwnership ownership) { - entityManager.persist(ownership); - } } diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/dao/ServiceGroupDao.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/dao/ServiceGroupDao.java index ac66884976e43f3c1d5e49bbe7ce689c1ecdbb8f..36ab5d1cfdad1b45e82871c6ed4f4cf95a0bdd7b 100644 --- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/dao/ServiceGroupDao.java +++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/dao/ServiceGroupDao.java @@ -16,33 +16,11 @@ package eu.europa.ec.edelivery.smp.data.dao; import eu.europa.ec.edelivery.smp.data.model.DBServiceGroup; -import eu.europa.ec.edelivery.smp.data.model.DBServiceGroupID; import org.springframework.stereotype.Repository; -import javax.persistence.EntityManager; -import javax.persistence.PersistenceContext; - /** * Created by gutowpa on 14/11/2017. */ @Repository -public class ServiceGroupDao { - - @PersistenceContext - EntityManager entityManager; - - public DBServiceGroup find(String participantIdScheme, - String participantIdValue) { - - DBServiceGroupID dbServiceGroupId = new DBServiceGroupID(participantIdScheme, participantIdValue); - return entityManager.find(DBServiceGroup.class, dbServiceGroupId); - } - - public void save(DBServiceGroup dbServiceGroup) { - entityManager.persist(dbServiceGroup); - } - - public void remove(DBServiceGroup serviceGroup) { - entityManager.remove(serviceGroup); - } +public class ServiceGroupDao extends BaseDao<DBServiceGroup> { } diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/dao/ServiceMetadataDao.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/dao/ServiceMetadataDao.java index 112d63e64a4a9e88e9d4f62a87a57526133e3ce7..d6a27dcb41b3aa0a2d198381afc864cf0545e966 100644 --- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/dao/ServiceMetadataDao.java +++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/dao/ServiceMetadataDao.java @@ -16,66 +16,21 @@ package eu.europa.ec.edelivery.smp.data.dao; import eu.europa.ec.edelivery.smp.data.model.DBServiceMetadata; -import eu.europa.ec.edelivery.smp.data.model.DBServiceMetadataID; +import eu.europa.ec.edelivery.smp.data.model.DBServiceMetadataId; import org.springframework.stereotype.Repository; -import javax.persistence.EntityManager; -import javax.persistence.PersistenceContext; import java.util.List; /** * Created by gutowpa on 14/11/2017. */ @Repository -public class ServiceMetadataDao { +public class ServiceMetadataDao extends BaseDao<DBServiceMetadata> { - @PersistenceContext - EntityManager entityManager; - - public DBServiceMetadata find(String participantIdScheme, - String participantIdValue, - String documentIdScheme, - String documentIdValue) { - - DBServiceMetadataID serviceMetadataId = new DBServiceMetadataID(participantIdScheme, - participantIdValue, - documentIdScheme, - documentIdValue); - - return entityManager.find(DBServiceMetadata.class, serviceMetadataId); - } - - /** - * Removes ServiceMetadata - * - * @return true if entity existed before and was removed in this call. - * False if entity did not exist, so nothing was changed - */ - public boolean remove(String participantIdScheme, - String participantIdValue, - String documentIdScheme, - String documentIdValue) { - - DBServiceMetadata serviceMetadata = find(participantIdScheme, - participantIdValue, - documentIdScheme, - documentIdValue); - - if (serviceMetadata == null) { - return false; - } - entityManager.remove(serviceMetadata); - return true; - } - - public void save(DBServiceMetadata serviceMetadata) { - entityManager.persist(serviceMetadata); - } - - public List<DBServiceMetadataID> findIdsByServiceGroup(String participantIdScheme, + public List<DBServiceMetadataId> findIdsByServiceGroup(String participantIdScheme, String participantIdValue) { - return entityManager.createQuery("SELECT p.id FROM DBServiceMetadata p WHERE p.id.businessIdentifierScheme = :scheme AND p.id.businessIdentifier = :value", DBServiceMetadataID.class) + return em.createQuery("SELECT p.id FROM DBServiceMetadata p WHERE p.id.businessIdentifierScheme = :scheme AND p.id.businessIdentifier = :value", DBServiceMetadataId.class) .setParameter("scheme", participantIdScheme) .setParameter("value", participantIdValue) .getResultList(); diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/dao/UserDao.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/dao/UserDao.java index c968a252be362d9b3949b9bd8cea4f494b085847..9ec88083b881be9be4c6755518cbdd896b67e513 100644 --- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/dao/UserDao.java +++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/dao/UserDao.java @@ -18,20 +18,9 @@ package eu.europa.ec.edelivery.smp.data.dao; import eu.europa.ec.edelivery.smp.data.model.DBUser; import org.springframework.stereotype.Repository; -import javax.persistence.EntityManager; -import javax.persistence.PersistenceContext; - /** * Created by gutowpa on 14/11/2017. */ @Repository -public class UserDao { - - @PersistenceContext - EntityManager entityManager; - - public DBUser find(String username) { - return entityManager.find(DBUser.class, username); - } - +public class UserDao extends BaseDao<DBUser> { } diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/model/DBOwnership.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/model/DBOwnership.java index 93a412d3da1a643f86ab90aedd2b554a17f8871e..b39a5dd20e87c3572ecc3409708c09c5ebd09401 100644 --- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/model/DBOwnership.java +++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/model/DBOwnership.java @@ -22,20 +22,20 @@ import java.io.Serializable; @Table (name = "smp_ownership") public class DBOwnership implements Serializable { - private DBOwnershipID ownershipId; + private DBOwnershipId ownershipId; private DBUser user; private DBServiceGroup serviceGroup; public DBOwnership () {} - public DBOwnership (final DBOwnershipID ownershipId, final DBUser user, final DBServiceGroup serviceGroup) { + public DBOwnership (final DBOwnershipId ownershipId, final DBUser user, final DBServiceGroup serviceGroup) { this.ownershipId = ownershipId; this.user = user; this.serviceGroup = serviceGroup; } @EmbeddedId - public DBOwnershipID getId () { + public DBOwnershipId getId () { return ownershipId; } @@ -60,7 +60,7 @@ public class DBOwnership implements Serializable { return serviceGroup; } - public void setId (final DBOwnershipID ownershipId) { + public void setId (final DBOwnershipId ownershipId) { this.ownershipId = ownershipId; } diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/model/DBOwnershipID.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/model/DBOwnershipId.java similarity index 93% rename from smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/model/DBOwnershipID.java rename to smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/model/DBOwnershipId.java index 82603e78be495fca03876b5fb4000a2f99f88981..a6bc958ce389f63de7bc7e27c4e303b08907cc0f 100644 --- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/model/DBOwnershipID.java +++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/model/DBOwnershipId.java @@ -25,17 +25,16 @@ import java.io.Serializable; @Embeddable @ToString @EqualsAndHashCode -public class DBOwnershipID implements Serializable { +public class DBOwnershipId implements Serializable { private String username; private String participantIdScheme; private String participantIdValue; - @Deprecated - public DBOwnershipID() { + public DBOwnershipId() { } - public DBOwnershipID(String userName, String participantIdScheme, String participantIdValue) { + public DBOwnershipId(String userName, String participantIdScheme, String participantIdValue) { username = userName; setBusinessIdentifierScheme(participantIdScheme); setBusinessIdentifier(participantIdValue); diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/model/DBServiceGroup.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/model/DBServiceGroup.java index b606f62d2597814cfff5b88344ed62d979a74a79..ea564e9f849b77cfecd917ac546b20f720fc52f9 100644 --- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/model/DBServiceGroup.java +++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/model/DBServiceGroup.java @@ -24,7 +24,7 @@ import java.util.Set; @Table(name = "smp_service_group") public class DBServiceGroup implements Serializable { - private DBServiceGroupID serviceGroupId; + private DBServiceGroupId serviceGroupId; private String extension; private Set<DBOwnership> ownerships = new HashSet<>(); private Set<DBServiceMetadata> serviceMetadatas = new HashSet<DBServiceMetadata>(); @@ -32,11 +32,11 @@ public class DBServiceGroup implements Serializable { public DBServiceGroup() { } - public DBServiceGroup(final DBServiceGroupID serviceGroupId) { + public DBServiceGroup(final DBServiceGroupId serviceGroupId) { this.serviceGroupId = serviceGroupId; } - public DBServiceGroup(final DBServiceGroupID serviceGroupId, + public DBServiceGroup(final DBServiceGroupId serviceGroupId, final String extension, final Set<DBOwnership> ownerships, final Set<DBServiceMetadata> serviceMetadatas) { @@ -48,7 +48,7 @@ public class DBServiceGroup implements Serializable { } @EmbeddedId - public DBServiceGroupID getId() { + public DBServiceGroupId getId() { return serviceGroupId; } @@ -58,17 +58,17 @@ public class DBServiceGroup implements Serializable { return extension; } - @OneToMany(fetch = FetchType.LAZY, mappedBy = "serviceGroup", cascade = {CascadeType.ALL}) + @OneToMany(fetch = FetchType.LAZY, mappedBy = "serviceGroup", cascade = CascadeType.ALL) public Set<DBOwnership> getOwnerships() { return ownerships; } - @OneToMany(fetch = FetchType.LAZY, mappedBy = "serviceGroup", cascade = {CascadeType.ALL}) + @OneToMany(fetch = FetchType.LAZY, mappedBy = "serviceGroup", cascade = CascadeType.ALL) public Set<DBServiceMetadata> getServiceMetadatas() { return serviceMetadatas; } - public void setId(final DBServiceGroupID serviceGroupId) { + public void setId(final DBServiceGroupId serviceGroupId) { this.serviceGroupId = serviceGroupId; } diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/model/DBServiceGroupID.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/model/DBServiceGroupId.java similarity index 92% rename from smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/model/DBServiceGroupID.java rename to smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/model/DBServiceGroupId.java index 51830f8bd799ff6fb432517f8e9f948c38b1a40f..1a1767d21504ba121ed446bc87c456d5bb5645a5 100644 --- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/model/DBServiceGroupID.java +++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/model/DBServiceGroupId.java @@ -28,16 +28,15 @@ import static eu.europa.ec.edelivery.smp.data.model.CommonColumnsLengths.MAX_PAR @Embeddable @ToString @EqualsAndHashCode -public class DBServiceGroupID implements Serializable { +public class DBServiceGroupId implements Serializable { private String participantIdScheme; private String participantIdValue; - @Deprecated - public DBServiceGroupID() { + public DBServiceGroupId() { } - public DBServiceGroupID(String participantIdScheme, + public DBServiceGroupId(String participantIdScheme, String participantIdValue) { setBusinessIdentifierScheme(participantIdScheme); diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/model/DBServiceMetadata.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/model/DBServiceMetadata.java index 2143a3a4599672d9daf9ed2cf9734ab29aa730f4..aa40efe49fbc9adde8d655e6af33df0b3752e709 100644 --- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/model/DBServiceMetadata.java +++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/model/DBServiceMetadata.java @@ -22,17 +22,17 @@ import java.io.Serializable; @Table(name = "smp_service_metadata") public class DBServiceMetadata implements Serializable { - private DBServiceMetadataID serviceMetadataId; + private DBServiceMetadataId serviceMetadataId; private DBServiceGroup serviceGroup; private String xmlContent; public DBServiceMetadata() { } - public DBServiceMetadata(DBServiceMetadataID serviceMetadataId, DBServiceGroup serviceGroup) { + public DBServiceMetadata(DBServiceMetadataId serviceMetadataId, DBServiceGroup serviceGroup) { this(serviceMetadataId, serviceGroup, null); } - public DBServiceMetadata(DBServiceMetadataID serviceMetadataId, + public DBServiceMetadata(DBServiceMetadataId serviceMetadataId, DBServiceGroup serviceGroup, String xmlContent) { this.serviceMetadataId = serviceMetadataId; @@ -41,7 +41,7 @@ public class DBServiceMetadata implements Serializable { } @EmbeddedId - public DBServiceMetadataID getId() { + public DBServiceMetadataId getId() { return serviceMetadataId; } @@ -66,7 +66,7 @@ public class DBServiceMetadata implements Serializable { return xmlContent; } - public void setId(final DBServiceMetadataID serviceMetadataId) { + public void setId(final DBServiceMetadataId serviceMetadataId) { this.serviceMetadataId = serviceMetadataId; } diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/model/DBServiceMetadataID.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/model/DBServiceMetadataId.java similarity index 95% rename from smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/model/DBServiceMetadataID.java rename to smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/model/DBServiceMetadataId.java index 22627554adbd20fd50910a1b5ecaa0eb75006601..83be66e289d72ade3299969257287417fd033b6a 100644 --- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/model/DBServiceMetadataID.java +++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/model/DBServiceMetadataId.java @@ -26,7 +26,7 @@ import static eu.europa.ec.edelivery.smp.data.model.CommonColumnsLengths.*; @Embeddable @ToString @EqualsAndHashCode -public class DBServiceMetadataID implements Serializable { +public class DBServiceMetadataId implements Serializable { private String participantIdScheme; private String participantIdValue; @@ -35,10 +35,10 @@ public class DBServiceMetadataID implements Serializable { private String documentIdValue; @Deprecated - public DBServiceMetadataID() { + public DBServiceMetadataId() { } - public DBServiceMetadataID(String participantIdScheme, + public DBServiceMetadataId(String participantIdScheme, String participantIdValue, String documentIdScheme, String documentIdValue) { diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ServiceGroupService.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ServiceGroupService.java index efc28a290c901b9db0705ed6dfc539bb7993587e..6ad61bf294a9f75fd1af9034f0ea3cc89673c8f9 100644 --- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ServiceGroupService.java +++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ServiceGroupService.java @@ -32,7 +32,14 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.lang.reflect.Array; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + +import static eu.europa.ec.cipa.smp.server.conversion.ServiceGroupConverter.toDbModel; import static eu.europa.ec.smp.api.Identifiers.asString; +import static java.util.Arrays.asList; /** * Created by gutowpa on 14/11/2017. @@ -48,9 +55,6 @@ public class ServiceGroupService { @Autowired private ServiceGroupDao serviceGroupDao; - @Autowired - private OwnershipDao ownershipDao; - @Autowired private UserDao userDao; @@ -60,7 +64,7 @@ public class ServiceGroupService { public ServiceGroup getServiceGroup(ParticipantIdentifierType serviceGroupId) { ParticipantIdentifierType normalizedServiceGroupId = caseSensitivityNormalizer.normalize(serviceGroupId); - DBServiceGroup dbServiceGroup = serviceGroupDao.find(normalizedServiceGroupId.getScheme(), normalizedServiceGroupId.getValue()); + DBServiceGroup dbServiceGroup = serviceGroupDao.find(toDbModel(normalizedServiceGroupId)); if (dbServiceGroup == null) { throw new NotFoundException("ServiceGroup not found: '%s'", asString(serviceGroupId)); } @@ -77,7 +81,7 @@ public class ServiceGroupService { throw new UnknownUserException(newOwnerName); } - DBServiceGroup dbServiceGroup = serviceGroupDao.find(normalizedParticipantId.getScheme(), normalizedParticipantId.getValue()); + DBServiceGroup dbServiceGroup = serviceGroupDao.find(toDbModel(normalizedParticipantId)); String extensions = ServiceGroupConverter.extractExtensionsPayload(normalizedServiceGroup); @@ -90,14 +94,15 @@ public class ServiceGroupService { m_aHook.create(normalizedParticipantId); //Save ServiceGroup - dbServiceGroup = new DBServiceGroup(new DBServiceGroupID(normalizedParticipantId.getScheme(), normalizedParticipantId.getValue())); + dbServiceGroup = new DBServiceGroup(new DBServiceGroupId(normalizedParticipantId.getScheme(), normalizedParticipantId.getValue())); dbServiceGroup.setExtension(extensions); - serviceGroupDao.save(dbServiceGroup); // Save the ownership information - final DBOwnershipID ownershipID = new DBOwnershipID(newOwnerName, normalizedParticipantId.getScheme(), normalizedParticipantId.getValue()); - final DBOwnership ownership = new DBOwnership(ownershipID, newOwner, dbServiceGroup); - ownershipDao.save(ownership); + DBOwnershipId dbOwnershipID = new DBOwnershipId(newOwnerName, normalizedParticipantId.getScheme(), normalizedParticipantId.getValue()); + DBOwnership dbOwnership = new DBOwnership(dbOwnershipID, newOwner, dbServiceGroup); + dbServiceGroup.setOwnerships(new HashSet(asList(dbOwnership))); + //ownershipDao.save(ownership); + serviceGroupDao.save(dbServiceGroup); return true; } } @@ -115,12 +120,12 @@ public class ServiceGroupService { public void deleteServiceGroup(ParticipantIdentifierType serviceGroupId) { final ParticipantIdentifierType normalizedServiceGroupId = caseSensitivityNormalizer.normalize(serviceGroupId); - DBServiceGroup dbServiceGroup = serviceGroupDao.find(normalizedServiceGroupId.getScheme(), normalizedServiceGroupId.getValue()); + DBServiceGroup dbServiceGroup = serviceGroupDao.find(toDbModel(normalizedServiceGroupId)); if (dbServiceGroup == null) { throw new NotFoundException("ServiceGroup not found: '%s'", asString(serviceGroupId)); } - ownershipDao.removeByServiceGroupId(dbServiceGroup.getId()); + //ownershipDao.removeByServiceGroupId(dbServiceGroup.getId()); serviceGroupDao.remove(dbServiceGroup); m_aHook.delete(normalizedServiceGroupId); diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ServiceMetadataService.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ServiceMetadataService.java index 88eacd84a0d2e9ad924fd982378c021c447eebc9..971a7b811e09004c25fa23b9444dce9e31b293bc 100644 --- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ServiceMetadataService.java +++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ServiceMetadataService.java @@ -16,19 +16,16 @@ package eu.europa.ec.edelivery.smp.services; import eu.europa.ec.cipa.smp.server.conversion.CaseSensitivityNormalizer; -import eu.europa.ec.cipa.smp.server.conversion.ServiceMetadataConverter; +import eu.europa.ec.cipa.smp.server.conversion.ServiceGroupConverter; import eu.europa.ec.cipa.smp.server.util.SignatureFilter; import eu.europa.ec.edelivery.smp.data.dao.ServiceGroupDao; import eu.europa.ec.edelivery.smp.data.dao.ServiceMetadataDao; import eu.europa.ec.edelivery.smp.data.model.DBServiceGroup; import eu.europa.ec.edelivery.smp.data.model.DBServiceMetadata; -import eu.europa.ec.edelivery.smp.data.model.DBServiceMetadataID; +import eu.europa.ec.edelivery.smp.data.model.DBServiceMetadataId; import eu.europa.ec.edelivery.smp.exceptions.NotFoundException; import org.oasis_open.docs.bdxr.ns.smp._2016._05.DocumentIdentifier; import org.oasis_open.docs.bdxr.ns.smp._2016._05.ParticipantIdentifierType; -import org.oasis_open.docs.bdxr.ns.smp._2016._05.ServiceGroup; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -37,6 +34,8 @@ import org.w3c.dom.Document; import java.util.ArrayList; import java.util.List; +import static eu.europa.ec.cipa.smp.server.conversion.ServiceMetadataConverter.toDbModel; +import static eu.europa.ec.cipa.smp.server.conversion.ServiceMetadataConverter.toSignedServiceMetadatadaDocument; import static eu.europa.ec.smp.api.Identifiers.asString; /** @@ -61,17 +60,13 @@ public class ServiceMetadataService { ParticipantIdentifierType normalizedServiceGroupId = caseSensitivityNormalizer.normalize(serviceGroupId); DocumentIdentifier normalizedDocId = caseSensitivityNormalizer.normalize(documentId); - DBServiceMetadata serviceMetadata = serviceMetadataDao.find( - normalizedServiceGroupId.getScheme(), - normalizedServiceGroupId.getValue(), - normalizedDocId.getScheme(), - normalizedDocId.getValue()); + DBServiceMetadata serviceMetadata = serviceMetadataDao.find(toDbModel(normalizedServiceGroupId, normalizedDocId)); if (serviceMetadata == null || serviceMetadata.getXmlContent() == null) { throw new NotFoundException("ServiceMetadata not found, ServiceGroupID: '%s', DocumentID: '%s'", asString(serviceGroupId), asString(documentId)); } - Document aSignedServiceMetadata = ServiceMetadataConverter.toSignedServiceMetadatadaDocument(serviceMetadata.getXmlContent()); + Document aSignedServiceMetadata = toSignedServiceMetadatadaDocument(serviceMetadata.getXmlContent()); signatureFilter.sign(aSignedServiceMetadata); return aSignedServiceMetadata; } @@ -86,26 +81,19 @@ public class ServiceMetadataService { ParticipantIdentifierType normalizedServiceGroupId = caseSensitivityNormalizer.normalize(serviceGroupId); DocumentIdentifier normalizedDocId = caseSensitivityNormalizer.normalize(documentId); - DBServiceGroup serviceGroup = serviceGroupDao.find(normalizedServiceGroupId.getScheme(), normalizedServiceGroupId.getValue()); + DBServiceGroup serviceGroup = serviceGroupDao.find(ServiceGroupConverter.toDbModel(normalizedServiceGroupId)); if (serviceGroup == null) { throw new NotFoundException("ServiceGroup not found: '%s'", asString(serviceGroupId)); } - boolean alreadyExisted = serviceMetadataDao.remove( - normalizedServiceGroupId.getScheme(), - normalizedServiceGroupId.getValue(), - normalizedDocId.getScheme(), - normalizedDocId.getValue()); + DBServiceMetadataId dbServiceMetadataId = toDbModel(normalizedServiceGroupId, normalizedDocId); + boolean alreadyExisted = serviceMetadataDao.removeById(dbServiceMetadataId); - DBServiceMetadata serviceMetadata = new DBServiceMetadata(); - serviceMetadata.setId(new DBServiceMetadataID( - normalizedServiceGroupId.getScheme(), - normalizedServiceGroupId.getValue(), - normalizedDocId.getScheme(), - normalizedDocId.getValue())); + DBServiceMetadata dbServiceMetadata = new DBServiceMetadata(); + dbServiceMetadata.setId(dbServiceMetadataId); - serviceMetadata.setXmlContent(xmlContent); - serviceMetadataDao.save(serviceMetadata); + dbServiceMetadata.setXmlContent(xmlContent); + serviceMetadataDao.save(dbServiceMetadata); return !alreadyExisted; } @@ -114,11 +102,8 @@ public class ServiceMetadataService { ParticipantIdentifierType normalizedServiceGroupId = caseSensitivityNormalizer.normalize(serviceGroupId); DocumentIdentifier normalizedDocId = caseSensitivityNormalizer.normalize(documentId); - boolean serviceMetadataRemoved = serviceMetadataDao.remove( - normalizedServiceGroupId.getScheme(), - normalizedServiceGroupId.getValue(), - normalizedDocId.getScheme(), - normalizedDocId.getValue()); + DBServiceMetadataId dbServiceMetadataId = toDbModel(normalizedServiceGroupId, normalizedDocId); + boolean serviceMetadataRemoved = serviceMetadataDao.removeById(dbServiceMetadataId); if (!serviceMetadataRemoved) { throw new NotFoundException("ServiceGroup not found: '%s'", asString(serviceGroupId)); @@ -127,12 +112,12 @@ public class ServiceMetadataService { public List<DocumentIdentifier> findServiceMetadataIdentifiers(ParticipantIdentifierType participantId) { ParticipantIdentifierType normalizedServiceGroupId = caseSensitivityNormalizer.normalize(participantId); - List<DBServiceMetadataID> metadataIds = serviceMetadataDao.findIdsByServiceGroup( + List<DBServiceMetadataId> metadataIds = serviceMetadataDao.findIdsByServiceGroup( normalizedServiceGroupId.getScheme(), normalizedServiceGroupId.getValue()); List<DocumentIdentifier> documentIds = new ArrayList(); - for (DBServiceMetadataID metadataId : metadataIds) { + for (DBServiceMetadataId metadataId : metadataIds) { DocumentIdentifier documentIdentifier = new DocumentIdentifier(metadataId.getDocumentIdentifier(), metadataId.getDocumentIdentifierScheme()); documentIds.add(documentIdentifier); } diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ServiceGroupServiceIntegrationTest.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ServiceGroupServiceIntegrationTest.java index 4445ab42738d2e2aa9a8f1c3ecf160627cc240e7..baea2f99b7508a1777620394772e82325fb5b31e 100644 --- a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ServiceGroupServiceIntegrationTest.java +++ b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ServiceGroupServiceIntegrationTest.java @@ -15,6 +15,11 @@ package eu.europa.ec.edelivery.smp.services; +import eu.europa.ec.edelivery.smp.data.dao.OwnershipDao; +import eu.europa.ec.edelivery.smp.data.dao.ServiceGroupDao; +import eu.europa.ec.edelivery.smp.data.model.DBOwnership; +import eu.europa.ec.edelivery.smp.data.model.DBOwnershipId; +import eu.europa.ec.edelivery.smp.data.model.DBServiceGroup; import eu.europa.ec.edelivery.smp.exceptions.NotFoundException; import eu.europa.ec.edelivery.smp.config.SmpServicesTestConfig; import org.junit.Test; @@ -30,10 +35,14 @@ import org.springframework.test.context.jdbc.Sql; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.transaction.annotation.Transactional; +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; import javax.xml.bind.JAXBException; import java.io.IOException; +import java.security.acl.Owner; import java.util.List; +import static eu.europa.ec.cipa.smp.server.conversion.ServiceGroupConverter.toDbModel; import static eu.europa.ec.cipa.smp.server.conversion.ServiceGroupConverter.unmarshal; import static eu.europa.ec.cipa.smp.server.util.XmlTestUtils.loadDocumentAsString; import static eu.europa.ec.cipa.smp.server.util.XmlTestUtils.marshall; @@ -51,12 +60,29 @@ import static org.junit.Assert.*; public class ServiceGroupServiceIntegrationTest { private static final String SERVICE_GROUP_XML_PATH = "/eu/europa/ec/edelivery/smp/services/ServiceGroupPoland.xml"; - private static final ParticipantIdentifierType SERVICE_GROUP_ID = asParticipantId("participant-scheme-qns::urn:Poland:ncpb"); + private static final ParticipantIdentifierType SERVICE_GROUP_ID = asParticipantId("participant-scheme-qns::urn:poland:ncpb"); public static final String ADMIN_USERNAME = "test_admin"; + @PersistenceContext + EntityManager em; + + @Autowired + ServiceGroupDao serviceGroupDao; + + @Autowired + OwnershipDao ownershipDao; + @Autowired private ServiceGroupService serviceGroupService; + @Test + public void makeSureServiceGroupDoesNotExistAlready(){ + DBServiceGroup dbServiceGroup = serviceGroupDao.find(toDbModel(SERVICE_GROUP_ID)); + if(dbServiceGroup != null){ + throw new IllegalStateException("Underlying DB already contains test data that should not be there. Remove them manually."); + } + } + @Test public void saveAndReadPositiveScenario() throws IOException, JAXBException { //when @@ -66,6 +92,10 @@ public class ServiceGroupServiceIntegrationTest { //then assertFalse(inServiceGroup == outServiceGroup); assertEquals(marshall(inServiceGroup), marshall(outServiceGroup)); + + em.flush(); + DBOwnership outOwnership = ownershipDao.find(new DBOwnershipId(ADMIN_USERNAME, SERVICE_GROUP_ID.getScheme(), SERVICE_GROUP_ID.getValue())); + assertEquals(ADMIN_USERNAME, outOwnership.getUser().getUsername()); } @Test(expected = NotFoundException.class) @@ -77,9 +107,11 @@ public class ServiceGroupServiceIntegrationTest { public void saveAndDeletePositiveScenario() throws IOException { //given saveServiceGroup(); + em.flush(); //when serviceGroupService.deleteServiceGroup(SERVICE_GROUP_ID); + em.flush(); //then try { diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ServiceMetadataIntegrationTest.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ServiceMetadataIntegrationTest.java index 97118d37fa656f3a08a154ebd537613f74ae1ec8..2243f2b03454b434ec63aba1ab064f9f379238f3 100644 --- a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ServiceMetadataIntegrationTest.java +++ b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ServiceMetadataIntegrationTest.java @@ -17,6 +17,9 @@ package eu.europa.ec.edelivery.smp.services; import eu.europa.ec.cipa.smp.server.conversion.ServiceGroupConverter; import eu.europa.ec.cipa.smp.server.conversion.ServiceMetadataConverter; +import eu.europa.ec.edelivery.smp.data.dao.ServiceMetadataDao; +import eu.europa.ec.edelivery.smp.data.model.DBServiceGroup; +import eu.europa.ec.edelivery.smp.data.model.DBServiceMetadata; import eu.europa.ec.edelivery.smp.exceptions.NotFoundException; import eu.europa.ec.edelivery.smp.config.SmpServicesTestConfig; import org.junit.Before; @@ -31,11 +34,15 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.transaction.annotation.Transactional; import org.w3c.dom.Document; +import javax.persistence.EntityManager; +import javax.persistence.EntityNotFoundException; +import javax.persistence.PersistenceContext; import javax.xml.bind.JAXBException; import javax.xml.transform.TransformerException; import java.io.IOException; import java.util.List; +import static eu.europa.ec.cipa.smp.server.conversion.ServiceGroupConverter.toDbModel; import static eu.europa.ec.cipa.smp.server.conversion.ServiceMetadataConverter.unmarshal; import static eu.europa.ec.cipa.smp.server.util.XmlTestUtils.loadDocumentAsString; import static eu.europa.ec.cipa.smp.server.util.XmlTestUtils.marshall; @@ -66,12 +73,26 @@ public class ServiceMetadataIntegrationTest { @Autowired ServiceGroupService serviceGroupService; + @PersistenceContext + EntityManager em; + + @Autowired + private ServiceMetadataDao serviceMetadataDao; + @Before public void before() throws IOException { ServiceGroup inServiceGroup = ServiceGroupConverter.unmarshal(loadDocumentAsString(SERVICE_GROUP_XML_PATH)); serviceGroupService.saveServiceGroup(inServiceGroup, ADMIN_USERNAME); } + @Test + public void makeSureServiceMetadataDoesNotExistAlready(){ + DBServiceMetadata dbServiceMetadata = serviceMetadataDao.find(ServiceMetadataConverter.toDbModel(SERVICE_GROUP_ID, DOC_ID)); + if(dbServiceMetadata != null){ + throw new IllegalStateException("Underlying DB already contains test data that should not be there. Remove them manually."); + } + } + @Test public void saveAndReadPositiveScenario() throws IOException, TransformerException, JAXBException { //given @@ -96,6 +117,11 @@ public class ServiceMetadataIntegrationTest { serviceMetadataService.getServiceMetadataDocument(SERVICE_GROUP_ID, DOC_ID); } + @Test(expected = NotFoundException.class) + public void notFoundExceptionThrownWhenDeletingNotExisting() { + serviceMetadataService.deleteServiceMetadata(SERVICE_GROUP_ID, DOC_ID); + } + @Test public void saveAndDeletePositiveScenario() throws IOException { //given @@ -103,6 +129,8 @@ public class ServiceMetadataIntegrationTest { serviceMetadataService.saveServiceMetadata(SERVICE_GROUP_ID, DOC_ID, inServiceMetadataXml); List<DocumentIdentifier> docIdsBefore = serviceMetadataService.findServiceMetadataIdentifiers(SERVICE_GROUP_ID); assertEquals(1, docIdsBefore.size()); + DBServiceMetadata dbServiceMetadata = serviceMetadataDao.find(ServiceMetadataConverter.toDbModel(SERVICE_GROUP_ID, DOC_ID)); + assertNotNull(dbServiceMetadata); //when serviceMetadataService.deleteServiceMetadata(SERVICE_GROUP_ID, DOC_ID); @@ -110,6 +138,13 @@ public class ServiceMetadataIntegrationTest { //then List<DocumentIdentifier> docIdsAfter = serviceMetadataService.findServiceMetadataIdentifiers(SERVICE_GROUP_ID); assertEquals(0, docIdsAfter.size()); + try { + em.refresh(dbServiceMetadata); + }catch (EntityNotFoundException e){ + // expected and needed - Hibernate's changes made on the same entity + // by persist() and Queries were not aware of each other + } + try { serviceMetadataService.getServiceMetadataDocument(SERVICE_GROUP_ID, DOC_ID); } catch (NotFoundException e) {