package ro.nextreports.server.web.core.audit;
import java.util.ArrayList;
import java.util.Arrays;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.markup.html.panel.EmptyPanel;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ro.nextreports.engine.exporter.util.TableData;
import ro.nextreports.server.service.ReportService;
import ro.nextreports.server.service.SecurityService;
import ro.nextreports.server.service.StorageService;
import ro.nextreports.server.web.common.form.FormContentPanel;
import ro.nextreports.server.web.common.form.FormPanel;
import ro.nextreports.server.web.core.BasePage;
import ro.nextreports.server.web.core.audit.list.ListPanel;
import ro.nextreports.server.web.core.audit.rights.RightsPanel;
import ro.nextreports.server.web.core.audit.run.RunPanel;
public class InnerReportsPanel extends Panel {
@SpringBean
private StorageService storageService;
@SpringBean
private SecurityService securityService;
@SpringBean
private ReportService reportService;
private static final Logger LOG = LoggerFactory.getLogger(InnerReportsPanel.class);
private Panel tablePanel;
public InnerReportsPanel(String id) {
super(id);
ListView<InnerReport> listReports = new ListView<InnerReport>("listReports", Arrays.asList(InnerReport.values())) {
@Override
protected void populateItem(ListItem<InnerReport> item) {
item.add(createLink("report", item.getModel()));
//item.add(new Label("description", getString("Section.Audit.innerReports." + item.getModelObject().getDescription() + ".desc")));
}
};
add(listReports);
tablePanel = new EmptyPanel("panel");
tablePanel.setOutputMarkupPlaceholderTag(true);
add(tablePanel);
setOutputMarkupId(true);
}
private AjaxLink<String> createLink(String id, final IModel<InnerReport> model) {
AjaxLink<String> link = new AjaxLink<String>(id) {
@Override
public void onClick(AjaxRequestTarget target) {
click(model.getObject(), target);
}
};
link.add(new Label("label", getString("Section.Audit.innerReports." + model.getObject().toString())));
link.add(new Label("description", getString("Section.Audit.innerReports." + model.getObject().getDescription() + ".desc")));
link.add(AttributeModifier.append("class", "section-" + model.getObject().toString().toLowerCase()));
return link;
}
private void click(InnerReport ir, AjaxRequestTarget target) {
final ModalWindow dialog = findParent(BasePage.class).getDialog();
dialog.setTitle(getString("Section.Audit.innerReports." + ir.toString()));
int width = 500;
FormContentPanel panel;
if (ir.toString().equals(InnerReport.RIGHTS.toString())) {
panel = new RightsPanel() {
@Override
public void onOk(AjaxRequestTarget target) {
TableData data = getResults(getAuditRights());
displayResults(dialog, InnerReport.RIGHTS.toString(), data, getLinkColumns(), getTitle(), target);
}
};
} else if (ir.toString().equals(InnerReport.RUN.toString())) {
width = 350;
panel = new RunPanel() {
@Override
public void onOk(AjaxRequestTarget target) {
TableData data = getResults(getAuditRun());
displayResults(dialog, InnerReport.RUN.toString(), data, getLinkColumns(), getTitle(), target);
}
};
} else if (ir.toString().equals(InnerReport.LIST.toString())) {
width = 250;
panel = new ListPanel() {
@Override
public void onOk(AjaxRequestTarget target) {
TableData data = getResults(getAuditList());
displayResults(dialog, InnerReport.LIST.toString(), data, null, getTitle(), target);
}
};
} else {
panel = new FormContentPanel(FormPanel.CONTENT_ID);
}
dialog.setInitialWidth(width);
dialog.setUseInitialHeight(false);
dialog.setContent(new FormPanel(dialog.getContentId(), panel, true));
dialog.show(target);
}
private void displayResults(ModalWindow dialog, String type, TableData data, ArrayList<Integer> links, String title, AjaxRequestTarget target) {
Panel newPanel;
if (data.getHeader().size() > 0) {
newPanel = new AuditTableRendererPanel("panel", type, new Model(data), new Model(links), new Model(title));
} else {
newPanel = new EmptyPanel("panel");
}
tablePanel.replaceWith(newPanel);
tablePanel = newPanel;
dialog.close(target);
target.add(InnerReportsPanel.this);
}
}