@Nonnull private LocationSpecifier getStartLocationSpecifier() { return new FlexibleLocationSpecifierFactory().buildLocationSpecifier(_startLocation); }
@Override public LocationSpecifier buildLocationSpecifier(@Nullable Object input) { if (input == null) { return AllInterfacesLocationSpecifier.INSTANCE; } checkArgument(input instanceof String, NAME + " input must be a String"); return parse((String) input); }
return parseFunc(funcMatcher.group(1), funcMatcher.group(2)); if (operator.equals("+")) { return new UnionLocationSpecifier( parse(combinationMatcher.group(1)), parse(combinationMatcher.group(3))); } else { return new DifferenceLocationSpecifier( parse(combinationMatcher.group(1)), parse(combinationMatcher.group(3)));
@Override public IpSpaceSpecifier buildIpSpaceSpecifier(@Nullable Object input) { return new LocationIpSpaceSpecifier( new FlexibleLocationSpecifierFactory().buildLocationSpecifier(input)); } }
private static LocationSpecifier parseFunc(String funcName, String specifierInput) { if (funcName.equalsIgnoreCase(FUNC_ENTER)) { return new ToInterfaceLinkLocationSpecifier(parse(specifierInput)); } if (funcName.equalsIgnoreCase(FUNC_EXIT)) { throw new UnsupportedOperationException(FUNC_EXIT + "() is not currently supported"); } throw new IllegalArgumentException("Unknown function type: " + funcName); } }
return PathConstraints.builder() .withStartLocation( new FlexibleLocationSpecifierFactory().buildLocationSpecifier(input.getStartLocation())) .withEndLocation(nodeSpecifierFactory.buildNodeSpecifier(input.getEndLocation())) .avoid(forbiddenTransitNodes)
@Test public void parseUnbalancedBrackets() { exception.expect(IllegalArgumentException.class); parse("foo[bar"); }
@Test public void parseUnbalancedParenthesis() { exception.expect(IllegalArgumentException.class); parse("enter(foo"); } }
@Test public void parseCombination() { LocationSpecifier leaf = new NodeSpecifierInterfaceLocationSpecifier( new FlexibleNodeSpecifierFactory().buildNodeSpecifier("foo")); LocationSpecifier difference = new DifferenceLocationSpecifier(leaf, leaf); LocationSpecifier union = new UnionLocationSpecifier(leaf, leaf); LocationSpecifier unionDiff = new DifferenceLocationSpecifier(union, leaf); assertThat(parse("foo - foo"), equalTo(difference)); assertThat(parse("foo + foo"), equalTo(union)); assertThat(parse("foo + foo - foo"), equalTo(unionDiff)); }
@Test public void parseFunc() { assertThat( parse("enter(foo)"), equalTo( new ToInterfaceLinkLocationSpecifier( new NodeSpecifierInterfaceLocationSpecifier( new FlexibleNodeSpecifierFactory().buildNodeSpecifier("foo"))))); exception.expect(UnsupportedOperationException.class); assertThat( parse("exit(foo)"), equalTo( new ToInterfaceLinkLocationSpecifier( new NodeSpecifierInterfaceLocationSpecifier( new FlexibleNodeSpecifierFactory().buildNodeSpecifier("foo"))))); }
@Test public void testParse() { assertThat( parse("1.2.3.4"), equalTo( new ConstantIpSpaceSpecifier( IpWildcardSetIpSpace.builder().including(new IpWildcard("1.2.3.4")).build()))); assertThat( parse("ref.addressgroup(foo,bar)"), equalTo(new ReferenceAddressGroupIpSpaceSpecifier("foo", "bar"))); assertThat( parse("ofLocation(foo)"), equalTo(new LocationIpSpaceSpecifier(FlexibleLocationSpecifierFactory.parse("foo")))); } }
@Test public void parseAtomic() { assertThat( parse("foo"), equalTo( new NodeSpecifierInterfaceLocationSpecifier( new FlexibleNodeSpecifierFactory().buildNodeSpecifier("foo")))); assertThat( parse("ref.noderole(bar1, bar2)"), equalTo( new NodeSpecifierInterfaceLocationSpecifier( new FlexibleNodeSpecifierFactory() .buildNodeSpecifier("ref.noderole(bar1, bar2)")))); assertThat( parse("[bar]"), equalTo( new InterfaceSpecifierInterfaceLocationSpecifier( new FlexibleInterfaceSpecifierFactory().buildInterfaceSpecifier("bar")))); assertThat( parse("foo[bar]"), equalTo( new IntersectionLocationSpecifier( new NodeSpecifierInterfaceLocationSpecifier( new FlexibleNodeSpecifierFactory().buildNodeSpecifier("foo")), new InterfaceSpecifierInterfaceLocationSpecifier( new FlexibleInterfaceSpecifierFactory().buildInterfaceSpecifier("bar"))))); }