Compare commits
1 Commits
| Author | SHA1 | Date |
|---|---|---|
|
|
c4933274d3 | 1 year ago |
@ -0,0 +1,22 @@
|
||||
package crm.utils;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.filechooser.FileNameExtensionFilter;
|
||||
import java.io.File;
|
||||
|
||||
public class ReadDataUtils {
|
||||
|
||||
public static File ReadFile(String dialogMEssage, JFrame parent, String fileExtensionDescription,
|
||||
String... fileExtension) {
|
||||
JFileChooser chooser = new JFileChooser();
|
||||
FileNameExtensionFilter filter = new FileNameExtensionFilter(fileExtensionDescription, fileExtension);
|
||||
chooser.setFileFilter(filter);
|
||||
int returnVal = chooser.showOpenDialog(parent);
|
||||
if (returnVal == JFileChooser.APPROVE_OPTION) {
|
||||
System.out.println("You chose to open this file: " + chooser.getSelectedFile().getName());
|
||||
return chooser.getSelectedFile();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,62 @@
|
||||
package crm.utils;
|
||||
|
||||
import com.opencsv.CSVWriter;
|
||||
import com.opencsv.bean.ColumnPositionMappingStrategy;
|
||||
import com.opencsv.bean.StatefulBeanToCsv;
|
||||
import com.opencsv.bean.StatefulBeanToCsvBuilder;
|
||||
import com.opencsv.exceptions.CsvException;
|
||||
import crm.entity.Customer;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.io.PrintWriter;
|
||||
import java.util.List;
|
||||
|
||||
public class WriteCsvToResponse {
|
||||
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(WriteCsvToResponse.class);
|
||||
|
||||
public static void writeCustomers(PrintWriter printWriter, List<Customer> customers) {
|
||||
try {
|
||||
ColumnPositionMappingStrategy columnPositionMappingStrategy = new ColumnPositionMappingStrategy();
|
||||
|
||||
columnPositionMappingStrategy.setType(Customer.class);
|
||||
columnPositionMappingStrategy.generateHeader();
|
||||
|
||||
String[] columns = new String[]{"id", "name", "email", "phone", "firstName", "lastName", "city", "address", "enabled"};
|
||||
columnPositionMappingStrategy.setColumnMapping(columns);
|
||||
|
||||
StatefulBeanToCsv statefulBeanToCsv = new StatefulBeanToCsvBuilder(printWriter)
|
||||
.withQuotechar(CSVWriter.NO_QUOTE_CHARACTER)
|
||||
.withMappingStrategy(columnPositionMappingStrategy)
|
||||
.withSeparator(',')
|
||||
.build();
|
||||
|
||||
statefulBeanToCsv.write(customers);
|
||||
} catch (CsvException ex) {
|
||||
LOGGER.error("Error mapping Bean to CSV", ex);
|
||||
}
|
||||
}
|
||||
|
||||
public static void writeCustomer(PrintWriter printWriter, Customer customer) {
|
||||
try {
|
||||
ColumnPositionMappingStrategy columnPositionMappingStrategy = new ColumnPositionMappingStrategy();
|
||||
|
||||
columnPositionMappingStrategy.setType(Customer.class);
|
||||
|
||||
String[] columns = new String[]{"id", "name", "email", "phone", "firstName", "lastName", "city", "address", "enabled"};
|
||||
columnPositionMappingStrategy.setColumnMapping(columns);
|
||||
|
||||
StatefulBeanToCsv statefulBeanToCsv = new StatefulBeanToCsvBuilder(printWriter)
|
||||
.withQuotechar(CSVWriter.NO_QUOTE_CHARACTER)
|
||||
.withMappingStrategy(columnPositionMappingStrategy)
|
||||
.withSeparator(',')
|
||||
.build();
|
||||
|
||||
statefulBeanToCsv.write(customer);
|
||||
} catch (CsvException ex) {
|
||||
LOGGER.error("Error mapping Bean to CSV", ex);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,40 @@
|
||||
package crm.view;
|
||||
|
||||
import org.springframework.web.servlet.view.AbstractView;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.util.Map;
|
||||
|
||||
public abstract class AbstractCsvView extends AbstractView {
|
||||
|
||||
private static final String CONTENT_TYPE = "text/csv";
|
||||
|
||||
private String url;
|
||||
|
||||
public AbstractCsvView() {
|
||||
setContentType(CONTENT_TYPE);
|
||||
}
|
||||
|
||||
|
||||
public void setUrl(String url) {
|
||||
this.url = url;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean generatesDownloadContent() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected final void renderMergedOutputModel(
|
||||
Map<String, Object> model, HttpServletRequest request, HttpServletResponse response) throws Exception {
|
||||
response.setContentType(getContentType());
|
||||
buildCsvDocument(model, request, response);
|
||||
}
|
||||
|
||||
protected abstract void buildCsvDocument(
|
||||
Map<String, Object> model, HttpServletRequest request, HttpServletResponse response)
|
||||
throws Exception;
|
||||
|
||||
}
|
||||
@ -0,0 +1,107 @@
|
||||
package crm.view;
|
||||
|
||||
import com.itextpdf.text.Document;
|
||||
import com.itextpdf.text.DocumentException;
|
||||
import com.itextpdf.text.PageSize;
|
||||
import com.itextpdf.text.pdf.PdfWriter;
|
||||
import org.springframework.web.servlet.view.AbstractView;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.util.Map;
|
||||
|
||||
public abstract class AbstractPdfView extends AbstractView {
|
||||
|
||||
/**
|
||||
* This constructor sets the appropriate content type "application/pdf".
|
||||
* Note that IE won't take much notice of this, but there's not a lot we
|
||||
* can do about this. Generated documents should have a ".pdf" extension.
|
||||
*/
|
||||
public AbstractPdfView() {
|
||||
setContentType("application/pdf");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean generatesDownloadContent() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected final void renderMergedOutputModel(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response) throws Exception {
|
||||
|
||||
// IE workaround: write into byte array first.
|
||||
ByteArrayOutputStream baos = createTemporaryOutputStream();
|
||||
|
||||
// Apply preferences and build metadata.
|
||||
Document document = new Document(PageSize.A4.rotate(), 36, 36, 54, 36);
|
||||
PdfWriter writer = PdfWriter.getInstance(document, baos);
|
||||
prepareWriter(model, writer, request);
|
||||
buildPdfMetadata(model, document, request);
|
||||
|
||||
// Build PDF document.
|
||||
document.open();
|
||||
buildPdfDocument(model, document, writer, request, response);
|
||||
document.close();
|
||||
|
||||
// Flush to HTTP response.
|
||||
writeToResponse(response, baos);
|
||||
}
|
||||
|
||||
/**
|
||||
* Prepare the given PdfWriter. Called before building the PDF document,
|
||||
* that is, before the call to {@code Document.open()}.
|
||||
* <p>Useful for registering a page event listener, for example.
|
||||
* The default implementation sets the viewer preferences as returned
|
||||
* by this class's {@code getViewerPreferences()} method.
|
||||
* @param model the model, in case meta information must be populated from it
|
||||
* @param writer the PdfWriter to prepare
|
||||
* @param request in case we need locale etc. Shouldn't look at attributes.
|
||||
* @throws DocumentException if thrown during writer preparation
|
||||
*/
|
||||
protected void prepareWriter(Map<String, Object> model, PdfWriter writer, HttpServletRequest request) throws DocumentException {
|
||||
writer.setViewerPreferences(getViewerPreferences());
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the viewer preferences for the PDF file.
|
||||
* <p>By default returns {@code AllowPrinting} and
|
||||
* {@code PageLayoutSinglePage}, but can be subclassed.
|
||||
* The subclass can either have fixed preferences or retrieve
|
||||
* them from bean properties defined on the View.
|
||||
* @return an int containing the bits information against PdfWriter definitions
|
||||
*/
|
||||
protected int getViewerPreferences() {
|
||||
return PdfWriter.ALLOW_PRINTING | PdfWriter.PageLayoutSinglePage;
|
||||
}
|
||||
|
||||
/**
|
||||
* Populate the iText Document's meta fields (author, title, etc.).
|
||||
* <br>Default is an empty implementation. Subclasses may override this method
|
||||
* to add meta fields such as title, subject, author, creator, keywords, etc.
|
||||
* This method is called after assigning a PdfWriter to the Document and
|
||||
* before calling {@code document.open()}.
|
||||
* @param model the model, in case meta information must be populated from it
|
||||
* @param document the iText document being populated
|
||||
* @param request in case we need locale etc. Shouldn't look at attributes.
|
||||
*/
|
||||
protected void buildPdfMetadata(Map<String, Object> model, Document document, HttpServletRequest request) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Subclasses must implement this method to build an iText PDF document,
|
||||
* given the model. Called between {@code Document.open()} and
|
||||
* {@code Document.close()} calls.
|
||||
* <p>Note that the passed-in HTTP response is just supposed to be used
|
||||
* for setting cookies or other HTTP headers. The built PDF document itself
|
||||
* will automatically get written to the response after this method returns.
|
||||
* @param model the model Map
|
||||
* @param document the iText Document to add elements to
|
||||
* @param writer the PdfWriter to use
|
||||
* @param request in case we need locale etc. Shouldn't look at attributes.
|
||||
* @param response in case we need to set cookies. Shouldn't write to it.
|
||||
* @throws Exception any exception that occurred during document building
|
||||
*/
|
||||
protected abstract void buildPdfDocument(Map<String, Object> model, Document document, PdfWriter writer,
|
||||
HttpServletRequest request, HttpServletResponse response) throws Exception;
|
||||
}
|
||||
@ -0,0 +1,35 @@
|
||||
package crm.view;
|
||||
|
||||
import crm.entity.User;
|
||||
import org.supercsv.io.CsvBeanWriter;
|
||||
import org.supercsv.io.ICsvBeanWriter;
|
||||
import org.supercsv.prefs.CsvPreference;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class CsvView extends AbstractCsvView {
|
||||
|
||||
@Override
|
||||
protected void buildCsvDocument(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response) throws Exception {
|
||||
|
||||
response.setHeader("Content-Disposition", "attachment; filename=\"my-csv-file.csv\"");
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
List<User> users = (List<User>) model.get("users");
|
||||
String[] header = {"FirstName", "LastName", "Username", "Email", "Password", "Enabled", "Role_id", "Role_name"};
|
||||
ICsvBeanWriter csvWriter = new CsvBeanWriter(response.getWriter(),
|
||||
CsvPreference.STANDARD_PREFERENCE);
|
||||
|
||||
csvWriter.writeHeader(header);
|
||||
|
||||
for (User user : users) {
|
||||
csvWriter.write(user, header);
|
||||
}
|
||||
csvWriter.close();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,77 @@
|
||||
package crm.view;
|
||||
|
||||
import crm.entity.User;
|
||||
import org.apache.poi.hssf.util.HSSFColor;
|
||||
import org.apache.poi.ss.usermodel.*;
|
||||
import org.springframework.web.servlet.view.document.AbstractXlsView;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class ExcelView extends AbstractXlsView{
|
||||
|
||||
@Override
|
||||
protected void buildExcelDocument(Map<String, Object> model,
|
||||
Workbook workbook,
|
||||
HttpServletRequest request,
|
||||
HttpServletResponse response) throws Exception {
|
||||
|
||||
// change the file name
|
||||
response.setHeader("Content-Disposition", "attachment; filename=\"my-xls-file.xls\"");
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
List<User> users = (List<User>) model.get("users");
|
||||
|
||||
// create excel xls sheet
|
||||
Sheet sheet = workbook.createSheet("User Detail");
|
||||
sheet.setDefaultColumnWidth(30);
|
||||
|
||||
// create style for header cells
|
||||
CellStyle style = workbook.createCellStyle();
|
||||
Font font = workbook.createFont();
|
||||
font.setFontName("Arial");
|
||||
style.setFillForegroundColor(HSSFColor.BLUE.index);
|
||||
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
|
||||
font.setBold(true);
|
||||
font.setColor(HSSFColor.WHITE.index);
|
||||
style.setFont(font);
|
||||
|
||||
|
||||
// create header row
|
||||
Row header = sheet.createRow(0);
|
||||
header.createCell(0).setCellValue("FirstName");
|
||||
header.getCell(0).setCellStyle(style);
|
||||
header.createCell(1).setCellValue("LastName");
|
||||
header.getCell(1).setCellStyle(style);
|
||||
header.createCell(2).setCellValue("Username");
|
||||
header.getCell(2).setCellStyle(style);
|
||||
header.createCell(3).setCellValue("Email");
|
||||
header.getCell(3).setCellStyle(style);
|
||||
header.createCell(4).setCellValue("Password");
|
||||
header.getCell(4).setCellStyle(style);
|
||||
header.createCell(5).setCellValue("Enabled");
|
||||
header.getCell(5).setCellStyle(style);
|
||||
header.createCell(6).setCellValue("Role_id");
|
||||
header.getCell(6).setCellStyle(style);
|
||||
header.createCell(7).setCellValue("Role_name");
|
||||
header.getCell(7).setCellStyle(style);
|
||||
|
||||
int rowCount = 1;
|
||||
|
||||
for(User user : users){
|
||||
Row userRow = sheet.createRow(rowCount++);
|
||||
userRow.createCell(0).setCellValue(user.getFirstName());
|
||||
userRow.createCell(1).setCellValue(user.getLastName());
|
||||
userRow.createCell(2).setCellValue(user.getUsername());
|
||||
userRow.createCell(3).setCellValue(user.getEmail());
|
||||
userRow.createCell(4).setCellValue(user.getPassword());
|
||||
userRow.createCell(5).setCellValue(user.getEnabled());
|
||||
userRow.createCell(6).setCellValue(user.getRole().getId());
|
||||
userRow.createCell(7).setCellValue(user.getRole().getName());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,78 @@
|
||||
package crm.view;
|
||||
|
||||
import com.itextpdf.text.*;
|
||||
import com.itextpdf.text.pdf.PdfPCell;
|
||||
import com.itextpdf.text.pdf.PdfPTable;
|
||||
import com.itextpdf.text.pdf.PdfWriter;
|
||||
import crm.entity.User;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.time.LocalDate;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class PdfView extends AbstractPdfView {
|
||||
|
||||
@Override
|
||||
protected void buildPdfDocument(Map<String, Object> model, Document document, PdfWriter writer, HttpServletRequest request, HttpServletResponse response) throws Exception {
|
||||
// change the file name
|
||||
response.setHeader("Content-Disposition", "attachment; filename=\"my-pdf-file.pdf\"");
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
List<User> users = (List<User>) model.get("users");
|
||||
document.add(new Paragraph("Generated Users " + LocalDate.now()));
|
||||
|
||||
PdfPTable table = new PdfPTable(users.stream().findAny().get().getColumnCount());
|
||||
table.setWidthPercentage(100.0f);
|
||||
table.setSpacingBefore(10);
|
||||
|
||||
// define font for table header row
|
||||
Font font = FontFactory.getFont(FontFactory.TIMES);
|
||||
font.setColor(BaseColor.WHITE);
|
||||
|
||||
// define table header cell
|
||||
PdfPCell cell = new PdfPCell();
|
||||
cell.setBackgroundColor(BaseColor.DARK_GRAY);
|
||||
cell.setPadding(5);
|
||||
|
||||
// write table header
|
||||
cell.setPhrase(new Phrase("First Name", font));
|
||||
table.addCell(cell);
|
||||
|
||||
cell.setPhrase(new Phrase("Last Name", font));
|
||||
table.addCell(cell);
|
||||
|
||||
cell.setPhrase(new Phrase("Username", font));
|
||||
table.addCell(cell);
|
||||
|
||||
cell.setPhrase(new Phrase("Email", font));
|
||||
table.addCell(cell);
|
||||
|
||||
cell.setPhrase(new Phrase("Password", font));
|
||||
table.addCell(cell);
|
||||
|
||||
cell.setPhrase(new Phrase("Enabled", font));
|
||||
table.addCell(cell);
|
||||
|
||||
cell.setPhrase(new Phrase("Role_id", font));
|
||||
table.addCell(cell);
|
||||
|
||||
cell.setPhrase(new Phrase("Role_name", font));
|
||||
table.addCell(cell);
|
||||
|
||||
for(User user : users){
|
||||
table.addCell(user.getFirstName());
|
||||
table.addCell(user.getLastName());
|
||||
table.addCell(user.getUsername());
|
||||
table.addCell(user.getEmail());
|
||||
table.addCell(user.getPassword());
|
||||
table.addCell(String.valueOf(user.getEnabled()));
|
||||
table.addCell(String.valueOf(user.getRole().getId()));
|
||||
table.addCell(user.getRole().getName());
|
||||
}
|
||||
|
||||
document.add(table);
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,16 @@
|
||||
package crm.viewResolver;
|
||||
|
||||
import crm.view.CsvView;
|
||||
import org.springframework.web.servlet.View;
|
||||
import org.springframework.web.servlet.ViewResolver;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
public class CsvViewResolver implements ViewResolver {
|
||||
|
||||
@Override
|
||||
public View resolveViewName(String s, Locale locale) throws Exception {
|
||||
return new CsvView();
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,16 @@
|
||||
package crm.viewResolver;
|
||||
|
||||
import crm.view.ExcelView;
|
||||
import org.springframework.web.servlet.View;
|
||||
import org.springframework.web.servlet.ViewResolver;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
public class ExcelViewResolver implements ViewResolver {
|
||||
|
||||
@Override
|
||||
public View resolveViewName(String s, Locale locale) throws Exception {
|
||||
return new ExcelView();
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,16 @@
|
||||
package crm.viewResolver;
|
||||
|
||||
import crm.view.PdfView;
|
||||
import org.springframework.web.servlet.View;
|
||||
import org.springframework.web.servlet.ViewResolver;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
public class PdfViewResolver implements ViewResolver {
|
||||
|
||||
@Override
|
||||
public View resolveViewName(String s, Locale locale) throws Exception {
|
||||
return new PdfView();
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Reference in new issue