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