1   
2   
3   
4   
5   
6   
7   
8   
9   
10  
11  
12  
13  
14  
15  
16  package org.kuali.rice.kns.lookup;
17  
18  import java.io.IOException;
19  import java.io.OutputStream;
20  import java.io.Writer;
21  import java.util.ArrayList;
22  import java.util.List;
23  
24  import org.apache.commons.lang.StringUtils;
25  import org.directwebremoting.util.WriterOutputStream;
26  import org.displaytag.model.Row;
27  import org.displaytag.model.TableModel;
28  import org.kuali.rice.kns.util.KNSGlobalVariables;
29  import org.kuali.rice.kns.web.struts.form.KualiForm;
30  import org.kuali.rice.kns.web.struts.form.LookupForm;
31  import org.kuali.rice.kns.web.ui.ResultRow;
32  import org.kuali.rice.krad.bo.BusinessObject;
33  import org.kuali.rice.krad.bo.Exporter;
34  import org.kuali.rice.krad.datadictionary.BusinessObjectEntry;
35  import org.kuali.rice.krad.service.KRADServiceLocatorWeb;
36  import org.kuali.rice.krad.exception.ExportNotSupportedException;
37  import org.kuali.rice.krad.util.GlobalVariables;
38  
39  
40  
41  
42  
43  
44  
45  
46  
47  
48  public class ExportViewHelper {
49  
50  	private BusinessObjectEntry businessObjectEntry;
51  	private List<BusinessObject> businessObjects;
52  	
53  	public ExportViewHelper(TableModel tableModel) {
54  		this.businessObjectEntry = loadBusinessObjectEntry();
55  		this.businessObjects = loadBusinessObjects(tableModel);
56  	}
57  	
58  	protected BusinessObjectEntry loadBusinessObjectEntry() {
59  		KualiForm kualiForm = KNSGlobalVariables.getKualiForm();
60  		if (kualiForm instanceof LookupForm) {
61  			LookupForm lookupForm = (LookupForm) kualiForm;
62  			if (!StringUtils.isBlank(lookupForm.getBusinessObjectClassName())) {
63  				return KRADServiceLocatorWeb.getDataDictionaryService().getDataDictionary().getBusinessObjectEntry(lookupForm.getBusinessObjectClassName());
64  			}
65  		}
66  		return null;
67  	}
68  	
69  	protected List<BusinessObject> loadBusinessObjects(TableModel tableModel) {
70  		List<BusinessObject> businessObjects = new ArrayList<BusinessObject>();
71  		List<Row> rowList = tableModel.getRowListFull();
72  		for (Row row : rowList) {
73  			ResultRow resultRow = (ResultRow)row.getObject();
74  			if (resultRow.getBusinessObject() != null) {
75  				businessObjects.add(resultRow.getBusinessObject());
76  			}
77  		}
78  		return businessObjects;
79  	}
80  	
81  	public BusinessObjectEntry getBusinessObjectEntry() {
82  		return businessObjectEntry;
83  	}
84  	
85  	public List<BusinessObject> getBusinessObjects() {
86  		return businessObjects;
87  	}
88  	
89  	public boolean attemptCustomExport(OutputStream outputStream, String exportFormat) throws IOException {
90  		if (getBusinessObjectEntry() != null && getBusinessObjectEntry().getExporterClass() != null) {
91  			final Exporter exporter;
92  			try {
93  				exporter = getBusinessObjectEntry().getExporterClass().newInstance();
94  			} catch (Exception e) {
95  				throw new ExportNotSupportedException("Failed to load export class: " + businessObjectEntry.getExporterClass(),e);
96  			}
97  			List<String> supportedFormats = exporter.getSupportedFormats(businessObjectEntry.getBusinessObjectClass());
98  			if (supportedFormats.contains(exportFormat)) {
99  				exporter.export(businessObjectEntry.getBusinessObjectClass(), getBusinessObjects(), exportFormat, outputStream);
100 				return true;
101 			}
102 		}
103 		return false;
104 	}
105 	
106 	public boolean attemptCustomExport(Writer writer, String exportFormat) throws IOException {
107 		return attemptCustomExport(new WriterOutputStream(writer), exportFormat);
108 	}
109 	
110 }