Changeset 38846


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

some changes for SDL tidy up, also changed the way we add in non displayItem metadata - now we add all elements present, not just a hardcoded list

File:
1 edited

Legend:

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

    r38474 r38846  
    3030    private Element hierarchy = null;
    3131    private Element groupDesc = null;
    32   private HashMap<String, Element> group_descriptions_map = null; // new one for display items
    33 
     32    private HashMap<String, Element> group_displayitems_map = null; // new one for display items
     33    private HashMap<String, Element> group_extras_map = null; // all additional elements go in here, eg <title>
    3434    public static final String GROUP_CONTENT_SERVICE = "GroupCurrentContent";
    3535  // not used??
     
    5454        }
    5555
    56                 group_descriptions_map = new HashMap<String, Element>();
     56                group_displayitems_map = new HashMap<String, Element>();
     57        group_extras_map = new HashMap<String, Element>();
    5758        logger.info("Configuring CollectionGroups...");
    5859        this.config_info = info;
     
    130131                    if (checkedCollection != null) {
    131132                        //Set position value
    132                         checkedCollection.setAttribute(GSXML.POSITION_ATT, String.valueOf(i));
    133                         // Add collection to response
    134                         result_collection_list.appendChild(doc.importNode(checkedCollection, true));
     133                        //  checkedCollection.setAttribute(GSXML.POSITION_ATT, String.valueOf(i));
     134                        Element coll_copy = (Element)doc.importNode(checkedCollection, true);
     135                        coll_copy.setAttribute(GSXML.POSITION_ATT, String.valueOf(i));
     136                        // Add collection to response
     137                        result_collection_list.appendChild(coll_copy);
    135138                    }
    136139                   
     
    162165            } else {
    163166                          Element groupDescription = getPathInfo(groupPath, lang);
    164                 if (groupContent != null){
     167                if (groupDescription != null){
    165168                    result.appendChild(doc.importNode(groupDescription, true));
    166169                }
     
    314317
    315318       
    316         Element currentContent = (Element) hierarchy.cloneNode(true);
     319        Element currentContent = (Element)doc.importNode( hierarchy, true);//.cloneNode(true);
    317320        // Get the current view
    318321        for (int i = 0; i < pathSteps.length; i++) {
    319322            if (!pathSteps[i].isEmpty()) {
    320                 currentContent = GSXML.getNamedElement(currentContent, GSXML.GROUP_ELEM, GSXML.NAME_ATT, pathSteps[i]);
     323                currentContent = GSXML.getNamedElement(currentContent, GSXML.GROUP_ELEM, GSXML.NAME_ATT, pathSteps[i]);
    321324                if (currentContent == null){
    322325                    break;
     
    336339        }
    337340        NodeList nodes = currentContent.getElementsByTagName(GSXML.COLLECTION_ELEM);
    338         for (int i = 0; i < nodes.getLength(); i++) {
    339             Element element = (Element) nodes.item(i);
    340             String name = element.getAttribute(GSXML.NAME_ATT);
    341             Element checkedCollection = GSXML.getNamedElement(checkedCollectionList, GSXML.COLLECTION_ELEM, GSXML.NAME_ATT, name);
    342             if (checkedCollection == null) {
    343                 element.getParentNode().removeChild(element);
    344                 i--;
    345             }
     341   
     342        int num_nodes = nodes.getLength();
     343        for (int i=num_nodes-1; i>=0; i--) {
     344            Element element = (Element) nodes.item(i);
     345            String name = element.getAttribute(GSXML.NAME_ATT);
     346            Element checkedCollection = GSXML.getNamedElement(checkedCollectionList, GSXML.COLLECTION_ELEM, GSXML.NAME_ATT, name);
     347            if (checkedCollection == null) {
     348            currentContent.removeChild(element);
     349           
     350            }
    346351        }
    347352    }
     
    417422     
    418423      //    Document doc = groupDesc.getOwnerDocument();
     424      Document new_doc = XMLConverter.newDOM(); // use for the hash map
    419425        NodeList groups = hierarchy.getElementsByTagName(GSXML.GROUP_ELEM);
    420426        for (int i = 0; i < groups.getLength(); i++) {
     
    432438                                defaultDescription.appendChild(titleDisplayItem);
    433439                groupDesc.appendChild(defaultDescription);
    434             }
    435                         Element this_di_list = doc.createElement("dummy");
     440                foundDescription = defaultDescription;
     441            }
     442       
     443            Element this_di_list = doc.createElement("dummy"+name);
    436444                        DisplayItemUtil.storeDisplayItems(this_di_list, foundDescription);
    437                         group_descriptions_map.put(name, this_di_list);
    438         }
    439        
    440     }
    441 
     445                        group_displayitems_map.put(name, this_di_list);
     446            // find all elements that are not dis
     447            Element this_extras_list = doc.createElement("dummy"+name);
     448            boolean found_items = storeNonDisplayItems(this_extras_list, foundDescription);
     449            if (found_items) {
     450                group_extras_map.put(name, this_extras_list);
     451            }
     452        }
     453       
     454    }
     455
     456    private boolean storeNonDisplayItems(Element new_list, Element description) {
     457    Document doc = new_list.getOwnerDocument();
     458    Node child = description.getFirstChild();
     459    boolean found_some = false;
     460    while (child != null) {
     461        if (child.getNodeType() == Node.ELEMENT_NODE && !child.getNodeName().equals(GSXML.DISPLAY_TEXT_ELEM)) {
     462        new_list.appendChild(doc.importNode(child, true));
     463        found_some = true;
     464        }
     465        child = child.getNextSibling();
     466    }
     467    return found_some;
     468   
     469    }
    442470    private Element getGroupDescriptionOld(String name) {
    443471        Element description = (Element) GSXML.getNamedElement(groupDesc, GSXML.GROUP_ELEM, GSXML.NAME_ATT, name);
     
    449477  private Element getGroupDescription(Document doc, String name, String lang) {
    450478    // get all the display items for group
    451     Element all_di = group_descriptions_map.get(name);
     479    Element all_di = group_displayitems_map.get(name);
    452480    Element new_di_list = doc.createElement(GSXML.GROUP_ELEM);
    453481    new_di_list.setAttribute(GSXML.NAME_ATT, name);
    454     DisplayItemUtil.addLanguageSpecificDisplayItems(new_di_list, all_di, lang, DEFAULT_LANG, this.class_loader);
    455 
    456     // now merge in the old style metadata - to be backwards compatible
     482    synchronized( all_di) {
     483    DisplayItemUtil.addLanguageSpecificDisplayItems(new_di_list, all_di, lang, DEFAULT_LANG, this.class_loader);
     484
     485    }
     486
     487    Element extras = group_extras_map.get(name);
     488    if (extras != null) {
     489    GSXML.copyAllChildren(new_di_list, extras);
     490    }
     491    /**
     492    // now merge in the old style metadata - to be backwards compatible
    457493    Element old_style_desc = (Element) GSXML.getNamedElement(groupDesc, GSXML.GROUP_ELEM, GSXML.NAME_ATT, name);
    458494    if (old_style_desc != null) {
     
    475511      }
    476512    }
     513    */
     514   
    477515    return new_di_list;
    478516   
Note: See TracChangeset for help on using the changeset viewer.