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/IViaProxy.java

    r25978 r28966  
    1313import org.greenstone.gsdl3.util.GSPath;
    1414import org.greenstone.gsdl3.util.GSXML;
     15import org.greenstone.gsdl3.util.XMLConverter;
     16
    1517import org.w3c.dom.Document;
    1618import org.w3c.dom.Element;
     
    1820
    1921/**
     22 * Service class to proxy IVia
    2023 *
    21  * @author Katherine Don
    22  * @version $Revision$
    2324 */
    2425
     
    6465            return false;
    6566        }
    66         Element tq_service = this.doc.createElement(GSXML.SERVICE_ELEM);
     67        Element tq_service = this.desc_doc.createElement(GSXML.SERVICE_ELEM);
    6768        tq_service.setAttribute(GSXML.TYPE_ATT, GSXML.SERVICE_TYPE_QUERY);
    6869        tq_service.setAttribute(GSXML.NAME_ATT, TEXT_QUERY_SERVICE);
    6970        this.short_service_info.appendChild(tq_service);
    7071
    71         Element dc_service = this.doc.createElement(GSXML.SERVICE_ELEM);
     72        Element dc_service = this.desc_doc.createElement(GSXML.SERVICE_ELEM);
    7273        dc_service.setAttribute(GSXML.TYPE_ATT, GSXML.SERVICE_TYPE_RETRIEVE);
    7374        dc_service.setAttribute(GSXML.NAME_ATT, DOC_CONTENT_SERVICE);
    7475        this.short_service_info.appendChild(dc_service);
    7576
    76         Element dm_service = this.doc.createElement(GSXML.SERVICE_ELEM);
     77        Element dm_service = this.desc_doc.createElement(GSXML.SERVICE_ELEM);
    7778        dm_service.setAttribute(GSXML.TYPE_ATT, GSXML.SERVICE_TYPE_RETRIEVE);
    7879        dm_service.setAttribute(GSXML.NAME_ATT, DOC_META_SERVICE);
     
    8586        if (format != null)
    8687        {
    87             this.format_info_map.put(TEXT_QUERY_SERVICE, this.doc.importNode(format, true));
     88            this.format_info_map.put(TEXT_QUERY_SERVICE, this.desc_doc.importNode(format, true));
    8889        }
    8990
     
    9394        if (display_format != null)
    9495        {
    95             this.format_info_map.put(DOC_CONTENT_SERVICE, this.doc.importNode(display_format, true));
     96            this.format_info_map.put(DOC_CONTENT_SERVICE, this.desc_doc.importNode(display_format, true));
    9697            // shoudl we make a copy?
    9798        }
     
    101102    }
    102103
    103     protected Element getServiceDescription(String service, String lang, String subset)
     104    protected Element getServiceDescription(Document doc, String service, String lang, String subset)
    104105    {
    105106
    106107        if (service.equals(TEXT_QUERY_SERVICE))
    107108        {
    108             Element tq_service = this.doc.createElement(GSXML.SERVICE_ELEM);
     109            Element tq_service = doc.createElement(GSXML.SERVICE_ELEM);
    109110            tq_service.setAttribute(GSXML.TYPE_ATT, GSXML.SERVICE_TYPE_QUERY);
    110111            tq_service.setAttribute(GSXML.NAME_ATT, TEXT_QUERY_SERVICE);
    111112            if (subset == null || subset.equals(GSXML.DISPLAY_TEXT_ELEM + GSXML.LIST_MODIFIER))
    112113            {
    113                 tq_service.appendChild(GSXML.createDisplayTextElement(this.doc, GSXML.DISPLAY_TEXT_NAME, getTextString(TEXT_QUERY_SERVICE + ".name", lang)));
    114                 tq_service.appendChild(GSXML.createDisplayTextElement(this.doc, GSXML.DISPLAY_TEXT_SUBMIT, getTextString(TEXT_QUERY_SERVICE + ".submit", lang)));
    115                 tq_service.appendChild(GSXML.createDisplayTextElement(this.doc, GSXML.DISPLAY_TEXT_DESCRIPTION, getTextString(TEXT_QUERY_SERVICE + ".description", lang)));
     114                tq_service.appendChild(GSXML.createDisplayTextElement(doc, GSXML.DISPLAY_TEXT_NAME, getTextString(TEXT_QUERY_SERVICE + ".name", lang)));
     115                tq_service.appendChild(GSXML.createDisplayTextElement(doc, GSXML.DISPLAY_TEXT_SUBMIT, getTextString(TEXT_QUERY_SERVICE + ".submit", lang)));
     116                tq_service.appendChild(GSXML.createDisplayTextElement(doc, GSXML.DISPLAY_TEXT_DESCRIPTION, getTextString(TEXT_QUERY_SERVICE + ".description", lang)));
    116117            }
    117118            if (subset == null || subset.equals(GSXML.PARAM_ELEM + GSXML.LIST_MODIFIER))
    118119            {
    119                 Element param_list = this.doc.createElement(GSXML.PARAM_ELEM + GSXML.LIST_MODIFIER);
     120                Element param_list = doc.createElement(GSXML.PARAM_ELEM + GSXML.LIST_MODIFIER);
    120121                tq_service.appendChild(param_list);
    121                 Element param = GSXML.createParameterDescription(this.doc, QUERY_PARAM, getTextString("param." + QUERY_PARAM, lang), GSXML.PARAM_TYPE_STRING, null, null, null);
     122                Element param = GSXML.createParameterDescription(doc, QUERY_PARAM, getTextString("param." + QUERY_PARAM, lang), GSXML.PARAM_TYPE_STRING, null, null, null);
    122123                param_list.appendChild(param);
    123124                String[] field_ids = { "kw", "au", "su", "ti", "de", "fu" };
    124125                String[] field_names = { getTextString("param." + FIELD_PARAM + ".kw", lang), getTextString("param." + FIELD_PARAM + ".au", lang), getTextString("param." + FIELD_PARAM + ".su", lang), getTextString("param." + FIELD_PARAM + ".ti", lang), getTextString("param." + FIELD_PARAM + ".de", lang), getTextString("param." + FIELD_PARAM + ".fu", lang) };
    125126
    126                 param = GSXML.createParameterDescription(this.doc, FIELD_PARAM, getTextString("param." + FIELD_PARAM, lang), GSXML.PARAM_TYPE_ENUM_MULTI, "kw,au,su,ti,de,fu", field_ids, field_names);
     127                param = GSXML.createParameterDescription(doc, FIELD_PARAM, getTextString("param." + FIELD_PARAM, lang), GSXML.PARAM_TYPE_ENUM_MULTI, "kw,au,su,ti,de,fu", field_ids, field_names);
    127128                param_list.appendChild(param);
    128129
    129130                String[] hits_options = { "10", "30", "50" };
    130                 param = GSXML.createParameterDescription(this.doc, GS_HITS_PARAM, getTextString("param." + GS_HITS_PARAM, lang), GSXML.PARAM_TYPE_ENUM_SINGLE, "10", hits_options, hits_options);
     131                param = GSXML.createParameterDescription(doc, GS_HITS_PARAM, getTextString("param." + GS_HITS_PARAM, lang), GSXML.PARAM_TYPE_ENUM_SINGLE, "10", hits_options, hits_options);
    131132                param_list.appendChild(param);
    132133
    133                 param = GSXML.createParameterDescription(this.doc, GS_START_PAGE_PARAM, "", GSXML.PARAM_TYPE_INVISIBLE, "1", null, null);
     134                param = GSXML.createParameterDescription(doc, GS_START_PAGE_PARAM, "", GSXML.PARAM_TYPE_INVISIBLE, "1", null, null);
    134135                param_list.appendChild(param);
    135136            }
     
    138139        if (service.equals(DOC_META_SERVICE))
    139140        {
    140             Element dm_service = this.doc.createElement(GSXML.SERVICE_ELEM);
     141            Element dm_service = doc.createElement(GSXML.SERVICE_ELEM);
    141142            dm_service.setAttribute(GSXML.TYPE_ATT, GSXML.SERVICE_TYPE_RETRIEVE);
    142143            dm_service.setAttribute(GSXML.NAME_ATT, DOC_META_SERVICE);
     
    146147        if (service.equals(DOC_CONTENT_SERVICE))
    147148        {
    148             Element dc_service = this.doc.createElement(GSXML.SERVICE_ELEM);
     149            Element dc_service = doc.createElement(GSXML.SERVICE_ELEM);
    149150            dc_service.setAttribute(GSXML.TYPE_ATT, GSXML.SERVICE_TYPE_RETRIEVE);
    150151            dc_service.setAttribute(GSXML.NAME_ATT, DOC_CONTENT_SERVICE);
     
    158159    protected Element processTextQuery(Element request)
    159160    {
    160 
     161      Document result_doc = XMLConverter.newDOM();
    161162        // Create a new (empty) result message
    162         Element result = this.doc.createElement(GSXML.RESPONSE_ELEM);
     163        Element result = result_doc.createElement(GSXML.RESPONSE_ELEM);
    163164        result.setAttribute(GSXML.FROM_ATT, TEXT_QUERY_SERVICE);
    164165        result.setAttribute(GSXML.TYPE_ATT, GSXML.REQUEST_TYPE_PROCESS);
    165         Element doc_node_list = this.doc.createElement(GSXML.DOC_NODE_ELEM + GSXML.LIST_MODIFIER);
     166        Element doc_node_list = result_doc.createElement(GSXML.DOC_NODE_ELEM + GSXML.LIST_MODIFIER);
    166167        result.appendChild(doc_node_list);
    167168
     
    243244
    244245        // get the num docs and add to a metadata list
    245         Element metadata_list = this.doc.createElement(GSXML.METADATA_ELEM + GSXML.LIST_MODIFIER);
     246        Element metadata_list = result_doc.createElement(GSXML.METADATA_ELEM + GSXML.LIST_MODIFIER);
    246247        result.appendChild(metadata_list);
    247248
    248249        // Add a metadata element specifying the number of matching documents
    249250        long numdocs = Long.parseLong(results_num);
    250         GSXML.addMetadata(this.doc, metadata_list, "numDocsMatched", "" + numdocs);
     251        GSXML.addMetadata(metadata_list, "numDocsMatched", "" + numdocs);
    251252        String[] ids = doc_ids.split(" ");
    252253
    253254        for (int d = 0; d < ids.length; d++)
    254255        {
    255             Element doc_node = this.doc.createElement(GSXML.DOC_NODE_ELEM);
     256            Element doc_node = result_doc.createElement(GSXML.DOC_NODE_ELEM);
    256257            doc_node.setAttribute(GSXML.NODE_ID_ATT, ids[d]);
    257258            doc_node_list.appendChild(doc_node);
     
    265266    protected Element processDocumentMetadataRetrieve(Element request)
    266267    {
    267         Element result = this.doc.createElement(GSXML.RESPONSE_ELEM);
     268      Document result_doc = XMLConverter.newDOM();
     269        Element result = result_doc.createElement(GSXML.RESPONSE_ELEM);
    268270        result.setAttribute(GSXML.FROM_ATT, DOC_META_SERVICE);
    269271        result.setAttribute(GSXML.TYPE_ATT, GSXML.REQUEST_TYPE_PROCESS);
     
    323325        String url_string = ivia_server_url + "/cgi-bin/view_record_set?theme=gsdl3&record_id_list=" + record_id_list.toString() + "&field_list=" + field_list.toString();
    324326
    325         Element node_list = this.doc.createElement(GSXML.DOC_NODE_ELEM + GSXML.LIST_MODIFIER);
     327        Element node_list = result_doc.createElement(GSXML.DOC_NODE_ELEM + GSXML.LIST_MODIFIER);
    326328        result.appendChild(node_list);
    327329        try
     
    337339                // the first line is the record
    338340                line = line.substring(8);
    339                 Element doc_node = this.doc.createElement(GSXML.DOC_NODE_ELEM);
     341                Element doc_node = result_doc.createElement(GSXML.DOC_NODE_ELEM);
    340342                doc_node.setAttribute(GSXML.NODE_ID_ATT, line);
    341                 Element meta_list = this.doc.createElement(GSXML.METADATA_ELEM + GSXML.LIST_MODIFIER);
     343                Element meta_list = result_doc.createElement(GSXML.METADATA_ELEM + GSXML.LIST_MODIFIER);
    342344                doc_node.appendChild(meta_list);
    343345                while ((line = reader.readLine()) != null)
     
    352354                    String name = line.substring(0, col_pos);
    353355                    String value = line.substring(col_pos + 2); // includes a space
    354                     GSXML.addMetadata(this.doc, meta_list, name, value);
     356                    GSXML.addMetadata(meta_list, name, value);
    355357                }
    356358                node_list.appendChild(doc_node);
     
    371373    protected Element processDocumentContentRetrieve(Element request)
    372374    {
    373         Element result = this.doc.createElement(GSXML.RESPONSE_ELEM);
     375      Document result_doc = XMLConverter.newDOM();
     376        Element result = result_doc.createElement(GSXML.RESPONSE_ELEM);
    374377        result.setAttribute(GSXML.FROM_ATT, DOC_CONTENT_SERVICE);
    375378        result.setAttribute(GSXML.TYPE_ATT, GSXML.REQUEST_TYPE_PROCESS);
     
    383386        }
    384387
    385         Element doc_list = this.doc.createElement(GSXML.DOC_NODE_ELEM + GSXML.LIST_MODIFIER);
     388        Element doc_list = result_doc.createElement(GSXML.DOC_NODE_ELEM + GSXML.LIST_MODIFIER);
    386389        result.appendChild(doc_list);
    387390
     
    391394        {
    392395            String doc_id = doc_ids[i];
    393             Element doc_node = getDocument(doc_id);
     396            Element doc_node = getDocument(result_doc, doc_id);
    394397            doc_list.appendChild(doc_node);
    395398        }
     
    402405     * creates a documentNode around the text
    403406     */
    404     protected Element getDocument(String doc_id)
     407  protected Element getDocument(Document result_doc, String doc_id)
    405408    {
    406409
     
    447450        processed_content.append("</nodeContent>");
    448451
    449         Element doc_node = this.doc.createElement(GSXML.DOC_NODE_ELEM);
     452        Element doc_node = result_doc.createElement(GSXML.DOC_NODE_ELEM);
    450453        doc_node.setAttribute(GSXML.NODE_ID_ATT, doc_id);
    451454
     
    454457        {
    455458            Element content_element = content_doc.getDocumentElement();
    456             doc_node.appendChild(this.doc.importNode(content_element, true));
     459            doc_node.appendChild(result_doc.importNode(content_element, true));
    457460        }
    458461        else
Note: See TracChangeset for help on using the changeset viewer.