package org.ovirt.engine.ui.uicommonweb.models.providers;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.ovirt.engine.core.common.VdcObjectType;
import org.ovirt.engine.core.common.businessentities.Provider;
import org.ovirt.engine.core.common.businessentities.ProviderType;
import org.ovirt.engine.core.common.interfaces.SearchType;
import org.ovirt.engine.core.common.mode.ApplicationMode;
import org.ovirt.engine.core.common.queries.SearchParameters;
import org.ovirt.engine.core.common.queries.VdcQueryType;
import org.ovirt.engine.core.searchbackend.SearchObjects;
import org.ovirt.engine.ui.uicommonweb.UICommand;
import org.ovirt.engine.ui.uicommonweb.help.HelpTag;
import org.ovirt.engine.ui.uicommonweb.models.HasEntity;
import org.ovirt.engine.ui.uicommonweb.models.ISupportSystemTreeContext;
import org.ovirt.engine.ui.uicommonweb.models.ListWithSimpleDetailsModel;
import org.ovirt.engine.ui.uicommonweb.models.SystemTreeItemModel;
import org.ovirt.engine.ui.uicommonweb.models.SystemTreeItemType;
import org.ovirt.engine.ui.uicommonweb.place.WebAdminApplicationPlaces;
import org.ovirt.engine.ui.uicompat.ConstantsManager;
import com.google.inject.Inject;
public class ProviderListModel extends ListWithSimpleDetailsModel<Void, Provider> implements ISupportSystemTreeContext {
private static final String CMD_ADD = "Add"; //$NON-NLS-1$
private static final String CMD_EDIT = "Edit"; //$NON-NLS-1$
private static final String CMD_REMOVE = "Remove"; //$NON-NLS-1$
private UICommand addCommand;
private UICommand editCommand;
private UICommand removeCommand;
private final ProviderNetworkListModel providerNetworkListModel;
private final ProviderSecretListModel providerSecretListModel;
private SystemTreeItemModel systemTreeSelectedItem;
@Inject
public ProviderListModel(final ProviderGeneralModel providerGeneralModel,
ProviderNetworkListModel providerNetworkListModel,
ProviderSecretListModel providerSecretListModel) {
this.providerNetworkListModel = providerNetworkListModel;
this.providerSecretListModel = providerSecretListModel;
setModelList(providerGeneralModel, providerNetworkListModel, providerSecretListModel);
setTitle(ConstantsManager.getInstance().getConstants().providersTitle());
setHelpTag(HelpTag.providers);
setApplicationPlace(WebAdminApplicationPlaces.providerMainTabPlace);
setHashName("providers"); //$NON-NLS-1$
setDefaultSearchString("Provider:"); //$NON-NLS-1$
setSearchString(getDefaultSearchString());
setSearchObjects(new String[] { SearchObjects.PROVIDER_OBJ_NAME, SearchObjects.PROVIDER_PLU_OBJ_NAME });
setAvailableInModes(ApplicationMode.VirtOnly);
setAddCommand(new UICommand(CMD_ADD, this));
setEditCommand(new UICommand(CMD_EDIT, this));
setRemoveCommand(new UICommand(CMD_REMOVE, this));
updateActionAvailability();
getSearchNextPageCommand().setIsAvailable(true);
getSearchPreviousPageCommand().setIsAvailable(true);
}
private void setModelList(final ProviderGeneralModel providerGeneralModel,
final ProviderNetworkListModel providerNetworkListModel,
final ProviderSecretListModel providerSecretListModel) {
List<HasEntity<Provider>> list = new ArrayList<>();
list.add(providerGeneralModel);
list.add(providerNetworkListModel);
list.add(providerSecretListModel);
setDetailModels(list);
}
public UICommand getAddCommand() {
return addCommand;
}
private void setAddCommand(UICommand value) {
addCommand = 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;
}
@Override
protected void updateDetailsAvailability() {
super.updateDetailsAvailability();
Provider provider = getSelectedItem();
if (provider != null) {
providerNetworkListModel.setIsAvailable(provider.getType()
.getProvidedTypes()
.contains(VdcObjectType.Network));
providerSecretListModel.setIsAvailable(provider.getType() == ProviderType.OPENSTACK_VOLUME);
}
}
@Override
protected String getListName() {
return "ProviderListModel"; //$NON-NLS-1$
}
@Override
public SystemTreeItemModel getSystemTreeSelectedItem() {
return systemTreeSelectedItem;
}
@Override
public void setSystemTreeSelectedItem(SystemTreeItemModel value) {
if (systemTreeSelectedItem != value) {
systemTreeSelectedItem = value;
onSystemTreeSelectedItemChanged();
}
}
private void onSystemTreeSelectedItemChanged() {
updateActionAvailability();
}
@Override
protected void onSelectedItemChanged() {
super.onSelectedItemChanged();
updateActionAvailability();
}
@Override
protected void selectedItemsChanged() {
super.selectedItemsChanged();
updateActionAvailability();
}
private void updateActionAvailability() {
Collection<Provider> tempVar = getSelectedItems();
Collection<Provider> selectedItems = (tempVar != null) ? tempVar : new ArrayList();
getEditCommand().setIsExecutionAllowed(selectedItems.size() == 1);
getRemoveCommand().setIsExecutionAllowed(selectedItems.size() > 0);
// Hide add/remove commands if a specific provider is chosen in the system tree
boolean isAvailable =
getSystemTreeSelectedItem() == null
|| getSystemTreeSelectedItem().getType() != SystemTreeItemType.Provider;
getAddCommand().setIsAvailable(isAvailable);
getRemoveCommand().setIsAvailable(isAvailable);
}
@Override
public boolean isSearchStringMatch(String searchString) {
return searchString.trim().toLowerCase().startsWith("provider"); //$NON-NLS-1$
}
@Override
protected void syncSearch() {
SearchParameters tempVar =
new SearchParameters(applySortOptions(getSearchString()), SearchType.Provider, isCaseSensitiveSearch());
tempVar.setMaxCount(getSearchPageSize());
super.syncSearch(VdcQueryType.Search, tempVar);
}
@Override
public boolean supportsServerSideSorting() {
return true;
}
private void add() {
if (getWindow() != null) {
return;
}
setWindow(new AddProviderModel(this));
}
private void edit() {
if (getWindow() != null) {
return;
}
setWindow(new EditProviderModel(this, getSelectedItem()));
}
private void remove() {
if (getConfirmWindow() != null) {
return;
}
setConfirmWindow(new RemoveProvidersModel(this));
}
@Override
public void executeCommand(UICommand command) {
super.executeCommand(command);
if (command == getAddCommand()) {
add();
} else if (command == getEditCommand()) {
edit();
} else if (command == getRemoveCommand()) {
remove();
}
}
}