View Javadoc

1   /*
2    * TextReport.java
3    * Created on 30 Август 2006 г., 10:48
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 }