From d80af7bc9e7cd33d715a1bfd511e3d8a30b5f69c Mon Sep 17 00:00:00 2001 From: Cyrus <24922493+cyrus-dev@users.noreply.github.com> Date: Thu, 4 Aug 2022 10:02:34 -0400 Subject: [PATCH] Working through some inheritance issues for Policy. Archiving also is on the list of things that need to be reworked. --- .../repository/AppraiserRepository.java | 2 ++ .../repository/DeviceRepository.java | 2 ++ .../repository/PolicyRepository.java | 3 +- .../ReferenceDigestValueRepository.java | 5 +++ .../service/AppraiserServiceImpl.java | 10 ++---- .../attestationca/service/DbServiceImpl.java | 31 +++++++++++++++++ .../service/DeviceServiceImpl.java | 14 ++++++++ .../ReferenceDigestValueServiceImpl.java | 29 +++++++++++++--- .../controllers/PolicyPageController.java | 34 +++++++++---------- .../ValidationReportsPageController.java | 12 +++---- .../data/persist/ReferenceDigestValue.java | 2 ++ .../java/hirs/data/persist/policy/Policy.java | 2 ++ .../hirs/persist/service/DeviceService.java | 9 +++++ .../service/ReferenceDigestValueService.java | 12 +++++-- 14 files changed, 128 insertions(+), 39 deletions(-) diff --git a/HIRS_AttestationCA/src/main/java/hirs/attestationca/repository/AppraiserRepository.java b/HIRS_AttestationCA/src/main/java/hirs/attestationca/repository/AppraiserRepository.java index a3e1fcc5..73817745 100644 --- a/HIRS_AttestationCA/src/main/java/hirs/attestationca/repository/AppraiserRepository.java +++ b/HIRS_AttestationCA/src/main/java/hirs/attestationca/repository/AppraiserRepository.java @@ -11,4 +11,6 @@ import java.util.UUID; */ @Repository public interface AppraiserRepository extends JpaRepository { + + Appraiser findByName(String name); } diff --git a/HIRS_AttestationCA/src/main/java/hirs/attestationca/repository/DeviceRepository.java b/HIRS_AttestationCA/src/main/java/hirs/attestationca/repository/DeviceRepository.java index 16afc712..a8c64b79 100644 --- a/HIRS_AttestationCA/src/main/java/hirs/attestationca/repository/DeviceRepository.java +++ b/HIRS_AttestationCA/src/main/java/hirs/attestationca/repository/DeviceRepository.java @@ -12,4 +12,6 @@ import java.util.UUID; */ @Repository public interface DeviceRepository extends JpaRepository { + + Device findByName(String name); } diff --git a/HIRS_AttestationCA/src/main/java/hirs/attestationca/repository/PolicyRepository.java b/HIRS_AttestationCA/src/main/java/hirs/attestationca/repository/PolicyRepository.java index 13b0f329..20d0df66 100644 --- a/HIRS_AttestationCA/src/main/java/hirs/attestationca/repository/PolicyRepository.java +++ b/HIRS_AttestationCA/src/main/java/hirs/attestationca/repository/PolicyRepository.java @@ -10,5 +10,6 @@ import java.util.UUID; * Setting up for new creation for CRUD operations. */ @Repository -public interface PolicyRepository extends JpaRepository { +public interface PolicyRepository extends JpaRepository { + T save(T policy); } diff --git a/HIRS_AttestationCA/src/main/java/hirs/attestationca/repository/ReferenceDigestValueRepository.java b/HIRS_AttestationCA/src/main/java/hirs/attestationca/repository/ReferenceDigestValueRepository.java index dacab50b..b98b5a47 100644 --- a/HIRS_AttestationCA/src/main/java/hirs/attestationca/repository/ReferenceDigestValueRepository.java +++ b/HIRS_AttestationCA/src/main/java/hirs/attestationca/repository/ReferenceDigestValueRepository.java @@ -4,6 +4,7 @@ import hirs.data.persist.ReferenceDigestValue; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; +import java.util.List; import java.util.UUID; /** @@ -11,4 +12,8 @@ import java.util.UUID; */ @Repository public interface ReferenceDigestValueRepository extends JpaRepository { + + List findValuesByBaseRimId(UUID uuid); + + List findValuesBySupportRimId(UUID uuid); } 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 d3efd31b..ef84ea45 100644 --- a/HIRS_AttestationCA/src/main/java/hirs/attestationca/service/AppraiserServiceImpl.java +++ b/HIRS_AttestationCA/src/main/java/hirs/attestationca/service/AppraiserServiceImpl.java @@ -13,7 +13,6 @@ import org.springframework.retry.RetryContext; import org.springframework.stereotype.Service; import javax.persistence.EntityManager; -import java.util.List; import java.util.UUID; /** @@ -82,13 +81,8 @@ public class AppraiserServiceImpl extends DbServiceImpl @Override public Appraiser doWithRetry(final RetryContext context) throws DBManagerException { - List appraiserList = appraiserRepository.findAll(); - for (Appraiser appraiser : appraiserList) { - if (appraiser.getName().equals(name)) { - return appraiser; - } - } - return null; } + return appraiserRepository.findByName(name); + } }); } 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 e6cfa248..9483b73d 100644 --- a/HIRS_AttestationCA/src/main/java/hirs/attestationca/service/DbServiceImpl.java +++ b/HIRS_AttestationCA/src/main/java/hirs/attestationca/service/DbServiceImpl.java @@ -1,9 +1,12 @@ 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; @@ -106,4 +109,32 @@ public class DbServiceImpl { public final EntityManager getEm() { return em; } + + /** + * Archives the named object and updates it in the database. + * + * @param name name 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; + } } 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 b48eb045..33f0ccf8 100644 --- a/HIRS_AttestationCA/src/main/java/hirs/attestationca/service/DeviceServiceImpl.java +++ b/HIRS_AttestationCA/src/main/java/hirs/attestationca/service/DeviceServiceImpl.java @@ -41,6 +41,20 @@ public class DeviceServiceImpl extends DbServiceImpl implements DefaultS public DeviceServiceImpl(final EntityManager em) { } + @Override + public final Device getByName(final String name) { + LOGGER.debug("Find device by name: {}", name); + + return getRetryTemplate().execute(new RetryCallback() { + @Override + public Device doWithRetry(final RetryContext context) + throws DBManagerException { + return deviceRepository.findByName(name); + } + }); + } + @Override public final Device saveDevice(final Device device) throws DeviceManagerException { LOGGER.debug("Saving device: {}", device); 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 b5679286..17b29d5c 100644 --- a/HIRS_AttestationCA/src/main/java/hirs/attestationca/service/ReferenceDigestValueServiceImpl.java +++ b/HIRS_AttestationCA/src/main/java/hirs/attestationca/service/ReferenceDigestValueServiceImpl.java @@ -16,7 +16,6 @@ import org.springframework.retry.RetryContext; import org.springframework.stereotype.Service; import javax.persistence.EntityManager; -import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.UUID; @@ -115,11 +114,31 @@ public class ReferenceDigestValueServiceImpl extends DbServiceImpl getValuesByRimId(final UUID uuid) { - // this isn't right, it will look for the ids in the wrong column (CYRUYS) - // need to figure out repo search based on criteria associated with a specific column + public List getValuesByBaseRimId(final UUID uuid) { + LOGGER.debug("Find reference digest values base on: {}", uuid); - return new LinkedList<>(this.referenceDigestValueRepository.findAllById(uuid)); + return getRetryTemplate().execute(new RetryCallback, + DBManagerException>() { + @Override + public List doWithRetry(final RetryContext context) + throws DBManagerException { + return referenceDigestValueRepository.findValuesByBaseRimId(uuid); + } + }); + } + + @Override + public List getValuesBySupportRimId(final UUID uuid) { + LOGGER.debug("Find reference digest values base on: {}", uuid); + + return getRetryTemplate().execute(new RetryCallback, + DBManagerException>() { + @Override + public List doWithRetry(final RetryContext context) + throws DBManagerException { + return referenceDigestValueRepository.findValuesBySupportRimId(uuid); + } + }); } @Override diff --git a/HIRS_AttestationCAPortal/src/main/java/hirs/attestationca/portal/page/controllers/PolicyPageController.java b/HIRS_AttestationCAPortal/src/main/java/hirs/attestationca/portal/page/controllers/PolicyPageController.java index ed403eea..c8f8c388 100644 --- a/HIRS_AttestationCAPortal/src/main/java/hirs/attestationca/portal/page/controllers/PolicyPageController.java +++ b/HIRS_AttestationCAPortal/src/main/java/hirs/attestationca/portal/page/controllers/PolicyPageController.java @@ -6,10 +6,11 @@ import hirs.attestationca.portal.model.PolicyPageModel; import hirs.attestationca.portal.page.PageController; import hirs.attestationca.portal.page.PageMessages; import hirs.attestationca.portal.page.params.NoPageParams; +import hirs.data.persist.policy.Policy; import hirs.data.persist.policy.SupplyChainPolicy; -import hirs.persist.AppraiserManager; -import hirs.persist.PolicyManager; import hirs.persist.PolicyManagerException; +import hirs.persist.service.AppraiserService; +import hirs.persist.service.PolicyService; import org.apache.logging.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.ui.Model; @@ -47,9 +48,9 @@ public class PolicyPageController extends PageController { private static final String ENABLED_EXPIRES_PARAMETER_VALUE = "expires"; @Autowired - private PolicyManager policyManager; + private PolicyService policyService; @Autowired - private AppraiserManager appraiserManager; + private AppraiserService appraiserService; /** * Model attribute name used by initPage for the initial data passed to the @@ -66,15 +67,15 @@ public class PolicyPageController extends PageController { /** * Constructor. * - * @param policyManager the policy manager - * @param appraiserManager the appraiser manager + * @param policyService the policy service + * @param appraiserService the appraiser service */ @Autowired - public PolicyPageController(final PolicyManager policyManager, - final AppraiserManager appraiserManager) { + public PolicyPageController(final PolicyService policyService, + final AppraiserService appraiserService) { super(POLICY); - this.policyManager = policyManager; - this.appraiserManager = appraiserManager; + this.policyService = policyService; + this.appraiserService = appraiserService; } /** @@ -933,9 +934,9 @@ public class PolicyPageController extends PageController { * @return The default Supply Chain Policy */ private SupplyChainPolicy getDefaultPolicy() { - final Appraiser supplyChainAppraiser = appraiserManager.getAppraiser( + final Appraiser supplyChainAppraiser = appraiserService.getAppraiser( SupplyChainAppraiser.NAME); - return (SupplyChainPolicy) policyManager.getDefaultPolicy( + return (SupplyChainPolicy) policyService.getDefaultPolicy( supplyChainAppraiser); } @@ -957,13 +958,12 @@ public class PolicyPageController extends PageController { return policy; } - private void savePolicyAndApplySuccessMessage(final PolicyPageModel ppModel, - final Map model, - final PageMessages messages, - final String successMessage, + private void savePolicyAndApplySuccessMessage( + final PolicyPageModel ppModel, final Map model, + final PageMessages messages, final String successMessage, final SupplyChainPolicy policy) { // save the policy to the DB - policyManager.updatePolicy(policy); + policyService.updatePolicy(policy); // Log and set the success message messages.addSuccess(successMessage); diff --git a/HIRS_AttestationCAPortal/src/main/java/hirs/attestationca/portal/page/controllers/ValidationReportsPageController.java b/HIRS_AttestationCAPortal/src/main/java/hirs/attestationca/portal/page/controllers/ValidationReportsPageController.java index a48d18e1..32fee49d 100644 --- a/HIRS_AttestationCAPortal/src/main/java/hirs/attestationca/portal/page/controllers/ValidationReportsPageController.java +++ b/HIRS_AttestationCAPortal/src/main/java/hirs/attestationca/portal/page/controllers/ValidationReportsPageController.java @@ -15,8 +15,8 @@ import hirs.data.persist.certificate.attributes.ComponentIdentifier; import hirs.data.persist.certificate.attributes.V2.ComponentIdentifierV2; import hirs.persist.CriteriaModifier; import hirs.persist.CrudManager; -import hirs.persist.DeviceManager; import hirs.persist.service.CertificateService; +import hirs.persist.service.DeviceService; import org.apache.logging.log4j.Logger; import org.hibernate.Criteria; import org.hibernate.criterion.Restrictions; @@ -62,7 +62,7 @@ public class ValidationReportsPageController extends PageController supplyChainValidatorSummaryManager, final CertificateService certificateService, - final DeviceManager deviceManager) { + final DeviceService deviceService) { super(VALIDATION_REPORTS); this.supplyChainValidatorSummaryManager = supplyChainValidatorSummaryManager; this.certificateService = certificateService; - this.deviceManager = deviceManager; + this.deviceService = deviceService; } /** @@ -265,7 +265,7 @@ public class ValidationReportsPageController extends PageController getValuesByRimId(UUID uuid); + List getValuesByBaseRimId(UUID uuid); + + /** + * Persists a new Reference Digest value. + * + * @param uuid associated with the support rim. + * @return the persisted list of ReferenceDigestValue + */ + List getValuesBySupportRimId(UUID uuid); }