2 * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.netconf.nettyutil.handler;
10 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
11 import javax.xml.transform.OutputKeys;
12 import javax.xml.transform.Transformer;
13 import javax.xml.transform.TransformerConfigurationException;
14 import javax.xml.transform.TransformerFactory;
15 import javax.xml.transform.TransformerFactoryConfigurationError;
18 * Utility class for cached thread-local transformers. This class exists mostly for use by handlers.
20 final class ThreadLocalTransformers {
21 private static final TransformerFactory FACTORY = TransformerFactory.newInstance();
23 private static final ThreadLocal<Transformer> DEFAULT_TRANSFORMER = new ThreadLocal<Transformer>() {
25 protected Transformer initialValue() {
26 return createTransformer();
30 public void set(final Transformer value) {
31 throw new UnsupportedOperationException();
35 private static final ThreadLocal<Transformer> PRETTY_TRANSFORMER = new ThreadLocal<Transformer>() {
37 protected Transformer initialValue() {
38 final Transformer ret = createTransformer();
39 ret.setOutputProperty(OutputKeys.INDENT, "yes");
40 ret.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");
45 public void set(final Transformer value) {
46 throw new UnsupportedOperationException();
50 private ThreadLocalTransformers() {
51 throw new UnsupportedOperationException("Utility class");
55 * Get the transformer with default configuration.
57 * @return A transformer with default configuration based on the default implementation.
59 static Transformer getDefaultTransformer() {
60 return DEFAULT_TRANSFORMER.get();
64 * Get the transformer with default configuration, but with automatic indentation
65 * and the XML declaration removed.
67 * @return A transformer with human-friendly configuration.
69 static Transformer getPrettyTransformer() {
70 return PRETTY_TRANSFORMER.get();
73 @SuppressFBWarnings(value = "UPM_UNCALLED_PRIVATE_METHOD",
74 justification = "https://github.com/spotbugs/spotbugs/issues/811")
75 private static Transformer createTransformer() {
77 return FACTORY.newTransformer();
78 } catch (TransformerConfigurationException | TransformerFactoryConfigurationError e) {
79 throw new IllegalStateException("Unexpected error while instantiating a Transformer", e);