Changeset 25926

Show
Ignore:
Timestamp:
10.07.2012 16:28:41 (8 years ago)
Author:
sjm84
Message:

Changing the merge method so that it allows for modes

Location:
main/trunk/greenstone3/src/java/org/greenstone/gsdl3/util
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • main/trunk/greenstone3/src/java/org/greenstone/gsdl3/util/GSXML.java

    r25925 r25926  
    935935        // not found 
    936936        return null; 
    937  
     937    } 
     938 
     939    public static NodeList getNamedElementsNS(Element parent, String namespace_uri, String node_local_name, String attribute_name, String attribute_value) 
     940    { 
     941        MyNodeList result = new MyNodeList(); 
     942        NodeList children = parent.getChildNodes(); 
     943        for (int i = 0; i < children.getLength(); i++) 
     944        { 
     945            Node child = children.item(i); 
     946            if (child.getNodeType() == Node.ELEMENT_NODE && child.getNamespaceURI().equals(namespace_uri) && child.getLocalName().equals(node_local_name)) 
     947            { 
     948                if (((Element) child).getAttribute(attribute_name).equals(attribute_value)) 
     949                    result.addNode(child); 
     950            } 
     951        } 
     952        return result; 
     953    } 
     954 
     955    public static NodeList getElementsWithAttributesNS(Element parent, String namespace_uri, String node_local_name, String[] attribute_names, String[] attribute_values) 
     956    { 
     957        if (attribute_names.length == 0 || attribute_names.length != attribute_values.length) 
     958        { 
     959            return new MyNodeList(); 
     960        } 
     961 
     962        MyNodeList result = new MyNodeList(); 
     963 
     964        NodeList matchingNodes = GSXML.getNamedElementsNS(parent, namespace_uri, node_local_name, attribute_names[0], attribute_values[0]); 
     965        for (int i = 0; i < matchingNodes.getLength(); i++) 
     966        { 
     967            Element current = (Element) matchingNodes.item(i); 
     968            boolean nodeMatches = true; 
     969            for (int j = 1; j < attribute_names.length; j++) 
     970            { 
     971                String currentName = attribute_names[j]; 
     972                String currentValue = attribute_values[j]; 
     973                if (!current.getAttribute(currentName).equals(currentValue)) 
     974                { 
     975                    nodeMatches = false; 
     976                    break; 
     977                } 
     978            } 
     979 
     980            if (nodeMatches) 
     981            { 
     982                result.addNode(current); 
     983            } 
     984        } 
     985 
     986        return result; 
     987    } 
     988 
     989    public static void removeElementsWithAttributesNS(Element parent, String namespace_uri, String node_local_name, String[] attribute_names, String[] attribute_values) 
     990    { 
     991        NodeList matchingNodes = GSXML.getElementsWithAttributesNS(parent, namespace_uri, node_local_name, attribute_names, attribute_values); 
     992        for (int i = 0; i < matchingNodes.getLength(); i++) 
     993        { 
     994            parent.removeChild(matchingNodes.item(i)); 
     995        } 
    938996    } 
    939997 
     
    9551013            parent.removeChild(old_elem); 
    9561014        } 
    957  
    9581015    } 
    9591016 
  • main/trunk/greenstone3/src/java/org/greenstone/gsdl3/util/GSXSLT.java

    r25924 r25926  
    163163            { 
    164164                // if we have a name attribute, remove any other similarly named template 
    165                 if (!template_name.equals("")) 
    166                 { 
    167                     GSXML.removeNamedElementNS(main, "http://www.w3.org/1999/XSL/Transform", "template", "name", template_name); 
    168                 } 
    169                 // if we have a match attribute, remove other templates that match -  
    170                 if (!template_match.equals("")) 
    171                 { 
    172                     GSXML.removeNamedElementsNS(main, "http://www.w3.org/1999/XSL/Transform", "template", "match", template_match); 
    173                 } 
     165                GSXML.removeElementsWithAttributesNS(main, "http://www.w3.org/1999/XSL/Transform", "template", new String[]{"name", "match", "mode"}, new String[]{template_name, template_match, template_mode}); 
     166 
    174167                // now add our good template in 
    175168                main.appendChild(main_xsl.importNode(node, true)); 
     
    181174                // there can't be any duplicate named templates, so just look for matches 
    182175                // we already have the one with highest import precedence (from the top most level) so don't add any more in 
    183                 if (GSXML.getNamedElementNS(main, "http://www.w3.org/1999/XSL/Transform", "template", "match", template_match) == null) 
    184                 { 
    185                     main.appendChild(main_xsl.importNode(node, true)); 
    186                 } 
    187  
    188                 if (GSXML.getNamedElementNS(main, "http://www.w3.org/1999/XSL/Transform", "template", "name", template_name) == null) 
     176                if (GSXML.getElementsWithAttributesNS(main, "http://www.w3.org/1999/XSL/Transform", "template", new String[]{"name", "match", "mode"}, new String[]{template_name, template_match, template_mode}).getLength() == 0) 
    189177                { 
    190178                    main.appendChild(main_xsl.importNode(node, true));