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

com.codota.service.client.LiveCodeClient Maven / Gradle / Ivy

/*
 * Copyright (C) 2016 Codota
 *
 * 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 com.codota.service.client;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import com.codota.service.model.Code;
import com.codota.service.model.RelatedRef;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import org.jetbrains.annotations.NotNull;

@SuppressWarnings("UnusedDeclaration")
public class LiveCodeClient {

	private static LiveCodeClient instance;
	private static final Gson gson = new GsonBuilder().create();

	public static LiveCodeClient client() {
		if (instance == null) {
			instance = new LiveCodeClient();
		}
		return instance;
	}

	@NotNull
	public List process(Code code) throws IOException {

		List results = Collections.emptyList();

		int httpResult;
		String jsonCode = gson.toJson(code);
		String uri = "http://localhost:5000/api/livecode?ver=1.2.0";

		URL url = new URL(uri);
		HttpURLConnection connection = (HttpURLConnection) url.openConnection();
		connection.setDoOutput(true);
		connection.setDoInput(true);
		connection.setRequestMethod("POST");

		connection.setRequestProperty("Content-Type", "application/json");
		connection.setRequestProperty("Accept", "application/json");

		OutputStreamWriter wr = new OutputStreamWriter(
				connection.getOutputStream());
		wr.write(jsonCode);
		wr.flush();

		connection.getInputStream();

		StringBuilder sb = new StringBuilder();

		httpResult = connection.getResponseCode();

		if (httpResult == HttpURLConnection.HTTP_OK) {

			BufferedReader br = new BufferedReader(new InputStreamReader(
					connection.getInputStream(), "utf-8"));

			String line;

			while ((line = br.readLine()) != null) {
				sb.append(line).append("\n");
			}

			br.close();

			String json = sb.toString();

			results = parseJson(json);

		} else {
			System.err.println(connection.getResponseMessage());
		}

		connection.disconnect();

		return results;

	}

	@NotNull
	private List parseJson(@NotNull String json) {
		List result = new ArrayList();
		JsonElement jelement = new JsonParser().parse(json);
		JsonObject jobject = jelement.getAsJsonObject();
		JsonArray jarray = jobject.getAsJsonArray("tuts");
		if (jarray == null)
			return result;
		for (JsonElement jo : jarray) {
			JsonObject j = (JsonObject) jo;
			try {
				RelatedRef rr = new Gson().fromJson(j, RelatedRef.class);
				result.add(rr);
			} catch (Exception e) {
				e.printStackTrace();
				// print and swallow
			}
		}
		return result;

	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy