/*
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.desktop.filters.library;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import org.gephi.filters.api.Query;
import org.gephi.filters.spi.Category;
import org.gephi.filters.spi.FilterBuilder;
import org.openide.nodes.ChildFactory;
import org.openide.nodes.Node;
/**
*
* @author Mathieu Bastian
*/
public class CategoryChildFactory extends ChildFactory<Object> {
private Category category;
private FiltersExplorer.Utils utils;
public CategoryChildFactory(FiltersExplorer.Utils utils, Category category) {
this.utils = utils;
this.category = category;
}
@Override
protected boolean createKeys(List<Object> toPopulate) {
Object[] children = utils.getChildren(category);
Arrays.sort(children, new Comparator() {
public int compare(Object o1, Object o2) {
String s1;
String s2;
if (o1 == FiltersExplorer.QUERIES || o2 == FiltersExplorer.QUERIES) {
return o1 == FiltersExplorer.QUERIES ? 1 : -1;
} else if (o1 instanceof Category && o2 instanceof Category) {
s1 = ((Category) o1).getName();
s2 = ((Category) o2).getName();
return s1.compareTo(s2);
} else if (o1 instanceof FilterBuilder && o2 instanceof FilterBuilder) {
s1 = ((FilterBuilder) o1).getName();
s2 = ((FilterBuilder) o2).getName();
return s1.compareTo(s2);
} else if (o1 instanceof Query && o2 instanceof Query) {
s1 = ((Query) o1).getName();
s2 = ((Query) o2).getName();
return s1.compareTo(s2);
} else if (o1 instanceof Category) {
return -1;
}
return 1;
}
});
toPopulate.addAll(Arrays.asList(children));
return true;
}
@Override
protected Node[] createNodesForKey(Object key) {
if (key instanceof Category) {
return new Node[]{new CategoryNode(utils, (Category) key)};
} else if (key instanceof FilterBuilder) {
return new Node[]{new FilterBuilderNode((FilterBuilder) key)};
} else {
return new Node[]{new SavedQueryNode((Query) key)};
}
}
}