<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.googlecode.catch-exception</groupId>
  <artifactId>catch-exception-parent</artifactId>
  <version>1.2.0</version>
  <packaging>pom</packaging>
  <description>Catch and verify exceptions - parent module</description>
  <url>http://code.google.com/p/catch-exception/</url>

  <!--  required by Sonatype OOS hosting -->
  <parent>
    <groupId>org.sonatype.oss</groupId>
    <artifactId>oss-parent</artifactId>
    <version>7</version>
  </parent>

  <properties>
    <!-- Prevents "[WARNING] Using platform encoding (Cp1252 actually) to copy filtered 
      resources, i.e. build is platform dependent! See http://maven.apache.org/general.html#encoding-warning -->
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

    <!-- successfully tested versions: 1.5.1, 1.5, 1.4.12, 1.4.11, 1.4.10, 1.4.9, 1.4.8, 1.4.7, 1.4.6 -->
    <powermock.version>1.5.1</powermock.version>
    
    <spring.version>3.2.0.RELEASE</spring.version>
    
    <!-- used by maven-license-plugin -->
    <project.inceptionYear>2011</project.inceptionYear>
    
    <!-- needed for javadoc, license and so on -->
    <catchException.parent>${project.basedir}</catchException.parent>

  </properties>
  
  <modules>
    <module>catch-exception</module>
    <module>catch-throwable</module>
  </modules>


  <dependencies>
  
  </dependencies>


  <build>
    <!--
      A. How to release?
      According to Section '7b. Stage Existing Artifacts' in 
      <a href="https://docs.sonatype.org/display/Repository/Sonatype+OSS+Maven+Repository+Usage+Guide#SonatypeOSSMavenRepositoryUsageGuide-7b.StageExistingArtifacts">
      Sonatype OSS Maven Repository Usage Guide</a> I have chosen the
      following way:
      
      1. Set release version in pom.xml, i.e. remove the -SNAPSHOT suffix.
      2. catch-exception>mvn clean source:jar javadoc:jar install -Psign
      This creates, signs ands installs the artifacts in the local repository.
      3. %USER_NAME%\.m2\repository\com\googlecode\catch-exception\catch-exception\1.0.4\>jar -cvf bundle.jar catch-exception-1.0.4.pom catch-exception-1.0.4.pom.asc catch-exception-1.0.4.jar catch-exception-1.0.4.jar.asc catch-exception-1.0.4-javadoc.jar catch-exception-1.0.4-javadoc.jar.asc catch-exception-1.0.4-sources.jar catch-exception-1.0.4-sources.jar.asc
      This creates a bundle (zip) that contains all artifacts.
      4. Then go to Nexus UI ( https://oss.sonatype.org/ ), click Staging Upload in the left column [etc.], see the last paragraph of section 7b.
      5. Follow the steps described in section '8. Release It'.
      6. Increase the version in pom.xml and add a -SNAPSHOT suffix.
      7. Commit.

      B. How to add a new download to the google page?
      1. Rename bundle.jar to catch-exception-1.0.4.zip.
      2. Upload at google code using summary "pom, classes, sources and javadocs"
      Easy. It's google.   
   
      C. How to update the javadoc pages?
      
      1. Run mvn site
      2. Copy catch-exception/target/site/apidocs to catch-exception.javadoc/. 
      3. Commit.
      
       -->
    <plugins>

      <!-- define the target JVM -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.1</version>
        <configuration>
          <source>1.6</source>
          <target>1.6</target>
        </configuration>
      </plugin>
        
        
      <!-- http://maven.apache.org/plugins/maven-javadoc-plugin/usage.html
         mvn javadoc:jar -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
        <version>2.8</version>
        <configuration>
          <show>private</show>
          <use>true</use>
          <overview>${catchException.parent}/src/main/javadoc/overview/overview.html</overview>
          <linksource>true</linksource>
          <docfilessubdirs>true</docfilessubdirs>
        </configuration>
        <!--  http://maven.apache.org/plugins/maven-javadoc-plugin/examples/aggregate.html#Using_The_aggregate_Goals 
          # generate the aggregated javadoc manually:
          mvn site
         -->
        <executions>
          <execution>
            <id>aggregate</id>
            <goals>
              <goal>aggregate</goal>
            </goals>
            <phase>site</phase>
            <!-- Specific configuration for the aggregate report -->
            <configuration>
              <show>private</show>
              <use>true</use>
              <overview>${basedir}/src/main/javadoc/overview/overview.html</overview>
              <linksource>true</linksource>
              <docfilessubdirs>true</docfilessubdirs>
              <footer xml:space="preserve"><![CDATA[
     
<script type='text/javascript'>
/* TODO move this code to a property file or something similar */

/**
  * @author http://www.javascriptkit.com/javatutors/loadjavascriptcss.shtml
  */
function loadjscssfile(filename, filetype){
 if (filetype=='js') { /* if filename is a external JavaScript file */
   var fileref=document.createElement('script');
   fileref.setAttribute('type','text/javascript');
   fileref.setAttribute('src', filename);
 }
 else if (filetype=='css') { /* if filename is an external CSS file */
   var fileref=document.createElement('link');
   fileref.setAttribute('rel', 'stylesheet');
   fileref.setAttribute('type', 'text/css');
   fileref.setAttribute('href', filename);
 }
 if (typeof fileref!='undefined') {
   document.getElementsByTagName('head')[0].appendChild(fileref);
 }
}

function pathToRoot(belowroot, url) {
   var result = new RegExp('(.*[\\/])' + belowroot + '[\\/].*').exec(url);
   if (result == null) {
     return null; /* nothing found */
   }
   else {
     return RegExp.$1;
   }
}

/* prettyPrint(); does not work (as the code is not loaded yet?) */
var tryToRunPrettyPrint = 5;
function runPrettyPrint() {
  if (typeof prettyPrint == 'function') {
    if (console) {
       console.log("prettyPrint is available and will be started now");
    }
    prettyPrint();
    if (console) {
        console.log("prettyPrint has been successfully applied");
    }
  }
  else if (tryToRunPrettyPrint > 0) {
    tryToRunPrettyPrint = tryToRunPrettyPrint - 1;
    if (console) {
        console.log("we sleep a bit before we try to run prettyPrint again");
    }
    window.setTimeout('runPrettyPrint();',500);
  }
}

/* test: alert('roopath test:' + pathToRoot('org', 'http://apache.org/doc/org/2011/org/apache/xmlbeans/org-package.html')); */
var rootpath = pathToRoot('com', '' + window.location.href );

if (rootpath != null) {
  /* var rootpath =  '../../../'; */
  /* such an alert breaks the code. why? alert('rootpath: ' + rootpath); */
  loadjscssfile(rootpath + 'doc-files/google-code-prettify/prettify.js', 'js');
  loadjscssfile(rootpath + 'doc-files/google-code-prettify/prettify.css', 'css');

  window.setTimeout('runPrettyPrint();',500);
}
else {
    if (console) {
        console.log("no rootpath found by analysing " + window.location.href);
    }
}
</script>     
      ]]>
              </footer><!-- footer or bottom makes no difference for javascript -->
            </configuration>
          </execution>
        </executions>
      </plugin>


       <!-- 
         add headers if "maven verify" fails (due to license:check) 
        mvn license:format   -->
        <plugin>
          <groupId>com.google.code.maven-license-plugin</groupId>
          <artifactId>maven-license-plugin</artifactId>
          <version>1.4.0</version>
          <configuration>
            <header>${catchException.parent}/src/etc/header.txt</header>
            <includes>
              <include>src/**</include>
            </includes>
            <excludes>
              <!-- exclude third party code -->
              <exclude>src/main/javadoc/doc-files/google-code-prettify/**</exclude>
              <!-- automatically excluded :-) <exclude>src/etc/header.txt</exclude>  -->
            </excludes>
            <useDefaultExcludes>true</useDefaultExcludes>
            <useDefaultMapping>true</useDefaultMapping>
            <properties>
              <year>${project.inceptionYear}</year>
              <email>rwoo@gmx.de</email>
            </properties>
            <encoding>UTF-8</encoding>
          </configuration>
          <executions>
            <execution>
              <goals>
                <goal>check</goal>
              </goals>
            </execution>
          </executions>
        </plugin>

     </plugins>


    <pluginManagement>
    
      <plugins>
      
        <!-- 
          The phase "package" should create the test.jar as well 
          so that the artifact can be signed during the phase 'verify'.
         -->
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-jar-plugin</artifactId>
          <version>2.3.1</version>
          <executions>
            <execution>
              <goals>
                <goal>test-jar</goal>
              </goals>
            </execution>
          </executions>
        </plugin>


        <!-- 
         mvn source:jar 
         The phase "package" should create the sources.jar and test-sources.jar as well 
         so that the artifact can be signed during the phase 'verify'.
         -->
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-source-plugin</artifactId>
          <version>2.2.1</version>
          <executions>
            <execution>
              <id>attach-sources</id>
              <phase>package</phase>
              <goals>
                <goal>jar-no-fork</goal>
                <goal>test-jar-no-fork</goal>
              </goals>
            </execution>
          </executions>
        </plugin>


      </plugins>
    
    </pluginManagement>


  </build>
  

  <licenses>
    <license>
      <name>Apache 2</name>
      <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
      <distribution>repo</distribution>
      <comments>A business-friendly OSS license</comments>
    </license>
  </licenses>

  <developers>
    <developer>
      <id>rwoo</id>
      <name>Rod Woo</name>
      <email>rwoo@gmx.de</email>
    </developer>
  </developers>

  <scm>
    <connection>scm:hg:https://code.google.com/p/catch-exception/</connection>
    <developerConnection>scm:hg:https://code.google.com/p/catch-exception/</developerConnection>
    <url>http://code.google.com/p/catch-exception/source/browse/</url>
  </scm>

  <profiles>
  
    <!-- automatic signing of created artifacts (at least the classes jar) -->
    <profile>
        <id>sign</id>
        <build>
            <plugins>
            
                <!-- the last thing to do during the verify phase: -->
            
                <!-- automatic signing of created artifacts (at least the classes jar)
                   https://docs.sonatype.org/display/Repository/How+To+Generate+PGP+Signatures+With+Maven
                   Then simply deploy your artifacts use normal maven command:
                   $ mvn clean deploy -Dgpg.passphrase=yourpassphrase
                   If you don’t specify the passphrase, you will be prompted for one.
                    -->
                <plugin>
                  <groupId>org.apache.maven.plugins</groupId>
                  <artifactId>maven-gpg-plugin</artifactId>
                  <version>1.4</version>
                  <executions>
                    <execution>
                      <id>sign-artifacts</id>
                      <phase>verify</phase>
                      <goals>
                        <goal>sign</goal>
                      </goals>
                    </execution>
                  </executions>
                </plugin>
            
            </plugins>
        
        </build>
    </profile>
  
  </profiles>
  
</project>