br.com.objectos.http.PathSpec Maven / Gradle / Ivy
/*
* Copyright 2016 Objectos, Fábrica de Software LTDA.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package br.com.objectos.http;
import java.util.Iterator;
import java.util.List;
import br.com.objectos.core.util.ImmutableList;
/**
* @author [email protected] (Marcio Endo)
*/
class PathSpec {
private final List partList;
private PathSpec(List partMatcherList) {
partList = partMatcherList;
}
public static Builder builder() {
return new Builder();
}
public ResolvedPath resolve(Path path) {
ResolvedPathBuilder builder = new ResolvedPathBuilder(partList.iterator());
while (builder.hasMoreParts()) {
if (!path.hasNextPart()) {
builder.stop();
break;
}
PathSpecPart specPart = builder.nextPart();
specPart.accept(builder, path);
}
return builder.build();
}
@Override
public String toString() {
StringBuilder s = new StringBuilder("/");
Iterator parts = partList.iterator();
if (parts.hasNext()) {
s.append(parts.next());
while (parts.hasNext()) {
s.append('/');
s.append(parts.next());
}
}
return s.toString();
}
public static class Builder {
private final ImmutableList.Builder partList = ImmutableList.builder();
private Builder() {
}
public PathSpec build() {
return new PathSpec(partList.build());
}
public Builder catchAllArgument() {
partList.add(PathSpecPart.catchAllArgument());
return this;
}
public Builder fixed(String part) {
partList.add(PathSpecPart.fixed(part));
return this;
}
public Builder intArgument() {
partList.add(PathSpecPart.intArgument());
return this;
}
public Builder stringArgument() {
partList.add(PathSpecPart.stringArgument());
return this;
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy