亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? z39lsp.java

?? 數字圖書館的互操作接口
?? JAVA
?? 第 1 頁 / 共 2 頁
字號:
package dli2fe.sample;

/**
 * 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 dli2fe.DLI2FE;
import dli2fe.DLI2FEException;
import dli2fe.Metadata;
import dli2fe.Searcher;
import dli2fe.ResultAccess;
import dli2fe.DublinCore;
import dli2fe.DAV;
/* transport module libraries */
import dli2fe.helpers.*;
/* DOM-enabled XMLObject */
import dli2fe.xml.*;
/* holder for integer values */
import org.omg.CORBA.IntHolder;

import org.w3c.dom.*;

import java.util.*;
import java.net.*;
import javax.swing.Timer;
import java.awt.event.*;

import ORG.oclc.ber.*;
import ORG.oclc.z39.*;
import ORG.oclc.z39.client.*;

/**
 * sample run arg
 * dli2fens:http://localhost:9524/ search 1 "<basicsearch xmlns='DAV:' xmlns:dc='http://purl.org/metadata/dublin_core#'> <where> <eq> <prop><dc:Creator/></prop> <literal>larson</literal> </eq> </where></basicsearch>" 20
 *
 * sample search
 *
<basicsearch xmlns='DAV:' xmlns:dc='http://purl.org/metadata/dublin_core#'>
  <where>
    <eq>
     <prop><dc:Creator/></prop>
     <literal>larson</literal>
    </eq>
  </where>
</basicsearch>
 */

public class Z39LSP implements Searcher, ResultAccess, Metadata {

  /** A session corresponds to a standing TCP/IP connection to a Z39.50 server.
   * Only a "default" result set is used within a session */

  class Session implements ActionListener {

    int SID;
    Timer timer;
    // need it to be able to set the metadata
    Z39LSP lsp;
    Z39session client;
    private int  gservLength = 0;
    String query;
    boolean searchAttempted;
    boolean interrupted;
    int pendingRequests = 0;
    Hashtable records = new Hashtable(); // Integer -> eDoc element
    long endTime;

    public Session(int SID, String query, Z39LSP lsp) {

      this.SID = SID;
      this.lsp = lsp;
      this.endTime = System.currentTimeMillis() + DLI2FE.DEFAULT_TIMEOUT*1000;
      this.timer = new Timer(DLI2FE.DEFAULT_TIMEOUT*1000, this);
      this.timer.setRepeats(false);
      this.timer.start();
      this.query = query;
    }

    public void actionPerformed(ActionEvent e) {
      lsp.removeSession(this);
    }

    public int getTimeout() {
      return (int)((endTime - System.currentTimeMillis())/1000);
    }

    public void extendTimeout(int seconds) {
      endTime = System.currentTimeMillis() + seconds * 1000;
      timer.stop();
      timer.setDelay(seconds*1000);
      timer.setRepeats(false);
      timer.start();
    }

    Element getRecord(int i) {

      return (Element)records.get(new Integer(i));
    }

    /** after the invocation, range.get() yields either -1 or leaps to the next non-consec. value */
    int getNextConsecutive(RangeEnumerator range) {

      int i = range.get();
      while(range.next() && range.get() == i + 1)
	i++;
      return i;
    }

    public Element getDocs(String docSelection,  dli2fe.XMLObject docProps) throws DLI2FEException {

      System.err.println("--- getDocs");

      initialize();

      System.err.println("--- init done");

      // get the list of attributes to retrieve
      Vector attrs = NestedAttribute.collectAttributes(XMLObject.create(docProps).getElement());

      Element eSearchResult = XMLObject.getDocument().createElementNS(DLI2FE.Namespace, DLI2FE.SearchResult);

      // we know how many results to expect...
      docSelection = docSelection.trim();
      if(docSelection.endsWith("-"))
	docSelection += getNumDocs();

      RangeEnumerator range = new RangeEnumerator(docSelection);

      range.next();
      int counter = 0;

      System.err.println("--- starting loop");

      while(!interrupted && counter < lsp.MAX_DOCS_PER_FETCH) {

	int first = range.get();
	if(first == -1)
	  break;
	int last = first;

	System.err.println("--- getRecords: " + first + "," + last);

	Element eDoc = getRecord(range.get());
	if(eDoc == null) {
	  // record fault, fetch next consecutive records
	  first = range.get();
	  last = getNextConsecutive(range);
	  fetchDocuments(first, last);
	} else
	  range.next();

	for(int i = first; i <= last; i++) {
	  eDoc = getRecord(i);
	  if(eDoc != null) {
	    // match against available data
            try {
	    eSearchResult.appendChild( NestedAttribute.matchDoc(attrs, eDoc) );
            }  catch (Exception any) {
              any.printStackTrace();
              throw new DLI2FEException(DLI2FEException.ILLEGAL_METHOD_EXC, "Unknown internal error");
            }
	  }
	  counter++;
	}
      }

      //      board.getDocs(eSearchResult, new RangeEnumerator(docSelection));
      return eSearchResult;
    }

