blob: 053ec16da788f7d238965a193a286191bfa46cc1 [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.context.resolver.structureddocument.internal.impl;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.jst.jsf.context.IModelContext;
import org.eclipse.jst.jsf.context.resolver.structureddocument.IWorkspaceContextResolver;
import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContext;
import org.eclipse.wst.sse.core.StructuredModelManager;
import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel;
/**
*
* @author cbateman
*
*/
/*package*/ class WorkspaceContextResolver implements IWorkspaceContextResolver
{
private final IStructuredDocumentContext _context;
/*package*/WorkspaceContextResolver(IStructuredDocumentContext context)
{
_context = context;
}
/**
* @see org.eclipse.jst.jsf.context.resolver.structureddocument.IWorkspaceContextResolver#getProject()
*/
public IProject getProject()
{
// copied from ModelManagerImpl (with some rework by C.B.)
final String path = getPath();
if (path == null)
{
return null;
}
return getProject(path);
}
private IProject getProject(String path)
{
// TOODO needs rework for linked resources
IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
IPath iPath = new Path(path);
if (iPath.isAbsolute())
{
String projectName = iPath.segment(0);
IProject projects[] = root.getProjects();
for (int i = 0; i < projects.length; i++)
{
IProject project = projects[i];
if (project.isOpen()
&& projectName.equals(project.getFullPath().segment(0)))
{
return project; //
}
}
}
return null;
}
public IResource getResource()
{
final String path = getPath();
if (path != null)
{
IProject project = getProject(path);
if (project != null)
{
final IPath iPath = new Path(path);
if (iPath.isAbsolute())
{
return project.getFile(iPath.removeFirstSegments(1));
}
}
}
return null;
}
private String getPath()
{
IStructuredModel model = null;
try
{
model = StructuredModelManager.getModelManager().getExistingModelForRead(_context.getStructuredDocument());
if (model == null)
return null;
String path = model.getBaseLocation();
if (path == null || path.length() == 0)
{
Object id = model.getId();
if (id == null)
return null;
path = id.toString();
}
return path;
}
finally
{
if (model != null)
{
model.releaseFromRead();
}
}
}
/**
* @see org.eclipse.jst.jsf.context.resolver.IContextResolver#canResolveContext(org.eclipse.jst.jsf.context.IModelContext)
*/
public boolean canResolveContext(IModelContext modelContext)
{
return (modelContext.getAdapter(IStructuredDocumentContext.class) != null);
}
}