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.controller.netconf.nettyutil.handler;
10 import javax.xml.transform.OutputKeys;
11 import javax.xml.transform.Transformer;
12 import javax.xml.transform.TransformerConfigurationException;
13 import javax.xml.transform.TransformerFactory;
14 import javax.xml.transform.TransformerFactoryConfigurationError;
17 * Utility class for cached thread-local transformers. This class exists mostly for use by handlers.
19 final class ThreadLocalTransformers {
20 private static final TransformerFactory FACTORY = TransformerFactory.newInstance();
22 private static final ThreadLocal<Transformer> DEFAULT_TRANSFORMER = new ThreadLocal<Transformer>() {
24 protected Transformer initialValue() {
26 return FACTORY.newTransformer();
27 } catch (TransformerConfigurationException | TransformerFactoryConfigurationError e) {
28 throw new IllegalStateException("Unexpected error while instantiating a Transformer", e);
33 public void set(final Transformer value) {
34 throw new UnsupportedOperationException();
38 private static final ThreadLocal<Transformer> PRETTY_TRANSFORMER = new ThreadLocal<Transformer>() {
40 protected Transformer initialValue() {
41 final Transformer ret;
44 ret = FACTORY.newTransformer();
45 } catch (TransformerConfigurationException | TransformerFactoryConfigurationError e) {
46 throw new IllegalStateException("Unexpected error while instantiating a Transformer", e);
49 ret.setOutputProperty(OutputKeys.INDENT, "yes");
50 ret.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
55 public void set(final Transformer value) {
56 throw new UnsupportedOperationException();
60 private ThreadLocalTransformers() {
61 throw new UnsupportedOperationException("Utility class");
65 * Get the transformer with default configuration.
67 * @return A transformer with default configuration based on the default implementation.
69 public static Transformer getDefaultTransformer() {
70 return DEFAULT_TRANSFORMER.get();
74 * Get the transformer with default configuration, but with automatic indentation
75 * and the XML declaration removed.
77 * @return A transformer with human-friendly configuration.
79 public static Transformer getPrettyTransformer() {
80 return PRETTY_TRANSFORMER.get();