Package com.dci.intellij.dbn.object.impl

Source Code of com.dci.intellij.dbn.object.impl.DBDatasetImpl

package com.dci.intellij.dbn.object.impl;

import com.dci.intellij.dbn.browser.ui.HtmlToolTipBuilder;
import com.dci.intellij.dbn.common.content.DynamicContent;
import com.dci.intellij.dbn.common.content.DynamicContentElement;
import com.dci.intellij.dbn.common.content.loader.DynamicContentLoader;
import com.dci.intellij.dbn.common.content.loader.DynamicContentResultSetLoader;
import com.dci.intellij.dbn.common.content.loader.DynamicSubcontentLoader;
import com.dci.intellij.dbn.common.util.CommonUtil;
import com.dci.intellij.dbn.data.type.DBDataType;
import com.dci.intellij.dbn.database.DatabaseMetadataInterface;
import com.dci.intellij.dbn.ddl.DDLFileType;
import com.dci.intellij.dbn.editor.DBContentType;
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.DBSchema;
import com.dci.intellij.dbn.object.DBTrigger;
import com.dci.intellij.dbn.object.common.DBObjectRelationType;
import com.dci.intellij.dbn.object.common.DBObjectType;
import com.dci.intellij.dbn.object.common.DBSchemaObjectImpl;
import com.dci.intellij.dbn.object.common.list.DBObjectList;
import com.dci.intellij.dbn.object.common.list.DBObjectListContainer;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

public abstract class DBDatasetImpl extends DBSchemaObjectImpl implements DBDataset {
    protected DBObjectList<DBColumn> columns;
    protected DBObjectList<DBConstraint> constraints;
    protected DBObjectList<DBTrigger> triggers;

    public DBDatasetImpl(DBSchema parent, DBContentType contentType, ResultSet resultSet) throws SQLException {
        super(parent, contentType, resultSet);
    }

    protected void initLists() {
        super.initLists();
        DBSchema schema = getSchema();
        DBObjectListContainer childObjects = initChildObjects();
        columns = childObjects.createSubcontentObjectList(DBObjectType.COLUMN, this, COLUMNS_LOADER, schema, true);
        constraints = childObjects.createSubcontentObjectList(DBObjectType.CONSTRAINT, this, CONSTRAINTS_LOADER, schema, true);
        triggers = childObjects.createSubcontentObjectList(DBObjectType.TRIGGER, this, TRIGGERS_LOADER, schema, true);

        initChildObjectRelations().createSubcontentObjectRelationList(
                DBObjectRelationType.CONSTRAINT_COLUMN, this,
                "Constraint column relations",
                CONSTRAINT_COLUMN_RELATION_LOADER,
                schema);
    }

    public List<DBColumn> getColumns() {
        return columns.getObjects();
    }

    public List<DBConstraint> getConstraints() {
        return constraints.getObjects();
    }

    public List<DBTrigger> getTriggers() {
        return triggers.getObjects();
    }

    public DBColumn getColumn(String name) {
        return columns.getObject(name);
    }

    public DBConstraint getConstraint(String name) {
        return constraints.getObject(name);
    }

    public DBTrigger getTrigger(String name) {
        return triggers.getObject(name);
    }

    public boolean hasLobColumns() {
        for (DBColumn column : getColumns()) {
            DBDataType dataType = column.getDataType();
            if (dataType.isNative()) {
                if (dataType.getNativeDataType().isLOB()) {
                    return true;
                }
            }

        }
        return false;
    }

    public void buildToolTip(HtmlToolTipBuilder ttb) {
        ttb.append(true, getObjectType().getName(), true);
        ttb.createEmptyRow();
        super.buildToolTip(ttb);
    }

    /*********************************************************
     *                         Loaders                       *
     *********************************************************/
    private static final DynamicSubcontentLoader CONSTRAINT_COLUMN_RELATION_LOADER = new DynamicSubcontentLoader(true) {
        public DynamicContentLoader getAlternativeLoader() {
            return CONSTRAINT_COLUMN_RELATION_ALTERNATIVE_LOADER;
        }

        public boolean match(DynamicContentElement sourceElement, DynamicContent dynamicContent) {
            DBConstraintColumnRelation constraintColumnRelation = (DBConstraintColumnRelation) sourceElement;
            DBDataset dataset = (DBDataset) dynamicContent.getParent();
            return constraintColumnRelation.getColumn().getDataset() == dataset;
        }
    };

    private static final DynamicContentLoader CONSTRAINT_COLUMN_RELATION_ALTERNATIVE_LOADER = new DynamicContentResultSetLoader() {
        public ResultSet createResultSet(DynamicContent dynamicContent, Connection connection) throws SQLException {
            DatabaseMetadataInterface metadataInterface = dynamicContent.getConnectionHandler().getInterfaceProvider().getMetadataInterface();
            DBDataset dataset = (DBDataset) dynamicContent.getParent();
            return metadataInterface.loadConstraintRelations(dataset.getSchema().getName(), dataset.getName(), connection);
        }

        public DynamicContentElement createElement(DynamicContent dynamicContent, ResultSet resultSet, LoaderCache loaderCache) throws SQLException {
            String columnName = resultSet.getString("COLUMN_NAME");
            String constraintName = resultSet.getString("CONSTRAINT_NAME");
            int position = resultSet.getInt("POSITION");

            DBDataset dataset = (DBDataset) dynamicContent.getParent();
            DBColumn column = dataset.getColumn(columnName);
            DBConstraint constraint = dataset.getConstraint(constraintName);

            if (column != null && constraint != null) {
                return new DBConstraintColumnRelation(constraint, column, position);
            }
            return null;
        }
    };

