📄 mmqueryhelper.java
字号:
package dli2fe.helpers;/** * Title: Digial Library Interoperable Interface Fudan Edition * Description: This project contains all the classes required for DLI2FE interface. Developers use these classes to implement the wrapper and client side codes. The basic functions of DLI2FE is as follows: * Search: Search a digital library source site. * Metadata: Fetch metadata for a site. * ResultAccess: Get results for a given query. * DLI2FE uses Dublin Core as the basic attribute model, DAV/DASL as the general XML-based query language and CORBA as distributed object transportation mechanism. * Copyright: Copyright (c) 2001 * Company: Fudan University * @author Carl Tao * @version 1.0 */import java.util.*;import dli2fe.DLI2FEException;import java.net.*;import java.io.*;import dli2fe.sample.MultimediaMeta;// 一次多媒体查询的接口类public class MMQueryHelper { // 缓存每个服务对应的DID与素材对应表。 static Hashtable serviceSampleURL = new Hashtable(); String baseURL; //String prefixForID; Vector results; // n_m(String类型) format result list Vector listDID; // document id(Integer类型) list for result public MMQueryHelper(String queryURL) throws DLI2FEException { if (serviceSampleURL.get(queryURL)==null) { String url = queryURL + "ServiceType=" + MultimediaMeta.serviceTypeDID+ "&OID=001"; try { URLConnection con = new URL(url).openConnection(); con.setDefaultUseCaches(false); con.setUseCaches(false); con.setDoInput(true); con.connect(); DataInputStream in = new DataInputStream(con.getInputStream()); int num = in.readInt(); // should not be zero for document 1 if (num == 0) throw new DLI2FEException(DLI2FEException.NOT_IMPLEMENTED_EXC, "Multimediasearch service error: zero results"); Hashtable ht = new Hashtable(); Vector v = new Vector(); for (int i = 0; i<num; i++) { String rURL = in.readUTF(); v.add(rURL.substring(Math.max(rURL.lastIndexOf('/'), rURL.lastIndexOf('\\')) + 1, rURL.lastIndexOf('.'))); } in.close(); ht.put(new Integer(1), v); serviceSampleURL.put(queryURL, ht); } catch (IOException ex) { throw new DLI2FEException(DLI2FEException.NOT_IMPLEMENTED_EXC, "Multimediasearch service error: "+ ex.toString()); } } baseURL = queryURL; results = new Vector(); listDID = new Vector(); } // 查询多媒体 public void searchMultimedia(String sample, String pfeedback, String nfeedback) throws DLI2FEException { try { URLConnection con = new URL(baseURL + "ServiceType=" + MultimediaMeta.serviceType + "&SampleURL=" + noNull(sample) + "&PFeedback=" + noNull(pfeedback) + "&NFeedback=" + noNull(nfeedback)).openConnection(); System.out.println("GET " + baseURL + "ServiceType=" + MultimediaMeta.serviceType + "&SampleURL=" + noNull(sample) + "&PFeedback=" + noNull(pfeedback) + "&NFeedback=" + noNull(nfeedback)); con.setDefaultUseCaches(false); con.setUseCaches(false); con.setDoInput(true); con.connect(); DataInputStream in = new DataInputStream(con.getInputStream()); int num = in.readInt(); results = new Vector(); for (int i=0; i<num; i++) { String rURL = in.readUTF(); results.add(rURL.substring(Math.max(rURL.lastIndexOf('/'), rURL.lastIndexOf('\\')) + 1, rURL.lastIndexOf('.'))); } } catch (IOException ex) { throw new DLI2FEException(DLI2FEException.SERVER_ERROR_EXC, "Multimedia Search service error: " + ex.toString()); } generateListDID(); } // 根据文档标志符查询素材标志符 public void getIdmms(int did) throws DLI2FEException { // 首先从缓存中去取 Vector v = (Vector)((Hashtable)serviceSampleURL.get(baseURL)).get(new Integer(did)); if (v != null) { results = v; generateListDID(); return; } String strDID = String.valueOf(did); int len = strDID.length(); for (int i=0; i<3-len; i++) strDID = "0"+strDID; try { URLConnection con = new URL(baseURL + "ServiceType=" + MultimediaMeta.serviceTypeDID + "&OID=" + strDID).openConnection(); //System.out.println("GET " + baseURL + "ServiceType=" + MultimediaMeta.serviceTypeDID + "&OID=" + strDID); con.setDefaultUseCaches(false); con.setUseCaches(false); con.setDoInput(true); con.connect(); DataInputStream in = new DataInputStream(con.getInputStream()); int num = in.readInt(); results = new Vector(); for (int i=0; i<num; i++) { String rURL = in.readUTF(); results.add(rURL.substring(Math.max(rURL.lastIndexOf('/'), rURL.lastIndexOf('\\')) + 1, rURL.lastIndexOf('.'))); } } catch (IOException ex) { throw new DLI2FEException(DLI2FEException.SERVER_ERROR_EXC, "Multimedia SearchByDID service error: " + ex.toString()); } ((Hashtable)serviceSampleURL.get(baseURL)).put(new Integer(did), results); generateListDID(); } public Vector getResults() { return results; } public Vector getListDID() { return listDID; } String noNull(String inStr) { if (inStr == null) return ""; return inStr; } void generateListDID() { listDID = new Vector(); Hashtable ht = new Hashtable(); for (int i=0; i<results.size(); i++) { String result = (String)results.elementAt(i); Integer did = new Integer(Integer.parseInt(result.substring(0, result.indexOf('_')))); if (ht.get(did) == null) { ht.put(did, result); listDID.add(did); // only add the first time to form the order of documents } } } public static void main(String[] args) { try { MMQueryHelper mmqh = new MMQueryHelper("http://localhost:8080/multimediasearch/MultimediaSearch?"); //mmqh.searchMultimedia("http://localhost:8080/multimediasearch/tempsample/first.jpg", "", ""); mmqh.getIdmms(23); Vector results = mmqh.getResults(); for (int i=0; i<results.size(); i++) { System.out.println((String)results.elementAt(i)); } } catch (Exception ex) { ex.printStackTrace(); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -