Changeset 32874 for gs3-extensions/iiif-servlet/trunk/src/gsdl-src/java/org/greenstone/gsdl3/service/IIIFPMH.java
- Timestamp:
- 2019-03-07T22:47:07+13:00 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
gs3-extensions/iiif-servlet/trunk/src/gsdl-src/java/org/greenstone/gsdl3/service/IIIFPMH.java
r32860 r32874 23 23 import org.greenstone.gsdl3.util.GSXML; 24 24 import org.greenstone.gsdl3.util.IIIFXML; 25 import org.greenstone.gsdl3.util.OAIXML; // ****25 //import org.greenstone.gsdl3.util.OAIXML; // **** 26 26 import org.greenstone.gsdl3.util.OID; 27 27 import org.greenstone.gsdl3.util.GSFile; … … 70 70 protected Element meta_formats_definition = null; 71 71 protected HashMap<String, HashSet<String>> format_elements_map = null; 72 protected HashMap<String, Element> format_response_map = null;73 72 protected HashMap<String, Element> format_meta_elem_map = null; 74 73 … … 134 133 Element get_record = this.desc_doc.createElement(GSXML.SERVICE_ELEM); 135 134 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"); 137 136 this.short_service_info.appendChild(get_record); 138 137 … … 165 164 Element get_record = doc.createElement(GSXML.SERVICE_ELEM); 166 165 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"); 168 167 return get_record; 169 168 } … … 172 171 } 173 172 174 /** returns the actual record element used in the OAIGetRecord response */173 /** returns the actual record element used in the IIIF GetRecord response */ 175 174 protected Element processGetRecord(Element req) { 176 175 /** arguments: 177 176 identifier: required 178 metadataPrefix: required179 177 * Exceptions: badArgument; cannotDisseminateFormat; idDoesNotExist 180 178 */ … … 182 180 HashMap<String, String> param_map = GSXML.getParamMap(params); 183 181 184 String prefix = param_map.get(OAIXML.METADATA_PREFIX);185 if (prefix == null || prefix.equals("")) {186 //Just a double-check187 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 format192 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 197 182 Document doc = XMLConverter.newDOM(); 198 183 199 184 String oid = param_map.get(IIIFXML.OID); // TODO should this be identifier??? 200 185 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, 202 187 // null is returned. 203 188 DBInfo info = this.coll_db.getInfo(oid); 204 189 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, ""); 209 192 } 210 193 … … 218 201 record.appendChild(createHeaderElement(doc, oid)); 219 202 //compose the metadata element 220 record.appendChild(createMetadataElement(doc, prefix,info));203 record.appendChild(createMetadataElement(doc, info)); 221 204 get_record.appendChild(record); 222 205 return get_record_response; … … 224 207 225 208 226 /** create the metadata element used when processing ListRecords/GetRecord requests209 /** create the metadata element used when processing GetRecord request 227 210 */ 228 211 229 protected Element createMetadataElement(Document doc, String prefix,DBInfo info) {212 protected Element createMetadataElement(Document doc, DBInfo info) { 230 213 // the <metadata> element 231 Element metadata = doc.createElement(OAIXML.METADATA); 214 Element metadata_message = doc.createElement(IIIFXML.METADATA); 215 232 216 // 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); 238 222 // 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 /* 239 237 for (int i=0; i<elements.getLength(); i++) { 240 238 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 250 246 // output any metadata that is not just a simple mapping 251 // 252 return metadata ;247 //addCustomMetadata(prfx_str_elem, prefix, info); // **** 248 return metadata_message; 253 249 } 254 250 255 251 /** a simple addMetadata where we look for meta_name metadata, and add as that name*/ 256 252 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 266 263 /** more complicated addMetadata - can add multiple items. */ 267 264 /* 268 265 protected void addMetadata(Element meta_list_elem, String new_meta_name, String select_type, String name_list, DBInfo info) { 269 266 String[] names = name_list.split(","); … … 307 304 } 308 305 } 309 306 */ 307 310 308 // specific metadata formats might need to do some custom metadata that is not 311 309 //just a standard mapping. 310 /* 312 311 protected void addCustomMetadata(Element meta_list_elem, String prefix, DBInfo info) { 313 312 314 313 315 314 } 316 315 */ 316 317 317 /** create the actual metadata element for the list */ 318 318 … … 328 328 protected Element createHeaderElement(Document doc, String oid) { 329 329 330 Element header = doc.createElement( OAIXML.HEADER);330 Element header = doc.createElement(IIIFXML.HEADER); 331 331 332 332 Element identifier = doc.createElement(IIIFXML.IDENTIFIER);
Note:
See TracChangeset
for help on using the changeset viewer.