/*******************************************************************************
* Copyright (c) 2012-2017 Codenvy, S.A.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Codenvy, S.A. - initial API and implementation
*******************************************************************************/
package org.eclipse.che.ide.ui.smartTree;
import com.google.gwt.dom.client.Element;
import org.eclipse.che.ide.api.data.tree.MutableNode;
import org.eclipse.che.ide.api.data.tree.Node;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* Node descriptor. Uses internally in the tree.
*
* @author Vlad Zhukovskiy
*/
public class NodeDescriptor {
private NodeStorage nodeStorage;
private Node node;
private NodeDescriptor parent;
private List<NodeDescriptor> children = new ArrayList<>();
private boolean root;
private String domId;
private boolean childrenRendered;
private boolean expand;
private boolean expandDeep;
private boolean expanded;
private boolean loaded;
private boolean loading;
private Element rootContainerElement;
private Element nodeContainerElement;
private Element jointContainerElement;
private Element iconContainerElement;
private Element userElement;
private Element presentableTextContainer;
private Element infoTextContainer;
private Element loadElement;
private Element descendantsContainerElement;
public NodeDescriptor(NodeStorage nodeStorage, Node node) {
this.nodeStorage = nodeStorage;
if (node == null) {
root = true;
}
this.node = node;
}
protected void addChild(int index, NodeDescriptor child) {
final int actualIndex;
if (nodeStorage.isSorted()) {
int insertPos = Collections.binarySearch(children, child, nodeStorage.buildFullComparator());
actualIndex = insertPos < 0 ? (-insertPos - 1) : insertPos;
} else {
actualIndex = index;
}
children.add(actualIndex, child);
child.parent = this;
}
public void addChildren(int index, List<NodeDescriptor> children) {
if (nodeStorage.isSorted()) {
getChildren().addAll(children);
Collections.sort(getChildren(), nodeStorage.buildFullComparator());
} else {
int actualIndex = index == 0 ? 0 : (getChildren().indexOf(getChildren().get(index - 1)) + 1);
getChildren().addAll(actualIndex, children);
}
for (NodeDescriptor child : children) {
child.parent = this;
}
}
public void clear() {
children.clear();
}
public List<NodeDescriptor> getChildren() {
return children;
}
public Node getNode() {
return node;
}
public NodeDescriptor getParent() {
return parent;
}
public void setNode(Node node) {
this.node = node;
}
public void setParent(NodeDescriptor parent) {
this.parent = parent;
}
public boolean isRoot() {
return root;
}
public void remove(NodeDescriptor descriptor) {
children.remove(descriptor);
}
public void reset() {
expand = false;
expanded = false;
childrenRendered = false;
}
public void clearElements() {
rootContainerElement = null;
nodeContainerElement = null;
jointContainerElement = null;
iconContainerElement = null;
userElement = null;
presentableTextContainer = null;
infoTextContainer = null;
loadElement = null;
descendantsContainerElement = null;
// domId = null;
}
public Element getDescendantsContainerElement() {
return descendantsContainerElement;
}
public String getDomId() {
return domId;
}
public Element getRootContainer() {
return rootContainerElement;
}
public Element getNodeContainerElement() {
return nodeContainerElement;
}
public Element getIconContainerElement() {
return iconContainerElement;
}
public Element getJointContainerElement() {
return jointContainerElement;
}
public Element getPresentableTextContainer() {
return presentableTextContainer;
}
public Element getInfoTextContainer() {
return infoTextContainer;
}
public boolean isChildrenRendered() {
return childrenRendered;
}
public boolean isExpand() {
return expand;
}
public boolean isExpandDeep() {
return expandDeep;
}
public boolean isExpanded() {
return expanded;
}
public boolean isLeaf() {
return node.isLeaf();
}
public boolean isLoaded() {
return loaded;
}
public boolean isLoading() {
return loading;
}
public void setChildrenRendered(boolean childrenRendered) {
this.childrenRendered = childrenRendered;
}
public void setDescendantsContainerElement(Element descendantsContainerElement) {
this.descendantsContainerElement = descendantsContainerElement;
}
public void setNodeContainerElement(Element nodeContainerElement) {
this.nodeContainerElement = nodeContainerElement;
}
public void setRootContainerElement(Element rootContainerElement) {
this.rootContainerElement = rootContainerElement;
}
public void setExpand(boolean expand) {
this.expand = expand;
}
public void setExpandDeep(boolean expandDeep) {
this.expandDeep = expandDeep;
}
public void setExpanded(boolean expanded) {
this.expanded = expanded;
}
public void setIconContainerElement(Element iconContainerElement) {
this.iconContainerElement = iconContainerElement;
}
public void setJointContainerElement(Element jointContainerElement) {
this.jointContainerElement = jointContainerElement;
}
public void setLeaf(boolean leaf) {
if (node instanceof MutableNode) {
((MutableNode)node).setLeaf(leaf);
}
}
public void setLoaded(boolean loaded) {
this.loaded = loaded;
}
public void setLoading(boolean loading) {
this.loading = loading;
}
public void setPresentableTextContainer(Element presentableTextContainer) {
this.presentableTextContainer = presentableTextContainer;
}
public void setDomId(String domId) {
this.domId = domId;
}
public void setInfoTextContainer(Element infoTextContainer) {
this.infoTextContainer = infoTextContainer;
}
public Element getLoadElement() {
return loadElement;
}
public void setLoadElement(Element loadElement) {
this.loadElement = loadElement;
}
public Element getUserElement() {
return userElement;
}
public void setUserElement(Element userElement) {
this.userElement = userElement;
}
@Override
public String toString() {
return "NodeDescriptor{" +
"expand=" + expand +
", expandDeep=" + expandDeep +
", expanded=" + expanded +
", loaded=" + loaded +
", loading=" + loading +
", childrenRendered=" + childrenRendered +
", domId='" + domId + '\'' +
'}';
}
}