Package codetroopers.wicket.web.datagrid.toolbar

Source Code of codetroopers.wicket.web.datagrid.toolbar.EditableGridBottomToolbar$AddToolBarForm

package codetroopers.wicket.web.datagrid.toolbar;

import codetroopers.wicket.web.datagrid.column.AbstractEditablePropertyColumn;
import codetroopers.wicket.web.datagrid.column.EditableCellPanel;
import codetroopers.wicket.web.datagrid.component.EditableDataTable;
import codetroopers.wicket.web.datagrid.component.EditableGridSubmitLink;
import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.FormComponent;
import org.apache.wicket.markup.html.form.IFormSubmitter;
import org.apache.wicket.markup.html.form.IFormVisitorParticipant;
import org.apache.wicket.markup.html.list.Loop;
import org.apache.wicket.markup.html.list.LoopItem;
import org.apache.wicket.model.PropertyModel;

import java.util.ArrayList;
import java.util.List;

/**
*
* @author Nadeem Mohammad
*
*/
public abstract class EditableGridBottomToolbar<T, S> extends AbstractEditableGridToolbar {

    private static final long serialVersionUID = 1L;
    private static final String CELL_ID = "cell";
    private static final String CELLS_ID = "cells";

    private T newRow = null;

    protected abstract void onAdd(AjaxRequestTarget target, T newRow);

    public EditableGridBottomToolbar(EditableDataTable<?, ?> table, Class<T> clazz) {
        super(table);
        createNewInstance(clazz);
        AddToolBarForm addToolBarForm = new AddToolBarForm("addToolbarForm");
        add(addToolBarForm);

        addToolBarForm.add(newEditorComponents());
        addToolBarForm.add(newAddButton(addToolBarForm));
    }

    protected void onError(AjaxRequestTarget target) {
    }

    private void createNewInstance(Class<T> clazz) {
        try {
            newRow = clazz.newInstance();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }

    private class AddToolBarForm extends Form<T> implements IFormVisitorParticipant {

        private static final long serialVersionUID = 1L;

        public AddToolBarForm(String id) {
            super(id);
        }

        public boolean processChildren() {
            IFormSubmitter submitter = getRootForm().findSubmittingButton();
            return submitter != null && submitter.getForm() == this;
        }
    }

    private Component newAddButton(WebMarkupContainer encapsulatingContainer) {
        return new EditableGridSubmitLink("add", encapsulatingContainer) {

            private static final long serialVersionUID = 1L;

            @SuppressWarnings("unchecked")
            @Override
            protected void onSuccess(AjaxRequestTarget target) {
                onAdd(target, newRow);
                createNewInstance((Class<T>) newRow.getClass());
                target.add(getTable());

            }

            @Override
            protected void onError(AjaxRequestTarget target) {
                EditableGridBottomToolbar.this.onError(target);
            }
        };
    }

    private Loop newEditorComponents() {
        final List<AbstractEditablePropertyColumn<T, S>> columns = getEditableColumns();
        return new Loop(CELLS_ID, columns.size()) {

            private static final long serialVersionUID = 1L;

            protected void populateItem(LoopItem item) {
                addEditorComponent(item, getEditorColumn(columns, item.getIndex()));
            }
        };
    }

    private void addEditorComponent(LoopItem item, AbstractEditablePropertyColumn<T, S> toolBarCell) {
        item.add(newCell(toolBarCell));
    }

    @SuppressWarnings("unchecked")
    private List<AbstractEditablePropertyColumn<T, S>> getEditableColumns() {
        List<AbstractEditablePropertyColumn<T, S>> columns = new ArrayList<>();
        for (IColumn<?, ?> column : getTable().getColumns()) {
            if (column instanceof AbstractEditablePropertyColumn) {
                columns.add((AbstractEditablePropertyColumn<T, S>) column);
            }

        }

        return columns;
    }

    private Component newCell(AbstractEditablePropertyColumn<T, S> editableGridColumn) {
        EditableCellPanel panel = editableGridColumn.getEditableCellPanel(CELL_ID);
        FormComponent<?> editorComponent = panel.getEditableComponent();
        editorComponent.setDefaultModel(new PropertyModel<T>(newRow, editableGridColumn.getPropertyExpression()));
        editorComponent.add(new AttributeAppender("placeholder",editorComponent.getLabel()));
        return panel;
    }

    private AbstractEditablePropertyColumn<T, S> getEditorColumn(
            final List<AbstractEditablePropertyColumn<T, S>> editorColumn, int index) {
        return editorColumn.get(index);
    }
}
TOP

Related Classes of codetroopers.wicket.web.datagrid.toolbar.EditableGridBottomToolbar$AddToolBarForm

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.