| /******************************************************************************* |
| * Copyright (c) 2007, 2010 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: |
| * Oracle - initial API and implementation |
| * |
| ********************************************************************************/ |
| package org.eclipse.jst.jsf.common.metadata.query.internal; |
| |
| import org.eclipse.core.resources.IProject; |
| import org.eclipse.core.runtime.IStatus; |
| import org.eclipse.jst.jsf.common.JSFCommonPlugin; |
| 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.IMetaDataModelContext; |
| import org.eclipse.jst.jsf.common.metadata.internal.IMetaDataModelManager; |
| import org.eclipse.jst.jsf.common.metadata.internal.MetaDataModelContext; |
| import org.eclipse.jst.jsf.common.metadata.query.IEntityQueryVisitor; |
| import org.eclipse.jst.jsf.common.metadata.query.IResultSet; |
| import org.eclipse.jst.jsf.common.metadata.query.ITraitQueryVisitor; |
| import org.eclipse.jst.jsf.common.metadata.query.MetaDataException; |
| |
| |
| /** |
| * Helper class with static methods to simplify querying of a metadata model. |
| * |
| * @see IResultSet |
| * @see IEntityQueryVisitor |
| * @see ITraitQueryVisitor |
| * @see Model |
| * @see Entity |
| * @see Trait |
| * <p> |
| * May be subclassed. |
| * |
| */ |
| public class MetaDataQueryHelper implements IMetaDataQueryHelper{ |
| |
| private IMetaDataModelManager _manager; |
| private IMetaDataDomainContext _managerContext; |
| |
| /** |
| * Constructor |
| * @param manager |
| * @param managerContext |
| */ |
| public MetaDataQueryHelper (final IMetaDataModelManager manager,final IMetaDataDomainContext managerContext){ |
| _manager = manager; |
| _managerContext = managerContext; |
| } |
| |
| public Model getModel(final String modelId) { |
| return getMDModel(modelId); |
| } |
| |
| public Entity getEntity(final String modelId, final String entityKey) { |
| final IEntityQueryVisitor visitor = new SimpleEntityQueryVisitorImpl(new HierarchicalSearchControl(1, HierarchicalSearchControl.SCOPE_ALL_LEVELS)); |
| final IResultSet<Entity> rs = getEntities(modelId,entityKey, visitor); |
| return getFirstFromResultSet(rs); |
| } |
| |
| public IResultSet<Entity> getEntities(final String modelId, final String entityKey, final IEntityQueryVisitor visitor){ |
| final Model model = getModel(modelId); |
| //we may want to throw error that model is empty |
| return getEntities(model, entityKey, visitor); |
| } |
| |
| public Trait getTrait(final Entity entity, final String traitKey){ |
| final ITraitQueryVisitor visitor = new SimpleTraitQueryVisitorImpl(); |
| final IResultSet<Trait> rs = getTraits(entity, traitKey, visitor); |
| return getFirstFromResultSet(rs); |
| } |
| |
| public IResultSet<Trait> getTraits(final Entity entity, final String traitKey, final ITraitQueryVisitor traitQueryVisitor) { |
| final IResultSet<Trait> rs = traitQueryVisitor.findTraits(entity, traitKey); |
| return rs; |
| } |
| |
| public Entity getEntity(final Entity initialEntityContext, final String entityKey) { |
| final IEntityQueryVisitor visitor = new SimpleEntityQueryVisitorImpl(new HierarchicalSearchControl(1, HierarchicalSearchControl.SCOPE_ALL_LEVELS)); |
| final IResultSet<Entity> rs = getEntities(initialEntityContext, entityKey, visitor); |
| return getFirstFromResultSet(rs); |
| } |
| |
| public IResultSet<Entity> getEntities(final Entity initialEntityContext, final String entityQuery, final IEntityQueryVisitor entityKeyQueryVisitor) { |
| return entityKeyQueryVisitor.findEntities(initialEntityContext, entityQuery); |
| } |
| |
| public Trait getTrait(final String modelId, final String entityKey, final String traitKey) { |
| final Entity entity = getEntity(modelId, entityKey); |
| Trait t = null; |
| if (entity != null){ |
| t = getTrait(entity, traitKey); |
| } |
| return t; |
| } |
| |
| public <T> T getFirstFromResultSet(final IResultSet<T> results) { |
| T result = null; |
| try { |
| if (! results.getResults().isEmpty()){ |
| result = results.getResults().get(0); |
| } |
| results.close(); |
| } catch (MetaDataException ex) { |
| JSFCommonPlugin.log(IStatus.ERROR, "Error in getFirstFromResultSet()", ex); //$NON-NLS-1$ |
| } |
| return result; |
| } |
| |
| /** |
| * Retrieve Model from the ModelManager for given key |
| * @param modelId |
| * @return Model |
| */ |
| private Model getMDModel(final String modelId){ |
| if (_manager != null) |
| return _manager.getModel(getModelContext(modelId)); |
| |
| return null; |
| } |
| |
| /** |
| * @param modelId |
| * @return IMetaDataModelContext2 |
| */ |
| protected IMetaDataModelContext getModelContext(final String modelId) { |
| return new MetaDataModelContext(( |
| IProject)_managerContext.getAdapter(IProject.class), |
| _managerContext.getDomainId(), |
| modelId); |
| } |
| // public QName getQNameForEntity(final Entity tagEntity) { |
| // Assert.isTrue(tagEntity != null); |
| // return new QName(tagEntity.getModel().getId(), tagEntity.getId()); |
| // } |
| } |