Package com.dci.intellij.dbn.navigation.psi

Source Code of com.dci.intellij.dbn.navigation.psi.NavigationPsiCache

package com.dci.intellij.dbn.navigation.psi;

import com.dci.intellij.dbn.common.dispose.DisposerUtil;
import com.dci.intellij.dbn.connection.ConnectionHandler;
import com.dci.intellij.dbn.object.common.DBObject;
import com.dci.intellij.dbn.object.common.list.DBObjectList;
import com.dci.intellij.dbn.object.lookup.DBObjectRef;
import com.intellij.openapi.Disposable;
import gnu.trove.THashMap;

import java.util.Map;

public class NavigationPsiCache implements Disposable {
    private Map<DBObjectRef, DBObjectPsiFile> objectPsiFiles = new THashMap<DBObjectRef, DBObjectPsiFile>();
    private Map<DBObjectRef, DBObjectPsiDirectory> objectPsiDirectories = new THashMap<DBObjectRef, DBObjectPsiDirectory>();
    private Map<DBObjectList, DBObjectListPsiDirectory> objectListPsiDirectories = new THashMap<DBObjectList, DBObjectListPsiDirectory>();
    private DBConnectionPsiDirectory connectionPsiDirectory;

    public NavigationPsiCache(ConnectionHandler connectionHandler) {
        connectionPsiDirectory = new DBConnectionPsiDirectory(connectionHandler);
    }

    public DBConnectionPsiDirectory getConnectionPsiDirectory() {
        return connectionPsiDirectory;
    }

    private synchronized DBObjectPsiFile lookupPsiFile(DBObject object) {
        DBObjectRef objectRef = object.getRef();
        DBObjectPsiFile psiFile = objectPsiFiles.get(objectRef);
        if (psiFile == null) {
            psiFile = new DBObjectPsiFile(object);
            objectPsiFiles.put(objectRef, psiFile);
        }

        return psiFile;
    }

    private synchronized DBObjectPsiDirectory lookupPsiDirectory(DBObject object) {
        DBObjectRef objectRef = object.getRef();
        DBObjectPsiDirectory psiDirectory = objectPsiDirectories.get(objectRef);
        if (psiDirectory == null) {
            psiDirectory = new DBObjectPsiDirectory(objectRef);
            objectPsiDirectories.put(objectRef, psiDirectory);
        }

        return psiDirectory;
    }
   
    private synchronized DBObjectListPsiDirectory lookupPsiDirectory(DBObjectList objectList) {
        DBObjectListPsiDirectory psiDirectory = objectListPsiDirectories.get(objectList);
        if (psiDirectory == null) {
            psiDirectory = new DBObjectListPsiDirectory(objectList);
            objectListPsiDirectories.put(objectList, psiDirectory);
        }

        return psiDirectory;
    }
   
   
    public static DBObjectPsiFile getPsiFile(DBObject object) {
        return object == null ? null :
                object.getConnectionHandler().getPsiCache().lookupPsiFile(object);
    }

    public static DBObjectPsiDirectory getPsiDirectory(DBObject object) {
        return object == null ? null :
                object.getConnectionHandler().getPsiCache().lookupPsiDirectory(object);
    }
   
    public static DBObjectListPsiDirectory getPsiDirectory(DBObjectList objectList) {
        return objectList == null ? null :
                objectList.getConnectionHandler().getPsiCache().lookupPsiDirectory(objectList);
    }

    public static DBConnectionPsiDirectory getPsiDirectory(ConnectionHandler connectionHandler) {
        return connectionHandler.getPsiCache().getConnectionPsiDirectory();
    }

    @Override
    public void dispose() {
        DisposerUtil.dispose(connectionPsiDirectory);
        DisposerUtil.dispose(objectListPsiDirectories);
        DisposerUtil.dispose(objectPsiDirectories);
        DisposerUtil.dispose(objectPsiFiles);
    }
}
TOP

Related Classes of com.dci.intellij.dbn.navigation.psi.NavigationPsiCache

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.