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 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 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);
}
};
pager.setOutputMarkupId(true);
add(pager);
add(new ResourceLink<>("HTML", new HtmlBirtResource(reportPanel)));
add(new ResourceLink<>("PDF", new PDFBirtResource(reportPanel)));
add(new ResourceLink<>("Excel", new ExcelBirtResource(reportPanel)));
//parameters = reportPanel.getParameter(name)
add(new ParamsListView("params",reportPanel.getParametersDefenitions(),reportPanel,pager));
add(new ParamsListView("hiddenParams",reportPanel.getHiddenParametersDefinitions(),reportPanel,pager));
//add(new ResourceLink<>("parameter", new ExcelBirtResource(reportPanel)));
}
////////////////////////////////////////////////////////////////////////
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);
e.printStackTrace();
}
}
}));
}
}
////////////////////////////////////////////////////////////////////////
}