1   
2   
3   
4   
5   
6   
7   
8   
9   
10  
11  
12  
13  
14  
15  
16  package edu.sampleu.admin;
17  
18  import freemarker.cache.ClassTemplateLoader;
19  import freemarker.template.Configuration;
20  import freemarker.template.Template;
21  import freemarker.template.TemplateException;
22  import org.apache.commons.io.FileUtils;
23  import org.apache.log4j.Logger;
24  import org.junit.Ignore;
25  import org.junit.Rule;
26  import org.junit.Test;
27  import org.junit.rules.TemporaryFolder;
28  import org.kuali.rice.testtools.selenium.AutomatedFunctionalTestUtils;
29  import org.openqa.selenium.By;
30  import org.springframework.ui.freemarker.FreeMarkerTemplateUtils;
31  
32  import java.io.File;
33  import java.io.FileInputStream;
34  import java.io.IOException;
35  import java.io.InputStream;
36  import java.util.ArrayList;
37  import java.util.Enumeration;
38  import java.util.List;
39  import java.util.Properties;
40  
41  
42  
43  
44  
45  
46  
47  
48  
49  public class XmlIngester extends AdminTmplMthdAftNavBase {
50  
51      protected final Logger LOG = Logger.getLogger(getClass());
52  
53      
54      private Configuration cfg;
55      private String PROPS_LOCATION = System.getProperty("xmlingester.props.location", null);
56      private String DEFAULT_PROPS_LOCATION = "XML/xmlingester.properties";
57  
58      
59      private static final String DIR_TMPL = "/XML/";
60      private static final String TMPL_USER_CONTENT = "SimpleUserContent.ftl";
61      private static final String TMPL_GROUP_CONTENT = "SimpleGroupContent.ftl";
62  
63      @Rule
64      public TemporaryFolder folder= new TemporaryFolder();
65  
66      @Ignore 
67      @Override
68      public String testCreateNewCancel() throws Exception {
69          return null;
70      }
71  
72      @Ignore 
73      @Override
74      public void testEditCancel() throws Exception {}
75  
76      @Override
77      protected String getBookmarkUrl() {
78          return null; 
79      }
80  
81      @Override
82      protected String getLinkLocator() {
83          return "XML Ingester";
84      }
85  
86      @Override
87      public String getUserName() {
88          return "admin"; 
89      }
90  
91      @Override
92      public void testSetUp() {
93          super.testSetUp();
94          
95          cfg = new Configuration();
96          cfg.setTemplateLoader(new ClassTemplateLoader(getClass().getClassLoader().getClass(), DIR_TMPL));
97      }
98  
99      private List<File> buildFileUploadList() throws Exception {
100         List<File> fileUploadList = new ArrayList<File>();
101         try {
102             
103             Properties props = loadProperties(PROPS_LOCATION, DEFAULT_PROPS_LOCATION);
104             if(props.get("userIncludeDTSinPrefix") != null
105                     && "true".equalsIgnoreCase((String) props.get("userIncludeDTSinPrefix"))) {
106                 props.setProperty("userPrefix", "" + props.get("userPrefix") + AutomatedFunctionalTestUtils.DTS);
107             }
108             systemPropertiesOverride(props);
109 
110             
111             fileUploadList.add(
112                     writeTemplateToFile(
113                             folder.newFile("loadtest-users.xml"), cfg.getTemplate(TMPL_USER_CONTENT), props));
114             fileUploadList.add(
115                     writeTemplateToFile(
116                             folder.newFile("loadtest-group.xml"), cfg.getTemplate(TMPL_GROUP_CONTENT), props));
117         } catch( Exception e) {
118             throw new Exception("Unable to generate files for upload", e);
119         }
120         return fileUploadList;
121     }
122 
123     
124 
125 
126 
127     private void systemPropertiesOverride(Properties props) {
128         Enumeration<?> names = props.propertyNames();
129         Object nameObject;
130         String name;
131         while (names.hasMoreElements()) {
132             nameObject = names.nextElement();
133             if (nameObject instanceof String) {
134                 name = (String)nameObject;
135                 props.setProperty(name, System.getProperty("XMLIngester." + name, props.getProperty(name)));
136             }
137         }
138     }
139 
140     
141 
142 
143 
144 
145     @Test
146     public void testXMLIngesterSuccessfulFileUploadNav() throws Exception {
147         List<File> fileUploadList = buildFileUploadList();
148         navigate();
149         int cnt = 0;
150         for(File file : fileUploadList) {
151             String path = file.getAbsolutePath().toString();
152             driver.findElement(By.name("file[" + cnt + "]")).sendKeys(path);
153             cnt++;
154         }
155         waitAndClickByXpath("//*[@id='imageField']");
156 
157         
158         for(File file: fileUploadList) {
159             assertTextPresent("Ingested xml doc: " + file.getName());
160         }
161         passed();
162     }
163 
164     
165 
166 
167 
168 
169 
170     private Properties loadProperties(String fileLocation, String resourceLocation) throws IOException {
171         Properties props = new Properties();
172         InputStream in = null;
173         if(fileLocation != null) {
174             in = new FileInputStream(fileLocation);
175         } else {
176             in = getClass().getClassLoader().getResourceAsStream(resourceLocation);
177         }
178         if(in != null) {
179             props.load(in);
180             in.close();
181         }
182         return props;
183     }
184 
185     
186 
187 
188 
189 
190 
191 
192 
193 
194 
195     private File writeTemplateToFile(File file, Template template, Properties props) throws IOException, TemplateException {
196         String output = FreeMarkerTemplateUtils.processTemplateIntoString(template, props);
197         LOG.debug("Generated File Output: " + output);
198         FileUtils.writeStringToFile(file, output);
199         return file;
200     }
201 }