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    }