Package org.deri.grefine.reconcile.commands

Source Code of org.deri.grefine.reconcile.commands.UploadFileAndAddServiceCommand

package org.deri.grefine.reconcile.commands;


import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.deri.grefine.reconcile.GRefineServiceManager;
import org.deri.grefine.reconcile.model.ReconciliationService;
import org.deri.grefine.reconcile.rdf.RdfReconciliationService;
import org.deri.grefine.reconcile.rdf.endpoints.QueryEndpoint;
import org.deri.grefine.reconcile.rdf.endpoints.QueryEndpointImpl;
import org.deri.grefine.reconcile.rdf.executors.DumpQueryExecutor;
import org.deri.grefine.reconcile.rdf.executors.QueryExecutor;
import org.deri.grefine.reconcile.rdf.factories.JenaTextSparqlQueryFactory;
import org.deri.grefine.reconcile.rdf.factories.SparqlQueryFactory;

import org.json.JSONException;
import org.json.JSONObject;
import org.json.JSONWriter;

import com.google.common.collect.ImmutableList;
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory;

public class UploadFileAndAddServiceCommand extends AbstractAddServiceCommand{

  @Override
  public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
    try{
      //write results
      response.setCharacterEncoding("UTF-8");
          response.setHeader("Content-Type", "application/json");
          PrintWriter out = response.getWriter();
      StringWriter sw = new StringWriter();
      JSONWriter w = new JSONWriter(sw);
      w.object();
          w.key("code"); w.value("ok");
          w.key("service");
          ReconciliationService service = getReconciliationService(request);
          service.writeAsJson(w);
          w.endObject();
          sw.flush();
      //out.print("<html><body><textarea>" + sw.toString() + "</textarea></body></html>");
          out.print(sw.toString());
          out.flush();
    } catch (Exception e) {
      respondError(response,e);
    }
  }

  @Override
  protected ReconciliationService getReconciliationService(HttpServletRequest request) throws JSONException, IOException {
    FileItemFactory factory = new DiskFileItemFactory();

    // Create a new file upload handler
    ServletFileUpload upload = new ServletFileUpload(factory);

    // Parse the request
    InputStream in = null;
    String name=null, id = null, props = null, format=null, filename = null;
    Model model = null;
    try{
      @SuppressWarnings("unchecked")
      List<FileItem> items = upload.parseRequest(request);
      for(FileItem item:items){
        if(item.getFieldName().equals("service_name")){
          name = item.getString();
          id = getIdForString(name);       
        }else if(item.getFieldName().equals("properties")){
          props = item.getString();
        }else if(item.getFieldName().equals("file_format")){
          format = item.getString();
        }else if(item.getFieldName().equals("file_upload")){
          filename = item.getName();
          in = item.getInputStream();
        }
      }
     
      model = ModelFactory.createDefaultModel();
      if(format.equals("autodetect")){
        format = guessFormat(filename);
      }
      model.read(in, null, format);
     
      ImmutableList<String> propUris = asImmutableList(props);
   
      if(GRefineServiceManager.singleton.hasService(id)){
        //id already exist
        throw new RuntimeException("A service with name '" + id + "' already exist!");
      }
     
      if(name.isEmpty() || propUris.size()==0){
        throw new RuntimeException("name and at least one label property ar needed");
      }
     
      SparqlQueryFactory queryFactory = new JenaTextSparqlQueryFactory();
      QueryExecutor queryExecutor;
      if(propUris.size()==1){
        queryExecutor = new DumpQueryExecutor(model,propUris.get(0));
      }else{
        queryExecutor = new DumpQueryExecutor(model);
      }
      QueryEndpoint queryEndpoint = new QueryEndpointImpl(queryFactory, queryExecutor);
      ReconciliationService service = new RdfReconciliationService(id, name, propUris, queryEndpoint, AddServiceCommand.DEFAULT_MATCH_THRESHOLD);
      GRefineServiceManager.singleton.addAndSaveService(service);
      return service;
    }catch(FileUploadException fe){
      throw new IOException(fe);
    }
  }

  private void respondError(HttpServletResponse response, Exception e) throws IOException, ServletException{
    try{
      JSONObject o = new JSONObject();
      o.put("code", "error");
      o.put("message", e.getMessage());

      StringWriter sw = new StringWriter();
      PrintWriter pw = new PrintWriter(sw);
      e.printStackTrace(pw);
      pw.flush();
      sw.flush();

      o.put("stack", sw.toString());

      response.setCharacterEncoding("UTF-8");
      respond(response, "<html><body><textarea>\n" + o.toString() + "\n</textarea></body></html>");
    } catch (JSONException e1) {
            e1.printStackTrace(response.getWriter());
        }
  }
 
  private String guessFormat(String filename){
    if(filename.lastIndexOf('.')!=-1){
      String extension = filename.substring(filename.lastIndexOf('.')).toLowerCase();
      if(extension.equals(".ttl")){
        return "TTL";
      }else if(extension.equals(".rdf")){
        return "RDF/XML";
      }else if(extension.equals(".owl")){
        return "RDF/XML";
      }else if(extension.equals(".nt")){
        return "N-TRIPLE";
      }else if(extension.equals(".n3")){
        return "N3";
      }
    }
    return "RDF/XML";
  }

}
TOP

Related Classes of org.deri.grefine.reconcile.commands.UploadFileAndAddServiceCommand

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.