1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir * 5*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir * 7*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * This file is part of OpenOffice.org. 10*cdf0e10cSrcweir * 11*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir * 15*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir * 26*cdf0e10cSrcweir ************************************************************************/ 27*cdf0e10cSrcweir 28*cdf0e10cSrcweir package com.sun.star.xml.security.uno; 29*cdf0e10cSrcweir 30*cdf0e10cSrcweir import javax.xml.parsers.DocumentBuilder; 31*cdf0e10cSrcweir import javax.xml.parsers.DocumentBuilderFactory; 32*cdf0e10cSrcweir import javax.xml.parsers.ParserConfigurationException; 33*cdf0e10cSrcweir 34*cdf0e10cSrcweir import java.io.File; 35*cdf0e10cSrcweir import java.io.IOException; 36*cdf0e10cSrcweir import java.io.FileOutputStream; 37*cdf0e10cSrcweir import java.io.FileInputStream; 38*cdf0e10cSrcweir import java.io.InputStream; 39*cdf0e10cSrcweir import java.io.ByteArrayInputStream; 40*cdf0e10cSrcweir import java.io.UnsupportedEncodingException; 41*cdf0e10cSrcweir 42*cdf0e10cSrcweir import org.w3c.dom.Document; 43*cdf0e10cSrcweir import org.w3c.dom.Node; 44*cdf0e10cSrcweir import org.w3c.dom.NodeList; 45*cdf0e10cSrcweir 46*cdf0e10cSrcweir /* Basic GUI components */ 47*cdf0e10cSrcweir import javax.swing.JFrame; 48*cdf0e10cSrcweir import javax.swing.JPanel; 49*cdf0e10cSrcweir import javax.swing.JScrollPane; 50*cdf0e10cSrcweir import javax.swing.JTree; 51*cdf0e10cSrcweir import javax.swing.JButton; 52*cdf0e10cSrcweir import javax.swing.JCheckBox; 53*cdf0e10cSrcweir import javax.swing.JTextArea; 54*cdf0e10cSrcweir import javax.swing.JTextField; 55*cdf0e10cSrcweir import javax.swing.JFileChooser; 56*cdf0e10cSrcweir import javax.swing.ToolTipManager; 57*cdf0e10cSrcweir import javax.swing.JTable; 58*cdf0e10cSrcweir import javax.swing.JLabel; 59*cdf0e10cSrcweir import javax.swing.BorderFactory; 60*cdf0e10cSrcweir 61*cdf0e10cSrcweir /* GUI components for right-hand side */ 62*cdf0e10cSrcweir import javax.swing.JSplitPane; 63*cdf0e10cSrcweir import javax.swing.JOptionPane; 64*cdf0e10cSrcweir import javax.swing.JTabbedPane; 65*cdf0e10cSrcweir 66*cdf0e10cSrcweir 67*cdf0e10cSrcweir /* GUI support classes */ 68*cdf0e10cSrcweir import java.awt.BorderLayout; 69*cdf0e10cSrcweir import java.awt.Dimension; 70*cdf0e10cSrcweir import java.awt.Container; 71*cdf0e10cSrcweir import java.awt.Toolkit; 72*cdf0e10cSrcweir import java.awt.event.WindowEvent; 73*cdf0e10cSrcweir import java.awt.event.WindowAdapter; 74*cdf0e10cSrcweir import java.awt.event.ActionEvent; 75*cdf0e10cSrcweir import java.awt.event.ActionListener; 76*cdf0e10cSrcweir 77*cdf0e10cSrcweir /* For creating borders */ 78*cdf0e10cSrcweir import javax.swing.border.EmptyBorder; 79*cdf0e10cSrcweir import javax.swing.border.BevelBorder; 80*cdf0e10cSrcweir import javax.swing.border.CompoundBorder; 81*cdf0e10cSrcweir 82*cdf0e10cSrcweir /* For creating a TreeModel */ 83*cdf0e10cSrcweir import javax.swing.tree.TreePath; 84*cdf0e10cSrcweir import java.util.Vector; 85*cdf0e10cSrcweir 86*cdf0e10cSrcweir /* UNO classes */ 87*cdf0e10cSrcweir import com.sun.star.uno.UnoRuntime; 88*cdf0e10cSrcweir import com.sun.star.bridge.XUnoUrlResolver; 89*cdf0e10cSrcweir import com.sun.star.lang.XMultiComponentFactory; 90*cdf0e10cSrcweir import com.sun.star.beans.XPropertySet; 91*cdf0e10cSrcweir import com.sun.star.uno.XComponentContext; 92*cdf0e10cSrcweir import com.sun.star.xml.sax.XDocumentHandler; 93*cdf0e10cSrcweir 94*cdf0e10cSrcweir import com.sun.star.xml.crypto.*; 95*cdf0e10cSrcweir import com.sun.star.xml.crypto.sax.*; 96*cdf0e10cSrcweir 97*cdf0e10cSrcweir public class TestTool extends JFrame implements ActionListener 98*cdf0e10cSrcweir { 99*cdf0e10cSrcweir /* 100*cdf0e10cSrcweir * xml security framewrok component names 101*cdf0e10cSrcweir */ 102*cdf0e10cSrcweir public static String SIGNATURECREATOR_COMPONENT = "com.sun.star.xml.crypto.sax.SignatureCreator"; 103*cdf0e10cSrcweir public static String SIGNATUREVERIFIER_COMPONENT = "com.sun.star.xml.crypto.sax.SignatureVerifier"; 104*cdf0e10cSrcweir public static String ENCRYPTOR_COMPONENT = "com.sun.star.xml.crypto.sax.Encryptor"; 105*cdf0e10cSrcweir public static String DECRYPTOR_COMPONENT = "com.sun.star.xml.crypto.sax.Decryptor"; 106*cdf0e10cSrcweir public static String SAXEVENTKEEPER_COMPONENT = "com.sun.star.xml.crypto.sax.SAXEventKeeper"; 107*cdf0e10cSrcweir 108*cdf0e10cSrcweir /* 109*cdf0e10cSrcweir * Java-based component names 110*cdf0e10cSrcweir */ 111*cdf0e10cSrcweir public static String SEINITIALIZER_COMPONENT_JAVA = "com.sun.star.xml.security.bridge.jxsec.SEInitializer_JxsecImpl"; 112*cdf0e10cSrcweir public static String XMLSIGNATURE_COMPONENT_JAVA = "com.sun.star.xml.security.bridge.jxsec.XMLSignature_JxsecImpl"; 113*cdf0e10cSrcweir public static String XMLENCRYPTION_COMPONENT_JAVA = "com.sun.star.xml.security.bridge.jxsec.XMLEncryption_JxsecImpl"; 114*cdf0e10cSrcweir public static String XMLDOCUMENTWRAPPER_COMPONENT_JAVA = "com.sun.star.xml.security.bridge.jxsec.XMLDocumentWrapper_JxsecImpl"; 115*cdf0e10cSrcweir 116*cdf0e10cSrcweir /* 117*cdf0e10cSrcweir * C-based component names 118*cdf0e10cSrcweir */ 119*cdf0e10cSrcweir public static String SEINITIALIZER_COMPONENT_C = "com.sun.star.xml.crypto.SEInitializer"; 120*cdf0e10cSrcweir public static String XMLSIGNATURE_COMPONENT_C = "com.sun.star.xml.crypto.XMLSignature"; 121*cdf0e10cSrcweir public static String XMLENCRYPTION_COMPONENT_C = "com.sun.star.xml.crypto.XMLEncryption"; 122*cdf0e10cSrcweir public static String XMLDOCUMENTWRAPPER_COMPONENT_C = "com.sun.star.xml.wrapper.XMLDocumentWrapper"; 123*cdf0e10cSrcweir 124*cdf0e10cSrcweir /* url resolver name */ 125*cdf0e10cSrcweir public static String UNOURLRESOLVER = "com.sun.star.bridge.UnoUrlResolver"; 126*cdf0e10cSrcweir 127*cdf0e10cSrcweir /* 128*cdf0e10cSrcweir * connection URL 129*cdf0e10cSrcweir */ 130*cdf0e10cSrcweir private String m_unoURL = "uno:socket,host=localhost,port=2002;urp;StarOffice.ServiceManager"; 131*cdf0e10cSrcweir 132*cdf0e10cSrcweir /* key file */ 133*cdf0e10cSrcweir private String m_javaTokenFile = null; 134*cdf0e10cSrcweir private String m_nssTokenPath = null; 135*cdf0e10cSrcweir 136*cdf0e10cSrcweir /* User Interfaces */ 137*cdf0e10cSrcweir private JButton m_goButton; 138*cdf0e10cSrcweir private JButton m_stepButton; 139*cdf0e10cSrcweir private JButton m_startButton; 140*cdf0e10cSrcweir private JButton m_openButton; 141*cdf0e10cSrcweir private JCheckBox m_isExportingButton; 142*cdf0e10cSrcweir private JCheckBox m_isJavaComponentButton; 143*cdf0e10cSrcweir private JButton m_saveButton; 144*cdf0e10cSrcweir private JButton m_batchButton; 145*cdf0e10cSrcweir private JTree m_leftTree; 146*cdf0e10cSrcweir private JTextArea m_leftTextArea; 147*cdf0e10cSrcweir private JTree m_middleTree; 148*cdf0e10cSrcweir private JTree m_rightTree; 149*cdf0e10cSrcweir private JTabbedPane m_leftTabPane; 150*cdf0e10cSrcweir private JTextArea m_bufferNodeTextArea; 151*cdf0e10cSrcweir private JLabel m_saxChainLabel; 152*cdf0e10cSrcweir private JTextField m_saxEventText; 153*cdf0e10cSrcweir private JTable m_unsolvedReferenceTable; 154*cdf0e10cSrcweir 155*cdf0e10cSrcweir /* 156*cdf0e10cSrcweir * whether a batch file is running, 157*cdf0e10cSrcweir * if so, no message box is popped up 158*cdf0e10cSrcweir */ 159*cdf0e10cSrcweir private boolean m_bIsBatchRunning = false; 160*cdf0e10cSrcweir 161*cdf0e10cSrcweir /* 162*cdf0e10cSrcweir * whether the UI needs to be updated. 163*cdf0e10cSrcweir * when user click the "go" button, the UI needs 164*cdf0e10cSrcweir * not to be updated step by step for performance 165*cdf0e10cSrcweir * reason 166*cdf0e10cSrcweir */ 167*cdf0e10cSrcweir private boolean m_bIsUIUpdateSuppressed = false; 168*cdf0e10cSrcweir 169*cdf0e10cSrcweir /* 170*cdf0e10cSrcweir * three DOM tree adapter 171*cdf0e10cSrcweir */ 172*cdf0e10cSrcweir private DomToTreeModelAdapter m_leftTreeModelAdapter; 173*cdf0e10cSrcweir private DomToTreeModelAdapter m_middleTreeModelAdapter; 174*cdf0e10cSrcweir private DomToTreeModelAdapter m_rightTreeModelAdapter; 175*cdf0e10cSrcweir 176*cdf0e10cSrcweir /* 177*cdf0e10cSrcweir * the current directory, which reserves the default 178*cdf0e10cSrcweir * location when user open/save a file. 179*cdf0e10cSrcweir */ 180*cdf0e10cSrcweir private File m_currentDirectory = null; 181*cdf0e10cSrcweir 182*cdf0e10cSrcweir /* 183*cdf0e10cSrcweir * the log file 184*cdf0e10cSrcweir */ 185*cdf0e10cSrcweir private FileOutputStream m_logFileOutputStream = null; 186*cdf0e10cSrcweir 187*cdf0e10cSrcweir /* 188*cdf0e10cSrcweir * the thread which is parsing the current XML 189*cdf0e10cSrcweir * file 190*cdf0e10cSrcweir */ 191*cdf0e10cSrcweir private ParsingThread m_parsingThread; 192*cdf0e10cSrcweir 193*cdf0e10cSrcweir /* 194*cdf0e10cSrcweir * whether is exporting or importing 195*cdf0e10cSrcweir */ 196*cdf0e10cSrcweir private boolean m_bIsExporting; 197*cdf0e10cSrcweir 198*cdf0e10cSrcweir /* 199*cdf0e10cSrcweir * whether java based component or c based component 200*cdf0e10cSrcweir * is used now 201*cdf0e10cSrcweir */ 202*cdf0e10cSrcweir private boolean m_bIsJavaBased; 203*cdf0e10cSrcweir 204*cdf0e10cSrcweir /* 205*cdf0e10cSrcweir * XML security component interface 206*cdf0e10cSrcweir */ 207*cdf0e10cSrcweir private XComponentContext m_xRemoteContext = null; 208*cdf0e10cSrcweir private XMultiComponentFactory m_xRemoteServiceManager = null; 209*cdf0e10cSrcweir private XXMLSecurityContext m_xXMLSecurityContext = null; 210*cdf0e10cSrcweir private XXMLSignature m_xXMLSignature = null; 211*cdf0e10cSrcweir private XXMLEncryption m_xXMLEncryption = null; 212*cdf0e10cSrcweir private XSEInitializer m_xSEInitializer = null; 213*cdf0e10cSrcweir 214*cdf0e10cSrcweir /* 215*cdf0e10cSrcweir * SAX event collector for the middle tree and the right tree 216*cdf0e10cSrcweir */ 217*cdf0e10cSrcweir private SAXEventCollector m_rightTreeEventCollector = null; 218*cdf0e10cSrcweir private SAXEventCollector m_middleTreeEventCollector = null; 219*cdf0e10cSrcweir 220*cdf0e10cSrcweir /* 221*cdf0e10cSrcweir * security framework controller 222*cdf0e10cSrcweir */ 223*cdf0e10cSrcweir private XMLSecurityFrameworkController m_xmlSecurityFrameworkController = null; 224*cdf0e10cSrcweir 225*cdf0e10cSrcweir /* org.w3c.dom.Document */ 226*cdf0e10cSrcweir private Document m_document; 227*cdf0e10cSrcweir 228*cdf0e10cSrcweir /* represents whether "Go" or "Step" */ 229*cdf0e10cSrcweir private boolean stepMode = true; 230*cdf0e10cSrcweir 231*cdf0e10cSrcweir /************************************************************************************** 232*cdf0e10cSrcweir * private methods 233*cdf0e10cSrcweir **************************************************************************************/ 234*cdf0e10cSrcweir 235*cdf0e10cSrcweir 236*cdf0e10cSrcweir /****************************************************************************** 237*cdf0e10cSrcweir * UI related methods 238*cdf0e10cSrcweir ******************************************************************************/ 239*cdf0e10cSrcweir 240*cdf0e10cSrcweir /* 241*cdf0e10cSrcweir * initalizes the UI. 242*cdf0e10cSrcweir */ 243*cdf0e10cSrcweir private void initUI() 244*cdf0e10cSrcweir { 245*cdf0e10cSrcweir m_leftTreeModelAdapter = new DomToTreeModelAdapter(m_document); 246*cdf0e10cSrcweir m_middleTreeModelAdapter = new DomToTreeModelAdapter(m_document); 247*cdf0e10cSrcweir m_rightTreeModelAdapter = new DomToTreeModelAdapter(m_document); 248*cdf0e10cSrcweir 249*cdf0e10cSrcweir m_parsingThread = null; 250*cdf0e10cSrcweir 251*cdf0e10cSrcweir m_leftTree.setModel(m_leftTreeModelAdapter); 252*cdf0e10cSrcweir m_middleTree.setModel(m_middleTreeModelAdapter); 253*cdf0e10cSrcweir m_rightTree.setModel(m_rightTreeModelAdapter); 254*cdf0e10cSrcweir } 255*cdf0e10cSrcweir 256*cdf0e10cSrcweir /* 257*cdf0e10cSrcweir * constructs the user interface. 258*cdf0e10cSrcweir */ 259*cdf0e10cSrcweir private Container buildUI(int width, int height) 260*cdf0e10cSrcweir { 261*cdf0e10cSrcweir JPanel mainPanel = new JPanel(); 262*cdf0e10cSrcweir 263*cdf0e10cSrcweir int frameHeight = height-40; 264*cdf0e10cSrcweir int leftWindowWidth = (width-40)/3; 265*cdf0e10cSrcweir int middleWindowWidth = leftWindowWidth; 266*cdf0e10cSrcweir int rightWindowWidth = leftWindowWidth; 267*cdf0e10cSrcweir int leftPaneWidth = leftWindowWidth+middleWindowWidth; 268*cdf0e10cSrcweir int frameWidth = leftPaneWidth + rightWindowWidth; 269*cdf0e10cSrcweir 270*cdf0e10cSrcweir /* Make a nice border */ 271*cdf0e10cSrcweir EmptyBorder emptyBorder = new EmptyBorder(5,5,5,5); 272*cdf0e10cSrcweir BevelBorder bevelBorder = new BevelBorder(BevelBorder.LOWERED); 273*cdf0e10cSrcweir CompoundBorder compoundBorder = new CompoundBorder(emptyBorder,bevelBorder); 274*cdf0e10cSrcweir mainPanel.setBorder(new CompoundBorder(compoundBorder,emptyBorder)); 275*cdf0e10cSrcweir 276*cdf0e10cSrcweir /* Set up the tree */ 277*cdf0e10cSrcweir m_leftTreeModelAdapter = new DomToTreeModelAdapter(m_document); 278*cdf0e10cSrcweir m_middleTreeModelAdapter = new DomToTreeModelAdapter(m_document); 279*cdf0e10cSrcweir m_rightTreeModelAdapter = new DomToTreeModelAdapter(m_document); 280*cdf0e10cSrcweir 281*cdf0e10cSrcweir m_leftTree = new JTree(m_leftTreeModelAdapter); 282*cdf0e10cSrcweir m_leftTextArea = new JTextArea(); 283*cdf0e10cSrcweir m_middleTree = new JTree(m_middleTreeModelAdapter); 284*cdf0e10cSrcweir m_rightTree = new JTree(m_rightTreeModelAdapter); 285*cdf0e10cSrcweir 286*cdf0e10cSrcweir ToolTipManager.sharedInstance().registerComponent(m_leftTree); 287*cdf0e10cSrcweir ToolTipManager.sharedInstance().registerComponent(m_middleTree); 288*cdf0e10cSrcweir ToolTipManager.sharedInstance().registerComponent(m_rightTree); 289*cdf0e10cSrcweir 290*cdf0e10cSrcweir /* Builds left tab pane */ 291*cdf0e10cSrcweir JScrollPane leftTreePane = new JScrollPane(m_leftTree); 292*cdf0e10cSrcweir JScrollPane leftTextPane = new JScrollPane(m_leftTextArea); 293*cdf0e10cSrcweir m_leftTabPane= new JTabbedPane(); 294*cdf0e10cSrcweir m_leftTabPane.add("Tree View",leftTreePane); 295*cdf0e10cSrcweir m_leftTabPane.add("Text View",leftTextPane); 296*cdf0e10cSrcweir 297*cdf0e10cSrcweir /* Builds middle tree pane */ 298*cdf0e10cSrcweir JScrollPane middleTreePane = new JScrollPane(m_middleTree); 299*cdf0e10cSrcweir 300*cdf0e10cSrcweir /* Builds right tree pane */ 301*cdf0e10cSrcweir JScrollPane rightTreePane = new JScrollPane(m_rightTree); 302*cdf0e10cSrcweir rightTreePane.setBorder(BorderFactory.createCompoundBorder( 303*cdf0e10cSrcweir BorderFactory.createTitledBorder("Result"), 304*cdf0e10cSrcweir BorderFactory.createEmptyBorder(8,8,8,8))); 305*cdf0e10cSrcweir 306*cdf0e10cSrcweir m_leftTabPane.setPreferredSize( 307*cdf0e10cSrcweir new Dimension( leftWindowWidth, frameHeight )); 308*cdf0e10cSrcweir middleTreePane.setPreferredSize( 309*cdf0e10cSrcweir new Dimension( middleWindowWidth, frameHeight )); 310*cdf0e10cSrcweir rightTreePane.setPreferredSize( 311*cdf0e10cSrcweir new Dimension( rightWindowWidth, frameHeight )); 312*cdf0e10cSrcweir 313*cdf0e10cSrcweir /* Builds the SAX event text box */ 314*cdf0e10cSrcweir m_saxEventText = new JTextField(); 315*cdf0e10cSrcweir 316*cdf0e10cSrcweir /* Builds the unsolved reference table */ 317*cdf0e10cSrcweir m_unsolvedReferenceTable = new JTable( 318*cdf0e10cSrcweir new UnsolvedReferenceTableModel(this)); 319*cdf0e10cSrcweir 320*cdf0e10cSrcweir /* Builds the BufferNode information text area */ 321*cdf0e10cSrcweir m_bufferNodeTextArea = new JTextArea(); 322*cdf0e10cSrcweir 323*cdf0e10cSrcweir /* Builds the SAX chain information label */ 324*cdf0e10cSrcweir m_saxChainLabel = new JLabel(); 325*cdf0e10cSrcweir 326*cdf0e10cSrcweir /* Builds the left pane */ 327*cdf0e10cSrcweir JPanel tabPaneWithSaxEventPane = new JPanel(); 328*cdf0e10cSrcweir tabPaneWithSaxEventPane.setLayout(new BorderLayout()); 329*cdf0e10cSrcweir tabPaneWithSaxEventPane.add("Center",m_leftTabPane); 330*cdf0e10cSrcweir tabPaneWithSaxEventPane.add("South",new JScrollPane(m_saxEventText)); 331*cdf0e10cSrcweir 332*cdf0e10cSrcweir JSplitPane leftPane = 333*cdf0e10cSrcweir new JSplitPane( JSplitPane.VERTICAL_SPLIT, 334*cdf0e10cSrcweir tabPaneWithSaxEventPane, 335*cdf0e10cSrcweir new JScrollPane(m_unsolvedReferenceTable)); 336*cdf0e10cSrcweir leftPane.setBorder(BorderFactory.createCompoundBorder( 337*cdf0e10cSrcweir BorderFactory.createTitledBorder("Original"), 338*cdf0e10cSrcweir BorderFactory.createEmptyBorder(8,8,8,8))); 339*cdf0e10cSrcweir 340*cdf0e10cSrcweir leftPane.setContinuousLayout( true ); 341*cdf0e10cSrcweir leftPane.setDividerLocation( frameHeight*2/3 ); 342*cdf0e10cSrcweir leftPane.setPreferredSize( 343*cdf0e10cSrcweir new Dimension( leftWindowWidth, frameHeight )); 344*cdf0e10cSrcweir 345*cdf0e10cSrcweir /* Builds the middle pane */ 346*cdf0e10cSrcweir JPanel bufferNodeWithSaxChainPane = new JPanel(); 347*cdf0e10cSrcweir bufferNodeWithSaxChainPane.setLayout(new BorderLayout()); 348*cdf0e10cSrcweir bufferNodeWithSaxChainPane.add("Center",m_bufferNodeTextArea); 349*cdf0e10cSrcweir bufferNodeWithSaxChainPane.add("South",new JScrollPane(m_saxChainLabel)); 350*cdf0e10cSrcweir 351*cdf0e10cSrcweir JSplitPane middlePane = 352*cdf0e10cSrcweir new JSplitPane( JSplitPane.VERTICAL_SPLIT, 353*cdf0e10cSrcweir middleTreePane, 354*cdf0e10cSrcweir new JScrollPane(bufferNodeWithSaxChainPane)); 355*cdf0e10cSrcweir 356*cdf0e10cSrcweir middlePane.setBorder(BorderFactory.createCompoundBorder( 357*cdf0e10cSrcweir BorderFactory.createTitledBorder("Insight SAXEventKeeper"), 358*cdf0e10cSrcweir BorderFactory.createEmptyBorder(8,8,8,8))); 359*cdf0e10cSrcweir 360*cdf0e10cSrcweir middlePane.setContinuousLayout( true ); 361*cdf0e10cSrcweir middlePane.setDividerLocation( frameHeight/2+5 ); 362*cdf0e10cSrcweir middlePane.setPreferredSize( 363*cdf0e10cSrcweir new Dimension( middleWindowWidth, frameHeight )); 364*cdf0e10cSrcweir 365*cdf0e10cSrcweir /* Builds the whole frame pane */ 366*cdf0e10cSrcweir JSplitPane leftWithMiddlePane = 367*cdf0e10cSrcweir new JSplitPane( JSplitPane.HORIZONTAL_SPLIT, 368*cdf0e10cSrcweir leftPane, 369*cdf0e10cSrcweir middlePane ); 370*cdf0e10cSrcweir leftWithMiddlePane.setContinuousLayout( true ); 371*cdf0e10cSrcweir leftWithMiddlePane.setDividerLocation( leftWindowWidth ); 372*cdf0e10cSrcweir leftWithMiddlePane.setPreferredSize( 373*cdf0e10cSrcweir new Dimension( leftPaneWidth + 10, frameHeight+10 )); 374*cdf0e10cSrcweir 375*cdf0e10cSrcweir JSplitPane framePane = 376*cdf0e10cSrcweir new JSplitPane( JSplitPane.HORIZONTAL_SPLIT, 377*cdf0e10cSrcweir leftWithMiddlePane, 378*cdf0e10cSrcweir rightTreePane ); 379*cdf0e10cSrcweir 380*cdf0e10cSrcweir 381*cdf0e10cSrcweir framePane.setContinuousLayout( true ); 382*cdf0e10cSrcweir framePane.setDividerLocation(leftPaneWidth+10 ); 383*cdf0e10cSrcweir framePane.setPreferredSize( 384*cdf0e10cSrcweir new Dimension( frameWidth + 20, frameHeight+10 )); 385*cdf0e10cSrcweir 386*cdf0e10cSrcweir /* Adds all GUI components to the main panel */ 387*cdf0e10cSrcweir mainPanel.setLayout(new BorderLayout()); 388*cdf0e10cSrcweir mainPanel.add("Center", framePane ); 389*cdf0e10cSrcweir 390*cdf0e10cSrcweir m_openButton = new JButton("Open..."); 391*cdf0e10cSrcweir m_openButton.addActionListener(this); 392*cdf0e10cSrcweir 393*cdf0e10cSrcweir m_goButton = new JButton("Go!"); 394*cdf0e10cSrcweir m_goButton.addActionListener(this); 395*cdf0e10cSrcweir 396*cdf0e10cSrcweir m_stepButton = new JButton("Step"); 397*cdf0e10cSrcweir m_stepButton.addActionListener(this); 398*cdf0e10cSrcweir 399*cdf0e10cSrcweir m_startButton = new JButton("Start"); 400*cdf0e10cSrcweir m_startButton.addActionListener(this); 401*cdf0e10cSrcweir m_startButton.setEnabled(false); 402*cdf0e10cSrcweir 403*cdf0e10cSrcweir m_isExportingButton = new JCheckBox("export, not import", true); 404*cdf0e10cSrcweir m_isJavaComponentButton = new JCheckBox("use java component", false); 405*cdf0e10cSrcweir 406*cdf0e10cSrcweir m_saveButton = new JButton("Save..."); 407*cdf0e10cSrcweir m_saveButton.addActionListener(this); 408*cdf0e10cSrcweir 409*cdf0e10cSrcweir m_batchButton = new JButton("Batch..."); 410*cdf0e10cSrcweir m_batchButton.addActionListener(this); 411*cdf0e10cSrcweir 412*cdf0e10cSrcweir JPanel buttonPanel = new JPanel(); 413*cdf0e10cSrcweir buttonPanel.add(m_batchButton); 414*cdf0e10cSrcweir buttonPanel.add(m_openButton); 415*cdf0e10cSrcweir buttonPanel.add(m_startButton); 416*cdf0e10cSrcweir buttonPanel.add(m_goButton); 417*cdf0e10cSrcweir buttonPanel.add(m_stepButton); 418*cdf0e10cSrcweir buttonPanel.add(m_isExportingButton); 419*cdf0e10cSrcweir buttonPanel.add(m_isJavaComponentButton); 420*cdf0e10cSrcweir buttonPanel.add(m_saveButton); 421*cdf0e10cSrcweir 422*cdf0e10cSrcweir mainPanel.add("South", buttonPanel); 423*cdf0e10cSrcweir 424*cdf0e10cSrcweir enableGoButton(false); 425*cdf0e10cSrcweir 426*cdf0e10cSrcweir return mainPanel; 427*cdf0e10cSrcweir } 428*cdf0e10cSrcweir 429*cdf0e10cSrcweir /* 430*cdf0e10cSrcweir * enables/disables the Go(and Step) button. 431*cdf0e10cSrcweir */ 432*cdf0e10cSrcweir private void enableGoButton(boolean enabled) 433*cdf0e10cSrcweir { 434*cdf0e10cSrcweir m_goButton.setEnabled(enabled); 435*cdf0e10cSrcweir m_stepButton.setEnabled(enabled); 436*cdf0e10cSrcweir } 437*cdf0e10cSrcweir 438*cdf0e10cSrcweir /* 439*cdf0e10cSrcweir * updates the unsolved reference information. 440*cdf0e10cSrcweir */ 441*cdf0e10cSrcweir private void updatesUnsolvedReferencesInformation() 442*cdf0e10cSrcweir { 443*cdf0e10cSrcweir m_unsolvedReferenceTable.setModel(new UnsolvedReferenceTableModel(this)); 444*cdf0e10cSrcweir } 445*cdf0e10cSrcweir 446*cdf0e10cSrcweir /* 447*cdf0e10cSrcweir * adjusts the view of the tree in order to make the 448*cdf0e10cSrcweir * particular Node into the focus tree leaf. 449*cdf0e10cSrcweir */ 450*cdf0e10cSrcweir private void updatesTree(Node node, JTree tree) 451*cdf0e10cSrcweir { 452*cdf0e10cSrcweir int i=0; 453*cdf0e10cSrcweir int currentLine = 0; 454*cdf0e10cSrcweir 455*cdf0e10cSrcweir while (i<tree.getRowCount()) 456*cdf0e10cSrcweir { 457*cdf0e10cSrcweir TreePath treePath = tree.getPathForRow(i); 458*cdf0e10cSrcweir tree.expandPath(treePath); 459*cdf0e10cSrcweir 460*cdf0e10cSrcweir AdapterNode adapterNode = (AdapterNode)treePath.getLastPathComponent(); 461*cdf0e10cSrcweir 462*cdf0e10cSrcweir if (node == adapterNode.getNode()) 463*cdf0e10cSrcweir { 464*cdf0e10cSrcweir tree.addSelectionPath(treePath); 465*cdf0e10cSrcweir currentLine = i; 466*cdf0e10cSrcweir } 467*cdf0e10cSrcweir 468*cdf0e10cSrcweir ++i; 469*cdf0e10cSrcweir } 470*cdf0e10cSrcweir 471*cdf0e10cSrcweir tree.setCellRenderer(new XMLTreeCellRanderer(node)); 472*cdf0e10cSrcweir tree.scrollRowToVisible(currentLine); 473*cdf0e10cSrcweir } 474*cdf0e10cSrcweir 475*cdf0e10cSrcweir /****************************************************************************** 476*cdf0e10cSrcweir * action listener related methods. 477*cdf0e10cSrcweir ******************************************************************************/ 478*cdf0e10cSrcweir 479*cdf0e10cSrcweir /* 480*cdf0e10cSrcweir * reads in a document, either the document is a file or 481*cdf0e10cSrcweir * is a text paragraph. 482*cdf0e10cSrcweir */ 483*cdf0e10cSrcweir private void openDocument() 484*cdf0e10cSrcweir { 485*cdf0e10cSrcweir if (m_leftTabPane.getSelectedIndex() == 0) 486*cdf0e10cSrcweir { 487*cdf0e10cSrcweir File f = openFile(); 488*cdf0e10cSrcweir if (f != null) 489*cdf0e10cSrcweir { 490*cdf0e10cSrcweir parseFile(f); 491*cdf0e10cSrcweir } 492*cdf0e10cSrcweir } 493*cdf0e10cSrcweir else 494*cdf0e10cSrcweir { 495*cdf0e10cSrcweir String text = m_leftTextArea.getText(); 496*cdf0e10cSrcweir 497*cdf0e10cSrcweir try 498*cdf0e10cSrcweir { 499*cdf0e10cSrcweir parseStream(new ByteArrayInputStream(text.getBytes("UTF-8"))); 500*cdf0e10cSrcweir } 501*cdf0e10cSrcweir catch(UnsupportedEncodingException e) 502*cdf0e10cSrcweir { 503*cdf0e10cSrcweir e.printStackTrace(); 504*cdf0e10cSrcweir } 505*cdf0e10cSrcweir 506*cdf0e10cSrcweir m_leftTabPane.setSelectedIndex(0); 507*cdf0e10cSrcweir } 508*cdf0e10cSrcweir } 509*cdf0e10cSrcweir 510*cdf0e10cSrcweir /* 511*cdf0e10cSrcweir * save the result tree to a file. 512*cdf0e10cSrcweir */ 513*cdf0e10cSrcweir private void saveResult() 514*cdf0e10cSrcweir { 515*cdf0e10cSrcweir saveFile(); 516*cdf0e10cSrcweir } 517*cdf0e10cSrcweir 518*cdf0e10cSrcweir /* 519*cdf0e10cSrcweir * selects a batch file to excute. 520*cdf0e10cSrcweir */ 521*cdf0e10cSrcweir private void openBatch() 522*cdf0e10cSrcweir { 523*cdf0e10cSrcweir File f = openFile(); 524*cdf0e10cSrcweir if (f != null) 525*cdf0e10cSrcweir { 526*cdf0e10cSrcweir runBatch(f); 527*cdf0e10cSrcweir } 528*cdf0e10cSrcweir } 529*cdf0e10cSrcweir 530*cdf0e10cSrcweir /* 531*cdf0e10cSrcweir * makes the current operation to an end. 532*cdf0e10cSrcweir */ 533*cdf0e10cSrcweir private void endMission() 534*cdf0e10cSrcweir { 535*cdf0e10cSrcweir enableGoButton(false); 536*cdf0e10cSrcweir m_parsingThread = null; 537*cdf0e10cSrcweir 538*cdf0e10cSrcweir if (m_xmlSecurityFrameworkController != null) 539*cdf0e10cSrcweir { 540*cdf0e10cSrcweir m_xmlSecurityFrameworkController.endMission(); 541*cdf0e10cSrcweir } 542*cdf0e10cSrcweir 543*cdf0e10cSrcweir updatesUIs(); 544*cdf0e10cSrcweir 545*cdf0e10cSrcweir m_xmlSecurityFrameworkController = null; 546*cdf0e10cSrcweir freeComponents(); 547*cdf0e10cSrcweir 548*cdf0e10cSrcweir System.gc(); 549*cdf0e10cSrcweir } 550*cdf0e10cSrcweir 551*cdf0e10cSrcweir 552*cdf0e10cSrcweir /****************************************************************************** 553*cdf0e10cSrcweir * UNO component related methods 554*cdf0e10cSrcweir ******************************************************************************/ 555*cdf0e10cSrcweir 556*cdf0e10cSrcweir /* 557*cdf0e10cSrcweir * connects the SO server. 558*cdf0e10cSrcweir */ 559*cdf0e10cSrcweir private void connectSO(String unoUrlString) 560*cdf0e10cSrcweir { 561*cdf0e10cSrcweir if (unoUrlString != null) 562*cdf0e10cSrcweir { 563*cdf0e10cSrcweir m_unoURL = new String(unoUrlString); 564*cdf0e10cSrcweir } 565*cdf0e10cSrcweir 566*cdf0e10cSrcweir try 567*cdf0e10cSrcweir { 568*cdf0e10cSrcweir m_xRemoteServiceManager = getRemoteServiceManager(m_unoURL); 569*cdf0e10cSrcweir } 570*cdf0e10cSrcweir catch(Exception e) 571*cdf0e10cSrcweir { 572*cdf0e10cSrcweir e.printStackTrace(); 573*cdf0e10cSrcweir } 574*cdf0e10cSrcweir } 575*cdf0e10cSrcweir 576*cdf0e10cSrcweir /* 577*cdf0e10cSrcweir * creates UNO components. 578*cdf0e10cSrcweir */ 579*cdf0e10cSrcweir private boolean createComponents() 580*cdf0e10cSrcweir { 581*cdf0e10cSrcweir try 582*cdf0e10cSrcweir { 583*cdf0e10cSrcweir String SEInitializer_comp; 584*cdf0e10cSrcweir String XMLSignature_comp; 585*cdf0e10cSrcweir String XMLEncryption_comp; 586*cdf0e10cSrcweir String tokenPath; 587*cdf0e10cSrcweir 588*cdf0e10cSrcweir if (m_bIsJavaBased) 589*cdf0e10cSrcweir { 590*cdf0e10cSrcweir SEInitializer_comp = SEINITIALIZER_COMPONENT_JAVA; 591*cdf0e10cSrcweir XMLSignature_comp = XMLSIGNATURE_COMPONENT_JAVA; 592*cdf0e10cSrcweir XMLEncryption_comp = XMLENCRYPTION_COMPONENT_JAVA; 593*cdf0e10cSrcweir tokenPath = m_javaTokenFile; 594*cdf0e10cSrcweir } 595*cdf0e10cSrcweir else 596*cdf0e10cSrcweir { 597*cdf0e10cSrcweir SEInitializer_comp = SEINITIALIZER_COMPONENT_C; 598*cdf0e10cSrcweir XMLSignature_comp = XMLSIGNATURE_COMPONENT_C; 599*cdf0e10cSrcweir XMLEncryption_comp = XMLENCRYPTION_COMPONENT_C; 600*cdf0e10cSrcweir tokenPath = m_nssTokenPath; 601*cdf0e10cSrcweir } 602*cdf0e10cSrcweir 603*cdf0e10cSrcweir Object seInitializerObj = m_xRemoteServiceManager.createInstanceWithContext( 604*cdf0e10cSrcweir SEInitializer_comp, m_xRemoteContext); 605*cdf0e10cSrcweir 606*cdf0e10cSrcweir if (seInitializerObj == null) 607*cdf0e10cSrcweir { 608*cdf0e10cSrcweir freeComponents(); 609*cdf0e10cSrcweir return false; 610*cdf0e10cSrcweir } 611*cdf0e10cSrcweir 612*cdf0e10cSrcweir m_xSEInitializer = (XSEInitializer)UnoRuntime.queryInterface( 613*cdf0e10cSrcweir XSEInitializer.class, seInitializerObj); 614*cdf0e10cSrcweir 615*cdf0e10cSrcweir m_xXMLSecurityContext = m_xSEInitializer.createSecurityContext(tokenPath); 616*cdf0e10cSrcweir 617*cdf0e10cSrcweir Object xmlSignatureObj = m_xRemoteServiceManager.createInstanceWithContext( 618*cdf0e10cSrcweir XMLSignature_comp, m_xRemoteContext); 619*cdf0e10cSrcweir 620*cdf0e10cSrcweir if (xmlSignatureObj == null) 621*cdf0e10cSrcweir { 622*cdf0e10cSrcweir freeComponents(); 623*cdf0e10cSrcweir return false; 624*cdf0e10cSrcweir } 625*cdf0e10cSrcweir 626*cdf0e10cSrcweir m_xXMLSignature = (XXMLSignature)UnoRuntime.queryInterface( 627*cdf0e10cSrcweir XXMLSignature.class, xmlSignatureObj); 628*cdf0e10cSrcweir 629*cdf0e10cSrcweir Object xmlEncryptionObj = m_xRemoteServiceManager.createInstanceWithContext( 630*cdf0e10cSrcweir XMLEncryption_comp, m_xRemoteContext); 631*cdf0e10cSrcweir 632*cdf0e10cSrcweir if (xmlEncryptionObj == null) 633*cdf0e10cSrcweir { 634*cdf0e10cSrcweir freeComponents(); 635*cdf0e10cSrcweir return false; 636*cdf0e10cSrcweir } 637*cdf0e10cSrcweir 638*cdf0e10cSrcweir m_xXMLEncryption = (XXMLEncryption)UnoRuntime.queryInterface( 639*cdf0e10cSrcweir XXMLEncryption.class, xmlEncryptionObj); 640*cdf0e10cSrcweir 641*cdf0e10cSrcweir return true; 642*cdf0e10cSrcweir } 643*cdf0e10cSrcweir catch(Exception e) 644*cdf0e10cSrcweir { 645*cdf0e10cSrcweir freeComponents(); 646*cdf0e10cSrcweir e.printStackTrace(); 647*cdf0e10cSrcweir return false; 648*cdf0e10cSrcweir } 649*cdf0e10cSrcweir } 650*cdf0e10cSrcweir 651*cdf0e10cSrcweir /* 652*cdf0e10cSrcweir * frees UNO components. 653*cdf0e10cSrcweir */ 654*cdf0e10cSrcweir private void freeComponents() 655*cdf0e10cSrcweir { 656*cdf0e10cSrcweir try 657*cdf0e10cSrcweir { 658*cdf0e10cSrcweir if (m_xXMLSecurityContext != null) 659*cdf0e10cSrcweir { 660*cdf0e10cSrcweir m_xSEInitializer.freeSecurityContext(m_xXMLSecurityContext); 661*cdf0e10cSrcweir m_xXMLSecurityContext = null; 662*cdf0e10cSrcweir } 663*cdf0e10cSrcweir 664*cdf0e10cSrcweir m_xXMLSignature = null; 665*cdf0e10cSrcweir m_xXMLEncryption = null; 666*cdf0e10cSrcweir m_xSEInitializer = null; 667*cdf0e10cSrcweir } 668*cdf0e10cSrcweir catch(Exception e) 669*cdf0e10cSrcweir { 670*cdf0e10cSrcweir e.printStackTrace(); 671*cdf0e10cSrcweir } 672*cdf0e10cSrcweir } 673*cdf0e10cSrcweir 674*cdf0e10cSrcweir /* 675*cdf0e10cSrcweir * getRemoteServiceManager 676*cdf0e10cSrcweir */ 677*cdf0e10cSrcweir private XMultiComponentFactory getRemoteServiceManager(String unoUrl) throws java.lang.Exception 678*cdf0e10cSrcweir { 679*cdf0e10cSrcweir if (m_xRemoteContext == null) 680*cdf0e10cSrcweir { 681*cdf0e10cSrcweir /* 682*cdf0e10cSrcweir * First step: create local component context, get local servicemanager and 683*cdf0e10cSrcweir * ask it to create a UnoUrlResolver object with an XUnoUrlResolver interface 684*cdf0e10cSrcweir */ 685*cdf0e10cSrcweir XComponentContext xLocalContext = 686*cdf0e10cSrcweir com.sun.star.comp.helper.Bootstrap.createInitialComponentContext(null); 687*cdf0e10cSrcweir XMultiComponentFactory xLocalServiceManager = xLocalContext.getServiceManager(); 688*cdf0e10cSrcweir Object urlResolver = xLocalServiceManager.createInstanceWithContext( 689*cdf0e10cSrcweir UNOURLRESOLVER, xLocalContext ); 690*cdf0e10cSrcweir /* 691*cdf0e10cSrcweir * query XUnoUrlResolver interface from urlResolver object 692*cdf0e10cSrcweir */ 693*cdf0e10cSrcweir XUnoUrlResolver xUnoUrlResolver = (XUnoUrlResolver) UnoRuntime.queryInterface( 694*cdf0e10cSrcweir XUnoUrlResolver.class, urlResolver ); 695*cdf0e10cSrcweir 696*cdf0e10cSrcweir /* 697*cdf0e10cSrcweir * Second step: use xUrlResolver interface to import the remote StarOffice.ServiceManager, 698*cdf0e10cSrcweir * retrieve its property DefaultContext and get the remote servicemanager 699*cdf0e10cSrcweir */ 700*cdf0e10cSrcweir Object initialObject = xUnoUrlResolver.resolve( unoUrl ); 701*cdf0e10cSrcweir XPropertySet xPropertySet = (XPropertySet)UnoRuntime.queryInterface( 702*cdf0e10cSrcweir XPropertySet.class, initialObject); 703*cdf0e10cSrcweir Object context = xPropertySet.getPropertyValue("DefaultContext"); 704*cdf0e10cSrcweir m_xRemoteContext = (XComponentContext)UnoRuntime.queryInterface( 705*cdf0e10cSrcweir XComponentContext.class, context); 706*cdf0e10cSrcweir } 707*cdf0e10cSrcweir return m_xRemoteContext.getServiceManager(); 708*cdf0e10cSrcweir } 709*cdf0e10cSrcweir 710*cdf0e10cSrcweir 711*cdf0e10cSrcweir /****************************************************************************** 712*cdf0e10cSrcweir * XML related methods 713*cdf0e10cSrcweir ******************************************************************************/ 714*cdf0e10cSrcweir 715*cdf0e10cSrcweir /* 716*cdf0e10cSrcweir * removes all empty text node inside the particular element 717*cdf0e10cSrcweir */ 718*cdf0e10cSrcweir private void removeEmptyText(Node node) 719*cdf0e10cSrcweir { 720*cdf0e10cSrcweir int type = node.getNodeType(); 721*cdf0e10cSrcweir NodeList children; 722*cdf0e10cSrcweir int i; 723*cdf0e10cSrcweir 724*cdf0e10cSrcweir switch (type) 725*cdf0e10cSrcweir { 726*cdf0e10cSrcweir case Node.DOCUMENT_NODE: 727*cdf0e10cSrcweir case Node.ELEMENT_NODE: 728*cdf0e10cSrcweir Node child = node.getFirstChild(); 729*cdf0e10cSrcweir while (child!= null) 730*cdf0e10cSrcweir { 731*cdf0e10cSrcweir Node nextSibling = child.getNextSibling(); 732*cdf0e10cSrcweir int childType = child.getNodeType(); 733*cdf0e10cSrcweir 734*cdf0e10cSrcweir if (childType==Node.TEXT_NODE) 735*cdf0e10cSrcweir { 736*cdf0e10cSrcweir String message = child.getNodeValue().trim(); 737*cdf0e10cSrcweir if (message == null || message.length()<=0) 738*cdf0e10cSrcweir { 739*cdf0e10cSrcweir node.removeChild(child); 740*cdf0e10cSrcweir } 741*cdf0e10cSrcweir } 742*cdf0e10cSrcweir else if (childType == Node.ELEMENT_NODE) 743*cdf0e10cSrcweir { 744*cdf0e10cSrcweir removeEmptyText(child); 745*cdf0e10cSrcweir } 746*cdf0e10cSrcweir 747*cdf0e10cSrcweir child = nextSibling; 748*cdf0e10cSrcweir } 749*cdf0e10cSrcweir break; 750*cdf0e10cSrcweir } 751*cdf0e10cSrcweir } 752*cdf0e10cSrcweir 753*cdf0e10cSrcweir /* 754*cdf0e10cSrcweir * reads a stream, and parses it into the original tree. 755*cdf0e10cSrcweir */ 756*cdf0e10cSrcweir private void parseStream(InputStream is) 757*cdf0e10cSrcweir { 758*cdf0e10cSrcweir try 759*cdf0e10cSrcweir { 760*cdf0e10cSrcweir DocumentBuilderFactory factory = 761*cdf0e10cSrcweir DocumentBuilderFactory.newInstance(); 762*cdf0e10cSrcweir m_document = null; 763*cdf0e10cSrcweir m_startButton.setEnabled(false); 764*cdf0e10cSrcweir initUI(); 765*cdf0e10cSrcweir 766*cdf0e10cSrcweir /* factory.setValidating(true); */ 767*cdf0e10cSrcweir /* factory.setNamespaceAware(true); */ 768*cdf0e10cSrcweir 769*cdf0e10cSrcweir try 770*cdf0e10cSrcweir { 771*cdf0e10cSrcweir DocumentBuilder builder = factory.newDocumentBuilder(); 772*cdf0e10cSrcweir m_document = builder.parse(is); 773*cdf0e10cSrcweir m_startButton.setEnabled(true); 774*cdf0e10cSrcweir initUI(); 775*cdf0e10cSrcweir } 776*cdf0e10cSrcweir catch (ParserConfigurationException pce) 777*cdf0e10cSrcweir { 778*cdf0e10cSrcweir pce.printStackTrace(); 779*cdf0e10cSrcweir } 780*cdf0e10cSrcweir catch (IOException ioe) 781*cdf0e10cSrcweir { 782*cdf0e10cSrcweir ioe.printStackTrace(); 783*cdf0e10cSrcweir } 784*cdf0e10cSrcweir } 785*cdf0e10cSrcweir catch(Exception exce) 786*cdf0e10cSrcweir { 787*cdf0e10cSrcweir System.out.println("input stream Exception"); 788*cdf0e10cSrcweir } 789*cdf0e10cSrcweir } 790*cdf0e10cSrcweir 791*cdf0e10cSrcweir 792*cdf0e10cSrcweir /****************************************************************************** 793*cdf0e10cSrcweir * file operation related methods 794*cdf0e10cSrcweir ******************************************************************************/ 795*cdf0e10cSrcweir 796*cdf0e10cSrcweir /* 797*cdf0e10cSrcweir * opens a file, and parses it into the original tree. 798*cdf0e10cSrcweir */ 799*cdf0e10cSrcweir private void parseFile(File name) 800*cdf0e10cSrcweir { 801*cdf0e10cSrcweir try 802*cdf0e10cSrcweir { 803*cdf0e10cSrcweir FileInputStream fis = new FileInputStream(name); 804*cdf0e10cSrcweir parseStream(fis); 805*cdf0e10cSrcweir fis.close(); 806*cdf0e10cSrcweir } 807*cdf0e10cSrcweir catch(Exception exce) 808*cdf0e10cSrcweir { 809*cdf0e10cSrcweir System.out.println("open file Exception"); 810*cdf0e10cSrcweir } 811*cdf0e10cSrcweir } 812*cdf0e10cSrcweir 813*cdf0e10cSrcweir 814*cdf0e10cSrcweir /* 815*cdf0e10cSrcweir * selects a file to open 816*cdf0e10cSrcweir */ 817*cdf0e10cSrcweir private File openFile() 818*cdf0e10cSrcweir { 819*cdf0e10cSrcweir File rc = null; 820*cdf0e10cSrcweir 821*cdf0e10cSrcweir JFileChooser fileChooser= new JFileChooser(); 822*cdf0e10cSrcweir 823*cdf0e10cSrcweir fileChooser.setDialogTitle("Select File To Open"); 824*cdf0e10cSrcweir fileChooser.setDialogType(JFileChooser.OPEN_DIALOG); 825*cdf0e10cSrcweir 826*cdf0e10cSrcweir fileChooser.setApproveButtonText("Ok"); 827*cdf0e10cSrcweir 828*cdf0e10cSrcweir if (m_currentDirectory == null) 829*cdf0e10cSrcweir { 830*cdf0e10cSrcweir fileChooser.rescanCurrentDirectory(); 831*cdf0e10cSrcweir } 832*cdf0e10cSrcweir else 833*cdf0e10cSrcweir { 834*cdf0e10cSrcweir fileChooser.setCurrentDirectory(m_currentDirectory); 835*cdf0e10cSrcweir } 836*cdf0e10cSrcweir 837*cdf0e10cSrcweir fileChooser.setFileFilter(new XMLFileFilter()); 838*cdf0e10cSrcweir 839*cdf0e10cSrcweir int result = fileChooser.showDialog(this,null); 840*cdf0e10cSrcweir if (result==fileChooser.APPROVE_OPTION) 841*cdf0e10cSrcweir { 842*cdf0e10cSrcweir m_currentDirectory = fileChooser.getCurrentDirectory(); 843*cdf0e10cSrcweir rc = fileChooser.getSelectedFile(); 844*cdf0e10cSrcweir } 845*cdf0e10cSrcweir 846*cdf0e10cSrcweir return rc; 847*cdf0e10cSrcweir } 848*cdf0e10cSrcweir 849*cdf0e10cSrcweir private void saveFile() 850*cdf0e10cSrcweir { 851*cdf0e10cSrcweir JFileChooser fileChooser= new JFileChooser(); 852*cdf0e10cSrcweir 853*cdf0e10cSrcweir fileChooser.setDialogTitle("Select File To Save"); 854*cdf0e10cSrcweir fileChooser.setDialogType(JFileChooser.SAVE_DIALOG); 855*cdf0e10cSrcweir 856*cdf0e10cSrcweir fileChooser.setApproveButtonText("Ok"); 857*cdf0e10cSrcweir 858*cdf0e10cSrcweir if (m_currentDirectory == null) 859*cdf0e10cSrcweir { 860*cdf0e10cSrcweir fileChooser.rescanCurrentDirectory(); 861*cdf0e10cSrcweir } 862*cdf0e10cSrcweir else 863*cdf0e10cSrcweir { 864*cdf0e10cSrcweir fileChooser.setCurrentDirectory(m_currentDirectory); 865*cdf0e10cSrcweir } 866*cdf0e10cSrcweir 867*cdf0e10cSrcweir fileChooser.setFileFilter(new XMLFileFilter()); 868*cdf0e10cSrcweir 869*cdf0e10cSrcweir int result = fileChooser.showDialog(this,null); 870*cdf0e10cSrcweir if (result==fileChooser.APPROVE_OPTION) 871*cdf0e10cSrcweir { 872*cdf0e10cSrcweir try 873*cdf0e10cSrcweir { 874*cdf0e10cSrcweir m_currentDirectory = fileChooser.getCurrentDirectory(); 875*cdf0e10cSrcweir saveFile(fileChooser.getSelectedFile()); 876*cdf0e10cSrcweir } 877*cdf0e10cSrcweir catch(Exception exce) 878*cdf0e10cSrcweir { 879*cdf0e10cSrcweir System.out.println("save file Exception"); 880*cdf0e10cSrcweir exce.printStackTrace(); 881*cdf0e10cSrcweir } 882*cdf0e10cSrcweir } 883*cdf0e10cSrcweir } 884*cdf0e10cSrcweir 885*cdf0e10cSrcweir /* 886*cdf0e10cSrcweir * excutes a batch file. 887*cdf0e10cSrcweir */ 888*cdf0e10cSrcweir private void runBatch(File f) 889*cdf0e10cSrcweir { 890*cdf0e10cSrcweir FileInputStream fis = null; 891*cdf0e10cSrcweir 892*cdf0e10cSrcweir try 893*cdf0e10cSrcweir { 894*cdf0e10cSrcweir fis = new FileInputStream(f); 895*cdf0e10cSrcweir StringBuffer commandBuffer = new StringBuffer(); 896*cdf0e10cSrcweir 897*cdf0e10cSrcweir m_logFileOutputStream = new FileOutputStream("TestTool-log.txt"); 898*cdf0e10cSrcweir m_bIsBatchRunning = true; 899*cdf0e10cSrcweir int ch = 0; 900*cdf0e10cSrcweir 901*cdf0e10cSrcweir while (ch != -1) 902*cdf0e10cSrcweir { 903*cdf0e10cSrcweir ch = fis.read(); 904*cdf0e10cSrcweir 905*cdf0e10cSrcweir if (ch != 0x0a && ch != -1) 906*cdf0e10cSrcweir { 907*cdf0e10cSrcweir if (ch != 0x0d) 908*cdf0e10cSrcweir { 909*cdf0e10cSrcweir commandBuffer.append((char)ch); 910*cdf0e10cSrcweir } 911*cdf0e10cSrcweir } 912*cdf0e10cSrcweir else 913*cdf0e10cSrcweir { 914*cdf0e10cSrcweir String command = new String(commandBuffer); 915*cdf0e10cSrcweir if (command.startsWith("Open ")) 916*cdf0e10cSrcweir { 917*cdf0e10cSrcweir m_logFileOutputStream.write(("start \""+command+"\" ...\n").getBytes()); 918*cdf0e10cSrcweir String fileName = command.substring(5); 919*cdf0e10cSrcweir parseFile(new File(fileName)); 920*cdf0e10cSrcweir m_logFileOutputStream.write("command end \n\n".getBytes()); 921*cdf0e10cSrcweir } 922*cdf0e10cSrcweir else if (command.startsWith("Use Java Component")) 923*cdf0e10cSrcweir { 924*cdf0e10cSrcweir m_logFileOutputStream.write(("start \""+command+"\" ...\n").getBytes()); 925*cdf0e10cSrcweir m_isJavaComponentButton.setSelected(true); 926*cdf0e10cSrcweir m_logFileOutputStream.write("command end \n\n".getBytes()); 927*cdf0e10cSrcweir } 928*cdf0e10cSrcweir else if (command.startsWith("Use C++ Component")) 929*cdf0e10cSrcweir { 930*cdf0e10cSrcweir m_logFileOutputStream.write(("start \""+command+"\" ...\n").getBytes()); 931*cdf0e10cSrcweir m_isJavaComponentButton.setSelected(false); 932*cdf0e10cSrcweir m_logFileOutputStream.write("command end \n\n".getBytes()); 933*cdf0e10cSrcweir } 934*cdf0e10cSrcweir else if (command.startsWith("Go ")) 935*cdf0e10cSrcweir { 936*cdf0e10cSrcweir m_logFileOutputStream.write(("start \""+command+"\" ...\n").getBytes()); 937*cdf0e10cSrcweir String opera = command.substring(3); 938*cdf0e10cSrcweir if (opera.equals("Sign") || opera.equals("Encrypt")) 939*cdf0e10cSrcweir { 940*cdf0e10cSrcweir m_isExportingButton.setSelected(true); 941*cdf0e10cSrcweir } 942*cdf0e10cSrcweir else 943*cdf0e10cSrcweir { 944*cdf0e10cSrcweir m_isExportingButton.setSelected(false); 945*cdf0e10cSrcweir } 946*cdf0e10cSrcweir 947*cdf0e10cSrcweir startsUp(); 948*cdf0e10cSrcweir if (m_parsingThread != null) 949*cdf0e10cSrcweir { 950*cdf0e10cSrcweir m_bIsUIUpdateSuppressed = true; 951*cdf0e10cSrcweir try{ 952*cdf0e10cSrcweir while (m_parsingThread.nextStep()); 953*cdf0e10cSrcweir endMission(); 954*cdf0e10cSrcweir } 955*cdf0e10cSrcweir catch(Exception e) 956*cdf0e10cSrcweir { 957*cdf0e10cSrcweir System.out.println("exception happen during batch:"+e); 958*cdf0e10cSrcweir e.printStackTrace(); 959*cdf0e10cSrcweir } 960*cdf0e10cSrcweir 961*cdf0e10cSrcweir m_bIsUIUpdateSuppressed = false; 962*cdf0e10cSrcweir updatesUIs(); 963*cdf0e10cSrcweir } 964*cdf0e10cSrcweir m_logFileOutputStream.write("command end \n\n".getBytes()); 965*cdf0e10cSrcweir } 966*cdf0e10cSrcweir else if (command.startsWith("Save ")) 967*cdf0e10cSrcweir { 968*cdf0e10cSrcweir m_logFileOutputStream.write(("start \""+command+"\" ...\n").getBytes()); 969*cdf0e10cSrcweir String fileName = command.substring(5); 970*cdf0e10cSrcweir saveFile(new File(fileName)); 971*cdf0e10cSrcweir m_logFileOutputStream.write("command end \n\n".getBytes()); 972*cdf0e10cSrcweir } 973*cdf0e10cSrcweir 974*cdf0e10cSrcweir commandBuffer = new StringBuffer(); 975*cdf0e10cSrcweir } 976*cdf0e10cSrcweir } 977*cdf0e10cSrcweir 978*cdf0e10cSrcweir m_bIsBatchRunning = false; 979*cdf0e10cSrcweir m_logFileOutputStream.close(); 980*cdf0e10cSrcweir m_logFileOutputStream = null; 981*cdf0e10cSrcweir 982*cdf0e10cSrcweir fis.close(); 983*cdf0e10cSrcweir fis = null; 984*cdf0e10cSrcweir } 985*cdf0e10cSrcweir catch(java.io.IOException e) 986*cdf0e10cSrcweir { 987*cdf0e10cSrcweir e.printStackTrace(); 988*cdf0e10cSrcweir } 989*cdf0e10cSrcweir } 990*cdf0e10cSrcweir 991*cdf0e10cSrcweir /* 992*cdf0e10cSrcweir * save the current result tree to a particular file. 993*cdf0e10cSrcweir */ 994*cdf0e10cSrcweir private void saveFile(File f) 995*cdf0e10cSrcweir { 996*cdf0e10cSrcweir try{ 997*cdf0e10cSrcweir FileOutputStream fos = new FileOutputStream(f); 998*cdf0e10cSrcweir SAXEventPrinter.display((Document)m_rightTreeEventCollector.getDocument(), 999*cdf0e10cSrcweir 0,fos,false); 1000*cdf0e10cSrcweir fos.close(); 1001*cdf0e10cSrcweir }catch(Exception e) 1002*cdf0e10cSrcweir { 1003*cdf0e10cSrcweir e.printStackTrace(); 1004*cdf0e10cSrcweir } 1005*cdf0e10cSrcweir } 1006*cdf0e10cSrcweir 1007*cdf0e10cSrcweir /****************************************************************************** 1008*cdf0e10cSrcweir * others 1009*cdf0e10cSrcweir ******************************************************************************/ 1010*cdf0e10cSrcweir 1011*cdf0e10cSrcweir /* 1012*cdf0e10cSrcweir * starts up the operation. 1013*cdf0e10cSrcweir */ 1014*cdf0e10cSrcweir private void startsUp() 1015*cdf0e10cSrcweir { 1016*cdf0e10cSrcweir if (m_parsingThread != null) 1017*cdf0e10cSrcweir { 1018*cdf0e10cSrcweir m_parsingThread = null; 1019*cdf0e10cSrcweir } 1020*cdf0e10cSrcweir 1021*cdf0e10cSrcweir m_bIsExporting = m_isExportingButton.isSelected(); 1022*cdf0e10cSrcweir m_bIsJavaBased = m_isJavaComponentButton.isSelected(); 1023*cdf0e10cSrcweir 1024*cdf0e10cSrcweir if (createComponents()) 1025*cdf0e10cSrcweir { 1026*cdf0e10cSrcweir m_rightTreeEventCollector = new SAXEventCollector(this); 1027*cdf0e10cSrcweir 1028*cdf0e10cSrcweir m_parsingThread = new ParsingThread( 1029*cdf0e10cSrcweir m_document, 1030*cdf0e10cSrcweir null, 1031*cdf0e10cSrcweir this); 1032*cdf0e10cSrcweir 1033*cdf0e10cSrcweir m_xmlSecurityFrameworkController = 1034*cdf0e10cSrcweir new XMLSecurityFrameworkController( 1035*cdf0e10cSrcweir this, 1036*cdf0e10cSrcweir m_bIsExporting, 1037*cdf0e10cSrcweir m_bIsJavaBased, 1038*cdf0e10cSrcweir m_rightTreeEventCollector, 1039*cdf0e10cSrcweir m_parsingThread, 1040*cdf0e10cSrcweir m_xXMLSecurityContext, 1041*cdf0e10cSrcweir m_xXMLSignature, 1042*cdf0e10cSrcweir m_xXMLEncryption, 1043*cdf0e10cSrcweir m_xRemoteServiceManager, 1044*cdf0e10cSrcweir m_xRemoteContext); 1045*cdf0e10cSrcweir 1046*cdf0e10cSrcweir enableGoButton(true); 1047*cdf0e10cSrcweir } 1048*cdf0e10cSrcweir else 1049*cdf0e10cSrcweir { 1050*cdf0e10cSrcweir showMessage("Error in creating XML Security Components!"); 1051*cdf0e10cSrcweir } 1052*cdf0e10cSrcweir } 1053*cdf0e10cSrcweir 1054*cdf0e10cSrcweir /************************************************************************************** 1055*cdf0e10cSrcweir * protected methods 1056*cdf0e10cSrcweir **************************************************************************************/ 1057*cdf0e10cSrcweir 1058*cdf0e10cSrcweir /****************************************************************************** 1059*cdf0e10cSrcweir * UI related methods 1060*cdf0e10cSrcweir ******************************************************************************/ 1061*cdf0e10cSrcweir 1062*cdf0e10cSrcweir /* 1063*cdf0e10cSrcweir * updates the sax chain information. 1064*cdf0e10cSrcweir */ 1065*cdf0e10cSrcweir protected void updatesSAXChainInformation(String chainStr) 1066*cdf0e10cSrcweir { 1067*cdf0e10cSrcweir m_saxChainLabel.setText(chainStr); 1068*cdf0e10cSrcweir } 1069*cdf0e10cSrcweir 1070*cdf0e10cSrcweir /* 1071*cdf0e10cSrcweir * update the current SAX event information. 1072*cdf0e10cSrcweir */ 1073*cdf0e10cSrcweir protected void updatesCurrentSAXEventInformation(String event) 1074*cdf0e10cSrcweir { 1075*cdf0e10cSrcweir m_saxEventText.setText(event); 1076*cdf0e10cSrcweir } 1077*cdf0e10cSrcweir 1078*cdf0e10cSrcweir /* 1079*cdf0e10cSrcweir * updates all information in the UI. 1080*cdf0e10cSrcweir */ 1081*cdf0e10cSrcweir protected void updatesUIs() 1082*cdf0e10cSrcweir { 1083*cdf0e10cSrcweir if (!m_bIsUIUpdateSuppressed) 1084*cdf0e10cSrcweir { 1085*cdf0e10cSrcweir m_leftTree.clearSelection(); 1086*cdf0e10cSrcweir updatesTree(null, m_leftTree); 1087*cdf0e10cSrcweir 1088*cdf0e10cSrcweir if (m_xmlSecurityFrameworkController != null) 1089*cdf0e10cSrcweir { 1090*cdf0e10cSrcweir String bufferNodeTreeText = m_xmlSecurityFrameworkController.getBufferNodeTreeInformation(); 1091*cdf0e10cSrcweir if (bufferNodeTreeText == null) 1092*cdf0e10cSrcweir { 1093*cdf0e10cSrcweir m_middleTree.setVisible(false); 1094*cdf0e10cSrcweir m_bufferNodeTextArea.setText("No XML Security Related"); 1095*cdf0e10cSrcweir } 1096*cdf0e10cSrcweir else 1097*cdf0e10cSrcweir { 1098*cdf0e10cSrcweir m_middleTreeEventCollector = new SAXEventCollector(null); 1099*cdf0e10cSrcweir m_xmlSecurityFrameworkController.getDocument(m_middleTreeEventCollector); 1100*cdf0e10cSrcweir 1101*cdf0e10cSrcweir m_middleTreeModelAdapter = new DomToTreeModelAdapter(m_middleTreeEventCollector.getDocument()); 1102*cdf0e10cSrcweir m_middleTree.setModel(m_middleTreeModelAdapter); 1103*cdf0e10cSrcweir updatesTree(null, m_middleTree); 1104*cdf0e10cSrcweir m_middleTree.setVisible(true); 1105*cdf0e10cSrcweir m_bufferNodeTextArea.setText(bufferNodeTreeText); 1106*cdf0e10cSrcweir } 1107*cdf0e10cSrcweir } 1108*cdf0e10cSrcweir else 1109*cdf0e10cSrcweir { 1110*cdf0e10cSrcweir m_middleTree.setVisible(false); 1111*cdf0e10cSrcweir m_bufferNodeTextArea.setText("No XMLImporter/XMLExporter"); 1112*cdf0e10cSrcweir } 1113*cdf0e10cSrcweir 1114*cdf0e10cSrcweir if (m_rightTreeEventCollector != null) 1115*cdf0e10cSrcweir { 1116*cdf0e10cSrcweir m_rightTreeModelAdapter = new DomToTreeModelAdapter((Document)m_rightTreeEventCollector.getDocument()); 1117*cdf0e10cSrcweir m_rightTree.setModel(m_rightTreeModelAdapter); 1118*cdf0e10cSrcweir updatesTree((Node)m_rightTreeEventCollector.getCurrentElement(), m_rightTree); 1119*cdf0e10cSrcweir } 1120*cdf0e10cSrcweir 1121*cdf0e10cSrcweir updatesUnsolvedReferencesInformation(); 1122*cdf0e10cSrcweir } 1123*cdf0e10cSrcweir } 1124*cdf0e10cSrcweir 1125*cdf0e10cSrcweir /* 1126*cdf0e10cSrcweir * shows a message. 1127*cdf0e10cSrcweir */ 1128*cdf0e10cSrcweir protected void showMessage(String msg) 1129*cdf0e10cSrcweir { 1130*cdf0e10cSrcweir if (m_bIsBatchRunning) 1131*cdf0e10cSrcweir { 1132*cdf0e10cSrcweir try 1133*cdf0e10cSrcweir { 1134*cdf0e10cSrcweir if (!msg.startsWith("Message from : SAXEventKeeper")) 1135*cdf0e10cSrcweir { 1136*cdf0e10cSrcweir byte [] b = msg.getBytes(); 1137*cdf0e10cSrcweir m_logFileOutputStream.write(" ".getBytes()); 1138*cdf0e10cSrcweir 1139*cdf0e10cSrcweir for (int i=0; i<b.length; ++i) 1140*cdf0e10cSrcweir { 1141*cdf0e10cSrcweir m_logFileOutputStream.write(b[i]); 1142*cdf0e10cSrcweir if (b[i] == '\n') 1143*cdf0e10cSrcweir { 1144*cdf0e10cSrcweir m_logFileOutputStream.write(" ".getBytes()); 1145*cdf0e10cSrcweir } 1146*cdf0e10cSrcweir } 1147*cdf0e10cSrcweir m_logFileOutputStream.write("\n ==============================\n".getBytes()); 1148*cdf0e10cSrcweir } 1149*cdf0e10cSrcweir } 1150*cdf0e10cSrcweir catch(IOException e) 1151*cdf0e10cSrcweir { 1152*cdf0e10cSrcweir e.printStackTrace(); 1153*cdf0e10cSrcweir } 1154*cdf0e10cSrcweir } 1155*cdf0e10cSrcweir else 1156*cdf0e10cSrcweir { 1157*cdf0e10cSrcweir if (stepMode) 1158*cdf0e10cSrcweir { 1159*cdf0e10cSrcweir JOptionPane optionPane = new JOptionPane(); 1160*cdf0e10cSrcweir optionPane.showMessageDialog(this, msg, "TestTool Notification", JOptionPane.INFORMATION_MESSAGE); 1161*cdf0e10cSrcweir } 1162*cdf0e10cSrcweir else 1163*cdf0e10cSrcweir { 1164*cdf0e10cSrcweir Object[] options = { "OK", "Go back to step mode" }; 1165*cdf0e10cSrcweir if (1 == JOptionPane.showOptionDialog(this, msg, "TestTool Notification", 1166*cdf0e10cSrcweir JOptionPane.DEFAULT_OPTION, JOptionPane.PLAIN_MESSAGE, 1167*cdf0e10cSrcweir null, options, options[0])) 1168*cdf0e10cSrcweir { 1169*cdf0e10cSrcweir stepMode = true; 1170*cdf0e10cSrcweir } 1171*cdf0e10cSrcweir } 1172*cdf0e10cSrcweir } 1173*cdf0e10cSrcweir } 1174*cdf0e10cSrcweir 1175*cdf0e10cSrcweir 1176*cdf0e10cSrcweir /****************************************************************************** 1177*cdf0e10cSrcweir * information retrieving 1178*cdf0e10cSrcweir ******************************************************************************/ 1179*cdf0e10cSrcweir 1180*cdf0e10cSrcweir /* 1181*cdf0e10cSrcweir * gets all unsolved reference ids. 1182*cdf0e10cSrcweir * a reference id is the value of the id attribute of an 1183*cdf0e10cSrcweir * referenced element. 1184*cdf0e10cSrcweir */ 1185*cdf0e10cSrcweir protected Vector getUnsolvedReferenceIds() 1186*cdf0e10cSrcweir { 1187*cdf0e10cSrcweir Vector rc; 1188*cdf0e10cSrcweir 1189*cdf0e10cSrcweir if (m_xmlSecurityFrameworkController == null) 1190*cdf0e10cSrcweir { 1191*cdf0e10cSrcweir rc = new Vector(); 1192*cdf0e10cSrcweir } 1193*cdf0e10cSrcweir else 1194*cdf0e10cSrcweir { 1195*cdf0e10cSrcweir rc = ((XMLSecurityFrameworkController)m_xmlSecurityFrameworkController). 1196*cdf0e10cSrcweir getUnsolvedReferenceIds(); 1197*cdf0e10cSrcweir } 1198*cdf0e10cSrcweir 1199*cdf0e10cSrcweir return rc; 1200*cdf0e10cSrcweir } 1201*cdf0e10cSrcweir 1202*cdf0e10cSrcweir /* 1203*cdf0e10cSrcweir * gets all unsolved reference keeper ids. 1204*cdf0e10cSrcweir * a reference keeper id is the id which the SAXEventKeeper uses 1205*cdf0e10cSrcweir * to identify the corresponding BufferNode. 1206*cdf0e10cSrcweir */ 1207*cdf0e10cSrcweir protected Vector getUnsolvedReferenceKeeperIds() 1208*cdf0e10cSrcweir { 1209*cdf0e10cSrcweir Vector rc; 1210*cdf0e10cSrcweir 1211*cdf0e10cSrcweir if (m_xmlSecurityFrameworkController == null) 1212*cdf0e10cSrcweir { 1213*cdf0e10cSrcweir rc = new Vector(); 1214*cdf0e10cSrcweir } 1215*cdf0e10cSrcweir else 1216*cdf0e10cSrcweir { 1217*cdf0e10cSrcweir rc = ((XMLSecurityFrameworkController)m_xmlSecurityFrameworkController). 1218*cdf0e10cSrcweir getUnsolvedReferenceKeeperIds(); 1219*cdf0e10cSrcweir } 1220*cdf0e10cSrcweir 1221*cdf0e10cSrcweir return rc; 1222*cdf0e10cSrcweir } 1223*cdf0e10cSrcweir 1224*cdf0e10cSrcweir /* 1225*cdf0e10cSrcweir * gets all unsolved references' remaining numbers. 1226*cdf0e10cSrcweir * a remaining number is that how many claims have not been found for 1227*cdf0e10cSrcweir * a unsolved reference. 1228*cdf0e10cSrcweir */ 1229*cdf0e10cSrcweir protected Vector getUnsolvedReferenceRefNum() 1230*cdf0e10cSrcweir { 1231*cdf0e10cSrcweir Vector rc; 1232*cdf0e10cSrcweir 1233*cdf0e10cSrcweir if (m_xmlSecurityFrameworkController == null) 1234*cdf0e10cSrcweir { 1235*cdf0e10cSrcweir rc = new Vector(); 1236*cdf0e10cSrcweir } 1237*cdf0e10cSrcweir else 1238*cdf0e10cSrcweir { 1239*cdf0e10cSrcweir rc = ((XMLSecurityFrameworkController)m_xmlSecurityFrameworkController). 1240*cdf0e10cSrcweir getUnsolvedReferenceRefNum(); 1241*cdf0e10cSrcweir } 1242*cdf0e10cSrcweir 1243*cdf0e10cSrcweir return rc; 1244*cdf0e10cSrcweir } 1245*cdf0e10cSrcweir 1246*cdf0e10cSrcweir 1247*cdf0e10cSrcweir /************************************************************************************** 1248*cdf0e10cSrcweir * public methods 1249*cdf0e10cSrcweir **************************************************************************************/ 1250*cdf0e10cSrcweir 1251*cdf0e10cSrcweir /****************************************************************************** 1252*cdf0e10cSrcweir * action listener related methods. 1253*cdf0e10cSrcweir ******************************************************************************/ 1254*cdf0e10cSrcweir 1255*cdf0e10cSrcweir /* 1256*cdf0e10cSrcweir * action listening method. 1257*cdf0e10cSrcweir */ 1258*cdf0e10cSrcweir public void actionPerformed(ActionEvent e) 1259*cdf0e10cSrcweir { 1260*cdf0e10cSrcweir if (e.getSource().equals(m_startButton)) 1261*cdf0e10cSrcweir { 1262*cdf0e10cSrcweir endMission(); 1263*cdf0e10cSrcweir startsUp(); 1264*cdf0e10cSrcweir } 1265*cdf0e10cSrcweir if (e.getSource().equals(m_goButton)) 1266*cdf0e10cSrcweir { 1267*cdf0e10cSrcweir if (m_parsingThread != null) 1268*cdf0e10cSrcweir { 1269*cdf0e10cSrcweir stepMode = false; 1270*cdf0e10cSrcweir boolean notOver; 1271*cdf0e10cSrcweir while ( notOver = m_parsingThread.nextStep()) 1272*cdf0e10cSrcweir { 1273*cdf0e10cSrcweir if (stepMode) break; 1274*cdf0e10cSrcweir } 1275*cdf0e10cSrcweir 1276*cdf0e10cSrcweir if (!notOver) endMission(); 1277*cdf0e10cSrcweir } 1278*cdf0e10cSrcweir } 1279*cdf0e10cSrcweir if (e.getSource().equals(m_stepButton)) 1280*cdf0e10cSrcweir { 1281*cdf0e10cSrcweir if (m_parsingThread != null) 1282*cdf0e10cSrcweir { 1283*cdf0e10cSrcweir if (!m_parsingThread.nextStep()) 1284*cdf0e10cSrcweir { 1285*cdf0e10cSrcweir endMission(); 1286*cdf0e10cSrcweir } 1287*cdf0e10cSrcweir } 1288*cdf0e10cSrcweir } 1289*cdf0e10cSrcweir if (e.getSource().equals(m_openButton)) 1290*cdf0e10cSrcweir { 1291*cdf0e10cSrcweir openDocument(); 1292*cdf0e10cSrcweir } 1293*cdf0e10cSrcweir if (e.getSource().equals(m_saveButton)) 1294*cdf0e10cSrcweir { 1295*cdf0e10cSrcweir saveResult(); 1296*cdf0e10cSrcweir } 1297*cdf0e10cSrcweir if (e.getSource().equals(m_batchButton)) 1298*cdf0e10cSrcweir { 1299*cdf0e10cSrcweir openBatch(); 1300*cdf0e10cSrcweir } 1301*cdf0e10cSrcweir } 1302*cdf0e10cSrcweir 1303*cdf0e10cSrcweir /* 1304*cdf0e10cSrcweir * void-consturctor method 1305*cdf0e10cSrcweir */ 1306*cdf0e10cSrcweir public TestTool() 1307*cdf0e10cSrcweir { 1308*cdf0e10cSrcweir getRootPane().putClientProperty("defeatSystemEventQueueCheck", Boolean.TRUE); 1309*cdf0e10cSrcweir 1310*cdf0e10cSrcweir try 1311*cdf0e10cSrcweir { 1312*cdf0e10cSrcweir m_currentDirectory = new File(System.getProperty("user.dir")); 1313*cdf0e10cSrcweir } 1314*cdf0e10cSrcweir catch(Exception e) 1315*cdf0e10cSrcweir { 1316*cdf0e10cSrcweir System.out.println("getProperty error :"+e); 1317*cdf0e10cSrcweir } 1318*cdf0e10cSrcweir } 1319*cdf0e10cSrcweir 1320*cdf0e10cSrcweir /* 1321*cdf0e10cSrcweir * consturctor method with a specific connection URL 1322*cdf0e10cSrcweir */ 1323*cdf0e10cSrcweir public TestTool(String connecturl) 1324*cdf0e10cSrcweir { 1325*cdf0e10cSrcweir this(); 1326*cdf0e10cSrcweir m_unoURL = new String(connecturl); 1327*cdf0e10cSrcweir } 1328*cdf0e10cSrcweir 1329*cdf0e10cSrcweir public static void main(String argv[]) 1330*cdf0e10cSrcweir { 1331*cdf0e10cSrcweir Dimension screenSize = 1332*cdf0e10cSrcweir Toolkit.getDefaultToolkit().getScreenSize(); 1333*cdf0e10cSrcweir 1334*cdf0e10cSrcweir TestTool tt; 1335*cdf0e10cSrcweir 1336*cdf0e10cSrcweir if (argv.length < 1) 1337*cdf0e10cSrcweir { 1338*cdf0e10cSrcweir System.out.println("Usage: java TestTool [javaTokenFile] [nssTokenPath] [xml file]?"); 1339*cdf0e10cSrcweir return; 1340*cdf0e10cSrcweir } 1341*cdf0e10cSrcweir 1342*cdf0e10cSrcweir boolean hasFile = false; 1343*cdf0e10cSrcweir boolean hasBatch = false; 1344*cdf0e10cSrcweir String fileName = null; 1345*cdf0e10cSrcweir 1346*cdf0e10cSrcweir if (argv.length >= 3) 1347*cdf0e10cSrcweir { 1348*cdf0e10cSrcweir if (argv[2].startsWith("-b")) 1349*cdf0e10cSrcweir { 1350*cdf0e10cSrcweir fileName = argv[2].substring(2); 1351*cdf0e10cSrcweir hasBatch = true; 1352*cdf0e10cSrcweir } 1353*cdf0e10cSrcweir else 1354*cdf0e10cSrcweir { 1355*cdf0e10cSrcweir fileName = argv[2]; 1356*cdf0e10cSrcweir hasFile = true; 1357*cdf0e10cSrcweir } 1358*cdf0e10cSrcweir } 1359*cdf0e10cSrcweir 1360*cdf0e10cSrcweir tt = new TestTool(); 1361*cdf0e10cSrcweir tt.m_javaTokenFile = new String(argv[0]); 1362*cdf0e10cSrcweir tt.m_nssTokenPath = new String(argv[1]); 1363*cdf0e10cSrcweir tt.connectSO(null); 1364*cdf0e10cSrcweir 1365*cdf0e10cSrcweir /* Set up a GUI framework */ 1366*cdf0e10cSrcweir JFrame myFrame = new JFrame("XML Security Components Tester"); 1367*cdf0e10cSrcweir myFrame.addWindowListener( 1368*cdf0e10cSrcweir new WindowAdapter() { 1369*cdf0e10cSrcweir public void windowClosing(WindowEvent e) {System.exit(0);} 1370*cdf0e10cSrcweir } 1371*cdf0e10cSrcweir ); 1372*cdf0e10cSrcweir 1373*cdf0e10cSrcweir myFrame.setContentPane(tt.buildUI(screenSize.width, screenSize.height)); 1374*cdf0e10cSrcweir myFrame.pack(); 1375*cdf0e10cSrcweir int w = screenSize.width-30; 1376*cdf0e10cSrcweir int h = screenSize.height-30; 1377*cdf0e10cSrcweir myFrame.setLocation(screenSize.width/2 - w/2, 1378*cdf0e10cSrcweir screenSize.height/2 - h/2); 1379*cdf0e10cSrcweir myFrame.setSize(w, h); 1380*cdf0e10cSrcweir myFrame.setVisible(true); 1381*cdf0e10cSrcweir 1382*cdf0e10cSrcweir if (hasFile) 1383*cdf0e10cSrcweir { 1384*cdf0e10cSrcweir tt.parseFile(new File(fileName)); 1385*cdf0e10cSrcweir } 1386*cdf0e10cSrcweir else if (hasBatch) 1387*cdf0e10cSrcweir { 1388*cdf0e10cSrcweir tt.runBatch(new File(fileName)); 1389*cdf0e10cSrcweir } 1390*cdf0e10cSrcweir } 1391*cdf0e10cSrcweir } 1392*cdf0e10cSrcweir 1393