1
2
3
4
5
6 package org.weda.report.text;
7
8 import java.io.ByteArrayInputStream;
9 import java.io.InputStream;
10 import java.util.List;
11 import org.weda.converter.ValueTypeConverter;
12 import org.weda.enhance.InjectHivemindObject;
13 import org.weda.model.TableModel;
14 import org.weda.model.TableModelData;
15 import org.weda.model.TableModelRegistry;
16 import org.weda.property.PropertyDescriptor;
17 import org.weda.report.ReportException;
18 import org.weda.report.impl.AbstractReport;
19
20 /**Генератор текстовых отчетов
21 *
22 * @author Mikhail Titov
23 */
24 public class TextReport extends AbstractReport {
25 @InjectHivemindObject()
26 private static TableModelRegistry tableModelRegistry;
27 @InjectHivemindObject()
28 private static ValueTypeConverter converter;
29
30 private String tableModelName;
31 private String delimiter = ";";
32 private boolean createTitleRow = true;
33 private String encoding = "UTF-8";
34 private boolean manageTableModel = true;
35 private boolean useSelectedRows = false;
36
37 public TextReport(){
38 setMimeType("text/csv");
39 }
40
41 public void release() throws ReportException {
42 }
43
44 public InputStream generate() throws ReportException {
45 try {
46 TableModel model = tableModelRegistry.getTableModel(tableModelName);
47 if (manageTableModel)
48 model.open();
49 try{
50 TableModelData modelData = model.getData();
51 StringBuffer buf = new StringBuffer();
52 List<PropertyDescriptor> columns = model.getColumnDescriptors();
53 if (createTitleRow){
54 int i=0;
55 for (PropertyDescriptor desc: columns){
56 if (i++!=0)
57 buf.append(delimiter);
58 buf.append(desc.getDisplayName());
59 }
60 buf.append("\n");
61 }
62 for (int r=0; r<modelData.getRowCount(); ++r){
63 if (!useSelectedRows || modelData.isRowSelected(r)){
64 for (int c=0; c<model.getColumnCount(); ++c){
65 if (c!=0)
66 buf.append(delimiter);
67 String value = (String)
68 converter.convert(
69 String.class
70 , modelData.getValueAt(r, c)
71 , columns.get(c).getPattern());
72 buf.append(value==null? "" : value);
73 }
74 buf.append("\n");
75 }
76 }
77 ByteArrayInputStream result =
78 new ByteArrayInputStream(
79 buf.toString().getBytes(encoding));
80 return result;
81 }finally{
82 if (manageTableModel)
83 model.close();
84 }
85 } catch (Exception e) {
86 throw new ReportException(
87 String.format(
88 "Error while generating report. " +
89 "Report name (%s), report group (%s)"
90 , getName(), getGroup())
91 , e);
92 }
93 }
94
95 public String getTableModelName() {
96 return tableModelName;
97 }
98
99 public void setTableModelName(String tableModelName) {
100 this.tableModelName = tableModelName;
101 }
102
103 public String getDelimiter() {
104 return delimiter;
105 }
106
107 public void setDelimiter(String delimiter) {
108 this.delimiter = delimiter;
109 }
110
111 public boolean isCreateTitleRow() {
112 return createTitleRow;
113 }
114
115 public void setCreateTitleRow(boolean createTitleRow) {
116 this.createTitleRow = createTitleRow;
117 }
118
119 public String getEncoding() {
120 return encoding;
121 }
122
123 public void setEncoding(String encoding) {
124 this.encoding = encoding;
125 }
126
127 public boolean isManageTableModel() {
128 return manageTableModel;
129 }
130
131 public void setManageTableModel(boolean manageTableModel) {
132 this.manageTableModel = manageTableModel;
133 }
134
135 public boolean isUseSelectedRows() {
136 return useSelectedRows;
137 }
138
139 public void setUseSelectedRows(boolean useSelectedRows) {
140 this.useSelectedRows = useSelectedRows;
141 }
142 }