view src/main/java/de/mpiwg/itgroup/annotationManager/drupal/AnnotationHandler.java @ 23:a3e324009990

now Mavenified! removed tiny-mce javascript from html frontend. still needs TripleStoreManager project in Eclipse. jsontoken 1.1 has to be built manually.
author casties
date Tue, 03 Apr 2012 13:05:05 +0200
parents src/de/mpiwg/itgroup/annotationManager/drupal/AnnotationHandler.java@0be9d53a6967
children
line wrap: on
line source

package de.mpiwg.itgroup.annotationManager.drupal;

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;

import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.BasicHttpEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicHeader;
import org.apache.log4j.Logger;
import org.json.JSONException;
import org.json.JSONObject;
import org.json.JSONTokener;
import org.restlet.Context;

public class AnnotationHandler {

	//
	public  String drupalURL;
	
	private Logger logger = Logger.getRootLogger();

	public String drupalRestURL;
	
	public AnnotationHandler(String drupalURL){
		this.drupalURL=drupalURL;
		drupalRestURL = drupalURL+"/rest";	
		
	};
	
	public JSONObject createAnnotation(String title,String annot,String user, String password) throws UnknowUserException{	
	  	DefaultHttpClient httpclient = new DefaultHttpClient();
	    JSONObject uo;
		try {
			uo = new JSONObject();
			uo.put("username", user);
			uo.put("password", password);		
		} catch (JSONException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		}
		
	    HttpEntity ent = postJSON(httpclient, uo, "/user/login");
	    
	  
		   
	    try {
	    	String retString =convertStreamToString(ent.getContent());
			if (retString==null){
				throw new UnknowUserException();
			}
				
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	    JSONObject annotObject=null;
	    
	    try {
			annotObject = new JSONObject();
			annotObject.put("type", "page");
			
			
			JSONObject body = new JSONObject();
			JSONObject content = new JSONObject();
			
			content.put("value", annot);
			content.put("format", "full_html");
			//content.put("safe_value", "<p>HELLO</p>");
			
			JSONObject zw = new JSONObject();
			zw.put("0", content);
			
			body.put("und", zw);
			body.put("name", user);
			annotObject.put("body", body);
			annotObject.put("title", title);
			
		} catch (JSONException e) {
			// TODO: handle exception
		}
		
		ent =postJSON(httpclient,annotObject,"/node");
		
		try {
			String retString =convertStreamToString(ent.getContent());
			JSONObject retOB= new JSONObject(retString);
			
			
			retOB.put("node_uri",drupalURL+"/node/"+retOB.get("nid"));
			return retOB;
		} catch (IllegalStateException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (JSONException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	    
		return null;
	}

	protected HttpEntity postJSON(DefaultHttpClient httpclient, JSONObject uo,String command) {
		HttpPost httppost = new HttpPost(drupalRestURL+command);
	    System.out.println("executing request" + httppost.getRequestLine());    
	
	    BasicHttpEntity entity= new BasicHttpEntity();  
	    try {
			entity.setContent(convertStringToStream(uo.toString()));
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	  
	    httppost.setEntity(entity);
	    entity.setContentType(new BasicHeader("Content-Type","application/json"));
	    
	    HttpResponse response;
		try {
			response = httpclient.execute(httppost);
		} catch (ClientProtocolException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		}
	    HttpEntity resEntity = response.getEntity();
	    
	    return resEntity;
	  
	}

    /** converts a stream to a string
     * @param string
     * @return
     * @throws UnsupportedEncodingException
     */
    public static InputStream convertStringToStream(String string) throws UnsupportedEncodingException{
    	return new ByteArrayInputStream(string.getBytes("utf-8"));
    }
    
    /**
     * 
         * To convert the InputStream to String we use the BufferedReader.readLine()
         * method. We iterate until the BufferedReader return null which means
         * there's no more data to read. Each line will appended to a StringBuilder
         * and returned as String.
         
     * @param is
     * @return
     */
    public static String convertStreamToString(InputStream is) {
        
        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
        StringBuilder sb = new StringBuilder();
 
        String line = null;
        try {
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
 
        return sb.toString();
    }

}