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

com.github.avinandi.urlparser.UrlParser Maven / Gradle / Ivy

Go to download

Url parser based on the provided template, e.g. /template/{variable}

There is a newer version: 1.2
Show newest version
package com.github.avinandi.urlparser;

import java.net.URISyntaxException;
import java.net.URL;
import java.util.Collections;
import java.util.List;
import java.util.Map;

import static com.github.avinandi.urlparser.Sanitizer.decode;
import static com.github.avinandi.urlparser.Sanitizer.sanitizeTemplate;
import static com.github.avinandi.urlparser.Validators.validateArgument;
import static com.github.avinandi.urlparser.Validators.validateNonEmptyOrNonNull;
import static com.github.avinandi.urlparser.Validators.validateTemplatePattern;

public class UrlParser {

    private final TemplateCompiler.CompiledTemplate compiledTemplate;

    private Parse parsed;

    private UrlParser(final TemplateCompiler.CompiledTemplate compiledTemplate) {
        this.compiledTemplate = compiledTemplate;
    }

    public static UrlParser createParser(final String template) {
        validateNonEmptyOrNonNull(template, "Template should not be Null or Empty");
        validateTemplatePattern(template);

        final String sanitizedTemplate = sanitizeTemplate(template);
        TemplateCompiler.CompiledTemplate compiledTemplate = TemplateCompiler.compile(sanitizedTemplate);

        return new UrlParser(compiledTemplate);
    }

    public boolean parse(String url, String decoder) {
        validateNonEmptyOrNonNull(url, "Url cant be Null or Empty");
        String decodedUrl = decode(url, decoder);
        try {
            this.parsed = new Parse(decodedUrl, compiledTemplate);
        } catch (URISyntaxException e) {
            throw new IllegalArgumentException("Malformed Url : ", e);
        }
        return parsed.matches();
    }

    public boolean parse(String url) {
        return parse(url, null);
    }

    public boolean parse(URL url) {
        return parse(url.getFile());
    }

    public String getPathParamValue(String variableName) {
        validateArgument(compiledTemplate.templateVariables.contains(variableName),
                "Path variable " + variableName + " is not part of template");
        return parsed.getKeyValueMap().get(variableName);
    }

    public Object getPathParamValue(String variableName, Type type) {
        String input = getPathParamValue(variableName);
        return type.convert(input);
    }

    public List getQueryParamValue(String queryParamName) {
        if (parsed.getQueryParamsMap() == null) {
            return Collections.emptyList();
        } else {
            validateArgument(parsed.getQueryParamsMap().containsKey(queryParamName),
                    "Query variable " + queryParamName + " is not part of template");
            return parsed.getQueryParamsMap().get(queryParamName);
        }
    }

    public Map getAllPathParams() {
        return parsed.getKeyValueMap();
    }

    public Map> getAllQueryParams() {
        return parsed.getQueryParamsMap();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy