Package com.dci.intellij.dbn.object.filter.type

Source Code of com.dci.intellij.dbn.object.filter.type.ObjectTypeFilterSettings

package com.dci.intellij.dbn.object.filter.type;

import com.dci.intellij.dbn.browser.model.BrowserTreeNode;
import com.dci.intellij.dbn.common.filter.Filter;
import com.dci.intellij.dbn.common.options.ProjectConfiguration;
import com.dci.intellij.dbn.common.options.setting.BooleanSetting;
import com.dci.intellij.dbn.object.common.DBObject;
import com.dci.intellij.dbn.object.common.DBObjectType;
import com.dci.intellij.dbn.object.common.list.DBObjectList;
import com.dci.intellij.dbn.object.filter.type.ui.ObjectTypeFilterSettingsForm;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.InvalidDataException;
import com.intellij.openapi.util.WriteExternalException;
import org.jdom.Element;
import org.jetbrains.annotations.Nullable;

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

public class ObjectTypeFilterSettings extends ProjectConfiguration<ObjectTypeFilterSettingsForm> {
    private List<ObjectTypeFilterSetting> objectTypeFilterSettings;
    private ObjectTypeFilterSettings master;
    private BooleanSetting useMasterSettings = new BooleanSetting("use-master-settings", true);

    public ObjectTypeFilterSettings(Project project, @Nullable ObjectTypeFilterSettings master) {
        super(project);
        this.master = master;
    }

    public ObjectTypeFilterSettings getMasterSettings() {
        return master;
    }

    public BooleanSetting getUseMasterSettings() {
        return useMasterSettings;
    }

    @Override
    public ObjectTypeFilterSettingsForm createConfigurationEditor() {
        return new ObjectTypeFilterSettingsForm(this);
    }

    public Filter<BrowserTreeNode> getElementFilter() {
        return elementFilter;
    }

    public Filter<DBObjectType> getTypeFilter() {
        return typeFilter;
    }

    private Filter<BrowserTreeNode> elementFilter = new Filter<BrowserTreeNode>() {
        public boolean accepts(BrowserTreeNode treeNode) {
            if (treeNode == null) {
                return false;
            }

            if (treeNode instanceof DBObject) {
                DBObject object = (DBObject) treeNode;
                DBObjectType objectType = object.getObjectType();
                return isVisible(objectType);
            }

            if (treeNode instanceof DBObjectList) {
                DBObjectList objectList = (DBObjectList) treeNode;
                return isVisible(objectList.getObjectType());
            }

            return true;
        }
    };

    private Filter<DBObjectType> typeFilter = new Filter<DBObjectType>() {
        public boolean accepts(DBObjectType objectType) {
            if (objectType == null) {
                return false;
            }
            return isVisible(objectType);
        }
    };

    private boolean isVisible(DBObjectType objectType) {
        return master == null ?
            isSelected(objectType) :
            useMasterSettings.value() ?
                    master.isSelected(objectType) :
                    master.isSelected(objectType) && isSelected(objectType);
    }

    private boolean isSelected(DBObjectType objectType) {
        ObjectTypeFilterSetting objectTypeEntry = getObjectTypeEntry(objectType);
        return objectTypeEntry == null || objectTypeEntry.isSelected();
    }

    private void setVisible(DBObjectType objectType, boolean visible) {
        ObjectTypeFilterSetting objectTypeEntry = getObjectTypeEntry(objectType);
        objectTypeEntry.setSelected(visible);
    }


    private ObjectTypeFilterSetting getObjectTypeEntry(DBObjectType objectType) {
        for (ObjectTypeFilterSetting objectTypeEntry : getSettings()) {
            DBObjectType visibleObjectType = objectTypeEntry.getObjectType();
            if (visibleObjectType == objectType || objectType.isInheriting(visibleObjectType)) {
                return objectTypeEntry;
            }
        }
        return null;
    }

