/******************************************************************************* * 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; } }