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 }