1 /* 2 * Copyright (C) 2000 - 2008 Grid Systems, S.A. 3 * 4 * This program is free software; you can redistribute it and/or modify 5 * it under the terms of the GNU General Public License, version 2, as 6 * published by the Free Software Foundation. 7 * 8 * This program is distributed in the hope that it will be useful, 9 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 * GNU General Public License for more details. 12 * 13 * You should have received a copy of the GNU General Public License 14 * along with this program; if not, write to the Free Software 15 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 16 */ 17 package com.gridsystems.maven.furabuild; 18 19 import java.io.BufferedReader; 20 import java.io.File; 21 import java.io.FileReader; 22 import java.util.List; 23 import java.util.Properties; 24 25 import org.apache.maven.artifact.factory.ArtifactFactory; 26 import org.apache.maven.artifact.metadata.ArtifactMetadataSource; 27 import org.apache.maven.artifact.repository.ArtifactRepository; 28 import org.apache.maven.artifact.resolver.ArtifactResolver; 29 import org.apache.maven.plugin.AbstractMojo; 30 import org.apache.maven.plugin.MojoExecutionException; 31 import org.apache.maven.project.MavenProject; 32 import org.apache.maven.project.MavenProjectHelper; 33 import org.codehaus.plexus.util.IOUtil; 34 35 /** 36 * <p>Base class for all fura-build mojos.</p> 37 * 38 * <p>This class holds all configuration fields, in order to ensure that 39 * a single configuration can be specified for all possible goals.</p> 40 * 41 * @author Rodrigo Ruiz 42 */ 43 public abstract class AbstractFuraBuildMojo extends AbstractMojo { 44 45 /** 46 * TagVersionMojo configuration: Tag file location. 47 * 48 * @parameter expression="${project.basedir}" 49 * @required 50 * @readonly 51 */ 52 protected File location; 53 54 /** 55 * TagVersionMojo configuration: Version used if no tag.txt file is found. 56 * 57 * @parameter default-value="V_1_0_0" 58 */ 59 protected String defaultTag; 60 61 /** 62 * TagVersionMojo configuration: List of "locations" to parse. 63 * 64 * Each entry is in the form: <tt>location;prefix;tag</tt> 65 * 66 * @parameter 67 */ 68 protected List<String> locations; 69 70 /** 71 * PluginGenMojo configuration: Generated resource output directory. 72 * 73 * @parameter expression="${project.build.directory}/generated-sources" 74 * @required 75 */ 76 protected File outputDirectory; 77 78 /** 79 * Reference to the Maven project. 80 * 81 * @parameter expression="${project}" 82 * @required 83 * @readonly 84 */ 85 protected MavenProject project; 86 87 /** 88 * @component 89 */ 90 protected MavenProjectHelper projectHelper; 91 92 /** 93 * Location of the local repository. 94 * 95 * @parameter expression="${localRepository}" 96 * @readonly 97 * @required 98 */ 99 protected ArtifactRepository local; 100 101 /** 102 * Used to look up Artifacts in the remote repository. 103 * 104 * @parameter 105 * expression="${component.org.apache.maven.artifact.resolver.ArtifactResolver}" 106 * @required 107 * @readonly 108 */ 109 protected ArtifactResolver resolver; 110 111 /** 112 * Used to look up Artifacts in the remote repository. 113 * 114 * @parameter 115 * expression="${component.org.apache.maven.artifact.factory.ArtifactFactory}" 116 * @required 117 * @readonly 118 */ 119 protected ArtifactFactory factory; 120 121 /** 122 * The artifact metadata source used to resolve dependencies. 123 * 124 * @component 125 */ 126 protected ArtifactMetadataSource source; 127 128 /** 129 * <p>Processes a <tt>tag.txt</tt> location and puts the obtained information 130 * into <tt>props</tt>.</p> 131 * 132 * @param props Destination of all obtained information 133 * @param loc Folder containing the <tt>tag.txt</tt> file to process 134 * @param prefix Prefix used for generated properties 135 * @param defTag Default tag used if no <tt>tag.txt</tt> file is found 136 * @throws MojoExecutionException If an error occurs 137 */ 138 protected final void processLocation(Properties props, File loc, 139 String prefix, String defTag) throws MojoExecutionException { 140 141 getLog().debug("tag file location: " + loc); 142 getLog().debug("tag property prefix: " + prefix); 143 144 File f = new File(loc, "tag.txt"); 145 146 if (!f.isFile()) { 147 f = new File(loc.getParentFile(), "tag.txt"); 148 } 149 150 VersionParser parser = new VersionParser(); 151 152 if (f.isFile()) { 153 BufferedReader reader = null; 154 try { 155 reader = new BufferedReader(new FileReader(f)); 156 String line = reader.readLine(); 157 while (line != null) { 158 line = line.trim(); 159 if (line.length() > 0 && line.charAt(0) != '#') { 160 parser.parse(props, line, prefix); 161 return; 162 } 163 } 164 } catch (Exception e) { 165 throw new MojoExecutionException("Could not read " + f.getPath(), e); 166 } finally { 167 IOUtil.close(reader); 168 } 169 } else { 170 getLog().debug("No tag.txt found."); 171 parser.parse(props, defTag, prefix); 172 } 173 } 174 175 }