    private static final DynamicSubcontentLoader COLUMNS_LOADER = new DynamicSubcontentLoader<DBColumn>(true) {
        public boolean match(DBColumn column, DynamicContent dynamicContent) {
            DBDataset dataset = (DBDataset) dynamicContent.getParent();
            return CommonUtil.safeEqual(column.getDataset(), dataset);
        }

        public DynamicContentLoader<DBColumn> getAlternativeLoader() {
            return COLUMNS_ALTERNATIVE_LOADER;
        }
    };
    private static final DynamicContentLoader<DBColumn> COLUMNS_ALTERNATIVE_LOADER = new DynamicContentResultSetLoader<DBColumn>() {
        public ResultSet createResultSet(DynamicContent<DBColumn> dynamicContent, Connection connection) throws SQLException {
            DatabaseMetadataInterface metadataInterface = dynamicContent.getConnectionHandler().getInterfaceProvider().getMetadataInterface();
            DBDataset dataset = (DBDataset) dynamicContent.getParent();
            return metadataInterface.loadColumns(dataset.getSchema().getName(), dataset.getName(), connection);
        }

        public DBColumn createElement(DynamicContent<DBColumn> dynamicContent, ResultSet resultSet, LoaderCache loaderCache) throws SQLException {
            DBDatasetImpl dataset = (DBDatasetImpl) dynamicContent.getParent();
            return new DBColumnImpl(dataset, resultSet);
        }
    };

    private static final DynamicSubcontentLoader<DBConstraint> CONSTRAINTS_LOADER = new DynamicSubcontentLoader<DBConstraint>(true) {
        public boolean match(DBConstraint constraint, DynamicContent dynamicContent) {
            DBDataset dataset = (DBDataset) dynamicContent.getParent();
            DBDataset constraintDataset = constraint.getDataset();
            return constraintDataset != null && constraintDataset.equals(dataset);
        }

        public DynamicContentLoader<DBConstraint> getAlternativeLoader() {
            return CONSTRAINTS_ALTERNATIVE_LOADER;
        }
    };

    private static final DynamicContentLoader<DBConstraint> CONSTRAINTS_ALTERNATIVE_LOADER = new DynamicContentResultSetLoader<DBConstraint>() {
        public ResultSet createResultSet(DynamicContent<DBConstraint> dynamicContent, Connection connection) throws SQLException {
            DatabaseMetadataInterface metadataInterface = dynamicContent.getConnectionHandler().getInterfaceProvider().getMetadataInterface();
            DBDataset dataset = (DBDataset) dynamicContent.getParent();
            return metadataInterface.loadConstraints(dataset.getSchema().getName(), dataset.getName(), connection);
        }

        public DBConstraint createElement(DynamicContent<DBConstraint> dynamicContent, ResultSet resultSet, LoaderCache loaderCache) throws SQLException {
            DBDatasetImpl dataset = (DBDatasetImpl) dynamicContent.getParent();
            return new DBConstraintImpl(dataset, resultSet);
        }
    };

    private static final DynamicSubcontentLoader TRIGGERS_LOADER = new DynamicSubcontentLoader<DBTrigger>(true) {
        public boolean match(DBTrigger trigger, DynamicContent dynamicContent) {
            DBDataset dataset = (DBDataset) dynamicContent.getParent();
            return trigger.getDataset().equals(dataset);
        }

        public DynamicContentLoader<DBTrigger> getAlternativeLoader() {
            return TRIGGERS_ALTERNATIVE_LOADER;
        }
    };

    private static final DynamicContentLoader<DBTrigger> TRIGGERS_ALTERNATIVE_LOADER = new DynamicContentResultSetLoader<DBTrigger>() {
        public ResultSet createResultSet(DynamicContent<DBTrigger> dynamicContent, Connection connection) throws SQLException {
            DatabaseMetadataInterface metadataInterface = dynamicContent.getConnectionHandler().getInterfaceProvider().getMetadataInterface();
            DBDataset dataset = (DBDataset) dynamicContent.getParent();
            return metadataInterface.loadTriggers(dataset.getSchema().getName(), dataset.getName(), connection);
        }

        public DBTrigger createElement(DynamicContent<DBTrigger> dynamicContent, ResultSet resultSet, LoaderCache loaderCache) throws SQLException {
            DBDatasetImpl dataset = (DBDatasetImpl) dynamicContent.getParent();
            return new DBTriggerImpl(dataset, resultSet);
        }
    };

    /*********************************************************
     *                    DBEditableObject                   *
     ********************************************************/
    public DDLFileType getDDLFileType(DBContentType contentType) {
        return null;
    }

    public DDLFileType[] getDDLFileTypes() {
        return null;
    }
}
TOP

Related Classes of com.dci.intellij.dbn.object.impl.DBDatasetImpl

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.