Package org.eclipse.jst.jsf.designtime.resolver

Source Code of org.eclipse.jst.jsf.designtime.resolver.SymbolContextResolver

/*******************************************************************************
* Copyright (c) 2006 Oracle Corporation.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
*    Cameron Bateman/Oracle - initial API and implementation
*   
********************************************************************************/

package org.eclipse.jst.jsf.designtime.resolver;

import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.jst.jsf.context.IModelContext;
import org.eclipse.jst.jsf.context.resolver.structureddocument.IStructuredDocumentContextResolverFactory;
import org.eclipse.jst.jsf.context.resolver.structureddocument.IWorkspaceContextResolver;
import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContext;
import org.eclipse.jst.jsf.context.symbol.IMethodSymbol;
import org.eclipse.jst.jsf.context.symbol.IObjectSymbol;
import org.eclipse.jst.jsf.context.symbol.ISymbol;
import org.eclipse.jst.jsf.designtime.DesignTimeApplicationManager;
import org.eclipse.jst.jsf.designtime.context.DTFacesContext;

/**
* A symbol context resolver
* Clients may NOT sub-class.
*
* @author cbateman
*
*/
/*package*/ final class SymbolContextResolver extends AbstractSymbolContextResolver
{
    private final IStructuredDocumentContext        _context;
    private IWorkspaceContextResolver               _wkspResolver; // = null; lazy created through getWorkspaceResolver

  /**
     * @param context
     */
    /* package */SymbolContextResolver(IStructuredDocumentContext context)
    {
        _context = context;
    }

    public ISymbol getVariable(String name)
    {
        final IFile file = getFile();
       
        if (file != null)
        {
            final DesignTimeApplicationManager manager =
                DesignTimeApplicationManager.getInstance(file.getProject());
           
            if (manager != null)
            {
                final DTFacesContext facesContext = manager.getFacesContext(file);
       
                return manager.getVariableResolver().
                    resolveVariable(facesContext, name, file);
            }
        }
       
        return null;
    }

    public ISymbol[] getAllVariables()
    {
        final IFile file = getFile();
       
        if (file != null)
        {
            final DesignTimeApplicationManager manager =
                DesignTimeApplicationManager.getInstance(file.getProject());
           
            if (manager != null)
            {
                final DTFacesContext facesContext = manager.getFacesContext(file);
               
                if (facesContext != null)
                {
                    return manager.getVariableResolver().
                            getAllVariables(facesContext, file);
                }
            }
        }
       
        return ISymbol.EMPTY_SYMBOL_ARRAY;
    }
   
    public ISymbol getProperty(ISymbol symbol, Object propertyName)
    {
        final IFile file = getFile();
       
        if (file != null)
        {
            final DesignTimeApplicationManager manager =
                DesignTimeApplicationManager.getInstance(file.getProject());
           
            if (manager != null)
            {
                return manager.getPropertyResolver().getProperty(symbol, propertyName);
            }
        }
       
        return null;
    }

    public ISymbol[] getProperties(ISymbol symbol)
    {
        final IFile file = getFile();
       
        if (file != null)
        {
            final DesignTimeApplicationManager manager =
                DesignTimeApplicationManager.getInstance(file.getProject());
           
            if (manager != null)
            {
                return manager.getPropertyResolver().getAllProperties(symbol);
            }
        }
        return ISymbol.EMPTY_SYMBOL_ARRAY;
    }

    public IMethodSymbol getMethod(IObjectSymbol base, Object methodName)
    {
        final IFile file = getFile();
       
        if (file != null)
        {
            final DesignTimeApplicationManager manager =
                DesignTimeApplicationManager.getInstance(file.getProject());
            
            if (manager != null)
            {
                return manager.getMethodResolver().getMethod(base, methodName);
            }
        }
       
        return null;
    }
   
    public ISymbol[] getMethods(IObjectSymbol base)
    {
        final IFile file = getFile();
       
        if (file != null)
        {
            final DesignTimeApplicationManager manager =
                DesignTimeApplicationManager.getInstance(file.getProject());
           
            if (manager != null)
            {
                return manager.getMethodResolver().getMethods(base);
            }
        }
       
        return new IMethodSymbol[0];
    }

   
  public boolean canResolveContext(IModelContext modelContext)
    {
    return modelContext.getAdapter(IStructuredDocumentContext.class) != null;
  }
 
    /**
     * @return a lazily loaded workspace resolver for this resolver's context
     */
    protected final IWorkspaceContextResolver  getWorkspaceResolver()
    {
        if (_wkspResolver == null)
        {
            _wkspResolver = getWorkspaceResolver(_context);
        }
       
        return _wkspResolver;
    }
   
    private IWorkspaceContextResolver getWorkspaceResolver(final IStructuredDocumentContext context)
    {
        return IStructuredDocumentContextResolverFactory.INSTANCE
                .getWorkspaceContextResolver(context);
    }

    /**
     * @return the underlying IFile for my context or null if can't be determined
     */
    protected final IFile getFile()
    {
        return getFile(getWorkspaceResolver());
    }

    private IFile getFile(final IWorkspaceContextResolver  resolver)
    {
       
        if (resolver != null)
        {
            IResource curRes = resolver.getResource();
           
            if (curRes instanceof IFile)
            {
                return (IFile) curRes;
            }
        }
       
        return null;
       
    }

    @Override
    public boolean hasSameResolution(IModelContext modelContext)
    {
        if (canResolveContext(modelContext))
        {
            return getFile().equals(getFile(getWorkspaceResolver((IStructuredDocumentContext) modelContext)));
        }

        // if we can't even resolve the context, then we certainly don't have
        // the same resolution
        return false;
    }
}
TOP

Related Classes of org.eclipse.jst.jsf.designtime.resolver.SymbolContextResolver

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.