package org.ovirt.engine.ui.common.widget.uicommon.instanceimages;
import org.ovirt.engine.core.common.utils.Pair;
import org.ovirt.engine.ui.common.idhandler.ElementIdHandler;
import org.ovirt.engine.ui.common.idhandler.HasElementId;
import org.ovirt.engine.ui.common.widget.AddRemoveRowWidget;
import org.ovirt.engine.ui.uicommonweb.models.vms.InstanceImageLineModel;
import org.ovirt.engine.ui.uicommonweb.models.vms.InstanceImagesModel;
import com.google.gwt.core.client.GWT;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Widget;
public class InstanceImagesEditor extends AddRemoveRowWidget<InstanceImagesModel, InstanceImageLineModel, InstanceImageLineEditor> implements HasElementId {
private InstanceImagesModel model;
private String elementId = DOM.createUniqueId();
interface WidgetUiBinder extends UiBinder<Widget, InstanceImagesEditor> {
WidgetUiBinder uiBinder = GWT.create(WidgetUiBinder.class);
}
interface WidgetIdHandler extends ElementIdHandler<InstanceImagesEditor> {
WidgetIdHandler idHandler = GWT.create(WidgetIdHandler.class);
}
public interface InstanceImagesWidgetStyle extends WidgetStyle {
String titleStylePadding();
String mainPanel();
String contentPanel();
}
@UiField
Label title;
@UiField
FlowPanel mainPanel;
public InstanceImagesEditor() {
initWidget(WidgetUiBinder.uiBinder.createAndBindUi(this));
WidgetIdHandler.idHandler.generateAndSetIds(this);
}
@Override
public void setUsePatternFly(boolean use) {
super.setUsePatternFly(use);
if (use) {
title.removeStyleName(((InstanceImagesWidgetStyle)style).titleStylePadding());
mainPanel.removeStyleName(((InstanceImagesWidgetStyle)style).mainPanel());
contentPanel.removeStyleName(((InstanceImagesWidgetStyle)style).contentPanel());
}
}
@Override
protected InstanceImageLineEditor createWidget(InstanceImageLineModel value) {
InstanceImageLineEditor editor = new InstanceImageLineEditor();
editor.setElementId(elementId);
editor.edit(value);
return editor;
}
@Override
protected InstanceImageLineModel createGhostValue() {
InstanceImageLineModel lineModel = new InstanceImageLineModel(model);
// the getVm() is null on new VM - that is handled inside the line models
lineModel.initialize(null, model.getVm());
return lineModel;
}
@Override
protected boolean isGhost(InstanceImageLineModel value) {
return value.isGhost();
}
@Override
protected boolean vetoRemoveWidget(final Pair<InstanceImageLineModel, InstanceImageLineEditor> item, final InstanceImageLineModel value, final InstanceImageLineEditor widget) {
model.approveRemoveDisk(item.getFirst(), approved -> {
if (approved) {
doRemoveItem(item, value, widget);
}
});
// will be eventually removed from the callback
return true;
}
@Override
public void edit(final InstanceImagesModel model) {
this.model = model;
super.edit(model);
}
@Override
public void setElementId(String elementId) {
this.elementId = elementId;
}
}