Package com.dci.intellij.dbn.language.common.psi

Source Code of com.dci.intellij.dbn.language.common.psi.ExecutablePsiElement

package com.dci.intellij.dbn.language.common.psi;

import com.dci.intellij.dbn.common.util.NamingUtil;
import com.dci.intellij.dbn.execution.statement.StatementExecutionManager;
import com.dci.intellij.dbn.execution.statement.processor.StatementExecutionBasicProcessor;
import com.dci.intellij.dbn.language.common.element.NamedElementType;
import com.dci.intellij.dbn.language.common.element.util.ElementTypeAttribute;
import com.intellij.lang.ASTNode;
import com.intellij.openapi.editor.colors.TextAttributesKey;
import com.intellij.psi.PsiElement;
import gnu.trove.THashSet;
import org.jetbrains.annotations.Nullable;

import javax.swing.Icon;
import java.util.Set;

public class ExecutablePsiElement extends NamedPsiElement{
    private StatementExecutionBasicProcessor executionProcessor;

    public ExecutablePsiElement(ASTNode astNode, NamedElementType elementType) {
        super(astNode, elementType);
    }

    public synchronized StatementExecutionBasicProcessor getExecutionProcessor() {
        if (executionProcessor == null || !executionProcessor.matches(this, false)) {
            StatementExecutionManager  statementExecutionManager = StatementExecutionManager.getInstance(getProject());
            executionProcessor = statementExecutionManager.locateExecutionProcessor(this);
            if (executionProcessor == null) {
                executionProcessor = statementExecutionManager.createExecutionProcessor(this);
            }
        }
        return executionProcessor;
    }

    public String prepareStatementText(){
        PsiElement lastChild = getLastChild();
        while (lastChild != null && !(lastChild instanceof BasePsiElement)) {
            lastChild = lastChild.getPrevSibling();
        }
        BasePsiElement basePsiElement = (BasePsiElement) lastChild;
        String text = getText();
        if (basePsiElement != null && basePsiElement.getElementType() instanceof NamedElementType) {
            NamedElementType namedElementType = (NamedElementType) basePsiElement.getElementType();
            if (namedElementType.truncateOnExecution()) {
                return text.substring(0, text.length() - basePsiElement.getTextLength());
            }
        }
        return text;
    }

    public String createResultName() {
        Set<BasePsiElement> subjects = new THashSet<BasePsiElement>();
        collectSubjectPsiElements(subjects);
        return subjects.size() > 0 ? NamingUtil.createNamesList(subjects, 3) : null;
    }

    public NamedElementType getElementType() {
        return (NamedElementType) super.getElementType();
    }

    public boolean isQuery() {
        return getElementType().is(ElementTypeAttribute.QUERY);
    }

    public boolean isTransactional() {
        return getElementType().is(ElementTypeAttribute.TRANSACTIONAL);
    }

    public boolean isTransactionControl() {
        return getElementType().is(ElementTypeAttribute.TRANSACTION_CONTROL);
    }


    public boolean isNestedExecutable() {
        PsiElement parent = getParent();
        while (parent != null && !(parent instanceof RootPsiElement)) {
            if (parent instanceof ExecutablePsiElement) {
                return true;
            }
            parent = parent.getParent();
        }
        return false;
    }

    public boolean hasErrors() {
        return false;
    }

    public Object clone() {
        return super.clone();
    }



    /*********************************************************
     *                    ItemPresentation                   *
     *********************************************************/
    public String getPresentableText() {
        String resultName = createResultName();
        if (resultName != null) {
            return getElementType().getDescription() + " (" + resultName + ")";
        } else {
            return getElementType().getDescription();
        }

    }

    @Nullable
    public String getLocationString() {
        return null;
    }

    @Nullable
    public Icon getIcon(boolean open) {
        return super.getIcon(open);
    }

    @Nullable
    public TextAttributesKey getTextAttributesKey() {
        return null;
    }
}
TOP

Related Classes of com.dci.intellij.dbn.language.common.psi.ExecutablePsiElement

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.