Changeset 38847


Ignore:
Timestamp:
2024-03-14T10:58:02+13:00 (2 months ago)
Author:
kjdon
Message:

committing tidy up code changes from SDL. There was somehting wring with displayitems - they kept going missing. Theory - nodelist is not synchronised, so two threads accessing the same bit of code would interfere with each other? even though read only? Anyway, synchronising on the display_item_list seems to have fixed that problem. other little bits of tidy up to make sure we are never editing underlying xml dom.

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

Legend:

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

    r37513 r38847  
    170170    protected void addSiteMetadata(Element element, UserContext userContext)
    171171    {
    172         Document doc = element.getOwnerDocument();
    173        
     172
     173        Document doc = XMLConverter.newDOM();
    174174        //ADD SITE METADATA
    175175        Element metadata_request = GSXML.createBasicRequest(doc, GSXML.REQUEST_TYPE_DESCRIBE, "", userContext);
     
    184184        Element metadata_message = doc.createElement(GSXML.MESSAGE_ELEM);
    185185        metadata_message.appendChild(metadata_request);
     186   
    186187        //get response
    187188        Element metadata_response_message = (Element) this.mr.process(metadata_message);
    188189        //drill down to response
    189190        Element metadata_response = (Element) GSXML.getChildByTagName(metadata_response_message, GSXML.RESPONSE_ELEM);
     191   
    190192        //merge in metadata
    191193        // *************** need to merge the displayItem lists too
    192194        GSXML.mergeMetadataLists(element, metadata_response);
    193195        GSXML.mergeSpecifiedLists(element, metadata_response, GSXML.DISPLAY_TEXT_ELEM);
     196   
    194197    }
    195198
  • main/trunk/greenstone3/src/java/org/greenstone/gsdl3/action/QueryAction.java

    r37514 r38847  
    299299        String collectionsHierarchy = "CollectionsHierarchy";
    300300        if (checkServiceAvailable(userContext, collectionsHierarchy)){
    301             Element groupQueryMessage = doc.createElement(GSXML.MESSAGE_ELEM);
    302             Element groupQueryRequest = GSXML.createBasicRequest(doc, GSXML.REQUEST_TYPE_PROCESS, collectionsHierarchy, userContext);
     301            Document new_doc = XMLConverter.newDOM();
     302            Element groupQueryMessage = new_doc.createElement(GSXML.MESSAGE_ELEM);
     303            Element groupQueryRequest = GSXML.createBasicRequest(new_doc, GSXML.REQUEST_TYPE_PROCESS, collectionsHierarchy, userContext);
    303304            groupQueryMessage.appendChild(groupQueryRequest);
    304305            Element groupQueryResult = (Element) this.mr.process(groupQueryMessage);
     
    311312            }
    312313            Element hierarchy = (Element) GSXML.getChildByTagName(groupQueryResponse, GSXML.HIERARCHY_ELEM);
    313             page_response.appendChild(doc.importNode(hierarchy, true));
     314            if (hierarchy != null) {
     315                page_response.appendChild(doc.importNode(hierarchy, true));
     316            }
    314317        }
    315318       
  • main/trunk/greenstone3/src/java/org/greenstone/gsdl3/collection/ServiceCluster.java

    r35362 r38847  
    674674              Element di_list = result_doc.createElement(GSXML.DISPLAY_TEXT_ELEM + GSXML.LIST_MODIFIER);
    675675              description.appendChild(di_list);
    676               DisplayItemUtil.addLanguageSpecificDisplayItems(di_list, this.display_item_list, lang, DEFAULT_LANG, this.class_loader);
     676              synchronized (this.display_item_list) {
     677                  DisplayItemUtil.addLanguageSpecificDisplayItems(di_list, this.display_item_list, lang, DEFAULT_LANG, this.class_loader);
     678              }
    677679                description.appendChild(result_doc.importNode(this.service_list, true));
    678680                description.appendChild(result_doc.importNode(this.metadata_list, true));
  • main/trunk/greenstone3/src/java/org/greenstone/gsdl3/collection/XMLCollection.java

    r30837 r38847  
    8989          Element di_list = response_doc.createElement(GSXML.DISPLAY_TEXT_ELEM + GSXML.LIST_MODIFIER);
    9090          description.appendChild(di_list);
    91           DisplayItemUtil.addLanguageSpecificDisplayItems(di_list, this.display_item_list, lang, DEFAULT_LANG, this.class_loader);
    92          
     91          synchronized(this.display_item_list) {
     92          DisplayItemUtil.addLanguageSpecificDisplayItems(di_list, this.display_item_list, lang, DEFAULT_LANG, this.class_loader);
     93          }
    9394        description.appendChild(response_doc.importNode(this.service_list, true));
    9495        description.appendChild(response_doc.importNode(this.metadata_list, true));
  • main/trunk/greenstone3/src/java/org/greenstone/gsdl3/core/MessageRouter.java

    r38372 r38847  
    392392        if (this.module_map != null)
    393393        {
     394            // call cleanUp on each module referenced in the map
    394395            Iterator<ModuleInterface> i = this.module_map.values().iterator();
    395396            while (i.hasNext())
     
    398399               
    399400                i_next.cleanUp();
    400                 i.remove();
    401             }
     401                // i.remove();
     402            }
     403            // now remove all mappings from the HashMap
     404            this.module_map.clear();
    402405        }
    403406    }
     
    480483
    481484        this.config_info = config_doc.getDocumentElement();
    482 
    483485        // load up the services: serviceRackList
    484486        Document doc = XMLConverter.newDOM();
     
    511513        Element display_item_list_elem = (Element) GSXML.getChildByTagName(config_info, GSXML.DISPLAY_TEXT_ELEM + GSXML.LIST_MODIFIER);
    512514        DisplayItemUtil.storeDisplayItems(this.display_item_list, display_item_list_elem);
     515
     516        // load up any site format info
    513517        Element format_elem = (Element) GSXML.getChildByTagName(config_info, GSXML.FORMAT_ELEM);
    514518        configureFormat(format_elem);
     
    11241128                Element di_list = doc.createElement(GSXML.DISPLAY_TEXT_ELEM + GSXML.LIST_MODIFIER);
    11251129                response.appendChild(di_list);
    1126                 DisplayItemUtil.addLanguageSpecificDisplayItems(di_list, this.display_item_list, lang, DEFAULT_LANG, this.class_loader);
    1127                 return response;
     1130
     1131                if (this.display_item_list != null) {
     1132                    synchronized (this.display_item_list) {
     1133                    DisplayItemUtil.addLanguageSpecificDisplayItems(di_list, this.display_item_list, lang, DEFAULT_LANG, this.class_loader);
     1134                    return response;
     1135                    }
     1136                }
    11281137            }
    11291138
     
    11631172                      Element di_list = doc.createElement(GSXML.DISPLAY_TEXT_ELEM + GSXML.LIST_MODIFIER);
    11641173                      response.appendChild(di_list);
    1165                       DisplayItemUtil.addLanguageSpecificDisplayItems(di_list, this.display_item_list, lang, DEFAULT_LANG, this.class_loader);
    1166                      
     1174
     1175                      if (this.display_item_list != null) {
     1176                          synchronized (this.display_item_list) {
     1177                   
     1178                          DisplayItemUtil.addLanguageSpecificDisplayItems(di_list, this.display_item_list, lang, DEFAULT_LANG, this.class_loader);
     1179                         
     1180                          }
     1181                      }
    11671182                    }
    11681183                }
  • main/trunk/greenstone3/src/java/org/greenstone/gsdl3/util/DisplayItemUtil.java

    r36970 r38847  
    5959    Document doc = display_item_list.getOwnerDocument();
    6060    NodeList displaynodes = config.getElementsByTagName(GSXML.DISPLAY_TEXT_ELEM);
    61     if (displaynodes.getLength() > 0) {
     61    int num_nodes = displaynodes.getLength();
     62    if (num_nodes > 0) {
    6263     
    63       for (int k = 0; k < displaynodes.getLength(); k++) {
     64    for (int k = 0; k < num_nodes; k++) {
    6465    Element d = (Element) displaynodes.item(k);
    6566    String name = d.getAttribute(GSXML.NAME_ATT);
     
    8182    /** Choose the best displayItem from a list - that matches lang - and return a copy of it created by doc. */
    8283    public static Element chooseBestMatchDisplayItem(Document doc, Element display_item_list, String lang, String default_lang, ClassLoader class_loader) {
    83 
     84    if (display_item_list == null) {
     85        return null;
     86    }
    8487
    8588    // is there one with the specified language?
     
    9699        if (value != null) {
    97100        // copy the node now. Don't want to be modifying the underlying list as can lead to concurrent access problems.
    98         best_di = (Element)doc.importNode(best_di, true);
    99         GSXML.setNodeText(best_di, value);
    100         return best_di;
     101        Element new_di = (Element)doc.importNode(best_di, true);
     102        GSXML.setNodeText(new_di, value);
     103        return new_di;
    101104        }
    102105    }
     
    122125    Document doc = description.getOwnerDocument();
    123126    NodeList items = display_item_list.getChildNodes();
     127   
    124128    for (int i = 0; i < items.getLength(); i++)
    125129      { // for each key
    126130    Element di_list = (Element) items.item(i);
     131    // takes a copy of the best matching item
    127132    Element new_m = chooseBestMatchDisplayItem(doc, di_list, lang, default_lang, class_loader);
    128133
Note: See TracChangeset for help on using the changeset viewer.