private static boolean isPlain(FilePattern.Segment segment) { return segment.isTraverse() == false && segment.getElements().stream() .map(FilePattern.PatternElement::getKind) .allMatch(Predicate.isEqual(FilePattern.PatternElementKind.TOKEN)); }
private static Set<String> resolve(Segment segment) { assert segment != null; assert segment.isTraverse() == false; List<Set<String>> candidates = new ArrayList<>(); for (PatternElement element : segment.getElements()) { switch (element.getKind()) { case TOKEN: candidates.add(Collections.singleton(element.getToken())); break; case WILDCARD: candidates.add(Collections.singleton("*")); //$NON-NLS-1$ break; case SELECTION: candidates.add(new TreeSet<>(((Selection) element).getContents())); break; default: throw new AssertionError(); } } List<String> results = stringCrossJoin(candidates); return new TreeSet<>(results); }
/** * Returns the pattern element kinds appeared in this pattern. * @return the pattern element kinds * @since 0.7.0 */ public Set<PatternElementKind> getPatternElementKinds() { Set<PatternElementKind> results = EnumSet.noneOf(PatternElementKind.class); for (Segment segment : segments) { for (PatternElement element : segment.getElements()) { results.add(element.getKind()); } } return results; }
buf.append(WILDCARD_REPLACEMENT); for (PatternElement element : segment.getElements()) { switch (element.getKind()) { case TOKEN:
/** * A complex pattern. */ @Test public void complex() { FilePattern compiled = FilePattern.compile("alpha/**/{beta|gamma}/${date}-*.csv"); assertThat(compiled.containsVariables(), is(true)); List<Segment> segments = compiled.getSegments(); assertThat(segments.size(), is(4)); assertThat(segments.get(0).isTraverse(), is(false)); assertThat(segments.get(0).getElements(), is(kind(TOKEN))); assertThat(segments.get(0).getElements(), is(token("alpha"))); assertThat(segments.get(1).isTraverse(), is(true)); assertThat(segments.get(2).isTraverse(), is(false)); assertThat(segments.get(2).getElements(), is(kind(SELECTION))); assertThat(segments.get(2).getElements(), is(token("{beta|gamma}"))); assertThat(segments.get(3).isTraverse(), is(false)); assertThat(segments.get(3).getElements(), is(kind(VARIABLE, TOKEN, WILDCARD, TOKEN))); assertThat(segments.get(3).getElements(), is(token("${date}", "-", "*", ".csv"))); }
/** * multiple segments. */ @Test public void segments() { FilePattern compiled = FilePattern.compile("alpha/beta/gamma"); List<Segment> segments = compiled.getSegments(); assertThat(segments.size(), is(3)); assertThat(segments.get(0).isTraverse(), is(false)); assertThat(segments.get(0).getElements(), is(kind(TOKEN))); assertThat(segments.get(0).getElements(), is(token("alpha"))); assertThat(segments.get(1).isTraverse(), is(false)); assertThat(segments.get(1).getElements(), is(kind(TOKEN))); assertThat(segments.get(1).getElements(), is(token("beta"))); assertThat(segments.get(2).isTraverse(), is(false)); assertThat(segments.get(2).getElements(), is(kind(TOKEN))); assertThat(segments.get(2).getElements(), is(token("gamma"))); }
/** * A selection pattern. */ @Test public void selection_empty() { FilePattern compiled = FilePattern.compile("{}"); assertThat(compiled.containsVariables(), is(false)); List<Segment> segments = compiled.getSegments(); assertThat(segments.size(), is(1)); assertThat(segments.get(0).isTraverse(), is(false)); assertThat(segments.get(0).getElements(), is(kind(SELECTION))); assertThat(segments.get(0).getElements(), is(token("{}"))); }
/** * A token. */ @Test public void token() { FilePattern compiled = FilePattern.compile("a"); assertThat(compiled.containsVariables(), is(false)); List<Segment> segments = compiled.getSegments(); assertThat(segments.size(), is(1)); assertThat(segments.get(0).isTraverse(), is(false)); assertThat(segments.get(0).getElements(), is(kind(TOKEN))); assertThat(segments.get(0).getElements(), is(token("a"))); }
/** * A complex pattern (all csv). */ @Test public void all_csv() { FilePattern compiled = FilePattern.compile("**/*.csv"); List<Segment> segments = compiled.getSegments(); assertThat(segments.size(), is(2)); assertThat(segments.get(0).isTraverse(), is(true)); assertThat(segments.get(1).isTraverse(), is(false)); assertThat(segments.get(1).getElements(), is(kind(WILDCARD, TOKEN))); assertThat(segments.get(1).getElements(), is(token("*", ".csv"))); }
/** * A selection pattern. */ @Test public void selection() { FilePattern compiled = FilePattern.compile("{alpha|beta|gamma}"); assertThat(compiled.containsVariables(), is(false)); List<Segment> segments = compiled.getSegments(); assertThat(segments.size(), is(1)); assertThat(segments.get(0).isTraverse(), is(false)); assertThat(segments.get(0).getElements(), is(kind(SELECTION))); assertThat(segments.get(0).getElements(), is(token("{alpha|beta|gamma}"))); }
/** * A variable pattern. */ @Test public void variable() { FilePattern compiled = FilePattern.compile("${v}"); assertThat(compiled.containsVariables(), is(true)); List<Segment> segments = compiled.getSegments(); assertThat(segments.size(), is(1)); assertThat(segments.get(0).isTraverse(), is(false)); assertThat(segments.get(0).getElements(), is(kind(VARIABLE))); assertThat(segments.get(0).getElements(), is(token("${v}"))); }
private static boolean isGlobRequired(Segment segment) { assert segment != null; assert segment.isTraverse() == false; for (PatternElement element : segment.getElements()) { if (element.getKind() == PatternElementKind.WILDCARD) { return false; } } return true; }
/** * A selection pattern. */ @Test public void selection_containsEmpty() { FilePattern compiled = FilePattern.compile("{alpha||gamma}"); assertThat(compiled.containsVariables(), is(false)); List<Segment> segments = compiled.getSegments(); assertThat(segments.size(), is(1)); assertThat(segments.get(0).isTraverse(), is(false)); assertThat(segments.get(0).getElements(), is(kind(SELECTION))); assertThat(segments.get(0).getElements(), is(token("{alpha||gamma}"))); }
/** * A wildcard pattern. */ @Test public void wildcard() { FilePattern compiled = FilePattern.compile("*"); assertThat(compiled.containsVariables(), is(false)); List<Segment> segments = compiled.getSegments(); assertThat(segments.size(), is(1)); assertThat(segments.get(0).isTraverse(), is(false)); assertThat(segments.get(0).getElements(), is(kind(WILDCARD))); assertThat(segments.get(0).getElements(), is(token("*"))); }
/** * An empty variable pattern. */ @Test public void variable_empty() { FilePattern compiled = FilePattern.compile("${}"); List<Segment> segments = compiled.getSegments(); assertThat(segments.size(), is(1)); assertThat(segments.get(0).isTraverse(), is(false)); assertThat(segments.get(0).getElements(), is(kind(VARIABLE))); assertThat(segments.get(0).getElements(), is(token("${}"))); }
/** * A contains wildcard pattern. */ @Test public void containsWildcard() { FilePattern compiled = FilePattern.compile("data-*.csv"); List<Segment> segments = compiled.getSegments(); assertThat(segments.size(), is(1)); assertThat(segments.get(0).isTraverse(), is(false)); assertThat(segments.get(0).getElements(), is(kind(TOKEN, WILDCARD, TOKEN))); assertThat(segments.get(0).getElements(), is(token("data-", "*", ".csv"))); }
/** * A traverse pattern. */ @Test public void traverse() { FilePattern compiled = FilePattern.compile("**"); List<Segment> segments = compiled.getSegments(); assertThat(segments.size(), is(1)); assertThat(segments.get(0).isTraverse(), is(true)); assertThat(segments.get(0).getElements(), is(kind())); }