Main Page   Packages   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members  

QueryPanel.java

00001 package edu.ksu.cis.bandera.pdgslicer.dependency;
00002 
00003 import javax.swing.*;
00004 import javax.swing.tree.*;
00005 import edu.ksu.cis.bandera.annotation.*;
00006 import edu.ksu.cis.bandera.jjjc.CompilationManager;
00007 import ca.mcgill.sable.soot.*;
00008 import edu.ksu.cis.bandera.pdgslicer.*;
00009 import ca.mcgill.sable.util.Set;
00010 import ca.mcgill.sable.util.ArraySet;
00011 import ca.mcgill.sable.util.Iterator;
00012 import java.util.Vector;
00013 import java.util.Enumeration;
00014 import java.util.Hashtable;
00015 import edu.ksu.cis.bandera.util.Preferences;
00016 /**
00017  * Insert the type's description here.
00018  * Creation date: (00-12-1 15:47:32)
00019  * @author: 
00020  */
00021 public class QueryPanel extends JPanel implements java.awt.event.ActionListener, java.awt.event.MouseListener, javax.swing.event.TreeSelectionListener {
00022     private boolean setQueryIndexByProgram = false;
00023     private Dependencies dependFrame = null;
00024     DefaultMutableTreeNode currentQueryResultTreeRoot = null;
00025     private String queries[] = {"none", "Slice trace from current stmt", "All conditionals in the slice", "All conditionals influence current node"};
00026     static final int NO_QUERY = 0;
00027     static final int SLICE_TRACE = 1;
00028     static final int ALL_CONDITIONALS = 2;
00029     static final int CONDITIONALS_TO_CURRENT_STMT = 3;
00030     private JComboBox ivjQueryKindComboBox = null;
00031     private JLabel ivjQueryKindLabel = null;
00032     private JScrollPane ivjQueryResultScrollPane = null;
00033     private JTree ivjQueryResultTree = null;
00034 /**
00035  * QueryPanel constructor comment.
00036  */
00037 public QueryPanel() {
00038     super();
00039     initialize();
00040 }
00041 /**
00042  * QueryPanel constructor comment.
00043  * @param layout java.awt.LayoutManager
00044  */
00045 public QueryPanel(java.awt.LayoutManager layout) {
00046     super(layout);
00047 }
00048 /**
00049  * QueryPanel constructor comment.
00050  * @param layout java.awt.LayoutManager
00051  * @param isDoubleBuffered boolean
00052  */
00053 public QueryPanel(java.awt.LayoutManager layout, boolean isDoubleBuffered) {
00054     super(layout, isDoubleBuffered);
00055 }
00056 /**
00057  * QueryPanel constructor comment.
00058  * @param isDoubleBuffered boolean
00059  */
00060 public QueryPanel(boolean isDoubleBuffered) {
00061     super(isDoubleBuffered);
00062 }
00063 /**
00064  * Method to handle events for the ActionListener interface.
00065  * @param e java.awt.event.ActionEvent
00066  */
00067 /* WARNING: THIS METHOD WILL BE REGENERATED. */
00068 public void actionPerformed(java.awt.event.ActionEvent e) {
00069     // user code begin {1}
00070     // user code end
00071     if (e.getSource() == getQueryKindComboBox()) 
00072         connEtoC1();
00073     // user code begin {2}
00074     // user code end
00075 }
00076 /**
00077  * connEtoC1:  (QueryKindComboBox.action. --> QueryPanel.queryKindComboBox_ActionEvents()V)
00078  */
00079 /* WARNING: THIS METHOD WILL BE REGENERATED. */
00080 private void connEtoC1() {
00081     try {
00082         // user code begin {1}
00083         if (!setQueryIndexByProgram)
00084         // user code end
00085         this.queryKindComboBox_ActionEvents();
00086         // user code begin {2}
00087         // user code end
00088     } catch (java.lang.Throwable ivjExc) {
00089         // user code begin {3}
00090         // user code end
00091         handleException(ivjExc);
00092     }
00093 }
00094 /**
00095  * connEtoC2:  (QueryResultTree.treeSelection. --> QueryPanel.queryResultTree_TreeSelectionEvents()V)
00096  */
00097 /* WARNING: THIS METHOD WILL BE REGENERATED. */
00098 private void connEtoC2() {
00099     try {
00100         // user code begin {1}
00101         // user code end
00102         this.queryResultTree_TreeSelectionEvents();
00103         // user code begin {2}
00104         // user code end
00105     } catch (java.lang.Throwable ivjExc) {
00106         // user code begin {3}
00107         // user code end
00108         handleException(ivjExc);
00109     }
00110 }
00111 /**
00112  * connEtoC3:  (QueryResultTree.mouse.mouseClicked(java.awt.event.MouseEvent) --> QueryPanel.queryResultTree_MouseClicked(Ljava.awt.event.MouseEvent;)V)
00113  * @param arg1 java.awt.event.MouseEvent
00114  */
00115 /* WARNING: THIS METHOD WILL BE REGENERATED. */
00116 private void connEtoC3(java.awt.event.MouseEvent arg1) {
00117     try {
00118         // user code begin {1}
00119         // user code end
00120         this.queryResultTree_MouseClicked(arg1);
00121         // user code begin {2}
00122         // user code end
00123     } catch (java.lang.Throwable ivjExc) {
00124         // user code begin {3}
00125         // user code end
00126         handleException(ivjExc);
00127     }
00128 }
00129 /**
00130  * Insert the method's description here.
00131  * Creation date: (00-7-12 22:06:25)
00132  * @return javax.swing.tree.DefaultMutableTreeNode
00133  * @param root javax.swing.tree.DefaultMutableTreeNode
00134  * @param sliceTraceNode edu.ksu.cis.bandera.pdgslicer.SliceTraceNode
00135  */
00136 private DefaultMutableTreeNode cuttingTreeWRT(DefaultMutableTreeNode root, SliceTraceNode sliceTraceNode) {
00137 
00138     if (!sliceTraceContains(root, sliceTraceNode))
00139         return null;
00140     if (traceRootIs(root, sliceTraceNode))
00141         return root;
00142     Set workSetOfNextLevel;
00143     Set workSetOfCurrentLevel = new ArraySet();
00144     workSetOfCurrentLevel.add(root);
00145     do {
00146         workSetOfNextLevel = new ArraySet();
00147         for (Iterator nodeIt = workSetOfCurrentLevel.iterator(); nodeIt.hasNext();) {
00148             DefaultMutableTreeNode currentNode = (DefaultMutableTreeNode) nodeIt.next();
00149             Vector removableChildren = new Vector();
00150             for (int i = 0; i < currentNode.getChildCount(); i++) {
00151                 DefaultMutableTreeNode oneChild = (DefaultMutableTreeNode) currentNode.getChildAt(i);
00152                 if (sliceTraceContains(oneChild, sliceTraceNode)) {
00153                     if (!traceRootIs(oneChild, sliceTraceNode))
00154                         workSetOfNextLevel.add(oneChild);
00155                 } else
00156                     removableChildren.addElement(oneChild);
00157             }
00158             for (Enumeration enum = removableChildren.elements(); enum.hasMoreElements();) {
00159                 DefaultMutableTreeNode removableNode = (DefaultMutableTreeNode) enum.nextElement();
00160                 currentNode.remove(removableNode);
00161             }
00162         }
00163         workSetOfCurrentLevel = workSetOfNextLevel;
00164     } while (!workSetOfNextLevel.isEmpty());
00165     return root;
00166     
00167 }
00168 private DefaultMutableTreeNode getBackwardSliceTraceFrom(SliceTraceNode stn) {
00169     DefaultMutableTreeNode pathTreeRoot = new DefaultMutableTreeNode(stn);
00170     Set visitedTraceNode = new ArraySet();
00171     visitedTraceNode.add(stn);
00172     Hashtable traceNodeForCurrentLevel = new Hashtable();
00173     traceNodeForCurrentLevel.put(stn, pathTreeRoot);
00174     Hashtable traceNodeForNextLevel;
00175     do {
00176         traceNodeForNextLevel = new Hashtable();
00177         for (java.util.Iterator nodeIt = traceNodeForCurrentLevel.keySet().iterator(); nodeIt.hasNext();) {
00178             SliceTraceNode sNode = (SliceTraceNode) nodeIt.next();
00179             DefaultMutableTreeNode currentRoot = (DefaultMutableTreeNode) traceNodeForCurrentLevel.get(sNode);
00180             for (java.util.Iterator childIt = sNode.children.keySet().iterator(); childIt.hasNext();) {
00181                 SliceTraceNode child = (SliceTraceNode) childIt.next();
00182                 if (!visitedTraceNode.contains(child)) {
00183                     if (child != Slicer.sliceTraceRoot && !child.stmtAnnotation.toString().equals("")) {
00184                         DefaultMutableTreeNode treeChild = new DefaultMutableTreeNode(child);
00185                         currentRoot.add(treeChild);
00186                         visitedTraceNode.add(child);
00187                         traceNodeForNextLevel.put(child, treeChild);
00188                     }
00189                 }
00190             }
00191         }
00192         traceNodeForCurrentLevel = traceNodeForNextLevel;
00193     } while (!traceNodeForNextLevel.isEmpty());
00194     return pathTreeRoot;
00195 }
00196 /**
00197  * 
00198  */
00199 /* WARNING: THIS METHOD WILL BE REGENERATED. */
00200 private static void getBuilderData() {
00201 /*V1.1
00202 **start of data**
00203     D0CB838494G88G88G3BF908A9GGGGGGGGGGGG8CGGGE2F5E9ECE4E5F2A0E4E1F4E135DA8FD4D45719A70DFB16BD753836EBCFE9EAF34C091E35A91B12C40DFF2812C892CD4092C392CC0C51D64F3A3BA6651CE4CF6DD952DC86B0E8082212C8933B1936AAEA90D0D04781790F0AC0A4B2EB30268D0F19870C3C19B73EF98838F63B5FF77F3CF9B33C81358967FC3CF73F7B5DFB3F7B5D5F7D6E775DB724686399F95936A2C23273887FBB19CDC862D1C20A53EABF943C520454ECE27A7B9D50
00204     CE7216128B4F9A28ABDC87C49E7AF3BE14BB211C78EAEA769EF85FCD667D39279CDE220C63003A06C0523F0FBFCE30CC0C738EAD6F779540F3BB108BF8A3C0492883B96DAB667C69D05E4E5F1132ED045CFC88E5DE2BA9B671739FE2F21D7074G599FC619EE5FDEDE1F8CBC14D98D1449E573C1E6AB556E5A858717CB4C1FCD74E317ED6F61D8267E858DBC4C5ACE664FC250888D11C336B9CF615CBA877BEBE54FD059E0F0284C6D8D1675CAFE0F2CC9E581CFFFD0713AE52D4CA387E460795D23CE67E7C332B6
00205     5AA979E5855AE6D11DF71F4E277D014ED00EFD84F95FBC0DF62A0777EE2040A3C26F57BBEA38DEBD2F4DA595EBFA236A1D728853B77311105E76DFAF491DB1877B3F0B2E83362B0072G9053E539CF6832FE0E506544A9145DBBB7B53B8A28FD2E603FC5799EA85F841AB6D7687833BA2123B230003CD95EEF5B91C5477839CC377439A19DB75FF31F6DB794ABEF1763FA974E03F1014E81A9C013016201BE2298DDD8F6981E8D3DFA136A73297E06C020D171E89D2AC7D6605D69049A4E3BA83BD54DC38843E171
00206     69D28BFD84A54F8B47A0921B5B67C460A64E76A0097DD823D8081C1B2B6F2CAD037731E9DEE8EE7B9EC53B3DCD5736G5E319D6A43786F56A2FF4044E7EB75ADAA0F659828DB7F2830733403C21702EF4FA4717D97ED6FD8685273145FF6EEBE5321E7FEC897E663D5C751461301BF9BA889A883E8B3D07182E1635C724A09EC5C6A57E54DAFA9DDC33D81C9539B073C8A6C81EE6B3F770DE7EBABE26D3EF35B6D18DDE6D71A57A8FF51A5CB3B44A4765A2A96B0FB34AF8859050D3DA26A584A02315858EE2C6183
00207     F4CF44ACE0EB18E37067D07ED4931F2DED8D6553B25465AECC4DE672571C948B8BA3B172974A0FD99809119C2740C89C54E58131759D2EC4FF58338876A850B420F82094200DC0D90B449ADFA8AF3F45FD54E9DADF56B63F6283F84AA33AA6357A033A64F74B17A44DAB75AAF210F0191D9528DBEFD83B8FAA90FBEE98632C6C870F29FBD5BF74AE79E4GD31049FCDC3193E5B419563A3CBE9986708508683724E2B72E0994547FA76011F4B9A4416A4BAB90935725CB50A3F400EB1D0876AA27BEF7AF3CBB9205
00208     2DE6D6A1EFAA14E7A78A3BBCD0318B1EEDGEED9F1BA1B3DEED4C352C685C673681ECD8479621F000DFFE27869EE01414D9B9EA499733AACB108D434186129F4F1A486F7523EDD40570126AD96E768F7CFF75F663EC05DD0C7546F5676DE42ED0F1147F17C4EAD48B2FB6FBA01731B8373CA834ADCACEC3E21424E3058A885E5013E8B9AGC77604D600497E6CA81EAD72F5592FB773D3D68F72357F3723DBC3386CD38D4C7C027251CFB581F002867FBF0F6EE4FC68430CF2D17F962D17F4DD73768E69F2172C6B
00209     DEFFFF28FD5EB154A598668203FC2EC5A7F12E79CBA0CE812AD8A266BA6558EE933E5AD5F5F0A860421D43F13A011E474DA07F4592317E8927B0260AB14A8BE9B9D45FF86AF6574E0A307F68783872150C11B3AE86071DA2C6496178E27C3BA9BF8E74CB825AE84CFB2B33BBC27EEF55EF2CCE3F27E3187579AA47E018382BB2BA26E3AB2DB1BD25529A5353AA47476C74CAAB4C323A7BABF10E6A305F3487E6D722BFF42BFE3FCCB72251046F7F57DDB88F2F5F2BFF6E75744BFA1777068C39C292E2798C753905
00210     703EAFC9784961BF88BF693974C3D27F17A64BF8EA46CE45F6B30961F1EAD248CFB21DFED805F81095598706EAD2077CBA637F187AF34E8F66D0DE57602770349F24E1F81B576F01732ED7EDD4C7CAA5BA1FB27B11A33576D010DEFAADD2704B86AA58024B93BCF86852218A06075D64754F3BC3FDDF1403C30A6E52E439D407FFDD2046B88304243FF41925C3239CE5E37CCA7E266598BEF5A8A817517FCD10F48C4A1E03D7256BD219B42C17D1A415F5E09D6D6F50C4AAF4183BE90F5ACFB528F50C7B37338EDC
00211     0384D81BE42055C9423FFDF29C6B05FF63CE3CC9D5787C204E7598E223393648345EEFA6315C309E6AD87D931675530D7AB3F5D67521BDD5FC2290F1AE43D4A1BCC1875BA60F0A9863442E083ACB12B2940ADDCACE3C8BCF45641B997F43135638331FC4FFBCE8743F6F649602B1886B136D1384897B8CE8DE1F042B2069BC474D7219F35C84189B664369705C88445AB66F5986CFF3A2F973F1ECBB4FA9F2DF8265E2A047632CFD7B634C96CCCE2D96F24B203C9608ACE5F2FB171A658E5788394E25CCEE004B4D
00212     64F21B16225C1F0C7C355C606914D7828E32AED744659D05661CDBF93657F22FA3D5A4337E1B13A373151B2730DF8F7075E40131FBCF1A4F5006E0D0F5FBE93848572943E176830CF75101B66C73EAC148DDBC7208D86BEE876A0A71A4E773757A51A72749587838456355D5CD04A8CD43F4DB3854A688E94F81DC1A8CB7F949AB8F93116F7FEF2D30D7EC327003779CB36775133FE8313D9B45B6C95CA6EBCD36297A7EFDB656F71651377D890117B78EA12668BD856E65113260B01C81CE67F90A9E562E4F1F4F
00213     675A7D04486F3FFD0D66ACD01E8D148444F20DD769790B329940ABFCD26C4175D566BDF86EC99633846049FC5719EABCAF391F65F65DF3846F09A6F432C4E008F456737E631B93484061EE4B3B05555E4FEC131EE47609FFB2E42714057759568231F944D50BF9EC86190A2744BCCE171867B1G7C49C089CF09F93CDD0D7CF02FAEF0F23E7000184F04BEDD64EEDDB5C20FE498A34B98E7E14D91F85E16E7B7703AE158E921472DBBF6633E63D8581EFDABA66A1E2DDA466CFCEED9641E6D2926FB9678A34B441E
00214     FD4E315334E7AF02E5A4FFBFF8D6A386BA05B6G9F4A4BFFF78A4725BE1408D8AC2676F66E87A6AF93F95E8FEAF0FDE7C0B991A89DE893D041F221DB01F3427B0E1611F16EBB326BEEC72F5265A2FE9D74C7362BDF9E0A41DD4B4746636CCEE00BC66F8A16C75E956C227C186511F785F1570C3B82284BB2465F600C9C3F676970B1EFC614D93BB74634AB0BA84F08E847B05A2F203DAD7C1270825CDFFEF4DC783479CF0BB5FC63B41ECD19D0AEF88662C920FAA08FD08C504CE744DADEF1DA796D70350C6634C3
00215     799F1B673D55F7E61F78B16DA26D137C0C15FD92DCFB2C6D03FBD95C09B71B6305554FB01F1B1F82E7F90A385355CB04EF2FCA91EBFD39664E6652BF265DFFC714151470F6EC3DAA6BD007C9D0B7ADC52C4DFCA75EDD8B9F5029FA7DBA917BDF2E4618C9553C7DDE3F60DD25BC372A51040465475F25675DCC68B34968F7D6CD747CA93E46BAFFFA3846BAFF1ADFB37E1DC0D2CD347C0A69D7DCA774CB87E23CEF5033F6A32E0F417BB200BCFBAA44EC29E20D8A687E7D824AA3C0F1863F187293D3D90C07E79347
00216     6735BB494931FFFC0E70E7DC6AF8F97F23F7B406487373CCFDD9497D164AAE7FE08735F9B0A8876966EC16F409577D2B7EBE3148BFBF15FCB291F9585E6A2DDC26C5D71B0E9A3A5B0F0F6717D7DB4C1B5F7B1C0E0E275CDAEBBCED2BC5EC8755A14DADC7E2E6E7ED31D19772B62D3A6C43E9705C023657A58DF26848763F236DD9DD347607EB236112596879B09B9DA306CFEEC1BBDB781CAE3786D99BC60CC444317BDB04DF4ECC95B1E36C8144664195600F013AD788EC0E16C433FDGE4A62D98EBFB2667549A
00217     331E15068D9CF5F8260D98659ADA9EB566A1B7ECB7EC546277F06742F21387294FB88B0255C4704A69BEBD843CDF9AE3FF4F0F7EC611C655A1E81B7BD314CB708BFF9B87BAA7GE5GEDDA417CAE9B7B21E10C5D7BB44987266B8A48EE3216363D9E90ED5B215C839483B483A86927A266DB5A0775466DC43B540B799D2B5B31EF27394EB8A5C57DDD556F0BFA9673052D990BED5BB4F3ECFBB00D695D1EA67C504963428F75240935BB5CB25E3EC9C80B9617E4D1ACA427C5FE8B59D2027C743448EFA1D38E08EF
00218     A16B216E5C33C22729747C0A07F232414BF188BDB31E95F9C906DF5C97E6812FEA25D80F23BDFB4D1846105769BC2BF9BD0DD2FFBBDDDD06E73B1A4F5BABAB851EBFD5314F19D0CE84CADFA972359BB9A2DF4BBAB40F5C5CB2E8799D36F451E55B2615BC9EFEAE94972F3FC764EB5383E24CF6281F749C721E8E1857886D51E4E3B1832B4F8A2BC7CCE05C9F2AAF3BE62EC7FD7FA347DC5F93D61FE7EA4F66764995B1B757090544F17705685F18791CB279B3E6DEAB2949DC164B734E3EA8F9A7C5B51B7FB7B41C
00219     BF626CE0BA6419695466471BF97FBD6956FEC16086C98719D8207779DC2627B3DCD11BD22CB434882CE4268BCC5BCA700E267EF9632C25E53C63E065E9873E0A7BEDAB8A0D79AFDF5B9842B63B49BF1760BDC72F649E6C5754A13F0710E94F23CD1650BD75853C8FGB17F7421C378278C60ED82AAF8A1B53B94287D8521731AB1B94AC4445AED3A43F67B555BED47FC0CBD007BD6F9A1048546BFC479A3A6BE739DAED5780EC9D037718511E73CDE0FB6E9FF916C8494839487B49FA87DC591EFBED6D7C1A648B1
00220     DCEA209D82884594C232795D973833EF5C6F38449E1D7663D9E4C0B993753EE8630B7C37AF996CD9B03B1572597CA6B7627C9CD067829A811A8AB493A8B1C34CEFEBFDA91B9FDEF7B5683A649E20B7E9E2F2F83995E26301473F7BEBD6F3CB63FA2C0767660C707D4DFC42DF0F0BFC25E0D5EA7647D487501F083F4C3A31BCC21AD7616F0F0ADB09E1233DC1E123CDE763097E0AE47BC3949B452EE2FAE42C8A79687941B9B6660F3ADB04BFAAFCE92CBFB2FFEF22E79C48B8DEE27E884B6DAF0530467664FF1D45
00221     F8B262861F6B7F40F9E248EDBE0973744B43F6632626C9D5D46D60310A2AD2CE0778DC579173BDCDE162E854FB1AEEBE8705BF539735F23B57BB44D9B473A5F196799D11E751370879AC196108BC0B32436AD7BAA24F229F0455671E0ABC0BC4FB06218381E23C171B5E7F28FEDD3EB364FB02DF6B98ECEF7D32BEFAEE716BFA6B5CA23741BAD75D56B07E373EDD8D513F757D26417C2D0F7906475AF0EDD68396B6836DFDB9B53B822879E561979EEE78BD21FE4142A734F87AB13741DF0368E27C6FB4C61F6B74
00222     4609FFC3B22B111EE52A2E2BBE6CDF70FF54086B252B814AE43C04C63411666D9F5019A8674FEBC40CABF29FE5337860DE9A0374403C82AF0B78B2F1D4448CB78D5EC7C548CB01727A1745F9B8A9AC275C8C7C0255637F46026D57F207F93FA67F760CCD7808C8F9BB6F2FF4F5643D2A27837DD28F70EF824DG1A8F1482349EE8B3D041AB2959F6A087D0A71087E884E8B250F420842064D744FA7E29956340CB525531DFB7004983E63A281A446EEA185F780796612FB3DE39D5FF1DD9477C5D0D8B4440DBC9A7
00223     7DBE3C86E20EB5C227DF1C7FE49C1DBAB5B5A0EB7AA863522FF6FC6F36B8EE77DCE563ADEF0B0E51343609B13A2A0DFEEB82EC39C683BC97DF53C66F327A7A02323197FE5ED6E870DA031DEA500BB9BC737B73C7B09655E1A0E6235E4F50C66CACFAEED41CC56DEB2C4FA2F3EC9CEB0A0D115F33A672ACBAD6C43F03291A9C9E9F1E27D8D7C0FEE40D407F7769399C477BE03C99141740F9EC9DF7DCA406BD075A77C7DBBF70926761DC3B50FBD5F66BAE295FE8B35291FD8D7E5AB1719A44F6D87B09A99DE37D44
00224     BFF5D87B096FF5187D847F4E5801986F07FD50ED485DEF70AE9B3C5934CF64FD6E756883867FC12A97724F49B820604F21FA8DD3DEB767ADB071AEF35E628E4491CCF9C055C45B259D0815BE2F223072D3D4466B87D89976C821BAFA8312C96FE78D9E6A4D764C1430BCBF8556F42D8546466E1952CEFCB74E9D368DF9DDE5E791E13F8771CA0A77867DAC5B85027EFE66BBF2EF885F71A60C45703E2F8B71435EABDD44406A53747BE2F8ACD4562BC0EE43E2AF095E9F7031286999FF6F48FBA13EB0BD476F2C16
00225     3118FE20450CE97E5B229BE65B143E1A1ADD7F6A7836E1FD59EF0C6DFF7F8DF37F6C3776D787DB20907F9A498BEAE407B147D63A10EB2FD7BAF3FEFEFF0E0D643612AD8C582DA4975159CA72A8F8DBC98EGFB84A324DCB3C1EF5B43AD16BDEB4F5D057FD8B9E4A3DB4E10ADFD1292981020977AE92D1D585CC11DFCC4BF8D16C313F2B7B6A9278D3B8212DB2E3EC23676E97D3DD4DCA736ABE72EC0A734F40D7C9F49EDA75B7481BC7951FD69E4CF2827CEBCB3F8C5B5D5143C1D121292003FA0B6A5112A6B64BD
00226     9AA35B71324B6E34DBCBD12E0D7686043D91F146A636184F585222BFC60D09DD6B58DA8E2C0BBCE35F243F3F1B897C24F562CCEA769D994727F579A4C551A5E530416FC17F56B82A4B21986CD7BE6CBFA8E4F8A52BA37E2D9C5F224D7F83D0CB8788C728D8C1AC92GG64B1GGD0CB818294G94G88G88G3BF908A9C728D8C1AC92GG64B1GG8CGGGGGGGGGGGGGGGGGE2F5E9ECE4E5F2A0E4E1F4E1D0CB8586GGGG81G81GBAGGGE692GGGG
00227 **end of data**/
00228 }
00229 private DefaultMutableTreeNode getDependencyPathTreeStartFrom(Object startingNode) {
00230     Annotation nodeAnnotation = null;
00231     Annotation mda = null;
00232     if (startingNode instanceof StmtTreeNode) {
00233         StmtTreeNode startTreeNode = (StmtTreeNode) startingNode;
00234         mda = startTreeNode.currentMethodDeclarationAnnotation;
00235         nodeAnnotation = startTreeNode.currentStmtAnnotation;
00236     } else
00237         if (startingNode instanceof Annotation) {
00238             if ((startingNode instanceof MethodDeclarationAnnotation) || (startingNode instanceof ConstructorDeclarationAnnotation))
00239                 return null;
00240             else {
00241                 mda = (Annotation) CompilationManager.getAnnotationManager().getMethodAnnotationContainingAnnotation((Annotation) startingNode);
00242                 nodeAnnotation = (Annotation) startingNode;
00243             }
00244         } else
00245             return null;
00246     SootMethod sm = null;
00247     if (mda instanceof MethodDeclarationAnnotation)
00248         sm = ((MethodDeclarationAnnotation) mda).getSootMethod();
00249     else
00250         if (mda instanceof ConstructorDeclarationAnnotation)
00251             sm = ((ConstructorDeclarationAnnotation) mda).getSootMethod();
00252     SliceTraceNode stn = SlicingMethod.sliceTraceContains(new SliceTraceNode(sm, nodeAnnotation));
00253     if (stn == null)
00254         return null;
00255     DefaultMutableTreeNode pathTreeRoot = getBackwardSliceTraceFrom(stn);
00256     return pathTreeRoot;
00257 }
00258 private DefaultMutableTreeNode getForwardSliceTraceFrom(SliceTraceNode stn) {
00259     DefaultMutableTreeNode pathTreeRoot = new DefaultMutableTreeNode(stn);
00260     Set visitedTraceNode = new ArraySet();
00261     visitedTraceNode.add(stn);
00262     Hashtable traceNodeForCurrentLevel = new Hashtable();
00263     traceNodeForCurrentLevel.put(stn, pathTreeRoot);
00264     Hashtable traceNodeForNextLevel;
00265     do {
00266         traceNodeForNextLevel = new Hashtable();
00267         for (java.util.Iterator nodeIt = traceNodeForCurrentLevel.keySet().iterator(); nodeIt.hasNext();) {
00268             SliceTraceNode sNode = (SliceTraceNode) nodeIt.next();
00269             DefaultMutableTreeNode currentRoot = (DefaultMutableTreeNode) traceNodeForCurrentLevel.get(sNode);
00270             for (java.util.Iterator parentIt = sNode.parents.keySet().iterator(); parentIt.hasNext();) {
00271                 SliceTraceNode parent = (SliceTraceNode) parentIt.next();
00272                 if (!visitedTraceNode.contains(parent)) {
00273                     if (parent != Slicer.sliceTraceRoot && !parent.stmtAnnotation.toString().equals("")) {
00274                         DefaultMutableTreeNode treeChild = new DefaultMutableTreeNode(parent);
00275                         currentRoot.add(treeChild);
00276                         visitedTraceNode.add(parent);
00277                         traceNodeForNextLevel.put(parent, treeChild);
00278                     }
00279                 }
00280             }
00281         }
00282         traceNodeForCurrentLevel = traceNodeForNextLevel;
00283     } while (!traceNodeForNextLevel.isEmpty());
00284     return pathTreeRoot;
00285 }
00286 private DefaultMutableTreeNode getIfDependencyPathTree() {
00287     DefaultMutableTreeNode pathTreeRoot = new DefaultMutableTreeNode("Conditionals");
00288     Set visitedConditionals = new ArraySet();
00289     for (Iterator traceNodeIt = Slicer.allSliceTraceNodes.iterator(); traceNodeIt.hasNext();) {
00290         SliceTraceNode stn = (SliceTraceNode) traceNodeIt.next();
00291         if ((stn.stmtAnnotation instanceof ControlFlowAnnotation) || (stn.stmtAnnotation instanceof ConditionalAnnotation)) {
00292             if (!visitedConditionals.contains(stn)) {
00293                 DefaultMutableTreeNode trace = getForwardSliceTraceFrom(stn);
00294                 pathTreeRoot.add(trace);
00295                 visitedConditionals.add(stn);
00296             }
00297         }
00298     }
00299     //dumpTreeIntoFile(pathTreeRoot);
00300     return pathTreeRoot;
00301 }
00302 private DefaultMutableTreeNode getIfDependencyPathTreeForNode(Object startingNode) {
00303     Annotation nodeAnnotation = null;
00304     Annotation mda = null;
00305     if (startingNode instanceof StmtTreeNode) {
00306         StmtTreeNode startTreeNode = (StmtTreeNode) startingNode;
00307         mda = startTreeNode.currentMethodDeclarationAnnotation;
00308         nodeAnnotation = startTreeNode.currentStmtAnnotation;
00309     } else
00310         if (startingNode instanceof Annotation) {
00311             if ((startingNode instanceof MethodDeclarationAnnotation) || (startingNode instanceof ConstructorDeclarationAnnotation))
00312                 return null;
00313             else {
00314                 mda = (Annotation) CompilationManager.getAnnotationManager().getMethodAnnotationContainingAnnotation((Annotation) startingNode);
00315                 nodeAnnotation = (Annotation) startingNode;
00316             }
00317         } else
00318             return null;
00319     SootMethod sm = null;
00320     if (mda instanceof MethodDeclarationAnnotation)
00321         sm = ((MethodDeclarationAnnotation) mda).getSootMethod();
00322     else
00323         if (mda instanceof ConstructorDeclarationAnnotation)
00324             sm = ((ConstructorDeclarationAnnotation) mda).getSootMethod();
00325     SliceTraceNode stnForCond = SlicingMethod.sliceTraceContains(new SliceTraceNode(sm, nodeAnnotation));
00326     if (stnForCond == null)
00327         return null;
00328     DefaultMutableTreeNode pathTreeRoot = new DefaultMutableTreeNode("Conditionals");
00329     Set visitedConditionals = new ArraySet();
00330     for (Iterator traceNodeIt = Slicer.allSliceTraceNodes.iterator(); traceNodeIt.hasNext();) {
00331         SliceTraceNode stn = (SliceTraceNode) traceNodeIt.next();
00332         if ((stn.stmtAnnotation instanceof ControlFlowAnnotation) || (stn.stmtAnnotation instanceof ConditionalAnnotation)) {
00333             if (!visitedConditionals.contains(stn)) {
00334                 DefaultMutableTreeNode trace = getForwardSliceTraceFrom(stn);
00335                 DefaultMutableTreeNode cuttedTrace = cuttingTreeWRT(trace, stnForCond);
00336                 if (cuttedTrace != null) {
00337                     pathTreeRoot.add(cuttedTrace);
00338                     visitedConditionals.add(stn);
00339                 }
00340             }
00341         }
00342     }
00343     return pathTreeRoot;
00344 }
00345 /**
00346  * Return the QueryKindComboBox property value.
00347  * @return javax.swing.JComboBox
00348  */
00349 /* WARNING: THIS METHOD WILL BE REGENERATED. */
00350 public javax.swing.JComboBox getQueryKindComboBox() {
00351     if (ivjQueryKindComboBox == null) {
00352         try {
00353             ivjQueryKindComboBox = new javax.swing.JComboBox();
00354             ivjQueryKindComboBox.setName("QueryKindComboBox");
00355             // user code begin {1}
00356             for (int i = 0; i < queries.length; i++)
00357                 ivjQueryKindComboBox.addItem(queries[i]);
00358             // user code end
00359         } catch (java.lang.Throwable ivjExc) {
00360             // user code begin {2}
00361             // user code end
00362             handleException(ivjExc);
00363         }
00364     }
00365     return ivjQueryKindComboBox;
00366 }
00367 /**
00368  * Return the QueryKindLabel property value.
00369  * @return javax.swing.JLabel
00370  */
00371 /* WARNING: THIS METHOD WILL BE REGENERATED. */
00372 private javax.swing.JLabel getQueryKindLabel() {
00373     if (ivjQueryKindLabel == null) {
00374         try {
00375             ivjQueryKindLabel = new javax.swing.JLabel();
00376             ivjQueryKindLabel.setName("QueryKindLabel");
00377             ivjQueryKindLabel.setText("Query Kind : ");
00378             ivjQueryKindLabel.setForeground(java.awt.Color.black);
00379             // user code begin {1}
00380             // user code end
00381         } catch (java.lang.Throwable ivjExc) {
00382             // user code begin {2}
00383             // user code end
00384             handleException(ivjExc);
00385         }
00386     }
00387     return ivjQueryKindLabel;
00388 }
00389 /**
00390  * Return the QueryResultScrollPane property value.
00391  * @return javax.swing.JScrollPane
00392  */
00393 /* WARNING: THIS METHOD WILL BE REGENERATED. */
00394 private javax.swing.JScrollPane getQueryResultScrollPane() {
00395     if (ivjQueryResultScrollPane == null) {
00396         try {
00397             ivjQueryResultScrollPane = new javax.swing.JScrollPane();
00398             ivjQueryResultScrollPane.setName("QueryResultScrollPane");
00399             getQueryResultScrollPane().setViewportView(getQueryResultTree());
00400             // user code begin {1}
00401             // user code end
00402         } catch (java.lang.Throwable ivjExc) {
00403             // user code begin {2}
00404             // user code end
00405             handleException(ivjExc);
00406         }
00407     }
00408     return ivjQueryResultScrollPane;
00409 }
00410 /**
00411  * Return the QueryResultTree property value.
00412  * @return javax.swing.JTree
00413  */
00414 /* WARNING: THIS METHOD WILL BE REGENERATED. */
00415 private javax.swing.JTree getQueryResultTree() {
00416     if (ivjQueryResultTree == null) {
00417         try {
00418             ivjQueryResultTree = new javax.swing.JTree();
00419             ivjQueryResultTree.setName("QueryResultTree");
00420             ivjQueryResultTree.setBackground(new java.awt.Color(204,204,204));
00421             ivjQueryResultTree.setBounds(0, 0, 78, 72);
00422             // user code begin {1}
00423             currentQueryResultTreeRoot = new DefaultMutableTreeNode("");
00424             getQueryResultTree().setModel(new DefaultTreeModel(currentQueryResultTreeRoot));
00425             getQueryResultScrollPane().validate();
00426             getQueryResultScrollPane().repaint();
00427             ivjQueryResultTree.setUI(new javax.swing.plaf.metal.MetalTreeUI() {
00428                 public javax.swing.plaf.metal.MetalTreeUI setAngledColor() {
00429                     setHashColor(java.awt.Color.black);
00430                     return this;
00431                 }
00432             }
00433             .setAngledColor());
00434             ivjQueryResultTree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
00435             ivjQueryResultTree.setCellRenderer(new DefaultTreeCellRenderer() {
00436                 public java.awt.Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) {
00437                     super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
00438                     Object o = ((DefaultMutableTreeNode) value).getUserObject();
00439                     setForeground(java.awt.Color.black);
00440                     setIcon(null);
00441                     return this;
00442                 }
00443             });
00444             ((DefaultTreeCellRenderer) ivjQueryResultTree.getCellRenderer()).setBackgroundNonSelectionColor(new java.awt.Color(204, 204, 204));
00445             ((DefaultTreeCellRenderer) ivjQueryResultTree.getCellRenderer()).setBackgroundSelectionColor(Preferences.getHighlightColor());
00446             ivjQueryResultTree.putClientProperty("JTree.lineStyle", "Angled");
00447 
00448             // user code end
00449         } catch (java.lang.Throwable ivjExc) {
00450             // user code begin {2}
00451             // user code end
00452             handleException(ivjExc);
00453         }
00454     }
00455     return ivjQueryResultTree;
00456 }
00457 /**
00458  * Called whenever the part throws an exception.
00459  * @param exception java.lang.Throwable
00460  */
00461 private void handleException(java.lang.Throwable exception) {
00462 
00463     /* Uncomment the following lines to print uncaught exceptions to stdout */
00464     // System.out.println("--------- UNCAUGHT EXCEPTION ---------");
00465     // exception.printStackTrace(System.out);
00466 }
00467 /**
00468  * Initializes connections
00469  * @exception java.lang.Exception The exception description.
00470  */
00471 /* WARNING: THIS METHOD WILL BE REGENERATED. */
00472 private void initConnections() throws java.lang.Exception {
00473     // user code begin {1}
00474     // user code end
00475     getQueryKindComboBox().addActionListener(this);
00476     getQueryResultTree().addTreeSelectionListener(this);
00477     getQueryResultTree().addMouseListener(this);
00478 }
00479 /**
00480  * Initialize the class.
00481  */
00482 /* WARNING: THIS METHOD WILL BE REGENERATED. */
00483 private void initialize() {
00484     try {
00485         // user code begin {1}
00486         // user code end
00487         setName("QueryPanel");
00488         setLayout(new java.awt.GridBagLayout());
00489         setSize(501, 289);
00490 
00491         java.awt.GridBagConstraints constraintsQueryKindLabel = new java.awt.GridBagConstraints();
00492         constraintsQueryKindLabel.gridx = 0; constraintsQueryKindLabel.gridy = 0;
00493         constraintsQueryKindLabel.insets = new java.awt.Insets(4, 4, 4, 4);
00494         add(getQueryKindLabel(), constraintsQueryKindLabel);
00495 
00496         java.awt.GridBagConstraints constraintsQueryKindComboBox = new java.awt.GridBagConstraints();
00497         constraintsQueryKindComboBox.gridx = 1; constraintsQueryKindComboBox.gridy = 0;
00498         constraintsQueryKindComboBox.fill = java.awt.GridBagConstraints.HORIZONTAL;
00499         constraintsQueryKindComboBox.weightx = 1.0;
00500         constraintsQueryKindComboBox.insets = new java.awt.Insets(4, 4, 4, 4);
00501         add(getQueryKindComboBox(), constraintsQueryKindComboBox);
00502 
00503         java.awt.GridBagConstraints constraintsQueryResultScrollPane = new java.awt.GridBagConstraints();
00504         constraintsQueryResultScrollPane.gridx = 0; constraintsQueryResultScrollPane.gridy = 1;
00505         constraintsQueryResultScrollPane.gridwidth = 2;
00506         constraintsQueryResultScrollPane.fill = java.awt.GridBagConstraints.BOTH;
00507         constraintsQueryResultScrollPane.weightx = 1.0;
00508         constraintsQueryResultScrollPane.weighty = 1.0;
00509         constraintsQueryResultScrollPane.insets = new java.awt.Insets(4, 4, 4, 4);
00510         add(getQueryResultScrollPane(), constraintsQueryResultScrollPane);
00511         initConnections();
00512     } catch (java.lang.Throwable ivjExc) {
00513         handleException(ivjExc);
00514     }
00515     // user code begin {2}
00516     // user code end
00517 }
00518 /**
00519  * main entrypoint - starts the part when it is run as an application
00520  * @param args java.lang.String[]
00521  */
00522 public static void main(java.lang.String[] args) {
00523     try {
00524         JFrame frame = new javax.swing.JFrame();
00525         QueryPanel aQueryPanel;
00526         aQueryPanel = new QueryPanel();
00527         frame.setContentPane(aQueryPanel);
00528         frame.setSize(aQueryPanel.getSize());
00529         frame.addWindowListener(new java.awt.event.WindowAdapter() {
00530             public void windowClosing(java.awt.event.WindowEvent e) {
00531                 System.exit(0);
00532             };
00533         });
00534         frame.setVisible(true);
00535     } catch (Throwable exception) {
00536         System.err.println("Exception occurred in main() of javax.swing.JPanel");
00537         exception.printStackTrace(System.out);
00538     }
00539 }
00540 /**
00541  * Method to handle events for the MouseListener interface.
00542  * @param e java.awt.event.MouseEvent
00543  */
00544 /* WARNING: THIS METHOD WILL BE REGENERATED. */
00545 public void mouseClicked(java.awt.event.MouseEvent e) {
00546     // user code begin {1}
00547     // user code end
00548     if (e.getSource() == getQueryResultTree()) 
00549         connEtoC3(e);
00550     // user code begin {2}
00551     // user code end
00552 }
00553 /**
00554  * Method to handle events for the MouseListener interface.
00555  * @param e java.awt.event.MouseEvent
00556  */
00557 /* WARNING: THIS METHOD WILL BE REGENERATED. */
00558 public void mouseEntered(java.awt.event.MouseEvent e) {
00559     // user code begin {1}
00560     // user code end
00561     // user code begin {2}
00562     // user code end
00563 }
00564 /**
00565  * Method to handle events for the MouseListener interface.
00566  * @param e java.awt.event.MouseEvent
00567  */
00568 /* WARNING: THIS METHOD WILL BE REGENERATED. */
00569 public void mouseExited(java.awt.event.MouseEvent e) {
00570     // user code begin {1}
00571     // user code end
00572     // user code begin {2}
00573     // user code end
00574 }
00575 /**
00576  * Method to handle events for the MouseListener interface.
00577  * @param e java.awt.event.MouseEvent
00578  */
00579 /* WARNING: THIS METHOD WILL BE REGENERATED. */
00580 public void mousePressed(java.awt.event.MouseEvent e) {
00581     // user code begin {1}
00582     // user code end
00583     // user code begin {2}
00584     // user code end
00585 }
00586 /**
00587  * Method to handle events for the MouseListener interface.
00588  * @param e java.awt.event.MouseEvent
00589  */
00590 /* WARNING: THIS METHOD WILL BE REGENERATED. */
00591 public void mouseReleased(java.awt.event.MouseEvent e) {
00592     // user code begin {1}
00593     // user code end
00594     // user code begin {2}
00595     // user code end
00596 }
00597 /**
00598  * Comment
00599  */
00600 public void queryKindComboBox_ActionEvents() {
00601     int selectedIndex = getQueryKindComboBox().getSelectedIndex();
00602     if (selectedIndex == NO_QUERY) {
00603         currentQueryResultTreeRoot = new DefaultMutableTreeNode("");
00604         getQueryResultTree().setModel(new DefaultTreeModel(currentQueryResultTreeRoot));
00605     } else {
00606         if (dependFrame.currentNode == null) {
00607             JOptionPane.showMessageDialog(this, "Please select one statement for query.", "Select Statement", JOptionPane.WARNING_MESSAGE);
00608             getQueryKindComboBox().setSelectedIndex(NO_QUERY);
00609             return;
00610         }
00611         dependFrame.criterionViewer.runSlicerWithCurrentCriterion();
00612         if (dependFrame.criterionViewer.runningCriterion == null) {
00613             JOptionPane.showMessageDialog(this, "You can not query on the current node, since the node is not a statement.", "Can not run slicer", JOptionPane.WARNING_MESSAGE);
00614             getQueryKindComboBox().setSelectedIndex(NO_QUERY);
00615             return;
00616         }
00617         if (selectedIndex == SLICE_TRACE) {
00618             currentQueryResultTreeRoot = getDependencyPathTreeStartFrom(dependFrame.currentNode);
00619             getQueryResultTree().setModel(new DefaultTreeModel(currentQueryResultTreeRoot));
00620         } else
00621             if (selectedIndex == ALL_CONDITIONALS) {
00622                 currentQueryResultTreeRoot = getIfDependencyPathTree();
00623                 getQueryResultTree().setModel(new DefaultTreeModel(currentQueryResultTreeRoot));
00624             } else
00625                 if (selectedIndex == CONDITIONALS_TO_CURRENT_STMT) {
00626                     currentQueryResultTreeRoot = getIfDependencyPathTreeForNode(dependFrame.currentNode);
00627                     getQueryResultTree().setModel(new DefaultTreeModel(currentQueryResultTreeRoot));
00628                 }
00629     }
00630     return;
00631 }
00632 /**
00633  * Comment
00634  */
00635 public void queryResultTree_MouseClicked(java.awt.event.MouseEvent mouseEvent) {
00636         int selRow = getQueryResultTree().getRowForLocation(mouseEvent.getX(), mouseEvent.getY());
00637     //TreePath selPath = getDependencyTree().getPathForLocation(mouseEvent.getX(), mouseEvent.getY());
00638     if (selRow != -1) {
00639         if (mouseEvent.getClickCount() == 1) {
00640             //mySingleClick(selRow, selPath);
00641             //System.out.println("Do nothing --- My sigle click on the tree");
00642         } else
00643             if (mouseEvent.getClickCount() == 2) {
00644                 //myDoubleClick(selRow, selPath);
00645                 //System.out.println("My DOUBLE click on the tree");
00646                 DefaultMutableTreeNode queryTreeSelected = (DefaultMutableTreeNode) getQueryResultTree().getLastSelectedPathComponent();
00647                 if (queryTreeSelected == null)
00648                     return;
00649                 Object userObject = queryTreeSelected.getUserObject();
00650                 StmtTreeNode selectedNode = dependFrame.getDependencyValueViewer().getSelectedStmtTreeNode(userObject);
00651                 dependFrame.addSelectedNodeToDependFrame(selectedNode);
00652                 //System.out.println("End adding by double clicking");
00653             }
00654     }
00655     return;
00656 }
00657 /**
00658  * Comment
00659  */
00660 public void queryResultTree_TreeSelectionEvents() { 
00661     DefaultMutableTreeNode lastSelectedNode = (DefaultMutableTreeNode) getQueryResultTree().getLastSelectedPathComponent();
00662     if (lastSelectedNode == null)
00663         return;
00664     if (lastSelectedNode.isRoot()) {
00665         dependFrame.getCodeBrowserPane().setCurrentNodeSelected(dependFrame.currentNode);
00666         return;
00667     }
00668     Object userObject = lastSelectedNode.getUserObject();
00669     if (userObject.equals(dependFrame.currentNode) || (userObject instanceof String))
00670         return;
00671     StmtTreeNode selectedNode = dependFrame.getDependencyValueViewer().getSelectedStmtTreeNode(userObject);
00672     dependFrame.getCodeBrowserPane().setCurrentNodeSelected(selectedNode);
00673     return;
00674 }
00675 /**
00676  * Insert the method's description here.
00677  * Creation date: (00-12-1 16:21:27)
00678  * @param df edu.ksu.cis.bandera.pdgslicer.dependency.Dependencies
00679  */
00680 void setDependFrame(Dependencies df) {
00681     dependFrame = df;
00682 }
00683 /**
00684  * Insert the method's description here.
00685  * Creation date: (00-7-12 21:23:54)
00686  * @return boolean
00687  * @param sliceTraceNode edu.ksu.cis.bandera.pdgslicer.SliceTraceNode
00688  */
00689 private boolean sliceTraceContains(DefaultMutableTreeNode root, SliceTraceNode sliceTraceNode) {
00690     for (Enumeration enum = root.depthFirstEnumeration(); enum.hasMoreElements();) {
00691         DefaultMutableTreeNode node = (DefaultMutableTreeNode) enum.nextElement();
00692         SliceTraceNode stn = (SliceTraceNode) node.getUserObject();
00693         if (stn.equals(sliceTraceNode))
00694             return true;
00695     }
00696     return false;
00697 }
00698 /**
00699  * Insert the method's description here.
00700  * Creation date: (00-7-12 23:13:14)
00701  * @return boolean
00702  * @param root javax.swing.tree.DefaultMutableTreeNode
00703  * @param stn edu.ksu.cis.bandera.pdgslicer.SliceTraceNode
00704  */
00705 private boolean traceRootIs(DefaultMutableTreeNode root, SliceTraceNode stn) {
00706     SliceTraceNode rootNode = (SliceTraceNode) root.getUserObject();
00707     if (rootNode.equals(stn))
00708         return true;
00709     else
00710         return false;
00711 }
00712 /**
00713  * Method to handle events for the TreeSelectionListener interface.
00714  * @param e javax.swing.event.TreeSelectionEvent
00715  */
00716 /* WARNING: THIS METHOD WILL BE REGENERATED. */
00717 public void valueChanged(javax.swing.event.TreeSelectionEvent e) {
00718     // user code begin {1}
00719     // user code end
00720     if (e.getSource() == getQueryResultTree()) 
00721         connEtoC2();
00722     // user code begin {2}
00723     // user code end
00724 }
00725 }

Generated at Thu Feb 7 06:53:15 2002 for Bandera by doxygen1.2.10 written by Dimitri van Heesch, © 1997-2001