package org.ovirt.engine.ui.uicommonweb.models;
import java.util.List;
import java.util.Objects;
import org.ovirt.engine.core.common.mode.ApplicationMode;
import org.ovirt.engine.ui.uicommonweb.TreeNodeInfo;
import org.ovirt.engine.ui.uicompat.ObservableCollection;
import org.ovirt.engine.ui.uicompat.PropertyChangedEventArgs;
public class SystemTreeItemModel extends EntityModel implements TreeNodeInfo {
private SystemTreeItemType type = SystemTreeItemType.values()[0];
private ApplicationMode applicationMode = ApplicationMode.AllModes;
public ApplicationMode getApplicationMode() {
return applicationMode;
}
public void setApplicationMode(ApplicationMode applicationMode) {
this.applicationMode = applicationMode;
}
public SystemTreeItemType getType() {
return type;
}
public void setType(SystemTreeItemType value) {
if (type != value) {
type = value;
onPropertyChanged(new PropertyChangedEventArgs("Type")); //$NON-NLS-1$
}
}
private List<SystemTreeItemModel> privateChildren;
@Override
public List<SystemTreeItemModel> getChildren() {
return privateChildren;
}
public void setChildren(List<SystemTreeItemModel> value) {
privateChildren = value;
}
public void addChild(SystemTreeItemModel value) {
privateChildren.add(value);
if (value != null) {
value.setParent(this);
}
}
private SystemTreeItemModel privateParent;
@Override
public SystemTreeItemModel getParent() {
return privateParent;
}
private void setParent(SystemTreeItemModel value) {
privateParent = value;
}
private boolean isExpanded;
public boolean getIsExpanded() {
return isExpanded;
}
public void setIsExpanded(boolean value) {
if (isExpanded != value) {
isExpanded = value;
onPropertyChanged(new PropertyChangedEventArgs("IsExpanded")); //$NON-NLS-1$
}
}
public SystemTreeItemModel() {
setChildren(new ObservableCollection<SystemTreeItemModel>());
}
public static SystemTreeItemModel findAncestor(SystemTreeItemType type, SystemTreeItemModel root) {
if (root != null && root.getType() != type) {
if (root.getParent() != null) {
return findAncestor(type, root.getParent());
}
return null;
}
return root;
}
@Override
public boolean equals(Object other) {
return equals(other, false);
}
public boolean equals(Object other, boolean deepCompare) {
if (other == this) {
return true;
}
if (other == null || other.getClass() != getClass()) {
return false;
}
SystemTreeItemModel otherModel = (SystemTreeItemModel) other;
boolean result = true;
// Compare item's attributes
if (!Objects.equals(getType(), otherModel.getType())
|| !Objects.equals(getEntity(), otherModel.getEntity())) {
result = false;
}
// Compare item's children, if necessary
if (result && (!getChildren().isEmpty() || !otherModel.getChildren().isEmpty()) && deepCompare) {
if (getChildren().size() != otherModel.getChildren().size()) {
result = false;
} else {
for (int i = 0; i < getChildren().size(); i++) {
if (!getChildren().get(i).equals(otherModel.getChildren().get(i), deepCompare)) {
result = false;
break;
}
}
}
}
return result;
}
@Override
public int hashCode() {
final int prime = 31;
int result = super.hashCode();
result = prime * result + ((getType() == null) ? 0 : getType().hashCode());
result = prime * result + ((getEntity() == null) ? 0 : getEntity().hashCode());
return result;
}
}