    void fetchDocuments(int first, int last) throws DLI2FEException {

      if(last > getNumDocs())
	last = getNumDocs();
      if(first > last)
	return;

      //lsp.dbg.println(DBG.SHORT, "Fetching records " + first + " through " + last);

      pendingRequests++;
      BerString req = client.present.Request(0,"default", first, last - first + 1,
					     "F", preferredRecordSyntax,
					     gservLength, gservLength);
      pendingRequests--;

      if (req == null)
	return;
	    // add header for GServer
      //	    if (gservResource != null)
      //	        System.arraycopy(gservResource, 0, req.record(), 0,
      //		    gservLength);
      try {
	pendingRequests++;
	client.present.Response(((BerConnect)client.connection).doRequest(req, client.host,client.port));
	pendingRequests--;
      } catch (Exception e) {
	//lsp.dbg.println(DBG.SHORT, "Fetching records failed: " + e.getMessage());
	client.reset();
      }

      //lsp.dbg.println(DBG.SHORT, "" + client.present.numberOfRecordsReturned +
      //	      " records returned");
      switch (client.present.presentStatus)
	    {
		case Z39presentApi.success:
		    break;
		case Z39presentApi.partial_1:
		case Z39presentApi.partial_2:
		case Z39presentApi.partial_3:
/*		case Z39presentApi.partial_4:*/
		  //lsp.dbg.println(DBG.SHORT, "Partial results returned");
		  break;
		case Z39presentApi.failure:
		  //lsp.dbg.println(DBG.SHORT, "Present failed");
		  break;
	    }

      if (client.present.errorCode != 0)
	{
	  //lsp.dbg.println(DBG.SHORT, "Could not retrieve results: Z39.50 errorCode=" + client.present.errorCode +
	  //		  ", message='" + client.present.errorMsg + "'");
	}
      addRecords(first, client.present);
    }

    String toString(DataDir dir) {

      if(dir == null)
	return "";

      StringBuffer str = new StringBuffer();

      DataDir ch = dir.child();
      if(ch != null) {
	while(ch != null) {
	  str.append(toString(ch));
	  ch = ch.next();
	}
      } else { // primitive
	str.append(dir.getString());
      }

      return str.toString();
    }

    void appendProp(Element ePropList, String namespace, String tagName, DataDir dir) {
      if(dir != null)
	ePropList.appendChild( DOMUtil.createTextNode(ePropList.getOwnerDocument(), namespace, tagName, toString(dir)) );
    }


