home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 October / PCWorld_1998-10_cd.bin / software / prehled / inprise / JSAMPLES.Z / DBBrowserBean.java < prev    next >
Text File  |  1998-05-08  |  7KB  |  209 lines

  1. /*
  2.  * Copyright (c) 1997-1998 Borland International, Inc. All Rights Reserved.
  3.  * 
  4.  * This SOURCE CODE FILE, which has been provided by Borland as part
  5.  * of a Borland product for use ONLY by licensed users of the product,
  6.  * includes CONFIDENTIAL and PROPRIETARY information of Borland.  
  7.  *
  8.  * USE OF THIS SOFTWARE IS GOVERNED BY THE TERMS AND CONDITIONS 
  9.  * OF THE LICENSE STATEMENT AND LIMITED WARRANTY FURNISHED WITH
  10.  * THE PRODUCT.
  11.  *
  12.  * IN PARTICULAR, YOU WILL INDEMNIFY AND HOLD BORLAND, ITS RELATED
  13.  * COMPANIES AND ITS SUPPLIERS, HARMLESS FROM AND AGAINST ANY CLAIMS
  14.  * OR LIABILITIES ARISING OUT OF THE USE, REPRODUCTION, OR DISTRIBUTION
  15.  * OF YOUR PROGRAMS, INCLUDING ANY CLAIMS OR LIABILITIES ARISING OUT OF
  16.  * OR RESULTING FROM THE USE, MODIFICATION, OR DISTRIBUTION OF PROGRAMS
  17.  * OR FILES CREATED FROM, BASED ON, AND/OR DERIVED FROM THIS SOURCE
  18.  * CODE FILE.
  19.  */
  20.  
  21. package borland.samples.beans.dbbrowserbean;
  22.  
  23. import java.awt.*;
  24. import java.awt.event.*;
  25. import java.sql.*;
  26. import borland.jbcl.layout.*;
  27. import borland.jbcl.control.*;
  28. import borland.sql.dataset.*;
  29. import borland.jbcl.dataset.*;
  30. import borland.jbcl.model.*;
  31. import borland.jbcl.view.*;
  32. import borland.jbcl.model.*;
  33. import borland.jbcl.util.*;
  34. import com.objectspace.jgl.*;
  35.  
  36. public class DBBrowserBean extends BeanPanel implements BlackBox {
  37.   BevelPanel bevelPanel1 = new BevelPanel();
  38.   BorderLayout borderLayout1 = new BorderLayout();
  39.   BorderLayout borderLayout2 = new BorderLayout();
  40.   TreeControl treeControl1 = new TreeControl();
  41.   Database database1 = new Database();
  42.   String table = new String();
  43.   boolean addNotifyCalled = false;
  44.  
  45.   public static final String TABLE_SELECTION_EVENT = "TableSelectionChanged";
  46.  
  47.   public DBBrowserBean() {
  48.     try {
  49.       jbInit();
  50.     }
  51.     catch (Exception e) {
  52.       e.printStackTrace();
  53.     }
  54.   }
  55.  
  56.   private void jbInit() throws Exception{
  57.     treeControl1.setEditInPlace(false);
  58.     treeControl1.setStyle(borland.jbcl.view.TreeView.STYLE_ARROWS);
  59.     treeControl1.addSelectionListener(new DBBrowserBean_treeControl1_selectionAdapter(this));
  60.     treeControl1.addMouseListener(new DBBrowserBean_treeControl1_mouseAdapter(this));
  61.     treeControl1.setExpandByDefault(false);
  62.     bevelPanel1.setLayout(borderLayout2);
  63.     this.setLayout(borderLayout1);
  64.     this.add(bevelPanel1, BorderLayout.CENTER);
  65.     bevelPanel1.add(treeControl1, BorderLayout.CENTER);
  66.   }
  67.  
  68.   public String getTableName() {return this.table;}
  69.   public Database getDatabase() {return this.database1;}
  70.   public void setDatabase(Database db) {
  71.     this.database1 = db;
  72.     //this.setupTree();
  73.   }
  74.  
  75.   public void addNotify() {
  76.     super.addNotify();
  77.     if (!addNotifyCalled) {
  78.       addNotifyCalled = true;
  79.       if (database1 != null)
  80.         setupTree();
  81.     }
  82.   }
  83.  
  84.   private void setupTree() {
  85.     String[] tableArray = {"",""};
  86.     Image imageUserTable = ImageLoader.loadFromResource("table.gif", this);
  87.     Image imageSystemTable = ImageLoader.loadFromResource("systable.gif", this);
  88.     Image imageView = ImageLoader.loadFromResource("view.gif", this);
  89.     ImageLoader.waitForImage(this, imageUserTable);
  90.     ImageLoader.waitForImage(this, imageSystemTable);
  91.     ImageLoader.waitForImage(this, imageView);
  92.  
  93.     treeControl1.setViewManager( new BasicViewManager(new SelectableItemPainter(
  94.       new CompositeItemPainter(new ImageItemPainter(treeControl1, Alignment.LEFT),
  95.       new TextItemPainter()))));
  96.  
  97.     int i = 0;
  98.     if (database1 != null) {
  99.       try {
  100.         DatabaseMetaData d1 = database1.getMetaData();
  101.         GraphLocation root = treeControl1.setRoot(new Pair(null, d1.getURL()));
  102.         GraphLocation user = treeControl1.addChild(root, new Pair(null, "User Tables"));
  103.         GraphLocation system = treeControl1.addChild(root, new Pair(null, "System Tables"));
  104.         GraphLocation view = treeControl1.addChild(root, new Pair(null, "Views"));
  105.         treeControl1.expand(root);
  106.  
  107.     tableArray = this.getTables(database1, "TABLE");
  108.         for (i=0;i<tableArray.length;i++) {
  109.           treeControl1.addChild(user, new Pair(imageUserTable, tableArray[i]));
  110.         }
  111.  
  112.     tableArray = this.getTables(database1, "SYSTEM TABLE");
  113.         for (i=0;i<tableArray.length;i++) {
  114.           treeControl1.addChild(system, new Pair(imageSystemTable, tableArray[i]));
  115.         }
  116.  
  117.     tableArray = this.getTables(database1, "VIEW");
  118.         for (i=0;i<tableArray.length;i++) {
  119.           treeControl1.addChild(view, new Pair(imageView, tableArray[i]));
  120.         }
  121.       }
  122.       catch(DataSetException de) {System.out.println(de);}
  123.       catch(java.sql.SQLException se) {System.out.println(se);}
  124.       catch(Exception e) {System.out.println(e);}
  125.     }
  126.   }
  127.  
  128.   private String[] getTables(Database d, String type) throws Exception {
  129.     DatabaseMetaData mData;
  130.     String[] tableArray = {"",""};
  131.     int nTables = 0;
  132.     int nColumns = 0;
  133.     int i = 0;
  134.     String x[] = {type};
  135.  
  136.     mData = d.getMetaData();
  137.     ResultSet resultSet = mData.getTables( null, null, null, x);
  138.     while(resultSet.next())
  139.       nTables++;
  140.  
  141.     resultSet = mData.getTables( null, null, null, x);
  142.     ResultSetMetaData rsmd = resultSet.getMetaData();
  143.     nColumns = rsmd.getColumnCount();
  144.  
  145.     tableArray = new String[nTables];
  146.     while(resultSet.next()) {
  147.       tableArray[i] = resultSet.getString(3);
  148.       i++;
  149.     }
  150.     return tableArray;
  151.   }
  152.  
  153.   /***
  154.    * Expand and contract the tree with a single click
  155.    */
  156.   void treeControl1_mouseClicked(MouseEvent e) {
  157.     GraphLocation[] selections = treeControl1.getSelection().getAll();
  158.     if (e.getClickCount() == 2) {
  159.       if (selections[0].hasChildren() == borland.jbcl.util.TriState.YES) {
  160.         if (treeControl1.isExpanded(selections[0]))
  161.           treeControl1.collapse(selections[0]);
  162.         else
  163.           treeControl1.expand(selections[0]);
  164.       }
  165.     }
  166.   }
  167.  
  168.   /***
  169.    * process the action event here for table name change
  170.    * use can use the ActionPerformed and check the following syntax:
  171.    * Event e
  172.    * if ( e.getActionCommand() == "TableSelectionChanged") {
  173.    *   // Your code here
  174.    * }
  175.    */
  176.   void treeControl1_selectionChanged(GraphSelectionEvent e) {
  177.     GraphLocation[] selections = treeControl1.getSelection().getAll();
  178.     if (selections[0].hasChildren() == borland.jbcl.util.TriState.NO) {
  179.       this.table = ((Pair) treeControl1.get(selections[0])).second.toString();
  180.       processActionEvent(new ActionEvent(this,ActionEvent.ACTION_PERFORMED, TABLE_SELECTION_EVENT));
  181.     }
  182.   }
  183. }
  184.  
  185. class DBBrowserBean_treeControl1_mouseAdapter extends java.awt.event.MouseAdapter {
  186.   DBBrowserBean adaptee;
  187.  
  188.   DBBrowserBean_treeControl1_mouseAdapter(DBBrowserBean adaptee) {
  189.     this.adaptee = adaptee;
  190.   }
  191.  
  192.   public void mouseClicked(MouseEvent e) {
  193.     adaptee.treeControl1_mouseClicked(e);
  194.   }
  195. }
  196.  
  197. class DBBrowserBean_treeControl1_selectionAdapter extends borland.jbcl.model.GraphSelectionAdapter {
  198.   DBBrowserBean adaptee;
  199.  
  200.   DBBrowserBean_treeControl1_selectionAdapter(DBBrowserBean adaptee) {
  201.     this.adaptee = adaptee;
  202.   }
  203.  
  204.   public void selectionChanged(GraphSelectionEvent e) {
  205.     adaptee.treeControl1_selectionChanged(e);
  206.   }
  207. }
  208.  
  209.