/* * Copyright (c) 2014. Escalon System-Entwicklung, Dietrich Schulten * * 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 de.escalon.hypermedia.affordance; import org.springframework.util.Assert; import org.springframework.util.StringUtils; import java.util.List; /** * Represents components of a Uri Template with variables. Created by dschulten on 04.12.2014. */ public class PartialUriTemplateComponents { private String baseUri; private String queryHead; private String queryTail; private String fragmentIdentifier; private List<String> variableNames; /** * Represents components of a Uri Template with variables. * * @param fragmentIdentifier, * beginning with #, may contain a fragment variable, may also be empty * @param baseUri * may be relative or absolute, and may contain {xxx} or {/xxx} style variables * @param queryHead * start of query containing expanded key-value pairs (no variables), beginning with ?, may be empty * @param queryTail * comma-separated list of unexpanded query keys, may be empty * @param variableNames * names of template variables */ public PartialUriTemplateComponents(String baseUri, String queryHead, String queryTail, String fragmentIdentifier, List<String> variableNames) { Assert.notNull(baseUri); Assert.notNull(queryHead); Assert.notNull(queryTail); Assert.notNull(fragmentIdentifier); Assert.notNull(variableNames); this.baseUri = baseUri; this.queryHead = queryHead; this.queryTail = queryTail; this.fragmentIdentifier = fragmentIdentifier; this.variableNames = variableNames; } public List<String> getVariableNames() { return variableNames; } public boolean isBaseUriTemplated() { return baseUri.matches(".*\\{.+\\}.*"); } public String getBaseUri() { return baseUri; } /** * Query head starting with ? continued by expanded query parameters, separated by & * * @return query head, may be empty */ public String getQueryHead() { return queryHead; } /** * Query tail containing unexpanded query parameters as comma-separated list. * * @return query tail, may be empty */ public String getQueryTail() { return queryTail; } /** * Query consisting of expanded parameters and unexpanded parameters. * * @return query, may be empty */ public String getQuery() { StringBuilder query = new StringBuilder(); if (queryTail.length() > 0) { if (queryHead.length() == 0) { query.append("{?") .append(queryTail) .append("}"); } else if (queryHead.length() > 0) { query.append(queryHead) .append("{&") .append(queryTail) .append("}"); } } else { query.append(queryHead); } return query.toString(); } public String getFragmentIdentifier() { return fragmentIdentifier; } /** * Concatenates all components to uri String. * * @return uri String */ public String toString() { return baseUri + getQuery() + fragmentIdentifier; } public boolean hasVariables() { return baseUri.contains("{") || !StringUtils.isEmpty(queryTail) || fragmentIdentifier.contains("{"); } }