Changeset 27800 for main


Ignore:
Timestamp:
2013-07-11T11:40:39+12:00 (11 years ago)
Author:
kjdon
Message:

adding in sorting based on sort list, not index list

File:
1 edited

Legend:

Unmodified
Added
Removed
  • main/trunk/greenstone3/src/java/org/greenstone/gsdl3/service/SharedSoleneGS2FieldSearch.java

    r25853 r27800  
    2525import org.greenstone.LuceneWrapper3.SharedSoleneQuery;
    2626import org.greenstone.gsdl3.util.GSXML;
     27import org.w3c.dom.Document;
    2728import org.w3c.dom.Element;
    2829import org.w3c.dom.NodeList;
     
    3334{
    3435    protected static final String RANK_PARAM_RANK_VALUE = "rank";
     36  protected static final String SORT_ELEM = "sort";
    3537
    3638    static Logger logger = Logger.getLogger(org.greenstone.gsdl3.service.SharedSoleneGS2FieldSearch.class.getName());
     
    5658        }
    5759
     60        // the search element
     61        Element config_search = (Element) GSXML.getChildByTagName(extra_info, GSXML.SEARCH_ELEM);
     62        Document owner = info.getOwnerDocument();
     63        // get out the sort fields
     64        NodeList sort_nodes = info.getElementsByTagName(SORT_ELEM);
     65
     66        for (int i = 0; i < sort_nodes.getLength(); i++)
     67          {
     68            Element sort = (Element) sort_nodes.item(i);
     69            String name = sort.getAttribute(GSXML.NAME_ATT);
     70            Element node_extra = GSXML.getNamedElement(config_search, SORT_ELEM, GSXML.NAME_ATT, name);
     71            if (node_extra == null)
     72              {
     73            logger.error("haven't found extra info for sort field named " + name);
     74            continue;
     75              }
     76           
     77            // get the display elements if any - displayName
     78            NodeList display_names = node_extra.getElementsByTagName(GSXML.DISPLAY_TEXT_ELEM);
     79            if (display_names != null)
     80              {
     81            for (int j = 0; j < display_names.getLength(); j++)
     82              {
     83                Element e = (Element) display_names.item(j);
     84                sort.appendChild(owner.importNode(e, true));
     85              }
     86              }
     87          } // for each sortfield
    5888        // Lucene/Solr doesn't do case folding or stemming or accent folding at the
    5989        // moment
     
    6999    {
    70100        super.addCustomQueryParams(param_list, lang);
    71         /** Lucene's/Solr's rank param is based on index fields, not ranked/not */
     101        /** Lucene's/Solr's rank (sort) param is based on sort fields, not ranked/not */
    72102        createParameter(RANK_PARAM, param_list, lang);
    73103    }
     
    82112            // get the fields
    83113            ArrayList<String> fields = new ArrayList<String>();
    84             fields.add(RANK_PARAM_RANK_VALUE);
     114            //fields.add(RANK_PARAM_RANK_VALUE);
    85115            ArrayList<String> field_names = new ArrayList<String>();
    86             field_names.add(getTextString("param.sortBy.rank", lang));
    87             getSortByIndexData(fields, field_names, lang);
     116            //field_names.add(getTextString("param.sortBy.rank", lang));
     117            getSortData(fields, field_names, lang);
    88118
    89119            param = GSXML.createParameterDescription2(this.doc, name, getTextString("param." + name, lang), GSXML.PARAM_TYPE_ENUM_SINGLE, fields.get(0), fields, field_names);
     
    97127            super.createParameter(name, param_list, lang);
    98128        }
    99     }
    100 
     129
     130    }
     131
     132  protected void getSortData(ArrayList<String> sort_ids, ArrayList<String> sort_names, String lang) {
     133
     134        Element sort_list = (Element) GSXML.getChildByTagName(this.config_info, SORT_ELEM + GSXML.LIST_MODIFIER);
     135    NodeList sorts = sort_list.getElementsByTagName(SORT_ELEM);
     136    int len = sorts.getLength();
     137    for (int i = 0; i < len; i++)
     138      {
     139        Element sort = (Element) sorts.item(i);
     140        String shortname = sort.getAttribute(GSXML.SHORTNAME_ATT);
     141        sort_ids.add(shortname);
     142        String display_name = GSXML.getDisplayText(sort, GSXML.DISPLAY_TEXT_NAME, lang, "en");
     143        if (display_name.equals(""))
     144          {
     145        display_name = sort.getAttribute(GSXML.NAME_ATT);
     146        if (display_name.equals(""))
     147          {
     148            display_name = shortname;
     149          }
     150          }
     151        sort_names.add(display_name);
     152       
     153      }
     154   
     155  }
    101156    protected void getSortByIndexData(ArrayList<String> index_ids, ArrayList<String> index_names, String lang)
    102157    {
Note: See TracChangeset for help on using the changeset viewer.