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 package com.sun.org.apache.xml.internal.security.transforms;
  24 
  25 import java.io.IOException;
  26 import java.io.OutputStream;
  27 import javax.xml.parsers.ParserConfigurationException;
  28 
  29 import com.sun.org.apache.xml.internal.security.c14n.CanonicalizationException;
  30 import com.sun.org.apache.xml.internal.security.c14n.InvalidCanonicalizerException;
  31 import com.sun.org.apache.xml.internal.security.signature.XMLSignatureInput;
  32 import org.xml.sax.SAXException;
  33 
  34 /**
  35  * Base class which all Transform algorithms extend. The common methods that
  36  * have to be overridden are the 
  37  * {@link #enginePerformTransform(XMLSignatureInput, Transform)} method.
  38  *
  39  * @author Christian Geuer-Pollmann
  40  */
  41 public abstract class TransformSpi {
  42     
  43     /**
  44      * The mega method which MUST be implemented by the Transformation Algorithm.
  45      *
  46      * @param input {@link XMLSignatureInput} as the input of transformation
  47      * @param os where to output this transformation.
  48      * @param transformObject the Transform object
  49      * @return {@link XMLSignatureInput} as the result of transformation
  50      * @throws CanonicalizationException
  51      * @throws IOException
  52      * @throws InvalidCanonicalizerException
  53      * @throws ParserConfigurationException
  54      * @throws SAXException
  55      * @throws TransformationException
  56      */
  57     protected XMLSignatureInput enginePerformTransform(
  58         XMLSignatureInput input, OutputStream os, Transform transformObject
  59     ) throws IOException, CanonicalizationException, InvalidCanonicalizerException,
  60         TransformationException, ParserConfigurationException, SAXException {
  61         throw new UnsupportedOperationException();
  62     }
  63     
  64     /**
  65      * The mega method which MUST be implemented by the Transformation Algorithm.
  66      * In order to be compatible with preexisting Transform implementations, 
  67      * by default this implementation invokes the deprecated, thread-unsafe
  68      * methods. Subclasses should override this with a thread-safe 
  69      * implementation.
  70      * 
  71      * @param input {@link XMLSignatureInput} as the input of transformation
  72      * @param transformObject the Transform object
  73      * @return {@link XMLSignatureInput} as the result of transformation
  74      * @throws CanonicalizationException
  75      * @throws IOException
  76      * @throws InvalidCanonicalizerException
  77      * @throws ParserConfigurationException
  78      * @throws SAXException
  79      * @throws TransformationException
  80      */
  81     protected XMLSignatureInput enginePerformTransform(
  82         XMLSignatureInput input, Transform transformObject
  83     ) throws IOException, CanonicalizationException, InvalidCanonicalizerException,
  84         TransformationException, ParserConfigurationException, SAXException {
  85         return enginePerformTransform(input, null, transformObject);
  86     }
  87 
  88     /**
  89      * The mega method which MUST be implemented by the Transformation Algorithm.
  90      * @param input {@link XMLSignatureInput} as the input of transformation
  91      * @return {@link XMLSignatureInput} as the result of transformation
  92      * @throws CanonicalizationException
  93      * @throws IOException
  94      * @throws InvalidCanonicalizerException
  95      * @throws ParserConfigurationException
  96      * @throws SAXException
  97      * @throws TransformationException
  98      */
  99     protected XMLSignatureInput enginePerformTransform(
 100         XMLSignatureInput input
 101     ) throws IOException, CanonicalizationException, InvalidCanonicalizerException,
 102         TransformationException, ParserConfigurationException, SAXException {
 103         return enginePerformTransform(input, null);
 104     }
 105     
 106     /**
 107      * Returns the URI representation of <code>Transformation algorithm</code>
 108      *
 109      * @return the URI representation of <code>Transformation algorithm</code>
 110      */
 111     protected abstract String engineGetURI();
 112 }