    void addRecords(int offset, Z39present present) {

      if (present.numberOfRecordsReturned != 0)
	present.decodeRecords();

      Document doc = XMLObject.getDocument();

      for (int i=0; i<present.numberOfRecordsReturned; i++) {

	int DID = offset + i;

	if (present.presentData.elementAt(i) == null)
	  {
	    //lsp.dbg.println(DBG.SHORT, "Record " + DID + "absent from returned records!");
	    continue;
	  }
	/*
	  if (output_file != null) {
	  if (present.records[i] instanceof BerString)
	  output_file.write(((BerString)present.records[i]).record());
	  }
	  */

	Element eDoc = doc.createElementNS(DLI2FE.Namespace, DLI2FE.doc);
	Element eDID = DOMUtil.createTextNode(doc, DLI2FE.Namespace, DLI2FE.DID, String.valueOf(DID));
	eDoc.appendChild(eDID);
	Element ePropList = doc.createElementNS(DLI2FE.Namespace, DLI2FE.propList);
	eDoc.appendChild(ePropList);
	records.put(new Integer(DID), eDoc);

	DataDir dir = (DataDir)((DbPresentData)present.presentData.elementAt(i)).data;

	//if(dbg.is(DBG.VERBOSE))
	//  lsp.dbg.println(DBG.VERBOSE, "DOCUMENT:\n" + dir);

	// 0, 1, 8, 245 - almost the same!

	DataDir sec;

	sec = dir.find(245);
	if(sec != null)
	  appendProp(ePropList, DublinCore.Namespace, DublinCore.Title, sec.find(1));
	sec = dir.find(100);
	if(sec != null)
	  appendProp(ePropList, DublinCore.Namespace, DublinCore.Creator, sec.find(1));

	// co-authors
	int occ = 0;
	do {
	  sec = dir.find(700, -1, ++occ);
	  if(sec != null)
	    appendProp(ePropList, DublinCore.Namespace, DublinCore.Creator, sec.find(1));
	} while (sec != null);

	appendProp(ePropList, DublinCore.Namespace, DublinCore.Description, dir.find(500));
	appendProp(ePropList, DublinCore.Namespace, DublinCore.Description, dir.find(504));
	appendProp(ePropList, DublinCore.Namespace, DublinCore.Description, dir.find(300));

	sec = dir.find(650);
	if(sec != null)
	  appendProp(ePropList, DublinCore.Namespace, DublinCore.Subject, sec.find(1));

	sec = dir.find(260);
	if(sec != null) {
	  appendProp(ePropList, DublinCore.Namespace, DublinCore.Publisher, sec.find(2));
	  appendProp(ePropList, DublinCore.Namespace, DublinCore.Date, sec.find(3));
	}



	//	DataDir dPublisher = dir.find(260);
	/*
	String ids = "";
	DataDir t = dir.child();
	while(t != null) {
	  ids += t.fldid() + ", ";
	  t = t.next();
	}
	  //	DataDir dDescription = dir.find(500);

	//	ePropList.appendChild( DOMUtil.createTextNode(doc, DublinCore.Creator,
	//						      toString(dCreator)) );
	ePropList.appendChild( DOMUtil.createTextNode(doc, DublinCore.Description,
						      ids) );
						      */
	  /*
	  if (present.recordSyntax == null) {
	    System.out.println(((DbPresentData)present.presentData.elementAt(i)).data);
	  }
	  else if (present.recordSyntax.equals(Z39presentApi.SIMPLETEXT_SYNTAX))
	    {
	      DataDir dd =
		(DataDir)((DbPresentData)present.presentData.elementAt(i)).data;
	      while (dd.form() != ASN1.PRIMITIVE)
		dd = dd.child();
	      if (dd != null)
		System.out.println(dd.dgetChar());

	    }
	  else if (present.recordSyntax.equals(
					       Z39presentApi.OCLC_BER_SYNTAX) ||
		   present.recordSyntax.equals(Z39presentApi.MARC_SYNTAX) ||
		   present.recordSyntax.equals(Z39presentApi.OPAC_SYNTAX))

	    {
	      System.out.println((DataDir)((DbPresentData)present.presentData.elementAt(i)).data);
	    }
	  else if (present.recordSyntax.equals(Z39presentApi.EXPLAIN_SYNTAX))
	    {
	      System.out.println(Explain.getRecord(
						   new DataDir((BerString)((DbPresentData)present.presentData.elementAt(i)).data)));
	    }
	  else
	    System.out.println(((DbPresentData)present.presentData.elementAt(i)).data);
	    */
      }
    }

    public Timer getTimer() {
      return timer;
    }

    public int getSID() {
      return SID;
    }

    public int getNumDocs() throws DLI2FEException {
      initialize();
      return client.search.resultCount;
    }

    public void cancel() {

      interrupted = true;
      timer.stop();

      if(client != null) {
	if(pendingRequests == 0) {
	  // good client
	  BerString req = client.close.Request(0, Z39closeApi.finished, gservLength,
					       gservLength);
	  if (req != null) {
	    // add header for GServer.
	    //	  if (gservResource != null)
	    //		    System.arraycopy(gservResource, 0, req.record(), 0,
	    //			gservLength);
	    try {client.close.Response(((BerConnect)client.connection).doRequest(req, client.host, client.port)); }
	    catch (Exception e) {}
	    client = null;
	  }
	} else {
	  //lsp.dbg.println(DBG.SHORT, "" + pendingRequests + " pending requests, shutting down the connection");
	  client.closeConnection();
	  //	  client = null; otherwise null pointer exception in awaken thread!
	}
      }
    }

