1 /*
2 * $HeadURL: https://mindtreeinsight.svn.sourceforge.net/svnroot/mindtreeinsight/releng/maven-nsis-plugin/branches/maven-nsis-plugin-0.2.0/src/main/java/com/mindtree/techworks/insight/releng/mvn/nsis/mojos/AbstractNsisMojo.java $
3 *
4 * Copyright (c) 2007 MindTree Consulting Ltd.
5 *
6 * This file is part of Insight Release Engineering Tools.
7 *
8 * Insight Release Engineering Tools is free software: you can redistribute it
9 * and/or modify it under the terms of the GNU General Public License as
10 * published by the Free Software Foundation, either version 3 of the License,
11 * or (at your option) any later version.
12 *
13 * Insight Release Engineering Tools is distributed in the hope that it will be
14 * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
16 * Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License along with
19 * Insight Release Engineering Tools. If not, see <http://www.gnu.org/licenses/>.
20 */
21 package com.mindtree.techworks.insight.releng.mvn.nsis.mojos;
22
23 import java.io.File;
24 import java.io.IOException;
25
26 import org.apache.maven.plugin.AbstractMojo;
27 import org.apache.maven.plugin.MojoExecutionException;
28 import org.apache.maven.plugin.MojoFailureException;
29 import org.apache.maven.project.MavenProject;
30 import org.apache.maven.project.MavenProjectHelper;
31
32 import com.mindtree.techworks.insight.releng.mvn.nsis.actions.MojoInfo;
33 import com.mindtree.techworks.insight.releng.mvn.nsis.actions.NsisAction;
34 import com.mindtree.techworks.insight.releng.mvn.nsis.io.ProjectFileReader;
35 import com.mindtree.techworks.insight.releng.mvn.nsis.model.NsisProject;
36
37 /**
38 * Abstract mojo to share common configuration
39 *
40 * @author <a href="mailto:bindul_bhowmik@mindtree.com">Bindul Bhowmik</a>
41 * @version $Revision: 233 $ $Date: 2009-03-27 09:44:18 -0600 (Fri, 27 Mar 2009) $
42 *
43 */
44 public abstract class AbstractNsisMojo extends AbstractMojo implements MojoInfo {
45
46 /**
47 * The project file reader to parse the xml file
48 * @component
49 */
50 private ProjectFileReader projectFileReader;
51
52 /**
53 * The NSIS project file
54 * @parameter
55 * @required
56 */
57 private File projectFile;
58
59 /**
60 * The maven project we are working in
61 *
62 * @parameter default-value="${project}"
63 * @required
64 * @readonly
65 */
66 private MavenProject project;
67
68 /**
69 * The maven project helper to attach the artifacts
70 *
71 * @component
72 */
73 private MavenProjectHelper projectHelper;
74
75 /**
76 * The temporary build directory
77 *
78 * @parameter default-value="${project.build.directory}/nsis-work"
79 */
80 private File workDirectory;
81
82 /**
83 * Nsis Project parsed
84 */
85 protected NsisProject nsisProject;
86
87 /**
88 * The action to load the defaults
89 *
90 * @component role-hint="load-default"
91 */
92 private NsisAction loadDefaultsAction;
93
94 /**
95 * Specifies the location where the makensis.exe executable is present
96 *
97 * @parameter expression="${nsisPath}"
98 */
99 private File nsisPath;
100
101 /**
102 * The NSIS executable. On windows systems this is usually
103 * <code>makensis.exe</code>, and the parameter defaults to that value. This
104 * parameter allows the mojo to be run on *nix systems where the compiled
105 * NSIS filename may not have the <i>.exe</i> extension; the user can
106 * override the executable name. Even on a windows if someone has renamed
107 * the makensis file, this parameter can be used to pass that value.
108 *
109 * @parameter expression="${nsisExec}" default-value="makensis"
110 */
111 private String nsisExec;
112
113 /* (non-Javadoc)
114 * @see org.apache.maven.plugin.Mojo#execute()
115 */
116 public void execute() throws MojoExecutionException, MojoFailureException {
117 // Get the location of the project file and parse it.
118 getLog().info("Using project file: " + projectFile.getAbsolutePath());
119
120 try {
121 getLog().debug("Parsing project file- " + projectFile.getAbsolutePath());
122 nsisProject = projectFileReader.readProject(projectFile);
123 } catch (IOException e) {
124 // Failed to parse the project xml file
125 getLog().error("Invalid Project Xml file", e);
126 throw new MojoExecutionException("Invalid Project Xml file");
127 }
128
129 // Generate the temporary directory
130 if (!workDirectory.exists()) {
131 boolean tempDirCreationResult = workDirectory.mkdirs();
132 if (!tempDirCreationResult) {
133 throw new MojoExecutionException(
134 "Unable to create temporary directory: "
135 + workDirectory.getAbsolutePath());
136 }
137 }
138
139 // Load the defaults into the nsis project
140 loadDefaultsAction.execute(this);
141
142 // Call the Mojo
143 executeNsisMojo();
144 }
145
146 /**
147 * Executes the mojo actions
148 *
149 * @see org.apache.maven.plugin.Mojo#execute()
150 */
151 public abstract void executeNsisMojo() throws MojoExecutionException, MojoFailureException;
152
153 /* (non-Javadoc)
154 * @see com.mindtree.techworks.insight.releng.mvn.nsis.actions.MojoInfo#getNsisProject()
155 */
156 public NsisProject getNsisProject() {
157 return nsisProject;
158 }
159
160 /* (non-Javadoc)
161 * @see com.mindtree.techworks.insight.releng.mvn.nsis.actions.MojoInfo#getProject()
162 */
163 public MavenProject getProject() {
164 return project;
165 }
166
167 /* (non-Javadoc)
168 * @see com.mindtree.techworks.insight.releng.mvn.nsis.actions.MojoInfo#getWorkDirectory()
169 */
170 public File getWorkDirectory() {
171 return workDirectory;
172 }
173
174 /* (non-Javadoc)
175 * @see com.mindtree.techworks.insight.releng.mvn.nsis.actions.MojoInfo#getNsisPath()
176 */
177 public File getNsisPath() {
178 return nsisPath;
179 }
180
181 /* (non-Javadoc)
182 * @see com.mindtree.techworks.insight.releng.mvn.nsis.actions.MojoInfo#getProjectHelper()
183 */
184 public MavenProjectHelper getProjectHelper() {
185 return projectHelper;
186 }
187
188 /* (non-Javadoc)
189 * @see com.mindtree.techworks.insight.releng.mvn.nsis.actions.MojoInfo#getNsisExecutable()
190 */
191 public String getNsisExecutable() {
192 return nsisExec;
193 }
194 }