Changeset 32874 for gs3-extensions/iiif-servlet/trunk/src/gsdl-src
- Timestamp:
- 2019-03-07T22:47:07+13:00 (5 years ago)
- Location:
- gs3-extensions/iiif-servlet/trunk/src/gsdl-src/java/org/greenstone/gsdl3
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
gs3-extensions/iiif-servlet/trunk/src/gsdl-src/java/org/greenstone/gsdl3/IIIFServerBridge.java
r32860 r32874 170 170 //response.setContentType("text/xml;charset=UTF-8"); 171 171 //PrintWriter out = response.getWriter(); 172 172 String result = ""; 173 173 174 String[] pairs = new String[2]; 174 175 pairs[0] = "verb=GetRecord"; … … 185 186 Element xml_request = request_doc.createElement(GSXML.REQUEST_ELEM); 186 187 // The type attribute is set to be 'oaiService' from OAIServer to OAIReceptionist. 187 ////xml_request.setAttribute(GSXML.TYPE_ATT, OAIXML.OAI_SERVICE); 188 ////xml_request.setAttribute(GSXML.TYPE_ATT, OAIXML.OAI_SERVICE); // **** 188 189 //xml_request.setAttribute(GSXML.LANG_ATT, lang); 189 190 xml_request.setAttribute(GSXML.TO_ATT, verb); … … 211 212 if (res == null) 212 213 { 213 logger.info("response element in xml_result is null"); 214 verb_elem = IIIFXML.createErrorElement(response_doc, "Internal error", ""); 215 } 216 else 217 { 218 verb_elem = GSXML.getFirstElementChild(res); 214 logger.info("response element in xml_result is null"); 215 verb_elem = IIIFXML.createErrorElement(response_doc, "Internal error", ""); 216 } 217 else { 218 System.err.println("*** res (verb_elem) = " + XMLConverter.getPrettyString(res)); 219 220 verb_elem = GSXML.getFirstElementChild(res); // GetRecord 221 Node record_node = GSXML.getFirstElementChild(verb_elem); // record 222 Element metadata_list_elem = (Element)GSXML.getChildByTagName(record_node,"metadata"); // metadata 223 224 System.err.println("*** metadata_list_elem = " + XMLConverter.getPrettyString(metadata_list_elem)); 225 String assocfilepath_metadata = GSXML.getMetadataValue(metadata_list_elem,"assocfilepath"); 226 String image_metadata = GSXML.getMetadataValue(metadata_list_elem,"Image"); 227 //Node assocfilepath_metadata_node = GSXML.getChildByTagName("assocfilepath"); 228 //Node image_metadata_node = GSXML.getChildByTagName("Image"); 229 230 result = assocfilepath_metadata + "/" + image_metadata; 219 231 } 220 232 … … 243 255 */ 244 256 245 return XMLConverter.getPrettyString(xml_response); 257 //return XMLConverter.getPrettyString(xml_response); 258 return result; 259 //return xml_response; 246 260 } 247 261 … … 264 278 if (index != -1) 265 279 { //just a double check 266 Element param = GSXML.createParameter(doc, pairs[i].substring(0, index), IIIFXML. oaiDecode(pairs[i].substring(index + 1)));280 Element param = GSXML.createParameter(doc, pairs[i].substring(0, index), IIIFXML.iiifDecode(pairs[i].substring(index + 1))); 267 281 request.appendChild(param); 268 282 } -
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); -
gs3-extensions/iiif-servlet/trunk/src/gsdl-src/java/org/greenstone/gsdl3/util/IIIFXML.java
r32860 r32874 37 37 static Logger logger = Logger.getLogger(org.greenstone.gsdl3.util.IIIFXML.class.getName()); 38 38 39 // the leading keyword of oai protocol39 // the leading keyword of IIIF protocol // **** 40 40 public static final String VERB = "verb"; 41 41 … … 67 67 68 68 // record response data 69 // SET_SPEC70 69 public static final String RECORD = "record"; 71 72 public static final String OAIPMH = "OAIPMH"; // **** 70 public static final String HEADER = "header"; 71 public static final String METADATA = "metadata"; 72 73 //public static final String OAIPMH = "OAIPMH"; // **** 73 74 74 75 //public static final String OAI_SET_LIST = "oaiSetList"; // **** … … 80 81 //public static final String FILE_SEPARATOR = File.separator; 81 82 //public static final String OAI_VERSION1 = "1.0"; 82 public static final String IIIF_VERSION2 = "2.1"; // ****83 //public static final String IIIF_VERSION2 = "2.1"; // **** 83 84 /*************************above are final values****************************/ 84 85 … … 143 144 144 145 145 /** TODO: returns a basic response for appropriate oai version146 /** TODO: returns a basic response (loosely based on OAI XML message) 146 147 * 147 148 */ … … 161 162 String[] strs = pairs[i].split("="); 162 163 if(strs != null && strs.length == 2) { 163 request_elem.setAttribute(strs[0], oaiDecode(strs[1]));164 request_elem.setAttribute(strs[0], iiifDecode(strs[1])); 164 165 } 165 166 } … … 168 169 GSXML.setNodeText(request_elem, baseURL); 169 170 170 Node resp_date = GSXML.getChildByTagName(response, RESPONSE_DATE); // ****171 //Node resp_date = GSXML.getChildByTagName(response, RESPONSE_DATE); // **** 171 172 172 173 return response; … … 265 266 * original form (eg, ':'). 266 267 */ 267 public static String oaiDecode(String escaped_str) {268 logger.info(" oaiDecode() " +escaped_str);268 public static String iiifDecode(String escaped_str) { 269 logger.info("iiifDecode() " +escaped_str); 269 270 for (int i=0; i<special_char.length; i++) { 270 271 if (escaped_str.indexOf(escape_sequence[i]) != -1) { … … 277 278 * escaped sequences (eg, '%3A'). 278 279 */ 279 public static String oaiEncode(String original_str) { // ****280 logger.info(" oaiEncode() " + original_str);280 public static String iiifEncode(String original_str) { // **** 281 logger.info("iiifEncode() " + original_str); 281 282 for (int i=0; i<special_char.length; i++) { 282 283 if (original_str.indexOf(special_char[i]) != -1) { … … 288 289 289 290 public static Element createResponseHeader(Document response_doc, String verb) { 290 String tag_name = (iiif_version.equals(IIIF_VERSION2))? IIIF_PMH : verb; // **** 291 Element oai = response_doc.createElement(tag_name); 292 Element resp_date = response_doc.createElement(RESPONSE_DATE); // **** 291 //String tag_name = (iiif_version.equals(IIIF_VERSION2))? IIIF_PMH : verb; // **** 292 String tag_name = IIIF_PMH; 293 Element iiif = response_doc.createElement(tag_name); 294 //Element resp_date = response_doc.createElement(RESPONSE_DATE); // **** 293 295 Element req = response_doc.createElement(REQUEST); 294 oai.appendChild(resp_date); 295 oai.appendChild(req); 296 297 if(iiif_version.equals(IIIF_VERSION2)) { // **** 298 oai.setAttribute("xmlns", "http://www.openarchives.org/OAI/2.0/"); 299 oai.setAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance"); 300 oai.setAttribute("xsi:schemaLocation", "http://www.openarchives.org/OAI/2.0/ \n http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd"); 301 } else { 302 oai.setAttribute("xmlns", "http://www.openarchives.com/OAI/1.1/OAI_" + verb); 303 oai.setAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance"); 304 oai.setAttribute("xsi:schemaLocation", "http://www.openarchives.org/OAI/1.1/OAI_" + verb + "\n http://www.openarchives.org/OAI/1.1/OAI_" + verb + ".xsd"); 305 } 306 return oai; 307 } 308 309 296 //oai.appendChild(resp_date); 297 iiif.appendChild(req); 298 299 return iiif; 300 } 301 302 /* 310 303 public static Element createOAIIdentifierXML(Document doc, String repository_id, String sample_collection, String sample_doc_id) { 311 304 String xml = "<oai-identifier xmlns=\"http://www.openarchives.org/OAI/2.0/oai-identifier\"\n xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xsi:schemaLocation=\"http://www.openarchives.org/OAI/2.0/oai-identifier\n http://www.openarchives.org/OAI/2.0/oai-identifier.xsd\">\n <scheme>oai</scheme>\n<repositoryIdentifier>" + repository_id + "</repositoryIdentifier>\n<delimiter>:</delimiter>\n<sampleIdentifier>oai:"+repository_id+":"+sample_collection+":"+sample_doc_id+"</sampleIdentifier>\n</oai-identifier>"; … … 316 309 317 310 } 318 311 */ 312 313 /* 319 314 public static Element createGSDLElement(Document doc) { 320 315 String xml = "<gsdl xmlns=\"http://www.greenstone.org/namespace/gsdl_oaiinfo/1.0/gsdl_oaiinfo\"\n xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xsi:schemaLocation=\"http://www.greenstone.org/namespace/gsdl_oaiinfo/1.0/gsdl_oaiinfo\n http://www.greenstone.org/namespace/gsdl_oaiinfo/1.0/gsdl_oaiinfo.xsd\"></gsdl>"; … … 322 317 return (Element)doc.importNode(xml_doc.getDocumentElement(), true); 323 318 } 319 */ 320 324 321 } 325 322
Note:
See TracChangeset
for help on using the changeset viewer.