1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package edu.sampleu.kew.krad.controller;
17
18 import java.io.File;
19 import java.io.FileOutputStream;
20 import java.io.IOException;
21 import java.util.ArrayList;
22 import java.util.Collection;
23 import java.util.List;
24
25 import javax.servlet.http.HttpServletRequest;
26 import javax.servlet.http.HttpServletResponse;
27
28 import org.apache.commons.lang.StringUtils;
29 import org.apache.commons.lang.exception.ExceptionUtils;
30 import org.kuali.rice.core.api.CoreApiServiceLocator;
31 import org.kuali.rice.core.api.impex.xml.CompositeXmlDocCollection;
32 import org.kuali.rice.core.api.impex.xml.FileXmlDocCollection;
33 import org.kuali.rice.core.api.impex.xml.XmlDoc;
34 import org.kuali.rice.core.api.impex.xml.XmlDocCollection;
35 import org.kuali.rice.core.api.impex.xml.ZipXmlDocCollection;
36 import org.kuali.rice.krad.util.GlobalVariables;
37 import org.kuali.rice.krad.web.controller.UifControllerBase;
38 import org.kuali.rice.krad.web.form.UifFormBase;
39 import org.springframework.stereotype.Controller;
40 import org.springframework.validation.BindingResult;
41 import org.springframework.web.bind.annotation.ModelAttribute;
42 import org.springframework.web.bind.annotation.RequestMapping;
43 import org.springframework.web.bind.annotation.RequestMethod;
44 import org.springframework.web.multipart.MultipartFile;
45 import org.springframework.web.servlet.ModelAndView;
46
47 import edu.sampleu.kew.krad.KEWConstants;
48 import edu.sampleu.kew.krad.form.IngesterForm;
49
50
51
52
53
54
55
56 @Controller
57 @RequestMapping(value = "/ingester")
58 public class IngesterController extends UifControllerBase {
59
60 @Override
61 protected IngesterForm createInitialForm(HttpServletRequest request) {
62 return new IngesterForm();
63 }
64
65 @Override
66 @RequestMapping(params = "methodToCall=start")
67 public ModelAndView start(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
68 HttpServletRequest request, HttpServletResponse response) {
69
70 IngesterForm ingesterForm = (IngesterForm)form;
71
72
73 return super.start(ingesterForm, result, request, response);
74 }
75
76 @RequestMapping(method = RequestMethod.POST, params = "methodToCall=upload")
77 public ModelAndView upload(@ModelAttribute("KualiForm") IngesterForm ingesterForm, BindingResult result,
78 HttpServletRequest request, HttpServletResponse response) {
79
80 List<File> tempFiles = new ArrayList<File>();
81
82 try {
83
84 List<XmlDocCollection> collections = new ArrayList<XmlDocCollection>();
85
86 for (MultipartFile file : ingesterForm.getFiles())
87 {
88 if (file == null || StringUtils.isBlank(file.getOriginalFilename())) {
89 continue;
90 }
91
92
93
94
95 FileOutputStream fos = null;
96 File temp = null;
97 try{
98 temp = File.createTempFile("ingester", null);
99 tempFiles.add(temp);
100 fos = new FileOutputStream(temp);
101 fos.write(file.getBytes());
102 } catch (IOException ioe) {
103 GlobalVariables.getMessageMap().putErrorForSectionId(KEWConstants.INGESTER_SECTION_ID,KEWConstants.ERROR_INGESTER_COPY_FILE , file.getOriginalFilename(), ExceptionUtils.getFullStackTrace(ioe));
104 continue;
105 } finally{
106 if (fos != null) {
107 try{
108 fos.close();
109 } catch (IOException ioe){
110
111 }
112 }
113 }
114 if (file.getOriginalFilename().toLowerCase().endsWith(".zip"))
115 {
116 try {
117 collections.add(new ZipXmlDocCollection(temp));
118 } catch (IOException ioe) {
119 GlobalVariables.getMessageMap().putErrorForSectionId(KEWConstants.INGESTER_SECTION_ID, KEWConstants.ERROR_INGESTER_LOAD_FILE, file.getOriginalFilename());
120 }
121 } else if (file.getOriginalFilename().endsWith(".xml")) {
122 collections.add(new FileXmlDocCollection(temp, file.getOriginalFilename()));
123 } else {
124 GlobalVariables.getMessageMap().putErrorForSectionId(KEWConstants.INGESTER_SECTION_ID, KEWConstants.ERROR_INGESTER_EXTRANEOUS_FILE, file.getOriginalFilename());
125 }
126 }
127
128 if (collections.size() == 0) {
129 String message = "No valid files to ingest";
130 GlobalVariables.getMessageMap().putErrorForSectionId(KEWConstants.INGESTER_SECTION_ID, KEWConstants.ERROR_INGESTER_NO_VALID_FILES);
131 } else {
132
133 CompositeXmlDocCollection compositeCollection = new CompositeXmlDocCollection(collections);
134 int totalProcessed = 0;
135 List<XmlDocCollection> c = new ArrayList<XmlDocCollection>(1);
136 c.add(compositeCollection);
137 try {
138 Collection<XmlDocCollection> failed = CoreApiServiceLocator.getXmlIngesterService().ingest(c, GlobalVariables.getUserSession().getPrincipalId());
139 boolean txFailed = failed.size() > 0;
140 if (txFailed) {
141 GlobalVariables.getMessageMap().putErrorForSectionId(KEWConstants.INGESTER_SECTION_ID, KEWConstants.ERROR_INGESTER_FAILED);
142 }
143 for (XmlDocCollection collection1 : collections)
144 {
145 List<? extends XmlDoc> docs = collection1.getXmlDocs();
146 for (XmlDoc doc1 : docs)
147 {
148 if (doc1.isProcessed())
149 {
150 if (!txFailed)
151 {
152 totalProcessed++;
153 GlobalVariables.getMessageMap().putInfoForSectionId(KEWConstants.INGESTER_SECTION_ID, KEWConstants.INFO_INGESTER_SUCCESS, doc1.getName(),doc1.getProcessingMessage());
154
155 } else
156 {GlobalVariables.getMessageMap().putErrorForSectionId(KEWConstants.INGESTER_SECTION_ID, KEWConstants.ERROR_INGESTER_ROLLEDBACK, doc1.getName(),doc1.getProcessingMessage());
157
158 }
159 } else
160 {GlobalVariables.getMessageMap().putErrorForSectionId(KEWConstants.INGESTER_SECTION_ID, KEWConstants.ERROR_INGESTER_FAILED_XML, doc1.getName(),doc1.getProcessingMessage());
161
162 }
163 }
164 }
165 } catch (Exception e) {
166
167
168
169 GlobalVariables.getMessageMap().putErrorForSectionId(KEWConstants.INGESTER_SECTION_ID, KEWConstants.ERROR_INGESTER_DURING_INJECT, ExceptionUtils.getFullStackTrace(e));
170 }
171 if (totalProcessed == 0) {
172
173 GlobalVariables.getMessageMap().putErrorForSectionId(KEWConstants.INGESTER_SECTION_ID, KEWConstants.ERROR_INGESTER_NO_XMLS);
174 }
175 }
176 } finally {
177 if (tempFiles.size() > 0) {
178 for (File tempFile : tempFiles)
179 {
180 if (!tempFile.delete())
181 {
182
183 }
184 }
185 }
186 }
187
188
189 return getUIFModelAndView(ingesterForm, ingesterForm.getViewId());
190 }
191
192 @RequestMapping(method = RequestMethod.POST, params = "methodToCall=close")
193 public ModelAndView close(@ModelAttribute("KualiForm") IngesterForm ingesterForm, BindingResult result,
194 HttpServletRequest request, HttpServletResponse response) {
195
196 return null;
197 }
198
199 }