package eu.dnetlib.data.multimap;

import static org.junit.Assert.assertEquals;

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.StringWriter;

import org.apache.commons.io.IOUtils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.junit.Test;

public class FeedFileTest {

	@Test
	public void feed() {
		try {
			FileInputStream fstream = new FileInputStream("/home/andrea/Desktop/processed.tsv");
			DataInputStream in = new DataInputStream(fstream);
			BufferedReader br = new BufferedReader(new InputStreamReader(in));
			String line;
			String test;
			
			// Read File Line By Line
			while ((line = br.readLine()) != null) {
				String[] tokens = line.split("\t");
				
				String key = tokens[0];
				for (int i = 1; i <= tokens.length-1; i++) {
					test = postValue(key, tokens[i]);
					assertEquals(test, "true");
				}
			}
			
			// Close the input stream
			in.close();
		} catch (Exception e) {// Catch exception if any
			System.err.println("Error: " + e.getMessage());
		}
	}
	
	public String postValue(String key, String value) {
		String URL = "http://node1.t.dnet:8280/multimap/services/rest/multimap/values/{key}";
		HttpClient client = new DefaultHttpClient();

		HttpPost request = new HttpPost(URL.replace("{key}", key));
		request.setHeader("Content-Type", "application/json");
		try {
			request.setEntity(new StringEntity(value));
			HttpResponse response = client.execute(request);
			HttpEntity entity = response.getEntity();
			InputStream inputStream = entity.getContent();
			StringWriter writer = new StringWriter();
			IOUtils.copy(inputStream, writer, null);
			return writer.toString();
		} catch (ClientProtocolException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return null;
	}

}
