--- /dev/null 2014-09-08 10:45:56.830930409 -0700
+++ new/test/javax/xml/jaxp/libs/org/apache/qetest/xslwrapper/TransformWrapperFactory.java 2015-01-09 15:42:28.293197493 -0800
@@ -0,0 +1,97 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ */
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.qetest.xslwrapper;
+
+import java.util.Properties;
+
+/**
+ * Factory static class for creating TransformWrappers.
+ *
+ * Includes a 'wrapperMapper' functionality to simplify specifying the 'flavor'
+ * of a wrapper to create. This is optional, but will allow a user to specify
+ * newWrapper("trax.file") and get back an instance of an
+ * org.apache.qetest.xslwrapper.TraxFileWrapper.
+ */
+public class TransformWrapperFactory {
+
+ /**
+ * Currently known list of implemented wrappers.
+ *
+ * Allows specification of a simple name for each wrapper, so clients
+ * don't necessarily have to know the FQCN or fully qualified class name of
+ * their wrapper.
+ *
+ */
+ protected final static Properties wrapperMapper = new Properties();
+
+ /**
+ * Static initializer for wrapperMapper. Attempts to load
+ * TransformWrapperFactory.properties into our wrapperMapper.
+ */
+ static {
+ // Add a default trax flavor, since it's widely used
+ // This should be overwritten below if the properties
+ // file can be loaded.
+ wrapperMapper.put("trax.systemId", "org.apache.qetest.xslwrapper.TraxSystemIdWrapper");
+ wrapperMapper.put("trax.file", "org.apache.qetest.xslwrapper.TraxFileWrapper");
+ wrapperMapper.put("trax.stream", "org.apache.qetest.xslwrapper.TraxStreamWrapper");
+ wrapperMapper.put("trax.dom", "org.apache.qetest.xslwrapper.TraxDOMWrapper");
+ wrapperMapper.put("trax.sax", "org.apache.qetest.xslwrapper.TraxSAXWrapper");
+ wrapperMapper.put("trax.localPath", "org.apache.qetest.xslwrapper.TraxLocalPathWrapper");
+ wrapperMapper.put("trax.systemId3", "org.apache.qetest.xslwrapper.TraxSystemId3Wrapper");
+ }
+
+ /**
+ * Accessor for our wrapperMapper.
+ * @return Properties block of wrapper implementations that we implicitly
+ * know about; may be null if we have none
+ */
+ public static final Properties getDescriptions() {
+ return wrapperMapper;
+ }
+
+ /**
+ * Return an instance of a TransformWrapper of requested flavor.
+ *
+ * This static factory method creates TransformWrappers for the user. Our
+ * 'wrapperMapper' functionality allows users to either specify short names
+ * listed in TransformWrapperFactory.properties (which are mapped to the
+ * appropriate FQCN's) or to directly supply the FQCN of a wrapper to
+ * create.
+ *
+ * @param flavor to create, either a wrapperMapped one or FQCN
+ *
+ * @return instance of a wrapper; will throw an IllegalArgumentException if
+ * we cannot find the asked-for wrapper class anywhere
+ */
+ public static final TransformWrapper newWrapper(String flavor) {
+ // Attempt to lookup the flavor: if found, use the value we got,
+ // otherwise default to the same value
+ String className = wrapperMapper.getProperty(flavor, flavor);
+
+ try {
+ // Allow people to use bare classnames in popular packages
+ Class clazz = Class.forName(className);
+ return (TransformWrapper) clazz.newInstance();
+ } catch (ClassNotFoundException | IllegalAccessException | InstantiationException e) {
+ throw new IllegalArgumentException("newWrapper(" + flavor + ") threw: " + e.toString());
+ }
+ }
+}