blob: eb09aa9562931eb0933ba928dc6d1c59ad50cc60 [file] [log] [blame]
/*******************************************************************************
* 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());
// }
}