public GridFsResource[] getResources(String locationPattern) { if (!StringUtils.hasText(locationPattern)) { return new GridFsResource[0]; } AntPath path = new AntPath(locationPattern); if (path.isPattern()) { GridFSFindIterable files = find(query(whereFilename().regex(path.toRegex()))); List<GridFsResource> resources = new ArrayList<>(); for (GridFSFile file : files) { resources.add(getResource(file)); } return resources.toArray(new GridFsResource[0]); } return new GridFsResource[] { getResource(locationPattern) }; }
/** * Returns the regular expression equivalent of this Ant path. * * @return */ public String toRegex() { StringBuilder patternBuilder = new StringBuilder(); Matcher m = WILDCARD_PATTERN.matcher(path); int end = 0; while (m.find()) { patternBuilder.append(quote(path, end, m.start())); String match = m.group(); if ("?".equals(match)) { patternBuilder.append('.'); } else if ("**".equals(match)) { patternBuilder.append(".*"); } else if ("*".equals(match)) { patternBuilder.append("[^/]*"); } end = m.end(); } patternBuilder.append(quote(path, end, path.length())); return patternBuilder.toString(); }
/** * Returns whether the path is a pattern. * * @return */ public boolean isPattern() { String path = stripPrefix(this.path); return (path.indexOf('*') != -1 || path.indexOf('?') != -1); }
@Override public Flux<ReactiveGridFsResource> getResources(String locationPattern) { if (!StringUtils.hasText(locationPattern)) { return Flux.empty(); } AntPath path = new AntPath(locationPattern); if (path.isPattern()) { Flux<GridFSFile> files = find(query(whereFilename().regex(path.toRegex()))); return files.flatMap(this::getResource); } return getResource(locationPattern).flux(); }
/** * Returns whether the path is a pattern. * * @return */ public boolean isPattern() { String path = stripPrefix(this.path); return (path.indexOf('*') != -1 || path.indexOf('?') != -1); }
/** * Returns the regular expression equivalent of this Ant path. * * @return */ public String toRegex() { StringBuilder patternBuilder = new StringBuilder(); Matcher m = WILDCARD_PATTERN.matcher(path); int end = 0; while (m.find()) { patternBuilder.append(quote(path, end, m.start())); String match = m.group(); if ("?".equals(match)) { patternBuilder.append('.'); } else if ("**".equals(match)) { patternBuilder.append(".*"); } else if ("*".equals(match)) { patternBuilder.append("[^/]*"); } end = m.end(); } patternBuilder.append(quote(path, end, path.length())); return patternBuilder.toString(); }
public GridFsResource[] getResources(String locationPattern) { if (!StringUtils.hasText(locationPattern)) { return new GridFsResource[0]; } AntPath path = new AntPath(locationPattern); if (path.isPattern()) { GridFSFindIterable files = find(query(whereFilename().regex(path.toRegex()))); List<GridFsResource> resources = new ArrayList<>(); for (GridFSFile file : files) { resources.add(getResource(file)); } return resources.toArray(new GridFsResource[0]); } return new GridFsResource[] { getResource(locationPattern) }; }