Package codetroopers.wicket.web.datagrid.column

Source Code of codetroopers.wicket.web.datagrid.column.EditableGridActionsPanel

package codetroopers.wicket.web.datagrid.column;

import codetroopers.wicket.web.datagrid.component.EditableDataTable;
import codetroopers.wicket.web.datagrid.component.EditableGridSubmitLink;
import codetroopers.wicket.web.datagrid.model.GridOperationData;
import codetroopers.wicket.web.datagrid.model.OperationType;
import org.apache.wicket.MetaDataKey;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.event.Broadcast;
import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.markup.repeater.Item;

/**
*
* @author Nadeem Mohammad
*
*/
public abstract class EditableGridActionsPanel<T> extends Panel {
    public final static MetaDataKey<Boolean> EDITING = new MetaDataKey<Boolean>() {
        private static final long serialVersionUID = 1L;
    };

    private static final long serialVersionUID = 1L;

    protected abstract void onSave(AjaxRequestTarget target);

    protected abstract void onError(AjaxRequestTarget target);

    protected abstract void onCancel(AjaxRequestTarget target);

    protected abstract void onDelete(AjaxRequestTarget target);

    public EditableGridActionsPanel(String id, final Item<ICellPopulator<T>> cellItem) {
        super(id);

        @SuppressWarnings("unchecked")
        final Item<T> rowItem = cellItem.findParent(Item.class);

        add(newEditLink(rowItem));
        add(newSaveLink(rowItem));
        add(newCancelLink(rowItem));
        add(newDeleteLink(rowItem));
    }

    private EditableGridSubmitLink newSaveLink(final Item<T> rowItem) {
        return new EditableGridSubmitLink("save", rowItem) {

            private static final long serialVersionUID = 1L;

            @Override
            public boolean isVisible() {
                return isThisRowBeingEdited(rowItem);
            }

            @Override
            protected void onSuccess(AjaxRequestTarget target) {
                rowItem.setMetaData(EDITING, Boolean.FALSE);
                send(getPage(), Broadcast.BREADTH, rowItem);
                target.add(rowItem);
                onSave(target);

            }

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

    private AjaxLink<String> newDeleteLink(final Item<T> rowItem) {
        return new AjaxLink<String>("delete") {

            private static final long serialVersionUID = 1L;


            @SuppressWarnings("unchecked")
            @Override
            public void onClick(AjaxRequestTarget target) {
                send(getPage(), Broadcast.BREADTH, new GridOperationData<>(OperationType.DELETE,
                                                                            (T) rowItem.getDefaultModelObject()));
                target.add(rowItem.findParent(EditableDataTable.class));
                onDelete(target);
            }
        };
    }

    private AjaxLink<String> newCancelLink(final Item<T> rowItem) {
        return new AjaxLink<String>("cancel") {

            private static final long serialVersionUID = 1L;

            @Override
            public void onClick(AjaxRequestTarget target) {
                rowItem.setMetaData(EDITING, Boolean.FALSE);
                send(getPage(), Broadcast.BREADTH, rowItem);
                target.add(rowItem);
                onCancel(target);
            }

            @Override
            public boolean isVisible() {
                return isThisRowBeingEdited(rowItem);
            }
        };
    }

    private AjaxLink<String> newEditLink(final Item<T> rowItem) {
        return new AjaxLink<String>("edit") {

            private static final long serialVersionUID = 1L;

            @Override
            public void onClick(AjaxRequestTarget target) {
                rowItem.setMetaData(EDITING, Boolean.TRUE);
                send(getPage(), Broadcast.BREADTH, rowItem);
                target.add(rowItem);
            }

            @Override
            public boolean isVisible() {
                return !isThisRowBeingEdited(rowItem);
            }
        };
    }

    private boolean isThisRowBeingEdited(Item<T> rowItem) {
        return rowItem.getMetaData(EDITING);
    }
}
TOP

Related Classes of codetroopers.wicket.web.datagrid.column.EditableGridActionsPanel

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.