/** * Searches in the database for an ACL rule by its UUID. * An {@link InvalidParameterValueException} is thrown if no ACL rule is found with the given UUID. */ protected NetworkACLItemVO retrieveAndValidateAclRule(String aclRuleUuid) { if (StringUtils.isBlank(aclRuleUuid)) { return null; } NetworkACLItemVO aclRule = _networkACLItemDao.findByUuid(aclRuleUuid); if (aclRule == null) { throw new InvalidParameterValueException(String.format("Could not find rule with ID [%s]", aclRuleUuid)); } return aclRule; }
@Override public NetworkACLItem moveNetworkAclRuleToNewPosition(MoveNetworkAclItemCmd moveNetworkAclItemCmd) { String uuidRuleBeingMoved = moveNetworkAclItemCmd.getUuidRuleBeingMoved(); String nextAclRuleUuid = moveNetworkAclItemCmd.getNextAclRuleUuid(); String previousAclRuleUuid = moveNetworkAclItemCmd.getPreviousAclRuleUuid(); if (StringUtils.isBlank(previousAclRuleUuid) && StringUtils.isBlank(nextAclRuleUuid)) { throw new InvalidParameterValueException("Both previous and next ACL rule IDs cannot be blank."); } NetworkACLItemVO ruleBeingMoved = _networkACLItemDao.findByUuid(uuidRuleBeingMoved); if (ruleBeingMoved == null) { throw new InvalidParameterValueException(String.format("Could not find a rule with ID[%s]", uuidRuleBeingMoved)); } NetworkACLItemVO previousRule = retrieveAndValidateAclRule(previousAclRuleUuid); NetworkACLItemVO nextRule = retrieveAndValidateAclRule(nextAclRuleUuid); validateMoveAclRulesData(ruleBeingMoved, previousRule, nextRule); try { NetworkACLVO lockedAcl = _networkACLDao.acquireInLockTable(ruleBeingMoved.getAclId()); List<NetworkACLItemVO> allAclRules = getAllAclRulesSortedByNumber(lockedAcl.getId()); validateAclConsistency(moveNetworkAclItemCmd, lockedAcl, allAclRules); if (previousRule == null) { return moveRuleToTheTop(ruleBeingMoved, allAclRules); } if (nextRule == null) { return moveRuleToTheBottom(ruleBeingMoved, allAclRules); } return moveRuleBetweenAclRules(ruleBeingMoved, allAclRules, previousRule, nextRule); } finally { _networkACLDao.releaseFromLockTable(ruleBeingMoved.getAclId()); } }