public void shift(long priorityStart, long offset) { if (priorityStart != -1) { geofenceRemoteService.getRuleAdminService().shift(priorityStart, offset); } }
public void updatePriorities(RuleModel rule, long shift) { geofenceRemoteService.getRuleAdminService() .shift(rule.getPriority(), 1); }
@Override public Response move(String rulesIds, Integer targetPriority) throws BadRequestRestEx, InternalErrorRestEx { try { List<Rule> rules = findRules(rulesIds); if (!rules.isEmpty()) { // shift priorities of rules with a priority equal or lower than the target priority ruleAdminService.shift(targetPriority, rules.size()); // update moved rules priority long priority = targetPriority; for (Rule rule : rules) { rule.setPriority(priority); ruleAdminService.update(rule); priority++; } } return Response.status(Status.OK).entity("OK\n").build(); } catch (Exception ex) { LOGGER.error(ex.getMessage(), ex); throw new InternalErrorRestEx(ex.getMessage()); } }
adminService.shift(targetPriority, rules.size());
@RequestMapping( value = "/rules", method = RequestMethod.POST, consumes = { MediaType.TEXT_XML_VALUE, MediaType.APPLICATION_XML_VALUE, MediaType.APPLICATION_JSON_VALUE, MediaTypeExtensions.TEXT_JSON_VALUE } ) @ResponseStatus(HttpStatus.CREATED) public ResponseEntity<Long> insert(@RequestBody(required = true) JaxbRule rule) { long priority = rule.getPriority() == null ? 0 : rule.getPriority().longValue(); if (adminService.getRuleByPriority(priority) != null) { adminService.shift(priority, 1); } Long id = adminService.insert(rule.toRule()); if (rule.getLimits() != null && rule.getAccess().equals("LIMIT")) { adminService.setLimits(id, rule.getLimits().toRuleLimits(null)); } if (rule.getLayerDetails() != null && !rule.getAccess().equals("LIMIT")) { adminService.setDetails(id, rule.getLayerDetails().toLayerDetails(null)); } return new ResponseEntity<Long>(id, HttpStatus.CREATED); }
protected void shiftIfNecessary(long priority, ShortRule keep) { // detect if necessary boolean necessary = false; for (ShortRule rule : rules) { if (rule.getPriority() == priority) { necessary = true; continue; } } if (necessary) { // local for (ShortRule rule : rules) { if (rule.getPriority() >= priority && rule != keep) { rule.setPriority(rule.getPriority() + 1); } } // db adminService().shift(priority, 1); } }
@RequestMapping(value = "/rules/id/{id}", method = RequestMethod.POST) public @ResponseStatus(HttpStatus.OK) void update( @PathVariable("id") Long id, @RequestBody JaxbRule rule) { if (rule.getPriority() != null) { ShortRule priorityRule = adminService.getRuleByPriority(rule.getPriority().longValue()); if (priorityRule != null && priorityRule.getId() != id) { adminService.shift(rule.getPriority().longValue(), 1); } } Rule theRule = adminService.get(id); adminService.update(rule.toRule(theRule)); if (rule.getLimits() != null) { adminService.setLimits(id, rule.getLimits().toRuleLimits(theRule.getRuleLimits())); } if (rule.getLayerDetails() != null) { adminService.setDetails( id, rule.getLayerDetails().toLayerDetails(theRule.getLayerDetails())); } }
@RequestMapping(value = "/rules/id/{id}", method = RequestMethod.PUT) public @ResponseStatus(HttpStatus.OK) void clearAndUpdate( @PathVariable("id") Long id, @RequestBody JaxbRule rule) { if (rule.getPriority() != null) { ShortRule priorityRule = adminService.getRuleByPriority(rule.getPriority().longValue()); if (priorityRule != null && priorityRule.getId() != id) { adminService.shift(rule.getPriority().longValue(), 1); } } Rule theRule = new Rule(); theRule.setId(id); adminService.update(rule.toRule(theRule)); if (rule.getLimits() != null) { adminService.setLimits(id, rule.getLimits().toRuleLimits(null)); } else { adminService.setLimits(id, null); } if (rule.getLayerDetails() != null) { adminService.setDetails(id, rule.getLayerDetails().toLayerDetails(null)); } else { adminService.setDetails(id, null); } }