001 package org.kuali.student.datadictionary.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.validation.ServiceContractModelValidator; 014 import org.kuali.student.contract.writer.service.EachMethodServiceWriter; 015 016 /** 017 * The plugin entrypoint which is used to generate a java interface file for each 018 * service method in the source files based on the contract definition 019 * @phase generate-sources 020 * @goal kseachmethodservicegenerator 021 */ 022 public class EachMethodServiceGeneratorrMojo extends AbstractMojo { 023 024 /** 025 * @parameter 026 **/ 027 private List<String> sourceDirs; 028 /** 029 * @parameter expression="${outputDirectory}" default-value="${project.build.directory}/generated-sources" 030 */ 031 private File outputDirectory; 032 033 public File getOutputDirectory() { 034 return outputDirectory; 035 } 036 037 public List<String> getSourceDirs() { 038 return sourceDirs; 039 } 040 041 public void setOutputDirectory(File htmlDirectory) { 042 this.outputDirectory = htmlDirectory; 043 } 044 045 public void setSourceDirs(List<String> sourceDirs) { 046 this.sourceDirs = sourceDirs; 047 } 048 /** 049 * @parameter expression="${rootPackage}" default-value="org.kuali.student.enrollment" 050 */ 051 private String rootPackage; 052 053 public String getRootPackage() { 054 return rootPackage; 055 } 056 057 public void setRootPackage(String rootPackage) { 058 this.rootPackage = rootPackage; 059 } 060 061 private ServiceContractModel getModel() { 062 ServiceContractModel instance = new ServiceContractModelQDoxLoader( 063 sourceDirs); 064 return new ServiceContractModelCache(instance); 065 } 066 067 private boolean validate(ServiceContractModel model) { 068 Collection<String> errors = new ServiceContractModelValidator(model).validate(); 069 if (errors.size() > 0) { 070 StringBuilder buf = new StringBuilder(); 071 buf.append(errors.size()).append(" errors found while validating the data."); 072 return false; 073 } 074 return true; 075 } 076 077 @Override 078 public void execute() throws MojoExecutionException { 079 getLog().info("generating separate java interface files for each method in the service contracts"); 080 ServiceContractModel model = this.getModel(); 081 this.validate(model); 082 if (!outputDirectory.exists()) { 083 if (!outputDirectory.mkdirs()) { 084 // throw new MojoExecutionException("Could not create directory " 085 throw new IllegalArgumentException("Could not create directory " 086 + this.outputDirectory.getPath()); 087 } 088 } 089 String targetDirectory = this.outputDirectory.toString(); 090 EachMethodServiceWriter instance = 091 new EachMethodServiceWriter(model, 092 targetDirectory, 093 rootPackage, 094 null); 095 instance.write(); 096 097 } 098 }