package au.com.vaadinutils.crud;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.vaadin.dialogs.ConfirmDialog;
import com.vaadin.addon.jpacontainer.EntityItem;
import com.vaadin.ui.Notification;
import com.vaadin.ui.Notification.Type;
import com.vaadin.ui.UI;
public class CrudActionDelete<E extends CrudEntity> implements CrudAction<E>
{
private static final long serialVersionUID = 1L;
private boolean isDefault = true;
private DeleteAction<E> action;
private String message;
Logger logger = LogManager.getLogger();
public CrudActionDelete()
{
this("");
}
/**
*
* @param message
* - provide additional information to be displayed in the delete
* confirm dialog
*/
public CrudActionDelete(String message)
{
this(message, null);
}
/**
*
* @param message
* - provide additional information to be displayed in the delete
* confirm dialog
* @param action
* - perform additional cleanup like deleting files, called
* before the entity is deleted.
*/
public CrudActionDelete(String message, DeleteAction<E> action)
{
this.action = action;
this.message = message;
}
@Override
public void exec(final BaseCrudView<E> crud, final EntityItem<E> entity)
{
DeleteVetoResponseData response = crud.canDelete(entity.getEntity());
if (response.canDelete)
{
String titleText = crud.getTitleText();
if (titleText.contains("getTitleText()"))
{
titleText = entity.getEntity().getClass().getSimpleName() + " (getTitleText() not implemented)";
}
String name = entity.getEntity().getName();
if (name == null)
{
name = "" + entity.getEntity().getId();
}
ConfirmDialog.show(UI.getCurrent(), "Confirm Delete",
"Are you sure you want to delete " + titleText + " - '" + name + "' ? " + message, "Delete",
"Cancel", new ConfirmDialog.Listener()
{
private static final long serialVersionUID = 1L;
@Override
public void onClose(ConfirmDialog dialog)
{
if (dialog.isConfirmed())
{
if (action != null)
{
try
{
action.delete(entity);
}
catch (Exception e)
{
logger.error(e, e);
Notification.show("Errors occurred when deleting " + e.getMessage(),
Type.ERROR_MESSAGE);
}
}
crud.delete();
}
}
});
}
else
{
Notification.show(response.getMessage(), Type.ERROR_MESSAGE);
}
}
@Override
public String toString()
{
return "Delete";
}
@Override
public boolean isDefault()
{
return isDefault;
}
public void setIsDefault(boolean isDefault)
{
this.isDefault = isDefault;
}
@Override
public boolean showPreparingDialog()
{
return false;
}
}