source: SRUAggregator/trunk/src/main/java/eu/clarin/sru/fcs/aggregator/search/Exports.java @ 6065

Last change on this file since 6065 was 6065, checked in by emanuel.dima@uni-tuebingen.de, 9 years ago
  1. alpha 25: removed unused iso-639-2 support and unused german tokenizer; fixed bug related to xml unencoding; changed weblicht config
File size: 6.1 KB
Line 
1package eu.clarin.sru.fcs.aggregator.search;
2
3import eu.clarin.sru.fcs.aggregator.util.LanguagesISO693;
4import eu.clarin.weblicht.wlfxb.io.WLDObjector;
5import eu.clarin.weblicht.wlfxb.io.WLFormatException;
6import eu.clarin.weblicht.wlfxb.md.xb.MetaData;
7import eu.clarin.weblicht.wlfxb.tc.xb.TextCorpusStored;
8import eu.clarin.weblicht.wlfxb.xb.WLData;
9import java.io.ByteArrayOutputStream;
10import java.io.IOException;
11import java.util.List;
12import java.util.logging.Level;
13import java.util.logging.Logger;
14import org.apache.poi.ss.usermodel.Cell;
15import org.apache.poi.ss.usermodel.CellStyle;
16import org.apache.poi.ss.usermodel.Font;
17import org.apache.poi.ss.usermodel.Row;
18import org.apache.poi.ss.usermodel.Sheet;
19import org.apache.poi.xssf.streaming.SXSSFWorkbook;
20
21/**
22 * Utility for representing SearchResult data in different formats.
23 *
24 * @author Yana Panchenko
25 */
26public class Exports {
27
28        private static final Logger LOGGER = Logger.getLogger(Exports.class.getName());
29
30        public static String getExportCSV(List<Result> resultsProcessed, String separator) {
31
32                boolean noResult = true;
33                StringBuilder csv = new StringBuilder();
34                if (resultsProcessed != null && !resultsProcessed.isEmpty()) {
35                        String[] headers = new String[]{
36                                "LEFT CONTEXT", "KEYWORD", "RIGHT CONTEXT", "PID", "REFERENCE"};
37                        for (String header : headers) {
38                                csv.append("\"");
39                                csv.append(header);
40                                csv.append("\"");
41                                csv.append(separator);
42                        }
43                        csv.append("\n");
44
45                        for (Result result : resultsProcessed) {
46                                for (Kwic kwic : result.getKwics()) {
47                                        csv.append("\"");
48                                        csv.append(escapeQuotes(kwic.getLeft()));
49                                        csv.append("\"");
50                                        csv.append(separator);
51                                        csv.append("\"");
52                                        csv.append(escapeQuotes(kwic.getKeyword()));
53                                        csv.append("\"");
54                                        csv.append(separator);
55                                        csv.append("\"");
56                                        csv.append(escapeQuotes(kwic.getRight()));
57                                        csv.append("\"");
58                                        csv.append(separator);
59                                        csv.append("\"");
60                                        if (kwic.getPid() != null) {
61                                                csv.append(escapeQuotes(kwic.getPid()));
62                                        }
63                                        csv.append("\"");
64                                        csv.append(separator);
65                                        csv.append("\"");
66                                        if (kwic.getReference() != null) {
67                                                csv.append(escapeQuotes(kwic.getReference()));
68                                        }
69                                        csv.append("\"");
70                                        csv.append("\n");
71                                        noResult = false;
72                                }
73                        }
74                }
75                if (noResult) {
76                        return null;
77                } else {
78                        return csv.toString();
79                }
80        }
81
82        private static CharSequence escapeQuotes(String text) {
83                StringBuilder sb = new StringBuilder();
84                for (int i = 0; i < text.length(); i++) {
85                        char ch = text.charAt(i);
86                        if (ch == '"') {
87                                sb.append('"');
88                        }
89                        sb.append(ch);
90                }
91                return sb;
92        }
93
94        public static byte[] getExportExcel(List<Result> resultsProcessed) throws ExportException {
95
96                boolean noResult = true;
97                SXSSFWorkbook workbook = null;
98                ByteArrayOutputStream excelStream = new ByteArrayOutputStream();
99                if (resultsProcessed != null && !resultsProcessed.isEmpty()) {
100                        try {
101                                String[] headers = new String[]{
102                                        "LEFT CONTEXT", "KEYWORD", "RIGHT CONTEXT", "PID", "REFERENCE"};
103
104                                workbook = new SXSSFWorkbook();
105                                Sheet sheet = workbook.createSheet();
106
107                                Font boldFont = workbook.createFont();
108                                boldFont.setBoldweight(Font.BOLDWEIGHT_BOLD);
109
110                                // Header
111                                CellStyle headerStyle = workbook.createCellStyle();
112                                headerStyle.setFont(boldFont);
113
114                                Row row = sheet.createRow(0);
115
116                                for (int j = 0; j < headers.length; ++j) {
117                                        Cell cell = row.createCell(j, Cell.CELL_TYPE_STRING);
118                                        cell.setCellValue(headers[j]);
119                                        cell.setCellStyle(headerStyle);
120                                }
121
122                                // Body
123                                Cell cell;
124                                for (int k = 0; k < resultsProcessed.size(); k++) {
125                                        Result result = resultsProcessed.get(k);
126                                        List<Kwic> kwics = result.getKwics();
127                                        for (int i = 0; i < kwics.size(); i++) {
128                                                Kwic kwic = kwics.get(i);
129                                                row = sheet.createRow(k + i + 1);
130                                                cell = row.createCell(0, Cell.CELL_TYPE_STRING);
131                                                cell.setCellValue(kwic.getLeft());
132                                                cell = row.createCell(1, Cell.CELL_TYPE_STRING);
133                                                cell.setCellValue(kwic.getKeyword());
134                                                cell = row.createCell(2, Cell.CELL_TYPE_STRING);
135                                                cell.setCellValue(kwic.getRight());
136                                                if (kwic.getPid() != null) {
137                                                        cell = row.createCell(3, Cell.CELL_TYPE_STRING);
138                                                        cell.setCellValue(kwic.getPid());
139                                                }
140                                                if (kwic.getReference() != null) {
141                                                        cell = row.createCell(3, Cell.CELL_TYPE_STRING);
142                                                        cell.setCellValue(kwic.getReference());
143                                                }
144                                                noResult = false;
145                                        }
146                                }
147                                workbook.write(excelStream);
148                        } catch (IOException ex) {
149                                LOGGER.log(Level.SEVERE, null, ex);
150                                throw new ExportException("Exception exporting Excel", ex);
151                        } finally {
152                                if (workbook != null) {
153                                        workbook.dispose();
154                                }
155                        }
156                }
157                if (noResult) {
158                        return null;
159                } else {
160                        return excelStream.toByteArray();
161                }
162
163        }
164
165        public static byte[] getExportTCF(List<Result> resultsProcessed,
166                        String searchLanguage) throws ExportException {
167                String text = getExportText(resultsProcessed);
168                if (text == null || text.isEmpty()) {
169                        return null;
170                } else {
171                        WLData data;
172                        MetaData md = new MetaData();
173                        String languageCode = LanguagesISO693.getInstance().code_1ForCode_3(searchLanguage);
174                        TextCorpusStored tc = new TextCorpusStored(languageCode);
175                        tc.createTextLayer().addText(text);
176                        data = new WLData(md, tc);
177                        ByteArrayOutputStream os = new ByteArrayOutputStream();
178                        try {
179                                WLDObjector.write(data, os);
180                        } catch (WLFormatException ex) {
181                                LOGGER.log(Level.SEVERE, "Error exporting TCF {0} {1}", new String[]{ex.getClass().getName(), ex.getMessage()});
182                                throw new ExportException("Error exporting TCF", ex);
183                        }
184                        return os.toByteArray();
185                }
186        }
187
188        public static String getExportText(List<Result> resultsProcessed) {
189                StringBuilder text = new StringBuilder();
190                if (resultsProcessed != null && !resultsProcessed.isEmpty()) {
191                        for (Result result : resultsProcessed) {
192                                for (Kwic kwic : result.getKwics()) {
193                                        int i = kwic.getFragments().size() - 1;
194                                        for (Kwic.TextFragment tf : kwic.getFragments()) {
195                                                text.append(tf.text);
196                                                if (i > 0) {
197                                                        text.append(" ");
198                                                }
199                                                i--;
200                                        }
201                                        text.append("\n");
202                                }
203                        }
204                }
205                if (text.length() == 0) {
206                        return null;
207                } else {
208                        return text.toString();
209                }
210        }
211}
Note: See TracBrowser for help on using the repository browser.