def valueChanged(self, tse): path = self.tree.getSelectionPath() if not path: c = self.tree.getModel().getRoot() else: c = path.getLastPathComponent() node = c.getUserObject() fill_table = False fill_text = False try: db = c.getParent().getUserObject().db except: try: db = c.getParent().getParent().getUserObject().db except: pass if node.node_type == 'DOMAINS': h, d = db.domains() th = ['NAME', 'TYPE', 'CHECK', 'DEFAULT', 'DESCRIPTION'] td = [] for r in d: row = dict(zip(h, r)) td.append([row['NAME'], fbutil.fieldtype_to_string(row, False), row['VALIDATION_SOURCE'], fbutil.default_source_string(row), row['DESCRIPTION']]) h, d = th, td fill_table = True elif node.node_type == 'EXCEPTIONS': h, d = db.exceptions() fill_table = True elif node.node_type == 'FUNCTIONS': h, d = db.functions() fill_table = True elif node.node_type == 'GENERATORS': h, d = db.generators() h.append('COUNT') for r in d: r.append(db.get_generator_id(r[0])) fill_table = True elif node.node_type == 'PROCEDURES': h, d = db.procedures() if not c.getChildCount(): for r in d: c.add(DefaultMutableTreeNode(TreeNode(r[0], 'PROCEDURE'))) fill_table = True elif node.node_type == 'PROCEDURE': h = ['NAME', 'I/O', 'TYPE', 'DESCRIPTION'] d = [] p = db.procedure_source(node.name) for in_p in p['IN_PARAMS']: d.append([in_p['NAME'], 'IN', fbutil.fieldtype_to_string(in_p), in_p['DESCRIPTION']]) for out_p in p['OUT_PARAMS']: d.append([out_p['NAME'], 'OUT', fbutil.fieldtype_to_string(out_p), out_p['DESCRIPTION']]) fill_table = True elif node.node_type == 'ROLES': h, d = db.roles() if not c.getChildCount(): for r in d: c.add(DefaultMutableTreeNode(TreeNode(r[0], 'ROLE'))) fill_table = True elif node.node_type == 'ROLE': h, d = db.grant_users(node.name) fill_table = True elif node.node_type == 'TABLES' or node.node_type == 'SYSTEMTABLES': system_flag = 0 if node.node_type == 'TABLES' else 1 h, d = db.tables(system_flag) if not c.getChildCount(): for r in d: k = 'TABLE' if node.node_type == 'TABLES' else 'SYSTEMTABLE' c.add(DefaultMutableTreeNode(TreeNode(r[0], k))) fill_table = True elif node.node_type == 'TABLE' or node.node_type == 'SYSTEMTABLE': h, d = db.columns(node.name) th = ['NAME', 'TYPE', 'IS NULL', 'DEFAULT', 'DESCRIPTION'] td = [] for r in d: row = dict(zip(h, r)) td.append([row['NAME'], fbutil.fieldtype_to_string(row), row['NULL_FLAG'], row['DEFAULT_SOURCE'], row['DESCRIPTION']]) h, d = th, td fill_table = True elif node.node_type == 'TRIGGERS': h, d = db.triggers() if not c.getChildCount(): for r in d: k = 'TRIGGER_INACT' if r[4] == '1' else 'TRIGGER' c.add(DefaultMutableTreeNode(TreeNode(r[0], k))) fill_table = True elif node.node_type == 'TRIGGER' or node.node_type == 'TRIGGER_INACT': s = db.trigger_source(node.name) fill_text = True elif node.node_type == 'VIEWS': h, d = db.views() if not c.getChildCount(): for r in d: c.add(DefaultMutableTreeNode(TreeNode(r[0], 'VIEW'))) fill_table = True elif node.node_type == 'VIEW': h, d = db.columns(node.name) fill_table = True th = ['NAME', 'TYPE', 'DESCRIPTION'] td = [] for r in d: row = dict(zip(h, r)) td.append([row['NAME'], fbutil.fieldtype_to_string(row), row['DESCRIPTION']]) h, d = th, td fill_table = True loc = self.split.getDividerLocation() if fill_table: table = JTable(d, head_titles(h)) self.split.setRightComponent(JScrollPane(table)) adjust_column_width(table) elif fill_text: text = JTextArea(s) text.setEditable(False) loc = self.split.getDividerLocation() self.split.setRightComponent(JScrollPane(text)) self.split.setDividerLocation(loc) else: self.split.setRightComponent(JScrollPane()) self.split.setDividerLocation(loc) if node.node_type == 'TABLE' or node.node_type == 'SYSTEMTABLE': pk = [] fk = [] uk = [] for r in db.key_constraints_and_index(node.name): if r['CONST_TYPE'] == 'PRIMARY KEY': pk += r['FIELD_NAME'] elif r['CONST_TYPE'] == 'FOREIGN KEY': fk += r['FIELD_NAME'] elif r['CONST_TYPE'] == 'UNIQUE': uk += r['FIELD_NAME'] table.setDefaultRenderer(Object, ColumnTableCellRenderer(pk, fk, uk)) self.update_menu_tree(c)
table = JTable(rd, head_titles(rh)) loc = self.split.getDividerLocation() self.split.setRightComponent(JScrollPane(table)) adjust_column_width(table) self.split.setDividerLocation(loc) elif ac == 'VIEW_SOURCE': db = c.getParent().getParent().getUserObject().db if node.node_type == 'VIEW': sql = 'recreate view ' + node.name + ' as\n' sql += db.view_source(node.name) elif node.node_type == 'PROCEDURE': proc = db.procedure_source(node.name) sql = 'set term !! ;\n' sql += 'alter procedure ' + proc['NAME'] + '(' sql += ','.join([in_p['NAME'] + ' ' + fbutil.fieldtype_to_string(in_p) for in_p in proc['IN_PARAMS']]) sql += ')\nreturns (' sql += ','.join([out_p['NAME'] + ' ' + fbutil.fieldtype_to_string(out_p) for out_p in proc['OUT_PARAMS']]) sql += ') as\n' + '\n'.join(proc['SOURCE'].split('\n')) sql += '!!\nset term ; !!' text = JTextArea(sql) text.setEditable(False) loc = self.split.getDividerLocation() self.split.setRightComponent(JScrollPane(text)) self.split.setDividerLocation(loc) elif ac == 'QUIT': self.quit_app(None) elif ac == 'ABOUT':