de.hshannover.f4.trust.irongpm.rest.VisitmetaResource.java Source code

Java tutorial

Introduction

Here is the source code for de.hshannover.f4.trust.irongpm.rest.VisitmetaResource.java

Source

/*
 * #%L
 * =====================================================
 *   _____                _     ____  _   _       _   _
 *  |_   _|_ __ _   _ ___| |_  / __ \| | | | ___ | | | |
 *    | | | '__| | | / __| __|/ / _` | |_| |/ __|| |_| |
 *    | | | |  | |_| \__ \ |_| | (_| |  _  |\__ \|  _  |
 *    |_| |_|   \__,_|___/\__|\ \__,_|_| |_||___/|_| |_|
 *                             \____/
 * 
 * =====================================================
 * 
 * Hochschule Hannover
 * (University of Applied Sciences and Arts, Hannover)
 * Faculty IV, Dept. of Computer Science
 * Ricklinger Stadtweg 118, 30459 Hannover, Germany
 * 
 * Email: trust@f4-i.fh-hannover.de
 * Website: http://trust.f4.hs-hannover.de/
 * 
 * This file is part of irongpm, version 0.3.1,
 * implemented by the Trust@HsH research group at the Hochschule Hannover.
 * %%
 * Copyright (C) 2014 - 2016 Trust@HsH
 * %%
 * 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.
 * #L%
 */
package de.hshannover.f4.trust.irongpm.rest;

import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;

import org.apache.log4j.Logger;

import com.google.gson.JsonElement;
import com.google.gson.JsonParser;
import com.google.gson.stream.JsonReader;

import de.hshannover.f4.trust.irongpm.Pulldozer;

/**
 * 
 * @author Leonard Renners
 * 
 */
public class VisitmetaResource {
    private boolean mRawXml;
    private String mBaseUrl;
    private static final Logger LOGGER = Logger.getLogger(Pulldozer.class);

    /**
     * Constructor with default url: <b>http://localhost:8000/default/graph/</b>
     */
    public VisitmetaResource() {
        this("http://localhost:8000/default/graph/");
    }

    /**
     * Constructor.
     * 
     * @param resource
     *            URL of the base REST interface of the visitmeta dataservice
     * @param rawXml
     *            Whether rawXML should be requested or not
     */
    public VisitmetaResource(String resource, boolean rawXml) {
        mBaseUrl = resource;
        mRawXml = rawXml;

    }

    /**
     * Constructor.
     * 
     * @param resource
     *            URL of the base REST interface of the visitmeta dataservice
     */
    public VisitmetaResource(String resource) {
        this(resource, true);
    }

    /**
     * Requests the REST interface for the given path, e.g. "current" or "changes"
     * 
     * @param path
     *            The path for the HTTP request
     * @return The JSON response string
     */
    public String get(String path) {
        String json = null;
        boolean connected = true;
        do {
            try {
                URLConnection conn = new URL(mBaseUrl + path + "?rawData=" + mRawXml).openConnection();
                conn.setConnectTimeout(2000);
                conn.connect();
                JsonReader reader = new JsonReader(new InputStreamReader(conn.getInputStream()));
                JsonParser parser = new JsonParser();
                JsonElement rootElement = parser.parse(reader);
                json = rootElement.toString();
                if (!connected) {
                    LOGGER.info("VisitmetaResource connection (re-)established");
                }
                connected = true;
            } catch (Exception e) {
                try {
                    LOGGER.warn("VisitmetaResource connection failed on " + mBaseUrl
                            + ". Trying again in 5 seconds. Reason: [" + e + "]");
                    Thread.sleep(5000);
                } catch (InterruptedException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                connected = false;
            }
        } while (!connected);
        return json;
    }
}