public PathResourceManager(final Path base, long transferMinSize, boolean caseSensitive, boolean followLinks, boolean allowResourceChangeListeners, final String... safePaths) { this(builder() .setBase(base) .setTransferMinSize(transferMinSize) .setCaseSensitive(caseSensitive) .setFollowLinks(followLinks) .setAllowResourceChangeListeners(allowResourceChangeListeners) .setSafePaths(safePaths)); }
@Override public void registerResourceChangeListener(ResourceChangeListener listener) { if(explodedDeployment && deploymentResourceManager.isResourceChangeListenerSupported()) { deploymentResourceManager.registerResourceChangeListener(listener); } for(ResourceManager external : externalOverlays) { if(external.isResourceChangeListenerSupported()) { external.registerResourceChangeListener(listener); } } }
@Override public void removeResourceChangeListener(ResourceChangeListener listener) { if(deploymentResourceManager.isResourceChangeListenerSupported()) { deploymentResourceManager.removeResourceChangeListener(listener); } for(ResourceManager external : externalOverlays) { if(external.isResourceChangeListenerSupported()) { external.removeResourceChangeListener(listener); } } }
@Override public HttpHandler wrap(HttpHandler handler) { ResourceManager rm = new PathResourceManager(Paths.get(location), 1024); ResourceHandler resourceHandler = new ResourceHandler(rm); resourceHandler.setDirectoryListingEnabled(allowDirectoryListing); return resourceHandler; } }
/** * Return a new resource handler * * @param resourceManager The resource manager to use * @return A new resource handler */ public static ResourceHandler resource(final ResourceManager resourceManager) { return new ResourceHandler(resourceManager).setDirectoryListingEnabled(false); }
@Override public void registerResourceChangeListener(ResourceChangeListener listener) { for(ResourceManager del : delegates) { if(del.isResourceChangeListenerSupported()) { del.registerResourceChangeListener(listener); } } }
@Override public void removeResourceChangeListener(ResourceChangeListener listener) { for(ResourceManager del : delegates) { if(del.isResourceChangeListenerSupported()) { del.removeResourceChangeListener(listener); } } }
@Override public Resource getResource(HttpServerExchange exchange, String path) throws IOException { return resourceManager.getResource(path); } }
@Override public boolean isRangeSupported() { if(underlying instanceof RangeAwareResource) { return ((RangeAwareResource) underlying).isRangeSupported(); } return false; } }
@Override public void handleChanges(Collection<ResourceChangeEvent> changes) { for(ResourceChangeEvent change : changes) { invalidate(change.getResource()); } } });
@Override public URL getUrl() { return resource.getUrl(); } };
@Override public List<Resource> list() { return underlyingResource.list(); }
public ResourceHandler setResourceManager(final ResourceManager resourceManager) { this.resourceManager = resourceManager; this.resourceSupplier = new DefaultResourceSupplier(resourceManager); return this; }
@Override public Date getLastModified() { openConnection(); return lastModified; }
@Override public void serve(final Sender sender, final HttpServerExchange exchange, final IoCallback callback) { serveImpl(sender, exchange, -1, -1, callback, false); } @Override
@Override public Resource getResource(String path) throws IOException { for(ResourceManager d : delegates) { Resource res = d.getResource(path); if(res != null) { return res; } } return null; }
@Override public boolean isRangeSupported() { //we can only handle range requests if the underlying resource supports it //even if we have the resource in the cache it may disappear before we try and serve it return underlyingResource instanceof RangeAwareResource && ((RangeAwareResource) underlyingResource).isRangeSupported(); }
public ResourceHandler(ResourceManager resourceManager, HttpHandler next) { this.resourceSupplier = new DefaultResourceSupplier(resourceManager); this.resourceManager = resourceManager; this.next = next; }
@Override public Long getContentLength() { openConnection(); return contentLength; }
@Override public void serveRange(final Sender sender, final HttpServerExchange exchange, final long start, final long end, final IoCallback callback) { serveImpl(sender, exchange, start, end, callback, true); } private void serveImpl(final Sender sender, final HttpServerExchange exchange, final long start, final long end, final IoCallback callback, final boolean range) {