package ca.pfv.spmf.algorithms.sequentialpatterns.clasp_AGP.tries;
import java.awt.GraphicsEnvironment;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.WindowConstants;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.MutableTreeNode;
/**
* This class is used to display a trie visually using Swing if necessary.
*
* Copyright Antonio Gomariz PeƱalver 2013
*
* This file is part of the SPMF DATA MINING SOFTWARE
* (http://www.philippe-fournier-viger.com/spmf).
*
* SPMF is free software: you can redistribute it and/or modify it under the
* terms of the GNU General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later
* version.
*
* SPMF 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with
* SPMF. If not, see <http://www.gnu.org/licenses/>.
*
* @author agomariz
*/
public class ShowTrie {
static int j=0;
/**
* Method to show the tree in a graphical way
*/
public static void showTree(Trie frequentAtomsTrie) {
DefaultMutableTreeNode root = new DefaultMutableTreeNode("Tree");
DefaultTreeModel model = new DefaultTreeModel(root);
JTree tree = new JTree(model);
display(frequentAtomsTrie, model, root);
for (int i = 0; i < tree.getRowCount(); i++) {
tree.expandRow(i);
}
// Construction a visualization of the window
JFrame v = new JFrame();
JScrollPane scroll = new JScrollPane(tree);
v.getContentPane().add(scroll);
v.pack();
v.setVisible(true);
v.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
/**
* Method to display graphically the Trie by means of a TreeModel
* @param model TreeModel when we want to insert the Trie nodes
* @param p TreeNode for the TreeModel
*/
private static void display(Trie frequentAtomsTrie, DefaultTreeModel model, MutableTreeNode p) {
List<TrieNode> nodes = frequentAtomsTrie.nodes;
if (nodes != null) {
//For each node
for (int i = 0; i < nodes.size(); i++) {
TrieNode node = nodes.get(i);
Trie child = node.getChild();
//We create a new TreeNode composed of the pair and the list of appearances
DefaultMutableTreeNode currentNode = new DefaultMutableTreeNode(node.getPair().toString()+" ("+child.getSupport()+")");
//And we insert it in the TreeModel
model.insertNodeInto(currentNode, p, i);
//And we go on doing the same process with the child
j++;
if(j <3) {
display(child, model, currentNode);
}
j--;
}
}
}
}