Clover Coverage Report - KS Contract Documentation Generator 0.0.1-SNAPSHOT
Coverage timestamp: Wed Dec 31 1969 19:00:00 EST
../../../../../img/srcFileCovDistChart0.png 0% of files have more coverage
52   171   16   6.5
10   112   0.31   8
8     2  
1    
 
  KSDictionaryDocMojo       Line # 45 52 0% 16 70 0% 0.0
 
No Tests
 
1    /*
2    * Copyright 2011 The Kuali Foundation
3    *
4    * Licensed under the Educational Community License, Version 1.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    * http://www.opensource.org/licenses/ecl1.php
9    *
10    * Unless required by applicable law or agreed to in writing, software
11    * distributed under the License is distributed on an "AS IS" BASIS,
12    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13    * See the License for the specific language governing permissions and
14    * limitations under the License.
15    */
16    package org.kuali.student.datadictionary.mojo;
17   
18    import java.io.File;
19    import java.io.FileNotFoundException;
20    import java.io.FileOutputStream;
21    import java.io.OutputStream;
22    import java.io.PrintStream;
23    import java.net.MalformedURLException;
24    import java.net.URL;
25    import java.net.URLClassLoader;
26    import java.util.ArrayList;
27    import java.util.LinkedHashSet;
28    import java.util.List;
29    import java.util.Map;
30    import java.util.Set;
31    import org.apache.maven.artifact.DependencyResolutionRequiredException;
32    import org.apache.maven.plugin.AbstractMojo;
33    import org.apache.maven.plugin.MojoExecutionException;
34    import org.apache.maven.project.MavenProject;
35    import org.kuali.rice.krad.datadictionary.DataObjectEntry;
36    import org.kuali.student.datadictionary.util.DictionaryFormatter;
37    import org.kuali.student.datadictionary.util.DictionaryTesterHelper;
38   
39    /**
40    * Mojo for generating a formatted view of the data dictionary
41    * @goal ksdictionarydoc
42    * @phase site
43    * @requiresDependencyResolution test
44    */
 
45    public class KSDictionaryDocMojo extends AbstractMojo {
46   
47    /**
48    * @parameter expression="${project}"
49    * @required
50    * @readonly
51    */
52    private MavenProject project;
53    /**
54    * @parameter
55    **/
56    private List<String> inputFiles;
57    /**
58    * @parameter
59    **/
60    private List<String> supportFiles = new ArrayList();
61    /**
62    * @parameter expression="${htmlDirectory}" default-value="${project.build.directory}/site/services/dictionarydocs"
63    */
64    private File htmlDirectory;
65   
 
66  0 toggle public void setHtmlDirectory(File htmlDirectory) {
67  0 this.htmlDirectory = htmlDirectory;
68    }
69   
 
70  0 toggle public File getHtmlDirectory() {
71  0 return htmlDirectory;
72    }
73   
 
74  0 toggle public List<String> getInputFiles() {
75  0 return inputFiles;
76    }
77   
 
78  0 toggle public MavenProject getProject() {
79  0 return project;
80    }
81   
 
82  0 toggle public void setInputFiles(List<String> inputFiles) {
83  0 this.inputFiles = inputFiles;
84    }
85   
 
86  0 toggle public List<String> getSupportFiles() {
87  0 return supportFiles;
88    }
89   
 
90  0 toggle public void setSupportFiles(List<String> supportFiles) {
91  0 this.supportFiles = supportFiles;
92    }
93   
 
94  0 toggle @Override
95    public void execute()
96    throws MojoExecutionException {
97  0 this.getLog().info("generating dictionary documentation");
98    // add the current projects classpath to the plugin so the springbean
99    // loader can find the xml files and lasses that it needs to can be run
100    // against the current project's files
101  0 if (project != null) {
102  0 this.getLog().info("adding current project's classpath to plugin class loader");
103  0 List runtimeClasspathElements;
104  0 try {
105  0 runtimeClasspathElements = project.getRuntimeClasspathElements();
106    } catch (DependencyResolutionRequiredException ex) {
107  0 throw new MojoExecutionException("got error", ex);
108    }
109  0 URL[] runtimeUrls = new URL[runtimeClasspathElements.size()];
110  0 for (int i = 0; i < runtimeClasspathElements.size(); i++) {
111  0 String element = (String) runtimeClasspathElements.get(i);
112  0 try {
113  0 runtimeUrls[i] = new File(element).toURI().toURL();
114    } catch (MalformedURLException ex) {
115  0 throw new MojoExecutionException(element, ex);
116    }
117    }
118  0 URLClassLoader newLoader = new URLClassLoader(runtimeUrls,
119    Thread.currentThread().getContextClassLoader());
120  0 Thread.currentThread().setContextClassLoader(newLoader);
121    }
122   
123   
124    //System.out.println ("Writing java class: " + fileName + " to " + dir.getAbsolutePath ());
125  0 if (!htmlDirectory.exists()) {
126  0 if (!htmlDirectory.mkdirs()) {
127    // throw new MojoExecutionException("Could not create directory "
128  0 throw new IllegalArgumentException("Could not create directory "
129    + this.htmlDirectory.getPath());
130    }
131    }
132   
133  0 Set<String> inpFiles = new LinkedHashSet(this.inputFiles.size());
134  0 for (String dictFileName : this.inputFiles) {
135  0 if (dictFileName.endsWith(".xml")) {
136  0 inpFiles.add(dictFileName);
137    }
138    }
139   
140  0 Set<String> configFiles = new LinkedHashSet(this.inputFiles.size() + supportFiles.size());
141  0 configFiles.addAll(inpFiles);
142  0 configFiles.addAll(this.supportFiles);
143   
144  0 String outputDir = this.htmlDirectory.getAbsolutePath();
145  0 DictionaryTesterHelper tester = new DictionaryTesterHelper(outputDir, configFiles);
146  0 List<String> outputFileNames = tester.doTest();
147   
148    // write out the index file
149  0 String indexFileName = this.htmlDirectory.getPath() + "/" + "index.html";
150  0 File indexFile = new File(indexFileName);
151  0 OutputStream outputStream;
152  0 try {
153  0 outputStream = new FileOutputStream(indexFile, false);
154    } catch (FileNotFoundException ex) {
155    // throw new MojoExecutionException(indexFileName, ex);
156  0 throw new IllegalArgumentException(indexFileName, ex);
157    }
158  0 PrintStream out = new PrintStream(outputStream);
159  0 DictionaryFormatter.writeHeader(out, "Data Dictionary Index");
160  0 out.println("<h1>Data Dictionary Index</h1>");
161  0 String endUL = "";
162  0 Map<String, DataObjectEntry> beansOfType = tester.getDataObjectEntryBeans();
163  0 for (String beanId : beansOfType.keySet()) {
164  0 String outputFileName = beanId + ".html";
165  0 out.println("<li><a href=\"" + outputFileName + "\">" + beanId + "</a>");
166    }
167  0 out.println("</ul>");
168  0 DictionaryFormatter.writeFooter(out);
169  0 this.getLog().info("finished generating dictionary documentation");
170    }
171    }