package org.ovirt.engine.ui.uicommonweb.models.networks;
import java.util.Arrays;
import org.ovirt.engine.core.common.businessentities.network.Network;
import org.ovirt.engine.core.common.businessentities.network.NetworkView;
import org.ovirt.engine.core.common.businessentities.network.VnicProfileView;
import org.ovirt.engine.core.common.mode.ApplicationMode;
import org.ovirt.engine.ui.uicommonweb.Linq;
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.profiles.EditVnicProfileModel;
import org.ovirt.engine.ui.uicommonweb.models.profiles.NewVnicProfileModel;
import org.ovirt.engine.ui.uicommonweb.models.profiles.VnicProfileModel;
import org.ovirt.engine.ui.uicommonweb.models.vms.RemoveVnicProfileModel;
import org.ovirt.engine.ui.uicompat.ConstantsManager;
import org.ovirt.engine.ui.uicompat.PropertyChangedEventArgs;
public class NetworkProfileListModel extends SearchableListModel<NetworkView, VnicProfileView> {
private UICommand newCommand;
private UICommand editCommand;
private UICommand removeCommand;
public NetworkProfileListModel() {
setTitle(ConstantsManager.getInstance().getConstants().vnicProfilesTitle());
setHelpTag(HelpTag.profiles);
setHashName("profiles"); //$NON-NLS-1$
setAvailableInModes(ApplicationMode.VirtOnly);
setComparator(Linq.VnicProfileViewComparator);
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();
}
public UICommand getNewCommand() {
return newCommand;
}
private void setNewCommand(UICommand value) {
newCommand = value;
}
@Override
public UICommand getEditCommand() {
return editCommand;
}
private void setEditCommand(UICommand value) {
editCommand = value;
}
public UICommand getRemoveCommand() {
return removeCommand;
}
private void setRemoveCommand(UICommand value) {
removeCommand = value;
}
public void newProfile() {
if (getWindow() != null) {
return;
}
NewVnicProfileModel model = new NewVnicProfileModel(this, getEntity().getCompatibilityVersion(),
getEntity().getDataCenterId());
setWindow(model);
initProfileNetwork(model);
}
public void edit() {
if (getWindow() != null) {
return;
}
EditVnicProfileModel model =
new EditVnicProfileModel(this,
getEntity().getCompatibilityVersion(),
getSelectedItem(),
getEntity().getDataCenterId());
setWindow(model);
initProfileNetwork(model);
}
public void remove() {
if (getWindow() != null) {
return;
}
RemoveVnicProfileModel model = new RemoveVnicProfileModel(this, getSelectedItems(), false);
setWindow(model);
}
private void initProfileNetwork(VnicProfileModel model) {
model.getNetwork().setItems(Arrays.<Network>asList(getEntity()));
model.getNetwork().setSelectedItem(getEntity());
model.getNetwork().setIsChangeable(false);
}
public void cancel() {
setWindow(null);
}
@Override
protected void onEntityChanged() {
super.onEntityChanged();
if (getEntity() != null) {
getSearchCommand().execute();
}
updateActionAvailability();
}
@Override
public void search() {
if (getEntity() != null) {
super.search();
}
}
@Override
protected void syncSearch() {
if (getEntity() == null) {
return;
}
AsyncDataProvider.getInstance().getVnicProfilesByNetworkId(new SetRawItemsAsyncQuery(), getEntity().getId());
}
@Override
protected void entityPropertyChanged(Object sender, PropertyChangedEventArgs e) {
super.entityPropertyChanged(sender, e);
if (e.propertyName.equals("name")) { //$NON-NLS-1$
getSearchCommand().execute();
}
}
private void updateActionAvailability() {
NetworkView network = getEntity();
getNewCommand().setIsExecutionAllowed(network != null && network.isVmNetwork());
getEditCommand().setIsExecutionAllowed(getSelectedItems() != null && getSelectedItems().size() == 1);
getRemoveCommand().setIsExecutionAllowed(getSelectedItems() != null && getSelectedItems().size() > 0);
}
@Override
protected void onSelectedItemChanged() {
super.onSelectedItemChanged();
updateActionAvailability();
}
@Override
protected void selectedItemsChanged() {
super.selectedItemsChanged();
updateActionAvailability();
}
@Override
public void executeCommand(UICommand command) {
super.executeCommand(command);
if (command == getNewCommand()) {
newProfile();
}
else if (command == getEditCommand()) {
edit();
}
else if (command == getRemoveCommand()) {
remove();
}
else if ("Cancel".equals(command.getName())) { //$NON-NLS-1$
cancel();
}
}
@Override
protected String getListName() {
return "NetworkProfileListModel"; //$NON-NLS-1$
}
}