    void createSubcollectionInfo() throws DLI2FEException {

      if(lsp.subcolInfo == null) {

	// determine subcollections
	Document doc = XMLObject.getDocument();
	Element eSubcolInfo = doc.createElementNS(DLI2FE.Namespace, DLI2FE.subcolInfo);

	if (client.init.DBList != null &&
	    client.init.DBList.length > 0) {

	  for (int i=0; i<client.init.DBList.length; i++) {

	    Element eSubCol = doc.createElementNS(DLI2FE.Namespace, DLI2FE.subcol);
	    eSubcolInfo.appendChild(eSubCol);
	    eSubCol.appendChild( DOMUtil.createTextNode(doc, DLI2FE.Namespace, DLI2FE.subcolName, client.init.DBList[i]) );
	    if (client.init.DisplayDBList != null)
	      eSubCol.appendChild( DOMUtil.createTextNode(doc, DLI2FE.Namespace, DLI2FE.subcolName, client.init.DisplayDBList[i]) );
	    if(i == 0) {
	      eSubCol.appendChild( doc.createElementNS(DLI2FE.Namespace, DLI2FE.defaultSubcol) );
	      lsp.defaultSubcol = client.init.DBList[0];
	    }
	  }
	  lsp.subcolInfo = new XMLObject(eSubcolInfo);
	}
      }
    }

