| Classes in this File | Line Coverage | Branch Coverage | Complexity | ||||
| TexenTaskMojo | 
  | 
  | 1.4;1.4 | 
| 1 |  package org.apache.torque.mojo; | |
| 2 | ||
| 3 |  import java.io.File; | |
| 4 |  import java.util.Iterator; | |
| 5 |  import java.util.Map; | |
| 6 | ||
| 7 |  import org.apache.commons.configuration.ConfigurationException; | |
| 8 |  import org.apache.commons.configuration.FileConfiguration; | |
| 9 |  import org.apache.commons.configuration.PropertiesConfiguration; | |
| 10 |  import org.apache.maven.plugin.MojoExecutionException; | |
| 11 |  import org.apache.texen.ant.TexenTask; | |
| 12 | ||
| 13 |  /** | |
| 14 |   * The base class for mojos that wrap Texen Ant Tasks | |
| 15 |   */ | |
| 16 | 0 |  public abstract class TexenTaskMojo extends AntTaskMojo { | 
| 17 |          /** | |
| 18 |           * The directory where the generator output is written | |
| 19 |           *  | |
| 20 |           * @required | |
| 21 |           */ | |
| 22 |          private String outputDir; | |
| 23 | ||
| 24 |          /** | |
| 25 |           * The base path where the templates are read from, if they are not read from the classpath. | |
| 26 |           *  | |
| 27 |           * @parameter expression="${templatePath}" default-value="${basedir}/src/main/impex/templates" | |
| 28 |           */ | |
| 29 |          private String templatePath; | |
| 30 | ||
| 31 |          /** | |
| 32 |           * Whether the templates should be loaded from the classpath. | |
| 33 |           *  | |
| 34 |           * @parameter expression="${useClasspath}" default-value="true" | |
| 35 |           */ | |
| 36 | private boolean useClasspath;  | |
| 37 | ||
| 38 |          /** | |
| 39 |           * A map where all user-defined context properties can be set. Overrides all other mojo configuration settings which | |
| 40 |           * are mapped to context properties. | |
| 41 |           *  | |
| 42 |           * @parameter | |
| 43 |           */ | |
| 44 |          private Map<?, ?> userContextProperties; | |
| 45 | ||
| 46 |          /** | |
| 47 |           * The path to the generated context property file. | |
| 48 |           *  | |
| 49 |           * @required | |
| 50 |           */ | |
| 51 |          private String contextPropertiesPath; | |
| 52 | ||
| 53 |          /** | |
| 54 |           * Sets the path to Torque's output directory. | |
| 55 |           *  | |
| 56 |           * @param outputDir | |
| 57 |           *            the path to Torque's output directory. | |
| 58 |           */ | |
| 59 | public void setOutputDir(String outputDir) {  | |
| 60 | 0 |                  this.outputDir = outputDir; | 
| 61 | 0 |          } | 
| 62 | ||
| 63 |          /** | |
| 64 |           * Returns the path to Torque's output directory. | |
| 65 |           *  | |
| 66 |           * @return the path to Torque's output directory. Not null if initialized correctly. | |
| 67 |           */ | |
| 68 |          public String getOutputDir() { | |
| 69 | 0 |                  return this.outputDir; | 
| 70 | }  | |
| 71 | ||
| 72 |          /** | |
| 73 |           * Sets the path to Torque's templates, if the classpath is not used to load the templates. | |
| 74 |           *  | |
| 75 |           * @param templatePath | |
| 76 |           *            the path to Torque's templates. | |
| 77 |           */ | |
| 78 | public void setTemplatePath(String templatePath) {  | |
| 79 | 0 |                  this.templatePath = templatePath; | 
| 80 | 0 |          } | 
| 81 | ||
| 82 |          /** | |
| 83 |           * Returns the path to Torque's templates, if the classpath is not used to load the templates. | |
| 84 |           *  | |
| 85 |           * @return the path to Torque's templates. | |
| 86 |           */ | |
| 87 |          public String getTemplatePath() { | |
| 88 | 0 |                  return this.templatePath; | 
| 89 | }  | |
| 90 | ||
| 91 |          /** | |
| 92 |           * Sets whether the classpath should be used to locate the templates. | |
| 93 |           *  | |
| 94 |           * @param templatePath | |
| 95 |           *            the path to Torque's templates. | |
| 96 |           */ | |
| 97 | public void setUseClasspath(boolean useClasspath) {  | |
| 98 | 0 |                  this.useClasspath = useClasspath; | 
| 99 | 0 |          } | 
| 100 | ||
| 101 |          /** | |
| 102 |           * Returns whether the classpath is used to locate the templates. | |
| 103 |           *  | |
| 104 |           * @return true if the classpath is used to locate the templates, false otherwise | |
| 105 |           */ | |
| 106 | public boolean getUseClasspath() {  | |
| 107 | 0 |                  return this.useClasspath; | 
| 108 | }  | |
| 109 | ||
| 110 |          /** | |
| 111 |           * Sets the path to the generated property file used as Texen's context properties. | |
| 112 |           *  | |
| 113 |           * @param generatedPropertyFilePath | |
| 114 |           *            the path to the generated context properties file. | |
| 115 |           */ | |
| 116 | public void setContextPropertiesPath(String contextPropertiesPath) {  | |
| 117 | 0 |                  this.contextPropertiesPath = contextPropertiesPath; | 
| 118 | 0 |          } | 
| 119 | ||
| 120 |          /** | |
| 121 |           * Returns the path to the generated property file used as Texen's context properties. | |
| 122 |           *  | |
| 123 |           * @return the path to the generated context properties file. | |
| 124 |           */ | |
| 125 |          public String getContextPropertiesPath() { | |
| 126 | 0 |                  return this.contextPropertiesPath; | 
| 127 | }  | |
| 128 | ||
| 129 |          /** | |
| 130 |           * Sets the map which defines user-defined context properties. The settings override all other mojo configuration | |
| 131 |           * settings which are mapped to context properties. | |
| 132 |           *  | |
| 133 |           * @param contextProperties | |
| 134 |           *            the user-defined context properties. | |
| 135 |           */ | |
| 136 | public void setUserContextProperties(Map<?, ?> userContextProperties) {  | |
| 137 | 0 |                  this.userContextProperties = userContextProperties; | 
| 138 | 0 |          } | 
| 139 | ||
| 140 |          /** | |
| 141 |           * Returns the map which defines user-defined context properties. | |
| 142 |           *  | |
| 143 |           * @return the map containing user-defined context properties, or null if not set. | |
| 144 |           */ | |
| 145 |          public Map<?, ?> getUserContextProperties() { | |
| 146 | 0 |                  return userContextProperties; | 
| 147 | }  | |
| 148 | ||
| 149 |          /** | |
| 150 |           * returns the generator Task for this mojo. | |
| 151 |           *  | |
| 152 |           * @return the generator Task, not null. | |
| 153 |           */ | |
| 154 |          protected TexenTask getGeneratorTask() { | |
| 155 | 0 |                  return (TexenTask) getAntTask(); | 
| 156 | }  | |
| 157 | ||
| 158 |          /** | |
| 159 |           * Generates the context properties file for Texen. The file is written to the path contextPropertiesPath. | |
| 160 |           *  | |
| 161 |           * @throws MojoExecutionException | |
| 162 |           *             if an error occurs. | |
| 163 |           */ | |
| 164 | protected void generateContextProperties() throws MojoExecutionException {  | |
| 165 |                  try { | |
| 166 | 0 |                          FileConfiguration configuration = getMojoContextProperties(); | 
| 167 | 0 |                          if (userContextProperties != null) { | 
| 168 | 0 |                                  for (Iterator<?> contextPropertyIt = userContextProperties.entrySet().iterator(); contextPropertyIt.hasNext();) { | 
| 169 | 0 |                                          Map.Entry<?, ?> entry = (Map.Entry<?, ?>) contextPropertyIt.next(); | 
| 170 | 0 |                                          configuration.addProperty(entry.getKey().toString(), entry.getValue().toString()); | 
| 171 | 0 |                                  } | 
| 172 | }  | |
| 173 | 0 |                          configuration.save(contextPropertiesPath); | 
| 174 | 0 |                  } catch (ConfigurationException e) { | 
| 175 | 0 |                          getLog().error("Error writing temporary context properties: " + e.getMessage()); | 
| 176 | 0 |                          throw new MojoExecutionException(e.getMessage()); | 
| 177 | 0 |                  } | 
| 178 | 0 |          } | 
| 179 | ||
| 180 |          /** | |
| 181 |           * Configures the Texen task wrapped by this mojo. | |
| 182 |           */ | |
| 183 | protected void configureTask() throws MojoExecutionException {  | |
| 184 | 0 |                  super.configureTask(); | 
| 185 | 0 |                  TexenTask task = getGeneratorTask(); | 
| 186 | 0 |                  task.setContextProperties(contextPropertiesPath); | 
| 187 | 0 |                  task.setUseClasspath(useClasspath); | 
| 188 |                  try { | |
| 189 | 0 |                          task.setTemplatePath(templatePath); | 
| 190 | 0 |                  } catch (Exception e) { | 
| 191 | 0 |                          throw new MojoExecutionException("Error setting template path", e); | 
| 192 | 0 |                  } | 
| 193 | ||
| 194 | 0 |                  File outputDirectory = new File(outputDir); | 
| 195 | 0 |                  outputDirectory.mkdirs(); | 
| 196 | 0 |                  getGeneratorTask().setOutputDirectory(outputDirectory); | 
| 197 | 0 |          } | 
| 198 | ||
| 199 |          /** | |
| 200 |           * Executes the wrapped Texen task. Before this is done, the context properties file is generated and the Texen task | |
| 201 |           * is configured. | |
| 202 |           *  | |
| 203 |           * @throws MojoExecutionException | |
| 204 |           *             if an error occurs during execution. | |
| 205 |           *  | |
| 206 |           * @see org.apache.maven.plugin.Mojo#execute() | |
| 207 |           */ | |
| 208 | public void executeMojo() throws MojoExecutionException {  | |
| 209 | 0 |                  generateContextProperties(); | 
| 210 | 0 |                  super.executeMojo(); | 
| 211 | 0 |          } | 
| 212 | ||
| 213 |          /** | |
| 214 |           * Returns the context properties for the Texen task which are defined in the configuration of the child mojo. This | |
| 215 |           * method needs to be overwritten in subclasses. | |
| 216 |           *  | |
| 217 |           * @return The PropertiesConfiguration containing all context properties, not null. | |
| 218 |           */ | |
| 219 | protected abstract PropertiesConfiguration getMojoContextProperties();  | |
| 220 | }  |