package com.ciandt.techgallery.utils; import au.com.bytecode.opencsv.CSVWriter; import com.ciandt.techgallery.persistence.model.TechGalleryUser; import com.ciandt.techgallery.persistence.model.profile.UserProfile; import com.ciandt.techgallery.persistence.model.profile.UserProfileItem; import com.googlecode.objectify.Ref; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.Font; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.StringWriter; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.util.Iterator; import java.util.List; /** * Created by jneves on 11/03/16. */ public class ExportUtils { private static final int SHEET_CELL_SIZE = 5; private static final String SHEET_NAME = "Dados Gerais"; private static final String[] SHEET_HEADERS = new String[]{"Login", "Nome", "Tecnologia", "Total de Indicações", "Auto-Avaliação"}; public static final Charset SHEET_CHARSET = StandardCharsets.UTF_8; public static byte[] createXlsUsersProfile(List<UserProfile> usersProfile) throws IOException { UserProfile.sortUsersProfileByOwnerName(usersProfile); Workbook workbook = createUsersProfileWorkbook(usersProfile); ByteArrayOutputStream outByteStream = new ByteArrayOutputStream(); workbook.write(outByteStream); return outByteStream.toByteArray(); } public static byte[] createCsvUsersProfile(List<UserProfile> usersProfile) throws IOException { UserProfile.sortUsersProfileByOwnerName(usersProfile); Workbook workbook = createUsersProfileWorkbook(usersProfile); return createCsv(workbook).toString().getBytes(SHEET_CHARSET); } private static Workbook createUsersProfileWorkbook(List<UserProfile> usersProfile) { HSSFWorkbook workbook = new HSSFWorkbook(); HSSFSheet sheet = workbook.createSheet(); workbook.setSheetName(workbook.getSheetIndex(sheet), SHEET_NAME); int rownum = 0; Row headerRow = sheet.createRow(rownum++); for (int rn = 0; rn < SHEET_HEADERS.length; rn++) { headerRow.createCell(rn).setCellValue(SHEET_HEADERS[rn]); } makeRowBold(workbook, headerRow); for (UserProfile userProfile : usersProfile) { Ref<TechGalleryUser> techGalleryUserRef = userProfile.getOwner(); TechGalleryUser techGalleryUser = techGalleryUserRef.get(); if (techGalleryUser != null) { for (UserProfileItem tec : userProfile.getAllItems()) { if (tec.getSkillLevel() > 0 || tec.getEndorsementQuantity() > 0) { Row row = sheet.createRow(rownum++); int cellnum = 0; row.createCell(cellnum++).setCellValue(createLoginByEmail(techGalleryUser.getEmail())); row.createCell(cellnum++).setCellValue(techGalleryUser.getName()); row.createCell(cellnum++).setCellValue(tec.getTechnologyName()); row.createCell(cellnum++).setCellValue(tec.getEndorsementQuantity()); row.createCell(cellnum++).setCellValue(tec.getSkillLevel()); } } } } return workbook; } private static StringWriter createCsv(Workbook workBook) throws IOException { Sheet sheet = workBook.getSheetAt(0); Iterator<Row> rowIterator = sheet.iterator(); StringWriter stringWriter = new StringWriter(); CSVWriter csvOutput = new CSVWriter(stringWriter); while (rowIterator.hasNext()) { Row row = rowIterator.next(); int i = 0; String[] cellValues = new String[SHEET_CELL_SIZE]; Iterator<Cell> cellIterator = row.cellIterator(); while (cellIterator.hasNext()) { Cell cell = cellIterator.next(); switch (cell.getCellType()) { case Cell.CELL_TYPE_STRING: cellValues[i] = cell.getStringCellValue(); break; case Cell.CELL_TYPE_NUMERIC: cellValues[i] = String.valueOf(cell.getNumericCellValue()); break; case Cell.CELL_TYPE_BLANK: cellValues[i] = ""; break; } i = i + 1; } csvOutput.writeNext(cellValues); } csvOutput.close(); return stringWriter; } private static String createLoginByEmail(String email) { if (email != null && email.contains("@")) { return (email.split("@")[0]); } return ""; } private static void makeRowBold(HSSFWorkbook wb, Row row) { CellStyle style = wb.createCellStyle(); Font font = wb.createFont(); font.setBoldweight(Font.BOLDWEIGHT_BOLD); style.setFont(font); for (int i = 0; i < row.getLastCellNum(); i++) { row.getCell(i).setCellStyle(style); } } }