📄 metaqueryhelper.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 java.net.*;import java.io.*;import dli2fe.DLI2FEException;public class MetaQueryHelper { Hashtable results = new Hashtable(); // 结果为以文档标志符为key的Hashtable public MetaQueryHelper(String queryURL, String query) throws DLI2FEException { try { System.out.println("MetaQueryHelper:" + query); URLConnection con = (new URL(queryURL)).openConnection(); con.setUseCaches(false); con.setDoOutput(true); con.setDoInput(true); ByteArrayOutputStream byteOut = new ByteArrayOutputStream(); DataOutputStream out = new DataOutputStream(byteOut); out.writeUTF(query); out.flush(); byte buf[] = byteOut.toByteArray(); con.setRequestProperty("Content-type", "application/octet-stream"); con.setRequestProperty("Content-length", "" + buf.length); DataOutputStream dataOut = new DataOutputStream(con.getOutputStream()); out.write(buf, 0, buf.length); dataOut.write(buf); dataOut.flush(); dataOut.close(); DataInputStream in = new DataInputStream(con.getInputStream()); String stringValue = in.readUTF(); //System.out.println(stringValue); in.close(); analyzeResults(stringValue); } catch (IOException ex) { new DLI2FEException(DLI2FEException.SERVER_ERROR_EXC, "MetaQuery service error: " + ex.toString()); } } void analyzeResults(String resultStr) throws DLI2FEException { try { BufferedReader br = new BufferedReader(new StringReader(resultStr)); String aLine = br.readLine().trim(); if (!containsOnlyDigits(aLine)) throw new DLI2FEException(DLI2FEException.SERVER_ERROR_EXC, "MetaQuery error: " + resultStr); int num = Integer.parseInt(aLine); for (int i=0; i<num; i++) { aLine = br.readLine().trim(); if (!containsOnlyDigits(aLine)) throw new DLI2FEException(DLI2FEException.SERVER_ERROR_EXC, "MetaQuery error: " + resultStr); Integer did = new Integer(Integer.parseInt(aLine)); Vector v = (Vector)results.get(did); if (v == null) { v = new Vector(); results.put(did, v); } int j=0; while (br.ready()) { br.mark(1); if (Character.isDigit((char)br.read())) { br.reset(); char[] bufLen = new char[3]; br.read(bufLen, 0, 3); int len = Integer.parseInt(new String(bufLen)); char[] bufContent = new char[len]; br.read(bufContent, 0, len); addContent(v, j++, notNull(new String(bufContent))); } else { br.reset(); br.readLine(); break; } } } } catch (IOException ex) { throw new DLI2FEException(DLI2FEException.SERVER_ERROR_EXC, "MetaQuery error: "+ ex.toString()); } } public Set getResultDIDSet() { return results.keySet(); } public Vector getResultForDID(int did) { return (Vector)results.get(new Integer(did)); } void addContent(Vector v, int index, String content) { if (index < v.size()) { Vector vi = (Vector)v.elementAt(index); if (!content.equals(vi.elementAt(0))) vi.add(content); } else { Vector vi = new Vector(); vi.add(content); v.add(vi); } } String notNull(String inStr) { if (inStr == null) return ""; return inStr; } static boolean containsOnlyDigits(String str) { for (int i=0; i<str.length(); i++) if (!Character.isDigit(str.charAt(i))) return false; return true; } public static void main(String[] args) { try { MetaQueryHelper mqh = new MetaQueryHelper("http://localhost:8080/SqlSocket/SqlSocket", "select Scene.Name, Scene.Alias, Scene.Location.Province, Scene.Location.DetailLoc, Scene.Introduction, Scene.Level.Class, Scene.Level.Evaluation, Scene.Culture.Figures.Figure, Scene.Poems.Poem, Scene.Culture.OtherCulture, Scene.SubSights.SubSight from Sight"); //"select Scene.Name from Sight where (Scene.Location.Province='河北' or Scene.Location.Province='山西') and Scene.Culture.Figures.Figure='廉颇'"); Set didSet = mqh.getResultDIDSet(); Iterator it = didSet.iterator(); while (it.hasNext()) { int i = ((Integer)it.next()).intValue(); System.out.println(i); Vector v = mqh.getResultForDID(i); for (int j=0; j<v.size(); j++) { Vector vj = (Vector)v.elementAt(j); for (int k=0; k<vj.size(); k++) System.out.print((String)vj.elementAt(k)+":"); System.out.print("#"); } System.out.println(""); } } catch (DLI2FEException e) { e.printStackTrace(); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -