@Override
 protected void setState(NodeStateHolder.SelectedState state) {
   for (Enumeration children = children(); children.hasMoreElements(); ) {
     UpdaterTreeNode child = (UpdaterTreeNode) children.nextElement();
     child.setState(state);
   }
 }
 @Override
 public NodeStateHolder.SelectedState getInitialState() {
   boolean hasInstalled = false;
   boolean hasNotInstalled = false;
   for (Enumeration children = children(); children.hasMoreElements(); ) {
     UpdaterTreeNode child = (UpdaterTreeNode) children.nextElement();
     if (child.getInitialState() == NodeStateHolder.SelectedState.MIXED) {
       return NodeStateHolder.SelectedState.MIXED;
     } else if (child.getInitialState() == NodeStateHolder.SelectedState.INSTALLED) {
       hasInstalled = true;
     } else {
       hasNotInstalled = true;
     }
   }
   return hasInstalled
       ? (hasNotInstalled
           ? NodeStateHolder.SelectedState.MIXED
           : NodeStateHolder.SelectedState.INSTALLED)
       : NodeStateHolder.SelectedState.NOT_INSTALLED;
 }
 @Override
 public NodeStateHolder.SelectedState getCurrentState() {
   boolean foundInstalled = false;
   boolean foundNotInstalled = false;
   for (Enumeration children = children(); children.hasMoreElements(); ) {
     UpdaterTreeNode child = (UpdaterTreeNode) children.nextElement();
     if (child.getCurrentState() != NodeStateHolder.SelectedState.INSTALLED) {
       foundNotInstalled = true;
     }
     if (child.getCurrentState() != NodeStateHolder.SelectedState.NOT_INSTALLED) {
       foundInstalled = true;
     }
   }
   if (foundInstalled && foundNotInstalled) {
     return NodeStateHolder.SelectedState.MIXED;
   } else if (foundInstalled) {
     return NodeStateHolder.SelectedState.INSTALLED;
   } else {
     return NodeStateHolder.SelectedState.NOT_INSTALLED;
   }
 }