Changeset 30553


Ignore:
Timestamp:
06/02/16 14:11:02 (5 years ago)
Author:
kjdon
Message:

added ability for teh collectionConfig.xml file to carry additional stuff. Can have extraInfo element at the top level (inside collectionConfig). For now this is used to add extra items to the navigation bar (<navigationTab type=external-link

Location:
main/trunk/greenstone3/src/java/org/greenstone/gsdl3
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • main/trunk/greenstone3/src/java/org/greenstone/gsdl3/action/DocumentAction.java

    r30056 r30553  
    3232// General Java classes
    3333import java.util.ArrayList;
     34import java.util.Arrays;
    3435import java.util.HashMap;
    3536import java.util.HashSet;
     
    121122        }
    122123
     124        String query_terms = (String) params.get("terms");
     125        logger.error("terms = "+query_terms);
     126        String query = (String) params.get("query");
    123127        UserContext userContext = new UserContext(request);
    124128
     
    546550                    if (highlight_query_terms)
    547551                    {
    548                         content = highlightQueryTerms(request, (Element) content);
     552                      content = highlightQueryTermsOld(request, (Element) content); // highlightQueryTerms(query_terms, query, request.getOwnerDocument(), (Element) content); //request, (Element) content);
    549553                    }
    550554                    doc_nodes.item(i).appendChild(doc.importNode(content, true));
     
    597601                dc_response_doc.removeChild(dc_response_doc_content);
    598602
    599                 dc_response_doc_content = highlightQueryTerms(request, dc_response_doc_content);
     603                dc_response_doc_content = highlightQueryTermsOld(request, dc_response_doc_content); //highlightQueryTerms(query_terms, query, request.getOwnerDocument(), dc_response_doc_content); //request, dc_response_doc_content);
    600604                dc_response_doc.appendChild(dc_response_doc.getOwnerDocument().importNode(dc_response_doc_content, true));
    601605            }
     
    839843     * found in the text.
    840844     */
    841     protected Element highlightQueryTerms(Element request, Element dc_response_doc_content)
     845  protected Element highlightQueryTerms(String terms, String performed_query, Document doc, Element dc_response_doc_content) {
     846    logger.error("in highlight, terms = "+terms);
     847    if (terms == null || performed_query == null) {
     848      return dc_response_doc_content;
     849    }
     850    HashMap<String, HashSet<String>> term_to_variants_map = new HashMap<String, HashSet<String>>();
     851    HashSet<String> query_term_variants = new HashSet<String>();
     852
     853    // terms in the form snail:snail,SNAILS,Snail;farm:farm,farming,Farming
     854    String[] term_list = terms.split(";");
     855    for (int i=0; i<term_list.length; i++) {
     856      String term_x = term_list[i];
     857      int colon_index = term_x.indexOf(';');
     858      String main_term;
     859      String term_variants;
     860      if (colon_index == -1) {
     861    main_term = term_x;
     862    term_variants = main_term;
     863      } else {
     864    main_term = term_x.substring(0, colon_index);
     865    term_variants = term_x.substring(colon_index+1);
     866      }
     867      query_term_variants.add(main_term);
     868      term_to_variants_map.put(main_term, new HashSet<String>(Arrays.asList(term_variants.split(","))));
     869    }
     870 
     871    String content = GSXML.getNodeText(dc_response_doc_content);
     872
     873    ArrayList<ArrayList<HashSet<String>>> phrase_query_term_variants_hierarchy = new ArrayList<ArrayList<HashSet<String>>>();
     874
     875//Element query_element = GSXML.getNamedElement(metadata_list, GSXML.METADATA_ELEM, GSXML.NAME_ATT, "query");
     876//String performed_query = //GSXML.getNodeText(query_element) + " ";
     877
     878        ArrayList<HashSet<String>> phrase_query_p_term_variants_list = new ArrayList<HashSet<String>>();
     879        int term_start = 0;
     880        boolean in_term = false;
     881        boolean in_phrase = false;
     882        for (int i = 0; i < performed_query.length(); i++)
     883        {
     884            char character = performed_query.charAt(i);
     885            boolean is_character_letter_or_digit = Character.isLetterOrDigit(character);
     886
     887            // Has a query term just started?
     888            if (in_term == false && is_character_letter_or_digit == true)
     889            {
     890                in_term = true;
     891                term_start = i;
     892            }
     893
     894            // Or has a term just finished?
     895            else if (in_term == true && is_character_letter_or_digit == false)
     896            {
     897                in_term = false;
     898                String term = performed_query.substring(term_start, i);
     899                HashSet<String> phrase_query_p_term_x_variants = term_to_variants_map.get(term);
     900                // Element term_element = GSXML.getNamedElement(query_term_list_element, GSXML.TERM_ELEM, GSXML.NAME_ATT, term);
     901                // if (term_element != null)
     902                // {
     903
     904                //  HashSet<String> phrase_query_p_term_x_variants = new HashSet<String>();
     905
     906                //  NodeList term_equivalent_terms_nodelist = term_element.getElementsByTagName("equivTermList");
     907                //  if (term_equivalent_terms_nodelist == null || term_equivalent_terms_nodelist.getLength() == 0)
     908                //  {
     909                //      String termValueU = null;
     910                //      String termValueL = null;
     911
     912                //      if (term.length() > 1)
     913                //      {
     914                //          termValueU = term.substring(0, 1).toUpperCase() + term.substring(1);
     915                //          termValueL = term.substring(0, 1).toLowerCase() + term.substring(1);
     916                //      }
     917                //      else
     918                //      {
     919                //          termValueU = term.substring(0, 1).toUpperCase();
     920                //          termValueL = term.substring(0, 1).toLowerCase();
     921                //      }
     922
     923                //      phrase_query_p_term_x_variants.add(termValueU);
     924                //      phrase_query_p_term_x_variants.add(termValueL);
     925                //  }
     926                //  else
     927                //  {
     928                //      for (int j = 0; j < term_equivalent_terms_nodelist.getLength(); j++)
     929                //      {
     930                //          Element term_equivalent_terms_element = (Element) term_equivalent_terms_nodelist.item(j);
     931                //          String[] term_equivalent_terms = GSXML.getAttributeValuesFromList(term_equivalent_terms_element, GSXML.NAME_ATT);
     932                //          for (int k = 0; k < term_equivalent_terms.length; k++)
     933                //          {
     934                //              phrase_query_p_term_x_variants.add(term_equivalent_terms[k]);
     935                //          }
     936                //      }
     937                //  }
     938                if (phrase_query_p_term_x_variants != null) {
     939                    phrase_query_p_term_variants_list.add(phrase_query_p_term_x_variants);
     940
     941                    if (in_phrase == false)
     942                    {
     943                        phrase_query_term_variants_hierarchy.add(phrase_query_p_term_variants_list);
     944                        phrase_query_p_term_variants_list = new ArrayList<HashSet<String>>();
     945                    }
     946                }
     947                //}
     948            }
     949            // Watch for phrases (surrounded by quotes)
     950            if (character == '\"')
     951            {
     952                // Has a phrase just started?
     953                if (in_phrase == false)
     954                {
     955                    in_phrase = true;
     956                }
     957                // Or has a phrase just finished?
     958                else if (in_phrase == true)
     959                {
     960                    in_phrase = false;
     961                    phrase_query_term_variants_hierarchy.add(phrase_query_p_term_variants_list);
     962                }
     963
     964                phrase_query_p_term_variants_list = new ArrayList<HashSet<String>>();
     965            }
     966        }
     967
     968    return  highlightQueryTermsInternal(doc, content, query_term_variants, phrase_query_term_variants_hierarchy);
     969  }
     970    protected Element highlightQueryTermsOld(Element request, Element dc_response_doc_content)
    842971    {
    843972        Document doc = request.getOwnerDocument();
     
    10651194    private Element highlightQueryTermsInternal(Document doc, String content, HashSet<String> query_term_variants, ArrayList<ArrayList<HashSet<String>>> phrase_query_term_variants_hierarchy)
    10661195    {
     1196
     1197      logger.error("size = "+ query_term_variants.size());
    10671198        // Convert the content string to an array of characters for speed
    10681199        char[] content_characters = new char[content.length()];
  • main/trunk/greenstone3/src/java/org/greenstone/gsdl3/collection/ServiceCluster.java

    r28966 r30553  
    9393
    9494    protected Element display_item_list = null;
     95  /** extra stuff */
     96  protected Element extra_info = null;
    9597  /** default values for servlet params */
    9698  protected Element library_param_list = null;
     
    146148        this.library_param_list = this.desc_doc.createElement(GSXML.LIBRARY_PARAM_ELEM+GSXML.LIST_MODIFIER);
    147149        this.service_list = this.desc_doc.createElement(GSXML.SERVICE_ELEM + GSXML.LIST_MODIFIER);
     150        this.extra_info = this.desc_doc.createElement(GSXML.EXTRA_INFO_ELEM);
    148151        //this.plugin_item_list = this.desc_doc.createElement(GSXML.PLUGIN_ELEM + GSXML.LIST_MODIFIER);
    149152    }
     
    273276          }
    274277        }
    275 
    276   }
     278       
     279        // get any extra info
     280        Element info = (Element) GSXML.getChildByTagName(service_cluster_info, GSXML.EXTRA_INFO_ELEM);
     281        if (info != null) {
     282          if (!addExtraInfo(info)) {
     283            logger.error("couldn't add extra info");
     284          }
     285        }
     286
     287    }
    277288    /**
    278289     * adds metadata from a metadataList into the metadata_list xml
     
    336347        return true;
    337348    }
     349
     350  protected boolean addExtraInfo(Element info) {
     351    if (info == null) {
     352      return false;
     353    }
     354    NodeList children = info.getChildNodes();
     355    for(int i=0; i<children.getLength(); i++) {
     356      this.extra_info.appendChild(this.desc_doc.importNode(children.item(i), true));
     357    }
     358    return true;
     359  }
    338360
    339361    // protected boolean addPlugins(Element plugin_list)
     
    652674                description.appendChild(result_doc.importNode(this.metadata_list, true));
    653675                description.appendChild(result_doc.importNode(this.library_param_list, true));
     676                description.appendChild(result_doc.importNode(this.extra_info, true));
    654677                //description.appendChild(this.plugin_item_list);
    655678                return response;
     
    682705                      description.appendChild(result_doc.importNode(this.library_param_list, true));
    683706                    }
     707                    else if (info.equals(GSXML.EXTRA_INFO_ELEM)) {
     708                      description.appendChild(result_doc.importNode(this.extra_info, true));
     709                    }
    684710                }
    685711            }
     
    769795         * }
    770796         */
     797
    771798        if (type.equals(GSXML.REQUEST_TYPE_SYSTEM))
    772799        {
     
    780807        return response;
    781808    }
    782 
    783809    protected Element processSystemRequest(Element request)
    784810    {
  • main/trunk/greenstone3/src/java/org/greenstone/gsdl3/core/TransformingReceptionist.java

    r30477 r30553  
    926926          //      return XMLTransformer.constructErrorXHTMLPage("Cannot parse the xslt file\n");// + errorPage);
    927927          //    }
     928          logger.error("style_doc is null, returning the page");
    928929            return page;
    929930        }
  • main/trunk/greenstone3/src/java/org/greenstone/gsdl3/service/OAIPMH.java

    r29267 r30553  
    556556  protected void addMetadata(Element meta_list_elem, String meta_name, DBInfo info) {
    557557    Vector<String> values = info.getMultiInfo(meta_name);
    558     for (int i=0; i<values.size(); i++) {
    559       addMetadataElement(meta_list_elem, meta_name, values.get(i));
     558    if (values != null && values.size()!=0) {
     559      for (int i=0; i<values.size(); i++) {
     560    addMetadataElement(meta_list_elem, meta_name, values.get(i));
     561      }
    560562    }
    561563  }
Note: See TracChangeset for help on using the changeset viewer.