/* * RapidMiner * * Copyright (C) 2001-2011 by Rapid-I and the contributors * * Complete list of developers available at our web site: * * http://rapid-i.com * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see http://www.gnu.org/licenses/. */ package com.rapidminer.tools; import com.rapidminer.tools.documentation.GroupDocumentation; import com.rapidminer.tools.documentation.OperatorDocBundle; /** * A group tree manages operator descriptions in a tree like manner. This is * useful to present the operators in groups and subgroups and eases operator * selection in the GUI. * * The group tree heavily depends on the associated OperatorService, since it reflects * the registered Operators of that Service. Each {@link OperatorService} can have multiple * GroupTrees, which register as listener to be able to update on new registration or unregistration events. * * @author Ingo Mierswa, Sebastian Land */ public class GroupTreeNode extends GroupTree { /** The key used for mapping I18N support. */ private String key = null; /** The parent of this group. This is the root node if parent is null. */ private GroupTree parent = null; private final GroupDocumentation documentation; /** Creates a new group tree with no operators and children. */ GroupTreeNode(GroupTree parent, String key, OperatorDocBundle bundle) { this.parent = parent; this.key = key; if (bundle != null) { this.documentation = ((GroupDocumentation) bundle.getObject("group." + getFullyQualifiedKey())); } else { LogService.getRoot().fine("No documentation bundle associated with group " + getFullyQualifiedKey()); this.documentation = new GroupDocumentation(key); } } /** Clone constructor. */ GroupTreeNode(GroupTreeNode other) { super(other); this.key = other.key; this.documentation = other.documentation; } @Override public GroupTree clone() { return new GroupTreeNode(this); } /** Returns the name of this group. */ @Override public String getName() { return getDocumentation().getName(); } private GroupDocumentation getDocumentation() { return documentation; } /** Sets the parent of this group. */ public void setParent(GroupTree parent) { this.parent = parent; } /** Returns the parent of this group. Returns null if no parent does exist. */ @Override public GroupTree getParent() { return parent; } @Override public String getDescription() { return documentation.getHelp(); } @Override public String getKey() { return key; } @Override public String getIconName() { String groupIcon = super.getIconName(); if (groupIcon != null) { return groupIcon; } else { return parent.getIconName(); } } @Override public int compareTo(GroupTree o) { return this.getName().compareTo(o.getName()); } @Override public boolean equals(Object o) { if (!(o instanceof GroupTreeNode)) return false; GroupTreeNode a = (GroupTreeNode) o; if (!this.key.equals(a.key)) return false; return true; } @Override public int hashCode() { return this.key.hashCode(); } @Override public String getFullyQualifiedKey() { String parentKey = parent.getFullyQualifiedKey(); if (parentKey.length() > 0) { return parentKey + "." + key; } else { return key; } } }