summaryrefslogtreecommitdiff
path: root/xmlsecurity/tools/uno/XMLSecurityFrameworkController.java
diff options
context:
space:
mode:
Diffstat (limited to 'xmlsecurity/tools/uno/XMLSecurityFrameworkController.java')
-rw-r--r--xmlsecurity/tools/uno/XMLSecurityFrameworkController.java1085
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();
- }
- */
- }
-}
-