001 package org.kuali.student.contract.mojo; 002 003 import java.io.File; 004 import java.util.Collection; 005 import java.util.List; 006 007 import org.apache.maven.plugin.AbstractMojo; 008 import org.apache.maven.plugin.MojoExecutionException; 009 010 import org.kuali.student.contract.model.ServiceContractModel; 011 import org.kuali.student.contract.model.impl.ServiceContractModelCache; 012 import org.kuali.student.contract.model.impl.ServiceContractModelQDoxLoader; 013 import org.kuali.student.contract.model.util.HtmlContractWriter; 014 import org.kuali.student.contract.model.validation.ServiceContractModelValidator; 015 016 /** 017 * The plugin entrypoint which is used to generate the html wiki doc of the service interface. 018 * @goal kscontractdoc 019 * @phase site 020 * @requiresProject true 021 */ 022 public class KSContractDocMojo extends AbstractMojo { 023 024 /** 025 * @parameter 026 **/ 027 private List<String> sourceDirs; 028 /** 029 * @parameter expression="${htmlDirectory}" default-value="${project.build.directory}/site/services/contractdocs" 030 */ 031 private File htmlDirectory; 032 033 public File getHtmlDirectory() { 034 return htmlDirectory; 035 } 036 037 public List<String> getSourceDirs() { 038 return sourceDirs; 039 } 040 041 public void setHtmlDirectory(File htmlDirectory) { 042 this.htmlDirectory = htmlDirectory; 043 } 044 045 public void setSourceDirs(List<String> sourceDirs) { 046 this.sourceDirs = sourceDirs; 047 } 048 049 private ServiceContractModel getModel() { 050 ServiceContractModel instance = new ServiceContractModelQDoxLoader( 051 sourceDirs); 052 return new ServiceContractModelCache(instance); 053 054 } 055 056 private boolean validate(ServiceContractModel model) { 057 Collection<String> errors = new ServiceContractModelValidator(model).validate(); 058 if (errors.size() > 0) { 059 StringBuilder buf = new StringBuilder(); 060 buf.append(errors.size()).append(" errors found while validating the data."); 061 return false; 062 063 064 } 065 return true; 066 } 067 068 @Override 069 public void execute() throws MojoExecutionException { 070 ServiceContractModel model = null; 071 HtmlContractWriter writer = null; 072 getLog().info("publishing wiki contracts"); 073 model = this.getModel(); 074 this.validate(model); 075 getLog().info("publishing to = " + this.htmlDirectory.toString()); 076 writer = new HtmlContractWriter(htmlDirectory.toString(), model); 077 writer.write(); 078 079 080 } 081 }