⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 keywordsearch.java

📁 emboss的linux版本的源代码
💻 JAVA
字号:
/**********************************************************************  This library is free software; you can redistribute it and/or*  modify it under the terms of the GNU Library General Public*  License as published by the Free Software Foundation; either*  version 2 of the License, or (at your option) any later version.**  This library is distributed in the hope that it will be useful,*  but WITHOUT ANY WARRANTY; without even the implied warranty of*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU*  Library General Public License for more details.**  You should have received a copy of the GNU Library General Public*  License along with this library; if not, write to the*  Free Software Foundation, Inc., 59 Temple Place - Suite 330,*  Boston, MA  02111-1307, USA.**  @author: Copyright (C) Tim Carver*********************************************************************/                                                                                              package org.emboss.jemboss.gui;                                                                                              import javax.swing.*;import javax.swing.event.HyperlinkEvent;import javax.swing.event.HyperlinkListener;import java.awt.*;import java.util.StringTokenizer;import java.util.Arrays;import java.util.Vector;import java.io.IOException;import java.net.URL;import java.io.BufferedReader;import java.io.StringReader;import org.emboss.jemboss.JembossParams;public class KeywordSearch implements HyperlinkListener{  private JTextPane searchHTML;  private Cursor cbusy = new Cursor(Cursor.WAIT_CURSOR);  private Cursor cdone = new Cursor(Cursor.DEFAULT_CURSOR);  private JFrame f;  public KeywordSearch(JTextField search, String woss,                       JembossParams mysettings, boolean withSoap,                       boolean andOperator)  {    String searchTxt = search.getText().trim().toLowerCase();    String res = search(searchTxt,woss.toLowerCase(),                        mysettings,withSoap,andOperator);    showSearchResult(res,searchTxt,mysettings);  }  /**  *  * Search the text for matches of keywords  * @param searchTxt  	keywords to search for  * @param woss		wossname text to search  * @param mysettings 	parameters  * @param andOperator	true to use AND, false to use OR operator  *  */  private String search(String searchTxt, String woss,                        JembossParams mysettings, boolean withSoap,                        boolean andOperator)  {    Vector vres = new Vector();    StringBuffer res = new StringBuffer();    boolean found = false;    try    {      String stub;      if(withSoap)        stub = mysettings.getembURL();      else      {        String embRoot = mysettings.getEmbossBin().trim();        if(embRoot.endsWith("bin/"))          embRoot = embRoot.substring(0,embRoot.length()-4);        else          embRoot = embRoot.substring(0,embRoot.length()-3);                  stub = "file://"+embRoot+"/share/EMBOSS/doc/html/emboss/apps/";      }       String line;      String searching = getSearchText(searchTxt,andOperator);       res.append("<h2><a name=\"SEARCH EMBOSS FOR "+searching+                "\">EMBOSS SEARCH FOR '"+searching+"'</a></h2>");      BufferedReader in = new BufferedReader(new StringReader(woss));      while((line = in.readLine()) != null)      {        if(line.indexOf(":") > -1)          continue;        else        {          boolean match = false;          if(andOperator)            match = searchAND(line,searchTxt);          else            match = searchOR(line,searchTxt);          if(match)          {            if(!found)            {              res.append("<table border cellpadding=4 bgcolor=\"#FFFFF0\">");              res.append("<tr><th>Program name</th><th>Description</th></tr>");            }            found = true;            String prog = line.substring(0,line.indexOf(" "));            String progHTML = "<tr><td><a href=\""+stub+prog+                              ".html\">"+prog+"</a></td><td>"+                              line.substring(line.indexOf(" "))+"</td></tr>";            if(!vres.contains(progHTML))              vres.add(progHTML);          }        }                  }      if(found)      {        Object progOrder[] =  vres.toArray();        Arrays.sort(progOrder);        for(int i=0;i<progOrder.length; i++)          res.append(progOrder[i]);        res.append("</table>");      }      else        res.append("<b>No matches found.</b>");    }    catch(IOException ioe){}     return res.toString();  }  /**  *  * Get the string representation for this search  * e.g. given s1 s2, return s1 AND s2  * @param searchTxt	search text  * @param andOperator 	operator type (AND or OR)  * @return string representation for this search  *  */  private String getSearchText(String searchTxt, boolean andOperator)  {    if(searchTxt.indexOf(" ") == -1)      return searchTxt;    StringBuffer buff = new StringBuffer();    StringTokenizer tok = new StringTokenizer(searchTxt," ");    while(tok.hasMoreTokens())    {      buff.append(tok.nextToken());      if(andOperator && tok.hasMoreTokens())        buff.append(" AND ");      else if(!andOperator && tok.hasMoreTokens())        buff.append(" OR ");    }    return buff.toString();  }  /**  *  * Search a string for matches  * @param line		string to search  * @param searchTxt	keywords to search for  * @return true if matched all keywords  *  */  private boolean searchAND(String line, String searchTxt)  {    StringTokenizer tok = new StringTokenizer(searchTxt," ");    while(tok.hasMoreTokens())    {      String token = tok.nextToken();      if(line.indexOf(token) == -1)        return false;    }    return true;  }  /**  *  * Search a string for matches  * @param line         string to search  * @param searchTxt    keywords to search for  * @return true if matched at least one keyword  *  */  private boolean searchOR(String line, String searchTxt)  {    StringTokenizer tok = new StringTokenizer(searchTxt," ");    while(tok.hasMoreTokens())    {      String token = tok.nextToken();      if(line.indexOf(token) > -1)        return true;    }    return false;  }  /**  *  * Display search results   *  */  private void showSearchResult(String woss, String searchTxt,                                JembossParams mysettings)  {    f = new JFrame("EMBOSS Keyword Search");    Dimension d = f.getToolkit().getScreenSize();    d = new Dimension((int)d.getWidth()/2,(int)d.getHeight()/2);    f.setSize(d);                                                                                                JTabbedPane tab = new JTabbedPane();    searchHTML = new JTextPane();    searchHTML.addHyperlinkListener(this);    searchHTML.setEditable(false);    searchHTML.setContentType("text/html");    searchHTML.setText(woss);    searchHTML.setCaretPosition(0);                                                                                                JScrollPane jsp = new JScrollPane(searchHTML);    jsp.setPreferredSize(d);    tab.addTab("Search :: "+searchTxt,jsp);    f.getContentPane().add(tab);    new ResultsMenuBar(f,tab,null,mysettings);    f.setVisible(true);  }  /**  *  * Method to handle hyper link events.  * @param event        hyper link event  *  */  public void hyperlinkUpdate(HyperlinkEvent event)  {    if(event.getEventType() == HyperlinkEvent.EventType.ACTIVATED)    {      f.setCursor(cbusy);      try      {        new Browser(event.getURL(), event.getDescription());//      URL url = event.getURL();//      searchHTML.setPage(url);      }      catch(IOException ioe)      {              }      f.setCursor(cdone);    }//  else if(event.getEventType() == HyperlinkEvent.EventType.ENTERED)//  else if(event.getEventType() == HyperlinkEvent.EventType.EXITED)  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -