@Override public List<? extends ResourceModelComponent> getComponents() { List<ResourceModelComponent> components = new ArrayList<>(); components.addAll(resources); components.addAll(getRuntimeResourceModel().getRuntimeResources()); return components; }
@Override public RuntimeResourceModel get() { return new RuntimeResourceModel(ResourceModel.this.resources); } });
@Override public List<RuntimeResource> runtimeResourcesFrom(FluentIterable<Resource> resources) { RuntimeResourceModel resourceModel = new RuntimeResourceModel(resources.toList()); return resourceModel.getRuntimeResources(); } }
@Override public List<RuntimeResource> runtimeResourcesFrom(FluentIterable<Resource> resources) { RuntimeResourceModel resourceModel = new RuntimeResourceModel(resources.toList()); return resourceModel.getRuntimeResources(); } }
@Override public List<? extends ResourceModelComponent> getComponents() { List<ResourceModelComponent> components = new ArrayList<>(); components.addAll(resources); components.addAll(getRuntimeResourceModel().getRuntimeResources()); return components; }
@Override public List<RuntimeResource> runtimeResourcesFrom(FluentIterable<Resource> resources) { RuntimeResourceModel resourceModel = new RuntimeResourceModel(resources.toList()); return resourceModel.getRuntimeResources(); } }
@Override public RuntimeResourceModel get() { return new RuntimeResourceModel(ResourceModel.this.resources); } });
/** * Creates new runtime resource model from the list of resources. * * @param resources List of all resource that should be base for the model. */ public RuntimeResourceModel(List<Resource> resources) { this.runtimeResources = new ArrayList<>(); for (RuntimeResource.Builder builder : getRuntimeResources(resources)) { runtimeResources.add(builder.build(null)); } Collections.sort(runtimeResources, RuntimeResource.COMPARATOR); }
@Override public RuntimeResourceModel get() { return new RuntimeResourceModel(ResourceModel.this.resources); } });
/** * Creates new runtime resource model from the list of resources. * * @param resources List of all resource that should be base for the model. */ public RuntimeResourceModel(List<Resource> resources) { this.runtimeResources = new ArrayList<>(); for (RuntimeResource.Builder builder : getRuntimeResources(resources)) { runtimeResources.add(builder.build(null)); } Collections.sort(runtimeResources, RuntimeResource.COMPARATOR); }
@Override public RuntimeResourceModel get() { return new RuntimeResourceModel(ResourceModel.this.resources); } });
private List<RuntimeResource.Builder> getRuntimeResources(List<Resource> resources) { Map<String, List<Resource>> regexMap = new HashMap<>(); for (Resource resource : resources) { String path = resource.getPath(); String regex = null; if (path != null) { if (path.endsWith("/")) { path = path.substring(0, path.length() - 1); } regex = new PathTemplate(path).getPattern().getRegex(); } List<Resource> listFromMap = regexMap.get(regex); if (listFromMap == null) { listFromMap = new ArrayList<>(); regexMap.put(regex, listFromMap); } listFromMap.add(resource); } List<RuntimeResource.Builder> runtimeResources = new ArrayList<>(); for (Map.Entry<String, List<Resource>> entry : regexMap.entrySet()) { final List<Resource> resourcesWithSameRegex = entry.getValue(); List<Resource> childResources = new ArrayList<>(); for (final Resource res : resourcesWithSameRegex) { childResources.addAll(res.getChildResources()); } List<RuntimeResource.Builder> childRuntimeResources = getRuntimeResources(childResources); runtimeResources.add(new RuntimeResource.Builder(resourcesWithSameRegex, childRuntimeResources, entry.getKey())); } return runtimeResources; }
@Override public RuntimeResourceModel get() { return new RuntimeResourceModel(ResourceModel.this.resources); } });
private List<RuntimeResource.Builder> getRuntimeResources(List<Resource> resources) { Map<String, List<Resource>> regexMap = new HashMap<>(); for (Resource resource : resources) { String path = resource.getPath(); String regex = null; if (path != null) { if (path.endsWith("/")) { path = path.substring(0, path.length() - 1); } regex = new PathTemplate(path).getPattern().getRegex(); } List<Resource> listFromMap = regexMap.get(regex); if (listFromMap == null) { listFromMap = new ArrayList<>(); regexMap.put(regex, listFromMap); } listFromMap.add(resource); } List<RuntimeResource.Builder> runtimeResources = new ArrayList<>(); for (Map.Entry<String, List<Resource>> entry : regexMap.entrySet()) { final List<Resource> resourcesWithSameRegex = entry.getValue(); List<Resource> childResources = new ArrayList<>(); for (final Resource res : resourcesWithSameRegex) { childResources.addAll(res.getChildResources()); } List<RuntimeResource.Builder> childRuntimeResources = getRuntimeResources(childResources); runtimeResources.add(new RuntimeResource.Builder(resourcesWithSameRegex, childRuntimeResources, entry.getKey())); } return runtimeResources; }
@Override public RuntimeResourceModel get() { return new RuntimeResourceModel(ResourceModel.this.resources); } });
/** * Enhance {@code resourceModel} with a list of additional methods. * * The {@code resourceModel} is traversed and for each available runtime resource URI in the model {@code methods} are added. * In case of method conflicts, the existing resource methods will be preserved and will not be 'overridden' by any new * method from the {@code methods} list. Overriding check takes into account media types of methods so * that new resource methods with same HTTP method can be defined only for a more more specific media type. * * @param resourceModel Resource model to be enhanced. * @param subResourceModel {@code true} if the {@code resourceModel} to be enhanced is a sub resource model, {@code false} * if it is application resource model. * @param methods List of enhancing methods. * @param extendedFlag This flag will initialize the property * {@link org.glassfish.jersey.server.model.ResourceMethod#isExtended()}. * * @return New resource model builder enhanced by {@code methods}. */ public static ResourceModel.Builder enhanceResourceModel(ResourceModel resourceModel, boolean subResourceModel, List<Method> methods, boolean extendedFlag) { ResourceModel.Builder newModelBuilder = new ResourceModel.Builder(resourceModel, subResourceModel); for (RuntimeResource resource : resourceModel.getRuntimeResourceModel().getRuntimeResources()) { enhanceResource(resource, newModelBuilder, methods, extendedFlag); } return newModelBuilder; }
@Override public RuntimeResourceModel get() { return new RuntimeResourceModel(ResourceModel.this.resources); } });
/** * Enhance {@code resourceModel} with a list of additional methods. * * The {@code resourceModel} is traversed and for each available runtime resource URI in the model {@code methods} are added. * In case of method conflicts, the existing resource methods will be preserved and will not be 'overridden' by any new * method from the {@code methods} list. Overriding check takes into account media types of methods so * that new resource methods with same HTTP method can be defined only for a more more specific media type. * * @param resourceModel Resource model to be enhanced. * @param subResourceModel {@code true} if the {@code resourceModel} to be enhanced is a sub resource model, {@code false} * if it is application resource model. * @param methods List of enhancing methods. * @param extendedFlag This flag will initialize the property * {@link org.glassfish.jersey.server.model.ResourceMethod#isExtended()}. * * @return New resource model builder enhanced by {@code methods}. */ public static ResourceModel.Builder enhanceResourceModel(ResourceModel resourceModel, boolean subResourceModel, List<Method> methods, boolean extendedFlag) { ResourceModel.Builder newModelBuilder = new ResourceModel.Builder(resourceModel, subResourceModel); for (RuntimeResource resource : resourceModel.getRuntimeResourceModel().getRuntimeResources()) { enhanceResource(resource, newModelBuilder, methods, extendedFlag); } return newModelBuilder; }
/** * Enhance {@link org.glassfish.jersey.server.model.RuntimeResource runtime resources} from the given * {@link org.glassfish.jersey.server.model.ResourceModel resource model} with methods obtained via * {@link #getEnhancingMethods(org.glassfish.jersey.server.model.RuntimeResource)}. * * @param resourceModel resource model with runtime resources to enhance. * @param subResourceModel determines whether the resource model represents sub-resource. * @return enhanced resource model. */ private ResourceModel processModel(final ResourceModel resourceModel, final boolean subResourceModel) { ResourceModel.Builder newModelBuilder = processTemplateAnnotatedInvocables(resourceModel, subResourceModel); for (RuntimeResource resource : resourceModel.getRuntimeResourceModel().getRuntimeResources()) { ModelProcessorUtil.enhanceResource(resource, newModelBuilder, getEnhancingMethods(resource), false); } return newModelBuilder.build(); }
/** * Creates new runtime resource model from the list of resources. * * @param resources List of all resource that should be base for the model. */ public RuntimeResourceModel(List<Resource> resources) { this.runtimeResources = new ArrayList<>(); for (RuntimeResource.Builder builder : getRuntimeResources(resources)) { runtimeResources.add(builder.build(null)); } Collections.sort(runtimeResources, RuntimeResource.COMPARATOR); }