package com.andreiolar.abms.client.widgets; import java.util.Date; import com.andreiolar.abms.client.rpc.DBCheckUpkeepReportExists; import com.andreiolar.abms.client.rpc.DBCheckUpkeepReportExistsAsync; import com.andreiolar.abms.client.utils.DateUtil; import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.Style.FontWeight; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.rpc.ServiceDefTarget; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.Widget; import gwt.material.design.addins.client.fileuploader.MaterialFileUploader; import gwt.material.design.addins.client.fileuploader.MaterialUploadLabel; import gwt.material.design.addins.client.fileuploader.base.UploadFile; import gwt.material.design.addins.client.fileuploader.events.ErrorEvent; import gwt.material.design.addins.client.fileuploader.events.ErrorEvent.ErrorHandler; import gwt.material.design.addins.client.fileuploader.events.SendingEvent; import gwt.material.design.addins.client.fileuploader.events.SendingEvent.SendingHandler; import gwt.material.design.addins.client.fileuploader.events.SuccessEvent; import gwt.material.design.addins.client.fileuploader.events.SuccessEvent.SuccessHandler; import gwt.material.design.addins.client.stepper.MaterialStep; import gwt.material.design.addins.client.stepper.MaterialStepper; import gwt.material.design.client.constants.Color; import gwt.material.design.client.constants.TextAlign; import gwt.material.design.client.ui.MaterialLabel; import gwt.material.design.client.ui.MaterialLoader; import gwt.material.design.client.ui.MaterialPanel; import gwt.material.design.client.ui.MaterialToast; import gwt.material.design.client.ui.html.Br; import gwt.material.design.client.ui.html.Hr; public class UploadUpkeepWidget extends Composite implements CustomWidget { private String previousMonth; private String year; public UploadUpkeepWidget() { this.previousMonth = DateUtil.getPreviousMonthAsString(new Date()); this.year = DateUtil.getYearForPreviousMonth(new Date()); initWidget(initializeWidget()); } @Override public Widget initializeWidget() { MaterialPanel panel = new MaterialPanel(); MaterialLabel title = new MaterialLabel("Upload Upkeep Report"); title.setTextColor(Color.BLUE); title.setTextAlign(TextAlign.CENTER); title.setFontSize("36px"); title.setFontWeight(FontWeight.BOLD); panel.add(title); panel.add(new Hr()); DBCheckUpkeepReportExistsAsync rpcService = (DBCheckUpkeepReportExistsAsync) GWT.create(DBCheckUpkeepReportExists.class); ServiceDefTarget target = (ServiceDefTarget) rpcService; String moduleRelativeURL = GWT.getModuleBaseURL() + "DBCheckUpkeepReportExistsImpl"; target.setServiceEntryPoint(moduleRelativeURL); rpcService.checkUpkeepReport(previousMonth + " " + year, new AsyncCallback<Void>() { @Override public void onSuccess(Void result) { MaterialPanel successPanel = new MaterialPanel(); successPanel.addStyleName("upkeep-uploaded-panel"); successPanel.setMarginTop(25.0); MaterialLabel titleLabel = new MaterialLabel(); titleLabel.setText("Nothing to do here."); titleLabel.setTextColor(Color.BLUE); titleLabel.setFontSize("18px"); titleLabel.setPaddingTop(20.0); titleLabel.setPaddingLeft(15.0); successPanel.add(titleLabel); successPanel.add(new Br()); MaterialLabel textLabel = new MaterialLabel(); textLabel.setText("Upkeep report already submitted for " + previousMonth + " " + year + "."); textLabel.setFontSize("16px"); textLabel.setPaddingLeft(15.0); textLabel.setPaddingBottom(20.0); successPanel.add(textLabel); panel.add(successPanel); } @Override public void onFailure(Throwable caught) { MaterialStepper stepper = new MaterialStepper(); stepper.setMarginTop(25.0); MaterialStep stepOne = new MaterialStep(); MaterialStep stepTwo = new MaterialStep(); stepTwo.setEnabled(false); MaterialStep stepThree = new MaterialStep(); stepThree.setEnabled(false); // Step 1 Excel stepOne.setStep(1); stepOne.setTitle("Excel File Upload"); stepOne.setDescription("Please select the Excel File you want to upload."); MaterialPanel stepOnePanel = new MaterialPanel(); stepOnePanel.setWidth("100%"); MaterialFileUploader excelFileUploader = new MaterialFileUploader(); excelFileUploader.setUrl(GWT.getModuleBaseURL() + "excelUploader"); excelFileUploader.setMaxFileSize(10); excelFileUploader.setShadow(1); excelFileUploader.setAcceptedFiles(".xlsx"); excelFileUploader.addSendingHandler(new SendingHandler<UploadFile>() { @Override public void onSending(SendingEvent<UploadFile> event) { MaterialLoader.showLoading(true); } }); excelFileUploader.addSuccessHandler(new SuccessHandler<UploadFile>() { @Override public void onSuccess(SuccessEvent<UploadFile> event) { MaterialLoader.showLoading(false); stepper.setSuccess(""); stepTwo.setEnabled(true); stepper.nextStep(); stepOne.setEnabled(false); } }); excelFileUploader.addErrorHandler(new ErrorHandler<UploadFile>() { @Override public void onError(ErrorEvent<UploadFile> event) { MaterialLoader.showLoading(false); MaterialToast.fireToast( "Error uploading Excel file: " + event.getResponse().getCode() + ": " + event.getResponse().getMessage(), "rounded"); } }); MaterialUploadLabel excelLabel = new MaterialUploadLabel("Excel File Uploader", "Selcect or drag and drop files to upload."); excelFileUploader.add(excelLabel); stepOnePanel.add(excelFileUploader); stepOne.add(stepOnePanel); // Step 2 PDF stepTwo.setStep(2); stepTwo.setTitle("PDF File Upload"); stepTwo.setDescription("Please select the PDF File you want to upload."); MaterialPanel stepTwoPanel = new MaterialPanel(); stepTwoPanel.setWidth("100%"); MaterialFileUploader pdfFileUploader = new MaterialFileUploader(); pdfFileUploader.setUrl(GWT.getModuleBaseURL() + "uploader?type=upkeep&extension=pdf"); pdfFileUploader.setMaxFileSize(10); pdfFileUploader.setShadow(1); pdfFileUploader.setAcceptedFiles(".pdf"); pdfFileUploader.addSendingHandler(new SendingHandler<UploadFile>() { @Override public void onSending(SendingEvent<UploadFile> event) { MaterialLoader.showLoading(true); } }); pdfFileUploader.addSuccessHandler(new SuccessHandler<UploadFile>() { @Override public void onSuccess(SuccessEvent<UploadFile> event) { MaterialLoader.showLoading(false); stepper.setSuccess(""); stepThree.setEnabled(true); stepper.nextStep(); stepTwo.setEnabled(false); } }); pdfFileUploader.addErrorHandler(new ErrorHandler<UploadFile>() { @Override public void onError(ErrorEvent<UploadFile> event) { MaterialLoader.showLoading(false); MaterialToast.fireToast( "Error uploading PDF file: " + event.getResponse().getCode() + ": " + event.getResponse().getMessage(), "rounded"); } }); MaterialUploadLabel pdfLabel = new MaterialUploadLabel("PDF File Uploader", "Selcect or drag and drop files to upload."); pdfFileUploader.add(pdfLabel); stepTwoPanel.add(pdfFileUploader); stepTwo.add(stepTwoPanel); // Step 2 ZIP stepThree.setStep(3); stepThree.setTitle("ZIP Upload"); stepThree.setDescription("Please select the ZIP Archive you want to upload."); MaterialPanel stepThreePanel = new MaterialPanel(); stepThreePanel.setWidth("100%"); MaterialFileUploader zipFileUploader = new MaterialFileUploader(); zipFileUploader.setUrl(GWT.getModuleBaseURL() + "uploader?type=upkeep&extension=zip"); zipFileUploader.setMaxFileSize(10); zipFileUploader.setShadow(1); zipFileUploader.setAcceptedFiles(".zip"); zipFileUploader.addSendingHandler(new SendingHandler<UploadFile>() { @Override public void onSending(SendingEvent<UploadFile> event) { MaterialLoader.showLoading(true); } }); zipFileUploader.addSuccessHandler(new SuccessHandler<UploadFile>() { @Override public void onSuccess(SuccessEvent<UploadFile> event) { MaterialLoader.showLoading(false); stepper.setSuccess(""); stepThree.setEnabled(false); MaterialToast.fireToast("All files were uploaded successfully."); panel.clear(); panel.add(new UploadUpkeepWidget()); } }); zipFileUploader.addErrorHandler(new ErrorHandler<UploadFile>() { @Override public void onError(ErrorEvent<UploadFile> event) { MaterialLoader.showLoading(false); MaterialToast.fireToast( "Error uploading ZIP archive: " + event.getResponse().getCode() + ": " + event.getResponse().getMessage(), "rounded"); } }); MaterialUploadLabel zipLabel = new MaterialUploadLabel("ZIP Archive Uploader", "Selcect or drag and drop files to upload."); zipFileUploader.add(zipLabel); stepThreePanel.add(zipFileUploader); stepThree.add(stepThreePanel); stepper.add(stepOne); stepper.add(stepTwo); stepper.add(stepThree); panel.add(stepper); } }); return panel; } }