package org.ovirt.engine.ui.uicommonweb.models.clusters; import java.util.Collections; import org.ovirt.engine.core.compat.*; import org.ovirt.engine.ui.uicompat.*; import org.ovirt.engine.core.common.businessentities.*; import org.ovirt.engine.core.common.vdscommands.*; import org.ovirt.engine.core.common.queries.*; import org.ovirt.engine.core.common.action.*; import org.ovirt.engine.ui.frontend.*; import org.ovirt.engine.ui.uicommonweb.*; import org.ovirt.engine.ui.uicommonweb.models.*; import org.ovirt.engine.core.common.*; import org.ovirt.engine.ui.uicommonweb.models.configure.*; import org.ovirt.engine.ui.uicompat.*; import org.ovirt.engine.core.common.interfaces.*; import org.ovirt.engine.core.common.businessentities.*; import org.ovirt.engine.core.common.queries.*; import org.ovirt.engine.ui.uicommonweb.dataprovider.*; import org.ovirt.engine.ui.uicommonweb.*; import org.ovirt.engine.ui.uicommonweb.models.*; @SuppressWarnings("unused") public class ClusterListModel extends ListWithDetailsModel implements ISupportSystemTreeContext { 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 UICommand privateGuideCommand; public UICommand getGuideCommand() { return privateGuideCommand; } private void setGuideCommand(UICommand value) { privateGuideCommand = value; } // get { return SelectedItems == null ? new object[0] : SelectedItems.Cast<VDSGroup>().Select(a => a.ID).Cast<object>().ToArray(); } protected Object[] getSelectedKeys() { if (getSelectedItems() == null) { return new Object[0]; } else { java.util.ArrayList<Object> items = new java.util.ArrayList<Object>(); for (Object i : getSelectedItems()) { items.add(((VDSGroup)i).getID()); } return items.toArray(new Object[]{}); } } private Object privateGuideContext; public Object getGuideContext() { return privateGuideContext; } public void setGuideContext(Object value) { privateGuideContext = value; } public ClusterListModel() { setTitle("Clusters"); setDefaultSearchString("Cluster:"); setSearchString(getDefaultSearchString()); setNewCommand(new UICommand("New", this)); setEditCommand(new UICommand("Edit", this)); setRemoveCommand(new UICommand("Remove", this)); setGuideCommand(new UICommand("Guide", this)); UpdateActionAvailability(); getSearchNextPageCommand().setIsAvailable(true); getSearchPreviousPageCommand().setIsAvailable(true); } public void Guide() { ClusterGuideModel model = new ClusterGuideModel(); setWindow(model); model.setTitle("New Cluster - Guide Me"); model.setHashName("new_cluster_-_guide_me"); model.setEntity(getGuideContext() != null ? DataProvider.GetClusterById(getGuideContext() instanceof Guid ? (Guid)getGuideContext() : (Guid)getGuideContext()) : null); UICommand tempVar = new UICommand("Cancel", this); tempVar.setTitle("Configure Later"); tempVar.setIsDefault(true); tempVar.setIsCancel(true); model.getCommands().add(tempVar); } @Override protected void InitDetailModels() { super.InitDetailModels(); ObservableCollection<EntityModel> list = new ObservableCollection<EntityModel>(); list.add(new ClusterPolicyModel()); list.add(new ClusterHostListModel()); list.add(new ClusterVmListModel()); list.add(new ClusterNetworkListModel()); list.add(new PermissionListModel()); setDetailModels(list); } @Override public boolean IsSearchStringMatch(String searchString) { return searchString.trim().toLowerCase().startsWith("cluster"); } @Override protected void SyncSearch() { SearchParameters tempVar = new SearchParameters(getSearchString(), SearchType.Cluster); tempVar.setMaxCount(getSearchPageSize()); super.SyncSearch(VdcQueryType.Search, tempVar); } @Override protected void AsyncSearch() { super.AsyncSearch(); setAsyncResult(Frontend.RegisterSearch(getSearchString(), SearchType.Cluster, getSearchPageSize())); setItems(getAsyncResult().getData()); } public void New() { if (getWindow() != null) { return; } ClusterModel clusterModel = new ClusterModel(); clusterModel.Init(false); setWindow(clusterModel); clusterModel.setTitle("New Cluster"); clusterModel.setHashName("new_cluster"); clusterModel.setIsNew(true); AsyncQuery _asyncQuery = new AsyncQuery(); _asyncQuery.setModel(this); _asyncQuery.asyncCallback = new INewAsyncCallback() { public void OnSuccess(Object model, Object result) { ClusterListModel clModel = (ClusterListModel)model; ClusterModel cModel = (ClusterModel)clModel.getWindow(); java.util.ArrayList<storage_pool> dataCenters = (java.util.ArrayList<storage_pool>)result; cModel.getDataCenter().setItems(dataCenters); //Be aware of system tree selection. //Strict data center as neccessary. if (clModel.getSystemTreeSelectedItem() != null && clModel.getSystemTreeSelectedItem().getType() != SystemTreeItemType.System) { storage_pool selectDataCenter = (storage_pool)clModel.getSystemTreeSelectedItem().getEntity(); cModel.getDataCenter().setSelectedItem(Linq.FirstOrDefault(dataCenters, new Linq.DataCenterPredicate(selectDataCenter.getId()))); cModel.getDataCenter().setIsChangable(false); } else { cModel.getDataCenter().setSelectedItem(Linq.FirstOrDefault(dataCenters)); } UICommand tempVar = new UICommand("OnSave", clModel); tempVar.setTitle("OK"); tempVar.setIsDefault(true); cModel.getCommands().add(tempVar); UICommand tempVar2 = new UICommand("Cancel", clModel); tempVar2.setTitle("Cancel"); tempVar2.setIsCancel(true); cModel.getCommands().add(tempVar2); }}; AsyncDataProvider.GetDataCenterList(_asyncQuery); } public void Edit() { VDSGroup cluster = (VDSGroup)getSelectedItem(); if (getWindow() != null) { return; } ClusterModel model = new ClusterModel(); model.Init(true); model.setEntity(cluster); setWindow(model); model.setTitle("Edit Cluster"); model.setHashName("edit_cluster"); model.setOriginalName(cluster.getname()); model.getName().setEntity(cluster.getname()); if (getSystemTreeSelectedItem() != null && getSystemTreeSelectedItem().getType() == SystemTreeItemType.Cluster) { model.getName().setIsChangable(false); model.getName().setInfo("Cannot edit Cluster's Name in tree context"); ; } UICommand tempVar = new UICommand("OnSave", this); tempVar.setTitle("OK"); tempVar.setIsDefault(true); model.getCommands().add(tempVar); UICommand tempVar2 = new UICommand("Cancel", this); tempVar2.setTitle("Cancel"); tempVar2.setIsCancel(true); model.getCommands().add(tempVar2); } public void remove() { if (getWindow() != null) { return; } ConfirmationModel model = new ConfirmationModel(); setWindow(model); model.setTitle("Remove Cluster(s)"); model.setHashName("remove_cluster"); model.setMessage("Cluster(s)"); java.util.ArrayList<String> list = new java.util.ArrayList<String>(); for (VDSGroup a : Linq.<VDSGroup>Cast(getSelectedItems())) { list.add(a.getname()); } model.setItems(list); UICommand tempVar = new UICommand("OnRemove", this); tempVar.setTitle("OK"); tempVar.setIsDefault(true); model.getCommands().add(tempVar); UICommand tempVar2 = new UICommand("Cancel", this); tempVar2.setTitle("Cancel"); tempVar2.setIsCancel(true); model.getCommands().add(tempVar2); } public void OnRemove() { ConfirmationModel model = (ConfirmationModel)getWindow(); if (model.getProgress() != null) { return; } java.util.ArrayList<VdcActionParametersBase> prms = new java.util.ArrayList<VdcActionParametersBase>(); for (Object a : getSelectedItems()) { prms.add(new VdsGroupParametersBase(((VDSGroup)a).getID())); } model.StartProgress(null); Frontend.RunMultipleAction(VdcActionType.RemoveVdsGroup, prms, new IFrontendMultipleActionAsyncCallback() { @Override public void Executed(FrontendMultipleActionAsyncResult result) { ConfirmationModel localModel = (ConfirmationModel)result.getState(); localModel.StopProgress(); Cancel(); } }, model); } public void OnSave() { ClusterModel model = (ClusterModel)getWindow(); if (!model.Validate()) { return; } if (!model.getIsNew() && !((Version)model.getVersion().getSelectedItem()).equals(((VDSGroup)getSelectedItem()).getcompatibility_version())) { ConfirmationModel confirmModel = new ConfirmationModel(); setConfirmWindow(confirmModel); confirmModel.setTitle("Change Cluster Compatibility Version"); confirmModel.setHashName("change_cluster_compatibility_version"); confirmModel.setMessage("You are about to change the Cluster Compatibility Version. Are you sure you want to continue?"); UICommand tempVar = new UICommand("OnSaveInternal", this); tempVar.setTitle("OK"); tempVar.setIsDefault(true); getConfirmWindow().getCommands().add(tempVar); UICommand tempVar2 = new UICommand("CancelConfirmation", this); tempVar2.setTitle("Cancel"); tempVar2.setIsCancel(true); getConfirmWindow().getCommands().add(tempVar2); } else { OnSaveInternal(); } } public void OnSaveInternal() { ClusterModel model = (ClusterModel)getWindow(); if (model.getProgress() != null) { return; } //cancel confirm window if there is CancelConfirmation(); VDSGroup cluster = model.getIsNew() ? new VDSGroup() : (VDSGroup)Cloner.clone(getSelectedItem()); Version version = (Version)model.getVersion().getSelectedItem(); cluster.setname((String)model.getName().getEntity()); cluster.setdescription((String)model.getDescription().getEntity()); cluster.setstorage_pool_id(((storage_pool)model.getDataCenter().getSelectedItem()).getId()); cluster.setcpu_name(((ServerCpu)model.getCPU().getSelectedItem()).getCpuName()); cluster.setmax_vds_memory_over_commit(model.getMemoryOverCommit()); cluster.setTransparentHugepages(version.compareTo(new Version("3.0")) >= 0); cluster.setcompatibility_version(version); cluster.setMigrateOnError(model.getMigrateOnErrorOption()); model.StartProgress(null); Frontend.RunAction(model.getIsNew() ? VdcActionType.AddVdsGroup : VdcActionType.UpdateVdsGroup, new VdsGroupOperationParameters(cluster), new IFrontendActionAsyncCallback() { @Override public void Executed(FrontendActionAsyncResult result) { ClusterListModel localModel = (ClusterListModel)result.getState(); localModel.PostOnSaveInternal(result.getReturnValue()); } }, this); } public void PostOnSaveInternal(VdcReturnValueBase returnValue) { ClusterModel model = (ClusterModel)getWindow(); model.StopProgress(); if (returnValue != null && returnValue.getSucceeded()) { Cancel(); if (model.getIsNew()) { setGuideContext(returnValue.getActionReturnValue()); UpdateActionAvailability(); getGuideCommand().Execute(); } } } public void Cancel() { CancelConfirmation(); setGuideContext(null); setWindow(null); UpdateActionAvailability(); } public void CancelConfirmation() { setConfirmWindow(null); } @Override protected void OnSelectedItemChanged() { super.OnSelectedItemChanged(); UpdateActionAvailability(); } @Override protected void SelectedItemsChanged() { super.SelectedItemsChanged(); UpdateActionAvailability(); } @Override protected void ItemsCollectionChanged(Object sender, NotifyCollectionChangedEventArgs e) { super.ItemsCollectionChanged(sender, e); //Try to select an item corresponding to the system tree selection. if (getSystemTreeSelectedItem() != null && getSystemTreeSelectedItem().getType() == SystemTreeItemType.Cluster) { VDSGroup cluster = (VDSGroup)getSystemTreeSelectedItem().getEntity(); setSelectedItem(Linq.FirstOrDefault(Linq.<VDSGroup>Cast(getItems()), new Linq.ClusterPredicate(cluster.getID()))); } } private void UpdateActionAvailability() { getEditCommand().setIsExecutionAllowed(getSelectedItem() != null && getSelectedItems() != null && getSelectedItems().size() == 1); getGuideCommand().setIsExecutionAllowed(getGuideContext() != null || (getSelectedItem() != null && getSelectedItems() != null && getSelectedItems().size() == 1)); getRemoveCommand().setIsExecutionAllowed(getSelectedItems() != null && getSelectedItems().size() > 0); //System tree dependent actions. boolean isAvailable = !(getSystemTreeSelectedItem() != null && getSystemTreeSelectedItem().getType() == SystemTreeItemType.Cluster); getNewCommand().setIsAvailable(isAvailable); getRemoveCommand().setIsAvailable(isAvailable); } @Override public void ExecuteCommand(UICommand command) { super.ExecuteCommand(command); if (command == getNewCommand()) { New(); } else if (command == getEditCommand()) { Edit(); } else if (command == getRemoveCommand()) { remove(); } else if (command == getGuideCommand()) { Guide(); } else if (StringHelper.stringsEqual(command.getName(), "OnSave")) { OnSave(); } else if (StringHelper.stringsEqual(command.getName(), "Cancel")) { Cancel(); } else if (StringHelper.stringsEqual(command.getName(), "OnRemove")) { OnRemove(); } else if (StringHelper.stringsEqual(command.getName(), "OnSaveInternal")) { OnSaveInternal(); } else if (StringHelper.stringsEqual(command.getName(), "CancelConfirmation")) { CancelConfirmation(); } } private SystemTreeItemModel systemTreeSelectedItem; public SystemTreeItemModel getSystemTreeSelectedItem() { return systemTreeSelectedItem; } public void setSystemTreeSelectedItem(SystemTreeItemModel value) { if (systemTreeSelectedItem != value) { systemTreeSelectedItem = value; OnSystemTreeSelectedItemChanged(); } } private void OnSystemTreeSelectedItemChanged() { UpdateActionAvailability(); } @Override protected String getListName() { return "ClusterListModel"; } }