Java tutorial
/* * 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.axis2.util; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.PrintStream; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.Properties; /** * Tidies up the java source code using Jalopy. * This is used by both ADB and Codegen hence needs to be in the * commons rather than a specific module */ public class PrettyPrinter { private static final Log log = LogFactory.getLog(PrettyPrinter.class); /** * Pretty prints contents of the java source file. * * @param file */ public static void prettify(File file) { // If the user has set "axis2.jalopy=false" on the system property, // then just return back to caller String property = System.getProperty("axis2.jalopy"); if ((property == null) || !JavaUtils.isTrueExplicitly(property)) { return; } PrintStream backupOutputStream = System.out; PrintStream backupErrorStream = System.err; System.setOut(new PrintStream(new ByteArrayOutputStream())); System.setErr(new PrintStream(new ByteArrayOutputStream())); try { Class clazzConfigurator = Loader.loadClass("org.apache.log4j.PropertyConfigurator"); Method configure = clazzConfigurator.getMethod("configure", new Class[] { Properties.class }); Properties properties = new Properties(); properties.setProperty("log4j.logger.de.hunsicker.jalopy.io", System.getProperty("log4j.logger.de.hunsicker.jalopy.io", "FATAL")); configure.invoke(null, new Object[] { properties }); // Create an instance of the Jalopy bean Class clazz = Loader.loadClass("de.hunsicker.jalopy.Jalopy"); Object prettifier = clazz.newInstance(); // Set the input file Method input = clazz.getMethod("setInput", new Class[] { File.class }); input.invoke(prettifier, new Object[] { file }); // Set the output file Method output = clazz.getMethod("setOutput", new Class[] { File.class }); output.invoke(prettifier, new Object[] { file }); Class clazz2 = Loader.loadClass("de.hunsicker.jalopy.storage.Convention"); Method instance = clazz2.getMethod("getInstance", new Class[] {}); Object settings = instance.invoke(null, new Object[] {}); Class clazz3 = Loader.loadClass("de.hunsicker.jalopy.storage.ConventionKeys"); Field field = clazz3.getField("COMMENT_FORMAT_MULTI_LINE"); Object key = field.get(null); Method put = clazz2.getMethod("put", new Class[] { key.getClass(), String.class }); put.invoke(settings, new Object[] { key, "true" }); // format and overwrite the given input file Method format = clazz.getMethod("format", new Class[] {}); format.invoke(prettifier, new Object[] {}); log.debug("Pretty printed file : " + file); } catch (ClassNotFoundException e) { log.debug("Jalopy/Log4j not found - unable to pretty print " + file); } catch (Exception e) { log.warn("Exception occurred while trying to pretty print file " + file, e); } catch (Throwable t) { log.debug("Exception occurred while trying to pretty print file " + file, t); } finally { System.setOut(backupOutputStream); System.setErr(backupErrorStream); } } }