blob: dc3248cf06c788719ed44ec41ea9c199346dd57a [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.taglib;
import org.eclipse.jst.jsf.common.metadata.Entity;
import org.eclipse.jst.jsf.common.metadata.Model;
import org.eclipse.jst.jsf.common.metadata.Trait;
import org.eclipse.jst.jsf.common.metadata.internal.IMetaDataDomainContext;
import org.eclipse.jst.jsf.common.metadata.internal.IMetaDataModelManager;
import org.eclipse.jst.jsf.common.metadata.query.IResultSet;
import org.eclipse.jst.jsf.common.metadata.query.MetaDataException;
import org.eclipse.jst.jsf.common.metadata.query.internal.AbstractMetaDataQuery;
import org.eclipse.jst.jsf.common.metadata.query.internal.HierarchicalSearchControl;
import org.eclipse.jst.jsf.common.metadata.query.internal.IPredicateMatcher;
import org.eclipse.jst.jsf.common.metadata.query.internal.SearchControl;
import org.eclipse.jst.jsf.common.metadata.query.internal.TraitQuerySpecVisitor;
/**
* Implements {@link ITaglibDomainMetaDataQuery}
*
*/
public class TaglibDomainMetaDataQuery
extends AbstractMetaDataQuery
implements ITaglibDomainMetaDataQuery {
/**
* Constructor
* @param manager
* @param managerContext
*/
public TaglibDomainMetaDataQuery(final IMetaDataModelManager manager, final IMetaDataDomainContext managerContext) {
super(manager, managerContext);
}
public Model findTagLibraryModel(final String uri) {
return getQueryHelper().getModel(uri);
}
public Entity findTagEntity(final Model tagLib, final String tagName) {
return getQueryHelper().getEntity(tagLib, tagName);
}
public Entity findTagAttributeEntity(final Entity tagEntity, final String attributeName) {
return getQueryHelper().getEntity(tagEntity, attributeName);
}
public Trait findTrait(final Entity entity, final String traitId) {
return getQueryHelper().getTrait(entity, traitId);
}
public IResultSet<Entity> findEntities(final ITaglibDomainEntityPredicateMatcher matcher) {
final TaglibDomainEntityQuerySpecVisitor visitor = new TaglibDomainEntityQuerySpecVisitor(getDomainContext(), matcher);
return visitor.findEntities();
}
public IResultSet<Trait> findTraits(final ITaglibDomainEntityPredicateMatcher entityMatcher, final IPredicateMatcher<Trait> traitMatcher) throws MetaDataException {
final TraitQuerySpecVisitor visitor = new TraitQuerySpecVisitor(findEntities(entityMatcher).getResults(), traitMatcher);
return visitor.findTraits();
}
public Entity findEntity(final ITaglibDomainEntityPredicateMatcher entityMatcher) {
final HierarchicalSearchControl control = new HierarchicalSearchControl();
control.setCountLimit(1);
final TaglibDomainEntityQuerySpecVisitor visitor = new TaglibDomainEntityQuerySpecVisitor(getDomainContext(), entityMatcher, control);
final IResultSet<Entity> results = visitor.findEntities();
return getQueryHelper().getFirstFromResultSet(results);
}
public Trait findTrait(final ITaglibDomainEntityPredicateMatcher entityMatcher, final IPredicateMatcher<Trait> traitMatcher) {
TraitQuerySpecVisitor visitor;
try {
final SearchControl control = new SearchControl();
control.setCountLimit(1);
visitor = new TraitQuerySpecVisitor(findEntities(entityMatcher).getResults(), traitMatcher, control);
IResultSet<Trait> results = visitor.findTraits();
return getQueryHelper().getFirstFromResultSet(results);
} catch (MetaDataException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}