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 */
23package com.sun.org.apache.xml.internal.security.transforms;
24
25import java.io.IOException;
26import java.io.OutputStream;
27import javax.xml.parsers.ParserConfigurationException;
28
29import com.sun.org.apache.xml.internal.security.c14n.CanonicalizationException;
30import com.sun.org.apache.xml.internal.security.c14n.InvalidCanonicalizerException;
31import com.sun.org.apache.xml.internal.security.signature.XMLSignatureInput;
32import 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 */
41public 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}
113