Coverage Report - org.apache.torque.mojo.AbstractMorphSingleMojo
 
Classes in this File Line Coverage Branch Coverage Complexity
AbstractMorphSingleMojo
0%
0/33
0%
0/10
2.25
 
 1  
 package org.apache.torque.mojo;
 2  
 
 3  
 import java.io.File;
 4  
 import java.io.FileInputStream;
 5  
 import java.io.FileOutputStream;
 6  
 import java.io.IOException;
 7  
 
 8  
 import org.apache.maven.plugin.MojoExecutionException;
 9  
 import org.apache.torque.mojo.morph.MorphRequest;
 10  
 import org.apache.torque.mojo.morph.Morpher;
 11  
 import org.codehaus.plexus.util.FileUtils;
 12  
 
 13  
 /**
 14  
  * Common logic for morphing one file to another file
 15  
  */
 16  0
 public abstract class AbstractMorphSingleMojo extends BaseMojo {
 17  
 
 18  
     /**
 19  
      * The file that will contain the morphed contents
 20  
      */
 21  
     private File newFile;
 22  
 
 23  
     /**
 24  
      * The file containing the contents to be morphed
 25  
      */
 26  
     private File oldFile;
 27  
 
 28  
     /**
 29  
      * Add logic to the basic skip() method for skipping based on a morph being needed
 30  
      */
 31  
     @Override
 32  
     protected boolean skipMojo() {
 33  
         // We may be skipping based on packaging of type 'pom'
 34  0
         if (super.skipMojo()) {
 35  0
             return true;
 36  
         }
 37  
 
 38  
         // If a morph is needed, we can't skip
 39  0
         boolean morphNeeded = isMorphNeeded();
 40  0
         if (morphNeeded) {
 41  0
             return false;
 42  
         } else {
 43  0
             getLog().info("Skipping morph.  Nothing has changed");
 44  0
             return true;
 45  
         }
 46  
     }
 47  
 
 48  
     protected boolean isMorphNeeded() {
 49  
         // The file they asked to morph does not exist
 50  0
         if (!getOldFile().exists()) {
 51  0
             getLog().debug("file:" + getOldFile().getAbsolutePath() + " does not exist");
 52  0
             return false;
 53  
         }
 54  
 
 55  
         // The new file does not exist, we need to morph
 56  0
         if (!getNewFile().exists()) {
 57  0
             return true;
 58  
         }
 59  
 
 60  
         // Extract the last modified timestamps
 61  0
         long oldLastModified = getOldFile().lastModified();
 62  0
         long newLastModified = getNewFile().lastModified();
 63  
 
 64  
         // If old file has been modified since the new file was last modified,
 65  
         // we need to morph
 66  0
         return oldLastModified > newLastModified;
 67  
     }
 68  
 
 69  
     protected abstract Morpher getMorpher(MorphRequest request, String artifactId);
 70  
 
 71  
     @Override
 72  
     protected void executeMojo() throws MojoExecutionException {
 73  
         try {
 74  0
             getLog().info("From: " + oldFile.getAbsolutePath());
 75  0
             getLog().info("  To: " + newFile.getAbsolutePath());
 76  0
             FileUtils.forceMkdir(new File(FileUtils.getPath(newFile.getAbsolutePath())));
 77  0
             MorphRequest request = new MorphRequest(oldFile.getName(), new FileInputStream(oldFile),
 78  
                     new FileOutputStream(newFile));
 79  0
             request.setEncoding(getEncoding());
 80  0
             Morpher morpher = getMorpher(request, getProject().getArtifactId());
 81  0
             morpher.executeMorph();
 82  0
         } catch (IOException e) {
 83  0
             throw new MojoExecutionException("Unexpected error while attempting to morph " + oldFile.getAbsolutePath(),
 84  
                     e);
 85  0
         }
 86  0
     }
 87  
 
 88  
     public File getNewFile() {
 89  0
         return newFile;
 90  
     }
 91  
 
 92  
     public void setNewFile(final File newFile) {
 93  0
         this.newFile = newFile;
 94  0
     }
 95  
 
 96  
     public File getOldFile() {
 97  0
         return oldFile;
 98  
     }
 99  
 
 100  
     public void setOldFile(final File oldFile) {
 101  0
         this.oldFile = oldFile;
 102  0
     }
 103  
 }