Package com.dci.intellij.dbn.editor.data.model

Source Code of com.dci.intellij.dbn.editor.data.model.DatasetEditorColumnInfo

package com.dci.intellij.dbn.editor.data.model;

import com.dci.intellij.dbn.data.model.resultSet.ResultSetColumnInfo;
import com.dci.intellij.dbn.data.type.DBDataType;
import com.dci.intellij.dbn.data.type.GenericDataType;
import com.dci.intellij.dbn.editor.data.DatasetEditorUtils;
import com.dci.intellij.dbn.editor.data.options.DataEditorSettings;
import com.dci.intellij.dbn.object.DBColumn;
import com.dci.intellij.dbn.object.lookup.DBObjectRef;
import org.jetbrains.annotations.Nullable;

import java.util.ArrayList;
import java.util.List;

public class DatasetEditorColumnInfo extends ResultSetColumnInfo {
    private static final List<String> EMPTY_LIST = new ArrayList<String>(0);
    private List<String> possibleValues;
    private DBObjectRef<DBColumn> columnRef;
    private int columnIndex;
    private boolean isPrimaryKey;
    private boolean isForeignKey;

    public DatasetEditorColumnInfo(DBColumn column, int columnIndex, int resultSetColumnIndex) {
        super(columnIndex, resultSetColumnIndex);
        this.columnRef = DBObjectRef.from(column);
        this.columnIndex = columnIndex;
        this.isPrimaryKey = column.isPrimaryKey();
        this.isForeignKey = column.isForeignKey();
    }

    @Nullable
    public DBColumn getColumn() {
        return DBObjectRef.get(columnRef);
    }

    public String getName() {
        return columnRef.getName();
    }

    public int getColumnIndex() {
        return columnIndex;
    }

    @Nullable
    public DBDataType getDataType() {
        DBColumn column = getColumn();
        return column == null ? null : column.getDataType();
    }

    public boolean isPrimaryKey() {
        return isPrimaryKey;
    }

    public boolean isForeignKey() {
        return isForeignKey;
    }

    public synchronized List<String> getPossibleValues() {
        if (possibleValues == null) {
            setPossibleValues(EMPTY_LIST);
            List<String> values;
            DBColumn column = getColumn();
            if (column != null) {
                if (column.isForeignKey()) {
                    DBColumn foreignKeyColumn = column.getForeignKeyColumn();
                    values = DatasetEditorUtils.loadDistinctColumnValues(foreignKeyColumn);
                } else {
                    values = DatasetEditorUtils.loadDistinctColumnValues(column);
                }

                if (values != null) {
                    DataEditorSettings dataEditorSettings = DataEditorSettings.getInstance(column.getProject());
                    int maxElementCount = dataEditorSettings.getValueListPopupSettings().getElementCountThreshold();
                    if (values.size() > maxElementCount) values.clear();
                    possibleValues = values;
                }
            }
        }
        return possibleValues;
    }

    public void setPossibleValues(List<String> possibleValues) {
        this.possibleValues = possibleValues;
    }

    public void dispose() {
        if (possibleValues != null) possibleValues.clear();
    }

    public boolean isSortable() {
        DBColumn column = getColumn();
        DBDataType type = column == null ? null : column.getDataType();
        return type != null && type.isNative() &&
                type.getNativeDataType().getBasicDataType().is(
                        GenericDataType.LITERAL,
                        GenericDataType.NUMERIC,
                        GenericDataType.DATE_TIME);
    }

}
TOP

Related Classes of com.dci.intellij.dbn.editor.data.model.DatasetEditorColumnInfo

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.