diff options
Diffstat (limited to 'xmlsecurity/tools/uno/XMLSecurityFrameworkController.java')
-rw-r--r-- | xmlsecurity/tools/uno/XMLSecurityFrameworkController.java | 1085 |
1 files changed, 0 insertions, 1085 deletions
diff --git a/xmlsecurity/tools/uno/XMLSecurityFrameworkController.java b/xmlsecurity/tools/uno/XMLSecurityFrameworkController.java deleted file mode 100644 index ed512ed08..000000000 --- a/xmlsecurity/tools/uno/XMLSecurityFrameworkController.java +++ /dev/null @@ -1,1085 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package com.sun.star.xml.security.uno; - -import java.util.Stack; -import java.util.Vector; - -/* uno classes */ -import com.sun.star.uno.UnoRuntime; -import com.sun.star.lang.XMultiComponentFactory; -import com.sun.star.lang.XInitialization; -import com.sun.star.uno.XComponentContext; -import com.sun.star.xml.sax.XDocumentHandler; -import com.sun.star.xml.sax.XAttributeList; -import com.sun.star.xml.sax.SAXException; - -import com.sun.star.xml.crypto.*; -import com.sun.star.xml.crypto.sax.*; -import com.sun.star.xml.wrapper.*; - -/* - * the XMLSecurityFrameworkController class is used to controll the xml security framework. - */ -public class XMLSecurityFrameworkController - implements XDocumentHandler, XSignatureCreationResultListener, XSignatureVerifyResultListener, - XEncryptionResultListener, XDecryptionResultListener, XSAXEventKeeperStatusChangeListener -{ - /* - * UNO framework component - */ - private XMultiComponentFactory m_xRemoteServiceManager; - private XComponentContext m_xRemoteContext; - - /* - * xml security related UNO components - */ - private XSecuritySAXEventKeeper m_xSAXEventKeeper; - private XXMLDocumentWrapper m_xXMLDocumentWrapper; - private XDocumentHandler m_xOutputHandler; - private XXMLSecurityContext m_xXMLSecurityContext; - private XXMLSignature m_xXMLSignature; - private XXMLEncryption m_xXMLEncryption; - - /* - * used to reserve the current SAX ancestor path - */ - private Stack m_currentPath; - - /* - * maintains all SignatureEntities. - */ - private Vector m_signatureList; - - /* - * maintains all EncryptionEntities. - */ - private Vector m_encryptionList; - - /* - * maintains all unsolved reference Ids. - * These ids are strings which is the value of the id attribute - * of the referenced element. - */ - private Vector m_vUnsolvedReferenceIds; - - /* - * maintains all unsolved reference keeper ids. - * The keeper id is used to uniquely identify a bufferred element - * by the SAXEventKeeper. - */ - private Vector m_vUnsolvedReferencedKeeperIds; - - /* - * maintains the left time that each unsolved reference can be - * claimed. - */ - private Vector m_vUnsolvedReferenceRefNum; - - /* - * whether exporting or importing - */ - private boolean m_bIsExporting; - - /* - * whether java or c - */ - private boolean m_bIsJavaBased; - - /* - * whether the SAXEventKeeper is blocking - */ - private boolean m_bIsBlocking; - - /* - * whether it is collecting a bufferred element - */ - private boolean m_bIsInsideCollectedElement; - - /* - * whether a SAXEventKeeper is in the SAX chain - */ - private boolean m_bSAXEventKeeperIncluded; - - /* - * the ParsingThread used to parse the document - */ - private ParsingThread m_parsingThread; - - /* - * the next document handler that will receives SAX events - * from the parsing thread. - * if the SAXEventKeeper is on the SAX chain, then this - * variable will be the SAXEventKeeper, otherwise, this - * variable will be the xOutputHandler. - */ - private XDocumentHandler m_xExportHandler; - - /* - * the TestTool used to feedback information - */ - private TestTool m_testTool; - - /* - * for encryption target - */ - private boolean m_bIsEncryptionTarget; - private EncryptionEntity m_EncryptionForTarget; - - XMLSecurityFrameworkController( - TestTool testTool, - boolean bIsExporting, - boolean bIsJavaBased, - XDocumentHandler xOutputHandler, - ParsingThread parsingThread, - XXMLSecurityContext xXMLSecurityContext, - XXMLSignature xXMLSignature, - XXMLEncryption xXMLEncryption, - XMultiComponentFactory xRemoteServiceManager, - XComponentContext xRemoteContext) - { - m_bIsExporting = bIsExporting; - m_bIsJavaBased = bIsJavaBased; - - m_xOutputHandler = xOutputHandler; - m_xXMLSecurityContext = xXMLSecurityContext; - m_xXMLSignature = xXMLSignature; - m_xXMLEncryption = xXMLEncryption; - m_xRemoteServiceManager = xRemoteServiceManager; - m_xRemoteContext = xRemoteContext; - - m_testTool = testTool; - m_parsingThread = parsingThread; - - m_signatureList = new Vector(); - m_encryptionList = new Vector(); - - m_vUnsolvedReferenceIds = new Vector(); - m_vUnsolvedReferencedKeeperIds = new Vector(); - m_vUnsolvedReferenceRefNum = new Vector(); - - m_xXMLDocumentWrapper = null; - m_xSAXEventKeeper = null; - - m_bSAXEventKeeperIncluded = false; - m_bIsBlocking = false; - m_bIsInsideCollectedElement = false; - - m_bIsEncryptionTarget = false; - m_EncryptionForTarget = null; - - changeOutput(); - - m_currentPath = new Stack(); - - foundSecurityRelated(); - } - -/************************************************************************************** - * private methods - **************************************************************************************/ - - /* - * changes the output document handler. - */ - private void changeOutput() - { - if (m_bIsExporting) - { - m_parsingThread.setHandler(this); - - /* - * If the SAXEventKeeper is in the SAX chain, then redirects output - * to the SAXEventKeeper, otherwise, to the m_xOutputHandler - */ - if (m_bSAXEventKeeperIncluded) - { - m_xExportHandler = (XDocumentHandler)UnoRuntime.queryInterface( - XDocumentHandler.class, m_xSAXEventKeeper); - m_xSAXEventKeeper.setNextHandler(m_xOutputHandler); - - m_testTool.updatesSAXChainInformation("XMLExporter -> SAXEventKeeper -> SAXWriter"); - } - else - { - m_xExportHandler = m_xOutputHandler; - m_testTool.updatesSAXChainInformation("XMLExporter -> SAXWriter"); - } - } - else - { - if (m_bSAXEventKeeperIncluded) - { - m_parsingThread.setHandler( - (XDocumentHandler)UnoRuntime.queryInterface(XDocumentHandler.class, m_xSAXEventKeeper)); - m_xSAXEventKeeper.setNextHandler(this); - m_testTool.updatesSAXChainInformation("SAXParser -> SAXEventKeeper -> XMLImporter"); - } - else - { - m_parsingThread.setHandler(this); - m_testTool.updatesSAXChainInformation("SAXParser -> XMLImporter"); - } - m_xExportHandler = m_xOutputHandler; - } - } - - /* - * handles the situation when a security related element is found. - * if the SAXEventKeeper is not initialized, then creates a - * SAXEventKeeper. - * the return value represents whether the SAXEventKeeper is newly - * created. - */ - private boolean foundSecurityRelated() - { - if (m_xSAXEventKeeper == null) - { - m_testTool.showMessage("Message from : "+ - (m_bIsExporting?"XMLExporter":"XMLImporter")+ - "\n\nA security related content found, a SAXEventKeeper is created.\n "); - - m_bIsBlocking = false; - m_bIsInsideCollectedElement = false; - - try - { - /* - * creates an XMLDocumentWrapper component. - */ - Object xmlDocumentObj = null; - - if (m_bIsJavaBased) - { - xmlDocumentObj = m_xRemoteServiceManager.createInstanceWithContext( - TestTool.XMLDOCUMENTWRAPPER_COMPONENT_JAVA, m_xRemoteContext); - } - else - { - xmlDocumentObj = m_xRemoteServiceManager.createInstanceWithContext( - TestTool.XMLDOCUMENTWRAPPER_COMPONENT_C, m_xRemoteContext); - } - - m_xXMLDocumentWrapper = (XXMLDocumentWrapper)UnoRuntime.queryInterface( - XXMLDocumentWrapper.class, xmlDocumentObj); - - /* - * creates a SAXEventKeeper component. - */ - Object saxEventKeeperObj = m_xRemoteServiceManager.createInstanceWithContext( - TestTool.SAXEVENTKEEPER_COMPONENT, m_xRemoteContext); - - m_xSAXEventKeeper = - (XSecuritySAXEventKeeper)UnoRuntime.queryInterface( - XSecuritySAXEventKeeper.class, saxEventKeeperObj); - - /* - * initializes the SAXEventKeeper component with the XMLDocumentWrapper component. - */ - XInitialization xInitialization = - (XInitialization)UnoRuntime.queryInterface( - XInitialization.class, m_xSAXEventKeeper); - Object args[]=new Object[1]; - args[0] = m_xXMLDocumentWrapper; - xInitialization.initialize(args); - } - catch( com.sun.star.uno.Exception e) - { - e.printStackTrace(); - } - - /* - * configures the SAXEventKeeper's status change listener. - */ - XSAXEventKeeperStatusChangeBroadcaster xSaxEventKeeperStatusChangeBroadcaster = - (XSAXEventKeeperStatusChangeBroadcaster)UnoRuntime.queryInterface( - XSAXEventKeeperStatusChangeBroadcaster.class, m_xSAXEventKeeper); - xSaxEventKeeperStatusChangeBroadcaster.addSAXEventKeeperStatusChangeListener(this); - } - - boolean rc = !m_bSAXEventKeeperIncluded; - - /* - * changes the export document handler. - */ - m_bSAXEventKeeperIncluded=true; - changeOutput(); - - return rc; - } - - /* - * finds key element or referenced element for a signature. - */ - private void findKeyOrReference(SecurityEntity signatureEntity, String uriStr, boolean isFindingKey) - { - int i=0; - - while (i<m_vUnsolvedReferenceIds.size()) - { - String id = (String)m_vUnsolvedReferenceIds.elementAt(i); - - if (id.equals(uriStr)) - { - int refNum = ((Integer)m_vUnsolvedReferenceRefNum.elementAt(i)).intValue(); - int keeperId = ((Integer)m_vUnsolvedReferencedKeeperIds.elementAt(i)).intValue(); - - if (isFindingKey) - { - /* - * clones a new ElementCollector for the key element. - */ - int cloneKeeperId = m_xSAXEventKeeper.cloneElementCollector( - keeperId, - m_bIsExporting? - (ElementMarkPriority.BEFOREMODIFY):(ElementMarkPriority.AFTERMODIFY)); - - /* - * notifies the key keeper id. - */ - signatureEntity.setKeyId(cloneKeeperId); - - /* - * sets the security id for the key. - */ - m_xSAXEventKeeper.setSecurityId(cloneKeeperId, signatureEntity.getSecurityId()); - - /* - * sets the resolve listener. - */ - XReferenceResolvedBroadcaster xReferenceResolvedBroadcaster = - (XReferenceResolvedBroadcaster)UnoRuntime.queryInterface( - XReferenceResolvedBroadcaster.class, m_xSAXEventKeeper); - xReferenceResolvedBroadcaster.addReferenceResolvedListener( - cloneKeeperId, - signatureEntity.getReferenceListener()); - } - else - { - /* - * clones a new ElementCollector for the referenced element. - */ - int cloneKeeperId = m_xSAXEventKeeper.cloneElementCollector( - keeperId, - m_bIsExporting? - (ElementMarkPriority.AFTERMODIFY):(ElementMarkPriority.BEFOREMODIFY)); - - /* - * sets the security id. - */ - m_xSAXEventKeeper.setSecurityId(cloneKeeperId, signatureEntity.getSecurityId()); - - /* - * sets the resolve listener. - */ - XReferenceResolvedBroadcaster xReferenceResolvedBroadcaster = - (XReferenceResolvedBroadcaster)UnoRuntime.queryInterface( - XReferenceResolvedBroadcaster.class, m_xSAXEventKeeper); - xReferenceResolvedBroadcaster.addReferenceResolvedListener(cloneKeeperId, - signatureEntity.getReferenceListener()); - - try{ - XReferenceCollector xReferenceCollector = - (XReferenceCollector)UnoRuntime.queryInterface( - XReferenceCollector.class, signatureEntity.getReferenceListener()); - xReferenceCollector.setReferenceId(cloneKeeperId); - } - catch( com.sun.star.uno.Exception e) - { - e.printStackTrace(); - } - } - - /* - * if this unsolved reference reaches its max reference number, remove this reference - * from all vectors. - */ - refNum--; - if (refNum == 0) - { - m_xSAXEventKeeper.removeElementCollector(keeperId); - m_vUnsolvedReferenceIds.remove(i); - m_vUnsolvedReferencedKeeperIds.remove(i); - m_vUnsolvedReferenceRefNum.remove(i); - } - else - { - m_vUnsolvedReferenceRefNum.setElementAt(new Integer(refNum),(i)); - ++i; - } - - /* - * If it is find a key, then no further search is needed, one - * signature has one key at most. - */ - if (isFindingKey) - { - break; - } - } - else - { - ++i; - } - } - } - - /* - * checks whether a startElement event represents any security related information. - * return true if this event can't be forwarded into the SAX chain. - */ - private boolean checkSecurityElement(String localName, com.sun.star.xml.sax.XAttributeList xattribs) - { - boolean rc = false; - - if (localName.equals("Signature")) - /* - * this element is a Signature element. - */ - { - SignatureEntity signatureEntity = new SignatureEntity( - m_xSAXEventKeeper, - m_bIsExporting, - this, - m_xXMLSecurityContext, - m_xXMLSignature, - m_xXMLEncryption, - m_xRemoteServiceManager, - m_xRemoteContext); - - m_signatureList.add(signatureEntity); - m_currentPath.push(signatureEntity); - } - else if(localName.equals("Reference")) - { - if (!m_currentPath.empty()) - { - Object signedInfo = m_currentPath.pop(); - - if (!m_currentPath.empty()) - { - Object objSignature = m_currentPath.peek(); - - if ((objSignature instanceof SignatureEntity) && signedInfo.toString().equals("SignedInfo")) - /* - * this element is a Reference element in a signature. - */ - { - String uriStr = xattribs.getValueByName("URI"); - - if (uriStr.charAt(0) == '#') - { - uriStr = uriStr.substring(1); - SignatureEntity signatureEntity = (SignatureEntity)objSignature; - - if (uriStr != null && uriStr.length()>0) - { - signatureEntity.addReferenceId(uriStr); - findKeyOrReference(signatureEntity, uriStr, false); - } - } - } - } - m_currentPath.push(signedInfo); - } - m_currentPath.push(localName); - } - else if(localName.equals("KeyValue") || - localName.equals("KeyName") || - localName.equals("X509Data") || - localName.equals("EncryptedKey")) - { - if (!m_currentPath.empty()) - { - Object keyInfo = m_currentPath.pop(); - - if (!m_currentPath.empty()) - { - Object objSorE = m_currentPath.peek(); - - if ((objSorE instanceof SignatureEntity) && keyInfo.toString().equals("KeyInfo")) - /* - * this element is the key element of a signature. - */ - { - SignatureEntity signatureEntity = (SignatureEntity)objSorE; - signatureEntity.setKeyId(0); - } - else if ((objSorE instanceof EncryptionEntity) && keyInfo.toString().equals("KeyInfo")) - /* - * this element is the key element of an encryption. - */ - { - EncryptionEntity theEncryption = (EncryptionEntity)objSorE; - theEncryption.setKeyId(0); - } - } - m_currentPath.push(keyInfo); - } - - m_currentPath.push(localName); - } - else if(localName.equals("RetrievalMethod")) - { - if (!m_currentPath.empty()) - { - Object keyInfo = m_currentPath.pop(); - - if (!m_currentPath.empty()) - { - Object objSorE = m_currentPath.peek(); - - if ((objSorE instanceof SignatureEntity) && keyInfo.toString().equals("KeyInfo")) - /* - * this element is the RetrievalMethod element in a signature, - * which will include the key uri of this signature. - */ - { - String uriStr = xattribs.getValueByName("URI"); - SignatureEntity signatureEntity = (SignatureEntity)objSorE; - - if (uriStr != null && uriStr.length()>0) - { - signatureEntity.setKeyURI(uriStr); - findKeyOrReference(signatureEntity,uriStr, true); - } - } - else if ((objSorE instanceof EncryptionEntity) && keyInfo.toString().equals("KeyInfo")) - /* - * this element is the RetrievalMethod element in an encryption, - * which will include the key uri of this encryption. - */ - { - String uriStr = xattribs.getValueByName("URI"); - EncryptionEntity theEncryption = (EncryptionEntity)objSorE; - - if (uriStr != null && uriStr.length()>0) - { - theEncryption.setKeyURI(uriStr); - findKeyOrReference(theEncryption, uriStr, true); - } - } - } - m_currentPath.push(keyInfo); - } - m_currentPath.push(localName); - } - else if (localName.equals("EncryptedData")) /* || localName.equals("EncryptedKey")) */ - /* - * this element is an Encryption element. - */ - { - EncryptionEntity theEncryption = new EncryptionEntity( - m_xSAXEventKeeper, - m_bIsExporting, - this, - m_xXMLSecurityContext, - m_xXMLSignature, - m_xXMLEncryption, - m_xRemoteServiceManager, - m_xRemoteContext); - - m_encryptionList.add(theEncryption); - - if (m_bIsExporting) - { - m_currentPath.push(theEncryption); - } - else - { - String uriStr = xattribs.getValueByName("keyURI"); - if (uriStr != null && uriStr.length()>0) - { - theEncryption.setKeyURI(uriStr); - findKeyOrReference(theEncryption,uriStr, true); - } - else - { - theEncryption.setKeyId(0); - } - - rc = true; - } - } - else - /* - * not a security related element. - */ - { - m_currentPath.push(localName); - } - - return rc; - } - - /* - * checks whether a startElement event is referenced by any security entity. - */ - private void checkReference(String localName, com.sun.star.xml.sax.XAttributeList xattribs, String id) - { - String refNumStr = xattribs.getValueByName("refNum"); - - if ( m_bIsEncryptionTarget ) - { - m_EncryptionForTarget.setReference(m_bIsExporting); - m_bIsEncryptionTarget = false; - } - - if (id != null && id.length()>0 ) - /* - * only if this element has id attribute, then it can be referenced by - * a security entity. - */ - { - /* - * if this element has an "refNum" attribute, then the value will be - * the max referencing number on this element, otherwise, set the max - * referencing number to 999. - */ - int refNum = 999; - - if (refNumStr != null && refNumStr.length()>0 ) - { - refNum = new Integer(refNumStr).intValue(); - } - - int length; - - /* - * searches the signature list to check whether any sigture has - * reference on this element. - */ - length = m_signatureList.size(); - for (int i=0; i<length; ++i) - { - SignatureEntity signatureEntity = (SignatureEntity)m_signatureList.elementAt(i); - - if (signatureEntity.setReference(id, m_bIsExporting)) - { - refNum--; - } - - if (signatureEntity.setKey(id, m_bIsExporting)) - { - refNum--; - } - } - - /* - * searches the encryption list for reference. - */ - length = m_encryptionList.size(); - for (int i=0; i<length; ++i) - { - EncryptionEntity theEncryption = (EncryptionEntity)m_encryptionList.elementAt(i); - - if (theEncryption.setKey(id, m_bIsExporting)) - { - refNum--; - } - } - - /* - * if the max referencing number is not reached, then add this element - * into the unsolved reference list. - */ - if (refNum>0) - { - int keeperId; - - if (localName.equals("EncryptedKey")) - { - keeperId = m_xSAXEventKeeper.addSecurityElementCollector( - m_bIsExporting? - (ElementMarkPriority.BEFOREMODIFY):(ElementMarkPriority.AFTERMODIFY), - true); - } - else - { - keeperId = m_xSAXEventKeeper.addSecurityElementCollector( - m_bIsExporting? - (ElementMarkPriority.AFTERMODIFY):(ElementMarkPriority.BEFOREMODIFY), - false); - } - - m_vUnsolvedReferenceIds.add(id); - m_vUnsolvedReferencedKeeperIds.add(new Integer(keeperId)); - m_vUnsolvedReferenceRefNum.add(new Integer(refNum)); - } - } - } - - /* - * configures the output handler. - */ - private void setOutputHandler(XDocumentHandler handler) - { - m_xOutputHandler = handler; - changeOutput(); - } - - -/************************************************************************************** - * protected methods - **************************************************************************************/ - - /* - * methods used to transfer unsolved reference information. - */ - protected Vector getUnsolvedReferenceIds() - { - return m_vUnsolvedReferenceIds; - } - - protected Vector getUnsolvedReferenceKeeperIds() - { - return m_vUnsolvedReferencedKeeperIds; - } - - protected Vector getUnsolvedReferenceRefNum() - { - return m_vUnsolvedReferenceRefNum; - } - - protected String getBufferNodeTreeInformation() - { - if (m_xSAXEventKeeper != null) - { - return m_xSAXEventKeeper.printBufferNodeTree(); - } - else - { - return null; - } - } - - protected void getDocument(XDocumentHandler handler) - { - if (m_xXMLDocumentWrapper != null) - { - try - { - m_xXMLDocumentWrapper.getTree(handler); - } - catch(SAXException e) - { - e.printStackTrace(); - } - } - } - - protected void endMission() - { - while (m_signatureList.size()>0 || m_encryptionList.size()>0) - { - if (m_signatureList.size()>0) - { - SignatureEntity signatureEntity = (SignatureEntity)m_signatureList.elementAt(0); - m_signatureList.remove(0); - signatureEntity.endMission(); - } - else if (m_encryptionList.size()>0) - { - EncryptionEntity theEncryption = (EncryptionEntity)m_encryptionList.elementAt(0); - m_encryptionList.remove(0); - theEncryption.endMission(); - } - } - - while (m_vUnsolvedReferenceIds.size()>0) - { - int keeperId = ((Integer)m_vUnsolvedReferencedKeeperIds.elementAt(0)).intValue(); - m_xSAXEventKeeper.removeElementCollector(keeperId); - m_vUnsolvedReferenceIds.remove(0); - m_vUnsolvedReferencedKeeperIds.remove(0); - m_vUnsolvedReferenceRefNum.remove(0); - } - - m_xSAXEventKeeper.setNextHandler(null); - - XSAXEventKeeperStatusChangeBroadcaster xSaxEventKeeperStatusChangeBroadcaster = - (XSAXEventKeeperStatusChangeBroadcaster)UnoRuntime.queryInterface( - XSAXEventKeeperStatusChangeBroadcaster.class, m_xSAXEventKeeper); - xSaxEventKeeperStatusChangeBroadcaster.addSAXEventKeeperStatusChangeListener(null); - - m_xSAXEventKeeper = null; - m_xXMLDocumentWrapper = null; - m_xOutputHandler = null; - m_xXMLSecurityContext = null; - m_xXMLSignature = null; - m_xXMLEncryption = null; - - m_xExportHandler = null; - m_parsingThread.setHandler(null); - } - -/************************************************************************************** - * public methods - **************************************************************************************/ - - /* - * XDocumentHandler - */ - public void startDocument() - { - try{ - m_xExportHandler.startDocument(); - } - catch( com.sun.star.xml.sax.SAXException e) - { - e.printStackTrace(); - } - - } - - public void endDocument() - { - try{ - m_xExportHandler.endDocument(); - } - catch( com.sun.star.xml.sax.SAXException e) - { - e.printStackTrace(); - } - } - - public void startElement (String str, com.sun.star.xml.sax.XAttributeList xattribs) - { - try{ - String idAttr = xattribs.getValueByName("id"); - if (idAttr == null) - { - idAttr = xattribs.getValueByName("Id"); - } - - boolean hasIdAttr = (idAttr != null && idAttr.length()>0 ); - boolean needResend = false; - - if (hasIdAttr || - (str.equals("Signature")||str.equals("EncryptedData")))/* || str.equals("EncryptedKey"))) */ - { - if (foundSecurityRelated() && !m_bIsExporting) - { - needResend = true; - } - } - - boolean suppressToNext = checkSecurityElement(str, xattribs); - - checkReference(str, xattribs, idAttr); - - if (needResend) - { - m_xSAXEventKeeper.setNextHandler(null); - - XDocumentHandler saxEventKeeperHandler = - (XDocumentHandler)UnoRuntime.queryInterface( - XDocumentHandler.class, m_xSAXEventKeeper); - saxEventKeeperHandler.startElement(str, xattribs); - m_xSAXEventKeeper.setNextHandler((XDocumentHandler)this); - } - - if (!suppressToNext) - { - m_xExportHandler.startElement(str, xattribs); - } - } - catch( com.sun.star.xml.sax.SAXException e) - { - e.printStackTrace(); - } - } - - public void endElement(String str) - { - if (!m_currentPath.empty()) - { - Object obj = m_currentPath.pop(); - - if (obj.toString().equals("SignedInfo")) - { - if (!m_currentPath.empty()) - { - Object objSignature = m_currentPath.peek(); - if (objSignature != null && objSignature instanceof SignatureEntity) - { - ((SignatureEntity)objSignature).setReferenceNumber(); - } - } - } - else if (obj instanceof EncryptionEntity) - { - m_bIsEncryptionTarget = true; - m_EncryptionForTarget = (EncryptionEntity)obj; - - } - } - - try{ - m_xExportHandler.endElement(str); - } - catch( com.sun.star.xml.sax.SAXException e) - { - e.printStackTrace(); - } - } - - public void characters(String str) - { - try{ - m_xExportHandler.characters(str); - } - catch( com.sun.star.xml.sax.SAXException e) - { - e.printStackTrace(); - } - } - - public void ignorableWhitespace(String str) - { - } - - public void processingInstruction(String aTarget, String aData) - { - try{ - m_xExportHandler.processingInstruction(aTarget, aData); - } - catch( com.sun.star.xml.sax.SAXException e) - { - e.printStackTrace(); - } - } - - public void setDocumentLocator (com.sun.star.xml.sax.XLocator xLocator ) - throws com.sun.star.xml.sax.SAXException - { - } - - - /* - * XSignatureCreationResultListener - */ - public void signatureCreated(int securityId, SecurityOperationStatus creationResult) - { - String message = new String(); - message += "A Signature is created:"; - message += "\nSecurity Id = "+securityId; - message += "\nCreation result = "+((creationResult==SecurityOperationStatus.OPERATION_SUCCEEDED)?"Succeed":"Fail"); - - m_testTool.showMessage("Message from : SignatureCreator\n\n"+message+"\n "); - } - - /* - * XSignatureVerifyResultListener - */ - public void signatureVerified(int securityId, SecurityOperationStatus verifyResult) - { - String message = new String(); - message += "A Signature is verified:"; - message += "\nSecurity Id = "+securityId; - message += "\nVerify result = "+((verifyResult==SecurityOperationStatus.OPERATION_SUCCEEDED)?"Succeed":"Fail"); - - m_testTool.showMessage("Message from : SignatureVerifier\n\n"+message+"\n "); - } - - /* - * XEncryptionResultListener - */ - public void encrypted(int securityId, SecurityOperationStatus encryptionResult) - { - String message = new String(); - message += "An EncryptedData is encrypted:"; - message += "\nSecurity Id = "+securityId; - message += "\nEncrypt result = "+((encryptionResult==SecurityOperationStatus.OPERATION_SUCCEEDED)?"Succeed":"Fail"); - - m_testTool.showMessage("Message from : Encryptor\n\n"+message+"\n "); - } - - /* - * XDecryptionResultListener methods - */ - public void decrypted(int securityId, SecurityOperationStatus decryptionResult) - { - String message = new String(); - message += "An EncryptedData is decrypted:"; - message += "\nSecurity Id = "+securityId; - message += "\nDecrypt result = "+((decryptionResult==SecurityOperationStatus.OPERATION_SUCCEEDED)?"Succeed":"Fail"); - - m_testTool.showMessage("Message from : Decryptor\n\n"+message+"\n "); - } - - /* - * XSAXEventKeeperStatusChangeListener methods - */ - public void blockingStatusChanged(boolean isBlocking) - { - m_testTool.showMessage("Message from : SAXEventKeeper\n\n"+ - (isBlocking?"The SAX event stream is blocked.":"The SAX event stream is unblocked.")+ - "\n "); - - this.m_bIsBlocking = isBlocking; - } - - public void collectionStatusChanged(boolean isInsideCollectedElement) - { - m_testTool.showMessage("Message from : SAXEventKeeper\n\n"+ - (isInsideCollectedElement?"Begin to buffer data ...":"End of data bufferring.")+ - "\n "); - - /* - this.m_bIsInsideCollectedElement = isInsideCollectedElement; - - if ( !m_bIsInsideCollectedElement && !m_bIsBlocking) - { - m_bSAXEventKeeperIncluded = false; - } - else - { - m_bSAXEventKeeperIncluded = true; - } - changeOutput(); - */ - } - - public void bufferStatusChanged(boolean isBufferEmpty) - { - m_testTool.showMessage("Message from : SAXEventKeeper\n\n"+ - (isBufferEmpty?"All bufferred data are released, the SAXEventKeeper is destroyed.":"buffer data appears.")+ - "\n "); - /* - if (isBufferEmpty) - { - m_xXMLDocumentWrapper = null; - m_xSAXEventKeeper = null; - m_bSAXEventKeeperIncluded = false; - changeOutput(); - } - */ - } -} - |