Changeset 30589


Ignore:
Timestamp:
2016-06-20T12:46:42+12:00 (8 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 edited

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)
Note: See TracChangeset for help on using the changeset viewer.