Changeset 24221 for main/trunk/greenstone3/src/java/org/greenstone/gsdl3/service/ArchiveRetrieve.java
- Timestamp:
- 2011-07-04T10:49:50+12:00 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
main/trunk/greenstone3/src/java/org/greenstone/gsdl3/service/ArchiveRetrieve.java
r24211 r24221 1 1 /* 2 * A bstractDocumentRetrieve.java2 * ArchiveRetrieve.java 3 3 * a base class for retrieval services 4 4 … … 21 21 package org.greenstone.gsdl3.service; 22 22 23 import org.greenstone.gsdl3.util.DBInfo; 23 24 import org.greenstone.gsdl3.util.GSPath; 24 25 import org.greenstone.gsdl3.util.GSXML; … … 31 32 import java.io.File; 32 33 import java.util.HashMap; 33 34 /** Abstract class for Document Retrieval Services 35 * 36 * @author <a href="mailto:[email protected]">Katherine Don</a> 37 */ 38 39 public class ArchiveRetrieve extends ServiceRack { 40 34 import java.util.Vector; 35 36 public class ArchiveRetrieve extends ServiceRack 37 { 41 38 static Logger logger = Logger.getLogger(org.greenstone.gsdl3.service.ArchiveRetrieve.class.getName()); 42 39 43 protected static final String ARCHIVE_FILE_PATH_RETRIEVE_SERVICE = "ArchiveFilePathRetrieve"; 40 protected static final String DOCUMENT_FILE_PATH_RETRIEVE_SERVICE = "DocumentFilePathRetrieve"; 41 protected static final String ASSOCIATED_IMPORT_FILES_RETRIEVE_SERVICE = "AssociatedImportFilesRetrieve"; 42 protected static final String SOURCE_FILE_OID_RETRIEVE = "SourceFileOIDRetrieve"; 44 43 45 44 protected SimpleCollectionDatabase coll_db = null; 46 47 /** constructor */48 public ArchiveRetrieve()49 {50 }51 45 52 46 /** configure this service */ 53 47 public boolean configure(Element info, Element extra_info) 54 48 { 55 if (!super.configure(info, extra_info)){ 49 if (!super.configure(info, extra_info)) 50 { 56 51 return false; 57 52 } … … 60 55 this.config_info = info; 61 56 62 Element archiveFilePathRetrieveService = this.doc.createElement(GSXML.SERVICE_ELEM); 63 archiveFilePathRetrieveService.setAttribute(GSXML.TYPE_ATT, GSXML.SERVICE_TYPE_RETRIEVE); 64 archiveFilePathRetrieveService.setAttribute(GSXML.NAME_ATT, ARCHIVE_FILE_PATH_RETRIEVE_SERVICE); 65 this.short_service_info.appendChild(archiveFilePathRetrieveService); 57 Element documentFilePathRetrieveService = this.doc.createElement(GSXML.SERVICE_ELEM); 58 documentFilePathRetrieveService.setAttribute(GSXML.TYPE_ATT, GSXML.SERVICE_TYPE_RETRIEVE); 59 documentFilePathRetrieveService.setAttribute(GSXML.NAME_ATT, DOCUMENT_FILE_PATH_RETRIEVE_SERVICE); 60 this.short_service_info.appendChild(documentFilePathRetrieveService); 61 62 Element associatedImportFilesRetrieveService = this.doc.createElement(GSXML.SERVICE_ELEM); 63 associatedImportFilesRetrieveService.setAttribute(GSXML.TYPE_ATT, GSXML.SERVICE_TYPE_RETRIEVE); 64 associatedImportFilesRetrieveService.setAttribute(GSXML.NAME_ATT, ASSOCIATED_IMPORT_FILES_RETRIEVE_SERVICE); 65 this.short_service_info.appendChild(associatedImportFilesRetrieveService); 66 67 Element sourceFileDocIDRetrieveService = this.doc.createElement(GSXML.SERVICE_ELEM); 68 sourceFileDocIDRetrieveService.setAttribute(GSXML.TYPE_ATT, GSXML.SERVICE_TYPE_RETRIEVE); 69 sourceFileDocIDRetrieveService.setAttribute(GSXML.NAME_ATT, SOURCE_FILE_OID_RETRIEVE); 70 this.short_service_info.appendChild(sourceFileDocIDRetrieveService); 66 71 67 72 return true; … … 70 75 protected Element getServiceDescription(String service_id, String lang, String subset) 71 76 { 72 Element service_elem = this.doc.createElement(GSXML.SERVICE_ELEM); 73 service_elem.setAttribute(GSXML.TYPE_ATT, GSXML.SERVICE_TYPE_RETRIEVE); 74 service_elem.setAttribute(GSXML.NAME_ATT, ARCHIVE_FILE_PATH_RETRIEVE_SERVICE); 75 return service_elem; 76 } 77 78 protected Element processArchiveFilePathRetrieve(Element request) 77 if (service_id.equals(DOCUMENT_FILE_PATH_RETRIEVE_SERVICE)) 78 { 79 Element service_elem = this.doc.createElement(GSXML.SERVICE_ELEM); 80 service_elem.setAttribute(GSXML.TYPE_ATT, GSXML.SERVICE_TYPE_RETRIEVE); 81 service_elem.setAttribute(GSXML.NAME_ATT, DOCUMENT_FILE_PATH_RETRIEVE_SERVICE); 82 return service_elem; 83 } 84 else if (service_id.equals(ASSOCIATED_IMPORT_FILES_RETRIEVE_SERVICE)) 85 { 86 Element service_elem = this.doc.createElement(GSXML.SERVICE_ELEM); 87 service_elem.setAttribute(GSXML.TYPE_ATT, GSXML.SERVICE_TYPE_RETRIEVE); 88 service_elem.setAttribute(GSXML.NAME_ATT, ASSOCIATED_IMPORT_FILES_RETRIEVE_SERVICE); 89 return service_elem; 90 } 91 else if (service_id.equals(SOURCE_FILE_OID_RETRIEVE)) 92 { 93 Element service_elem = this.doc.createElement(GSXML.SERVICE_ELEM); 94 service_elem.setAttribute(GSXML.TYPE_ATT, GSXML.SERVICE_TYPE_RETRIEVE); 95 service_elem.setAttribute(GSXML.NAME_ATT, SOURCE_FILE_OID_RETRIEVE); 96 return service_elem; 97 } 98 return null; 99 } 100 101 protected Element processDocumentFilePathRetrieve(Element request) 79 102 { 80 103 // Create a new (empty) result message 81 104 Element result = this.doc.createElement(GSXML.RESPONSE_ELEM); 82 result.setAttribute(GSXML.FROM_ATT, ARCHIVE_FILE_PATH_RETRIEVE_SERVICE);105 result.setAttribute(GSXML.FROM_ATT, DOCUMENT_FILE_PATH_RETRIEVE_SERVICE); 83 106 result.setAttribute(GSXML.TYPE_ATT, GSXML.REQUEST_TYPE_PROCESS); 84 107 … … 89 112 Element param_list = (Element) GSXML.getChildByTagName(request, GSXML.PARAM_ELEM+GSXML.LIST_MODIFIER); 90 113 if (param_list == null) { 91 GSXML.addError(this.doc, result, "Document MetadataRetrieve: missing "+ GSXML.PARAM_ELEM+GSXML.LIST_MODIFIER, GSXML.ERROR_TYPE_SYNTAX);114 GSXML.addError(this.doc, result, "DocumentFilePathRetrieve: missing "+ GSXML.PARAM_ELEM+GSXML.LIST_MODIFIER, GSXML.ERROR_TYPE_SYNTAX); 92 115 return result; 93 116 } 94 117 HashMap params = GSXML.extractParams(param_list, false); 95 118 96 String docID = (String) params.get("docID");119 String oid = (String) params.get("oid"); 97 120 String collection = (String) params.get("c"); 98 121 99 String assocFilePath = getAssocFilePathFromDocID( docID, collection, lang, uid);122 String assocFilePath = getAssocFilePathFromDocID(oid, collection, lang, uid); 100 123 101 124 String docFilePath = this.site_home + File.separatorChar + … … 105 128 assocFilePath + File.separatorChar + 106 129 "doc.xml"; 107 108 Element metaElem = this.doc.createElement(GSXML.METADATA_ELEM); 109 metaElem.setAttribute("name", "docFilePath"); 110 metaElem.setAttribute("value", docFilePath); 111 112 logger.error("DOCFILEPATH = " + docFilePath); 113 114 result.appendChild(metaElem); 130 131 Element metadataList = this.doc.createElement(GSXML.METADATA_ELEM + GSXML.LIST_MODIFIER); 132 metadataList.appendChild(createMetadataElement("docfilepath", docFilePath)); 133 result.appendChild(metadataList); 115 134 116 135 return result; 117 136 } 118 137 119 protected Element processArchiveAssociatedImportFilesRetrieve(Element request) 120 { 121 // find out what kind of database we have 122 //Element database_type_elem = (Element) GSXML.getChildByTagName(this.config_info, GSXML.DATABASE_TYPE_ELEM); 123 //String database_type = "jdbm"; 124 /*if (database_type_elem != null) { 125 database_type = database_type_elem.getAttribute(GSXML.NAME_ATT); 126 } 127 if (database_type == null || database_type.equals("")) { 128 database_type = "gdbm"; // the default 129 } 130 131 String db_ext = null; 132 if (database_type.equalsIgnoreCase("jdbm")) { 133 db_ext = ".jdb"; 134 } else { 135 db_ext = ".gdb"; // assume gdbm 136 } 137 138 139 coll_db = new SimpleCollectionDatabase(database_type); 140 if (!coll_db.databaseOK()) { 141 logger.error("Couldn't create the collection database of type "+database_type); 138 protected Element processSourceFileOIDRetrieveService(Element request) 139 { 140 //Create a new (empty) result message 141 Element result = this.doc.createElement(GSXML.RESPONSE_ELEM); 142 result.setAttribute(GSXML.FROM_ATT, SOURCE_FILE_OID_RETRIEVE); 143 result.setAttribute(GSXML.TYPE_ATT, GSXML.REQUEST_TYPE_PROCESS); 144 145 String lang = request.getAttribute(GSXML.LANG_ATT); 146 String uid = request.getAttribute(GSXML.USER_ID_ATT); 147 148 // Get the parameters of the request 149 Element param_list = (Element) GSXML.getChildByTagName(request, GSXML.PARAM_ELEM+GSXML.LIST_MODIFIER); 150 if (param_list == null) 151 { 152 GSXML.addError(this.doc, result, "DocumentFilePathRetrieve: missing "+ GSXML.PARAM_ELEM+GSXML.LIST_MODIFIER, GSXML.ERROR_TYPE_SYNTAX); 153 return result; 154 } 155 HashMap params = GSXML.extractParams(param_list, false); 156 157 String srcFile = (String) params.get("srcfile"); 158 String collection = (String) params.get("c"); 159 160 //Find out what kind of database we have 161 String databaseType = getDatabaseTypeFromCollection(collection, lang, uid); 162 if (databaseType == null || databaseType.equals("")) 163 { 164 databaseType = "gdbm"; // the default 165 } 166 167 String dbExt = null; 168 if (databaseType.equalsIgnoreCase("jdbm")) 169 { 170 dbExt = ".jdb"; 171 } 172 else 173 { 174 dbExt = ".gdb"; // assume gdbm 175 } 176 177 coll_db = new SimpleCollectionDatabase(databaseType); 178 if (!coll_db.databaseOK()) 179 { 180 logger.error("Couldn't create the collection database of type "+databaseType); 142 181 return null; 143 182 } 144 */ 145 146 /*coll_db.openDatabase(183 184 coll_db.openDatabase 185 ( 147 186 this.site_home + File.separatorChar + 148 187 "collect" + File.separatorChar + 149 188 collection + File.separatorChar + 150 189 "archives" + File.separatorChar + 151 "archiveinf-doc" + db_ext, 152 SimpleCollectionDatabase.READ); 153 154 logger.error("STUFF " + coll_db.getInfo(docID)); 155 156 coll_db.getInfo(docID);*/ 157 return null; 158 } 159 160 public String getAssocFilePathFromDocID(String docID, String collection, String lang, String uid) 190 "archiveinf-src" + dbExt, 191 SimpleCollectionDatabase.READ 192 ); 193 194 DBInfo info = coll_db.getInfo(srcFile); 195 196 if (info == null) 197 { 198 return result; 199 } 200 201 String oid = info.getInfo("oid"); 202 203 Element metadataList = this.doc.createElement(GSXML.METADATA_ELEM + GSXML.LIST_MODIFIER); 204 metadataList.appendChild(createMetadataElement("oid", oid)); 205 result.appendChild(metadataList); 206 207 return result; 208 } 209 210 protected Element processAssociatedImportFilesRetrieve(Element request) 211 { 212 //Create a new (empty) result message 213 Element result = this.doc.createElement(GSXML.RESPONSE_ELEM); 214 result.setAttribute(GSXML.FROM_ATT, ASSOCIATED_IMPORT_FILES_RETRIEVE_SERVICE); 215 result.setAttribute(GSXML.TYPE_ATT, GSXML.REQUEST_TYPE_PROCESS); 216 217 String lang = request.getAttribute(GSXML.LANG_ATT); 218 String uid = request.getAttribute(GSXML.USER_ID_ATT); 219 220 // Get the parameters of the request 221 Element param_list = (Element) GSXML.getChildByTagName(request, GSXML.PARAM_ELEM+GSXML.LIST_MODIFIER); 222 if (param_list == null) 223 { 224 GSXML.addError(this.doc, result, "AssociatedImportFilesRetrieve: missing "+ GSXML.PARAM_ELEM+GSXML.LIST_MODIFIER, GSXML.ERROR_TYPE_SYNTAX); 225 return result; 226 } 227 HashMap params = GSXML.extractParams(param_list, false); 228 229 String oid = (String) params.get("oid"); 230 String collection = (String) params.get("c"); 231 232 String databaseType = getDatabaseTypeFromCollection(collection, lang, uid); 233 if (databaseType == null || databaseType.equals("")) 234 { 235 databaseType = "gdbm"; // the default 236 } 237 238 String dbExt = null; 239 if (databaseType.equalsIgnoreCase("jdbm")) 240 { 241 dbExt = ".jdb"; 242 } 243 else 244 { 245 dbExt = ".gdb"; // assume gdbm 246 } 247 248 coll_db = new SimpleCollectionDatabase(databaseType); 249 if (!coll_db.databaseOK()) 250 { 251 logger.error("Couldn't create the collection database of type "+databaseType); 252 return null; 253 } 254 255 coll_db.openDatabase 256 ( 257 this.site_home + File.separatorChar + 258 "collect" + File.separatorChar + 259 collection + File.separatorChar + 260 "archives" + File.separatorChar + 261 "archiveinf-doc" + dbExt, 262 SimpleCollectionDatabase.READ 263 ); 264 265 DBInfo info = coll_db.getInfo(oid); 266 267 if (info == null) 268 { 269 return result; 270 } 271 272 String srcFile = info.getInfo("src-file"); 273 Vector data = info.getMultiInfo("assoc-file"); 274 275 Element metadataList = this.doc.createElement(GSXML.METADATA_ELEM + GSXML.LIST_MODIFIER); 276 metadataList.appendChild(createMetadataElement("srcfile", srcFile)); 277 278 for (int i = 0; i < data.size(); i++) 279 { 280 metadataList.appendChild(createMetadataElement("assocfile", (String)data.get(i))); 281 } 282 283 result.appendChild(metadataList); 284 285 return result; 286 } 287 288 public Element createMetadataElement(String name, String value) 289 { 290 Element metaElem = this.doc.createElement(GSXML.METADATA_ELEM); 291 metaElem.setAttribute("name", name); 292 metaElem.setAttribute("value", value); 293 return metaElem; 294 } 295 296 public String getAssocFilePathFromDocID(String oid, String collection, String lang, String uid) 161 297 { 162 298 Element mr_query_message = this.doc.createElement(GSXML.MESSAGE_ELEM); … … 165 301 166 302 Element paramList = this.doc.createElement(GSXML.PARAM_ELEM+GSXML.LIST_MODIFIER); 167 168 Element assocParam = this.doc.createElement(GSXML.PARAM_ELEM); 169 assocParam.setAttribute("name", "metadata"); 170 assocParam.setAttribute("value", "assocfilepath"); 171 paramList.appendChild(assocParam); 303 paramList.appendChild(createMetadataElement("metadata", "assocfilepath")); 172 304 173 305 mr_query_request.appendChild(paramList); 174 306 175 Element docList = this.doc.createElement(GSXML.DOC_NODE_ELEM+GSXML.LIST_MODIFIER);176 Element doc = this.doc.createElement(GSXML.DOC_NODE_ELEM);177 doc .setAttribute(GSXML.NODE_ID_ATT, docID);178 docList .appendChild(doc);179 mr_query_request.appendChild(docList );307 Element docListElem = this.doc.createElement(GSXML.DOC_NODE_ELEM+GSXML.LIST_MODIFIER); 308 Element docElem = this.doc.createElement(GSXML.DOC_NODE_ELEM); 309 docElem.setAttribute(GSXML.NODE_ID_ATT, oid); 310 docListElem.appendChild(docElem); 311 mr_query_request.appendChild(docListElem); 180 312 181 313 Element response = (Element) this.router.process(mr_query_message); … … 189 321 return metadataElem.getFirstChild().getNodeValue(); 190 322 } 323 324 public String getDatabaseTypeFromCollection(String collection, String lang, String uid) 325 { 326 //Find out what kind of database we have 327 Element dbTypeMessage = this.doc.createElement(GSXML.MESSAGE_ELEM); 328 Element dbTypeRequest = GSXML.createBasicRequest(this.doc, GSXML.REQUEST_TYPE_DESCRIBE, collection, lang, uid); 329 dbTypeMessage.appendChild(dbTypeRequest); 330 Element dbTypeResponse = (Element)this.router.process(dbTypeMessage); 331 332 String path = GSPath.appendLink(GSXML.RESPONSE_ELEM, GSXML.COLLECTION_ELEM); 333 Element collectionElem = (Element) GSXML.getNodeByPath(dbTypeResponse, path); 334 335 if (collectionElem != null) 336 { 337 return collectionElem.getAttribute(GSXML.DB_TYPE_ATT); 338 } 339 return null; 340 } 191 341 }
Note:
See TracChangeset
for help on using the changeset viewer.