|
What this is
Other links
The source code/* * Sun Public License Notice * * The contents of this file are subject to the Sun Public License * Version 1.0 (the "License"). You may not use this file except in * compliance with the License. A copy of the License is available at * http://www.sun.com/ * * The Original Code is NetBeans. The Initial Developer of the Original * Code is Sun Microsystems, Inc. Portions Copyright 1997-2004 Sun * Microsystems, Inc. All Rights Reserved. */ package org.netbeans.modules.db.explorer.infos; import java.io.IOException; import java.sql.*; import java.util.*; import org.openide.NotifyDescriptor; import org.openide.nodes.Node; import org.netbeans.lib.ddl.*; import org.netbeans.lib.ddl.impl.*; import org.netbeans.lib.ddl.adaptors.*; import org.netbeans.modules.db.DatabaseException; import org.netbeans.modules.db.explorer.DatabaseNodeChildren; import org.netbeans.modules.db.explorer.infos.*; import org.netbeans.modules.db.explorer.nodes.*; public class TableNodeInfo extends DatabaseNodeInfo { static final long serialVersionUID =-632875098783935367L; public void initChildren(Vector children) throws DatabaseException { initChildren(children, null); } private void initChildren(Vector children, String columnname) throws DatabaseException { try { String table = (String)get(DatabaseNode.TABLE); DriverSpecification drvSpec = getDriverSpecification(); // Primary keys Hashtable ihash = new Hashtable(); drvSpec.getPrimaryKeys(table); ResultSet rs = drvSpec.getResultSet(); if (rs != null) { HashMap rset = new HashMap(); DatabaseNodeInfo iinfo; while (rs.next()) { rset = drvSpec.getRow(); iinfo = DatabaseNodeInfo.createNodeInfo(this, DatabaseNode.PRIMARY_KEY, rset); String iname = (String)iinfo.get("name"); //NOI18N ihash.put(iname,iinfo); rset.clear(); } rs.close(); } // Indexes Hashtable ixhash = new Hashtable(); drvSpec.getIndexInfo(table, true, false); rs = drvSpec.getResultSet(); if (rs != null) { HashMap rset = new HashMap(); DatabaseNodeInfo iinfo; while (rs.next()) { rset = drvSpec.getRow(); if (rset.get(new Integer(9)) == null) continue; iinfo = DatabaseNodeInfo.createNodeInfo(this, DatabaseNode.INDEXED_COLUMN, rset); String iname = (String)iinfo.get("name"); //NOI18N ixhash.put(iname,iinfo); rset.clear(); } rs.close(); } /* // Foreign keys Hashtable fhash = new Hashtable(); rs = dmd.getImportedKeys(catalog,user,table); while (rs.next()) { DatabaseNodeInfo finfo = DatabaseNodeInfo.createNodeInfo(this, DatabaseNode.FOREIGN_KEY, rs); String iname = (String)finfo.get("name"); //NOI18N fhash.put(iname,finfo); } rs.close(); */ // Columns drvSpec.getColumns(table, columnname); rs = drvSpec.getResultSet(); if (rs != null) { HashMap rset = new HashMap(); DatabaseNodeInfo nfo; while (rs.next()) { rset = drvSpec.getRow(); String cname = (String) rset.get(new Integer(4)); if (ihash.containsKey(cname)) { nfo = (DatabaseNodeInfo)ihash.get(cname); DatabaseNodeInfo tempInfo = DatabaseNodeInfo.createNodeInfo(this, DatabaseNode.COLUMN, rset); copyProperties(tempInfo, nfo); } else if (ixhash.containsKey(cname)) { nfo = (DatabaseNodeInfo)ixhash.get(cname); DatabaseNodeInfo tempInfo = DatabaseNodeInfo.createNodeInfo(this, DatabaseNode.COLUMN, rset); copyProperties(tempInfo, nfo); } // else // if (fhash.containsKey(cname)) { // nfo = (DatabaseNodeInfo)fhash.get(cname); else // nfo = DatabaseNodeInfo.createNodeInfo(this, DatabaseNode.COLUMN, drvSpec.rsTemp); nfo = DatabaseNodeInfo.createNodeInfo(this, DatabaseNode.COLUMN, rset); children.add(nfo); rset.clear(); } rs.close(); } } catch (Exception e) { throw new DatabaseException(e.getMessage()); } } /** * Copies all properties from soure to target. Existing properties are not * overwritten */ private void copyProperties(DatabaseNodeInfo source, DatabaseNodeInfo target) { Enumeration keys = source.keys(); while (keys.hasMoreElements()) { String nextKey = keys.nextElement().toString(); /* existing properties are not overwritten*/ if (target.get(nextKey) == null) target.put(nextKey, source.get(nextKey)); } } public void setProperty(String key, Object obj) { try { if (key.equals("remarks")) setRemarks((String)obj); //NOI18N put(key, obj); } catch (Exception ex) { ex.printStackTrace(); } } public void setRemarks(String rem) throws DatabaseException { String tablename = (String)get(DatabaseNode.TABLE); Specification spec = (Specification)getSpecification(); try { AbstractCommand cmd = spec.createCommandCommentTable(tablename, rem); cmd.setObjectOwner((String)get(DatabaseNodeInfo.SCHEMA)); cmd.execute(); } catch (Exception e) { throw new DatabaseException(e.getMessage()); } } public void dropIndex(DatabaseNodeInfo tinfo) throws DatabaseException { //??? } public void refreshChildren() throws DatabaseException { // force init collection getNode().getChildren().getNodes(); // create list of columns (infos) Vector charr = new Vector(); put(DatabaseNodeInfo.CHILDREN, charr); initChildren(charr); // create sub-tree (by infos) try { Node[] subTreeNodes = new Node[charr.size()+1/*special node Foreign keys*/+/*special node Indexes*/1]; // current sub-tree DatabaseNodeChildren children = (DatabaseNodeChildren) getNode().getChildren(); final Node[] childrenNodes = children.getNodes(); for (int i=0; i < childrenNodes.length; i++) // is it node Indexes if ((childrenNodes[i]).getCookie(IndexListNodeInfo.class) != null) { final int j = i; javax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() { try { // refresh indexes ((DatabaseNode) childrenNodes[j]).getInfo().refreshChildren(); } catch(Exception ex) { org.openide.ErrorManager.getDefault().notify(org.openide.ErrorManager.INFORMATIONAL, ex); } } }); // add into refreshed sub-tree subTreeNodes[charr.size()+1] = childrenNodes[i]; } else // is it node Foreign keys or column? if ((childrenNodes[i]).getCookie(ForeignKeyListNodeInfo.class) != null) { final int j = i; javax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() { try { // refresh foreign keys ((DatabaseNode) childrenNodes[j]).getInfo().refreshChildren(); } catch(Exception ex) { org.openide.ErrorManager.getDefault().notify(org.openide.ErrorManager.INFORMATIONAL, ex); } } }); // add into refreshed sub-tree subTreeNodes[charr.size()] = childrenNodes[i]; } // remove current sub-tree // children.remove(childrenNodes); // build refreshed sub-tree for (int i=0; i |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.