use of com.vaadin.ui.AbstractSelect.AbstractSelectTargetDetails in project VaadinUtils by rlsutton1.
the class BaseCrudView method enableDragAndDropOrdering.
/**
* allows the user to sort the items in the list via drag and drop
*
* @param ordinalField
*/
public void enableDragAndDropOrdering(final SingularAttribute<E, Long> ordinalField) {
dragAndDropOrderingEnabled = true;
this.ordinalField = ordinalField;
container.sort(new Object[] { ordinalField.getName() }, new boolean[] { true });
this.entityTable.setDragMode(TableDragMode.ROW);
this.entityTable.setDropHandler(new DropHandler() {
private static final long serialVersionUID = -6024948983201516170L;
@Override
public AcceptCriterion getAcceptCriterion() {
return SourceIsTarget.get();
}
@SuppressWarnings("unchecked")
@Override
public void drop(DragAndDropEvent event) {
if (isDirty()) {
Notification.show("You must save first", Type.WARNING_MESSAGE);
return;
}
Object draggedItemId = event.getTransferable().getData("itemId");
EntityItem<E> dragged = container.getItem(draggedItemId);
if (dragged != null) {
EntityItemProperty draggedOrdinalProp = dragged.getItemProperty(ordinalField.getName());
if (draggedOrdinalProp != null) {
AbstractSelectTargetDetails td = (AbstractSelectTargetDetails) event.getTargetDetails();
VerticalDropLocation dl = td.getDropLocation();
Object targetId = ((AbstractSelectTargetDetails) event.getTargetDetails()).getItemIdOver();
int idx = container.indexOfId(targetId);
if (dl == VerticalDropLocation.BOTTOM) {
// drop below so move the idx down one
idx++;
}
if (idx > -1) {
targetId = container.getIdByIndex(idx);
}
boolean added = false;
Long ctr = 1l;
for (Object id : container.getItemIds()) {
if (id.equals(targetId)) {
draggedOrdinalProp.setValue(ctr++);
added = true;
}
if (!id.equals(draggedItemId)) {
container.getItem(id).getItemProperty(ordinalField.getName()).setValue(ctr++);
}
}
if (!added) {
draggedOrdinalProp.setValue(ctr++);
}
container.commit();
if (dragAndDropListener != null) {
dragAndDropListener.dropped();
}
// to save.
try {
invokeTopLevelCrudSave();
} catch (Exception e) {
ErrorWindow.showErrorWindow(e);
}
} else {
logger.error("draggedOrdinalProp is null");
}
} else {
logger.error("dragged is null");
}
}
});
}
Aggregations