public void visit(Resource resource) throws Exception { if(resource instanceof AbstractResourceWithParameters) { for(int i = 0; i < ((WithParameters) resource).getMinParameters(); i++) { ((WithParameters) resource).consumeParameter("{requiredPathParameter}"); } } visitResource(resource); if(resource instanceof AbstractResourceWithParameters && ((WithParameters) resource).getMinParameters() == 0) { for(int i = 0; i < ((WithParameters) resource).getMaxParameters(); i++) { ((WithParameters) resource).consumeParameter("{optionalPathParameter}"); } visitResource(resource); } }
public Resource getResource(String actionPath) { Resource resource = getRoot(); String[] pathSegments = actionPath.split("/"); for(String segment : pathSegments) { if(resource instanceof WithParameters) { WithParameters withParameters = (WithParameters) resource; if(withParameters.getParameters().size() < withParameters.getMinParameters()) { withParameters.consumeParameter(segment); continue; } } Object subResource = null; try { subResource = resource.getSubResource(segment); } catch (Exception e) { logger.debug("Could not load resource", e); } if(subResource instanceof Resource) { resource = (Resource) subResource; } else if(resource instanceof WithParameters) { WithParameters withParameters = (WithParameters) resource; if(withParameters.getParameters().size() < withParameters.getMaxParameters()) { withParameters.consumeParameter(segment); } } else { return null; } } return resource; }