com.subgraph.vega.impl.scanner.requests.AbstractRequestBuilder.java Source code

Java tutorial

Introduction

Here is the source code for com.subgraph.vega.impl.scanner.requests.AbstractRequestBuilder.java

Source

/*******************************************************************************
 * Copyright (c) 2011 Subgraph.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 * 
 * Contributors:
 *     Subgraph - initial API and implementation
 ******************************************************************************/
package com.subgraph.vega.impl.scanner.requests;

import java.net.URI;
import java.net.URISyntaxException;

import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpUriRequest;

import com.subgraph.vega.api.model.web.IWebPath;

public abstract class AbstractRequestBuilder implements IRequestBuilder {

    private final IWebPath path;
    private final URI baseURI;

    protected AbstractRequestBuilder(IWebPath path) {
        this.path = path;
        this.baseURI = path.getUri();
    }

    protected HttpUriRequest createPathRequest() {
        return createRequest(getUriForPath());
    }

    protected HttpUriRequest createRequest(URI uri) {
        return new HttpGet(uri);
    }

    protected HttpUriRequest createRequestFromPath(String path) {
        final URI u = createUri(path);
        return createRequest(u);
    }

    protected HttpUriRequest createRequestFromQuery(String query) {
        final URI u = createUri(getBasePath(), query);
        return createRequest(u);
    }

    protected String getBasePath() {
        return getUriForPath().getPath();
    }

    protected URI createUri(String path) {
        return createUri(path, null);
    }

    protected URI createUri(String path, String query) {
        final String q = (query == null) ? (baseURI.getQuery()) : (query);
        try {
            return new URI(baseURI.getScheme(), baseURI.getAuthority(), path, q, null);
        } catch (URISyntaxException e) {
            throw new IllegalArgumentException(
                    "Failed to create new URI with path = " + path + " and query = " + q);
        }
    }

    private URI getUriForPath() {
        switch (path.getPathType()) {
        case PATH_DIRECTORY:
            return maybeAddTrailingSlash(baseURI);
        case PATH_PATHINFO:
            return maybeRemoveTrailingSlash(baseURI);
        default:
            return baseURI;
        }
    }

    private URI maybeAddTrailingSlash(URI uri) {
        if (uri.getPath().endsWith("/"))
            return uri;
        final String path = uri.getPath() + "/";
        return createUri(path);
    }

    private URI maybeRemoveTrailingSlash(URI uri) {
        if (!uri.getPath().endsWith("/"))
            return uri;
        String p = uri.getPath();
        while (p.length() > 0 && p.endsWith("/"))
            p = p.substring(0, p.length() - 1);

        return createUri(p);
    }
}