package org.orienteer.birt.component; import java.util.List; import org.apache.wicket.Component; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior; import org.apache.wicket.ajax.markup.html.navigation.paging.AjaxPagingNavigator; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.form.TextField; import org.apache.wicket.markup.html.link.ResourceLink; import org.apache.wicket.markup.html.list.ListItem; import org.apache.wicket.markup.html.list.ListView; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.model.PropertyModel; import org.eclipse.birt.report.engine.api.EngineException; import org.orienteer.birt.component.resources.ExcelBirtResource; import org.orienteer.birt.component.resources.HtmlBirtResource; import org.orienteer.birt.component.resources.PDFBirtResource; import org.orienteer.birt.component.service.BirtReportParameterDefinition; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.common.base.Strings; /** * Panel for runtime birt report manage * */ public class BirtManagementPanel extends Panel{ private static final long serialVersionUID = 1L; private static final Logger LOG = LoggerFactory.getLogger(BirtManagementPanel.class); private static final String PAGER_NAME = "paginator"; //private static final String BUTTONS_NAME = "buttons"; public BirtManagementPanel(String id,final AbstractBirtReportPanel reportPanel) { super(id); final AjaxPagingNavigator pager = new AjaxPagingNavigator(PAGER_NAME, reportPanel) { private static final long serialVersionUID = 1L; @Override protected void onAjaxEvent(AjaxRequestTarget target) { target.add(reportPanel); target.add(this); } }; add(pager); add(new ResourceLink<>("HTML", new HtmlBirtResource(reportPanel))); add(new ResourceLink<>("PDF", new PDFBirtResource(reportPanel))); add(new ResourceLink<>("Excel", new ExcelBirtResource(reportPanel))); add(new ParamsListView("params",reportPanel.getParametersDefenitions(),reportPanel,pager)); add(new ParamsListView("hiddenParams",reportPanel.getHiddenParametersDefinitions(),reportPanel,pager)); } //////////////////////////////////////////////////////////////////////// private class ParamsListView extends ListView<BirtReportParameterDefinition>{ /** * */ private static final long serialVersionUID = 1L; private AbstractBirtReportPanel reportPanel; private Component pager; public ParamsListView(String id, List<BirtReportParameterDefinition> list,AbstractBirtReportPanel reportPanel,Component pager) { super(id, list); this.reportPanel = reportPanel; this.pager = pager; } @Override protected void populateItem(ListItem<BirtReportParameterDefinition> item) { String name = item.getModelObject().getName(); item.add(new Label("parameterName",name)); String defaultValue = item.getModelObject().getDefaultValue(); Object value = reportPanel.getParameter(name); if (Strings.isNullOrEmpty((String) value)){ reportPanel.setParameter(name, defaultValue); } item.add(new TextField<>("parameterInput",new PropertyModel<>(reportPanel,"config.parameters["+name+"]")) .add(new AjaxFormComponentUpdatingBehavior("change"){ /** * */ private static final long serialVersionUID = 1L; @Override protected void onUpdate(AjaxRequestTarget target) { try { reportPanel.setCurrentPage(0); reportPanel.updateReportCache(); target.add(reportPanel); target.add(pager); } catch (EngineException e) { String message = e.getMessage(); error("Cannot update report cache:"+message); LOG.error("Can't update report cache", e); } } })); } } //////////////////////////////////////////////////////////////////////// }