Ignore:
Timestamp:
2014-04-10T14:39:33+12:00 (10 years ago)
Author:
kjdon
Message:

Lots of changes. Mainly to do with removing this.doc from everywhere. Document is not thread safe. Now we tend to create a new Document everytime we are starting a new page/message etc. in service this.desc_doc is available as teh document to create service info stuff. But it should only be used for this and not for other messages. newDOM is now static for XMLConverter. method param changes for some GSXML methods.

File:
1 edited

Legend:

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

    r28180 r28966  
    2929import org.greenstone.gsdl3.util.GSXML;
    3030import org.greenstone.gsdl3.util.UserContext;
     31import org.greenstone.gsdl3.util.XMLConverter;
     32
     33import org.w3c.dom.Document;
    3134import org.w3c.dom.Element;
    3235import org.w3c.dom.Node;
     
    6568        logger.info("Configuring CrossCollectionSearch...");
    6669        // query service
    67         Element ccs_service = this.doc.createElement(GSXML.SERVICE_ELEM);
     70        Element ccs_service = this.desc_doc.createElement(GSXML.SERVICE_ELEM);
    6871        ccs_service.setAttribute(GSXML.TYPE_ATT, GSXML.SERVICE_TYPE_QUERY);
    6972        ccs_service.setAttribute(GSXML.NAME_ATT, TEXT_QUERY_SERVICE);
     
    7174
    7275        // metadata service
    73         Element dmr_service = this.doc.createElement(GSXML.SERVICE_ELEM);
     76        Element dmr_service = this.desc_doc.createElement(GSXML.SERVICE_ELEM);
    7477        dmr_service.setAttribute(GSXML.TYPE_ATT, GSXML.SERVICE_TYPE_RETRIEVE);
    7578        dmr_service.setAttribute(GSXML.NAME_ATT, DOCUMENT_METADATA_RETRIEVE_SERVICE);
     
    8083        if (format_info != null)
    8184        {
    82             this.format_info_map.put(TEXT_QUERY_SERVICE, this.doc.importNode(format_info, true));
     85            this.format_info_map.put(TEXT_QUERY_SERVICE, this.desc_doc.importNode(format_info, true));
    8386        }
    8487        else
     
    9194            }
    9295            format_string += "</xsl:attribute><gsf:icon/></a></td><td><gsf:metadata name='Title'/> (<xsl:value-of select='@collection'/>) </td></gsf:template></format>";
    93             this.format_info_map.put(TEXT_QUERY_SERVICE, this.doc.importNode(this.converter.getDOM(format_string).getDocumentElement(), true));
     96            this.format_info_map.put(TEXT_QUERY_SERVICE, this.desc_doc.importNode(this.converter.getDOM(format_string).getDocumentElement(), true));
    9497        }
    9598        return true;
    9699    }
    97100
    98     protected Element getServiceDescription(String service, String lang, String subset)
     101  protected Element getServiceDescription(Document doc, String service, String lang, String subset)
    99102    {
    100103        if (service.equals(TEXT_QUERY_SERVICE))
    101104        {
    102105
    103             Element ccs_service = this.doc.createElement(GSXML.SERVICE_ELEM);
     106            Element ccs_service = doc.createElement(GSXML.SERVICE_ELEM);
    104107            ccs_service.setAttribute(GSXML.TYPE_ATT, GSXML.SERVICE_TYPE_QUERY);
    105108            ccs_service.setAttribute(GSXML.NAME_ATT, TEXT_QUERY_SERVICE);
     
    108111            if (subset == null || subset.equals(GSXML.DISPLAY_TEXT_ELEM + GSXML.LIST_MODIFIER))
    109112            {
    110                 ccs_service.appendChild(GSXML.createDisplayTextElement(this.doc, GSXML.DISPLAY_TEXT_NAME, getTextString(TEXT_QUERY_SERVICE + ".name", lang)));
    111                 ccs_service.appendChild(GSXML.createDisplayTextElement(this.doc, GSXML.DISPLAY_TEXT_SUBMIT, getTextString(TEXT_QUERY_SERVICE + ".submit", lang)));
    112                 ccs_service.appendChild(GSXML.createDisplayTextElement(this.doc, GSXML.DISPLAY_TEXT_DESCRIPTION, getTextString(TEXT_QUERY_SERVICE + ".description", lang)));
     113                ccs_service.appendChild(GSXML.createDisplayTextElement(doc, GSXML.DISPLAY_TEXT_NAME, getTextString(TEXT_QUERY_SERVICE + ".name", lang)));
     114                ccs_service.appendChild(GSXML.createDisplayTextElement(doc, GSXML.DISPLAY_TEXT_SUBMIT, getTextString(TEXT_QUERY_SERVICE + ".submit", lang)));
     115                ccs_service.appendChild(GSXML.createDisplayTextElement(doc, GSXML.DISPLAY_TEXT_DESCRIPTION, getTextString(TEXT_QUERY_SERVICE + ".description", lang)));
    113116            }
    114117            // param info
    115118            if (subset == null || subset.equals(GSXML.PARAM_ELEM + GSXML.LIST_MODIFIER))
    116119            {
    117                 Element param_list = this.doc.createElement(GSXML.PARAM_ELEM + GSXML.LIST_MODIFIER);
     120                Element param_list = doc.createElement(GSXML.PARAM_ELEM + GSXML.LIST_MODIFIER);
    118121                // collection list
    119122                if (coll_ids_list == null)
     
    125128                    addCollectionNames(lang);
    126129                }
    127                 Element param = GSXML.createParameterDescription(this.doc, COLLECTION_PARAM, getTextString("param." + COLLECTION_PARAM, lang), GSXML.PARAM_TYPE_ENUM_MULTI, "all", coll_ids_list, coll_names_map.get(lang));
     130                Element param = GSXML.createParameterDescription(doc, COLLECTION_PARAM, getTextString("param." + COLLECTION_PARAM, lang), GSXML.PARAM_TYPE_ENUM_MULTI, "all", coll_ids_list, coll_names_map.get(lang));
    128131                param_list.appendChild(param);
    129132                // query param
    130                 param = GSXML.createParameterDescription(this.doc, QUERY_PARAM, getTextString("param." + QUERY_PARAM, lang), GSXML.PARAM_TYPE_STRING, null, null, null);
     133                param = GSXML.createParameterDescription(doc, QUERY_PARAM, getTextString("param." + QUERY_PARAM, lang), GSXML.PARAM_TYPE_STRING, null, null, null);
    131134                param_list.appendChild(param);
    132135                ccs_service.appendChild(param_list);
     
    137140        }
    138141        // these ones are probably never called, but put them here just in case
    139         Element service_elem = this.doc.createElement(GSXML.SERVICE_ELEM);
     142        Element service_elem = doc.createElement(GSXML.SERVICE_ELEM);
    140143        service_elem.setAttribute(GSXML.TYPE_ATT, GSXML.SERVICE_TYPE_RETRIEVE);
    141144        service_elem.setAttribute(GSXML.NAME_ATT, service);
     
    147150    {
    148151        // Create a new (empty) result message
    149         Element result = this.doc.createElement(GSXML.RESPONSE_ELEM);
     152      Document result_doc = XMLConverter.newDOM();
     153        Element result = result_doc.createElement(GSXML.RESPONSE_ELEM);
    150154        result.setAttribute(GSXML.FROM_ATT, TEXT_QUERY_SERVICE);
    151155        result.setAttribute(GSXML.TYPE_ATT, GSXML.REQUEST_TYPE_PROCESS);
     
    173177        }
    174178
    175         Element query_message = this.doc.createElement(GSXML.MESSAGE_ELEM);
     179        Document msg_doc = XMLConverter.newDOM();
     180        Element query_message = msg_doc.createElement(GSXML.MESSAGE_ELEM);
    176181        // we are sending the same request to each collection - build up the to
    177182        // attribute for the request
     
    187192        }
    188193        // send the query to all colls
    189         Element query_request = GSXML.createBasicRequest(this.doc, GSXML.REQUEST_TYPE_PROCESS, to_att.toString(), userContext);
     194        Element query_request = GSXML.createBasicRequest(msg_doc, GSXML.REQUEST_TYPE_PROCESS, to_att.toString(), userContext);
    190195        query_message.appendChild(query_request);
    191196        // should we add params individually?
    192         Element new_param_list = this.doc.createElement(GSXML.PARAM_ELEM + GSXML.LIST_MODIFIER);
     197        Element new_param_list = msg_doc.createElement(GSXML.PARAM_ELEM + GSXML.LIST_MODIFIER);
    193198        query_request.appendChild(new_param_list);
    194         new_param_list.appendChild(this.doc.importNode(GSXML.getNamedElement(param_list, GSXML.PARAM_ELEM, GSXML.NAME_ATT, QUERY_PARAM), true));
     199        new_param_list.appendChild(msg_doc.importNode(GSXML.getNamedElement(param_list, GSXML.PARAM_ELEM, GSXML.NAME_ATT, QUERY_PARAM), true));
    195200        Element query_result = (Element) this.router.process(query_message);
    196201
     
    215220        }
    216221
    217         Element metadata_list = this.doc.createElement(GSXML.METADATA_ELEM + GSXML.LIST_MODIFIER);
     222        Element metadata_list = result_doc.createElement(GSXML.METADATA_ELEM + GSXML.LIST_MODIFIER);
    218223        result.appendChild(metadata_list);
    219         GSXML.addMetadata(this.doc, metadata_list, "numDocsReturned", "" + numDocsReturned);
    220         //GSXML.addMetadata(this.doc, metadata_list, "numDocsMatched", ""+numDocsMatched);
    221 
    222         Element doc_node_list = this.doc.createElement(GSXML.DOC_NODE_ELEM + GSXML.LIST_MODIFIER);
     224        GSXML.addMetadata(metadata_list, "numDocsReturned", "" + numDocsReturned);
     225        //GSXML.addMetadata(metadata_list, "numDocsMatched", ""+numDocsMatched);
     226
     227        Element doc_node_list = result_doc.createElement(GSXML.DOC_NODE_ELEM + GSXML.LIST_MODIFIER);
    223228        result.appendChild(doc_node_list);
    224229
     
    240245                {
    241246
    242                     doc_node_list.appendChild(this.doc.importNode(this_node, true));
     247                    doc_node_list.appendChild(result_doc.importNode(this_node, true));
    243248                }
    244249                else
     
    267272
    268273        // first, get the message router info
    269         Element coll_list_message = this.doc.createElement(GSXML.MESSAGE_ELEM);
    270         Element coll_list_request = GSXML.createBasicRequest(this.doc, GSXML.REQUEST_TYPE_DESCRIBE, "", userContext); // uid
     274        Document msg_doc = XMLConverter.newDOM();
     275        Element coll_list_message = msg_doc.createElement(GSXML.MESSAGE_ELEM);
     276        Element coll_list_request = GSXML.createBasicRequest(msg_doc, GSXML.REQUEST_TYPE_DESCRIBE, "", userContext); // uid
    271277        coll_list_message.appendChild(coll_list_request);
    272278        logger.debug("coll list request = " + this.converter.getPrettyString(coll_list_request));
     
    283289        NodeList colls = coll_list_response.getElementsByTagName(GSXML.COLLECTION_ELEM);
    284290        // we can send the same request to multiple collections at once by using a comma separated list
    285         Element metadata_message = this.doc.createElement(GSXML.MESSAGE_ELEM);
     291        Element metadata_message = msg_doc.createElement(GSXML.MESSAGE_ELEM);
    286292        StringBuffer colls_sb = new StringBuffer();
    287293        for (int i = 0; i < colls.getLength(); i++)
     
    298304        }
    299305
    300         Element metadata_request = GSXML.createBasicRequest(this.doc, GSXML.REQUEST_TYPE_DESCRIBE, colls_sb.toString(), userContext);
     306        Element metadata_request = GSXML.createBasicRequest(msg_doc, GSXML.REQUEST_TYPE_DESCRIBE, colls_sb.toString(), userContext);
    301307        metadata_message.appendChild(metadata_request);
    302308        logger.debug("metadata request = " + this.converter.getPrettyString(metadata_message));
     
    352358
    353359        // need to request MR for collection descriptions
    354         Element metadata_message = this.doc.createElement(GSXML.MESSAGE_ELEM);
     360        Document msg_doc = XMLConverter.newDOM();
     361        Element metadata_message = msg_doc.createElement(GSXML.MESSAGE_ELEM);
    355362
    356363        // get a comma separated list of coll ids to send to MR
     
    365372            colls_sb.append(coll_ids_list[i]);
    366373        }
    367         Element metadata_request = GSXML.createBasicRequest(this.doc, GSXML.REQUEST_TYPE_DESCRIBE, colls_sb.toString(), userContext);
     374        Element metadata_request = GSXML.createBasicRequest(msg_doc, GSXML.REQUEST_TYPE_DESCRIBE, colls_sb.toString(), userContext);
    368375        // param_list to request just displayTextList
    369         Element param_list = this.doc.createElement(GSXML.PARAM_ELEM + GSXML.LIST_MODIFIER);
    370         Element param = GSXML.createParameter(this.doc, GSXML.SUBSET_PARAM, GSXML.DISPLAY_TEXT_ELEM + GSXML.LIST_MODIFIER);
     376        Element param_list = msg_doc.createElement(GSXML.PARAM_ELEM + GSXML.LIST_MODIFIER);
     377        Element param = GSXML.createParameter(msg_doc, GSXML.SUBSET_PARAM, GSXML.DISPLAY_TEXT_ELEM + GSXML.LIST_MODIFIER);
    371378        param_list.appendChild(param);
    372379        metadata_request.appendChild(param_list);
     
    393400    {
    394401        // Create a new (empty) result message
    395         Element result = this.doc.createElement(GSXML.RESPONSE_ELEM);
     402      Document result_doc = XMLConverter.newDOM();
     403        Element result = result_doc.createElement(GSXML.RESPONSE_ELEM);
    396404        result.setAttribute(GSXML.FROM_ATT, DOCUMENT_METADATA_RETRIEVE_SERVICE);
    397405        result.setAttribute(GSXML.TYPE_ATT, GSXML.REQUEST_TYPE_PROCESS);
     
    414422
    415423        // the resulting doc node list
    416         Element result_node_list = this.doc.createElement(GSXML.DOC_NODE_ELEM + GSXML.LIST_MODIFIER);
     424        Element result_node_list = result_doc.createElement(GSXML.DOC_NODE_ELEM + GSXML.LIST_MODIFIER);
    417425        result.appendChild(result_node_list);
    418426
    419         // get all the metadata params
    420         Element new_param_list = this.doc.createElement(GSXML.PARAM_ELEM + GSXML.LIST_MODIFIER);
    421         Element param = GSXML.createParameter(this.doc, "metadata", "Title");
    422         new_param_list.appendChild(param);
    423427
    424428        // organise the nodes into collection lists
     
    432436            if (coll_items == null)
    433437            {
    434                 coll_items = this.doc.createElement(GSXML.DOC_NODE_ELEM + GSXML.LIST_MODIFIER);
     438                coll_items = result_doc.createElement(GSXML.DOC_NODE_ELEM + GSXML.LIST_MODIFIER);
    435439                coll_map.put(coll_name, coll_items);
    436440            }
    437             coll_items.appendChild(this.doc.importNode(doc_node, true));
     441            coll_items.appendChild(result_doc.importNode(doc_node, true));
    438442        }
    439443
    440444        // create teh individual requests
    441         Element meta_request_message = this.doc.createElement(GSXML.MESSAGE_ELEM);
     445        Document msg_doc = XMLConverter.newDOM();
     446        Element meta_request_message = msg_doc.createElement(GSXML.MESSAGE_ELEM);
     447        // get all the metadata params
     448        Element new_param_list = msg_doc.createElement(GSXML.PARAM_ELEM + GSXML.LIST_MODIFIER);
     449        Element param = GSXML.createParameter(msg_doc, "metadata", "Title");
     450        new_param_list.appendChild(param);
     451
    442452        Set mapping_set = coll_map.entrySet();
    443453        Iterator iter = mapping_set.iterator();
     
    448458            String cname = (String) e.getKey();
    449459            Element doc_nodes = (Element) e.getValue();
    450             Element meta_request = GSXML.createBasicRequest(this.doc, GSXML.REQUEST_TYPE_PROCESS, GSPath.appendLink(cname, DOCUMENT_METADATA_RETRIEVE_SERVICE), userContext);
    451             meta_request.appendChild(doc_nodes);
     460            Element meta_request = GSXML.createBasicRequest(msg_doc, GSXML.REQUEST_TYPE_PROCESS, GSPath.appendLink(cname, DOCUMENT_METADATA_RETRIEVE_SERVICE), userContext);
     461            meta_request.appendChild(msg_doc.importNode(doc_nodes, true));
    452462            meta_request.appendChild(new_param_list.cloneNode(true));
    453463            meta_request_message.appendChild(meta_request);
     
    456466
    457467        Node meta_result_node = this.router.process(meta_request_message);
    458         Element meta_result = this.converter.nodeToElement(meta_result_node);
     468        Element meta_result = GSXML.nodeToElement(meta_result_node);
    459469
    460470        // now need to put the doc nodes back in the right order
     
    472482        {
    473483            Element doc_node = (Element) query_doc_list.item(i);
    474             Element new_node = (Element) this.doc.importNode(doc_node, false);
     484            Element new_node = (Element) result_doc.importNode(doc_node, false);
    475485            result_node_list.appendChild(new_node);
    476486            String coll_name = doc_node.getAttribute("collection");
Note: See TracChangeset for help on using the changeset viewer.