Ignore:
Timestamp:
2019-03-07T22:47:07+13:00 (5 years ago)
Author:
davidb
Message:

Next round of changes, migrating from OAI imprint to what is needed for IIIF

File:
1 edited

Legend:

Unmodified
Added
Removed
  • gs3-extensions/iiif-servlet/trunk/src/gsdl-src/java/org/greenstone/gsdl3/service/IIIFPMH.java

    r32860 r32874  
    2323import org.greenstone.gsdl3.util.GSXML;
    2424import org.greenstone.gsdl3.util.IIIFXML;
    25 import org.greenstone.gsdl3.util.OAIXML; // ****
     25//import org.greenstone.gsdl3.util.OAIXML; // ****
    2626import org.greenstone.gsdl3.util.OID;
    2727import org.greenstone.gsdl3.util.GSFile;
     
    7070  protected Element meta_formats_definition = null;
    7171  protected HashMap<String, HashSet<String>> format_elements_map = null;
    72   protected HashMap<String, Element> format_response_map = null;
    7372  protected HashMap<String, Element> format_meta_elem_map = null;
    7473 
     
    134133    Element get_record = this.desc_doc.createElement(GSXML.SERVICE_ELEM);
    135134    get_record.setAttribute(GSXML.NAME_ATT, IIIFXML.GET_RECORD);
    136     get_record.setAttribute(GSXML.TYPE_ATT, "oai");
     135    get_record.setAttribute(GSXML.TYPE_ATT, "iiif");
    137136    this.short_service_info.appendChild(get_record);
    138137   
     
    165164      Element get_record = doc.createElement(GSXML.SERVICE_ELEM);
    166165      get_record.setAttribute(GSXML.NAME_ATT, IIIFXML.GET_RECORD);
    167       get_record.setAttribute(GSXML.TYPE_ATT, "oai");
     166      get_record.setAttribute(GSXML.TYPE_ATT, "iiif");
    168167      return get_record;
    169168    }
     
    172171  }
    173172   
    174   /** returns the actual record element used in the OAI GetRecord response */
     173  /** returns the actual record element used in the IIIF GetRecord response */
    175174  protected Element processGetRecord(Element req) {
    176175    /** arguments:
    177176        identifier: required
    178         metadataPrefix: required
    179177     *  Exceptions: badArgument; cannotDisseminateFormat; idDoesNotExist
    180178     */
     
    182180    HashMap<String, String> param_map = GSXML.getParamMap(params);   
    183181   
    184     String prefix = param_map.get(OAIXML.METADATA_PREFIX);
    185     if (prefix == null || prefix.equals("")) {
    186       //Just a double-check
    187       logger.error("the value of metadataPrefix att is not present in the request.");
    188       return IIIFXML.createErrorResponse(OAIXML.CANNOT_DISSEMINATE_FORMAT, "");
    189     }
    190    
    191     // check that we support this format
    192     if (!format_response_map.containsKey(prefix)) {
    193       logger.error("metadata prefix is not supported for collection "+this.coll_name);
    194       return IIIFXML.createErrorResponse(OAIXML.CANNOT_DISSEMINATE_FORMAT, "");
    195     }
    196 
    197182    Document doc = XMLConverter.newDOM();
    198183   
    199184    String oid = param_map.get(IIIFXML.OID); // TODO should this be identifier???
    200185   
    201     //get a DBInfo object of the identifier; if this identifier is not present in the database,
     186    // Get a DBInfo object of the identifier; if this identifier is not present in the database,
    202187    // null is returned.
    203188    DBInfo info = this.coll_db.getInfo(oid);
    204189    if (info == null) {
    205     //if(!OID_is_deleted) { // we don't expect to find entries for deleted docs in index db. // ****
    206         logger.error("OID: " + oid + " is not present in the collection index database.");
    207         return IIIFXML.createErrorResponse(IIIFXML.ID_DOES_NOT_EXIST, "");
    208         //} // if doc deleted, id missing in indexdb is not an error: doc id would exist only in oai-inf db, marked as deleted 'D' // ****
     190    logger.error("OID: " + oid + " is not present in the collection index database.");
     191    return IIIFXML.createErrorResponse(IIIFXML.ID_DOES_NOT_EXIST, "");
    209192    }
    210193
     
    218201    record.appendChild(createHeaderElement(doc, oid));     
    219202    //compose the metadata element
    220     record.appendChild(createMetadataElement(doc, prefix, info));
     203    record.appendChild(createMetadataElement(doc, info));
    221204    get_record.appendChild(record);
    222205    return get_record_response;
     
    224207
    225208   
    226  /** create the metadata element used when processing ListRecords/GetRecord requests
     209 /** create the metadata element used when processing GetRecord request
    227210   */
    228211
    229   protected Element createMetadataElement(Document doc, String prefix, DBInfo info) {
     212  protected Element createMetadataElement(Document doc, DBInfo info) {
    230213    // the <metadata> element
    231     Element metadata = doc.createElement(OAIXML.METADATA);
     214    Element metadata_message = doc.createElement(IIIFXML.METADATA);
     215
    232216    // the <oai:dc namespace...> element
    233     Element prfx_str_elem = (Element)doc.importNode(this.format_meta_elem_map.get(prefix), true);
    234     metadata.appendChild(prfx_str_elem);
    235    
    236     Element meta_format_element = GSXML.getNamedElement(this.meta_formats_definition, OAIXML.METADATA_FORMAT, GSXML.NAME_ATT, prefix);
    237     NodeList elements = meta_format_element.getElementsByTagName(OAIXML.ELEMENT);
     217    //Element prfx_str_elem = (Element)doc.importNode(this.format_meta_elem_map.get(prefix), true);
     218    //metadata.appendChild(prfx_str_elem);
     219   
     220    //Element meta_format_element = GSXML.getNamedElement(this.meta_formats_definition, OAIXML.METADATA_FORMAT, GSXML.NAME_ATT, prefix);
     221    //NodeList elements = meta_format_element.getElementsByTagName(OAIXML.ELEMENT);
    238222    // for each element in the definition
     223
     224    addFirstMetadata(metadata_message, "assocfilepath", info);
     225    addFirstMetadata(metadata_message, "Image", info);
     226
     227    /*     
     228    Set<String> keys = info.getKeys();
     229    if (keys != null && keys.size()!=0) {
     230    for (String metaname: keys) {
     231        addMetadata(metadata_message, metaname, info);
     232    }
     233    }
     234    */
     235   
     236    /*
    239237    for (int i=0; i<elements.getLength(); i++) {
    240238      Element e = (Element)elements.item(i);
    241       Element map = (Element)GSXML.getChildByTagName(e, OAIXML.MAPPING);
    242       if (map == null) {
    243     // look up the element name
    244     addMetadata(prfx_str_elem, e.getAttribute(GSXML.NAME_ATT), info);
    245       } else {
    246     // we go though the list of names in the mapping
    247     addMetadata(prfx_str_elem, e.getAttribute(GSXML.NAME_ATT), map.getAttribute(OAIXML.SELECT), map.getAttribute(OAIXML.ELEMENTS), info);
    248       }
    249     }
     239
     240      // look up the element name
     241      //addMetadata(prfx_str_elem, e.getAttribute(GSXML.NAME_ATT), info);
     242      addMetadata(metadata, e.getAttribute(GSXML.NAME_ATT), info);
     243    }
     244    */
     245   
    250246    // output any metadata that is not just a simple mapping
    251     // addCustomMetadata(prfx_str_elem, prefix, info); // ****
    252     return metadata;
     247    //addCustomMetadata(prfx_str_elem, prefix, info); // ****
     248    return metadata_message;
    253249  }
    254250
    255251  /** a simple addMetadata where we look for meta_name metadata, and add as that name*/
    256252
    257   protected void addMetadata(Element meta_list_elem, String meta_name, DBInfo info) {
    258     Vector<String> values = info.getMultiInfo(meta_name);
    259     if (values != null && values.size()!=0) {
    260       for (int i=0; i<values.size(); i++) {
    261     addMetadataElement(meta_list_elem, meta_name, values.get(i));
    262       }
    263     }
    264   }
    265 
     253   
     254  protected void addFirstMetadata(Element meta_list_elem, String meta_name, DBInfo info) {
     255      Vector<String> values = info.getMultiInfo(meta_name);
     256      if (values != null && values.size()>0) {
     257      addMetadataElement(meta_list_elem, meta_name, values.get(0));
     258     
     259      }
     260  }
     261   
     262   
    266263  /** more complicated addMetadata - can add multiple items. */
    267 
     264    /*
    268265  protected void addMetadata(Element meta_list_elem, String new_meta_name, String select_type, String name_list, DBInfo info) {
    269266    String[] names = name_list.split(",");
     
    307304    }
    308305  }
    309  
     306    */
     307   
    310308  // specific metadata formats might need to do some custom metadata that is not
    311309  //just a standard mapping.
     310    /*
    312311  protected void addCustomMetadata(Element meta_list_elem, String prefix, DBInfo info) {
    313312   
    314313
    315314  }
    316 
     315    */
     316   
    317317  /** create the actual metadata element for the list */
    318318
     
    328328  protected Element createHeaderElement(Document doc, String oid) {
    329329
    330         Element header = doc.createElement(OAIXML.HEADER);
     330        Element header = doc.createElement(IIIFXML.HEADER);
    331331   
    332332        Element identifier = doc.createElement(IIIFXML.IDENTIFIER);
Note: See TracChangeset for help on using the changeset viewer.