blob: 1566b6a9d96b1caf3515298c6f4dbd6b58e565c6 [file] [log] [blame]
/*******************************************************************************
* 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.internal.provisional.context;
import java.io.PrintStream;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.jst.jsf.common.JSFCommonPlugin;
import org.eclipse.jst.jsf.context.symbol.internal.provisional.ISymbol;
import org.eclipse.jst.jsf.context.symbol.internal.provisional.source.ISymbolConstants;
import org.eclipse.jst.jsf.context.symbol.internal.provisional.source.ISymbolSourceProvider;
import org.eclipse.jst.jsf.context.symbol.internal.provisional.source.ISymbolSourceProviderFactory;
/**
* A designtime proxy for the Faces ExternalContext
*
* Clients may sub-class.
*
* @author cbateman
*
*/
public class DTJSPExternalContext implements IDTExternalContext
{
/**
*
*/
private final IFile _jspFile;
/**
* Construct a default external context
*
* @param jspFile
*/
DTJSPExternalContext(IAdaptable jspFile)
{
if (jspFile instanceof IFile)
{
_jspFile = (IFile) jspFile;
}
else if (jspFile != null)
{
IFile file = (IFile) jspFile.getAdapter(IFile.class);
if (file != null)
{
_jspFile = file;
}
else
{
_jspFile = null;
throw new AssertionError("jspFile must be adapable to an IFile");
}
}
else
{
_jspFile = null;
throw new AssertionError("jspFile must be adapable to an IFile");
}
}
/* (non-Javadoc)
* @see org.eclipse.jst.jsf.designtime.internal.provisional.context.IDTExternalContext#getMapForScope(int)
*/
public Map getMapForScope(int scopeMask)
{
final Map map = new HashMap();
for (final Iterator it = JSFCommonPlugin.getSymbolSourceProviders().iterator(); it.hasNext();)
{
final ISymbolSourceProviderFactory factory = (ISymbolSourceProviderFactory) it.next();
final ISymbolSourceProvider provider = factory.createInstance(_jspFile.getProject());
final ISymbol[] symbols = provider.getSymbols(_jspFile, scopeMask);
for (int i = 0; i < symbols.length; i++)
{
map.put(symbols[i].getName(), symbols[i]);
}
}
return Collections.unmodifiableMap(map);
}
/* (non-Javadoc)
* @see org.eclipse.jst.jsf.designtime.internal.provisional.context.IDTExternalContext#getRequestMap()
*/
public Map getRequestMap()
{
return getMapForScope(ISymbolConstants.SYMBOL_SCOPE_REQUEST);
}
/* (non-Javadoc)
* @see org.eclipse.jst.jsf.designtime.internal.provisional.context.IDTExternalContext#getSessionMap()
*/
public Map getSessionMap()
{
return getMapForScope(ISymbolConstants.SYMBOL_SCOPE_SESSION);
}
/* (non-Javadoc)
* @see org.eclipse.jst.jsf.designtime.internal.provisional.context.IDTExternalContext#getApplicationMap()
*/
public Map getApplicationMap()
{
return getMapForScope(ISymbolConstants.SYMBOL_SCOPE_APPLICATION);
}
/* (non-Javadoc)
* @see org.eclipse.jst.jsf.designtime.internal.provisional.context.IDTExternalContext#getNoneMap()
*/
public Map getNoneMap()
{
return getMapForScope(ISymbolConstants.SYMBOL_SCOPE_NONE);
}
/**
* @param stream
*/
public void trace(PrintStream stream)
{
String[] scopeNames = {ISymbolConstants.SYMBOL_SCOPE_REQUEST_STRING,
ISymbolConstants.SYMBOL_SCOPE_SESSION_STRING,
ISymbolConstants.SYMBOL_SCOPE_APPLICATION_STRING,
ISymbolConstants.SYMBOL_SCOPE_NONE_STRING
};
Map[] symbolMaps = {getRequestMap(), getSessionMap(), getApplicationMap()};
for (int i = 0; i < scopeNames.length; i++)
{
stream.println("--------------");
stream.println(scopeNames[i]+" Scope:");
stream.println("--------------");
for (final Iterator it = symbolMaps[i].values().iterator(); it.hasNext();)
{
ISymbol symbol = (ISymbol) it.next();
System.out.println(symbol.getName());
}
}
}
}