package org.ovirt.engine.ui.uicommon.models;
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.*;
@SuppressWarnings("unused")
public class ListWithDetailsModel extends SearchableListModel
{
private java.util.List<EntityModel> detailModels;
public java.util.List<EntityModel> getDetailModels()
{
return detailModels;
}
public void setDetailModels(java.util.List<EntityModel> value)
{
if (detailModels != value)
{
detailModels = value;
OnPropertyChanged(new PropertyChangedEventArgs("DetailModels"));
}
}
private EntityModel activeDetailModel;
public EntityModel getActiveDetailModel()
{
return activeDetailModel;
}
public void setActiveDetailModel(EntityModel value)
{
if (activeDetailModel != value)
{
ActiveDetailModelChanging(value, getActiveDetailModel());
activeDetailModel = value;
ActiveDetailModelChanged();
OnPropertyChanged(new PropertyChangedEventArgs("ActiveDetailModel"));
}
}
private boolean detailModelsInitialized;
protected void InitDetailModels()
{
}
protected void UpdateDetailsAvailability()
{
}
private void ActiveDetailModelChanging(EntityModel newValue, EntityModel oldValue)
{
//Make sure we had set an entity property of details model.
if (oldValue != null)
{
oldValue.setEntity(null);
if (oldValue instanceof SearchableListModel)
{
((SearchableListModel)oldValue).EnsureAsyncSearchStopped();
}
}
if (newValue != null)
{
newValue.setEntity(ProvideDetailModelEntity(getSelectedItem()));
}
}
protected Object ProvideDetailModelEntity(Object selectedItem)
{
return selectedItem;
}
@Override
protected void OnSelectedItemChanged()
{
super.OnSelectedItemChanged();
if (getSelectedItem() != null)
{
//Initialize detail models on demand, just after some item was selected.
if (!detailModelsInitialized)
{
InitDetailModels();
detailModelsInitialized = true;
}
//Try to choose default (first) detail model.
UpdateDetailsAvailability();
if (getDetailModels() != null)
{
if ((getActiveDetailModel() != null && !getActiveDetailModel().getIsAvailable()) || getActiveDetailModel() == null)
{
//ActiveDetailModel = DetailModels.FirstOrDefault(AvailabilityDecorator.GetIsAvailable);
EntityModel model = null;
for (EntityModel item : getDetailModels())
{
if (item.getIsAvailable())
{
model = item;
break;
}
}
setActiveDetailModel(model);
}
}
//if (DetailModels != null && ActiveDetailModel == null)
//{
// ActiveDetailModel = DetailModels.FirstOrDefault();
//}
}
else
{
//If selected item become null, make sure we stop all activity on an active detail model.
if (getActiveDetailModel() != null && getActiveDetailModel() instanceof SearchableListModel)
{
((SearchableListModel)getActiveDetailModel()).EnsureAsyncSearchStopped();
}
}
//Syncronise selected item with the entity of an active details model.
if (getActiveDetailModel() != null)
{
getActiveDetailModel().setEntity(ProvideDetailModelEntity(getSelectedItem()));
}
}
protected void ActiveDetailModelChanged()
{
}
@Override
public void EnsureAsyncSearchStopped()
{
super.EnsureAsyncSearchStopped();
if (getDetailModels() != null)
{
//Stop search on all list models.
for (EntityModel model : getDetailModels())
{
if (model instanceof SearchableListModel)
{
SearchableListModel listModel = (SearchableListModel)model;
listModel.EnsureAsyncSearchStopped();
}
}
}
}
}