Beispiel #1
0
    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)
Beispiel #2
0
     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':