Package com.dci.intellij.dbn.data.record.ui

Source Code of com.dci.intellij.dbn.data.record.ui.ColumnValueTextField

package com.dci.intellij.dbn.data.record.ui;

import com.dci.intellij.dbn.common.ui.MouseUtil;
import com.dci.intellij.dbn.common.util.TextAttributesUtil;
import com.dci.intellij.dbn.data.editor.color.DataGridTextAttributesKeys;
import com.dci.intellij.dbn.data.record.DatasetRecord;
import com.dci.intellij.dbn.editor.data.DatasetEditorManager;
import com.dci.intellij.dbn.editor.data.filter.DatasetFilterInput;
import com.dci.intellij.dbn.object.DBColumn;
import com.dci.intellij.dbn.object.DBConstraint;
import com.dci.intellij.dbn.object.DBDataset;
import com.dci.intellij.dbn.object.common.DBObject;
import com.dci.intellij.dbn.object.lookup.DBObjectRef;
import com.intellij.ui.SimpleTextAttributes;
import org.jetbrains.annotations.Nullable;

import javax.swing.JDialog;
import javax.swing.JTextField;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

public class ColumnValueTextField extends JTextField {
    private DatasetRecord record;
    private DBObjectRef<DBColumn> columnRef;

    public ColumnValueTextField(DatasetRecord record, DBColumn column) {
        this.record = record;
        this.columnRef = DBObjectRef.from(column);
        if (column.isPrimaryKey()) {
            SimpleTextAttributes textAttributes = TextAttributesUtil.getSimpleTextAttributes(DataGridTextAttributesKeys.PRIMARY_KEY);
            setForeground(textAttributes.getFgColor());
            Color background = textAttributes.getBgColor();
            if (background != null) {
                setBackground(background);
            }
        } else if (column.isForeignKey()) {
            addMouseListener(mouseListener);
            SimpleTextAttributes textAttributes = TextAttributesUtil.getSimpleTextAttributes(DataGridTextAttributesKeys.FOREIGN_KEY);
            setForeground(textAttributes.getFgColor());
            Color background = textAttributes.getBgColor();
            if (background != null) {
                setBackground(background);
            }
        }

    }

    protected void processMouseMotionEvent(MouseEvent e) {
        DBColumn column = getColumn();
        if (column != null && column.isForeignKey()) {
            if (e.isControlDown() && e.getID() != MouseEvent.MOUSE_DRAGGED && record.getColumnValue(column) != null) {
                setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
                setToolTipText("<html>Show referenced <b>" + column.getForeignKeyColumn().getDataset().getQualifiedName() + "</b> record<html>");
            } else {
                super.processMouseMotionEvent(e);
                setCursor(Cursor.getDefaultCursor());
                setToolTipText(null);
            }
        } else {
            super.processMouseMotionEvent(e);
        }
    }
   
    @Nullable
    public DatasetFilterInput resolveForeignKeyRecord() {
        DBColumn column = getColumn();
        if (column != null) {
            for (DBConstraint constraint : column.getConstraints()) {
                if (constraint.isForeignKey()) {
                    DBConstraint foreignKeyConstraint = constraint.getForeignKeyConstraint();
                    if (foreignKeyConstraint != null) {
                        DBDataset foreignKeyDataset = foreignKeyConstraint.getDataset();
                        DatasetFilterInput filterInput = new DatasetFilterInput(foreignKeyDataset);

                        for (DBColumn constraintColumn : constraint.getColumns()) {
                            DBObject constraintCol = constraintColumn.getUndisposedElement();
                            if (constraintCol != null) {
                                DBColumn foreignKeyColumn = ((DBColumn) constraintCol).getForeignKeyColumn();
                                Object value = record.getColumnValue(column);
                                filterInput.setColumnValue(foreignKeyColumn, value);
                            }
                        }
                        return filterInput;
                    }
                }
            }
        }

        return null;
    }

    private DBColumn getColumn() {
        return DBObjectRef.get(columnRef);
    }

    private JDialog getEnclosingDialog() {
        return null;
    }
   
    MouseListener mouseListener = new MouseAdapter() {
        public void mouseClicked(MouseEvent event) {
            DBColumn column = getColumn();
            if (column != null && MouseUtil.isNavigationEvent(event)) {
                if (column.isForeignKey() && record.getColumnValue(column) != null) {
                    DatasetFilterInput filterInput = resolveForeignKeyRecord();
                    DatasetEditorManager datasetEditorManager = DatasetEditorManager.getInstance(column.getProject());
                    datasetEditorManager.navigateToRecord(filterInput, event);
                    event.consume();
                }
            }
        }       
       
    };
}
TOP

Related Classes of com.dci.intellij.dbn.data.record.ui.ColumnValueTextField

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.