Changeset 30553

Show
Ignore:
Timestamp:
02.06.2016 14:11:02 (3 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 modified

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  }