1 /*
   2  * reserved comment block
   3  * DO NOT REMOVE OR ALTER!
   4  */
   5 /**
   6  * Licensed to the Apache Software Foundation (ASF) under one
   7  * or more contributor license agreements. See the NOTICE file
   8  * distributed with this work for additional information
   9  * regarding copyright ownership. The ASF licenses this file
  10  * to you under the Apache License, Version 2.0 (the
  11  * "License"); you may not use this file except in compliance
  12  * with the License. You may obtain a copy of the License at
  13  *
  14  * http://www.apache.org/licenses/LICENSE-2.0
  15  *
  16  * Unless required by applicable law or agreed to in writing,
  17  * software distributed under the License is distributed on an
  18  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  19  * KIND, either express or implied. See the License for the
  20  * specific language governing permissions and limitations
  21  * under the License.
  22  */
  23 /*
  24  * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved.
  25  */
  26 /*
  27  * $Id: DOMXSLTTransform.java 1197150 2011-11-03 14:34:57Z coheigea $
  28  */
  29 package org.jcp.xml.dsig.internal.dom;
  30 
  31 import java.security.InvalidAlgorithmParameterException;
  32 import org.w3c.dom.Element;
  33 import org.w3c.dom.Node;
  34 
  35 import javax.xml.crypto.*;
  36 import javax.xml.crypto.dsig.spec.TransformParameterSpec;
  37 import javax.xml.crypto.dsig.spec.XSLTTransformParameterSpec;
  38 
  39 /**
  40  * DOM-based implementation of XSLT Transform.
  41  * (Uses Apache XML-Sec Transform implementation)
  42  *
  43  * @author Sean Mullan
  44  */
  45 public final class DOMXSLTTransform extends ApacheTransform {
  46  
  47     public void init(TransformParameterSpec params)
  48         throws InvalidAlgorithmParameterException {
  49         if (params == null) {
  50             throw new InvalidAlgorithmParameterException("params are required");
  51         }
  52         if (!(params instanceof XSLTTransformParameterSpec)) {
  53             throw new InvalidAlgorithmParameterException("unrecognized params");
  54         }
  55         this.params = params;
  56     }
  57 
  58     public void init(XMLStructure parent, XMLCryptoContext context)
  59         throws InvalidAlgorithmParameterException {
  60 
  61         super.init(parent, context);
  62         unmarshalParams(DOMUtils.getFirstChildElement(transformElem));
  63     }
  64 
  65     private void unmarshalParams(Element sheet) {
  66         this.params = new XSLTTransformParameterSpec
  67             (new javax.xml.crypto.dom.DOMStructure(sheet));
  68     }
  69 
  70     public void marshalParams(XMLStructure parent, XMLCryptoContext context)
  71         throws MarshalException {
  72         super.marshalParams(parent, context);
  73         XSLTTransformParameterSpec xp = 
  74             (XSLTTransformParameterSpec) getParameterSpec();
  75         Node xsltElem = 
  76             ((javax.xml.crypto.dom.DOMStructure) xp.getStylesheet()).getNode();
  77         DOMUtils.appendChild(transformElem, xsltElem);
  78     }
  79 }