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

    r28181 r28966  
    2626import org.greenstone.gsdl3.util.FacetWrapper;
    2727import org.greenstone.gsdl3.util.GSXML;
     28import org.greenstone.gsdl3.util.XMLConverter;
     29
    2830import org.w3c.dom.Document;
    2931import org.w3c.dom.Element;
     
    226228        {
    227229            // set up short_service_info_ - for now just has id and type - name will be added in on the fly
    228             Element fq_service = this.doc.createElement(GSXML.SERVICE_ELEM);
     230            Element fq_service = this.desc_doc.createElement(GSXML.SERVICE_ELEM);
    229231            fq_service.setAttribute(GSXML.TYPE_ATT, GSXML.SERVICE_TYPE_QUERY);
    230232            fq_service.setAttribute(GSXML.NAME_ATT, FIELD_QUERY_SERVICE);
     
    239241        if (this.advanced_form_search)
    240242        {
    241             Element afq_service = this.doc.createElement(GSXML.SERVICE_ELEM);
     243            Element afq_service = this.desc_doc.createElement(GSXML.SERVICE_ELEM);
    242244            afq_service.setAttribute(GSXML.TYPE_ATT, GSXML.SERVICE_TYPE_QUERY);
    243245            afq_service.setAttribute(GSXML.NAME_ATT, ADVANCED_FIELD_QUERY_SERVICE);
     
    252254        if (this.raw_search)
    253255        {
    254             Element rq_service = this.doc.createElement(GSXML.SERVICE_ELEM);
     256            Element rq_service = this.desc_doc.createElement(GSXML.SERVICE_ELEM);
    255257            rq_service.setAttribute(GSXML.TYPE_ATT, GSXML.SERVICE_TYPE_QUERY);
    256258            rq_service.setAttribute(GSXML.NAME_ATT, RAW_QUERY_SERVICE);
     
    299301    }
    300302  }
    301     protected Element getServiceDescription(String service_id, String lang, String subset)
     303  protected Element getServiceDescription(Document doc, String service_id, String lang, String subset)
    302304    {
    303305        // should we check that the service is actually on offer? presumably we wont get asked for services that we haven't advertised previously.
     
    305307        if (!service_id.equals(FIELD_QUERY_SERVICE) && !service_id.equals(ADVANCED_FIELD_QUERY_SERVICE) && !service_id.equals(RAW_QUERY_SERVICE))
    306308        {
    307             return super.getServiceDescription(service_id, lang, subset);
    308         }
    309 
    310         Element service = this.doc.createElement(GSXML.SERVICE_ELEM);
     309          return super.getServiceDescription(doc, service_id, lang, subset);
     310        }
     311
     312        Element service = doc.createElement(GSXML.SERVICE_ELEM);
    311313        service.setAttribute(GSXML.TYPE_ATT, GSXML.SERVICE_TYPE_QUERY);
    312314        service.setAttribute(GSXML.NAME_ATT, service_id);
    313315        if (subset == null || subset.equals(GSXML.DISPLAY_TEXT_ELEM + GSXML.LIST_MODIFIER))
    314316        {
    315             service.appendChild(GSXML.createDisplayTextElement(this.doc, GSXML.DISPLAY_TEXT_NAME, getTextString(service_id + ".name", lang)));
    316             service.appendChild(GSXML.createDisplayTextElement(this.doc, GSXML.DISPLAY_TEXT_SUBMIT, getTextString(service_id + ".submit", lang)));
    317             service.appendChild(GSXML.createDisplayTextElement(this.doc, GSXML.DISPLAY_TEXT_DESCRIPTION, getTextString(service_id + ".description", lang)));
     317            service.appendChild(GSXML.createDisplayTextElement(doc, GSXML.DISPLAY_TEXT_NAME, getTextString(service_id + ".name", lang)));
     318            service.appendChild(GSXML.createDisplayTextElement(doc, GSXML.DISPLAY_TEXT_SUBMIT, getTextString(service_id + ".submit", lang)));
     319            service.appendChild(GSXML.createDisplayTextElement(doc, GSXML.DISPLAY_TEXT_DESCRIPTION, getTextString(service_id + ".description", lang)));
    318320
    319321        }
    320322        if (subset == null || subset.equals(GSXML.PARAM_ELEM + GSXML.LIST_MODIFIER))
    321323        {
    322             Element param_list = this.doc.createElement(GSXML.PARAM_ELEM + GSXML.LIST_MODIFIER);
     324            Element param_list = doc.createElement(GSXML.PARAM_ELEM + GSXML.LIST_MODIFIER);
    323325            service.appendChild(param_list);
    324326            if (service_id.equals(FIELD_QUERY_SERVICE))
     
    346348                Element multiparam = null;
    347349                Element param = null;
    348                 multiparam = GSXML.createParameterDescription(this.doc, SIMPLE_FIELD_PARAM, "", GSXML.PARAM_TYPE_MULTI, null, null, null);
     350                multiparam = GSXML.createParameterDescription(doc, SIMPLE_FIELD_PARAM, "", GSXML.PARAM_TYPE_MULTI, null, null, null);
    349351                multiparam.setAttribute("occurs", "4");
    350352                param_list.appendChild(multiparam);
     
    376378                Element param = null;
    377379
    378                 multiparam = GSXML.createParameterDescription(this.doc, ADVANCED_FIELD_PARAM, "", GSXML.PARAM_TYPE_MULTI, null, null, null);
     380                multiparam = GSXML.createParameterDescription(doc, ADVANCED_FIELD_PARAM, "", GSXML.PARAM_TYPE_MULTI, null, null, null);
    379381                multiparam.setAttribute("occurs", "4");
    380382                param_list.appendChild(multiparam);
     
    431433    protected void createParameter(String name, Element param_list, String lang)
    432434    {
     435      Document doc = param_list.getOwnerDocument();
    433436        Element param = null;
    434437        String param_default = paramDefaults.get(name);
     
    441444            {
    442445                // the first one is the default
    443                 //param = GSXML.createParameterDescription2(this.doc, LEVEL_PARAM, getTextString("param."+LEVEL_PARAM, lang), GSXML.PARAM_TYPE_ENUM_SINGLE, (String)level_ids.get(0), level_ids, level_names);
    444                 param = GSXML.createParameterDescription2(this.doc, LEVEL_PARAM, getTextString("param." + LEVEL_PARAM, lang), GSXML.PARAM_TYPE_ENUM_SINGLE, this.default_level, level_ids, level_names);
     446                //param = GSXML.createParameterDescription2(doc, LEVEL_PARAM, getTextString("param."+LEVEL_PARAM, lang), GSXML.PARAM_TYPE_ENUM_SINGLE, (String)level_ids.get(0), level_ids, level_names);
     447                param = GSXML.createParameterDescription2(doc, LEVEL_PARAM, getTextString("param." + LEVEL_PARAM, lang), GSXML.PARAM_TYPE_ENUM_SINGLE, this.default_level, level_ids, level_names);
    445448            }
    446449            else
    447450            {
    448451                // we need to set the level, but hidden, in case there is an invalid level saved
    449                 //param = GSXML.createParameterDescription(this.doc, LEVEL_PARAM, "", GSXML.PARAM_TYPE_INVISIBLE, (String)level_ids.get(0), null, null);
    450                 param = GSXML.createParameterDescription(this.doc, LEVEL_PARAM, "", GSXML.PARAM_TYPE_INVISIBLE, this.default_level, null, null);
     452                //param = GSXML.createParameterDescription(doc, LEVEL_PARAM, "", GSXML.PARAM_TYPE_INVISIBLE, (String)level_ids.get(0), null, null);
     453                param = GSXML.createParameterDescription(doc, LEVEL_PARAM, "", GSXML.PARAM_TYPE_INVISIBLE, this.default_level, null, null);
    451454            }
    452455        }
     
    456459            String[] vals1_texts = { getTextString("param." + RANK_PARAM + "." + RANK_PARAM_RANK, lang), getTextString("param." + RANK_PARAM + "." + RANK_PARAM_NONE, lang) };
    457460
    458             param = GSXML.createParameterDescription(this.doc, RANK_PARAM, getTextString("param." + RANK_PARAM, lang), GSXML.PARAM_TYPE_ENUM_SINGLE, param_default, vals1, vals1_texts);
     461            param = GSXML.createParameterDescription(doc, RANK_PARAM, getTextString("param." + RANK_PARAM, lang), GSXML.PARAM_TYPE_ENUM_SINGLE, param_default, vals1, vals1_texts);
    459462
    460463        }
    461464        else if (name.equals(FIELD_QUERY_PARAM))
    462465        {
    463             param = GSXML.createParameterDescription(this.doc, FIELD_QUERY_PARAM, getTextString("param." + FIELD_QUERY_PARAM, lang), GSXML.PARAM_TYPE_STRING, null, null, null);
     466            param = GSXML.createParameterDescription(doc, FIELD_QUERY_PARAM, getTextString("param." + FIELD_QUERY_PARAM, lang), GSXML.PARAM_TYPE_STRING, null, null, null);
    464467
    465468        }
     
    468471            String[] bool_ops = { "0", "1" };
    469472            String[] bool_texts = { getTextString("param.boolean.off", lang, "AbstractTextSearch"), getTextString("param.boolean.on", lang, "AbstractTextSearch") };
    470             param = GSXML.createParameterDescription(this.doc, name, getTextString("param." + name, lang), GSXML.PARAM_TYPE_BOOLEAN, param_default, bool_ops, bool_texts);
     473            param = GSXML.createParameterDescription(doc, name, getTextString("param." + name, lang), GSXML.PARAM_TYPE_BOOLEAN, param_default, bool_ops, bool_texts);
    471474
    472475        }
     
    481484            // org.greenstone.gsdl3.service.AbstractGS2FieldSearch.createParameter(AbstractGS2FieldSearch.java:362)
    482485            // Changed from:
    483             // param = GSXML.createParameterDescription2(this.doc, name, getTextString("param."+name, lang), GSXML.PARAM_TYPE_ENUM_SINGLE, (String)fields.get(0), fields, field_names );
     486            // param = GSXML.createParameterDescription2(doc, name, getTextString("param."+name, lang), GSXML.PARAM_TYPE_ENUM_SINGLE, (String)fields.get(0), fields, field_names );
    484487            String default_value = (fields.size() > 0) ? fields.get(0) : null;
    485488            // don't want to access element 0 if fields.size()==0, and
    486489            // GSXML.createParameterDescription2 checks for default_value==null condition
    487             param = GSXML.createParameterDescription2(this.doc, name, getTextString("param." + name, lang), GSXML.PARAM_TYPE_ENUM_SINGLE, default_value, fields, field_names);
     490            param = GSXML.createParameterDescription2(doc, name, getTextString("param." + name, lang), GSXML.PARAM_TYPE_ENUM_SINGLE, default_value, fields, field_names);
    488491
    489492        }
     
    494497            String[] val_texts = { getTextString("param." + FIELD_COMBINE_PARAM + "." + FIELD_COMBINE_PARAM_AND, lang), getTextString("param." + FIELD_COMBINE_PARAM + "." + FIELD_COMBINE_PARAM_OR, lang), getTextString("param." + FIELD_COMBINE_PARAM + "." + FIELD_COMBINE_PARAM_NOT, lang) };
    495498
    496             param = GSXML.createParameterDescription(this.doc, FIELD_COMBINE_PARAM, "", GSXML.PARAM_TYPE_ENUM_SINGLE, param_default, vals, val_texts);
     499            param = GSXML.createParameterDescription(doc, FIELD_COMBINE_PARAM, "", GSXML.PARAM_TYPE_ENUM_SINGLE, param_default, vals, val_texts);
    497500            param.setAttribute(GSXML.PARAM_IGNORE_POS_ATT, "0");
    498501        }
     
    596599
    597600        // Create a new (empty) result message
    598         Element result = this.doc.createElement(GSXML.RESPONSE_ELEM);
     601        Document result_doc = XMLConverter.newDOM();
     602        Element result = result_doc.createElement(GSXML.RESPONSE_ELEM);
    599603        result.setAttribute(GSXML.FROM_ATT, service_name);
    600604        result.setAttribute(GSXML.TYPE_ATT, GSXML.REQUEST_TYPE_PROCESS);
     
    652656        // Create a metadata list to store information about the query results
    653657        // should we be using metadataList? or something else?
    654         Element metadata_list = this.doc.createElement(GSXML.METADATA_ELEM + GSXML.LIST_MODIFIER);
     658        Element metadata_list = result_doc.createElement(GSXML.METADATA_ELEM + GSXML.LIST_MODIFIER);
    655659        result.appendChild(metadata_list);
    656660
     
    658662        long totalDocs = numDocsMatched(query_result);
    659663
    660         GSXML.addMetadata(this.doc, metadata_list, "numDocsMatched", "" + totalDocs);
     664        GSXML.addMetadata(metadata_list, "numDocsMatched", "" + totalDocs);
    661665
    662666        // Create a document list to store the matching documents, and add them
     
    675679            }
    676680        }
    677         GSXML.addMetadata(this.doc, metadata_list, "numDocsReturned", "" + docs_returned);
     681        GSXML.addMetadata(metadata_list, "numDocsReturned", "" + docs_returned);
    678682
    679683        // add a metadata item to specify what actual query was done - eg if stuff was stripped out etc. and then we can use the query later, cos we don't know which parameter was the query
    680         GSXML.addMetadata(this.doc, metadata_list, "query", query);
     684        GSXML.addMetadata(metadata_list, "query", query);
    681685        if (docs.length > 0)
    682686        {
    683             Element document_list = this.doc.createElement(GSXML.DOC_NODE_ELEM + GSXML.LIST_MODIFIER);
     687            Element document_list = result_doc.createElement(GSXML.DOC_NODE_ELEM + GSXML.LIST_MODIFIER);
    684688            result.appendChild(document_list);
    685689            for (int d = 0; d < docs.length; d++)
    686690            {
    687691                String doc_id = internalNum2OID(docs[d]);
    688                 Element doc_node = createDocNode(doc_id, doc_ranks[d]);
     692                Element doc_node = createDocNode(result_doc, doc_id, doc_ranks[d]);
    689693                document_list.appendChild(doc_node);
    690694            }
     
    692696
    693697        // Create a term list to store the term information, and add it
    694         Element term_list = this.doc.createElement(GSXML.TERM_ELEM + GSXML.LIST_MODIFIER);
     698        Element term_list = result_doc.createElement(GSXML.TERM_ELEM + GSXML.LIST_MODIFIER);
    695699        result.appendChild(term_list);
    696700        addTermInfo(term_list, params, query_result);
     
    701705            if(facets != null)
    702706            {
    703                 Element facet_list = this.doc.createElement(GSXML.FACET_ELEM + GSXML.LIST_MODIFIER);
     707                Element facet_list = result_doc.createElement(GSXML.FACET_ELEM + GSXML.LIST_MODIFIER);
    704708                result.appendChild(facet_list);
    705709
    706710                for(FacetWrapper currentFacet : facets)
    707711                {
    708                     Element facet_elem = this.doc.createElement(GSXML.FACET_ELEM);
     712                    Element facet_elem = result_doc.createElement(GSXML.FACET_ELEM);
    709713                    facet_elem.setAttribute(GSXML.NAME_ATT, currentFacet.getName());
    710714                    facet_list.appendChild(facet_elem);
     
    717721                        if(countValue > 0)
    718722                        {
    719                             Element count_elem = this.doc.createElement(GSXML.COUNT_ELEM);
     723                            Element count_elem = result_doc.createElement(GSXML.COUNT_ELEM);
    720724                            count_elem.setAttribute(GSXML.NAME_ATT, countName);
    721725                            count_elem.setTextContent("" + countValue);
Note: See TracChangeset for help on using the changeset viewer.