    public synchronized List<ObjectTypeFilterSetting> getSettings() {
        if (objectTypeFilterSettings == null) {
            objectTypeFilterSettings = new ArrayList<ObjectTypeFilterSetting>();
            objectTypeFilterSettings.add(new ObjectTypeFilterSetting(this, DBObjectType.SCHEMA));
            objectTypeFilterSettings.add(new ObjectTypeFilterSetting(this, DBObjectType.USER));
            objectTypeFilterSettings.add(new ObjectTypeFilterSetting(this, DBObjectType.ROLE));
            objectTypeFilterSettings.add(new ObjectTypeFilterSetting(this, DBObjectType.PRIVILEGE));
            objectTypeFilterSettings.add(new ObjectTypeFilterSetting(this, DBObjectType.CHARSET));
            objectTypeFilterSettings.add(new ObjectTypeFilterSetting(this, DBObjectType.TABLE));
            objectTypeFilterSettings.add(new ObjectTypeFilterSetting(this, DBObjectType.VIEW));
            objectTypeFilterSettings.add(new ObjectTypeFilterSetting(this, DBObjectType.MATERIALIZED_VIEW));
            objectTypeFilterSettings.add(new ObjectTypeFilterSetting(this, DBObjectType.NESTED_TABLE));
            objectTypeFilterSettings.add(new ObjectTypeFilterSetting(this, DBObjectType.COLUMN));
            objectTypeFilterSettings.add(new ObjectTypeFilterSetting(this, DBObjectType.INDEX));
            objectTypeFilterSettings.add(new ObjectTypeFilterSetting(this, DBObjectType.CONSTRAINT));
            objectTypeFilterSettings.add(new ObjectTypeFilterSetting(this, DBObjectType.TRIGGER));
            objectTypeFilterSettings.add(new ObjectTypeFilterSetting(this, DBObjectType.SYNONYM));
            objectTypeFilterSettings.add(new ObjectTypeFilterSetting(this, DBObjectType.SEQUENCE));
            objectTypeFilterSettings.add(new ObjectTypeFilterSetting(this, DBObjectType.PROCEDURE));
            objectTypeFilterSettings.add(new ObjectTypeFilterSetting(this, DBObjectType.FUNCTION));
            objectTypeFilterSettings.add(new ObjectTypeFilterSetting(this, DBObjectType.PACKAGE));
            objectTypeFilterSettings.add(new ObjectTypeFilterSetting(this, DBObjectType.TYPE));
            objectTypeFilterSettings.add(new ObjectTypeFilterSetting(this, DBObjectType.TYPE_ATTRIBUTE));
            objectTypeFilterSettings.add(new ObjectTypeFilterSetting(this, DBObjectType.ARGUMENT));

            objectTypeFilterSettings.add(new ObjectTypeFilterSetting(this, DBObjectType.DIMENSION));
            objectTypeFilterSettings.add(new ObjectTypeFilterSetting(this, DBObjectType.CLUSTER));
            objectTypeFilterSettings.add(new ObjectTypeFilterSetting(this, DBObjectType.DBLINK));
        }
        return objectTypeFilterSettings;
    }

    public boolean isSelected(ObjectTypeFilterSetting objectFilterEntry) {
        for (ObjectTypeFilterSetting entry : objectTypeFilterSettings) {
            if (entry.equals(objectFilterEntry)) {
                return entry.isSelected();
            }
        }
        return false;
    }


    public String getConfigElementName() {
        return "object-type-filter";
    }

    public void readConfiguration(Element element) throws InvalidDataException {
        useMasterSettings.readConfigurationAttribute(element);
        for (Object o : element.getChildren()) {
            Element child = (Element) o;
            String typeName = child.getAttributeValue("name");
            DBObjectType objectType = DBObjectType.getObjectType(typeName);
            if (objectType != null) {
                boolean enabled = Boolean.parseBoolean(child.getAttributeValue("enabled"));
                setVisible(objectType, enabled);
            }
        }
    }

    public void writeConfiguration(Element element) throws WriteExternalException {
        if (master != null) {
            useMasterSettings.writeConfigurationAttribute(element);
        }

        for (ObjectTypeFilterSetting objectTypeEntry : getSettings()) {
            Element child = new Element("object-type");
            child.setAttribute("name", objectTypeEntry.getName());
            child.setAttribute("enabled", Boolean.toString(objectTypeEntry.isSelected()));
            element.addContent(child);
        }
    }
}
TOP

Related Classes of com.dci.intellij.dbn.object.filter.type.ObjectTypeFilterSettings

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.