001 /** 002 * Copyright 2009-2012 The Kuali Foundation 003 * 004 * Licensed under the Educational Community License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.opensource.org/licenses/ecl2.php 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 package org.codehaus.mojo.properties; 017 018 import java.io.File; 019 import java.io.IOException; 020 import java.util.ArrayList; 021 import java.util.Collections; 022 import java.util.Enumeration; 023 import java.util.List; 024 import java.util.Properties; 025 026 import org.apache.commons.io.FileUtils; 027 import org.apache.maven.plugin.MojoExecutionException; 028 import org.apache.maven.plugin.MojoFailureException; 029 030 /** 031 * Writes project properties to a file. 032 * 033 * @author <a href="mailto:zarars@gmail.com">Zarar Siddiqi</a> 034 * @version $Id: WriteProjectProperties.java 9747 2009-05-20 13:27:44Z mark $ 035 * @goal write-project-properties 036 */ 037 public class WriteProjectProperties extends AbstractWritePropertiesMojo { 038 039 /** 040 * If true, the plugin will create a second properties file with a ".sorted" extension that contains the properties 041 * sorted by name 042 * 043 * @parameter default-value="false" expression="${properties.writeSorted}" 044 */ 045 private boolean writeSorted; 046 047 @Override 048 public void execute() throws MojoExecutionException, MojoFailureException { 049 validateOutputFile(); 050 Properties properties = new Properties(); 051 properties.putAll(project.getProperties()); 052 053 Properties systemProperties = System.getProperties(); 054 055 // allow system properties to over write key/value found in maven properties 056 Enumeration<?> enumeration = systemProperties.keys(); 057 while (enumeration.hasMoreElements()) { 058 String key = (String) enumeration.nextElement(); 059 String value = systemProperties.getProperty(key); 060 if (properties.get(key) != null) { 061 properties.put(key, value); 062 } 063 064 } 065 066 getLog().info("Creating " + outputFile); 067 writeProperties(properties, outputFile); 068 if (writeSorted) { 069 createSorted(outputFile, properties); 070 } 071 } 072 073 protected void createSorted(File file, Properties properties) throws MojoExecutionException { 074 List<String> names = new ArrayList<String>(properties.stringPropertyNames()); 075 Collections.sort(names); 076 StringBuilder sb = new StringBuilder(); 077 for (String name : names) { 078 String value = properties.getProperty(name); 079 value = value.replace("\n", "\\n"); 080 value = value.replace("\t", "\\t"); 081 value = value.replace(":", "\\:"); 082 value = value.replace("#", "\\#"); 083 value = value.replace("=", "\\="); 084 sb.append(name + "=" + value + "\n"); 085 } 086 try { 087 String filename = outputFile.getAbsolutePath() + ".sorted"; 088 getLog().info("Creating " + filename); 089 FileUtils.writeByteArrayToFile(new File(filename), sb.toString().getBytes()); 090 } catch (IOException e) { 091 throw new MojoExecutionException("Error creating sorted file", e); 092 } 093 } 094 095 public boolean isWriteSorted() { 096 return writeSorted; 097 } 098 099 public void setWriteSorted(boolean writeSorted) { 100 this.writeSorted = writeSorted; 101 } 102 }