package org.ovirt.engine.ui.uicommonweb.models.vms; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.businessentities.VmPool; import org.ovirt.engine.core.common.queries.IdQueryParameters; import org.ovirt.engine.core.common.queries.VdcQueryReturnValue; import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.ui.frontend.Frontend; import org.ovirt.engine.ui.uicommonweb.help.HelpTag; import org.ovirt.engine.ui.uicommonweb.models.SearchableListModel; import org.ovirt.engine.ui.uicompat.ConstantsManager; import org.ovirt.engine.ui.uicompat.EventArgs; import org.ovirt.engine.ui.uicompat.PropertyChangedEventArgs; public class VmAppListModel<E> extends SearchableListModel<E, String> { @Override public void setItems(Collection<String> value) { if (items != value) { itemsChanging(value, items); items = value; itemsChanged(); getItemsChangedEvent().raise(this, EventArgs.EMPTY); onPropertyChanged(new PropertyChangedEventArgs("Items")); //$NON-NLS-1$ } } public VmAppListModel() { setTitle(ConstantsManager.getInstance().getConstants().applicationsTitle()); setHelpTag(HelpTag.applications); setHashName("applications"); //$NON-NLS-1$ } @Override protected void entityPropertyChanged(Object sender, PropertyChangedEventArgs e) { super.entityPropertyChanged(sender, e); if (e.propertyName.equals("appList")) { //$NON-NLS-1$ updateAppList(); } } @Override protected void onEntityChanged() { super.onEntityChanged(); updateAppList(); } protected void updateAppList() { if (getEntity() instanceof VM) { updateAppListFromVm((VM) getEntity()); } else { VmPool pool = (VmPool) getEntity(); if (pool != null) { Frontend.getInstance().runQuery(VdcQueryType.GetVmDataByPoolId, new IdQueryParameters(pool.getVmPoolId()), new AsyncQuery<VdcQueryReturnValue>(result -> { if (result != null) { VM vm = result.getReturnValue(); if (vm != null) { updateAppListFromVm(vm); } } })); } } } private void updateAppListFromVm(VM vm) { setItems(null); if (vm != null && vm.getAppList() != null) { ArrayList<String> list = new ArrayList<>(); String[] array = vm.getAppList().split("[,]", -1); //$NON-NLS-1$ for (String item : array) { list.add(item); } Collections.sort(list); setItems(list); } else { setItems(new ArrayList<String>()); } } @Override protected void syncSearch() { updateAppList(); setIsQueryFirstTime(false); } @Override protected String getListName() { return "VmAppListModel"; //$NON-NLS-1$ } }