package org.orienteer.core.widget.command.modal; import com.google.inject.Inject; import org.apache.wicket.WicketRuntimeException; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator; import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn; import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn; import org.apache.wicket.extensions.markup.html.repeater.data.table.ISortableDataProvider; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.markup.repeater.Item; import org.apache.wicket.model.AbstractReadOnlyModel; import org.apache.wicket.model.IModel; import org.apache.wicket.model.PropertyModel; import org.apache.wicket.model.ResourceModel; import org.orienteer.core.component.BootstrapType; import org.orienteer.core.component.FAIconType; import org.orienteer.core.component.command.AjaxCommand; import org.orienteer.core.component.table.component.GenericTablePanel; import org.orienteer.core.widget.AbstractWidget; import org.orienteer.core.widget.DashboardPanel; import org.orienteer.core.widget.IWidgetTypesRegistry; import ru.ydn.wicket.wicketorientdb.model.JavaSortableDataProvider; import ru.ydn.wicket.wicketorientdb.model.SimpleNamingModel; import java.util.ArrayList; import java.util.List; /** * Dialog for modal window to unhide a widgets * * @param <T> the type of main data object for {@link DashboardPanel} */ public abstract class UnhideWidgetDialog<T> extends Panel { @Inject private IWidgetTypesRegistry registry; public UnhideWidgetDialog(String id) { super(id); List<IColumn<String, String>> columns = new ArrayList<IColumn<String,String>>(); columns.add(new AbstractColumn<String, String>(new ResourceModel("widget.id")) { @Override public void populateItem(Item<ICellPopulator<String>> cellItem, String componentId, final IModel<String> rowModel) { cellItem.add(new Label(componentId, new SimpleNamingModel<String>("widget", new AbstractReadOnlyModel<String>() { @Override public String getObject() { AbstractWidget<T> widget = (AbstractWidget<T>)getDashboardPanel().getWidgetsContainer().get(rowModel.getObject()); return registry.lookupByWidgetClass((Class<? extends AbstractWidget<T>>)widget.getClass()).getId(); } }))); } }); columns.add(new AbstractColumn<String, String>(null) { private static final long serialVersionUID = 1L; @Override public void populateItem(Item<ICellPopulator<String>> cellItem, String componentId, final IModel<String> rowModel) { cellItem.add(new AjaxCommand<T>(componentId, "command.unhide") { @Override public void onClick(AjaxRequestTarget target) { AbstractWidget<T> widget = (AbstractWidget<T>)getDashboardPanel().getWidgetsContainer().get(rowModel.getObject()); onSelectWidget(widget, target); } }.setIcon(FAIconType.play_circle_o).setBootstrapType(BootstrapType.INFO)); } }); ISortableDataProvider<String, String> provider = new JavaSortableDataProvider<String, String>(new PropertyModel<List<String>>(this, "hiddenWidgetIds")); GenericTablePanel<String> tablePanel = new GenericTablePanel<String>("tablePanel", columns, provider, 20); add(tablePanel); } protected abstract void onSelectWidget(AbstractWidget<T> widget, AjaxRequestTarget target); public DashboardPanel<T> getDashboardPanel() { DashboardPanel<T> dashboard = findParent(DashboardPanel.class); if(dashboard==null) { throw new WicketRuntimeException("No dashboard found for widget: "+this); } return dashboard; } public List<String> getHiddenWidgetIds() { DashboardPanel<T> dashboard = getDashboardPanel(); List<String> ids = new ArrayList<String>(); for(AbstractWidget<T> widget : dashboard.getWidgets()) { if(widget.isHidden()) ids.add(widget.getId()); } return ids; } }