All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.springframework.webflow.upgrade.WebFlowUpgrader Maven / Gradle / Ivy

There is a newer version: 3.0.0
Show newest version
/*
 * Copyright 2004-2008 the original author or authors.
 *
 * Licensed 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.springframework.webflow.upgrade;

import java.io.IOException;
import java.io.StringWriter;

import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;

import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;

/**
 * Converts Web Flow 1 flow definitions to the version 2 syntax. To use, invoke as a Java application, passing the
 * file-system path to the flow definition you wish to convert as a program argument. The converted flow definition is
 * printed to standard out.
 *
 * This class requires a XSLT transformer to run. Saxon is recommended to preserve flow definition formatting and line
 * breaks.
 *
 * @author Scott Andrews
 */
public class WebFlowUpgrader {

	private static final String XSL_NAME = "spring-webflow-1.0-to-2.0.xsl";

	private Transformer transformer;

	public static void main(String[] args) {
		if (args.length < 1) {
			System.err.println("The file path to the flow to convert is required");
			System.exit(-1);
		}
		WebFlowUpgrader converter = new WebFlowUpgrader();
		String result = converter.convert(new FileSystemResource(args[0]));
		System.out.println(result);
	}

	public String convert(Resource flowResource) {
		StringWriter output = new StringWriter();
		try {
			Source source = new StreamSource(flowResource.getInputStream());
			Result result = new StreamResult(output);
			transform(source, result);
		} catch (TransformerException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return output.toString();
	}

	public synchronized void transform(Source source, Result result) throws TransformerConfigurationException,
			TransformerException, IOException {
		getTransformer().transform(source, result);
	}

	private Transformer getTransformer() throws TransformerConfigurationException, IOException {
		if (transformer == null) {
			Resource xslResource = new ClassPathResource(XSL_NAME, getClass());
			TransformerFactory factory = TransformerFactory.newInstance();
			Source source = new StreamSource(xslResource.getInputStream());
			transformer = factory.newTransformer(source);
			// com.sun.org.apache.xml.internal.serializer.OutputPropertiesFactory.S_KEY_INDENT_AMOUNT
			transformer.setOutputProperty("{http://xml.apache.org/xalan}indent-amount", "4");
		}
		return transformer;
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy