org.wicketstuff.egrid.column.EditableGridActionsPanel Maven / Gradle / Ivy
                 Go to download
                
        
                    Show more of this group  Show more artifacts with this name
Show all versions of wicketstuff-editable-grid Show documentation
                Show all versions of wicketstuff-editable-grid Show documentation
Add/Edit/Delete functionality all at once
                
             The newest version!
        
        package org.wicketstuff.egrid.column;
import org.apache.wicket.MetaDataKey;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.attributes.AjaxCallListener;
import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
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;
import org.wicketstuff.egrid.component.EditableDataTable;
import org.wicketstuff.egrid.component.EditableGridSubmitLink;
import org.wicketstuff.egrid.model.GridOperationData;
import org.wicketstuff.egrid.model.OperationType;
/**
 * 
 * @author Nadeem Mohammad
 * 
 */
public abstract class EditableGridActionsPanel extends Panel
{
	public final static MetaDataKey EDITING = new MetaDataKey()
	{
		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> cellItem)
	{
		super(id);
		@SuppressWarnings("unchecked")
		final Item rowItem = cellItem.findParent(Item.class);
		add(newEditLink(rowItem));
		add(newSaveLink(rowItem));
		add(newCancelLink(rowItem));
		add(newDeleteLink(rowItem));
	}
	private EditableGridSubmitLink newSaveLink(final Item 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 newDeleteLink(final Item rowItem)
	{
		return new AjaxLink("delete")
		{
			private static final long serialVersionUID = 1L;
			@Override
			protected void updateAjaxAttributes(AjaxRequestAttributes attributes)
			{
				super.updateAjaxAttributes(attributes);
				AjaxCallListener listener = new AjaxCallListener();
				listener.onPrecondition("if(!confirm('Do you really want to delete?')){return false;}");
				attributes.getAjaxCallListeners().add(listener);
			}
			@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);
			}
			@Override
			public boolean isVisible() {
				return EditableGridActionsPanel.this.allowDelete(rowItem);
			}
		};
	}
	private AjaxLink newCancelLink(final Item rowItem)
	{
		return new AjaxLink("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 newEditLink(final Item rowItem)
	{
		return new AjaxLink("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 rowItem)
	{
		return rowItem.getMetaData(EDITING);
	}
	
	protected boolean allowDelete(final Item rowItem) {
		return true;
	}
}
                      © 2015 - 2025 Weber Informatics LLC | Privacy Policy