package org.ovirt.engine.ui.webadmin.section.main.view.popup.scheduling.panels;
import org.ovirt.engine.core.common.scheduling.PolicyUnit;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.ui.uicommonweb.models.configure.scheduling.NewClusterPolicyModel;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.Style.Overflow;
import com.google.gwt.event.dom.client.DragDropEventBase;
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.FlowPanel;
public class PolicyUnitListPanel extends FlowPanel {
private static final int EVENT_DATA_COUNT = 3;
protected NewClusterPolicyModel model;
protected String type;
protected boolean used;
public PolicyUnitListPanel(String type, boolean used) {
this.used = used;
this.type = type;
getElement().getStyle().setOverflow(Overflow.AUTO);
getElement().setDraggable(Element.DRAGGABLE_FALSE);
registerToDragEvents();
}
private boolean doDrag(DragDropEventBase<?> event, boolean isDrop) {
String dragDropEventData = PolicyUnitPanel.getDragDropEventData(event, isDrop);
String[] split = dragDropEventData.split(" "); //$NON-NLS-1$
if (split != null && split.length == EVENT_DATA_COUNT) {
if (!type.equals(split[0])) {
return false;
} else if (Boolean.valueOf(split[2]).equals(used)) {
return false;
}
}
PolicyUnit policyUnit = model.getPolicyUnitsMap().get(Guid.createGuidFromString(split[1]));
if (PolicyUnitPanel.FILTER.equals(split[0])) {
if (used) {
model.addFilter(policyUnit, false, 0);
} else {
model.removeFilter(policyUnit);
}
} else if (FunctionPolicyUnitPanel.FUNCTION.equals(split[0])) {
if (used) {
model.addFunction(policyUnit);
} else {
model.removeFunction(policyUnit);
}
}
return true;
}
private void registerToDragEvents() {
// drag over
addBitlessDomHandler(event -> {
// without registering to this event dnd doesn't get triggered
}, DragOverEvent.getType());
// drag leave
addBitlessDomHandler(event -> {
// without registering to this event dnd doesn't get triggered
}, DragLeaveEvent.getType());
addBitlessDomHandler(event -> {
event.preventDefault();
doDrag(event, true);
}, DropEvent.getType());
}
public NewClusterPolicyModel getModel() {
return model;
}
public void setModel(NewClusterPolicyModel model) {
this.model = model;
}
}