/* * Copyright (C) 2005-2012 NAUMEN. All rights reserved. * * This file may be distributed and/or modified under the terms of the * GNU General Public License version 2 as published by the Free Software * Foundation and appearing in the file LICENSE.GPL included in the * packaging of this file. * */ package ru.naumen.servacc.ui; import java.util.ArrayList; import java.util.Collection; import java.util.List; import ru.naumen.servacc.config2.EmptyConfigItem; import ru.naumen.servacc.config2.i.IConfigItem; public class TreeItemController { private final IConfigItem data; private final TreeItemController parent; private List<TreeItemController> children; private boolean visible = true; private boolean expanded = false; public TreeItemController() { this(null, new EmptyConfigItem()); } public TreeItemController(TreeItemController parent, IConfigItem data) { this.parent = parent; this.data = data; children = new ArrayList<>(); } public IConfigItem getData() { return data; } public List<TreeItemController> getChildren() { return children; } public void setVisibility(boolean visibility) { visible = visibility; } public boolean isVisible() { return visible; } public void setExpanded(boolean expanded) { this.expanded = expanded; } public boolean isExpanded() { return expanded; } public void raiseVisibility() { if ((parent == null) || (parent.isExpanded() && parent.isVisible())) { return; } parent.setVisibility(true); parent.setExpanded(data.isAutoExpanded()); parent.raiseVisibility(); } public boolean matches(Collection<String> filters) { for (String f : filters) { if (!uprisingMatches(f)) { return false; } } return true; } private boolean uprisingMatches(String filter) { return dataMatches(filter) || parentMatches(filter); } private boolean parentMatches(String filter) { return (parent != null) && parent.uprisingMatches(filter); } private boolean dataMatches(String filter) { return data.matches(filter); } @Override public String toString() { return data.toString(); } public String getImageName() { return data.getIconName(); } }