/*
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 javax.swing.JPanel;
import org.gephi.filters.api.FilterLibrary;
/**
* Filter builder, creating <code>Filter</code> instances for a <b>single</b> type
* of filters. Provides also the settings panel for the type of filter.
* <p>
* Implementors should add the <code>@ServiceProvider</code> annotation to be
* registered by the system or call <code>FilterLibrary.addBuilder()</code>.
* <p>
* The <code>JPanel</code> returned by the <code>getPanel()</code> method is the
* settings panel that configures the filter parameters. These parameters can be
* get and set by using {@link Filter#getProperties()}. Settings panel should
* always set parameters values in that way. As a result the system will be aware
* values changed and update the filter.
* <p>
* See {@link CategoryBuilder} for builders that host multiple types of filters.
* @author Mathieu Bastian
* @see FilterLibrary
*/
public interface FilterBuilder {
/**
* Returns the category this filter builder belongs to.
* @return the category this builder belongs to
*/
public Category getCategory();
/**
* Returns the display name of this filter builder
* @return the display name
*/
public String getName();
/**
* Returns the icon of this filter builder
* @return the icon
*/
public Icon getIcon();
/**
* Returns ths description text of this filter builder
* @return the description
*/
public String getDescription();
/**
* Builds a new <code>Filter</code> instance.
* @return a new <code>Filter</code> object
*/
public Filter getFilter();
/**
* Returns the settings panel for the filter this builder is building, the
* <code>filter</code> object is passed as a parameter.
* @param filter the filter that the panel is to be configuring
* @return the filter's settings panel
*/
public JPanel getPanel(Filter filter);
/**
* Notification when the filter is destroyed, to perform clean-up tasks.
*/
public void destroy(Filter filter);
}