All Downloads are FREE. Search and download functionalities are using the official Maven repository.

de.escalon.hypermedia.affordance.PartialUriTemplateComponents Maven / Gradle / Ivy

There is a newer version: 0.4.2
Show newest version
/*
 * 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 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 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 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 !variableNames.isEmpty();
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy