001    /**
002     * Copyright 2005-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 edu.samplu.common;
017    
018    import freemarker.cache.ClassTemplateLoader;
019    import freemarker.template.Configuration;
020    import freemarker.template.Template;
021    import freemarker.template.TemplateException;
022    import org.apache.log4j.Logger;
023    import org.junit.Before;
024    
025    import java.io.File;
026    import java.io.FileInputStream;
027    import java.io.IOException;
028    import java.io.InputStream;
029    import java.util.Properties;
030    
031    /**
032     * @see FreemarkerUtil
033     * @author Kuali Rice Team (rice.collab@kuali.org)
034     */
035    public abstract class FreemarkerSTBase extends WebDriverLegacyITBase {
036    
037        protected final Logger LOG = Logger.getLogger(getClass());
038    
039        protected Configuration cfg;
040    
041        protected abstract String getTemplateDir();
042    
043        @Override
044        @Before
045        public void testSetUp() {
046            super.testSetUp();
047            // generated load users and group resources
048            cfg = new Configuration();
049            cfg.setTemplateLoader(new ClassTemplateLoader(getClass().getClassLoader().getClass(), getTemplateDir()));
050        }
051    
052        /**
053         * Calls ftlWrite that also accepts a key, using the output getName as the key.
054         * {@link FreemarkerUtil#ftlWrite(java.io.File, freemarker.template.Template, java.io.InputStream)}
055         * @param output
056         * @param template
057         * @return
058         * @throws IOException
059         * @throws TemplateException
060         */
061        public File ftlWrite(File output, Template template, InputStream inputStream) throws IOException, TemplateException {
062    
063            return FreemarkerUtil.ftlWrite(output.getName(), output, template, inputStream);
064        }
065    
066        /**
067         * TODO can we cut this down to one param?
068         * {@link FreemarkerUtil#loadProperties(java.io.InputStream)}
069         * @param fileLocation null means use resourceLocation
070         * @param resourceLocation
071         * @return
072         * @throws IOException
073         */
074        protected Properties loadProperties(String fileLocation, String resourceLocation) throws IOException {
075            Properties props = null;
076            InputStream in = null;
077            if(fileLocation != null) {
078                in = new FileInputStream(fileLocation);
079            } else {
080                in = getClass().getClassLoader().getResourceAsStream(resourceLocation);
081            }
082            if(in != null) {
083                props = PropertiesUtils.loadProperties(in);
084                in.close();
085            }
086    
087            return props;
088        }
089    
090        /**
091        * {@link FreemarkerUtil#writeTemplateToFile(java.io.File, freemarker.template.Template, java.util.Properties)}
092        * @param file
093        * @param template
094        * @param props
095        * @return
096        * @throws IOException
097        * @throws TemplateException
098        */
099        protected static File writeTemplateToFile(File file, Template template, Properties props) throws IOException, TemplateException {
100            return FreemarkerUtil.writeTemplateToFile(file, template, props);
101        }
102    }