Package org.deri.grefine.rdf.commands

Source Code of org.deri.grefine.rdf.commands.Result

package org.deri.grefine.rdf.commands;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import java.util.regex.Pattern;

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

import org.deri.grefine.rdf.RdfSchema;
import org.deri.grefine.rdf.Util;
import org.deri.grefine.rdf.app.ApplicationContext;
import org.deri.grefine.rdf.vocab.SearchResultItem;
import org.deri.grefine.rdf.vocab.Vocabulary;
import org.json.JSONException;
import org.json.JSONWriter;

import com.google.refine.Jsonizable;
import com.google.refine.ProjectManager;
import com.google.refine.model.Project;

public class SuggestTermCommand extends RdfCommand{

  private static Pattern qnamePattern = Pattern.compile("^[_a-zA-Z][-._a-zA-Z0-9]*:([_a-zA-Z][-._a-zA-Z0-9]*)?");
 
  public SuggestTermCommand(ApplicationContext ctxt) {
    super(ctxt);
  }
 
    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

      //type will hold the project Id. parameters names are defined by the JavaScript library.
        String projectId = request.getParameter("type");
       
        response.setHeader("Content-Type", "application/json");
       
        JSONWriter writer = new JSONWriter(response.getWriter());
        String type = request.getParameter("type_strict");
       
        String query = request.getParameter("prefix");
       
       
       
        try{
            writer.object();
           
            writer.key("prefix");
            writer.value(query);
           
            writer.key("result");
            writer.array();
            List<SearchResultItem> nodes;
            if(type!=null && type.trim().equals("property")){
                nodes = getRdfContext().getVocabularySearcher().searchProperties(query,projectId);
            }else{
                nodes = getRdfContext().getVocabularySearcher().searchClasses(query,projectId);
            }
           
            if(nodes.size()==0){
              RdfSchema schema = Util.getProjectSchema(getRdfContext(),getProject(request));
              nodes = search(schema,query);
            }
            for(SearchResultItem c:nodes){
                c.writeAsSearchResult(writer);
            }
            writer.endArray();
            writer.endObject();
        }catch(Exception e){
            e.printStackTrace();
            throw new ServletException(e);
        }
    }

   
   

  @Override
  protected Project getProject(HttpServletRequest request)
      throws ServletException {
      String projectId = request.getParameter("type");
      return ProjectManager.singleton.getProject(Long.parseLong(projectId));
  }

  private boolean isPrefixedQName(String s){
      return qnamePattern.matcher(s).find();
    }
   
    private List<SearchResultItem> search(RdfSchema schema, String query){
      List<SearchResultItem> result = new ArrayList<SearchResultItem>();
     
      if(isPrefixedQName(query)){
        int index = query.indexOf(":");
        String prefix = query.substring(0,index);
        String lPart = query.substring(index + 1);
        for(Vocabulary v:schema.getPrefixesMap().values()){
          String name = v.getName();
          if (name.equals(prefix)){
            result.add(new SearchResultItem(v.getUri()+lPart, prefix, lPart, "", "Not in the imported vocabulary definition"));
          }
        }
      }else{
        for(Vocabulary v:schema.getPrefixesMap().values()){
          String name = v.getName();
          if (name.startsWith(query)){
            result.add(new SearchResultItem(v.getUri(), name, "", "", "Not in the imported vocabulary definition"));
          }
        }
      }
      return result;
    }
}

class Result implements Jsonizable{

    private List<String[]> results = new ArrayList<String[]>();
    private String prefix;
   
    Result(String p){
        this.prefix = p;
    }
    void addResult(String id, String name){
        String[] res = new String[] {id,name};
        results.add(res);
    }
    @Override
    public void write(JSONWriter writer, Properties options)
            throws JSONException {
        writer.object();
       
       
        writer.key("prefix");
        writer.value(prefix);
       
        writer.key("result");
        writer.array();
        for(String[] res:results){
            writer.object();
           
            writer.key("id");
            writer.value(res[0]);
           
            writer.key("name");
            writer.value(res[1]);
           
            writer.endObject();
        }
        writer.endArray();
        writer.endObject();
    }
   
}
TOP

Related Classes of org.deri.grefine.rdf.commands.Result

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.