@Override public <T> T readRuleAs(String ruleName, Class<T> as) throws ResourceNotFoundException, ForbiddenUserException, FailedRequestException { ContentHandle<T> handle = getHandleRegistry().makeHandle(as); if (!RuleReadHandle.class.isAssignableFrom(handle.getClass())) { throw new IllegalArgumentException( "Handle "+handle.getClass().getName()+ " cannot be used to read rule as "+as.getName() ); } readRule(ruleName, (RuleReadHandle) handle); return handle.get(); } @Override
@Override public <T> T readRuleAs(String ruleName, Class<T> as) throws ResourceNotFoundException, ForbiddenUserException, FailedRequestException { ContentHandle<T> handle = getHandleRegistry().makeHandle(as); if (!RuleReadHandle.class.isAssignableFrom(handle.getClass())) { throw new IllegalArgumentException( "Handle "+handle.getClass().getName()+ " cannot be used to read rule as "+as.getName() ); } readRule(ruleName, (RuleReadHandle) handle); return handle.get(); } @Override
@Override public <T extends RuleListReadHandle> T matchAs(Object content, String[] candidateRules, T ruleListHandle, ServerTransform transform) { if (content == null) { throw new IllegalArgumentException("no content for matching rules"); } Class<?> as = content.getClass(); StructureWriteHandle matchHandle = null; if (StructureWriteHandle.class.isAssignableFrom(as)) { matchHandle = (StructureWriteHandle) content; } else { ContentHandle<?> handle = getHandleRegistry().makeHandle(as); if (!StructureWriteHandle.class.isAssignableFrom(handle.getClass())) { throw new IllegalArgumentException( "Handle "+handle.getClass().getName()+ " cannot be used to match rules as "+as.getName() ); } Utilities.setHandleContent(handle, content); matchHandle = (StructureWriteHandle) handle; } return match(matchHandle, candidateRules, ruleListHandle, transform); } @Override
@Override public void writeRuleAs(String ruleName, Object ruleSource) throws ResourceNotFoundException, ForbiddenUserException, FailedRequestException { if (ruleSource == null) { throw new IllegalArgumentException("no source to write"); } Class<?> as = ruleSource.getClass(); RuleWriteHandle sourceHandle = null; if (RuleWriteHandle.class.isAssignableFrom(as)) { sourceHandle = (RuleWriteHandle) ruleSource; } else { ContentHandle<?> handle = getHandleRegistry().makeHandle(as); if (!RuleWriteHandle.class.isAssignableFrom(handle.getClass())) { throw new IllegalArgumentException( "Handle "+handle.getClass().getName()+ " cannot be used to write rule source as "+as.getName() ); } Utilities.setHandleContent(handle, ruleSource); sourceHandle = (RuleWriteHandle) handle; } writeRuleAs(ruleName, sourceHandle); } @Override
@Override public <T extends RuleListReadHandle> T matchAs(Object content, String[] candidateRules, T ruleListHandle, ServerTransform transform) { if (content == null) { throw new IllegalArgumentException("no content for matching rules"); } Class<?> as = content.getClass(); StructureWriteHandle matchHandle = null; if (StructureWriteHandle.class.isAssignableFrom(as)) { matchHandle = (StructureWriteHandle) content; } else { ContentHandle<?> handle = getHandleRegistry().makeHandle(as); if (!StructureWriteHandle.class.isAssignableFrom(handle.getClass())) { throw new IllegalArgumentException( "Handle "+handle.getClass().getName()+ " cannot be used to match rules as "+as.getName() ); } Utilities.setHandleContent(handle, content); matchHandle = (StructureWriteHandle) handle; } return match(matchHandle, candidateRules, ruleListHandle, transform); } @Override
@Override public void writeRuleAs(String ruleName, Object ruleSource) throws ResourceNotFoundException, ForbiddenUserException, FailedRequestException { if (ruleSource == null) { throw new IllegalArgumentException("no source to write"); } Class<?> as = ruleSource.getClass(); RuleWriteHandle sourceHandle = null; if (RuleWriteHandle.class.isAssignableFrom(as)) { sourceHandle = (RuleWriteHandle) ruleSource; } else { ContentHandle<?> handle = getHandleRegistry().makeHandle(as); if (!RuleWriteHandle.class.isAssignableFrom(handle.getClass())) { throw new IllegalArgumentException( "Handle "+handle.getClass().getName()+ " cannot be used to write rule source as "+as.getName() ); } Utilities.setHandleContent(handle, ruleSource); sourceHandle = (RuleWriteHandle) handle; } if (sourceHandle instanceof RuleDefinition) { ((RuleDefinition) sourceHandle).setName(ruleName); } writeRule(ruleName, sourceHandle); }