Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/MetaDataModelMergeAssistantImpl.java')
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/MetaDataModelMergeAssistantImpl.java398
1 files changed, 0 insertions, 398 deletions
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/MetaDataModelMergeAssistantImpl.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/MetaDataModelMergeAssistantImpl.java
deleted file mode 100644
index 564d7a854..000000000
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/MetaDataModelMergeAssistantImpl.java
+++ /dev/null
@@ -1,398 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007 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.internal;
-
-import java.util.Iterator;
-
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.emf.ecore.util.EcoreUtil.Copier;
-import org.eclipse.jst.jsf.common.JSFCommonPlugin;
-import org.eclipse.jst.jsf.common.metadata.Entity;
-import org.eclipse.jst.jsf.common.metadata.EntityGroup;
-import org.eclipse.jst.jsf.common.metadata.IncludeEntityGroup;
-import org.eclipse.jst.jsf.common.metadata.Model;
-import org.eclipse.jst.jsf.common.metadata.Trait;
-import org.eclipse.jst.jsf.common.metadata.query.MetaDataException;
-import org.eclipse.jst.jsf.common.metadata.query.internal.HierarchicalSearchControl;
-import org.eclipse.jst.jsf.common.metadata.query.internal.IMetaDataQuery;
-import org.eclipse.jst.jsf.common.metadata.query.internal.MetaDataQueryFactory;
-import org.eclipse.jst.jsf.common.metadata.query.internal.SearchControl;
-import org.eclipse.jst.jsf.common.metadata.query.internal.SimpleEntityQueryVisitorImpl;
-import org.eclipse.jst.jsf.common.metadata.query.internal.SimpleResultSet;
-import org.eclipse.jst.jsf.common.metadata.query.internal.SimpleTraitQueryVisitorImpl;
-/**
- * Implements {@link IMetaDataModelMergeAssistant}
- *
- * Responsible for merging source models into one. The first model in has subsequent
- * entities and traits added to it.
- *
- * TODO - make locating of existing entities and traits in the merged model more efficient
- * TODO - refactor out Taglibdomain-only aspects of include-group processing
- *
- */
-public class MetaDataModelMergeAssistantImpl implements
- IMetaDataModelMergeAssistant {
-
- private MetaDataModel mergedModel;
- private SimpleEntityQueryVisitorImpl entityVisitor;
- private SimpleTraitQueryVisitorImpl traitVisitor;
- private IMetaDataSourceModelProvider provider;
-
- /**
- * Constructor. Queries with search control limited to first found.
- * @param model
- */
- public MetaDataModelMergeAssistantImpl(final MetaDataModel model) {
- this.mergedModel = model;
- entityVisitor = new SimpleEntityQueryVisitorImpl(new HierarchicalSearchControl(1,
- HierarchicalSearchControl.SCOPE_ALL_LEVELS));
- traitVisitor = new SimpleTraitQueryVisitorImpl(new SearchControl(1));
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.jst.jsf.common.metadata.internal.IMetaDataModelMergeAssistant#getMergedModel()
- */
- public MetaDataModel getMergedModel() {
- return mergedModel;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.jst.jsf.common.metadata.internal.IMetaDataModelMergeAssistant#getSourceModel()
- */
- public IMetaDataSourceModelProvider getSourceModelProvider() {
- return provider;
- }
-
- public void setSourceModelProvider(final IMetaDataSourceModelProvider provider) {
- this.provider = provider;
- }
-
-
- /* (non-Javadoc)
- * @see org.eclipse.jst.jsf.common.metadata.internal.IMetaDataModelMergeAssistant#addEntityGroup(org.eclipse.jst.jsf.common.metadata.EntityGroup)
- */
- public void addEntityGroup(final EntityGroup entityGroup) {
- final Model model = (Model)getMergedModel().getRoot();
- if (!isExistingEntityGroup(model, entityGroup)){
- model.getEntityGroups().add(copyEntityGroup(entityGroup));
- }
- }
-
- private EntityGroup copyEntityGroup(final EntityGroup entityGroup) {
- final Copier copier = new Copier();
- final EntityGroup egc =(EntityGroup)copier.copy(entityGroup);
- copier.copyReferences();
- return egc;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.jst.jsf.common.metadata.internal.IMetaDataModelMergeAssistant#addEntity(org.eclipse.jst.jsf.common.metadata.Entity)
- */
- public Entity addEntity(final Entity entity) {
- Entity mmEntity = getMergedEntity(entity);
- if (mmEntity == null){
- mmEntity = addEntityAsNecessary((Entity)entity.eContainer(), entity);
- return mmEntity;
- }
- addIncludeGroupsAsNecessary(mmEntity, entity);
- return mmEntity;
- }
-
- public Entity getMergedEntity(final Entity queryRoot, final String entityKey){
- Entity ret = null;
- SimpleResultSet rs = (SimpleResultSet)entityVisitor.findEntities(queryRoot, entityKey);
- try {
- if (! rs.getResults().isEmpty())
- ret = (Entity)rs.getResults().get(0);
- rs.close();
- } catch (MetaDataException e) {
- JSFCommonPlugin.log(IStatus.ERROR, "Error in getMergedEntity()", e); //$NON-NLS-1$
- }
- return ret;
- }
- private void addIncludeGroupsAsNecessary(final Entity mmEntity, final Entity entity) {
- for (final Iterator it=entity.getIncludeGroups().iterator();it.hasNext();){
- final IncludeEntityGroup grp = (IncludeEntityGroup)it.next();
- boolean found = false;
- for (Iterator it2=mmEntity.getIncludeGroups().iterator();it2.hasNext();){
- final IncludeEntityGroup grp2 = (IncludeEntityGroup)it2.next();
- if (grp2.equals(grp)){
- found = true;
- break;
- }
- }
- if (!found){//maybe we should clone and add
- mmEntity.getIncludeGroups().add(grp);
- }
- }
- }
-
- /**
- * Checks to see if the entity (by id) is present in the mergedModel or not.
- * If not, it will perform a copy of the entity and it's attributes using
- * EcoreUtil.Copier.
- *
- * @param parent
- * @param entity
- * @return
- */
- private Entity addEntityAsNecessary(final Entity parent, final Entity entity) {
- Entity mmParent = null;
- Entity mmEntity = null;
- if (parent != null){
- mmParent = getMergedEntity(parent);
- if (mmParent == null){
- mmParent = addEntityAsNecessary((Entity)entity.eContainer(), entity);
- }
- }
- if (mmParent != null){
- mmEntity = addEntityInternal(mmParent, entity);
- return mmEntity;
- }
- return mmEntity;
- }
-
- private boolean isExistingEntityGroup(final Model model, final EntityGroup entityGroup) {
- boolean found = false;
- for(final Iterator it=model.getEntityGroups().iterator();it.hasNext();){
- if (entityGroup.getId().equals(((EntityGroup)it.next()).getId()))
- return true;
- }
- return found;
- }
-
- private Entity getExistingChildEntity(final Entity parent, final Entity entity) {
- for(final Iterator it=parent.getChildEntities().iterator();it.hasNext();){
- final Entity foundEntity = (Entity)it.next();
- if (entity.getId().equals(foundEntity.getId()))
- return foundEntity;
- }
- return null;
- }
-
- private /*synchronized*/ Entity addEntityInternal(final Entity parent, final Entity entity) {
- final Copier copier = new Copier();
- final Entity mmEntity =(Entity)copier.copy(entity);
- copier.copyReferences();
- parent.getChildEntities().add(mmEntity);
- return mmEntity;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.jst.jsf.common.metadata.internal.IMetaDataModelMergeAssistant#addTrait(org.eclipse.jst.jsf.common.metadata.Entity, org.eclipse.jst.jsf.common.metadata.Trait)
- */
- public boolean addTrait(final Entity entity, final Trait trait) {
- final Entity returnedEntity = getMergedEntity(entity);
- if (returnedEntity != null){
- return addTraitAsNecessary(returnedEntity, trait);
- }
- return false;
- }
-
-
- private boolean addTraitAsNecessary(Entity mergedEntity, Trait trait) {
- final Trait mmTrait = getMergedTrait(mergedEntity, trait);
- if (mmTrait == null){
- addTraitInternal(mergedEntity, trait);
- return true;
-
- }
- return false;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.jst.jsf.common.metadata.internal.IMetaDataModelMergeAssistant#setMergeComplete()
- */
- public void setMergeComplete() {
- final Model model = (Model)getMergedModel().getRoot();
- if (model != null){
- StandardModelFactory.debug(">> Begin processIncludeGroups for: "+getMergedModel().getModelContext(),StandardModelFactory.DEBUG_MD_LOAD); //$NON-NLS-1$
-
- processIncludeGroups(model);
-
- StandardModelFactory.debug(">> End processIncludeGroups for: "+getMergedModel().getModelContext(),StandardModelFactory.DEBUG_MD_LOAD); //$NON-NLS-1$
- }
- }
-
- /**
- * Copies the passed trait and adds it to the merged entity.
- * The source model provider of the trait is then set on the trait so that
- * the trait can know where it came from.
- *
- * @param parent
- * @param trait
- * @return merged Trait
- */
- private Trait addTraitInternal(final Entity parent, final Trait trait) {
- final Copier copier = new Copier();
- final Trait mmTrait =(Trait)copier.copy(trait);
- copier.copyReferences();
- parent.getTraits().add(mmTrait);
- //set the model key to know from where the trait came
- mmTrait.setSourceModelProvider(trait.getSourceModelProvider());
- return mmTrait;
- }
-
- /**
- * Locates the entity in the merged model matching by id only.
- * If not located, this method returns null;
- *
- * @param entity
- * @return merged entity
- */
- private Entity getMergedEntity(final Entity entity){
- if (entity instanceof Model)
- return (Entity)mergedModel.getRoot();
-
- Entity ret = null;
- final String entityKey = getIdRelativeToRoot(entity);
- final SimpleResultSet rs = (SimpleResultSet)entityVisitor.findEntities((Entity)mergedModel.getRoot(), entityKey);
- try {
- if (! rs.getResults().isEmpty())
- ret = (Entity)rs.getResults().get(0);
- rs.close();
- } catch (MetaDataException e) {
- JSFCommonPlugin.log(IStatus.ERROR, "Error in getMergedEntity()", e); //$NON-NLS-1$
- }
- return ret;
- }
-
- private String getIdRelativeToRoot(final Entity entity) {
- Entity e = entity;
- final StringBuffer buf = new StringBuffer();
- while (e.eContainer() != null){
- buf.insert(0, e.getId());
- if (e.eContainer()!=null && e.eContainer().eContainer() != null)
- buf.insert(0,"/"); //$NON-NLS-1$
- e = (Entity)e.eContainer();
- }
- return buf.toString();
- }
-
- /**
- * Locates the trait in the merged model matching by id only.
- * If not located, this method returns null;
- *
- * @param entity
- * @param trait
- * @return merged Trait
- */
- public Trait getMergedTrait(final Entity entity, final Trait trait){
- final SimpleResultSet rs = (SimpleResultSet)traitVisitor.findTraits(entity, trait.getId());
- Trait ret = null;
- try {
- if (! rs.getResults().isEmpty())
- ret = (Trait)rs.getResults().get(0);
- rs.close();
- } catch (MetaDataException e) {
- JSFCommonPlugin.log(IStatus.ERROR, "Error in getMergedTrait()", e); //$NON-NLS-1$
- }
- return ret;
- }
-
- private void processIncludeGroups(final Model root) {
- addEntityGroupReferencesRecursively(root);
- }
-
- private void addEntityGroupReferencesRecursively(final Entity entity) {
- doIncludes(entity);
- for (int i=0, size=entity.getChildEntities().size();i<size;i++){
- addEntityGroupReferencesRecursively((Entity)entity.getChildEntities().get(i));
- }
- }
-
- private void doIncludes(final Entity entity){
- for (int j=0, groupsSize=entity.getIncludeGroups().size();j<groupsSize; j++){
- final IncludeEntityGroup include = (IncludeEntityGroup)entity.getIncludeGroups().get(j);
- if (include.getId() != null){
- //is this a local merge?
- if (include.getModelUri() == null||
- (include.getModelUri()
- .equals(getMergedModel()
- .getModelContext().getModelIdentifier())) ){
- final EntityGroup eg = ((Model)getMergedModel().getRoot()).findIncludeGroup(include.getId());
- addIncludeRefs(entity, eg);
- } else //external model include
- addIncludeRefs(entity, include);
- }
- }
- }
- /*
- * Adds traits and child entities from an external entity group to the passed entity
- * @param entity
- * @param include
- */
- private void addIncludeRefs(final Entity entity, final IncludeEntityGroup include) {
- final IMetaDataModelContext modelContext = getMergedModel().getModelContext();
- final IMetaDataQuery query = MetaDataQueryFactory.getInstance().createQuery(modelContext);
- final Model externalModel = query.getQueryHelper().getModel(include.getModelUri());
- if (externalModel != null){
- final EntityGroup entityGroup = externalModel.findIncludeGroup(include.getId());
- addIncludeRefs(entity, entityGroup);
- }
- else {
- JSFCommonPlugin.log(IStatus.ERROR, "Unable to load external metadata model refs for "+modelContext.getModelIdentifier() //$NON-NLS-1$
- + " into "+ include.getModelUri()); //$NON-NLS-1$
- }
- }
-
- /*
- * Adds traits and child entities from a local entity group to the passed entity if not already present for the entity.
- * First
- * @param entity
- * @param entityGroup
- */
- private void addIncludeRefs(final Entity entity, final EntityGroup entityGroup) {
- if (entityGroup == null)
- return;
-
- for (int i=0, size=entityGroup.getTraits().size();i<size;i++){
- addTrait(entity, (Trait)entityGroup.getTraits().get(i));
- }
-
- for (int i=0, size=entityGroup.getChildEntities().size();i<size;i++){
- traverseAndAddIncludes(entity, (Entity)entityGroup.getChildEntities().get(i));
- }
- }
-
- private void traverseAndAddIncludes(final Entity parent, final Entity entity){
- final Entity mergedEntity = addIncludedEntityAsNecessary(parent, entity);
-
- for (final Iterator/*<Trait>*/ it=entity.getTraits().iterator();it.hasNext();){
- final Trait trait = (Trait)it.next();
- addTraitAsNecessary(mergedEntity, trait);
- }
-
- for (final Iterator/*<EntityKey>*/ it=entity.getChildEntities().iterator();it.hasNext();){
- final Entity e = (Entity)it.next();
- traverseAndAddIncludes(mergedEntity, e);//add as normal
- }
-
- }
-
- /*
- * Checks to see if the entity (by id) is present as a child entity in the parent or not.
- * If not, it will add the entity to the childEntities without copying.
- *
- * @param parent
- * @param entity
- * @return Entity
- */
- private Entity addIncludedEntityAsNecessary(final Entity parent, final Entity entity) {
- Entity mergedEntity = getExistingChildEntity(parent, entity);
- if (mergedEntity == null){
- mergedEntity = addEntityInternal(parent, entity);
- }
- return mergedEntity;
- }
-
-}

Back to the top