package org.ovirt.engine.ui.uicommon.models.pools;
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.uicompat.*;
import org.ovirt.engine.ui.uicommon.models.vms.*;
import org.ovirt.engine.ui.uicommon.validation.*;
import org.ovirt.engine.core.common.interfaces.*;
import org.ovirt.engine.core.common.businessentities.*;
import org.ovirt.engine.ui.uicommon.*;
import org.ovirt.engine.ui.uicommon.models.*;
@SuppressWarnings("unused")
public class PoolModel extends VmModel
{
private ListModel privatePoolType;
public ListModel getPoolType()
{
return privatePoolType;
}
private void setPoolType(ListModel value)
{
privatePoolType = value;
}
private EntityModel privateNumOfDesktops;
public EntityModel getNumOfDesktops()
{
return privateNumOfDesktops;
}
private void setNumOfDesktops(EntityModel value)
{
privateNumOfDesktops = value;
}
public boolean getCanDefineVM()
{
return getIsNew() || (Integer)getNumOfDesktops().getEntity() == 0;
}
@Override
public boolean getIsNew()
{
return super.getIsNew();
}
@Override
public void setIsNew(boolean value)
{
setIsAddVMMode(value);
super.setIsNew(value);
}
//public int OriginalNumberOfDesktops { get; set; }
private int assignedVms;
public int getAssignedVms()
{
return assignedVms;
}
public void setAssignedVms(int value)
{
if (assignedVms != value)
{
assignedVms = value;
OnPropertyChanged(new PropertyChangedEventArgs("AssignedVms"));
}
}
private boolean isPoolTabValid;
public boolean getIsPoolTabValid()
{
return isPoolTabValid;
}
public void setIsPoolTabValid(boolean value)
{
if (isPoolTabValid != value)
{
isPoolTabValid = value;
OnPropertyChanged(new PropertyChangedEventArgs("IsPoolTabValid"));
}
}
private boolean isAddVMMode;
public boolean getIsAddVMMode()
{
return isAddVMMode;
}
public void setIsAddVMMode(boolean value)
{
if (isAddVMMode != value)
{
isAddVMMode = value;
OnPropertyChanged(new PropertyChangedEventArgs("IsAddVMMode"));
}
}
public PoolModel()
{
java.util.ArrayList<EntityModel> poolTypeItems = new java.util.ArrayList<EntityModel>();
EntityModel tempVar = new EntityModel();
tempVar.setTitle("Automatic");
tempVar.setEntity(VmPoolType.Automatic);
EntityModel automaticOption = tempVar;
poolTypeItems.add(automaticOption);
EntityModel tempVar2 = new EntityModel();
tempVar2.setTitle("Manual");
tempVar2.setEntity(VmPoolType.Manual);
poolTypeItems.add(tempVar2);
setPoolType(new ListModel());
getPoolType().setItems(poolTypeItems);
EntityModel tempVar3 = new EntityModel();
tempVar3.setEntity(1);
setNumOfDesktops(tempVar3);
setIsPoolTabValid(true);
getPoolType().setSelectedItem(automaticOption);
getOSType().setSelectedItem(VmOsType.Unassigned);
}
@Override
protected void FillTemplateList(Guid DataCenterId)
{
// var templates = DataProvider.GetTemplateListByDataCenter(DataCenterId).Where(a => (Guid)a.vmt_guid != Guid.Empty);
java.util.ArrayList<VmTemplate> templates = new java.util.ArrayList<VmTemplate>();
for (VmTemplate template : DataProvider.GetTemplateList(DataCenterId))
{
if (!template.getId().equals(Guid.Empty))
{
templates.add(template);
}
}
getTemplate().setItems(templates);
// Template.Value = templates.FirstOrDefault();
getTemplate().setSelectedItem(Linq.FirstOrDefault(templates));
}
//private void DataCenterChanged()
//{
// Clusters = DataProvider.GetClusterList(DataCenter.id);
// if (CanDefineVM)
// {
// Cluster = Clusters.FirstOrDefault();
// }
// StorageDomains = DataProvider.GetStorageDomainList(DataCenter.id);
// Templates = DataProvider.GetTemplateListByDataCenter(DataCenter.id)
// .Where(a => a.vmt_guid != Guid.Empty);
// if (CanDefineVM)
// {
// Template = Templates.FirstOrDefault();
// }
//}
//public void TemplateChanged()
//{
// if (Template == null && !CanDefineVM)
// {
// return;
// }
// OSType = Template.os;
// NumOfMonitors = Template.num_of_monitors;
// Domain = Template.domain;
// MemSize = Template.mem_size_mb;
// UsbPolicy = Template.usb_policy;
// IsAutoSuspend = Template.is_auto_suspend;
// if (TimeZones != null)
// {
// TimeZone = TimeZones.FirstOrDefault(a => a.getKey() == (String.IsNullOrEmpty(Template.time_zone)
// ? DataProvider.GetDefaultTimeZone()
// : Template.time_zone)
// );
// }
// var storageDomains = DataProvider.GetStorageDomainListByTemplate(Template.vmt_guid);
// StorageDomains = storageDomains;
// StorageDomain = storageDomains.FirstOrDefault();
//}
//private void OsTypeChanged()
//{
// HasDomain = IsWindowsOsType(OSType);
// HasTimeZone = IsWindowsOsType(OSType);
//}
@Override
public boolean Validate()
{
boolean baseValidation = super.Validate();
setIsPoolTabValid(true);
//Revalidate name field.
//TODO: Make maximum characters value depend on number of desktops in pool.
VmOsType os = (VmOsType)getOSType().getSelectedItem();
int maxAlowedVms = DataProvider.GetMaxVmsInPool();
int maxNumOfCharsVmSerialNumber = String.valueOf(maxAlowedVms).length() + 1;
int maxAllowedChars_windows = WINDOWS_VM_NAME_MAX_LIMIT - maxNumOfCharsVmSerialNumber;
int maxAllowedChars_nonWindows = NON_WINDOWS_VM_NAME_MAX_LIMIT - maxNumOfCharsVmSerialNumber;
String nameExpr = StringFormat.format("^[0-9a-zA-Z-_]{1,%1$s}$", maxAllowedChars_windows);
String nameMsg = StringFormat.format("Name must contain only alphanumeric characters. Maximum length: %1$s.", maxAllowedChars_windows);
if (!DataProvider.IsWindowsOsType(os))
{
nameExpr = StringFormat.format("^[-\\w]{1,%1$s}$", maxAllowedChars_nonWindows);
nameMsg = StringFormat.format("Name cannot contain special characters. Maximum length: %1$s.", maxAllowedChars_nonWindows);
}
RegexValidation tempVar = new RegexValidation();
tempVar.setExpression(nameExpr);
tempVar.setMessage(nameMsg);
getName().ValidateEntity(new IValidation[] { new NotEmptyValidation(), tempVar });
IntegerValidation tempVar2 = new IntegerValidation();
tempVar2.setMinimum(1);
tempVar2.setMaximum(getIsNew() ? maxAlowedVms : maxAlowedVms - getAssignedVms());
getNumOfDesktops().ValidateEntity(new IValidation[] { new NotEmptyValidation(), tempVar2 });
setIsGeneralTabValid(getIsGeneralTabValid() && getName().getIsValid() && getNumOfDesktops().getIsValid());
setIsPoolTabValid(true);
return baseValidation && getName().getIsValid() && getNumOfDesktops().getIsValid();
}
}