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.util.Properties; 020 021 import org.apache.maven.plugin.AbstractMojo; 022 import org.apache.maven.project.MavenProject; 023 import org.kuali.common.util.PropertyUtils; 024 025 /** 026 * @author <a href="mailto:zarars@gmail.com">Zarar Siddiqi</a> 027 * @version $Id: AbstractWritePropertiesMojo.java 8861 2009-01-21 15:35:38Z pgier $ 028 */ 029 public abstract class AbstractWritePropertiesMojo extends AbstractMojo { 030 031 /** 032 * @parameter default-value="${project}" 033 * @required 034 * @readonly 035 */ 036 MavenProject project; 037 038 /** 039 * The file that properties will be written to 040 * 041 * @parameter expression="${properties.outputFile}" default-value="${project.build.directory}/properties/project.properties"; 042 * @required 043 */ 044 File outputFile; 045 046 /** 047 * Either <code>NORMAL</code> or <code>ENVIRONMENT_VARIABLE</code>. When set to <code>ENVIRONMENT_VARIABLE</code> the keys in the 048 * properties file will all be upper case with periods replaced by underscores. 049 * 050 * @parameter expression="${properties.outputStyle}" default-value="NORMAL" 051 * @required 052 */ 053 OutputStyle outputStyle; 054 055 /** 056 * If supplied property keys are prefixed with this value before being stored. 057 * 058 * @parameter expression="${properties.prefix}" 059 */ 060 String prefix; 061 062 /** 063 * The encoding to use when storing the properties 064 * 065 * @parameter expression="${properties.encoding}" default-value="${project.build.sourceEncoding}" 066 */ 067 String encoding; 068 069 /** 070 * Anything provided here is added as a comment at the top of the properties file. 071 * 072 * @parameter expression="${properties.comment}" 073 */ 074 String comment; 075 076 protected void writeProperties(File file, Properties properties, OutputStyle outputStyle, String prefix, String encoding, String comment) { 077 Properties prefixed = PropertyUtils.getPrefixedProperties(properties, prefix); 078 Properties formatted = getFormattedProperties(prefixed, outputStyle); 079 PropertyUtils.store(formatted, file, encoding, comment); 080 } 081 082 protected Properties getFormattedProperties(Properties properties, OutputStyle style) { 083 switch (style) { 084 case NORMAL: 085 return properties; 086 case ENVIRONMENT_VARIABLE: 087 return PropertyUtils.reformatKeysAsEnvVars(properties); 088 default: 089 throw new IllegalArgumentException(outputStyle + " is unknown"); 090 } 091 } 092 093 public MavenProject getProject() { 094 return project; 095 } 096 097 public File getOutputFile() { 098 return outputFile; 099 } 100 101 public void setOutputFile(File outputFile) { 102 this.outputFile = outputFile; 103 } 104 105 public OutputStyle getOutputStyle() { 106 return outputStyle; 107 } 108 109 public void setOutputStyle(OutputStyle outputStyle) { 110 this.outputStyle = outputStyle; 111 } 112 113 public String getPrefix() { 114 return prefix; 115 } 116 117 public void setPrefix(String prefix) { 118 this.prefix = prefix; 119 } 120 121 public String getEncoding() { 122 return encoding; 123 } 124 125 public void setEncoding(String encoding) { 126 this.encoding = encoding; 127 } 128 129 public String getComment() { 130 return comment; 131 } 132 133 public void setComment(String comment) { 134 this.comment = comment; 135 } 136 }