package module.projects.presentationTier.vaadin;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Map;
import module.projects.presentationTier.vaadin.reportType.ReportType;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import pt.ist.bennu.core.util.BundleUtil;
import pt.ist.vaadinframework.annotation.EmbeddedComponent;
import pt.ist.vaadinframework.ui.EmbeddedComponentContainer;
import com.vaadin.terminal.StreamResource;
import com.vaadin.terminal.ThemeResource;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.CustomComponent;
import com.vaadin.ui.Layout;
import com.vaadin.ui.VerticalLayout;
@EmbeddedComponent(path = { "projectsService" })
public class ProjectsComponent extends CustomComponent implements EmbeddedComponentContainer {
Layout layout;
ReportType reportType;
public ProjectsComponent() {
layout = new VerticalLayout();
setCompositionRoot(layout);
}
@Override
public void setArguments(Map<String, String> arguments) {
// TODO Auto-generated method stub
String projectID = arguments.get("unit");
String reportTypeString = arguments.get("reportType");
reportType = ReportType.getReportFromType(reportTypeString, arguments);
if (reportType != null) {
Button generateExcellButton =
new Button(BundleUtil.getFormattedStringFromResourceBundle("resources/projectsResources",
"financialprojectsreports.button.excelExport"));
generateExcellButton.setIcon(new ThemeResource("icons/excel.gif"));
generateExcellButton.addListener(new Button.ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
exportToExcel();
}
});
if (reportType.isToExport()) {
layout.addComponent(generateExcellButton);
}
layout.addComponent(reportType.getComponent());
}
}
@Override
public boolean isAllowedToOpen(Map<String, String> parameters) {
// TODO Auto-generated method stub
return true;
}
public void exportToExcel() {
HSSFWorkbook wb = new HSSFWorkbook();
HSSFFont headersFont = wb.createFont();
headersFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
HSSFCellStyle style = wb.createCellStyle();
style.setFont(headersFont);
HSSFSheet sheet = wb.createSheet(reportType.getLabel());
sheet.setGridsPrinted(false);
HSSFRow row = sheet.createRow(0);
HSSFCell cell = row.createCell(0);
cell.setCellValue(reportType.getLabel());
cell.setCellStyle(style);
if (reportType.getHeader() != null) {
reportType.getHeader().write(sheet, headersFont);
}
reportType.write(sheet, headersFont);
final ByteArrayOutputStream outStream = new ByteArrayOutputStream();
StreamResource.StreamSource source = new StreamResource.StreamSource() {
@Override
public InputStream getStream() {
ByteArrayInputStream inStream = new ByteArrayInputStream(outStream.toByteArray());
return inStream;
}
};
try {
wb.write(outStream);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
StreamResource resource = new StreamResource(source, reportType.getLabel() + ".xls", layout.getApplication());
layout.getWindow().open(resource, reportType.getLabel());
}
}