Changeset 21761

Show
Ignore:
Timestamp:
03.03.2010 14:59:22 (10 years ago)
Author:
kjdon
Message:

adding code to provide a URL in a dc.identifier field to link to the document. half finished

Location:
main/trunk/greenstone2/runtime-src/src/oaiservr
Files:
4 modified

Legend:

Unmodified
Added
Removed
  • main/trunk/greenstone2/runtime-src/src/oaiservr/dublincore.cpp

    r18895 r21761  
    11 
    22#include "dublincore.h" 
     3#include "gsdltools.h" 
    34 
    45dublin_core::dublin_core() : metaformat() { 
     
    7273} 
    7374 
     75bool dublin_core::output_custom_metadata(ostream &output, outconvertclass &outconvert, bool &headerDone, const text_t &collection, ResultDocInfo_t &docInfo) { 
     76  text_t value = get_metadata_value(docInfo, "srclink_file"); 
     77  if (value.empty()) { 
     78    value = "gs doc"; // todo, situation where no source doc. 
     79  } else { 
     80    if (starts_with(value, "[")) { 
     81      // its a format statement type value eg [SourceFile], need to get the appropriate metadata 
     82      value = substr(findchar(value.begin(), value.end(), '[')+1,findchar(value.begin(), value.end(), ']') ); 
     83      value = get_metadata_value(docInfo, value); 
     84    } 
     85  } 
     86  if (!value.empty()) { 
     87    text_t assocfilepath = get_metadata_value(docInfo, "assocfilepath"); 
     88    if (!assocfilepath.empty()) { 
     89      value = this->oaiConfigure->getCollectionConfig("", "baseDocRoot")+"/collect/"+collection+"/index/assoc/"+assocfilepath+"/"+value; 
     90    } else { 
     91      value = ""; 
     92    } 
     93     
     94  }  
     95  if (!value.empty()) { 
     96    if (!headerDone) { 
     97      this->output_metadata_header(output); 
     98      headerDone = true; 
     99    } 
     100    if (this->oaiConfigure->getOAIVersion() >= 200) {  
     101      output << outconvert << "        <dc:identifier>" << xml_safe(value) << "</dc:identifier>\n"; 
     102    } 
     103    else { 
     104      output << outconvert << "        <identifier>"  << xml_safe(value) << "</identifier>\n"; 
     105    } 
     106  } 
     107} 
     108 
    74109bool dublin_core::output_formatdata(ostream &output) 
    75110{ 
  • main/trunk/greenstone2/runtime-src/src/oaiservr/dublincore.h

    r18895 r21761  
    66  virtual void output_metadata_header(ostream &output); 
    77  virtual void output_metadata_footer(ostream &output); 
    8  
     8  virtual bool output_custom_metadata(ostream &output, outconvertclass &outconvert, bool &headerDone, const text_t &collection, ResultDocInfo_t &docInfo); 
    99 public: 
    1010  dublin_core();  
  • main/trunk/greenstone2/runtime-src/src/oaiservr/metaformat.cpp

    r21605 r21761  
    3939} 
    4040 
     41bool metaformat::output_custom_metadata(ostream &output, outconvertclass &outconvert, bool &headerDone, const text_t &collection, ResultDocInfo_t &docInfo) { 
     42  return false; 
     43} 
    4144bool metaformat::scan_metadata(ostream &output, const text_t &collection, ResultDocInfo_t &docInfo, 
    4245                   bool doOutput)  
     
    7073    text_t mapTo = this->get_mapping(collection, here->first); 
    7174    if (mapTo != "") { 
    72       // Do we actually want to do anything here? Doesn't getting here imply that this  
    73       // particular metadata is stuff we don't want? 
    7475      if (doOutput) { 
    7576    if (this->is_valid_element(mapTo)) { 
     
    8586 
    8687    // Otherwise try to map the element automatically 
    87     // For example, dc.X is mapped to oai_dc.X (doesn't check X is a valid Dublin Core element though) 
     88    // For example, dc.X is mapped to oai_dc.X  
    8889    else if (metaItem == this->formatPrefix()) { 
    8990      metaItem = substr(last+1, here->first.end()); // Get the rest of the metadata tag (it's name) but without the '.' 
     
    117118    return false; 
    118119  } 
    119    
     120  // specific metadata formats might need to do some custom metadata that is not just a standard mapping. eg oai_dc outputting an identifier that is a link 
     121  this->output_custom_metadata(output, utf8convert, headerDone, collection, docInfo);  
    120122  if (headerDone) { 
     123 
    121124    this->output_metadata_footer(output); 
    122125  } 
     
    125128} 
    126129 
     130text_t metaformat::get_metadata_value(ResultDocInfo_t &docInfo, const text_t &meta_name) { 
     131  MetadataInfo_tmap::iterator here = docInfo.metadata.find(meta_name); 
     132  if (here == docInfo.metadata.end()) { 
     133    return ""; 
     134  } 
     135  return here->second.values[0]; 
     136   
     137} 
     138 
     139void metaformat::get_metadata_values(ResultDocInfo_t &docInfo, const text_t &meta_name, text_tarray &values) { 
     140  MetadataInfo_tmap::iterator here = docInfo.metadata.find(meta_name); 
     141  if (here != docInfo.metadata.end()) { 
     142    values = here->second.values; 
     143  } 
     144} 
    127145 
    128146bool metaformat::is_available(const text_t &collection, ResultDocInfo_t &docInfo) 
  • main/trunk/greenstone2/runtime-src/src/oaiservr/metaformat.h

    r18895 r21761  
    2626  virtual bool scan_metadata(ostream &output, const text_t &collection,   
    2727                 ResultDocInfo_t &docInfo, bool doOutput); 
     28  virtual bool output_custom_metadata(ostream &output, outconvertclass &outconvert, bool &headerDone, const text_t &collection,  
     29                   ResultDocInfo_t &docInfo); 
     30  text_t get_metadata_value(ResultDocInfo_t &docInfo, const text_t &meta_name); 
     31  void get_metadata_values(ResultDocInfo_t &docInfo, const text_t &meta_name, text_tarray & values); 
    2832  oaiconfig *    oaiConfigure; 
    2933