Index: lams_build/3rdParty.userlibraries =================================================================== diff -u -r8385b2704597ecc42f652f4168dc02fda0c57154 -r49cb26ada930a59687956591672498c7f5613d34 --- lams_build/3rdParty.userlibraries (.../3rdParty.userlibraries) (revision 8385b2704597ecc42f652f4168dc02fda0c57154) +++ lams_build/3rdParty.userlibraries (.../3rdParty.userlibraries) (revision 49cb26ada930a59687956591672498c7f5613d34) @@ -112,5 +112,7 @@ + + Index: lams_build/build.xml =================================================================== diff -u -r27d7f43ac317e84d604d3442dc896b80adf4a16b -r49cb26ada930a59687956591672498c7f5613d34 --- lams_build/build.xml (.../build.xml) (revision 27d7f43ac317e84d604d3442dc896b80adf4a16b) +++ lams_build/build.xml (.../build.xml) (revision 49cb26ada930a59687956591672498c7f5613d34) @@ -134,6 +134,8 @@ + + Index: lams_build/conf/j2ee/lams.application.xml =================================================================== diff -u -r27d7f43ac317e84d604d3442dc896b80adf4a16b -r49cb26ada930a59687956591672498c7f5613d34 --- lams_build/conf/j2ee/lams.application.xml (.../lams.application.xml) (revision 27d7f43ac317e84d604d3442dc896b80adf4a16b) +++ lams_build/conf/j2ee/lams.application.xml (.../lams.application.xml) (revision 49cb26ada930a59687956591672498c7f5613d34) @@ -250,6 +250,12 @@ lucene-snowball-2.4.0.jar + + jxl.jar + + + opencsv-1.8.jar + Index: lams_build/conf/j2ee/rams.application.xml =================================================================== diff -u -r0732f5d12802da95cf69e474b30630653924abc5 -r49cb26ada930a59687956591672498c7f5613d34 --- lams_build/conf/j2ee/rams.application.xml (.../rams.application.xml) (revision 0732f5d12802da95cf69e474b30630653924abc5) +++ lams_build/conf/j2ee/rams.application.xml (.../rams.application.xml) (revision 49cb26ada930a59687956591672498c7f5613d34) @@ -243,7 +243,19 @@ JabberHTTPBind-1.1.1.jar - + + + lucene-core-2.4.0.jar + + + lucene-snowball-2.4.0.jar + + + jxl.jar + + + opencsv-1.8.jar + Index: lams_build/lib/csv/opencsv-1.8.jar =================================================================== diff -u Binary files differ Index: lams_build/lib/csv/src/opencsv-1.8-src.zip =================================================================== diff -u Binary files differ Index: lams_build/lib/excel/jxl.jar =================================================================== diff -u Binary files differ Index: lams_build/lib/excel/src/jexcelapi-2.6-src.zip =================================================================== diff -u Binary files differ Index: lams_build/lib/lams/lams-central.jar =================================================================== diff -u -r42aa5319fbd33938828764c43dd0ab1ca80e2416 -r49cb26ada930a59687956591672498c7f5613d34 Binary files differ Index: lams_central/src/java/org/lamsfoundation/lams/util/CentralConstants.java =================================================================== diff -u -r56c565f6b6e596ec0de434127769de8986a090be -r49cb26ada930a59687956591672498c7f5613d34 --- lams_central/src/java/org/lamsfoundation/lams/util/CentralConstants.java (.../CentralConstants.java) (revision 56c565f6b6e596ec0de434127769de8986a090be) +++ lams_central/src/java/org/lamsfoundation/lams/util/CentralConstants.java (.../CentralConstants.java) (revision 49cb26ada930a59687956591672498c7f5613d34) @@ -166,4 +166,12 @@ public static final String USER_MANAGEMENT_SERVICE_BEAN_NAME = "userManagementService"; public static final String PARAM_FILTER_TEXT = "filterText"; + + public static final String HEADER_CONTENT_DISPOSITION = "Content-Disposition"; + + public static final String RESPONSE_CONTENT_TYPE_DOWNLOAD = "application/x-download"; + + public static final String FILE_EXTENSION_XLS = ".xls"; + + public static final String FILE_EXTENSION_CSV = ".csv"; } \ No newline at end of file Index: lams_common/src/java/org/lamsfoundation/lams/util/FileUtil.java =================================================================== diff -u -r9a772f5ba1954a3a719a19e7ae237b6b09dc76ef -r49cb26ada930a59687956591672498c7f5613d34 --- lams_common/src/java/org/lamsfoundation/lams/util/FileUtil.java (.../FileUtil.java) (revision 9a772f5ba1954a3a719a19e7ae237b6b09dc76ef) +++ lams_common/src/java/org/lamsfoundation/lams/util/FileUtil.java (.../FileUtil.java) (revision 49cb26ada930a59687956591672498c7f5613d34) @@ -29,8 +29,10 @@ import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; +import java.io.OutputStreamWriter; import java.io.Reader; import java.io.UnsupportedEncodingException; +import java.io.Writer; import java.net.URLEncoder; import java.nio.channels.FileChannel; import java.util.Date; @@ -39,6 +41,14 @@ import javax.mail.internet.MimeUtility; import javax.servlet.http.HttpServletRequest; +import jxl.JXLException; +import jxl.Workbook; +import jxl.write.DateTime; +import jxl.write.Label; +import jxl.write.WritableCell; +import jxl.write.WritableSheet; +import jxl.write.WritableWorkbook; + import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.hibernate.Hibernate; @@ -49,6 +59,8 @@ import org.lamsfoundation.lams.learningdesign.service.ToolContentVersionFilter; import org.lamsfoundation.lams.util.zipfile.ZipFileUtilException; +import au.com.bytecode.opencsv.CSVWriter; + import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.converters.ConversionException; @@ -761,4 +773,80 @@ return null; } } + + public static void exportToExcel(OutputStream out, String sheetName, String title, String dateHeader, + String[] columnNames, Object[][] data) throws IOException, JXLException { + WritableWorkbook workbook = Workbook.createWorkbook(out); + WritableSheet sheet = workbook.createSheet(sheetName, 0); + if (!StringUtils.isEmpty(title)) { + sheet.addCell(new Label(0, 0, title)); + } + if (!StringUtils.isEmpty(dateHeader)) { + sheet.addCell(new Label(0, 1, dateHeader)); + sheet.addCell(new DateTime(1, 1, new Date())); + } + if (columnNames != null) { + for (int columnIndex = 0; columnIndex < columnNames.length; columnIndex++) { + sheet.addCell(new Label(columnIndex, 3, columnNames[columnIndex])); + } + } + if (data != null) { + for (int columnIndex = 0; columnIndex < data.length; columnIndex++) { + for (int rowIndex = 0; rowIndex < data[columnIndex].length; rowIndex++) { + Object content = data[columnIndex][rowIndex]; + if (content != null) { + WritableCell cell = null; + if (content instanceof Number) { + Number number = (Number) content; + cell = new jxl.write.Number(columnIndex, rowIndex, number.doubleValue()); + } else if (content instanceof Date) { + Date date = (Date) content; + cell = new DateTime(columnIndex, rowIndex, date); + } else if (content instanceof Boolean) { + Boolean bool = (Boolean) content; + cell = new jxl.write.Boolean(columnIndex, rowIndex, bool); + } else { + cell = new Label(columnIndex, rowIndex, content.toString()); + } + sheet.addCell(cell); + } + } + } + } + workbook.write(); + workbook.close(); + } + + public static void exportToCSV(OutputStream out, String title, String dateHeader, String[] columnNames, + Object[][] data) throws IOException { + Writer writer = new OutputStreamWriter(out); + CSVWriter csv = new CSVWriter(writer); + String[] line = null; + if (!StringUtils.isEmpty(title)) { + line = new String[] { title }; + csv.writeNext(line); + } + if (!StringUtils.isEmpty(dateHeader)) { + line = new String[] { dateHeader, new Date().toString() }; + csv.writeNext(line); + } + if (columnNames != null) { + line = new String[] {}; + csv.writeNext(line); + csv.writeNext(columnNames); + } + if (data != null) { + for (int columnIndex = 0; columnIndex < data.length; columnIndex++) { + line = new String[data[columnIndex].length]; + for (int rowIndex = 0; rowIndex < data[columnIndex].length; rowIndex++) { + Object content = data[columnIndex][rowIndex]; + if (content != null) { + line[rowIndex] = content.toString(); + } + } + csv.writeNext(line); + } + } + csv.close(); + } } \ No newline at end of file