Interface ExperimentalDesignReadService
- All Known Implementing Classes:
ExperimentalDesignReadServiceImpl
ExperimentalDesign.
Phase 3 of the ExperimentalDesignService decomposition (strangler
fig). This service houses the two custom read methods previously implemented
directly on the ExperimentalDesignServiceImpl facade:
loadWithExperimentalFactors and
getRandomExperimentalDesignThatNeedsAttention. The first wraps
BaseDao.load(Long) with a Hibernate initialization of
the experimental-factors collection; the second delegates straight to
ExperimentalDesignDao.getRandomExperimentalDesignThatNeedsAttention(ExperimentalDesign).
Write-side methods (the inherited BaseService mutators
update, remove, etc. coming from
SecurableBaseService) stay on the ExperimentalDesignService
facade.
Callers should generally keep using ExperimentalDesignService as the
facade -- the facade delegates to this service. Direct injection is
appropriate where a class is logically read-only.
ACL / @Secured annotations live on ExperimentalDesignService
(the caller-facing facade interface); enforcement happens at the facade
proxy boundary, not here. The read methods on the facade carry
@Secured("IS_AUTHENTICATED_ANONYMOUSLY") plus a
@PostAuthorize hasPermission(...,'READ') check for
loadWithExperimentalFactors, and @Secured("GROUP_ADMIN") for
getRandomExperimentalDesignThatNeedsAttention. The new read impl is
unsecured at the AOP boundary on purpose -- intra-gemma-core callers
that already hold an authenticated session bypass duplicate ACL checks.
- See Also:
-
Method Summary
Modifier and TypeMethodDescriptiongetRandomExperimentalDesignThatNeedsAttention(ExperimentalDesign excludeDesign)
-
Method Details
-
loadWithExperimentalFactors
-
getRandomExperimentalDesignThatNeedsAttention
@Nullable ExperimentalDesign getRandomExperimentalDesignThatNeedsAttention(ExperimentalDesign excludeDesign)
-