Changeset 3605


Ignore:
Timestamp:
2002-12-02T10:05:19+13:00 (21 years ago)
Author:
kjdon
Message:

added field query stuff

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/gsdl3/src/java/org/greenstone/gsdl3/service/MGPPGDBMServices.java

    r3567 r3605  
    5151    private static final String TEXT_QUERY_SERVICE = "TextQuery";
    5252    private static final String FIELD_QUERY_SERVICE = "FieldQuery";
     53    private static final String ADVANCED_FIELD_QUERY_SERVICE = "AdvancedFieldQuery";
    5354    private static final String RESOURCE_RETRIEVE_SERVICE = "ResourceRetrieve";
    5455    private static final String METADATA_RETRIEVE_SERVICE = "MetadataRetrieve";
     
    6869    private static final String BOOLEAN_PARAM_ON = "1";
    6970    private static final String BOOLEAN_PARAM_OFF = "0";
     71    private static final String QUERY_PARAM = "query";
     72    private static final String SIMPLE_FIELD_PARAM = "simpleField";
     73    private static final String ADVANCED_FIELD_PARAM = "complexField";
     74    // more params for field query
     75    private static final String FIELD_QUERY_PARAM = "fqv";
     76    private static final String FIELD_STEM_PARAM = "fqs";
     77    private static final String FIELD_CASE_PARAM = "fqc";
     78    private static final String FIELD_FIELD_PARAM = "fqf";
     79    private static final String FIELD_COMBINE_PARAM = "fqk";
     80    private static final String FIELD_COMBINE_PARAM_AND = "0";
     81    private static final String FIELD_COMBINE_PARAM_OR = "1";
     82    private static final String FIELD_COMBINE_PARAM_NOT = "2";
    7083   
    7184    // elements used in the config file that are specific to this class
     
    130143    e.setAttribute(GSXML.TYPE_ATT, GSXML.SERVICE_TYPE_QUERY);
    131144    e.setAttribute(GSXML.NAME_ATT, FIELD_QUERY_SERVICE);
     145    short_service_info_.appendChild(e);
     146
     147    e = doc_.createElement(GSXML.SERVICE_ELEM);
     148    e.setAttribute(GSXML.TYPE_ATT, GSXML.SERVICE_TYPE_QUERY);
     149    e.setAttribute(GSXML.NAME_ATT, ADVANCED_FIELD_QUERY_SERVICE);
    132150    short_service_info_.appendChild(e);
    133151
     
    157175    e.setAttribute(GSXML.TYPE_ATT, GSXML.SERVICE_TYPE_QUERY);
    158176    e.setAttribute(GSXML.NAME_ATT, FIELD_QUERY_SERVICE);
     177    Element param_list1 = doc_.createElement(GSXML.PARAM_ELEM+GSXML.LIST_MODIFIER);
     178    createFieldQueryParamList(param_list1, false, null);
     179    e.appendChild(param_list1);
    159180    service_info_map_.put(FIELD_QUERY_SERVICE, e);
    160181   
     182    e = doc_.createElement(GSXML.SERVICE_ELEM);
     183    e.setAttribute(GSXML.TYPE_ATT, GSXML.SERVICE_TYPE_QUERY);
     184    e.setAttribute(GSXML.NAME_ATT, ADVANCED_FIELD_QUERY_SERVICE);
     185    Element param_list2 = doc_.createElement(GSXML.PARAM_ELEM+GSXML.LIST_MODIFIER);
     186    createAdvancedFieldQueryParamList(param_list2, false, null);
     187    e.appendChild(param_list2);
     188    service_info_map_.put(ADVANCED_FIELD_QUERY_SERVICE, e);
     189
    161190    e = doc_.createElement(GSXML.SERVICE_ELEM);
    162191    e.setAttribute(GSXML.TYPE_ATT, GSXML.SERVICE_TYPE_QUERY);
     
    268297    }
    269298    param_list.appendChild(param);
     299
     300    // for now add the query itself as a param
     301    if (display) {
     302        param = GSXML.createParameterDisplay(doc_, QUERY_PARAM, getTextString("param."+QUERY_PARAM, lang), null, null);
     303    } else {
     304        param = GSXML.createParameter(doc_, QUERY_PARAM, GSXML.PARAM_TYPE_STRING, null, null);
     305    }
     306    param_list.appendChild(param);
     307   
    270308    return true;
    271309    }
    272 
     310    /** this creates all teh params and appends them to param_list.
     311     * if display=true it creates the text strings version
     312     * otherwise it creates the description version
     313     */
     314    protected boolean createFieldQueryParamList(Element param_list, boolean display, String lang) {
     315    Element param;
     316
     317    // first do index and level params
     318
     319    // the index info - read from config file
     320//      Element index_list = (Element)GSXML.getChildByTagName(config_info_, INDEX_ELEM+GSXML.LIST_MODIFIER);
     321//      NodeList indexes = index_list.getElementsByTagName(INDEX_ELEM);
     322//      int len = indexes.getLength();
     323//      if (len > 1) {
     324//          // add level param to list
     325//          String [] inds  = new String[len];
     326//          for (int i=0; i<len; i++) {
     327//          inds[i] = ((Element)indexes.item(i)).getAttribute(GSXML.NAME_ATT);
     328//          }
     329//          if (display) {
     330//          // use the same index names for now - should get these out of the config info
     331//          param = GSXML.createParameterDisplay(doc_, INDEX_PARAM, getTextString("param."+INDEX_PARAM, lang), inds, inds);
     332//          } else {
     333//          param = GSXML.createParameter(doc_, INDEX_PARAM, GSXML.PARAM_TYPE_ENUM_SINGLE, default_index_, inds);
     334//          }
     335//          param_list.appendChild(param);
     336//      } // else dont need to add it
     337
     338    // the level info - read from config file
     339    Element level_list = (Element)GSXML.getChildByTagName(config_info_, LEVEL_ELEM+GSXML.LIST_MODIFIER);
     340    NodeList levels = level_list.getElementsByTagName(LEVEL_ELEM);
     341    int len = levels.getLength();
     342    if (len > 1) {
     343        // add level param to list
     344        String [] levs  = new String[len];
     345        for (int i=0; i<len; i++) {
     346        levs[i] = ((Element)levels.item(i)).getAttribute(GSXML.NAME_ATT);
     347        }
     348        if (display) {
     349        param =  GSXML.createParameterDisplay(doc_, LEVEL_PARAM, getTextString("param."+LEVEL_PARAM, lang), levs, levs);
     350        } else {
     351        param = GSXML.createParameter(doc_, LEVEL_PARAM, GSXML.PARAM_TYPE_ENUM_SINGLE, default_level_, levs);
     352        }
     353        param_list.appendChild(param);
     354    } // else dont need to add it
     355   
     356    // enum params
     357    String []vals = {MATCH_PARAM_ALL, MATCH_PARAM_SOME};
     358    if (display) {
     359        String []val_texts = {getTextString("param."+MATCH_PARAM+"."+MATCH_PARAM_ALL, lang),getTextString("param."+MATCH_PARAM+"."+MATCH_PARAM_SOME, lang)};
     360
     361        param = GSXML.createParameterDisplay(doc_, MATCH_PARAM, getTextString("param."+MATCH_PARAM, lang), vals, val_texts);
     362    } else {
     363        param = GSXML.createParameter(doc_, MATCH_PARAM, GSXML.PARAM_TYPE_ENUM_SINGLE, MATCH_PARAM_ALL, vals);
     364    }   
     365    param_list.appendChild(param);
     366    String [] vals1 = {RANK_PARAM_RANK, RANK_PARAM_NONE };
     367    if (display) {
     368        String [] vals1_texts = { getTextString("param."+RANK_PARAM+"."+RANK_PARAM_RANK, lang),
     369                  getTextString("param."+RANK_PARAM+"."+RANK_PARAM_NONE, lang)};
     370   
     371        param = GSXML.createParameterDisplay(doc_, RANK_PARAM, getTextString("param."+RANK_PARAM, lang), vals1, vals1_texts);
     372    } else {
     373        param = GSXML.createParameter(doc_, RANK_PARAM, GSXML.PARAM_TYPE_ENUM_SINGLE, RANK_PARAM_RANK, vals1 );
     374    }
     375    param_list.appendChild(param);
     376
     377    // boolean params
     378    if (display) {
     379        String[] bool_ops = {"0", "1"};
     380        String[] bool_texts = {getTextString("param.boolean.off", lang),getTextString("param.boolean.on", lang)};
     381        param = GSXML.createParameterDisplay(doc_, FIELD_CASE_PARAM, getTextString("param."+FIELD_CASE_PARAM, lang),  bool_ops, bool_texts);
     382        param_list.appendChild(param);
     383        param = GSXML.createParameterDisplay(doc_, FIELD_STEM_PARAM, getTextString("param."+FIELD_STEM_PARAM, lang),  bool_ops, bool_texts);
     384        param_list.appendChild(param);
     385
     386    } else {
     387        param = GSXML.createParameter(doc_, FIELD_CASE_PARAM, GSXML.PARAM_TYPE_BOOLEAN, BOOLEAN_PARAM_ON, null);
     388        param_list.appendChild(param);
     389        param = GSXML.createParameter(doc_, FIELD_STEM_PARAM, GSXML.PARAM_TYPE_BOOLEAN, BOOLEAN_PARAM_ON, null);
     390        param_list.appendChild(param);
     391    }
     392
     393    // Integer params
     394    if (display) {
     395        param = GSXML.createParameterDisplay(doc_, MAXDOCS_PARAM, getTextString("param."+MAXDOCS_PARAM, lang), null, null);
     396    } else {
     397        param = GSXML.createParameter(doc_, MAXDOCS_PARAM, GSXML.PARAM_TYPE_INTEGER, "10", null);
     398    }
     399    param_list.appendChild(param);
     400
     401    // create a multi param for the fields etc
     402    // text box, stem, case, field
     403
     404    Element multiparam = null;;
     405
     406    if (display) {
     407        param = GSXML.createParameterDisplay(doc_, SIMPLE_FIELD_PARAM, "",  null, null);
     408        param_list.appendChild(param);
     409    } else {
     410        multiparam = GSXML.createParameter(doc_, SIMPLE_FIELD_PARAM, GSXML.PARAM_TYPE_MULTI, null, null);
     411        multiparam.setAttribute("occurs", "4");
     412        param_list.appendChild(multiparam);
     413    }
     414    // the components
     415    // the text box
     416    if (display) {
     417        param = GSXML.createParameterDisplay(doc_, FIELD_QUERY_PARAM, getTextString("param."+FIELD_QUERY_PARAM, lang), null, null);
     418        param_list.appendChild(param);
     419    } else {
     420        param = GSXML.createParameter(doc_, FIELD_QUERY_PARAM, GSXML.PARAM_TYPE_STRING, null, null);
     421        multiparam.appendChild(param);
     422       
     423    }
     424   
     425    // the field list - should be read from config file
     426    String [] vals2 = {"TX", "SU", "TI"};
     427    String [] vals2_texts = {"TextOnly", "Subject", "Title"};
     428   
     429    if (display) {
     430        param = GSXML.createParameterDisplay(doc_, FIELD_FIELD_PARAM, getTextString("param."+FIELD_FIELD_PARAM, lang), vals2, vals2_texts);
     431        param_list.appendChild(param);
     432    } else {
     433        param = GSXML.createParameter(doc_, FIELD_FIELD_PARAM, GSXML.PARAM_TYPE_ENUM_SINGLE, "", vals2 );
     434        multiparam.appendChild(param);
     435    }
     436   
     437    return true;
     438    }
     439
     440    protected boolean createAdvancedFieldQueryParamList(Element param_list, boolean display, String lang) {
     441    Element param;
     442
     443    // first do index and level params
     444
     445    // the index info - read from config file
     446//      Element index_list = (Element)GSXML.getChildByTagName(config_info_, INDEX_ELEM+GSXML.LIST_MODIFIER);
     447//      NodeList indexes = index_list.getElementsByTagName(INDEX_ELEM);
     448//      int len = indexes.getLength();
     449//      if (len > 1) {
     450//          // add level param to list
     451//          String [] inds  = new String[len];
     452//          for (int i=0; i<len; i++) {
     453//          inds[i] = ((Element)indexes.item(i)).getAttribute(GSXML.NAME_ATT);
     454//          }
     455//          if (display) {
     456//          // use the same index names for now - should get these out of the config info
     457//          param = GSXML.createParameterDisplay(doc_, INDEX_PARAM, getTextString("param."+INDEX_PARAM, lang), inds, inds);
     458//          } else {
     459//          param = GSXML.createParameter(doc_, INDEX_PARAM, GSXML.PARAM_TYPE_ENUM_SINGLE, default_index_, inds);
     460//          }
     461//          param_list.appendChild(param);
     462//      } // else dont need to add it
     463
     464    // the level info - read from config file
     465    Element level_list = (Element)GSXML.getChildByTagName(config_info_, LEVEL_ELEM+GSXML.LIST_MODIFIER);
     466    NodeList levels = level_list.getElementsByTagName(LEVEL_ELEM);
     467    int len = levels.getLength();
     468    if (len > 1) {
     469        // add level param to list
     470        String [] levs  = new String[len];
     471        for (int i=0; i<len; i++) {
     472        levs[i] = ((Element)levels.item(i)).getAttribute(GSXML.NAME_ATT);
     473        }
     474        if (display) {
     475        param =  GSXML.createParameterDisplay(doc_, LEVEL_PARAM, getTextString("param."+LEVEL_PARAM, lang), levs, levs);
     476        } else {
     477        param = GSXML.createParameter(doc_, LEVEL_PARAM, GSXML.PARAM_TYPE_ENUM_SINGLE, default_level_, levs);
     478        }
     479        param_list.appendChild(param);
     480    } // else dont need to add it
     481   
     482//      // enum params
     483//      String []vals = {MATCH_PARAM_ALL, MATCH_PARAM_SOME};
     484//      if (display) {
     485//          String []val_texts = {getTextString("param."+MATCH_PARAM+"."+MATCH_PARAM_ALL, lang),getTextString("param."+MATCH_PARAM+"."+MATCH_PARAM_SOME, lang)};
     486
     487//          param = GSXML.createParameterDisplay(doc_, MATCH_PARAM, getTextString("param."+MATCH_PARAM, lang), vals, val_texts);
     488//      } else {
     489//          param = GSXML.createParameter(doc_, MATCH_PARAM, GSXML.PARAM_TYPE_ENUM_SINGLE, MATCH_PARAM_ALL, vals);
     490//      }   
     491//      param_list.appendChild(param);
     492
     493    String [] vals1 = {RANK_PARAM_RANK, RANK_PARAM_NONE };
     494    if (display) {
     495        String [] vals1_texts = { getTextString("param."+RANK_PARAM+"."+RANK_PARAM_RANK, lang),
     496                  getTextString("param."+RANK_PARAM+"."+RANK_PARAM_NONE, lang)};
     497   
     498        param = GSXML.createParameterDisplay(doc_, RANK_PARAM, getTextString("param."+RANK_PARAM, lang), vals1, vals1_texts);
     499    } else {
     500        param = GSXML.createParameter(doc_, RANK_PARAM, GSXML.PARAM_TYPE_ENUM_SINGLE, RANK_PARAM_RANK, vals1 );
     501    }
     502    param_list.appendChild(param);
     503
     504    // Integer params
     505    if (display) {
     506        param = GSXML.createParameterDisplay(doc_, MAXDOCS_PARAM, getTextString("param."+MAXDOCS_PARAM, lang), null, null);
     507    } else {
     508        param = GSXML.createParameter(doc_, MAXDOCS_PARAM, GSXML.PARAM_TYPE_INTEGER, "10", null);
     509    }
     510    param_list.appendChild(param);
     511
     512    // create a multi param for the fields etc
     513    // text box, stem, case, field
     514
     515    Element multiparam = null;
     516    if (display) {
     517        param = GSXML.createParameterDisplay(doc_, ADVANCED_FIELD_PARAM, "",  null, null);
     518        param_list.appendChild(param);
     519    } else {
     520        multiparam = GSXML.createParameter(doc_, ADVANCED_FIELD_PARAM, GSXML.PARAM_TYPE_MULTI, null, null);
     521        multiparam.setAttribute("occurs", "4");
     522        param_list.appendChild(multiparam);
     523    }
     524   
     525    // the components
     526
     527    //the combiners
     528   
     529    String []vals = {FIELD_COMBINE_PARAM_AND, FIELD_COMBINE_PARAM_OR, FIELD_COMBINE_PARAM_NOT};
     530    if (display) {
     531        String []val_texts = {getTextString("param."+FIELD_COMBINE_PARAM+"."+FIELD_COMBINE_PARAM_AND, lang), getTextString("param."+FIELD_COMBINE_PARAM+"."+FIELD_COMBINE_PARAM_OR, lang), getTextString("param."+FIELD_COMBINE_PARAM+"."+FIELD_COMBINE_PARAM_NOT, lang)};
     532
     533        param = GSXML.createParameterDisplay(doc_, FIELD_COMBINE_PARAM, "", vals, val_texts);
     534        param_list.appendChild(param);
     535    } else {
     536        param = GSXML.createParameter(doc_, FIELD_COMBINE_PARAM, GSXML.PARAM_TYPE_ENUM_SINGLE, FIELD_COMBINE_PARAM_AND, vals);
     537        param.setAttribute(GSXML.PARAM_IGNORE_POS_ATT, "0");
     538        multiparam.appendChild(param);
     539    }   
     540
     541    // the text box
     542    if (display) {
     543        param = GSXML.createParameterDisplay(doc_, FIELD_QUERY_PARAM, getTextString("param."+FIELD_QUERY_PARAM, lang), null, null);
     544        param_list.appendChild(param);
     545    } else {
     546        param = GSXML.createParameter(doc_, FIELD_QUERY_PARAM, GSXML.PARAM_TYPE_STRING, null, null);
     547        multiparam.appendChild(param);
     548       
     549    }
     550   
     551    // boolean params
     552    if (display) {
     553        String[] bool_ops = {"0", "1"};
     554        String[] bool_texts = {getTextString("param.boolean.off", lang),getTextString("param.boolean.on", lang)};
     555        param = GSXML.createParameterDisplay(doc_, FIELD_CASE_PARAM, getTextString("param."+FIELD_CASE_PARAM, lang),  bool_ops, bool_texts);
     556        param_list.appendChild(param);
     557        param = GSXML.createParameterDisplay(doc_, FIELD_STEM_PARAM, getTextString("param."+FIELD_STEM_PARAM, lang),  bool_ops, bool_texts);
     558        param_list.appendChild(param);
     559
     560    } else {
     561        param = GSXML.createParameter(doc_, FIELD_CASE_PARAM, GSXML.PARAM_TYPE_BOOLEAN, BOOLEAN_PARAM_ON, null);
     562        multiparam.appendChild(param);
     563        param = GSXML.createParameter(doc_, FIELD_STEM_PARAM, GSXML.PARAM_TYPE_BOOLEAN, BOOLEAN_PARAM_ON, null);
     564        multiparam.appendChild(param);
     565    }
     566
     567    // the field list
     568    String [] vals2 = {"TX", "SU", "TI"};
     569    String [] vals2_texts = {"TextOnly", "Subject", "Title"};
     570
     571    if (display) {
     572         param = GSXML.createParameterDisplay(doc_, FIELD_FIELD_PARAM, getTextString("param."+FIELD_FIELD_PARAM, lang), vals2, vals2_texts);
     573        param_list.appendChild(param);
     574    } else {
     575        param = GSXML.createParameter(doc_, FIELD_FIELD_PARAM, GSXML.PARAM_TYPE_ENUM_SINGLE, "", vals2 );
     576        multiparam.appendChild(param);
     577    }
     578   
     579    return true;
     580    }
    273581    /** creates a display element containing all the text strings needed to display the service page, in the language specified */
    274582    protected Element createServiceDisplay(String service, String lang) {
     
    282590        createTextQueryParamList(display, true, lang);
    283591    }
     592    // now need to add in the params
     593    if (service.equals(FIELD_QUERY_SERVICE)) {
     594       
     595        createFieldQueryParamList(display, true, lang);
     596    }
     597    // now need to add in the params
     598    if (service.equals(ADVANCED_FIELD_QUERY_SERVICE)) {
     599       
     600        createAdvancedFieldQueryParamList(display, true, lang);
     601    }
    284602    return display;
    285603   
     
    295613        return processTextQuery(request);
    296614    } else if(name.equals(FIELD_QUERY_SERVICE)) {
    297         return processFieldQuery(request);
     615        return processFieldQuery(request, "simple");
     616    } else if(name.equals(ADVANCED_FIELD_QUERY_SERVICE)) {
     617        return processFieldQuery(request, "advanced");
    298618    } else if (name.equals(RESOURCE_RETRIEVE_SERVICE)) {
    299619        return processResourceRetrieve(request);
     
    317637   
    318638    // get param list and content
    319     Element param_elem=null;
     639    /*Element param_elem=null;
    320640    Element content_elem=null;
    321641    Node n = request.getFirstChild();
     
    334654        return result; // empty result
    335655    }
    336 
     656    */
     657
     658    // get param list
     659    Element param_list = (Element)GSXML.getChildByTagName(request, GSXML.PARAM_ELEM+GSXML.LIST_MODIFIER);
     660    if (param_list==null) {
     661        System.err.println("MGPPGDBMServices, TextQuery Error: no param list in request!");
     662        return result; // empty result
     663    }
     664    /*
    337665    // get the query string
    338666    String query = GSXML.getNodeText(content_elem);
     
    341669        return result;
    342670    }
    343 
    344     HashMap params = GSXML.extractParams(param_elem);
     671    */
     672    HashMap params = GSXML.extractParams(param_list);
     673    String query = (String)params.get(QUERY_PARAM);
     674    if (query == null) {
     675        // nothing to query
     676        return result;
     677    }
     678   
    345679    String index = (String)params.get(INDEX_PARAM);
    346680    if (index==null) { // if its not present, use the default index
     
    354688
    355689    mgpp_src_.loadIndexData(basedir, indexdir);
    356     setQueryParams(params);
     690    setStandardQueryParams(params);
    357691   
    358692    mgpp_src_.runQuery(query);
     
    381715
    382716    /** process a fielded query */
    383     protected Element processFieldQuery(Element request) {
     717    protected Element processFieldQuery(Element request, String type) {
     718   
     719    System.out.println("processing Field Query...");
    384720    Element result = doc_.createElement(GSXML.RESPONSE_ELEM);
    385721    String from = GSPath.appendLink(cluster_name_, FIELD_QUERY_SERVICE);
    386722    result.setAttribute(GSXML.FROM_ATT, from);
    387723    result.setAttribute(GSXML.TYPE_ATT, GSXML.REQUEST_TYPE_QUERY);
    388 
    389    
    390     // dummy result
    391     Text t = null;
    392     t = doc_.createTextNode(FIELD_QUERY_SERVICE+" result... ");
    393     result.appendChild(t);
     724   
     725    // get param list
     726    Element param_list = (Element)GSXML.getChildByTagName(request, GSXML.PARAM_ELEM+GSXML.LIST_MODIFIER);
     727    if (param_list==null) {
     728        System.err.println("MGPPGDBMServices, FieldQuery Error: no param list in request!");
     729        return result; // empty result
     730    }
     731
     732    HashMap params = GSXML.extractAllParams(param_list);
     733    printHash(params);
     734
     735    //check one of the params to see if it is present
     736    String test_param = (String)params.get(FIELD_QUERY_PARAM);
     737    if (test_param == null) { // no query
     738        return result;
     739    }
     740
     741   
     742    /*  String index = (String)params.get(INDEX_PARAM);
     743    if (index==null) { // if its not present, use the default index
     744        index=default_index_;
     745        }*/
     746    // for now we are using the default index
     747    String index = default_index_;
     748   
     749    // now set up the mgpp stuff
     750    String basedir = GSFile.collectionBaseDir(site_home_,
     751                          cluster_name_);
     752    String indexdir = GSFile.collectionIndexPath(cluster_name_, index);
     753   
     754    mgpp_src_.loadIndexData(basedir, indexdir);
     755    setStandardQueryParams(params);
     756   
     757    String query="";
     758    if (type.equals("simple")) {
     759        query = parseFieldQueryParams(params);
     760    } else if (type.equals("advanced")) {
     761        query = parseAdvancedFieldQueryParams(params);
     762    }
     763    System.out.println("query="+query);
     764    mgpp_src_.runQuery(query);
     765    MGPPQueryResult mqr= mgpp_src_.getQueryResult();
     766   
     767    // get the docnums out, and convert to HASH ids
     768    Vector docs = mqr.getDocs();
     769    if (docs.size()==0) {
     770        // no docs found
     771        return result;
     772    }
     773    // create a resourceList element
     774    Element c = doc_.createElement(GSXML.CONTENT_ELEM);
     775    result.appendChild(c);
     776    Element resource_list = doc_.createElement(GSXML.RESOURCE_ELEM+GSXML.LIST_MODIFIER);
     777    c.appendChild(resource_list);
     778    // add each resource
     779    for (int d=0; d<docs.size(); d++) {
     780        long docnum = ((MGPPDocInfo)docs.elementAt(d)).num_;
     781        String id = gdbm_src_.docnum2Oid(docnum);
     782        Node no = GSXML.createResourceElement(doc_, id);
     783        resource_list.appendChild(no);
     784    }
    394785    return result;
    395786    }
     
    528919
    529920    // should probably use a list rather than map
    530     protected boolean setQueryParams(HashMap params) {
     921    protected boolean setStandardQueryParams(HashMap params) {
    531922
    532923    // set the default ones
     
    566957    }
    567958
    568 
    569 
     959    protected String parseFieldQueryParams(HashMap params) {
     960
     961    StringBuffer final_query = new StringBuffer(256);
     962    String text_line = (String)params.get(FIELD_QUERY_PARAM);
     963    String[] texts = text_line.split(",", -1);
     964    String field_line = (String)params.get(FIELD_FIELD_PARAM);
     965    String[] fields = field_line.split(",", -1);
     966    String combine="&";
     967    String match = (String)params.get(MATCH_PARAM);
     968    if (match.equals(MATCH_PARAM_SOME)) {
     969        combine = "|";
     970    }
     971   
     972    for (int i=0; i<texts.length; i++) {
     973
     974        String q = texts[i].trim();
     975        if (!q.equals("")) {
     976        addQueryElem(final_query, q, fields[i], combine);
     977        }
     978    }
     979
     980    System.out.println("final query = "+final_query.toString());
     981    return final_query.toString();
     982    }
     983   
     984    protected String parseAdvancedFieldQueryParams(HashMap params) {
     985
     986    StringBuffer final_query = new StringBuffer(256);
     987    String text_line = (String)params.get(FIELD_QUERY_PARAM);
     988    String[] texts = text_line.split(",", -1);
     989    String field_line = (String)params.get(FIELD_FIELD_PARAM);
     990    String[] fields = field_line.split(",", -1);
     991    String case_line = (String)params.get(FIELD_CASE_PARAM);
     992    String[] cases = case_line.split(",", -1);
     993    String stem_line = (String)params.get(FIELD_STEM_PARAM);
     994    String[] stems = stem_line.split(",", -1);
     995    String  combine_line = (String)params.get(FIELD_COMBINE_PARAM);
     996    String [] combines = combine_line.split(",", -1);
     997    String combine = "&";
     998    for (int i=0; i<texts.length; i++) {
     999        if (i==0) {
     1000        combine = "";
     1001        } else {
     1002        String x = combines[i-1]; // assume first one is missing
     1003        if (x.equals(FIELD_COMBINE_PARAM_AND)) {
     1004            combine = "&";
     1005        } else if (x.equals(FIELD_COMBINE_PARAM_OR)) {
     1006            combine = "|";
     1007        } else if (x.equals(FIELD_COMBINE_PARAM_NOT)) {
     1008            combine = "!";
     1009        }
     1010       
     1011        }
     1012
     1013        String q = texts[i].trim();
     1014        if (!q.equals("")) {
     1015        q = addStemAndCase(q, stems[i], cases[i]);
     1016        addQueryElem(final_query, q, fields[i], combine);
     1017        }
     1018    }
     1019
     1020    System.out.println("final query = "+final_query.toString());
     1021    return final_query.toString();
     1022    }
     1023
     1024    protected void addQueryElem(StringBuffer s, String q, String f, String c) {
     1025
     1026    String combine="";
     1027    if (s.length()>0) {
     1028        combine = " "+c+" ";
     1029    }
     1030    if (f!="") {
     1031        s.append(combine+"["+q+"]:"+f);
     1032    } else {
     1033        s.append(combine+q);
     1034    }
     1035    }
     1036    protected String addStemAndCase(String q, String c, String s) {
     1037    String mods = "#";
     1038    if (c=="1") {
     1039        mods += "c";
     1040    }
     1041    if (s=="1") {
     1042        mods += "s";
     1043    }
     1044    if (mods.equals("#")) {
     1045        return q;
     1046    }
     1047    StringBuffer temp = new StringBuffer();
     1048    String [] terms = q.split(" ");
     1049    for (int i=0; i<terms.length; i++) {
     1050        String t = terms[i].trim();
     1051       
     1052        if (!t.equals("") && !t.equals("TX")) {
     1053        temp.append(" "+t+mods);
     1054        }
     1055    }
     1056    return temp.toString();
     1057    }
     1058
     1059    protected void printHash(HashMap map) {
     1060    System.out.println("Map entries are :");
     1061    Set entries = map.entrySet();
     1062    Iterator i = entries.iterator();
     1063    while (i.hasNext()) {
     1064        Map.Entry m = (Map.Entry)i.next();
     1065        String name = (String)m.getKey();
     1066        String value = (String)m.getValue();
     1067        System.out.println(name+"="+value);
     1068    } 
     1069    }
     1070
     1071}
    5701072 
    5711073
Note: See TracChangeset for help on using the changeset viewer.