|
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.