aboutsummaryrefslogtreecommitdiff
path: root/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/transformers
diff options
context:
space:
mode:
authorgregor <gregor@d688527b-c9ab-4aba-bd8d-4036d912da1d>2003-11-20 22:51:28 +0000
committergregor <gregor@d688527b-c9ab-4aba-bd8d-4036d912da1d>2003-11-20 22:51:28 +0000
commiteeeb95e7a62ec2cd3e8a483ce080586763c5f094 (patch)
tree9dde1a89048d42c1249f75954956ac10613cd724 /spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/transformers
parent9149618d9049d470d0423c4e896ab6c127eb6c02 (diff)
downloadmoa-id-spss-eeeb95e7a62ec2cd3e8a483ce080586763c5f094.tar.gz
moa-id-spss-eeeb95e7a62ec2cd3e8a483ce080586763c5f094.tar.bz2
moa-id-spss-eeeb95e7a62ec2cd3e8a483ce080586763c5f094.zip
Erstversion lauffähig
git-svn-id: https://joinup.ec.europa.eu/svn/moa-idspss/trunk@60 d688527b-c9ab-4aba-bd8d-4036d912da1d
Diffstat (limited to 'spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/transformers')
-rw-r--r--spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/transformers/MOA2SL.java88
-rw-r--r--spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/transformers/QName.java51
-rw-r--r--spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/transformers/SL2MOA.java88
-rw-r--r--spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/transformers/Utils.java129
4 files changed, 356 insertions, 0 deletions
diff --git a/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/transformers/MOA2SL.java b/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/transformers/MOA2SL.java
new file mode 100644
index 000000000..a85917d81
--- /dev/null
+++ b/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/transformers/MOA2SL.java
@@ -0,0 +1,88 @@
+/*
+ * Created on 20.11.2003
+ *
+ * (c) Stabsstelle IKT-Strategie des Bundes
+ */
+package at.gv.egovernment.moa.spss.slinterface.transformers;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+
+import at.gv.egovernment.moa.spss.slinterface.Constants;
+
+/**
+ * @author Gregor Karlinger (mailto:gregor.karlinger@cio.gv.at)
+ */
+public class MOA2SL
+{
+ /**
+ * Transforms an MOA VerifyXMLSignatureResponse into a SL VerifyXMLSignatureResponse.
+ *
+ * @param moaVerifyXMLSignatureResponse The MOA VerifyXMLSignatureResponse to be transformed.
+ *
+ * @return the specified response document, transformed into a SL VerifyXMLSignatureResponse. Please note
+ * that <code>moaVerifyXMLSignatureResponse</code> is modified into the sl response.
+ *
+ * @pre moaVerifyXMLSignatureResponse is a valid instance of the SL Schema (version 1.2 or 1.1).
+ */
+ public static Document toSlVerifyXMLSignatureResponse(Document moaVerifyXMLSignatureResponse)
+ {
+ // Namespace to namespace prefix mapping
+ HashMap prefixMap = new HashMap(4);
+ prefixMap.put(Constants.NSURI_SL_10_, Constants.NSPRE_SL_10_);
+ prefixMap.put(Constants.NSURI_SL_11_, Constants.NSPRE_SL_11_);
+ prefixMap.put(Constants.NSURI_SL_12_, Constants.NSPRE_SL_12_);
+ prefixMap.put(Constants.NSURI_MOA_12_, Constants.NSPRE_MOA_12_);
+
+ // Namespaces to be changed
+ HashMap nsTransforms = new HashMap();
+ nsTransforms.put(Constants.NSURI_MOA_12_, Constants.NSURI_SL_11_);
+
+ // Names to be changed
+ HashMap nameTransforms = new HashMap();
+ nameTransforms.put(
+ new QName(Constants.NSURI_MOA_12_, "PublicAuthority"),
+ new QName(Constants.NSURI_MOA_12_,"PublicAuthority"));
+
+ Element verifyResponseElem = moaVerifyXMLSignatureResponse.getDocumentElement();
+ verifyResponseElem.setAttributeNS(Constants.NSURI_NAMESPACES_,
+ "xmlns:" + Constants.NSPRE_SL_10_, Constants.NSURI_SL_10_);
+ verifyResponseElem.setAttributeNS(Constants.NSURI_NAMESPACES_,
+ "xmlns:" + Constants.NSPRE_SL_11_, Constants.NSURI_SL_11_);
+
+ // Convert SL request into MOA request
+ verifyResponseElem =
+ Utils.transformDeep(verifyResponseElem, prefixMap, nsTransforms, nameTransforms);
+
+ // Add SignatureManifestCheck element (Code = 98)
+ Element signatureMFCheckElem = moaVerifyXMLSignatureResponse.createElementNS(
+ Constants.NSURI_SL_11_, Constants.NSPRE_SL_11_ + ":SignatureManifestCheck");
+ Element smfCodeElem = moaVerifyXMLSignatureResponse.createElementNS(
+ Constants.NSURI_SL_11_, Constants.NSPRE_SL_11_ + ":Code");
+ signatureMFCheckElem.appendChild(smfCodeElem);
+ smfCodeElem.appendChild(moaVerifyXMLSignatureResponse.createTextNode("98"));
+ Element signatureCheckElem = (Element) verifyResponseElem.getElementsByTagNameNS(
+ Constants.NSURI_SL_11_, "SignatureCheck").item(0);
+ verifyResponseElem.insertBefore(signatureMFCheckElem, signatureCheckElem.getNextSibling());
+
+ // Siblings of Certificate check must be in sl10 namespace
+ nsTransforms.clear();
+ nsTransforms.put(Constants.NSURI_SL_11_, Constants.NSURI_SL_10_);
+ nameTransforms.clear();
+ NodeList signatureCheckChildren = signatureCheckElem.getElementsByTagName("*");
+ ArrayList signatureCheckChildrenList = new ArrayList(signatureCheckChildren.getLength());
+ for (int i = 0; i < signatureCheckChildren.getLength(); i++)
+ {
+ signatureCheckChildrenList.add(signatureCheckChildren.item(i));
+ }
+ for (int i = 0; i < signatureCheckChildrenList.size(); i++)
+ Utils.transformDeep((Element) signatureCheckChildrenList.get(i), prefixMap, nsTransforms,
+ nameTransforms);
+
+ return moaVerifyXMLSignatureResponse;
+ }
+}
diff --git a/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/transformers/QName.java b/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/transformers/QName.java
new file mode 100644
index 000000000..6da0c433f
--- /dev/null
+++ b/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/transformers/QName.java
@@ -0,0 +1,51 @@
+/*
+ * Created on 20.11.2003
+ *
+ * (c) Stabsstelle IKT-Strategie des Bundes
+ */
+package at.gv.egovernment.moa.spss.slinterface.transformers;
+
+/**
+ * @author Gregor Karlinger (mailto:gregor.karlinger@cio.gv.at)
+ */
+public class QName
+{
+ public String nsUrl_;
+ public String localName_;
+
+ /* ---------------------------------------------------------------------------------------------------- */
+
+ public QName(String nsUrl, String localName)
+ {
+ nsUrl_ = nsUrl;
+ localName_ = localName;
+ }
+
+ /* ---------------------------------------------------------------------------------------------------- */
+
+ public boolean equals(Object o)
+ {
+ if (o == null) return false;
+ if (o instanceof QName)
+ {
+ QName toBeCompared = (QName) o;
+
+ boolean nsURLEquals = (nsUrl_ == null)
+ ? toBeCompared.nsUrl_ == null
+ : nsUrl_.equals(toBeCompared.nsUrl_);
+ boolean localNameEquals = (localName_ == null)
+ ? toBeCompared.localName_ == null
+ : localName_.equals(toBeCompared.localName_);
+
+ return nsURLEquals && localNameEquals;
+ }
+ return false;
+ }
+
+ /* ---------------------------------------------------------------------------------------------------- */
+
+ public int hashCode()
+ {
+ return new String(nsUrl_ + localName_).hashCode();
+ }
+}
diff --git a/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/transformers/SL2MOA.java b/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/transformers/SL2MOA.java
new file mode 100644
index 000000000..11855242e
--- /dev/null
+++ b/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/transformers/SL2MOA.java
@@ -0,0 +1,88 @@
+/*
+ * Created on 20.11.2003
+ *
+ * (c) Stabsstelle IKT-Strategie des Bundes
+ */
+package at.gv.egovernment.moa.spss.slinterface.transformers;
+
+import java.util.HashMap;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+import at.gv.egovernment.moa.spss.slinterface.Constants;
+
+/**
+ * @author Gregor Karlinger (mailto:gregor.karlinger@cio.gv.at)
+ */
+public class SL2MOA
+{
+ /**
+ * Transforms an SL VerifyXMLSignatureRequest into a MOA VerifyXMLSignatureRequest.
+ *
+ * @param slVerifyXMLSignatureRequest The SL VerifyXMLSignatureRequest to be transformed.
+ *
+ * @return the specified request document, transformed into a MOA VerifyXMLSignatureRequest. Please note
+ * that <code>slVerifyXMLSignatureRequest</code> is modified into the moa request.
+ *
+ * @pre slVerifyXMLSignatureRequest is a valid instance of the SL Schema (version 1.2 or 1.1).
+ */
+ public static Document toMoaVerifyXMLSignatureRequest(Document slVerifyXMLSignatureRequest,
+ String trustProfileID)
+ {
+ // Namespace to namespace prefix mapping
+ HashMap prefixMap = new HashMap(4);
+ prefixMap.put(Constants.NSURI_SL_10_, Constants.NSPRE_SL_10_);
+ prefixMap.put(Constants.NSURI_SL_11_, Constants.NSPRE_SL_11_);
+ prefixMap.put(Constants.NSURI_SL_12_, Constants.NSPRE_SL_12_);
+ prefixMap.put(Constants.NSURI_MOA_12_, Constants.NSPRE_MOA_12_);
+
+ // Namespaces to be changed
+ HashMap nsTransforms = new HashMap();
+ nsTransforms.put(Constants.NSURI_SL_10_, Constants.NSURI_MOA_12_);
+ nsTransforms.put(Constants.NSURI_SL_11_, Constants.NSURI_MOA_12_);
+ nsTransforms.put(Constants.NSURI_SL_12_, Constants.NSURI_MOA_12_);
+
+ // Names to be changed
+ HashMap nameTransforms = new HashMap();
+ nameTransforms.put(
+ new QName(Constants.NSURI_SL_11_, "SignatureInfo"),
+ new QName(Constants.NSURI_MOA_12_,"VerifySignatureInfo"));
+ nameTransforms.put(
+ new QName(Constants.NSURI_SL_12_, "SignatureInfo"),
+ new QName(Constants.NSURI_MOA_12_,"VerifySignatureInfo"));
+ nameTransforms.put(
+ new QName(Constants.NSURI_SL_11_, "SignatureEnvironment"),
+ new QName(Constants.NSURI_MOA_12_,"VerifySignatureEnvironment"));
+ nameTransforms.put(
+ new QName(Constants.NSURI_SL_12_, "SignatureEnvironment"),
+ new QName(Constants.NSURI_MOA_12_,"VerifySignatureEnvironment"));
+ nameTransforms.put(
+ new QName(Constants.NSURI_SL_11_, "SignatureLocation"),
+ new QName(Constants.NSURI_MOA_12_,"VerifySignatureLocation"));
+ nameTransforms.put(
+ new QName(Constants.NSURI_SL_12_, "SignatureLocation"),
+ new QName(Constants.NSURI_MOA_12_,"VerifySignatureLocation"));
+ nameTransforms.put(
+ new QName(Constants.NSURI_SL_11_, "Supplement"),
+ new QName(Constants.NSURI_MOA_12_,"SupplementProfile"));
+ nameTransforms.put(
+ new QName(Constants.NSURI_SL_12_, "Supplement"),
+ new QName(Constants.NSURI_MOA_12_,"SupplementProfile"));
+
+ Element verifyRequestElem = slVerifyXMLSignatureRequest.getDocumentElement();
+ verifyRequestElem.setAttributeNS(Constants.NSURI_NAMESPACES_,
+ "xmlns:" + Constants.NSPRE_MOA_12_, Constants.NSURI_MOA_12_);
+
+ // Convert SL request into MOA request
+ verifyRequestElem = Utils.transformDeep(verifyRequestElem, prefixMap, nsTransforms, nameTransforms);
+
+ // Add trust profile ID element
+ Element trustProfileIDElem = slVerifyXMLSignatureRequest.createElementNS(
+ Constants.NSURI_MOA_12_, Constants.NSPRE_MOA_12_ + ":TrustProfileID");
+ trustProfileIDElem.appendChild(slVerifyXMLSignatureRequest.createTextNode(trustProfileID));
+ verifyRequestElem.appendChild(trustProfileIDElem);
+
+ return slVerifyXMLSignatureRequest;
+ }
+}
diff --git a/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/transformers/Utils.java b/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/transformers/Utils.java
new file mode 100644
index 000000000..d03895efe
--- /dev/null
+++ b/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/transformers/Utils.java
@@ -0,0 +1,129 @@
+/*
+ * Created on 20.11.2003
+ *
+ * (c) Stabsstelle IKT-Strategie des Bundes
+ */
+package at.gv.egovernment.moa.spss.slinterface.transformers;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.xerces.dom.DocumentImpl;
+import org.w3c.dom.Attr;
+import org.w3c.dom.Element;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.traversal.DocumentTraversal;
+import org.w3c.dom.traversal.NodeFilter;
+import org.w3c.dom.traversal.NodeIterator;
+
+import at.gv.egovernment.moa.spss.slinterface.Constants;
+
+/**
+ * @author Gregor Karlinger (mailto:gregor.karlinger@cio.gv.at)
+ */
+public class Utils
+{
+ /**
+ *
+ * @param elem
+ * @param prefixes
+ * @param namespaces
+ * @param names
+ *
+ * @pre <code>elem</code> is backed by a <code>org.apache.xerces.dom.DocumentImpl</code>.
+ */
+ public static Element transformDeep(Element elem, Map prefixes, Map namespaces, Map names)
+ {
+ // Get node iterator for element
+ DocumentTraversal docTraversal = (DocumentImpl) elem.getOwnerDocument();
+ NodeIterator elemsIt = docTraversal.createNodeIterator(elem, NodeFilter.SHOW_ELEMENT, null, true);
+
+ // Make iterator immutable
+ List elemsList = new LinkedList();
+ while (true)
+ {
+ Node currNode = elemsIt.nextNode();
+ if (currNode == null) break;
+ elemsList.add(currNode);
+ }
+
+ Iterator elemsImmIt = elemsList.iterator();
+ Element returnValue = null;
+ while (elemsImmIt.hasNext())
+ {
+ Element currElem = (Element) elemsImmIt.next();
+
+ String nsUri = currElem.getNamespaceURI();
+ String localName = currElem.getLocalName();
+ QName qName = new QName(nsUri, localName);
+
+ // Check if element is in "names"
+ QName newQName = (QName)names.get(qName);
+ if (newQName != null)
+ {
+ Element transformedElem = transformElem(currElem, newQName, prefixes);
+ if (returnValue == null) returnValue = transformedElem;
+ }
+ else
+ {
+ String newNamespace = (String)namespaces.get(nsUri);
+ if (newNamespace != null)
+ {
+ newQName = new QName(newNamespace, localName);
+ Element transformedElem = transformElem(currElem, newQName, prefixes);
+ if (returnValue == null) returnValue = transformedElem;
+ }
+ }
+ }
+ return returnValue;
+ }
+
+ /* ---------------------------------------------------------------------------------------------------- */
+
+ private static Element transformElem(Element currElem, QName newQName, Map prefixes)
+ {
+ Element newElem = currElem.getOwnerDocument().createElementNS(newQName.nsUrl_,
+ (String) prefixes.get(newQName.nsUrl_) + ":" + newQName.localName_);
+
+ currElem.getParentNode().replaceChild(newElem, currElem);
+
+ // Treat attributes of currElem
+ NamedNodeMap currAttrs = currElem.getAttributes();
+ ArrayList currAttrsList = new ArrayList(currAttrs.getLength());
+ for (int i = 0; i < currAttrs.getLength(); i++) currAttrsList.add(currAttrs.item(i));
+ for (int i = 0; i < currAttrsList.size(); i++)
+ {
+ Attr currAttr = (Attr)currAttrsList.get(i);
+ currAttr.getOwnerElement().removeAttributeNode(currAttr);
+
+ // Workaround for bad Xerces behaviour: default attributes in the xml namespace are created without
+ // the xml prefix
+ if (Constants.NSURI_XML_.equals(currAttr.getNamespaceURI()) && "space".equals(currAttr.getLocalName()))
+ {
+ newElem.setAttributeNS(Constants.NSURI_XML_, "xml:space", currAttr.getValue());
+ }
+ else
+ {
+ newElem.setAttributeNode(currAttr);
+ }
+ }
+
+ // Treat child nodes of currElem
+ NodeList currChildren = currElem.getChildNodes();
+ ArrayList currChildrenList = new ArrayList(currChildren.getLength());
+ for (int i = 0; i < currChildren.getLength(); i++) currChildrenList.add(currChildren.item(i));
+ for (int i = 0; i < currChildrenList.size(); i++)
+ {
+ Node currChild = (Node)currChildrenList.get(i);
+ currElem.removeChild(currChild);
+ newElem.appendChild(currChild);
+ }
+
+ return newElem;
+ }
+}