    synchronized void initialize() throws DLI2FEException {

      if(client == null) {

	//lsp.dbg.println(DBG.SHORT, "Initializing Z39.50 session to " + lsp.host + ":" + lsp.port);

	client = new Z39session();
	client.host = lsp.host;
	client.port = lsp.port;

	// init
	pendingRequests++;
	client.initClient(client.host, client.port);

	if (client.connection == null) {
	  try {
	    client.connection = new BerConnect(client.host, client.port);
	  } catch (Exception n) {
	    pendingRequests--;
	    client.reset();
	    throw new DLI2FEException(DLI2FEException.SERVER_ERROR_EXC,
				     "Could not connect to " + client.host + ":" + client.port + ": " + n.getMessage());
	  }
	}

	//    System.out.println("Talking to port " + client.port + " of host '" +
	//		       client.host + "'");
	BerString req = client.init.Request(0,null,500000,100000000, client.autho,
					    client.password, "", null, false /*fSetReconnect*/,
					    gservLength, gservLength);
	pendingRequests--;
	if (req == null)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
9191成人精品久久| 尤物视频一区二区| 亚洲狼人国产精品| 国产综合色精品一区二区三区| 懂色av一区二区三区免费观看| 欧美无砖砖区免费| 亚洲天天做日日做天天谢日日欢| 美女精品自拍一二三四| 日本韩国欧美一区| 国产精品视频看| 精品一区二区影视| 欧美精品久久一区| 夜夜精品浪潮av一区二区三区| 国产一区二区日韩精品| 欧美一卡二卡三卡四卡| 亚洲午夜国产一区99re久久| av电影在线不卡| 日本一区二区免费在线观看视频 | 日韩国产精品久久久| 91香蕉视频mp4| 国产精品美女久久久久久| 久久99精品久久久久久| 91精品国产综合久久久久久久 | 国精产品一区一区三区mba桃花| 欧美在线观看视频一区二区| 国产精品久久久久aaaa| 国产成人精品午夜视频免费| 精品国产伦一区二区三区免费 | 精品99一区二区| 奇米精品一区二区三区在线观看| 欧美日韩在线电影| 亚洲激情成人在线| 欧美午夜片在线观看| 一区二区三区波多野结衣在线观看| 色哟哟日韩精品| 一区二区三区高清在线| 欧美日韩一区二区三区不卡 | 中文字幕一区二区视频| 成人综合婷婷国产精品久久免费| 欧美韩日一区二区三区四区| 国产99精品在线观看| 欧美激情一区二区在线| 成人av影院在线| 亚洲日本在线看| 欧美三区在线观看| 婷婷国产v国产偷v亚洲高清| 91麻豆精品久久久久蜜臀| 久久成人免费日本黄色| 国产三级精品在线| 日本黄色一区二区| 日韩av中文字幕一区二区三区| 精品日韩99亚洲| 风流少妇一区二区| 亚洲自拍都市欧美小说| 91精品中文字幕一区二区三区| 日本不卡视频在线观看| 国产校园另类小说区| 色天天综合色天天久久| 奇米精品一区二区三区在线观看一| 久久亚洲精精品中文字幕早川悠里| 成人精品免费视频| 亚洲国产日韩精品| 久久色.com| 91麻豆免费在线观看| 日本sm残虐另类| 国产精品久线在线观看| 欧美精品乱码久久久久久按摩| 韩国精品主播一区二区在线观看| 中文字幕一区免费在线观看| 欧美老肥妇做.爰bbww视频| 国产精品系列在线播放| 亚洲国产毛片aaaaa无费看| 国产日韩欧美a| 欧美性生活一区| 丁香一区二区三区| 天堂久久一区二区三区| 国产精品网友自拍| 91精品国产欧美一区二区成人 | 日韩欧美国产一区二区三区| 国产98色在线|日韩| 日韩精彩视频在线观看| 国产精品视频免费看| 日韩欧美一区电影| 欧美日韩综合在线| 成人午夜av在线| 蜜桃视频一区二区三区在线观看| 最新成人av在线| 欧美国产丝袜视频| 2023国产精品自拍| 欧美精品日韩一本| 色香蕉久久蜜桃| 懂色av中文一区二区三区| 精品一区在线看| 日韩国产欧美在线观看| 亚洲已满18点击进入久久| 国产精品成人免费| 久久久久久综合| 日韩欧美国产三级| 正在播放亚洲一区| 欧美日精品一区视频| 91欧美激情一区二区三区成人| 国产99久久久国产精品潘金网站| 捆绑调教美女网站视频一区| 亚洲成人免费av| 亚洲高清免费视频| 亚洲成人资源在线| 午夜私人影院久久久久| 亚洲精选视频在线| 亚洲欧美激情小说另类| 中文字幕佐山爱一区二区免费| 中文字幕精品一区二区三区精品| 久久色中文字幕| 国产欧美一区二区三区沐欲| 欧美精品一区二区三区视频| 精品久久国产97色综合| www国产精品av| 国产亚洲欧美激情| 中文字幕久久午夜不卡| 欧美激情自拍偷拍| 亚洲视频 欧洲视频| 一区二区三区视频在线看| 亚洲综合自拍偷拍| 亚洲福利一二三区| 久久99精品一区二区三区| 激情六月婷婷综合| 成人午夜电影网站| 欧美影院一区二区| 欧美二区三区的天堂| 91麻豆精品国产| 久久久久免费观看| 最新久久zyz资源站| 亚洲国产精品一区二区www| 午夜精品国产更新| 久久黄色级2电影| 国产精品一区不卡| 色婷婷激情综合| 欧美一区二区三区在线看| 欧美草草影院在线视频| 国产精品婷婷午夜在线观看| 亚洲精品欧美激情| 精一区二区三区| gogo大胆日本视频一区| 欧美系列亚洲系列| 久久亚洲精精品中文字幕早川悠里 | 精品一区二区三区不卡| 国产成人免费视频| 欧美性欧美巨大黑白大战| 日韩精品中文字幕一区二区三区| 精品国产乱码久久久久久夜甘婷婷 | 免费一区二区视频| 国产成人精品三级麻豆| 在线看一区二区| 2014亚洲片线观看视频免费| 中文字幕一区二区三区乱码在线 | 亚洲一区在线视频观看| 极品美女销魂一区二区三区免费| 国产91精品久久久久久久网曝门 | 色综合久久久久综合| 欧美一区二区三区婷婷月色| 欧美国产乱子伦| 久久精品国产免费看久久精品| 国产激情视频一区二区在线观看| 色综合天天性综合| 26uuu精品一区二区在线观看| 亚洲与欧洲av电影| 国产福利一区二区三区| 911精品国产一区二区在线| 国产精品短视频| 精品一区二区三区视频在线观看 | 精品成人a区在线观看| 中文字幕日韩一区二区| 激情成人综合网| 欧美福利视频导航| 综合av第一页| 国产精品一区二区三区网站| 7777精品伊人久久久大香线蕉最新版| 中文字幕一区二| 国产91丝袜在线观看| 亚洲精品一区二区三区四区高清 | 一区二区三区在线免费| 国产精品77777竹菊影视小说| 欧美一区二区久久| 亚洲第一激情av| 欧美色综合网站| 亚洲品质自拍视频网站| 成人午夜大片免费观看| 久久久亚洲精品石原莉奈| 麻豆91在线看| 69av一区二区三区| 亚洲一二三区视频在线观看| 成年人国产精品| 国产精品丝袜久久久久久app| 国产精品一二三区在线| 日韩精品一区二区三区在线播放 | 亚洲图片自拍偷拍| 色欧美日韩亚洲| 亚洲影院久久精品| 欧美伊人久久久久久午夜久久久久| 亚洲综合色区另类av| 欧美在线观看一区二区|