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.util.ArrayList; 019 import java.util.List; 020 021 import org.apache.commons.lang.StringUtils; 022 import org.apache.maven.plugin.AbstractMojo; 023 import org.apache.maven.plugin.MojoExecutionException; 024 import org.apache.maven.project.MavenProject; 025 026 /** 027 * Find a GAV specific property value using GroupId+ArtifactId+Version. The logic goes from most specific to least 028 * specific. If there is a value for the full GAV, that value is used. Otherwise, a value for GroupId + ArtifactId, or 029 * finally just GroupId. If no value is found, the defaultValue is used. 030 * 031 * A new project property with .gav appended is set if a value is found. 032 * 033 * @goal get-gav-property 034 */ 035 public class GetGAVProperty extends AbstractMojo { 036 037 /** 038 * @parameter default-value="${project}" 039 * @required 040 * @readonly 041 */ 042 private MavenProject project; 043 044 /** 045 * @parameter expression="${properties.groupId}" default-value="${project.groupId}" 046 */ 047 private String groupId; 048 049 /** 050 * @parameter expression="${properties.artifactId}" default-value="${project.artifactId}" 051 */ 052 private String artifactId; 053 054 /** 055 * @parameter expression="${properties.version}" default-value="${project.version}" 056 */ 057 private String version; 058 059 /** 060 * @parameter expression="${properties.property}" 061 */ 062 private String property; 063 064 /** 065 * @parameter expression="${properties.defaultValue}" 066 */ 067 private String defaultValue; 068 069 /** 070 * @parameter expression="${properties.suffix}" default-value="gav" 071 */ 072 private String suffix; 073 074 @Override 075 public void execute() throws MojoExecutionException { 076 List<String> keys = getKeys(); 077 String value = getValue(project, keys); 078 if (StringUtils.isBlank(value)) { 079 getLog().info("No value for '" + property + "'"); 080 } else { 081 String key = property + "." + suffix; 082 getLog().info("Setting " + key + "=" + value); 083 project.getProperties().setProperty(key, value); 084 } 085 } 086 087 protected String getValue(MavenProject project, List<String> keys) { 088 for (String key : keys) { 089 String value = getProperty(key); 090 if (!StringUtils.isBlank(value)) { 091 return value; 092 } 093 } 094 return defaultValue; 095 } 096 097 protected List<String> getKeys() { 098 List<String> keys = new ArrayList<String>(); 099 keys.add(property + "." + groupId + "." + artifactId + "." + version); 100 keys.add(property + "." + groupId + "." + artifactId); 101 keys.add(property + "." + groupId); 102 keys.add(property); 103 return keys; 104 } 105 106 protected String getProperty(String key) { 107 String sys = System.getProperty(key); 108 String proj = project.getProperties().getProperty(key); 109 if (!StringUtils.isBlank(sys)) { 110 return sys; 111 } else { 112 return proj; 113 } 114 115 } 116 117 public MavenProject getProject() { 118 return project; 119 } 120 121 public String getGroupId() { 122 return groupId; 123 } 124 125 public void setGroupId(String groupId) { 126 this.groupId = groupId; 127 } 128 129 public String getArtifactId() { 130 return artifactId; 131 } 132 133 public void setArtifactId(String artifactId) { 134 this.artifactId = artifactId; 135 } 136 137 public String getVersion() { 138 return version; 139 } 140 141 public void setVersion(String version) { 142 this.version = version; 143 } 144 145 public String getProperty() { 146 return property; 147 } 148 149 public void setProperty(String property) { 150 this.property = property; 151 } 152 153 public String getDefaultValue() { 154 return defaultValue; 155 } 156 157 public void setDefaultValue(String defaultValue) { 158 this.defaultValue = defaultValue; 159 } 160 161 public void setProject(MavenProject project) { 162 this.project = project; 163 } 164 165 public String getSuffix() { 166 return suffix; 167 } 168 169 public void setSuffix(String suffix) { 170 this.suffix = suffix; 171 } 172 173 }