Package org.connotea

Source Code of org.connotea.RestletConnector

/*
* This file is part of connotea-java.
*
* connotea-java is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* connotea-java is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

package org.connotea;

import static org.apache.commons.lang.StringUtils.isNotBlank;
import static org.apache.commons.logging.LogFactory.getLog;

import java.util.Map;
import java.util.Map.Entry;

import org.apache.commons.logging.Log;
import org.restlet.Client;
import org.restlet.data.ChallengeResponse;
import org.restlet.data.ChallengeScheme;
import org.restlet.data.Form;
import org.restlet.data.Method;
import org.restlet.data.Protocol;
import org.restlet.data.Request;
import org.w3c.dom.Document;

/**
* {@link Connector} implementation built on <a
* href="http://restlet.org">Restlet</a>.
*/
public class RestletConnector implements Connector {

    private static final int DEFAULT_TIMEOUT = 0;

    private static final Log LOG = getLog(RestletConnector.class);

    private Client client;

    private String username;

    private String password;

    /**
     * Default, no-argument constructor.
     */
    public RestletConnector() {
        this(null, null, DEFAULT_TIMEOUT);
    }

    /**
     * Instantiate with a username and password to use for HTTP Basic
     * authentication.
     *
     * @param username the username
     * @param password the password
     */
    public RestletConnector(String username, String password) {
        this(username, password, DEFAULT_TIMEOUT);
    }

    /**
     * Instantiate with a username and password to use for HTTP Basic
     * authentication and a timeout in seconds.
     *
     * @param username the username
     * @param password the password
     * @param timeout the timeout in seconds
     */
    public RestletConnector(String username, String password, int timeout) {
        client = new Client(Protocol.HTTP);
        client.setConnectTimeout(timeout * 1000);
        this.username = username;
        this.password = password;
    }

    /**
     * @see org.connotea.Connector#get(java.lang.String)
     */
    public Response get(String uri) {
        Request request = new Request(Method.GET, uri);
        request.setChallengeResponse(getChallengeResponse());
        org.restlet.data.Response r = client.handle(request);
        int status = r.getStatus().getCode();
        Document document = null;
        try {
            r.getEntityAsDom().getDocument();
        } catch (Exception e) {
            LOG.debug(e);
        }
        return new Response(status, document);
    }

    /**
     * @see org.connotea.Connector#post(java.lang.String, java.util.Map)
     */
    public Response post(String uri, Map<String, String> parameters) {
        Form form = new Form();
        for (Entry<String, String> parameter : parameters.entrySet()) {
            form.add(parameter.getKey(), parameter.getValue());
        }
        try {
            form.encode();
        } catch (Exception e) {
            throw new ConnoteaRuntimeException("could not encode form: " + form);
        }
        Request request = new Request(Method.POST, uri);
        request.setEntity(form.getWebRepresentation());
        request.setChallengeResponse(getChallengeResponse());
        org.restlet.data.Response r = client.handle(request);
        int status = r.getStatus().getCode();
        Document document = null;
        try {
            document = r.getEntityAsDom().getDocument();
        } catch (Exception e) {
            LOG.debug(e);
        }
        return new Response(status, document);
    }

    private ChallengeResponse getChallengeResponse() {
        if (isNotBlank(username) && isNotBlank(password)) {
            return new ChallengeResponse(ChallengeScheme.HTTP_BASIC, username,
                    password);
        }
        return null;
    }
}
TOP

Related Classes of org.connotea.RestletConnector

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.