/* * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * eHour is sponsored by TE-CON - http://www.te-con.nl/ */ package net.rrm.ehour.ui.admin.config.panel; import net.rrm.ehour.config.EhourConfig; import net.rrm.ehour.data.DateRange; import net.rrm.ehour.persistence.value.ImageLogo; import net.rrm.ehour.report.criteria.ReportCriteria; import net.rrm.ehour.report.criteria.UserSelectedCriteria; import net.rrm.ehour.report.reports.element.FlatReportElement; import net.rrm.ehour.ui.admin.config.MainConfigBackingBean; import net.rrm.ehour.ui.common.form.ImageUploadForm; import net.rrm.ehour.ui.common.report.excel.ExcelRequestHandler; import net.rrm.ehour.ui.common.util.WebGeo; import net.rrm.ehour.ui.timesheet.export.TimesheetExcelExport; import net.rrm.ehour.ui.timesheet.export.TimesheetExportParameter; import net.rrm.ehour.util.DateUtil; import org.apache.wicket.AttributeModifier; import org.apache.wicket.extensions.ajax.markup.html.form.upload.UploadProgressBar; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.image.Image; import org.apache.wicket.markup.html.link.Link; import org.apache.wicket.model.IModel; import org.apache.wicket.model.ResourceModel; import org.apache.wicket.request.resource.DynamicImageResource; import java.util.*; /** * Created on Apr 22, 2009, 4:14:39 PM * * @author Thies Edeling (thies@te-con.nl) */ public class SkinConfigPanel extends AbstractConfigPanel { private static final long serialVersionUID = -1274285277029402888L; private Image previewImage; public SkinConfigPanel(String id, IModel<MainConfigBackingBean> model) { super(id, model, WebGeo.W_CONTENT_MEDIUM); } @SuppressWarnings("serial") @Override protected void addFormComponents(Form<?> form) { previewImage = createPreviewImage(); form.add(previewImage); form.add(new UploadProgressBar("progress", form)); form.add(new Link<Void>("excelPreview") { @Override public void onClick() { createDummyExcelExport(); } }); } @SuppressWarnings("serial") @Override protected Form<Void> createForm(String id, IModel<MainConfigBackingBean> model) { return new ImageUploadForm(id) { @Override protected void uploadImage(ImageLogo logo) { if (!getConfig().isInDemoMode()) { getConfigService().persistExcelLogo(logo); updatePreviewImage(); } else { replaceFeedbackMessage(new ResourceModel("demoMode")); } } @Override protected void uploadImageError() { replaceFeedbackMessage(new ResourceModel("general.image.invalid")); } }; } private void updatePreviewImage() { Image replacement = createPreviewImage(); previewImage.replaceWith(replacement); previewImage = replacement; } private Image createPreviewImage() { final ImageLogo excelLogo = getConfigService().getExcelLogo(); int width = excelLogo.getWidth(); double divideBy = width / 350d; double height = (double) excelLogo.getHeight() / divideBy; Image img = new Image("excelImage", "img"); img.setOutputMarkupId(true); img.add(AttributeModifier.replace("width", "350")); img.add(AttributeModifier.replace("height", Integer.toString((int) height))); img.setImageResource(new DynamicImageResource() { @Override protected byte[] getImageData(Attributes attributes) { return excelLogo.getImageData(); } }); return img; } private void createDummyExcelExport() { final UserSelectedCriteria userSelectedCriteria = new UserSelectedCriteria(); userSelectedCriteria.getCustomParameters().put(TimesheetExportParameter.INCL_SIGN_OFF.name(), Boolean.TRUE); userSelectedCriteria.setReportRange(TimesheetExportDummyDataGenerator.getDateRangeForCurrentMonth()); final ReportCriteria criteria = new ReportCriteria(userSelectedCriteria); final TimesheetExcelExport timesheetExcelExport = new TimesheetExcelExport(criteria); getRequestCycle().scheduleRequestHandlerAfterCurrent(new ExcelRequestHandler(timesheetExcelExport.getFilenameWihoutSuffix(), timesheetExcelExport)); } public static class TimesheetExportDummyDataGenerator { public static List<FlatReportElement> createMonthData(EhourConfig config) { List<FlatReportElement> elements = new ArrayList<>(); DateRange range = getDateRangeForCurrentMonth(); List<Date> month = DateUtil.createDateSequence(range, config); for (Date date : month) { if (Math.random() >= 0.2) { elements.add(createElement(date)); } } return elements; } public static DateRange getDateRangeForCurrentMonth() { Calendar cal = GregorianCalendar.getInstance(); cal.set(Calendar.MONTH, Calendar.NOVEMBER); return DateUtil.getDateRangeForMonth(cal); } private static FlatReportElement createElement(Date date) { FlatReportElement element = new FlatReportElement(); element.setCustomerCode("TE1"); element.setCustomerName("TEST #1"); element.setProjectName("Project #1"); element.setProjectCode("PRJ"); element.setDayDate(date); element.setTotalHours(Math.random() * 8); return element; } } }