blob: 8c870d1c8ad6c9adad8053a012eaa115818dc3e9 [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.context;
import java.io.PrintStream;
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.j2ee.web.componentcore.util.WebArtifactEdit;
import org.eclipse.jst.jsf.common.JSFCommonPlugin;
import org.eclipse.jst.jsf.context.symbol.ISymbol;
import org.eclipse.jst.jsf.context.symbol.source.ISymbolConstants;
import org.eclipse.jst.jsf.context.symbol.source.ISymbolSourceProvider;
import org.eclipse.jst.jsf.context.symbol.source.ISymbolSourceProviderFactory;
/**
* A designtime proxy for the Faces ExternalContext
*
* Clients may sub-class.
*
* @author cbateman
*
*/
public class DTJSPExternalContext extends AbstractDTExternalContext
{
/**
*
*/
private final IFile _jspFile;
/**
* Construct a default external context
*
* @param jspFile
*/
protected DTJSPExternalContext(final 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"); //$NON-NLS-1$
}
}
else
{
_jspFile = null;
throw new AssertionError("jspFile must be adapable to an IFile"); //$NON-NLS-1$
}
}
@Override
protected Map doGetMapForScope(final 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 map;
}
/**
* @param stream
*/
public final 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(), getNoneMap()};
for (int i = 0; i < scopeNames.length; i++)
{
stream.println("--------------"); //$NON-NLS-1$
stream.println(scopeNames[i]+" Scope:"); //$NON-NLS-1$
stream.println("--------------"); //$NON-NLS-1$
for (final Iterator it = symbolMaps[i].values().iterator(); it.hasNext();)
{
ISymbol symbol = (ISymbol) it.next();
System.out.println(symbol.getName());
}
}
}
@Override
public String getRequestContextPath()
{
WebArtifactEdit artifactEdit = null;
String path = null;
try
{
// TODO: EARs?
artifactEdit =
WebArtifactEdit.getWebArtifactEditForRead(_jspFile.getProject());
path = artifactEdit.getServerContextRoot();
}
finally
{
if (artifactEdit != null)
{
artifactEdit.dispose();
}
}
return path;
}
// @Override
// public String getRequestPathInfo() {
// // TODO Auto-generated method stub
// return super.getRequestPathInfo();
// }
//
// @Override
// public String getRequestServletPath() {
// // TODO Auto-generated method stub
// return super.getRequestServletPath();
// }
// private void getWebApp()
// {
// final IProject project = _jspFile.getProject();
//
// final IModelProvider provider =
// ModelProviderManager.getModelProvider(project);
// Object webAppObj = provider.getModelObject();
//
// if (webAppObj != null)
// {
// //
// }
//
// }
}