/* Copyright 2008-2010 Gephi Authors : Mathieu Bastian <mathieu.bastian@gephi.org> Website : http://www.gephi.org This file is part of Gephi. Gephi 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. Gephi 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 Gephi. If not, see <http://www.gnu.org/licenses/>. */ package org.gephi.filters.spi; import javax.swing.Icon; import org.gephi.filters.api.FilterLibrary; /** * A filter category is like a folder, it describes the type of the filter and * bring together to users filters that have the same categories. * <p> * <b>Default categories are defined in the filter library:</b> * <ul><li><code>FilterLibrary.TOPOLOGY</code></li> * <li><code>FilterLibrary.ATTRIBUTES</code></li> * <li><code>FilterLibrary.EDGE</code></li> * <li><code>FilterLibrary.HIERARCHY</code></li></ul> * @author Mathieu Bastian * @see FilterLibrary */ public final class Category { private String name; private Icon icon; private Category parent; public Category(String name) { this.name = name; } public Category(String name, Icon icon) { this.name = name; this.icon = icon; } public Category(String name, Icon icon, Category parent) { this.name = name; this.icon = icon; this.parent = parent; } /** * Returns the category's name. * @return the name of this category */ public String getName() { return name; } /** * Returns the icon or <code>null</code> if the category has no icon. * @return the icon or <code>null</code> */ public Icon getIcon() { return icon; } /** * Returns this category parent category or <code>null</code> if this * category has no parent. * @return this category's parent or <code>null</code> */ public Category getParent() { return parent; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj instanceof Category) { Category cat = (Category) obj; if (cat.icon == icon && (cat.name == name || cat.name.equals(name)) && (cat.parent == parent || cat.parent.equals(parent))) { return true; } } return false; } @Override public int hashCode() { int hash = 3; hash = 29 * hash + (this.name != null ? this.name.hashCode() : 0); hash = 29 * hash + (this.icon != null ? this.icon.hashCode() : 0); hash = 29 * hash + (this.parent != null ? this.parent.hashCode() : 0); return hash; } }