From 60e083a0487916b10028b012fd8bbfe863228bad Mon Sep 17 00:00:00 2001 From: Cyrus <24922493+cyrus-dev@users.noreply.github.com> Date: Wed, 10 Aug 2022 09:55:45 -0400 Subject: [PATCH] Updated entity manager to prep for ordered list --- .../PersistenceConfiguration.java | 33 ++++-------- .../service/AppraiserServiceImpl.java | 13 ++++- .../service/CertificateServiceImpl.java | 30 ++++++++++- .../attestationca/service/DbServiceImpl.java | 42 +++++---------- .../service/DeviceServiceImpl.java | 13 ++++- .../service/PolicyServiceImpl.java | 31 ++++++++++- .../ReferenceDigestValueServiceImpl.java | 52 ++++++++++++++++++- .../service/ReferenceManifestServiceImpl.java | 37 ++++++++++++- .../persist/ReferenceManifestSelector.java | 3 +- .../service/ReferenceManifestService.java | 17 +++++- 10 files changed, 202 insertions(+), 69 deletions(-) diff --git a/HIRS_AttestationCA/src/main/java/hirs/attestationca/configuration/PersistenceConfiguration.java b/HIRS_AttestationCA/src/main/java/hirs/attestationca/configuration/PersistenceConfiguration.java index ba01e313..d530a537 100644 --- a/HIRS_AttestationCA/src/main/java/hirs/attestationca/configuration/PersistenceConfiguration.java +++ b/HIRS_AttestationCA/src/main/java/hirs/attestationca/configuration/PersistenceConfiguration.java @@ -6,7 +6,6 @@ import hirs.attestationca.service.DeviceServiceImpl; import hirs.attestationca.service.PolicyServiceImpl; import hirs.attestationca.service.ReferenceDigestValueServiceImpl; import hirs.attestationca.service.ReferenceManifestServiceImpl; -import hirs.data.persist.SupplyChainValidationSummary; import hirs.persist.service.CertificateService; import hirs.persist.service.DeviceService; import hirs.persist.service.PolicyService; @@ -110,35 +109,21 @@ public class PersistenceConfiguration { setDbServiceRetrySettings(serviceImpl); return serviceImpl; } - +// // /** -// * Creates a {@link hirs.persist.PortalInfoManager} ready to use. +// * Creates a {@link hirs.attestationca.servicemanager.DBManager} +// * for SupplyChainValidationSummary persistence, ready for use. // * -// * @return {@link hirs.persist.PortalInfoManager} +// * @return {@link hirs.attestationca.servicemanager.DBManager} // */ // @Bean -// public PortalInfoManager portalInfoManager() { -// DBPortalInfoManager manager = new DBPortalInfoManager(entityManager); -// setDbServiceRetrySettings(manager); -// return manager; +// public DbServiceImpl supplyChainValidationSummaryManager() { +// DbServiceImpl serviceImpl +// = new DbServiceImpl(entityManager); +// setDbServiceRetrySettings(serviceImpl); +// return serviceImpl; // } - /** - * Creates a {@link hirs.attestationca.servicemanager.DBManager} - * for SupplyChainValidationSummary persistence, ready for use. - * - * @return {@link hirs.attestationca.servicemanager.DBManager} - */ - @Bean - public DbServiceImpl supplyChainValidationSummaryManager() { - DbServiceImpl serviceImpl - = new DbServiceImpl( - entityManager - ); - setDbServiceRetrySettings(serviceImpl); - return serviceImpl; - } - /** * Apply the spring-wired retry template settings to the db manager. * @param dbServiceImpl the service to apply the retry settings to diff --git a/HIRS_AttestationCA/src/main/java/hirs/attestationca/service/AppraiserServiceImpl.java b/HIRS_AttestationCA/src/main/java/hirs/attestationca/service/AppraiserServiceImpl.java index ef84ea45..7cfbeaec 100644 --- a/HIRS_AttestationCA/src/main/java/hirs/attestationca/service/AppraiserServiceImpl.java +++ b/HIRS_AttestationCA/src/main/java/hirs/attestationca/service/AppraiserServiceImpl.java @@ -13,6 +13,7 @@ import org.springframework.retry.RetryContext; import org.springframework.stereotype.Service; import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; import java.util.UUID; /** @@ -26,12 +27,20 @@ public class AppraiserServiceImpl extends DbServiceImpl private static final Logger LOGGER = LogManager.getLogger(); @Autowired private AppraiserRepository appraiserRepository; + @PersistenceContext + private EntityManager entityManager; /** * Default constructor. - * @param em entity manager for jpa hibernate events + * @param entityManager entity manager for jpa hibernate events */ - public AppraiserServiceImpl(final EntityManager em) { + public AppraiserServiceImpl(final EntityManager entityManager) { + this.entityManager = entityManager; + } + + @Override + public boolean archive(final UUID uuid) { + return false; } @Override diff --git a/HIRS_AttestationCA/src/main/java/hirs/attestationca/service/CertificateServiceImpl.java b/HIRS_AttestationCA/src/main/java/hirs/attestationca/service/CertificateServiceImpl.java index e1b1bdc3..02c021ae 100644 --- a/HIRS_AttestationCA/src/main/java/hirs/attestationca/service/CertificateServiceImpl.java +++ b/HIRS_AttestationCA/src/main/java/hirs/attestationca/service/CertificateServiceImpl.java @@ -2,6 +2,7 @@ package hirs.attestationca.service; import hirs.FilteredRecordsList; import hirs.attestationca.repository.CertificateRepository; +import hirs.data.persist.ArchivableEntity; import hirs.data.persist.certificate.Certificate; import hirs.data.persist.certificate.CertificateAuthorityCredential; import hirs.data.persist.certificate.EndorsementCredential; @@ -20,6 +21,7 @@ import org.springframework.retry.RetryContext; import org.springframework.stereotype.Service; import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; import java.util.HashSet; import java.util.List; import java.util.Map; @@ -38,12 +40,15 @@ public class CertificateServiceImpl extends DbServiceImpl private static final Logger LOGGER = LogManager.getLogger(CertificateServiceImpl.class); @Autowired private CertificateRepository certificateRepository; + @PersistenceContext + private EntityManager entityManager; /** * Default constructor. - * @param em entity manager for jpa hibernate events + * @param entityManager entity manager for jpa hibernate events */ - public CertificateServiceImpl(final EntityManager em) { + public CertificateServiceImpl(final EntityManager entityManager) { + this.entityManager = entityManager; } @Override @@ -168,4 +173,25 @@ public class CertificateServiceImpl extends DbServiceImpl return null; } } + + @Override + public boolean archive(UUID uuid) { + LOGGER.debug("archiving object: {}", uuid); + if (uuid == null) { + LOGGER.debug("null name argument"); + return false; + } + Certificate target = (Certificate) + this.certificateRepository.getReferenceById(uuid); + if (target == null) { + return false; + } + if (!(target instanceof ArchivableEntity)) { + throw new DBManagerException("unable to archive non-archivable object"); + } + + ((ArchivableEntity) target).archive(); + this.updateCertificate(target, uuid); + return true; + } } diff --git a/HIRS_AttestationCA/src/main/java/hirs/attestationca/service/DbServiceImpl.java b/HIRS_AttestationCA/src/main/java/hirs/attestationca/service/DbServiceImpl.java index 9483b73d..dcf34873 100644 --- a/HIRS_AttestationCA/src/main/java/hirs/attestationca/service/DbServiceImpl.java +++ b/HIRS_AttestationCA/src/main/java/hirs/attestationca/service/DbServiceImpl.java @@ -1,21 +1,19 @@ package hirs.attestationca.service; -import hirs.data.persist.ArchivableEntity; -import hirs.persist.DBManagerException; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.hibernate.StaleObjectStateException; import org.hibernate.exception.LockAcquisitionException; -import org.jadira.usertype.spi.repository.JpaBaseRepository; import org.springframework.retry.RetryListener; import org.springframework.retry.backoff.FixedBackOffPolicy; import org.springframework.retry.policy.SimpleRetryPolicy; import org.springframework.retry.support.RetryTemplate; -import org.springframework.stereotype.Service; import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; import java.util.HashMap; import java.util.Map; +import java.util.UUID; /** @@ -24,8 +22,7 @@ import java.util.Map; * archive, and delete operations for managing objects in a database. * */ -@Service -public class DbServiceImpl { +public abstract class DbServiceImpl { private static final Logger LOGGER = LogManager.getLogger(DbServiceImpl.class); /** @@ -39,7 +36,9 @@ public class DbServiceImpl { // structure for retrying methods in the database private RetryTemplate retryTemplate; - private EntityManager em; + + @PersistenceContext + private EntityManager entityManager; /** * Creates a new DbServiceImpl that uses the default database. The @@ -53,11 +52,12 @@ public class DbServiceImpl { /** * Creates a new DbServiceImpl that uses the default database. The * default database is used to store all of the objects. + * @param entityManager entity manager for jpa hibernate events * */ - public DbServiceImpl(final EntityManager em) { + public DbServiceImpl(final EntityManager entityManager) { setRetryTemplate(DEFAULT_MAX_RETRY_ATTEMPTS, DEFAULT_RETRY_WAIT_TIME_MS); - this.em = em; + this.entityManager = entityManager; } /** @@ -107,34 +107,16 @@ public class DbServiceImpl { * @return instance of the manager */ public final EntityManager getEm() { - return em; + return entityManager; } /** * Archives the named object and updates it in the database. * - * @param name name of the object to archive + * @param uuid unique id of the object to archive * @return true if the object was successfully found and archived, false if the object was not * found * @throws hirs.persist.DBManagerException if the object is not an instance of ArchivableEntity */ - public final boolean archive(final String name) throws DBManagerException { - LOGGER.debug("archiving object: {}", name); - if (name == null) { - LOGGER.debug("null name argument"); - return false; - } - - T target = get(name); - if (target == null) { - return false; - } - if (!(target instanceof ArchivableEntity)) { - throw new DBManagerException("unable to archive non-archivable object"); - } - - ((ArchivableEntity) target).archive(); - update(target); - return true; - } + public abstract boolean archive(final UUID uuid); } diff --git a/HIRS_AttestationCA/src/main/java/hirs/attestationca/service/DeviceServiceImpl.java b/HIRS_AttestationCA/src/main/java/hirs/attestationca/service/DeviceServiceImpl.java index 284d05cf..95ab4c0d 100644 --- a/HIRS_AttestationCA/src/main/java/hirs/attestationca/service/DeviceServiceImpl.java +++ b/HIRS_AttestationCA/src/main/java/hirs/attestationca/service/DeviceServiceImpl.java @@ -16,6 +16,7 @@ import org.springframework.retry.RetryContext; import org.springframework.stereotype.Service; import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; import java.util.List; import java.util.Map; import java.util.UUID; @@ -32,12 +33,15 @@ public class DeviceServiceImpl extends DbServiceImpl private static final Logger LOGGER = LogManager.getLogger(DeviceServiceImpl.class); @Autowired private DeviceRepository deviceRepository; + @PersistenceContext + private EntityManager entityManager; /** * Default constructor. - * @param em entity manager for jpa hibernate events + * @param entityManager entity manager for jpa hibernate events */ - public DeviceServiceImpl(final EntityManager em) { + public DeviceServiceImpl(final EntityManager entityManager) { + this.entityManager = entityManager; } @Override @@ -147,4 +151,9 @@ public class DeviceServiceImpl extends DbServiceImpl throws DBManagerException { return null; } + + @Override + public boolean archive(UUID uuid) { + return true; + } } diff --git a/HIRS_AttestationCA/src/main/java/hirs/attestationca/service/PolicyServiceImpl.java b/HIRS_AttestationCA/src/main/java/hirs/attestationca/service/PolicyServiceImpl.java index bc00007e..2369f77f 100644 --- a/HIRS_AttestationCA/src/main/java/hirs/attestationca/service/PolicyServiceImpl.java +++ b/HIRS_AttestationCA/src/main/java/hirs/attestationca/service/PolicyServiceImpl.java @@ -3,6 +3,7 @@ package hirs.attestationca.service; import hirs.FilteredRecordsList; import hirs.appraiser.Appraiser; import hirs.attestationca.repository.PolicyRepository; +import hirs.data.persist.ArchivableEntity; import hirs.data.persist.policy.Policy; import hirs.persist.CriteriaModifier; import hirs.persist.DBManagerException; @@ -20,6 +21,7 @@ import org.springframework.retry.RetryContext; import org.springframework.stereotype.Service; import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Predicate; @@ -40,12 +42,16 @@ public class PolicyServiceImpl extends DbServiceImpl private static final Logger LOGGER = LogManager.getLogger(PolicyServiceImpl.class); @Autowired private PolicyRepository policyRepository; + @PersistenceContext + private EntityManager entityManager; /** * Default Constructor. + * @param entityManager entity manager for jpa hibernate events */ - public PolicyServiceImpl(final EntityManager em) { - super(em); + public PolicyServiceImpl(final EntityManager entityManager) { + super(entityManager); + this.entityManager = entityManager; } @Override @@ -185,4 +191,25 @@ public class PolicyServiceImpl extends DbServiceImpl throws DBManagerException { return null; } + + @Override + public boolean archive(UUID uuid) { + LOGGER.debug("archiving object: {}", uuid); + if (uuid == null) { + LOGGER.debug("null name argument"); + return false; + } + Policy target = (Policy) + this.policyRepository.getReferenceById(uuid); + if (target == null) { + return false; + } + if (!(target instanceof ArchivableEntity)) { + throw new DBManagerException("unable to archive non-archivable object"); + } + + ((ArchivableEntity) target).archive(); + this.updatePolicy(target, uuid); + return true; + } } diff --git a/HIRS_AttestationCA/src/main/java/hirs/attestationca/service/ReferenceDigestValueServiceImpl.java b/HIRS_AttestationCA/src/main/java/hirs/attestationca/service/ReferenceDigestValueServiceImpl.java index 4038c844..a28f055f 100644 --- a/HIRS_AttestationCA/src/main/java/hirs/attestationca/service/ReferenceDigestValueServiceImpl.java +++ b/HIRS_AttestationCA/src/main/java/hirs/attestationca/service/ReferenceDigestValueServiceImpl.java @@ -2,6 +2,7 @@ package hirs.attestationca.service; import hirs.FilteredRecordsList; import hirs.attestationca.repository.ReferenceDigestValueRepository; +import hirs.data.persist.ArchivableEntity; import hirs.data.persist.ReferenceDigestValue; import hirs.persist.CriteriaModifier; import hirs.persist.DBManagerException; @@ -15,6 +16,8 @@ import org.springframework.retry.RetryContext; import org.springframework.stereotype.Service; import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; +import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.UUID; @@ -32,11 +35,15 @@ public class ReferenceDigestValueServiceImpl extends DbServiceImpl searchableColumns) throws DBManagerException { - return null; + LOGGER.debug("Getting ordered object list"); + Class searchClass = clazz; + if (clazz == null) { + LOGGER.debug("clazz is null"); + searchClass = ReferenceDigestValue.class; + } + + if (searchableColumns != null) { + LOGGER.info(searchClass.getName() + " querying for " + + Arrays.toString(searchableColumns.entrySet().toArray()) + + " with search strings \"" + search + "\""); + } + + //Object that will store query values + FilteredRecordsList rdvOrderedList = new FilteredRecordsList<>(); + + // Search +// Query keywordQuery = queryBuilder. + + // sort + return rdvOrderedList; } @Override @@ -157,4 +184,25 @@ public class ReferenceDigestValueServiceImpl extends DbServiceImpl - implements DefaultService, ReferenceManifestService { + implements ReferenceManifestService { private static final Logger LOGGER = LogManager.getLogger(ReferenceManifestServiceImpl.class); @Autowired private ReferenceManifestRepository referenceManifestRepository; + @PersistenceContext + private EntityManager entityManager; /** * Default constructor. @@ -79,6 +85,12 @@ public class ReferenceManifestServiceImpl extends DbServiceImpl Set getReferenceManifest( + final ReferenceManifestSelector referenceManifestSelector) { + return new HashSet<>(0); + } + @Override public List getList() { LOGGER.debug("Getting all reference manifest..."); @@ -137,4 +149,25 @@ public class ReferenceManifestServiceImpl extends DbServiceImpl { // construct and execute query private Set execute() { - Set results = this.referenceManifestService.ge; - return results; + return this.referenceManifestService.getReferenceManifest(this); } /** diff --git a/HIRS_Utils/src/main/java/hirs/persist/service/ReferenceManifestService.java b/HIRS_Utils/src/main/java/hirs/persist/service/ReferenceManifestService.java index ea2182fe..70a519ac 100644 --- a/HIRS_Utils/src/main/java/hirs/persist/service/ReferenceManifestService.java +++ b/HIRS_Utils/src/main/java/hirs/persist/service/ReferenceManifestService.java @@ -2,7 +2,9 @@ package hirs.persist.service; import hirs.data.persist.ReferenceManifest; import hirs.persist.OrderedQuery; +import hirs.persist.ReferenceManifestSelector; +import java.util.Set; import java.util.UUID; /** @@ -10,7 +12,8 @@ import java.util.UUID; * ReferenceManifestService is used to store and manage reference manifests. It has * support for the basic create, read, update, and delete methods. */ -public interface ReferenceManifestService extends OrderedQuery { +public interface ReferenceManifestService extends OrderedQuery, + DefaultService { /** * Saves the ReferenceManifest in the database. This creates a new @@ -39,4 +42,16 @@ public interface ReferenceManifestService extends OrderedQuery the type of certificate that will be retrieved + * @param referenceManifestSelector a {@link hirs.persist.ReferenceManifestSelector} + * to use for querying + * @return a Set of matching Certificates, which may be empty + */ + Set getReferenceManifest( + ReferenceManifestSelector referenceManifestSelector); }