blob: 265d65a24fce5e0444aa1b02952151d917425b19 [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 java.util.Iterator;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.jst.jsf.context.internal.provisional.AbstractDelegatingFactory;
import org.eclipse.jst.jsf.context.resolver.structureddocument.internal.ITextRegionContextResolver;
import org.eclipse.jst.jsf.context.resolver.structureddocument.internal.provisional.IDOMContextResolver;
import org.eclipse.jst.jsf.context.resolver.structureddocument.internal.provisional.IMetadataContextResolver;
import org.eclipse.jst.jsf.context.resolver.structureddocument.internal.provisional.IStructuredDocumentContextResolverFactory;
import org.eclipse.jst.jsf.context.resolver.structureddocument.internal.provisional.ITaglibContextResolver;
import org.eclipse.jst.jsf.context.resolver.structureddocument.internal.provisional.IWorkspaceContextResolver;
import org.eclipse.jst.jsf.context.structureddocument.internal.provisional.IStructuredDocumentContext;
import org.eclipse.jst.jsf.context.structureddocument.internal.provisional.IStructuredDocumentContextFactory;
import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument;
/**
* Implements a factory for creating context resolvers for structured document
* contexts.
*
* @author cbateman
*
*/
public class StructuredDocumentContextResolverFactory extends
AbstractDelegatingFactory implements
IStructuredDocumentContextResolverFactory
{
/* static attributes */
private static StructuredDocumentContextResolverFactory INSTANCE;
/**
* @return an instance (possibly shared) of the this factory
*/
public synchronized static StructuredDocumentContextResolverFactory getInstance()
{
if (INSTANCE == null)
{
INSTANCE = new StructuredDocumentContextResolverFactory();
}
return INSTANCE;
}
/**
* Constructor
*/
protected StructuredDocumentContextResolverFactory()
{
super(new Class[] {IStructuredDocumentContextResolverFactory.class});
}
/**
* @see org.eclipse.jst.jsf.context.resolver.structureddocument.internal.provisional.IStructuredDocumentContextResolverFactory#getDOMContextResolver(org.eclipse.jst.jsf.context.structureddocument.internal.provisional.IStructuredDocumentContext)
*/
public IDOMContextResolver getDOMContextResolver(IStructuredDocumentContext context)
{
IDOMContextResolver resolver = internalGetDOMResolver(context);
if (resolver == null)
{
resolver = delegateGetDOMResolver(context);
}
return resolver;
}
private IDOMContextResolver internalGetDOMResolver(IStructuredDocumentContext context)
{
if (context.getStructuredDocument() instanceof IStructuredDocument)
{
return new DOMContextResolver(context);
}
return null;
}
private IDOMContextResolver delegateGetDOMResolver(IStructuredDocumentContext context)
{
synchronized(_delegates)
{
for (final Iterator it = _delegates.iterator(); it.hasNext();)
{
IStructuredDocumentContextResolverFactory delegateFactory = (IStructuredDocumentContextResolverFactory) ((IAdaptable) it.next()).getAdapter(IStructuredDocumentContextFactory.class);
IDOMContextResolver contextResolver = delegateFactory.getDOMContextResolver(context);
if (contextResolver != null)
{
return contextResolver;
}
}
return null;
}
}
/**
* @see org.eclipse.jst.jsf.context.resolver.structureddocument.internal.provisional.IStructuredDocumentContextResolverFactory#getTextRegionResolver(org.eclipse.jst.jsf.context.structureddocument.internal.provisional.IStructuredDocumentContext)
*/
public ITextRegionContextResolver getTextRegionResolver(IStructuredDocumentContext context)
{
ITextRegionContextResolver resolver = internalGetTextRegionResolver(context);
if (resolver == null)
{
resolver = delegateGetTextRegionResolver(context);
}
return resolver;
}
private ITextRegionContextResolver internalGetTextRegionResolver(IStructuredDocumentContext context)
{
if (context.getStructuredDocument() instanceof IStructuredDocument)
{
return new TextRegionContextResolver(context);
}
return null;
}
private ITextRegionContextResolver delegateGetTextRegionResolver(IStructuredDocumentContext context)
{
synchronized(_delegates)
{
for (final Iterator it = _delegates.iterator(); it.hasNext();)
{
IStructuredDocumentContextResolverFactory delegateFactory = (IStructuredDocumentContextResolverFactory) ((IAdaptable) it.next()).getAdapter(IStructuredDocumentContextFactory.class);
ITextRegionContextResolver contextResolver = delegateFactory.getTextRegionResolver(context);
if (contextResolver != null)
{
return contextResolver;
}
}
return null;
}
}
public IWorkspaceContextResolver getWorkspaceContextResolver(IStructuredDocumentContext context)
{
IWorkspaceContextResolver resolver = internalGetWorkspaceContextResolver(context);
if (resolver == null)
{
resolver = delegateGetWorkspaceContextResolver(context);
}
return resolver;
}
private IWorkspaceContextResolver internalGetWorkspaceContextResolver(IStructuredDocumentContext context)
{
if (context.getStructuredDocument() instanceof IStructuredDocument)
{
return new WorkspaceContextResolver(context);
}
return null;
}
private IWorkspaceContextResolver delegateGetWorkspaceContextResolver(IStructuredDocumentContext context)
{
synchronized(_delegates)
{
for (final Iterator it = _delegates.iterator(); it.hasNext();)
{
IStructuredDocumentContextResolverFactory delegateFactory = (IStructuredDocumentContextResolverFactory) ((IAdaptable) it.next()).getAdapter(IStructuredDocumentContextFactory.class);
IWorkspaceContextResolver contextResolver = delegateFactory.getWorkspaceContextResolver(context);
if (contextResolver != null)
{
return contextResolver;
}
}
return null;
}
}
public ITaglibContextResolver getTaglibContextResolver(IStructuredDocumentContext context) {
ITaglibContextResolver resolver = internalGetTaglibContextResolver(context);
if (resolver == null)
{
resolver = delegateGetTaglibContextResolver(context);
}
return resolver;
}
private ITaglibContextResolver internalGetTaglibContextResolver(IStructuredDocumentContext context)
{
if (context.getStructuredDocument() instanceof IStructuredDocument)
{
return new TaglibContextResolver(context);
}
return null;
}
private ITaglibContextResolver delegateGetTaglibContextResolver(IStructuredDocumentContext context)
{
synchronized(_delegates)
{
for (final Iterator it = _delegates.iterator(); it.hasNext();)
{
IStructuredDocumentContextResolverFactory delegateFactory = (IStructuredDocumentContextResolverFactory) ((IAdaptable) it.next()).getAdapter(IStructuredDocumentContextFactory.class);
ITaglibContextResolver contextResolver = delegateFactory.getTaglibContextResolver(context);
if (contextResolver != null)
{
return contextResolver;
}
}
return null;
}
}
public IMetadataContextResolver getMetadataContextResolver(IStructuredDocumentContext context) {
IMetadataContextResolver resolver = internalGetMetadataContextResolver(context);
if (resolver == null)
{
resolver = delegateGetMetadataContextResolver(context);
}
return resolver;
}
private IMetadataContextResolver internalGetMetadataContextResolver(IStructuredDocumentContext context)
{
if (context.getStructuredDocument() instanceof IStructuredDocument)
{
return new MetadataContextResolver(context);
}
return null;
}
private IMetadataContextResolver delegateGetMetadataContextResolver(IStructuredDocumentContext context)
{
synchronized(_delegates)
{
for (final Iterator it = _delegates.iterator(); it.hasNext();)
{
final IStructuredDocumentContextResolverFactory delegateFactory =
(IStructuredDocumentContextResolverFactory)
((IAdaptable) it.next()).getAdapter
(IStructuredDocumentContextFactory.class);
final IMetadataContextResolver contextResolver =
delegateFactory.getMetadataContextResolver(context);
if (contextResolver != null)
{
return contextResolver;
}
}
return null;
}
}
}