package org.ovirt.engine.ui.uicommonweb.models.templates;
import java.util.ArrayList;
import org.ovirt.engine.core.common.businessentities.Cluster;
import org.ovirt.engine.core.common.businessentities.VmTemplate;
import org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface;
import org.ovirt.engine.core.common.queries.IdQueryParameters;
import org.ovirt.engine.core.common.queries.VdcQueryType;
import org.ovirt.engine.ui.uicommonweb.UICommand;
import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider;
import org.ovirt.engine.ui.uicommonweb.help.HelpTag;
import org.ovirt.engine.ui.uicommonweb.models.SearchableListModel;
import org.ovirt.engine.ui.uicommonweb.models.vms.EditTemplateInterfaceModel;
import org.ovirt.engine.ui.uicommonweb.models.vms.NewTemplateInterfaceModel;
import org.ovirt.engine.ui.uicommonweb.models.vms.RemoveVmTemplateInterfaceModel;
import org.ovirt.engine.ui.uicommonweb.models.vms.VmInterfaceModel;
import org.ovirt.engine.ui.uicompat.ConstantsManager;
@SuppressWarnings("unused")
public class TemplateInterfaceListModel extends SearchableListModel<VmTemplate, VmNetworkInterface> {
private UICommand privateNewCommand;
public UICommand getNewCommand() {
return privateNewCommand;
}
private void setNewCommand(UICommand value) {
privateNewCommand = value;
}
private UICommand privateEditCommand;
public UICommand getEditCommand() {
return privateEditCommand;
}
private void setEditCommand(UICommand value) {
privateEditCommand = value;
}
private UICommand privateRemoveCommand;
public UICommand getRemoveCommand() {
return privateRemoveCommand;
}
private void setRemoveCommand(UICommand value) {
privateRemoveCommand = value;
}
private Cluster cluster = null;
public TemplateInterfaceListModel() {
setTitle(ConstantsManager.getInstance().getConstants().networkInterfacesTitle());
setHelpTag(HelpTag.network_interfaces);
setHashName("network_interfaces"); //$NON-NLS-1$
setNewCommand(new UICommand("New", this)); //$NON-NLS-1$
setEditCommand(new UICommand("Edit", this)); //$NON-NLS-1$
setRemoveCommand(new UICommand("Remove", this)); //$NON-NLS-1$
updateActionAvailability();
}
@Override
protected void onEntityChanged() {
super.onEntityChanged();
getSearchCommand().execute();
updateActionAvailability();
}
@Override
public void search() {
if (getEntity() != null) {
super.search();
}
}
@Override
protected void syncSearch() {
if (getEntity() == null) {
return;
}
super.syncSearch(VdcQueryType.GetTemplateInterfacesByTemplateId,
new IdQueryParameters(getEntity().getId()));
}
private void newEntity() {
if (getWindow() != null) {
return;
}
VmInterfaceModel model =
NewTemplateInterfaceModel.createInstance(getEntity(),
getEntity().getStoragePoolId(),
cluster.getCompatibilityVersion(),
(ArrayList<VmNetworkInterface>) getItems(),
this);
setWindow(model);
}
private void edit() {
if (getWindow() != null) {
return;
}
VmInterfaceModel model =
EditTemplateInterfaceModel.createInstance(getEntity(),
getEntity().getStoragePoolId(),
cluster.getCompatibilityVersion(),
(ArrayList<VmNetworkInterface>) getItems(),
getSelectedItem(),
this);
setWindow(model);
}
private void remove() {
if (getWindow() != null) {
return;
}
RemoveVmTemplateInterfaceModel model = new RemoveVmTemplateInterfaceModel(this, getSelectedItems(), false);
setWindow(model);
}
private void cancel() {
setWindow(null);
}
@Override
protected void selectedItemsChanged() {
super.selectedItemsChanged();
updateActionAvailability();
}
@Override
protected void onSelectedItemChanged() {
super.onSelectedItemChanged();
updateActionAvailability();
}
private void updateActionAvailability() {
getNewCommand().setIsExecutionAllowed(cluster != null);
getEditCommand().setIsExecutionAllowed(getSelectedItems() != null && getSelectedItems().size() == 1
&& getSelectedItem() != null && cluster != null);
getRemoveCommand().setIsExecutionAllowed(getSelectedItems() != null && getSelectedItems().size() > 0);
}
@Override
public void executeCommand(UICommand command) {
super.executeCommand(command);
if (command == getNewCommand()) {
newEntity();
}
else if (command == getEditCommand()) {
edit();
}
else if (command == getRemoveCommand()) {
remove();
}
else if ("Cancel".equals(command.getName())) { //$NON-NLS-1$
cancel();
}
}
@Override
public void setEntity(VmTemplate value) {
cluster = null;
super.setEntity(value);
if (getEntity() != null) {
AsyncDataProvider.getInstance().getClusterById(new AsyncQuery<>(returnValue -> {
cluster = returnValue;
updateActionAvailability();
}), getEntity().getClusterId());
}
}
@Override
protected String getListName() {
return "TemplateInterfaceListModel"; //$NON-NLS-1$
}
}