package org.ovirt.engine.ui.uicommon.models.vms;
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.uicommon.*;
import org.ovirt.engine.ui.uicommon.models.*;
import org.ovirt.engine.core.common.*;
import org.ovirt.engine.ui.uicommon.dataprovider.*;
import org.ovirt.engine.ui.uicommon.validation.*;
import org.ovirt.engine.ui.uicompat.*;
import org.ovirt.engine.core.common.businessentities.*;
import org.ovirt.engine.ui.uicommon.*;
import org.ovirt.engine.ui.uicommon.models.*;
@SuppressWarnings("unused")
public class UserPortalNewVmModelBehavior extends NewVmModelBehavior implements IFrontendMultipleQueryAsyncCallback
{
private static final ActionGroup CREATE_VM = ActionGroup.CREATE_VM;
@Override
public void Initialize(SystemTreeItemModel systemTreeSelectedItem)
{
// Get datacenters with permitted create action
AsyncDataProvider.GetDataCentersWithPermittedActionOnClusters(new AsyncQuery(getModel(),
new INewAsyncCallback() {
@Override
public void OnSuccess(Object target, Object returnValue) {
UnitVmModel model = (UnitVmModel)target;
java.util.ArrayList<storage_pool> list = new java.util.ArrayList<storage_pool>();
for (storage_pool a : (java.util.ArrayList<storage_pool>)returnValue)
{
if (a.getstatus() == StoragePoolStatus.Up)
{
list.add(a);
}
}
model.setIsDatacenterAvailable(list.size() > 0);
model.SetDataCenter(model, list);
}
}, getModel().getHash()), CREATE_VM);
}
@Override
public void DataCenter_SelectedItemChanged()
{
storage_pool dataCenter = (storage_pool)getModel().getDataCenter().getSelectedItem();
getModel().setIsHostAvailable(dataCenter.getstorage_pool_type() != StorageType.LOCALFS);
java.util.ArrayList<VdcQueryType> queryTypeList = new java.util.ArrayList<VdcQueryType>();
queryTypeList.add(VdcQueryType.GetClustersWithPermittedAction);
queryTypeList.add(VdcQueryType.GetVmTemplatesWithPermittedAction);
GetEntitiesWithPermittedActionParameters tempVar = new GetEntitiesWithPermittedActionParameters();
tempVar.setActionGroup(CREATE_VM);
GetEntitiesWithPermittedActionParameters getEntitiesWithPermittedActionParameters = tempVar;
java.util.ArrayList<VdcQueryParametersBase> parametersList = new java.util.ArrayList<VdcQueryParametersBase>(java.util.Arrays.asList(new VdcQueryParametersBase[] { getEntitiesWithPermittedActionParameters, getEntitiesWithPermittedActionParameters }));
// Get clusters and templates
Frontend.RunMultipleQueries(queryTypeList, parametersList, this, getModel().getHash());
}
public void Executed(FrontendMultipleQueryAsyncResult result)
{
java.util.List<VdcQueryReturnValue> returnValueList = result.getReturnValues();
java.util.ArrayList<VDSGroup> clusters = (java.util.ArrayList<VDSGroup>)returnValueList.get(0).getReturnValue();
java.util.ArrayList<VmTemplate> templates = (java.util.ArrayList<VmTemplate>)returnValueList.get(1).getReturnValue();
InitClusters(clusters);
InitTemplates(templates);
InitCdImage();
}
private void InitClusters(java.util.ArrayList<VDSGroup> clusters)
{
// Filter clusters list (include only clusters that belong to the selected datacenter)
java.util.ArrayList<VDSGroup> filteredList = new java.util.ArrayList<VDSGroup>();
storage_pool selectedDataCenter = (storage_pool)getModel().getDataCenter().getSelectedItem();
for (VDSGroup cluster : clusters)
{
if (cluster.getstorage_pool_id() != null && selectedDataCenter.getId().equals(cluster.getstorage_pool_id()))
{
filteredList.add(cluster);
}
}
Collections.sort(filteredList, new Linq.VdsGroupByNameComparer());
getModel().SetClusters(getModel(), filteredList, null);
}
private void InitTemplates(java.util.ArrayList<VmTemplate> templates)
{
// Filter templates list (include only templates that belong to the selected datacenter)
java.util.ArrayList<VmTemplate> templatesList = new java.util.ArrayList<VmTemplate>();
VmTemplate blankTemplate = new VmTemplate();
storage_pool selectedDataCenter = (storage_pool)getModel().getDataCenter().getSelectedItem();
Guid selectedDataCenterId = selectedDataCenter.getId().getValue();
for (VmTemplate template : templates)
{
Guid datacenterId = template.getstorage_pool_id() == null ? Guid.Empty : template.getstorage_pool_id().getValue();
if (template.getId().equals(Guid.Empty))
{
blankTemplate = template;
}
else if (!selectedDataCenterId.equals(datacenterId))
{
continue;
}
else if (template.getstatus() == VmTemplateStatus.OK)
{
templatesList.add(template);
}
}
// Sort list and position "Blank" template as first
Collections.sort(templatesList, new Linq.VmTemplateByNameComparer());
if (templates.contains(blankTemplate))
{
templatesList.add(0, blankTemplate);
}
//If there was some template selected before, try select it again.
VmTemplate oldTemplate = (VmTemplate)getModel().getTemplate().getSelectedItem();
getModel().getTemplate().setItems(templatesList);
getModel().getTemplate().setSelectedItem(Linq.FirstOrDefault(templatesList, oldTemplate != null ? new Linq.TemplatePredicate(oldTemplate.getId()) : new Linq.TemplatePredicate(Guid.Empty)));
UpdateIsDisksAvailable();
}
}