home *** CD-ROM | disk | FTP | other *** search
Wrap
package hhapplet; import XMLConsumer.Fts; import XMLConsumer.FtsEntry; import XMLConsumer.FtsTData; import XMLConsumer.FtsWData; import XMLConsumer.IEntry; import XMLConsumer.Topic; import java.awt.Component; import java.awt.Graphics; import java.awt.Image; import java.net.URL; import java.util.Enumeration; import java.util.Vector; public class FtsListView extends ListView implements IChunkedDataListener { private static final String m_sFtsBreakChars = "\t\r\n\"\\ .,!@#$%^&*()~'`:;<>?/{}[]|+-=\u0085\u0092\u0093\u0094\u0095\u0096\u0097\u0099©®·"; private static final int m_nFtsBreakCharsNum = "\t\r\n\"\\ .,!@#$%^&*()~'`:;<>?/{}[]|+-=\u0085\u0092\u0093\u0094\u0095\u0096\u0097\u0099©®·".length(); private Vector m_chunkedInfos; private String m_sSearchingKey; private String m_sBackSearchingKey; private int m_nCurrentOp; private boolean m_bFirst = true; private boolean m_bNot = false; private boolean m_bReady = false; private String m_sCurrentWord; private String m_sCheckKey; private int m_nIndexNum; private FtsWData[] m_aFtsContentsCon; private int[] m_aProj; private int m_nCheck; private Vector m_aTopicInfo; private Vector m_aTopicCheckInfo; private int m_nTopicCheck; private Vector mergeTopics(Vector var1, Vector var2) { int var3 = 0; int var4 = 0; int var5 = 0; if (var1 != null) { var5 = var1.size(); } int var6 = 0; if (var2 != null) { var6 = var2.size(); } Vector var7 = new Vector(); while(var3 < var5 || var4 < var6) { if (var3 < var5 && var4 < var6) { if (Language.compare(((FtsEntry)var1.elementAt(var3)).getName(), ((FtsEntry)var2.elementAt(var4)).getName()) < 0) { var7.addElement(var1.elementAt(var3++)); } else { var7.addElement(var2.elementAt(var4++)); } } else if (var3 < var5) { var7.addElement(var1.elementAt(var3++)); } else if (var4 < var6) { var7.addElement(var2.elementAt(var4++)); } } return var7; } private void clearList() { ((ListView)this).setVerticalMax(0); this.m_aTopicInfo.removeAllElements(); ((ListView)this).clearHightLighted(); ((ListView)this).clearSelected(); } private void findFTSKey() { this.clearList(); this.m_nCurrentOp = 1; this.m_bNot = false; if (this.m_sSearchingKey != "") { this.m_bFirst = true; this.findOneKey(); } } private void findOneKey() { if (this.m_sSearchingKey == "") { this.displayTopics(); this.checkAgain(); } else { String var1 = this.m_sSearchingKey; String var2 = ""; int var3 = -1; int var4 = 0; int var5 = -1; for(int var6 = 0; var6 < m_nFtsBreakCharsNum; ++var6) { var4 = var1.indexOf("\t\r\n\"\\ .,!@#$%^&*()~'`:;<>?/{}[]|+-=\u0085\u0092\u0093\u0094\u0095\u0096\u0097\u0099©®·".charAt(var6)); if (var4 != -1 && (var3 == -1 || var4 < var3)) { var3 = var4; var5 = var6; } } if (var3 == -1) { var2 = var1; var1 = ""; } else { var2 = var1.substring(0, var3); var1 = var1.substring(var3 + 1); } this.m_sSearchingKey = var1; if (var2.compareTo("or") != 0 && (var5 < 0 || "\t\r\n\"\\ .,!@#$%^&*()~'`:;<>?/{}[]|+-=\u0085\u0092\u0093\u0094\u0095\u0096\u0097\u0099©®·".charAt(var5) != '|')) { if (var2.compareTo("and") != 0 && (var5 < 0 || "\t\r\n\"\\ .,!@#$%^&*()~'`:;<>?/{}[]|+-=\u0085\u0092\u0093\u0094\u0095\u0096\u0097\u0099©®·".charAt(var5) != '&')) { if (var2.compareTo("not") == 0 || var5 >= 0 && "\t\r\n\"\\ .,!@#$%^&*()~'`:;<>?/{}[]|+-=\u0085\u0092\u0093\u0094\u0095\u0096\u0097\u0099©®·".charAt(var5) == '~') { this.m_bNot = !this.m_bNot; } else if (var2.length() != 0 && !Language.isStopWord(var2)) { String var10 = Language.getStem(var2); this.m_sCurrentWord = var10; this.ftsFindKeyword(); return; } } else { this.m_nCurrentOp = 1; this.m_bNot = false; } } else { this.m_nCurrentOp = 0; this.m_bNot = false; } this.findOneKey(); } } public void search(String var1) { if (this.m_sSearchingKey == null) { this.m_sSearchingKey = var1.toLowerCase(); ((ListView)this).setTimeout("findFTSKey", 1); } else { this.m_sBackSearchingKey = var1.toLowerCase(); } } protected void listPaint(Graphics var1, Image var2) { int var3 = this.getWidth(var1); ((ListView)this).setHorizontalMax(var3); int var4 = ((ListView)this).getTop(); int var5 = var4; while(var5 < this.m_aTopicInfo.size()) { IEntry var6 = (IEntry)this.m_aTopicInfo.elementAt(var5); var6.display(var1, var5 - var4, ((ListView)this).getUnitHeight(), ((Component)this).getBackground(), var2); ++var5; if (var5 >= var4 + ((ListView)this).getVisible()) { break; } } } public FtsListView(Vector var1) { this.m_chunkedInfos = var1; this.m_aTopicInfo = new Vector(); this.clearList(); } private void checkAgain() { this.m_sSearchingKey = this.m_sBackSearchingKey; this.m_sBackSearchingKey = null; if (this.m_sSearchingKey != null) { ((ListView)this).setTimeout("findFTSKey", 1); } } private Vector getTopics(FtsWData var1, int var2, String var3) { Vector var4 = new Vector(); if (var1 != null) { Vector var5 = var1.getTopics(var3); if (var5 != null) { for(int var6 = 0; var6 < var5.size(); ++var6) { Fts var7 = (Fts)this.m_chunkedInfos.elementAt(var2); FtsTData var8 = var7.getChunkedTopicData((Integer)var5.elementAt(var6)); if (var8 != null) { if (!var8.isLoaded()) { var8.load(this); return null; } Vector var9 = var8.getTopics(); try { if (var9 != null) { var4.addElement(var9.elementAt((Integer)var5.elementAt(var6) - var8.getBegin())); } } catch (Exception var11) { ((Throwable)var11).printStackTrace(); } } } } } return var4; } public void accept(Vector var1) { if (var1.size() == 1) { URL var2 = (URL)var1.elementAt(0); BsscHelpRedirector.showDoc(var2); } } public void dispatchToDo(String var1) { if (var1.equals("findFTSKey")) { this.findFTSKey(); } else if (var1.equals("ftsFindKeyword")) { this.ftsFindKeyword(); } else { super.dispatchToDo(var1); } } public void putData(IChunkedData var1) { ((ListView)this).setTimeout("ftsFindKeyword", 1); } protected IEntry getEntryByPos(int var1) { return this.m_aTopicInfo.size() > var1 ? (IEntry)this.m_aTopicInfo.elementAt(var1) : null; } public void displayError(String var1) { this.clearList(); this.m_aTopicInfo.addElement(new ErrEntry(var1)); ((ListView)this).setVerticalMax(this.m_aTopicInfo.size()); ((Component)this).repaint(); } private void insertTopic(FtsEntry var1) { int var2 = 0; int var3 = this.m_aTopicInfo.size() - 1; if (var3 < 0) { this.m_aTopicInfo.addElement(var1); } else { boolean var6 = false; int var4; FtsEntry var5; do { var4 = var2 + var3 >> 1; var5 = (FtsEntry)this.m_aTopicInfo.elementAt(var4); if (Language.compare(((Topic)var5).getName(), ((Topic)var1).getName()) > 0) { var3 = var4 - 1; } else { if (Language.compare(((Topic)var5).getName(), ((Topic)var1).getName()) >= 0) { var6 = true; break; } var2 = var4 + 1; } } while(var2 <= var3); if (var6) { this.m_aTopicInfo.insertElementAt(var1, var4); } else if (Language.compare(((Topic)var5).getName(), ((Topic)var1).getName()) < 0) { this.m_aTopicInfo.insertElementAt(var1, var4 + 1); } else { this.m_aTopicInfo.insertElementAt(var1, var4); } } } protected int getWidth(Graphics var1) { int var2 = 0; int var3 = 0; Enumeration var4 = this.m_aTopicInfo.elements(); while(var4.hasMoreElements()) { IEntry var5 = (IEntry)var4.nextElement(); var3 = var5.getWidth(var1); if (var3 > var2) { var2 = var3; } } return var2; } private void displayTopics() { if (this.m_aTopicInfo.size() == 0) { this.m_aTopicInfo.addElement(new ErrEntry(ResourceLib.GetRes("TopicsNotFound"))); } ((Component)this).repaint(); } private boolean mergewithPreviousResult(Vector var1) { if (var1 != null && var1.size() != 0) { int var2 = var1.size(); if (this.m_nCurrentOp != 0 && !this.m_bFirst) { if (this.m_nCurrentOp == 1) { if (this.m_bNot) { int var10 = 0; for(int var12 = 0; var12 < var2; ++var12) { FtsEntry var14 = (FtsEntry)var1.elementAt(var12); for(int var16 = var10; var16 < this.m_aTopicInfo.size(); ++var16) { FtsEntry var18 = (FtsEntry)this.m_aTopicInfo.elementAt(var16); if (var14.equalTo(var18)) { this.m_aTopicInfo.removeElementAt(var16); var10 = var16; break; } } } } else { int var9 = 0; for(int var11 = 0; var11 < this.m_aTopicInfo.size(); ++var11) { boolean var13 = false; FtsEntry var15 = (FtsEntry)this.m_aTopicInfo.elementAt(var11); for(int var17 = var9; var17 < var2; ++var17) { FtsEntry var19 = (FtsEntry)var1.elementAt(var17); if (var15.equalTo(var19)) { var13 = true; var9 = var17; } } if (!var13) { this.m_aTopicInfo.removeElementAt(var11); --var11; } } } } } else { if (this.m_bNot) { this.displayError(ResourceLib.GetRes("CantSearch")); return false; } int var3 = 0; for(int var4 = 0; var4 < var2; ++var4) { boolean var5 = false; FtsEntry var6 = (FtsEntry)var1.elementAt(var4); for(int var7 = var3; var7 < this.m_aTopicInfo.size(); ++var7) { FtsEntry var8 = (FtsEntry)this.m_aTopicInfo.elementAt(var7); if (var6.equalTo(var8)) { var5 = true; var3 = var7; break; } } if (!var5) { this.insertTopic(var6); } } } ((ListView)this).setVerticalMax(this.m_aTopicInfo.size()); } else if (this.m_nCurrentOp == 1 && !this.m_bNot) { this.clearList(); } else if (this.m_nCurrentOp == 0 && this.m_bNot) { this.displayError(ResourceLib.GetRes("CantSearch")); return false; } return true; } private void ftsFindKeyword() { String var1 = this.m_sCurrentWord; int var2 = this.m_chunkedInfos.size(); boolean var3 = false; int var6 = 0; if (var1 != null) { FtsWData[] var4; int[] var5; if (this.m_sCheckKey != null && !var1.equals(this.m_sCheckKey) && this.m_nIndexNum != 0) { var6 = this.m_nIndexNum; var4 = this.m_aFtsContentsCon; var5 = this.m_aProj; } else { var4 = new FtsWData[var2]; var5 = new int[var2]; this.m_nCheck = 0; this.m_nTopicCheck = 0; this.m_aTopicCheckInfo = null; this.m_sCheckKey = var1; } for(int var7 = this.m_nCheck; var7 < var2; ++var7) { Fts var8 = (Fts)this.m_chunkedInfos.elementAt(var7); FtsWData var9 = var8.getChunkedData(var1); if (var9 != null) { if (!var9.isLoaded()) { var3 = true; this.m_nIndexNum = var6; this.m_nCheck = var7; this.m_aFtsContentsCon = var4; this.m_aProj = var5; var9.load(this); break; } var5[var6] = var7; var4[var6++] = var9; } } if (!var3) { Vector var10 = this.m_aTopicCheckInfo; for(int var11 = this.m_nTopicCheck; var11 < var6; ++var11) { Vector var12 = this.getTopics(var4[var11], var5[var11], var1); if (var12 == null) { this.m_nCheck = this.m_chunkedInfos.size(); this.m_nTopicCheck = var11; this.m_aTopicCheckInfo = var10; this.m_aFtsContentsCon = var4; return; } if (var11 == 0) { var10 = var12; } else { var10 = this.mergeTopics(var10, var12); } } if (this.mergewithPreviousResult(var10)) { this.m_bFirst = false; this.findOneKey(); return; } this.checkAgain(); } } } }