package org.ovirt.engine.ui.webadmin.section.main.view.popup.host.panels;
import java.util.List;
import org.ovirt.engine.core.compat.StringHelper;
import org.ovirt.engine.ui.uicommonweb.models.hosts.HostSetupNetworksModel;
import org.ovirt.engine.ui.webadmin.widget.editor.AnimatedVerticalPanel;
import com.google.gwt.dom.client.Element;
import com.google.gwt.event.dom.client.DragDropEventBase;
import com.google.gwt.event.dom.client.DragEnterEvent;
import com.google.gwt.event.dom.client.DragLeaveEvent;
import com.google.gwt.event.dom.client.DragOverEvent;
import com.google.gwt.event.dom.client.DropEvent;
import com.google.gwt.user.client.ui.FocusPanel;
import com.google.gwt.user.client.ui.VerticalPanel;
public abstract class UnassignedNetworksPanel<T extends NetworkItemPanel<?>> extends FocusPanel {
protected final AnimatedVerticalPanel animatedPanel = new AnimatedVerticalPanel();
protected NetworkPanelsStyle style;
private HostSetupNetworksModel setupModel;
public UnassignedNetworksPanel() {
getElement().setDraggable(Element.DRAGGABLE_FALSE);
// drag enter
addBitlessDomHandler(event -> doDrag(event, false), DragEnterEvent.getType());
// drag over
addBitlessDomHandler(event -> doDrag(event, false), DragOverEvent.getType());
// drag leave
addBitlessDomHandler(event -> animatedPanel.getElement().removeClassName(style.networkGroupDragOver()), DragLeaveEvent.getType());
// drop
addBitlessDomHandler(event -> {
event.preventDefault();
doDrag(event, true);
animatedPanel.getElement().removeClassName(style.networkGroupDragOver());
}, DropEvent.getType());
setWidget(animatedPanel);
}
public void setStyle(final NetworkPanelsStyle style) {
this.style = style;
addStyleName("ts10"); //$NON-NLS-1$
animatedPanel.getElement().addClassName(style.unassignedNetworksPanel());
}
protected void stylePanel(VerticalPanel panel) {
panel.addStyleName("ts2"); //$NON-NLS-1$
panel.setWidth("100%"); //$NON-NLS-1$
}
public abstract void addAll(List<T> list, boolean fadeIn);
@Override
public void clear() {
animatedPanel.clear();
}
public void setSpacing(int spacing) {
animatedPanel.setSpacing(spacing);
}
private void doDrag(DragDropEventBase<?> event, boolean isDrop) {
String dragDropEventData = NetworkItemPanel.getDragDropEventData(event, isDrop);
String type = NetworkItemPanel.getType(dragDropEventData);
String data = NetworkItemPanel.getData(dragDropEventData);
if (!StringHelper.isNullOrEmpty(data)) {
if (setupModel.candidateOperation(data, type, null, null, isDrop)) {
animatedPanel.getElement().addClassName(style.networkGroupDragOver());
// allow drag/drop (look at http://www.w3.org/TR/html5/dnd.html#dndevents)
event.preventDefault();
}
}
}
public void setSetupModel(HostSetupNetworksModel setupModel) {
this.setupModel = setupModel;
}
}