001    /**
002     * Copyright 2004-2013 The Kuali Foundation
003     *
004     * Licensed under the Educational Community License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     *
008     * http://www.opensource.org/licenses/ecl2.php
009     *
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     * See the License for the specific language governing permissions and
014     * limitations under the License.
015     */
016    package org.kuali.student.contract.mojo;
017    
018    import java.io.File;
019    import java.net.MalformedURLException;
020    import java.net.URL;
021    import java.net.URLClassLoader;
022    import java.util.ArrayList;
023    import java.util.Collection;
024    import java.util.HashMap;
025    import java.util.List;
026    import java.util.Map;
027    
028    import org.apache.maven.artifact.DependencyResolutionRequiredException;
029    import org.apache.maven.model.Dependency;
030    import org.apache.maven.plugin.AbstractMojo;
031    import org.apache.maven.plugin.MojoExecutionException;
032    import org.apache.maven.plugin.MojoFailureException;
033    import org.apache.maven.project.MavenProject;
034    import org.joda.time.DateTime;
035    import org.kuali.student.admin.ui.mojo.KSCreateAdminUiMojo;
036    import org.kuali.student.common.mojo.AbstractKSMojo;
037    import org.kuali.student.contract.model.ServiceContractModel;
038    import org.kuali.student.contract.model.impl.ServiceContractModelCache;
039    import org.kuali.student.contract.model.impl.ServiceContractModelPescXsdLoader;
040    import org.kuali.student.contract.model.impl.ServiceContractModelQDoxLoader;
041    import org.kuali.student.contract.model.util.DateUtility;
042    import org.kuali.student.contract.model.util.HtmlContractWriter;
043    import org.kuali.student.contract.model.validation.ServiceContractModelValidator;
044    import org.slf4j.Logger;
045    import org.slf4j.LoggerFactory;
046    
047    /**
048     * The plugin entrypoint which is used to generate the html wiki doc of the service interface.
049     * @goal kscontractdoc
050     * @phase site
051     * @requiresProject true
052     */
053    public class KSContractDocMojo extends AbstractKSMojo {
054        
055        private static Logger log = LoggerFactory.getLogger(KSContractDocMojo.class);
056    
057        /**
058         * @parameter property="htmlDirectory" default-value="${project.build.directory}/site/services/contractdocs"
059         */
060        private File htmlDirectory;
061    
062        public File getHtmlDirectory() {
063            return htmlDirectory;
064        }
065      
066        public void setHtmlDirectory(File htmlDirectory) {
067            this.htmlDirectory = htmlDirectory;
068        }
069    
070        @Override
071        public void execute() throws MojoExecutionException, MojoFailureException {
072            
073            MavenProject project = (MavenProject) getPluginContext().get("project");
074            
075            String formattedDate = DateUtility.asYMDHMInEasternTimeZone(new DateTime());
076            
077            ServiceContractModel model = null;
078            HtmlContractWriter writer = null;
079            getLog().info("publishing wiki contracts");
080            model = this.getModel();
081            this.validate(model);
082            getLog().info("publishing to = " + this.htmlDirectory.toString());
083            writer = new HtmlContractWriter(htmlDirectory.toString(), model);
084            writer.write(project.getVersion(), formattedDate);
085    
086    
087        }
088        
089        
090        private static final String CORE_DIRECTORY = "D:/svn/ks/trunk/ks-api/ks-core-api/src/main";
091        // "C:/svn/maven-dictionary-generator/trunk/src/main/java/org/kuali/student/core";
092        private static final String COMMON_DIRECTORY = "D:/svn/ks/trunk/ks-api/ks-common-api/src/main/java";
093        private static final String ENROLL_DIRECTORY = "D:/svn/ks/trunk/ks-api/ks-enroll-api/src/main/java";
094        private static final String LUM_DIRECTORY = "D:/svn/ks/trunk/ks-api/ks-lum-api/src/main/java";
095        private static final String KSA_DIRECTORY = "D:/svn/ks/ksa/ksa-core/src/main/java";
096        private static final String TEST_SOURCE_DIRECTORY =
097                "src/test/java/org/kuali/student/contract/model/test/source";
098        private static final String TARGET_GENERATED_SOURCES = "target/generated-sources";
099        private static final String STANDALONE_MAIN_DIRECTORY = "D:/svn/ks/ks-standalone-admin-app/src/main";
100    
101        private static final String RICE_CORE_API_DIRECTORY = "D:/svn/rice/rice-2.2.0/core/api/src/main/java";
102        private static final String RICE_KIM_API_DIRECTORY = "D:/svn/rice/rice-2.2.0/kim/kim-api/src/main/java";
103        private static final String RICE_KRMS_API_DIRECTORY = "D:/svn/rice/rice-2.2.0/krms/api/src/main/java";
104        
105        
106        private static final String TRUNK_CORE_IMPL = "D:/svn/ks/trunk/ks-core/ks-core-impl/src/main/java";
107        private static final String TRUNK_ENROLL_IMPL = "D:/svn/ks/trunk/ks-core/ks-core-impl/src/main/java";
108        private static final String TRUNK_ENROLL_IMPL_KRMS_API = "D:/svn/ks/trunk/ks-enroll/ks-enroll-impl/src/main/java/org/kuali/rice/krms/api";
109                                                       
110        
111        public static void main(String[] args) {
112            log.info("execute");
113            List<String> srcDirs = new ArrayList<String>();
114    //        srcDirs.add(COMMON_DIRECTORY);
115    //        srcDirs.add(CORE_DIRECTORY);
116    //        srcDirs.add(LUM_DIRECTORY);
117    //        srcDirs.add(ENROLL_DIRECTORY);        
118    //        srcDirs.add(RICE_KIM_API_DIRECTORY);     
119            srcDirs.add(KSA_DIRECTORY);
120    //        srcDirs.add(RICE_CORE_API_DIRECTORY);
121    //        srcDirs.add(RICE_KRMS_API_DIRECTORY);
122    //        srcDirs.add(TRUNK_ENROLL_IMPL_KRMS_API);
123            KSContractDocMojo instance = new KSContractDocMojo();
124            Map pluginContext = new HashMap();
125            MavenProject project = new MavenProject();
126            pluginContext.put("project", project);
127            instance.setPluginContext(pluginContext);
128            instance.setSourceDirs(srcDirs);
129            instance.setHtmlDirectory(new File (TARGET_GENERATED_SOURCES));
130            try {
131                instance.execute();
132            } catch (MojoExecutionException ex) {
133                throw new RuntimeException(ex);
134            } catch (MojoFailureException ex) {
135                throw new RuntimeException(ex);
136            }
137        }
138        
139    }