Changeset 30589

Show
Ignore:
Timestamp:
20.06.2016 12:46:42 (4 years ago)
Author:
kjdon
Message:

use the new GSXSLT.findExtraMetadataNames in action and transformingReceptionist instead of these two places each implementing this functionality and doing it differently

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

Legend:

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

    r29556 r30589  
    9292    } 
    9393 
    94     protected void getRequiredMetadataNames(Element format, HashSet<String> meta_names) 
    95     { 
    96         extractMetadataNames(format, meta_names); 
    97         addLinkMetadataNames(format, meta_names); 
    98     } 
    99  
    100     // should change to metadataList?? and use attributes for select rather than 
    101     // prepending parent_ etc 
    102     protected void extractMetadataNames(Element format, HashSet<String> meta_names) 
    103     { 
    104         NodeList metadata_nodes = format.getElementsByTagNameNS(GSXML.GSF_NAMESPACE, "metadata"); // gsf:metadata 
    105         for (int i = 0; i < metadata_nodes.getLength(); i++) 
    106         { 
    107             Element elem = (Element) metadata_nodes.item(i); 
    108             String full_name = elem.getAttribute("name"); 
    109             String select = elem.getAttribute("select"); 
    110              
    111             String []names = full_name.split(","); 
    112             for(int j=0; j<names.length; j++) { 
    113              
    114               String name = names[j]; 
    115               if (!select.equals("")) 
    116                 { 
    117                   name = select + GSConstants.META_RELATION_SEP + name; 
    118                 } 
    119               meta_names.add(name); 
    120             } 
    121         } 
    122  
    123         NodeList foreach_metadata_nodes = format.getElementsByTagNameNS(GSXML.GSF_NAMESPACE, "foreach-metadata"); // gsf:foreach-metadata 
    124         for (int i = 0; i < foreach_metadata_nodes.getLength(); i++) 
    125         { 
    126             Element elem = (Element) foreach_metadata_nodes.item(i); 
    127             String name = elem.getAttribute("name"); 
    128             String select = elem.getAttribute("select"); 
    129  
    130             if (!select.equals("")) 
    131             { 
    132                 name = select + GSConstants.META_RELATION_SEP + name; 
    133             } 
    134             meta_names.add(name); 
    135         } 
    136     } 
    137  
    138     protected void addLinkMetadataNames(Element format, HashSet<String> meta_names) 
    139     { 
    140         // The XSL tranform for 
    141         //   gsf:link type="source"  
    142         // makes use of 'assocfilepath' so need to make sure it's asked for 
    143  
    144         boolean getEquivLinkMeta = false; 
    145  
    146         NodeList link_nodes = format.getElementsByTagNameNS(GSXML.GSF_NAMESPACE, "link"); 
    147         for (int i = 0; i < link_nodes.getLength(); i++) 
    148         { 
    149             Element elem = (Element) link_nodes.item(i); 
    150             String type = elem.getAttribute("type"); 
    151             if (type.equals("source")) 
    152             { 
    153                 meta_names.add("assocfilepath"); 
    154                 meta_names.add("srclinkFile"); 
    155             } 
    156             else if (type.equals("web")) 
    157             { 
    158                 meta_names.add("weblink"); 
    159                 meta_names.add("webicon"); 
    160                 meta_names.add("/weblink"); 
    161             } 
    162             else if (type.equals("equivdoc")) 
    163             { 
    164                 getEquivLinkMeta = true; 
    165             } 
    166         } 
    167  
    168         // get all the metadata necessary for when the user has used "gsf:equivlink" 
    169         // so that we can build up the equivlink from the metadata components it needs 
    170         link_nodes = format.getElementsByTagNameNS(GSXML.GSF_NAMESPACE, "equivlinkgs3"); 
    171         if (getEquivLinkMeta || link_nodes.getLength() > 0) 
    172         { 
    173             String[] equivlink_metanames = { "equivDocIcon", "equivDocLink", "/equivDocLink" }; 
    174  
    175             for (int i = 0; i < equivlink_metanames.length; i++) 
    176             { 
    177                 StringBuffer metadata = new StringBuffer(); 
    178                 metadata.append("all"); // this means the attr multiple = true; 
    179                 metadata.append(GSConstants.META_RELATION_SEP); 
    180  
    181                 metadata.append(GSConstants.META_SEPARATOR_SEP); 
    182                 metadata.append(','); // attr separator = "," 
    183                 metadata.append(GSConstants.META_SEPARATOR_SEP); 
    184                 metadata.append(GSConstants.META_RELATION_SEP); 
    185  
    186                 // the name of the metadata we're retrieving 
    187                 metadata.append(equivlink_metanames[i]); 
    188                 meta_names.add(metadata.toString()); 
    189             } 
    190         } 
    191  
    192         if (format.getElementsByTagNameNS(GSXML.GSF_NAMESPACE, "image").getLength() > 0) 
    193         { 
    194             meta_names.add("Thumb"); 
    195             meta_names.add("Screen"); 
    196             meta_names.add("SourceFile"); 
    197         } 
    198     } 
     94  protected void getRequiredMetadataNames(Element format, HashSet<String> meta_names) { 
     95    GSXSLT.findExtraMetadataNames(format, meta_names); 
     96  } 
     97 
    19998 
    20099    protected Element createMetadataParamList(Document doc, HashSet<String> metadata_names) 
  • main/trunk/greenstone3/src/java/org/greenstone/gsdl3/core/TransformingReceptionist.java

    r30558 r30589  
    219219            } 
    220220 
    221             NodeList metadataElems = currentDoc.getElementsByTagNameNS(GSXML.GSF_NAMESPACE, "metadata"); //gsf:metadata 
    222             NodeList foreachMetadataElems = currentDoc.getElementsByTagNameNS(GSXML.GSF_NAMESPACE, "foreach-metadata"); //gsf:foreach-metadata 
    223             NodeList imageElems = currentDoc.getElementsByTagNameNS(GSXML.GSF_NAMESPACE, "image"); //gsf:image 
     221            HashSet<String> extra_meta_names = new HashSet<String>(); 
     222            GSXSLT.findExtraMetadataNames(currentDoc.getDocumentElement(), extra_meta_names); 
     223            ArrayList<String> names = new ArrayList<String>(extra_meta_names);           
     224 
     225            metaNames.put(currentFile.getAbsolutePath(), names); 
     226 
    224227            NodeList includeElems = currentDoc.getElementsByTagNameNS(GSXML.XSL_NAMESPACE, "include"); 
    225228            NodeList importElems = currentDoc.getElementsByTagNameNS(GSXML.XSL_NAMESPACE, "import"); 
    226229 
    227             ArrayList<String> names = new ArrayList<String>(); 
    228             for (int i = 0; i < metadataElems.getLength(); i++) 
    229             { 
    230                 Element current = (Element) metadataElems.item(i); 
    231                 String name = current.getAttribute(GSXML.NAME_ATT); 
    232                 if (name != null && name.length() > 0 && !names.contains(name)) 
    233                 { 
    234                     names.add(name); 
    235                 } 
    236             } 
    237  
    238             for (int i = 0; i < foreachMetadataElems.getLength(); i++) 
    239             { 
    240                 Element current = (Element) foreachMetadataElems.item(i); 
    241                 String name = current.getAttribute(GSXML.NAME_ATT); 
    242                 if (name != null && name.length() > 0 && !names.contains(name)) 
    243                 { 
    244                     names.add(name); 
    245                 } 
    246             } 
    247  
    248             for (int i = 0; i < imageElems.getLength(); i++) 
    249             { 
    250                 Element current = (Element) imageElems.item(i); 
    251                 String type = current.getAttribute(GSXML.TYPE_ATT); 
    252                 if (type == null || type.length() == 0) 
    253                 { 
    254                     continue; 
    255                 } 
    256  
    257                 if (type.equals("source")) 
    258                 { 
    259                     String[] standardSourceMeta = new String[] { "SourceFile", "ImageHeight", "ImageWidth", "ImageType", "srcicon" }; 
    260                     for (String meta : standardSourceMeta) 
    261                     { 
    262                         if (!names.contains(meta)) 
    263                         { 
    264                             names.add(meta); 
    265                         } 
    266                     } 
    267                 } 
    268                 else if (type.equals("screen")) 
    269                 { 
    270                     String[] standardScreenMeta = new String[] { "Screen", "ScreenHeight", "ScreenWidth", "ScreenType", "screenicon" }; 
    271                     for (String meta : standardScreenMeta) 
    272                     { 
    273                         if (!names.contains(meta)) 
    274                         { 
    275                             names.add(meta); 
    276                         } 
    277                     } 
    278                 } 
    279                 else if (type.equals("thumb")) 
    280                 { 
    281                     String[] standardThumbMeta = new String[] { "Thumb", "ThumbHeight", "ThumbWidth", "ThumbType", "thumbicon" }; 
    282                     for (String meta : standardThumbMeta) 
    283                     { 
    284                         if (!names.contains(meta)) 
    285                         { 
    286                             names.add(meta); 
    287                         } 
    288                     } 
    289                 } 
    290             } 
    291  
    292             metaNames.put(currentFile.getAbsolutePath(), names); 
    293230 
    294231            ArrayList<String> includeAndImportList = new ArrayList<String>(); 
     
    11681105            try 
    11691106            { 
    1170                 Document inlineTemplateDoc = this.converter.getDOM("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"" + GSXML.XSL_NAMESPACE + "\" xmlns:java=\"" + GSXML.JAVA_NAMESPACE + "\" xmlns:util=\"" + GSXML.UTIL_NAMESPACE + "\" xmlns:gsf=\"" + GSXML.GSF_NAMESPACE + "\">" + inlineTemplate + "</xsl:stylesheet>", "UTF-8"); 
     1107                Document inlineTemplateDoc = this.converter.getDOM("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<xsl:stylesheet version=\"1.0\" "+GSXML.ALL_NAMESPACES_ATTS + "\">" + inlineTemplate + "</xsl:stylesheet>", "UTF-8"); 
    11711108 
    11721109                if (_debug)