package net.sourceforge.squirrel_sql.client.session.mainpanel.objecttree.expanders; /* * Copyright (C) 2007 Rob Manning * manningr@users.sourceforge.net * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import net.sourceforge.squirrel_sql.client.session.ISession; import net.sourceforge.squirrel_sql.client.session.mainpanel.objecttree.INodeExpander; import net.sourceforge.squirrel_sql.client.session.mainpanel.objecttree.ObjectTreeNode; import net.sourceforge.squirrel_sql.fw.sql.IDatabaseObjectInfo; import net.sourceforge.squirrel_sql.fw.sql.SQLDatabaseMetaData; /** * This class is an expander for the table nodes. It will add TRIGGER and/or * INDEX Object Type nodes to the table node if the trigger and/or index * extractors are set. * * @author manningr */ public class TableWithChildNodesExpander implements INodeExpander { /** the plugin-assigned table trigger extractor implementation */ private ITableTriggerExtractor triggerExtractor = null; /** the plugin-assigned table index extractor implementation */ private ITableIndexExtractor indexExtractor = null; /** * Ctor. */ public TableWithChildNodesExpander() { super(); } /** * Method for injecting the component that allows this class to work with * a specific database, depending on the type of trigger extractor. * * @param extractor the ITableTriggerExtractor implementation to use. */ public void setTableTriggerExtractor(ITableTriggerExtractor extractor) { this.triggerExtractor = extractor; } /** * Method for injecting the component that allows this class to work with * a specific database, depending on the type of index extractor. * * @param extractor the ITableIndexExtractor implementation to use. */ public void setTableIndexExtractor(ITableIndexExtractor extractor) { this.indexExtractor = extractor; } /** * Create the child nodes for the passed parent node and return them. Note * that this method should <B>not </B> actually add the child nodes to the * parent node as this is taken care of in the caller. * * @param session * Current session. * @param node * Node to be expanded. * * @return A list of <TT>ObjectTreeNode</TT> objects representing the * child nodes for the passed node. */ public List<ObjectTreeNode> createChildren(ISession session, ObjectTreeNode parentNode) throws SQLException { final List<ObjectTreeNode> childNodes = new ArrayList<ObjectTreeNode>(); final IDatabaseObjectInfo parentDbinfo = parentNode .getDatabaseObjectInfo(); final SQLDatabaseMetaData md = session.getSQLConnection() .getSQLMetaData(); final String schemaName = parentDbinfo.getSchemaName(); if (triggerExtractor != null) { IDatabaseObjectInfo triggerParentInfo = new TriggerParentInfo(parentDbinfo, schemaName, md); ObjectTreeNode triggerChild = new ObjectTreeNode(session, triggerParentInfo); TriggerParentExpander expander = new TriggerParentExpander(); expander.setTableTriggerExtractor(triggerExtractor); triggerChild.addExpander(expander); childNodes.add(triggerChild); } if (indexExtractor != null) { IDatabaseObjectInfo triggerParentInfo = new IndexParentInfo(parentDbinfo, schemaName, md); ObjectTreeNode triggerChild = new ObjectTreeNode(session, triggerParentInfo); IndexParentExpander expander = new IndexParentExpander(); expander.setTableIndexExtractor(indexExtractor); triggerChild.addExpander(expander); childNodes.add(triggerChild); } return childNodes; } }