/* * codjo.net * * Common Apache License 2.0 */ package net.codjo.gui; import net.codjo.gui.model.TableReferenceComparator; import net.codjo.gui.toolkit.util.ErrorDialog; import net.codjo.model.Table; import net.codjo.persistent.PersistenceException; import net.codjo.persistent.Reference; import net.codjo.profile.User; import java.awt.Component; import java.util.Collections; import java.util.List; import javax.swing.Icon; import javax.swing.JTree; import javax.swing.UIManager; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeCellRenderer; /** * Cette classe permet de construire un JTree propre � Penelope pour l'explorateur des donn�es. * * @version $Revision: 1.5 $ */ public class ExplorerByStepTreeBuilder implements ExplorerTreeBuilder { private JTree tree; private User user = null; /** * Constructeur. */ public ExplorerByStepTreeBuilder() { initTree(); } /** * Retourne le JTree. * * @return Le JTree. */ public JTree getTree() { initTree(); return tree; } /** * Retourne le user courant * * @return The user value */ public net.codjo.profile.User getUser() { return user; } /** * Affecte user � newCurrentUser * * @param newCurrentUser The new currentUser value */ public void setCurrentUser(net.codjo.profile.User newCurrentUser) { user = newCurrentUser; } /** * Initialisation du JTree. */ private void initTree() { tree = new JTree(createNodes()); tree.setCellRenderer(new ExplorerRenderer()); } /** * Cr�ation du JTree. * * @return L'arborescence des Tables. * * @noinspection CallToPrintStackTrace */ private DefaultMutableTreeNode createNodes() { DefaultMutableTreeNode top = new DefaultMutableTreeNode("Liste des tables"); List listTable; try { listTable = Dependency.getTableHome().getAllObjects(); Collections.sort(listTable, new TableReferenceComparator( TableReferenceComparator.COMPARE_BY_TABLE_NAME)); DefaultMutableTreeNode importTable = new DefaultMutableTreeNode("Tables import�es"); DefaultMutableTreeNode translatTable = new DefaultMutableTreeNode("Tables transcod�es"); DefaultMutableTreeNode treatTable = new DefaultMutableTreeNode("Tables trait�es"); DefaultMutableTreeNode refTable = new DefaultMutableTreeNode("R�f�rentiels"); DefaultMutableTreeNode otherTable = new DefaultMutableTreeNode("Autres"); int cpt = 0; do { Table table = (Table)((Reference)listTable.get(cpt)).getLoadedObject(); if ("IMPORTEE".equals(table.getTableStep())) { importTable.add(new DefaultMutableTreeNode(table)); } else if ("TRANSCODEE".equals(table.getTableStep())) { translatTable.add(new DefaultMutableTreeNode(table)); } else if ("TRAITEE".equals(table.getTableStep())) { treatTable.add(new DefaultMutableTreeNode(table)); } else if ("REFERENTIEL".equals(table.getTableStep())) { refTable.add(new DefaultMutableTreeNode(table)); } else { otherTable.add(new DefaultMutableTreeNode(table)); } cpt++; } while (cpt < listTable.size()); if (!importTable.children().equals(DefaultMutableTreeNode.EMPTY_ENUMERATION)) { top.add(importTable); } if (!translatTable.children().equals(DefaultMutableTreeNode.EMPTY_ENUMERATION)) { top.add(translatTable); } if (!treatTable.children().equals(DefaultMutableTreeNode.EMPTY_ENUMERATION)) { top.add(treatTable); } if (!refTable.children().equals(DefaultMutableTreeNode.EMPTY_ENUMERATION)) { top.add(refTable); } if (!otherTable.children().equals(DefaultMutableTreeNode.EMPTY_ENUMERATION)) { top.add(otherTable); } } catch (PersistenceException ex) { ErrorDialog.show(tree, "Impossible d'obtenir la liste des tables", ex); ex.printStackTrace(); } return top; } /** * Renderer pour les tables de l'arbre (feuille). * * @author $Author: marcona $ * @version $Revision: 1.5 $ */ private static class ExplorerRenderer extends DefaultTreeCellRenderer { Icon workTable; Icon finalTable; /** * Constructeur. */ ExplorerRenderer() { workTable = UIManager.getIcon("dbExplorer.WorkTable"); finalTable = UIManager.getIcon("dbExplorer.FinalTable"); } /** * Retourne le renderer. * * @param tree - * @param value - * @param sel - * @param expanded - * @param leaf - * @param row - * @param hasFocus - * * @return The TreeCellRendererComponent value */ public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) { // Lorsque des familles de tables sont vide, la valeur leaf // est vrai. Donc pour pour faire afficher le bon icon // on positionne leaf a false. DefaultMutableTreeNode node = (DefaultMutableTreeNode)value; if (node.getUserObject().getClass() != Table.class) { leaf = false; } super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus); if (leaf) { if (isFinalTable(value)) { setIcon(finalTable); } else { setIcon(workTable); } } return this; } /** * Indique si la table est finale. * * @param value Tree node * * @return - */ protected boolean isFinalTable(Object value) { DefaultMutableTreeNode node = (DefaultMutableTreeNode)value; Table nodeInfo = (Table)(node.getUserObject()); return "INFOCENTRE".equals(nodeInfo.getApplication()); } } }