package org.ovirt.engine.ui.uicommonweb.models.common; import java.util.ArrayList; import java.util.Objects; import org.ovirt.engine.ui.uicommonweb.models.EntityModel; import org.ovirt.engine.ui.uicompat.PropertyChangedEventArgs; public class SelectionTreeNodeModel extends EntityModel { private String description; public String getDescription() { return description; } public void setDescription(String value) { if (!Objects.equals(description, value)) { description = value; onPropertyChanged(new PropertyChangedEventArgs("Description")); //$NON-NLS-1$ } } private Boolean isSelectedNullable; public Boolean getIsSelectedNullable() { return isSelectedNullable; } public void setIsSelectedNullable(Boolean value) { if (isSelectedNullable == null && value == null) { return; } if (isSelectedNullable == null || !isSelectedNullable.equals(value)) { isSelectedNullable = value; onPropertyChanged(new PropertyChangedEventArgs("IsSelectedNullable")); //$NON-NLS-1$ if (!getIsSelectedNotificationPrevent()) { isSelectedChanged(); } } } private boolean isExpanded; public boolean getIsExpanded() { return isExpanded; } public void setIsExpanded(boolean value) { isExpanded = value; onPropertyChanged(new PropertyChangedEventArgs("IsExpanded")); //$NON-NLS-1$ } private boolean isSelectedNotificationPrevent; public boolean getIsSelectedNotificationPrevent() { return isSelectedNotificationPrevent; } public void setIsSelectedNotificationPrevent(boolean value) { if (isSelectedNotificationPrevent != value) { isSelectedNotificationPrevent = value; onPropertyChanged(new PropertyChangedEventArgs("IsSelectedNotificationPrevent")); //$NON-NLS-1$ } } private SelectionTreeNodeModel parent; public SelectionTreeNodeModel getParent() { return parent; } public void setParent(SelectionTreeNodeModel value) { if (parent != value) { parent = value; onPropertyChanged(new PropertyChangedEventArgs("Parent")); //$NON-NLS-1$ } } private ArrayList<SelectionTreeNodeModel> children; public ArrayList<SelectionTreeNodeModel> getChildren() { return children; } public void setChildren(ArrayList<SelectionTreeNodeModel> value) { if ((children == null && value != null) || (children != null && !children.equals(value))) { children = value; onPropertyChanged(new PropertyChangedEventArgs("Children")); //$NON-NLS-1$ } } private String tooltip; public String getTooltip() { return tooltip; } public void setTooltip(String value) { if (!Objects.equals(tooltip, value)) { tooltip = value; onPropertyChanged(new PropertyChangedEventArgs("Tooltip")); //$NON-NLS-1$ } } public SelectionTreeNodeModel() { setChildren(new ArrayList<SelectionTreeNodeModel>()); } public void isSelectedChanged() { if (getParent() != null) { updateParentSelection(); } // Children.Each(a => a.IsSelectedNotificationPrevent = true); // Children.Each(a => a.IsSelected = IsSelected); // Children.Each(a => a.IsSelectedNotificationPrevent = false); for (SelectionTreeNodeModel child : getChildren()) { child.setIsSelectedNotificationPrevent(true); child.setIsSelectedNullable(getIsSelectedNullable()); child.setIsSelectedNotificationPrevent(false); for (SelectionTreeNodeModel grandChild : child.getChildren()) { grandChild.setIsSelectedNotificationPrevent(true); grandChild.setIsSelectedNullable(getIsSelectedNullable()); grandChild.setIsSelectedNotificationPrevent(false); } } } public void updateParentSelection() { // int selCount = Parent.Children.Count(a => a.IsSelected == true); if (getParent() == null || getParent().getChildren() == null) { return; } int selCount = 0; int nullCount = 0; for (SelectionTreeNodeModel a : getParent().getChildren()) { if (a.getIsSelectedNullable() != null && a.getIsSelectedNullable().equals(true)) { selCount += 1; } else if (a.isSelectedNullable == null) { nullCount++; } } getParent().setIsSelectedNotificationPrevent(true); if (selCount == 0 && nullCount == 0) { getParent().setIsSelectedNullable(false); } else { // if (Parent.Children.Count() == selCount) if (getParent().getChildren().size() == selCount) { getParent().setIsSelectedNullable(true); } else { getParent().setIsSelectedNullable(null); } } getParent().setIsSelectedNotificationPrevent(false); getParent().updateParentSelection(); } }