001 /**
002 *
003 */
004 package org.kuali.student.common.mojo;
005
006 import java.util.ArrayList;
007 import java.util.Collection;
008 import java.util.LinkedHashSet;
009 import java.util.List;
010 import java.util.Set;
011
012 import org.apache.maven.plugin.AbstractMojo;
013 import org.apache.maven.project.MavenProject;
014 import org.kuali.student.contract.model.ServiceContractModel;
015 import org.kuali.student.contract.model.impl.ServiceContractModelCache;
016 import org.kuali.student.contract.model.impl.ServiceContractModelQDoxLoader;
017 import org.kuali.student.contract.model.validation.ServiceContractModelValidator;
018
019 /**
020 *
021 * The basic Kuali Student Mojo that defines things like the source lookup path.
022 *
023 * @author ocleirig
024 *
025 */
026 public abstract class AbstractKSMojo extends AbstractMojo {
027
028 /**
029 * @parameter
030 **/
031 private List<String> sourceDirs;
032
033 public AbstractKSMojo() {
034 super();
035 }
036
037 public List<String> getSourceDirs() {
038 return sourceDirs;
039 }
040
041 public void setSourceDirs(List<String> sourceDirs) {
042 this.sourceDirs = sourceDirs;
043 }
044
045 protected final ServiceContractModel getModel() {
046
047 Set<String> modelSourceDirectories = new LinkedHashSet<String>();
048
049 MavenProject project = (MavenProject) getPluginContext().get("project");
050 /*
051 * Default to the source directory that the plugin is run from.
052 */
053
054 if (sourceDirs == null) {
055 modelSourceDirectories.add(project.getBuild().getSourceDirectory());
056 } else {
057 modelSourceDirectories.addAll(sourceDirs);
058 }
059 if (modelSourceDirectories.size() == 0)
060 throw new RuntimeException("No Source Directories are defined");
061
062 ServiceContractModel instance = new ServiceContractModelQDoxLoader(
063 new ArrayList<String>(modelSourceDirectories));
064 return new ServiceContractModelCache(instance);
065 }
066
067 protected final boolean validate(ServiceContractModel model) {
068 Collection<String> errors = new ServiceContractModelValidator(model)
069 .validate();
070 if (errors.size() > 0) {
071
072 StringBuilder buf = new StringBuilder();
073 buf.append(errors.size()).append(
074 " errors found while validating the data.");
075 int cnt = 0;
076 for (String msg : errors) {
077 cnt++;
078 buf.append("\n");
079 buf.append("*error*").append(cnt).append(":").append(msg);
080 }
081
082 buf.append(errors.size()).append(
083 " errors found while validating the data.");
084 return false;
085 }
086 return true;
087 }
088
089 }