blob: 35dd28ad40adc5b6ac7a01541fa2df424b62df9e [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010 Oracle Corporation and others.
* 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:
* Oracle Corporation - initial API and implementation and/or initial documentation
*******************************************************************************/
package org.eclipse.jst.jsf.common.metadata.query.internal;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.jst.jsf.common.internal.strategy.AbstractTestableExtensibleDefaultProviderSelectionStrategy;
import org.eclipse.jst.jsf.common.metadata.Trait;
import org.eclipse.jst.jsf.common.metadata.internal.IMetaDataDomainContext;
import org.eclipse.jst.jsf.common.metadata.query.internal.taglib.ITaglibDomainPredicateMatcherFactory;
import org.eclipse.jst.jsf.common.metadata.query.internal.taglib.TaglibDomainContextImpl;
import org.eclipse.jst.jsf.common.metadata.query.internal.taglib.TaglibDomainEntityIdRegexPredicateMatcher;
import org.eclipse.jst.jsf.common.metadata.query.internal.taglib.TaglibDomainEntityQuerySpec;
import org.eclipse.jst.jsf.common.metadata.query.internal.taglib.TaglibDomainTraitIdRegexPredicateMatcher;
import org.eclipse.jst.jsf.common.metadata.query.internal.taglib.TaglibDomainTraitQuerySpec;
/**
* Factory for producing {@link IMetaDataDomainContext}s and {@link IPredicateMatcherFactory}s
* TODO: Consider using {@link AbstractTestableExtensibleDefaultProviderSelectionStrategy}
*/
public final class MetaDataQueryContextFactory {
private static MetaDataQueryContextFactory INSTANCE = new MetaDataQueryContextFactory();
//private static DomainModelContextFactoryReader DOMAIN_FACTORY_READER;
private MetaDataQueryContextFactory(){
//DOMAIN_FACTORY_READER = new DomainModelContextFactoryReader();
}
/**
* @return singleton instance of {@link MetaDataQueryContextFactory}
*/
public static MetaDataQueryContextFactory getInstance() {
synchronized (INSTANCE) {
return INSTANCE;
}
}
/**
* Creates a context for querying the tag library domain
* @param project - must not be null
* @return ITaglibDomainModelContext
*/
public IMetaDataDomainContext createTaglibDomainModelContext(final IProject project) {
assert project != null;
return new TaglibDomainContextImpl(project);
}
/**
* Creates a context for querying the tag library domain
* @param file - must not be null
* @return ITaglibDomainModelContext
*/
public IMetaDataDomainContext createTaglibDomainModelContext(final IFile file) {
assert file != null;
return new TaglibDomainContextImpl(file);
}
// /**
// * Creates a context for querying the tag library domain
// * @param file - must not be null
// * @return ITaglibDomainModelContext
// */
// public IMetaDataDomainContext createTaglibDomainModelContext(final IFile file) {
// assert file != null;
// IMetaDataDomainContext context = createDomainModelContext(file, IMetaDataDomainContext.TAGLIB_DOMAIN_CONTEXT_ID);
// if (context == null)
// context = new TaglibDomainContextImpl(file);
//
// return context;
// }
//
// /**
// * @param file
// * @param domainId
// * @return IMetaDataDomainContext
// */
// public IMetaDataDomainContext createDomainModelContext(final IFile file, final String domainId) {
// //given domain id, get the query factory
// final IMetaDataDomainModelContextFactory factory = DOMAIN_FACTORY_READER.getFactoryFor(domainId);
// if (factory != null)
// return factory.createDomainModelContext(file);
//
//// JSFCommonPlugin.log(new UnsupportedOperationException(), "Unknown domain model context factory for domain id: "+domainId); //$NON-NLS-1$
// return null;
// }
//
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// FIXME!!!!! The ITaglibDomainPredicateMatcherFactory does not belong here!
//
/**
* @return {@link ITaglibDomainPredicateMatcherFactory}
*/
public ITaglibDomainPredicateMatcherFactory getTaglibDomainPredicateMatcherFactory() {
//currently only produces one kind of factory
return new TaglibDomainRegexQueryMatcherFactory();
}
private static class TaglibDomainRegexQueryMatcherFactory implements ITaglibDomainPredicateMatcherFactory {
public TaglibDomainEntityIdRegexPredicateMatcher createTagLibraryModelMatcher(final String uri) {
return new TaglibDomainEntityIdRegexPredicateMatcher(new TaglibDomainEntityQuerySpec(uri));
}
public TaglibDomainEntityIdRegexPredicateMatcher createTagEntityMatcher(final String uri,
final String tagName) {
return new TaglibDomainEntityIdRegexPredicateMatcher(new TaglibDomainEntityQuerySpec(uri, tagName));
}
public TaglibDomainEntityIdRegexPredicateMatcher createTagAttributeEntityMatcher(final String uri,
final String tagName, final String tagAttributeName) {
return new TaglibDomainEntityIdRegexPredicateMatcher(new TaglibDomainEntityQuerySpec(uri, tagName, tagAttributeName));
}
public IPredicateMatcher<Trait> createTraitMatcher(final String traitId) {
return new TaglibDomainTraitIdRegexPredicateMatcher(new TaglibDomainTraitQuerySpec(traitId));
}
public Object getAdapter(final Class adapter) {
return null;
}
}
// private static class DomainModelContextFactoryReader
// extends
// AbstractSimpleClassExtensionRegistryReader<IMetaDataDomainModelContextFactory> {
//
// private static final String EXT_PT_ID = "domainModelContextFactory"; //$NON-NLS-1$
// private static final String EXT_PT_ELEMENT = "factory"; //$NON-NLS-1$
// private static final String EXT_PT_ATTR = "class"; //$NON-NLS-1$
//
// /**
// * Constructor
// */
// protected DomainModelContextFactoryReader() {
// super(JSFCommonPlugin.PLUGIN_ID,
// EXT_PT_ID, EXT_PT_ELEMENT, EXT_PT_ATTR,
// new CompareOrgEclipseJstContributorsLastComparator<IMetaDataDomainModelContextFactory>()
// );
// }
//
// @Override
// protected void handleLoadFailure(final CoreException ce) {
// JSFCommonPlugin.log(ce,
// "Error loading IMetaDataDomainModelContextFactory from extension"); //$NON-NLS-1$
//
// }
//
// public IMetaDataDomainModelContextFactory getFactoryFor(final String domainId) {
// for (final IMetaDataDomainModelContextFactory factory : getExtensions()) {
// if (factory.getDomainIdentifierFor().equals(domainId)){
// return factory;
// }
// }
// return null;
// }
// }
}