carbidecpp22devenv/plugins/org.eclipse.gmf.templates.legacy_1.0.0.v20090614-0839/codegen.lite.templates/xpt/diagram/parts/semanticChildren.xpt
author cawthron
Fri, 04 Dec 2009 11:06:59 -0600
changeset 422 033392511bf7
permissions -rw-r--r--
add files for RCL_2_2

/*
 * Copyright (c) 2007, 2008 Borland Software 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:
 *    bblajer (Borland) - initial API and implementation
 */

«IMPORT "http://www.eclipse.org/gmf/2008/GenModel"»
«IMPORT "http://www.eclipse.org/emf/2002/Ecore"»
«IMPORT "http://www.eclipse.org/emf/2002/GenModel"»
«EXTENSION xpt::GenModelUtils»
«EXTENSION xpt::commands::CommandUtils»
«EXTENSION xpt::diagram::parts::NotationModelRefresher»
«EXTENSION xpt::diagram::PhantomUtils»

«DEFINE semanticChildren(String viewCode) FOR gmfgen::GenContainerBase-»
«IF !needsNotationModelRefresher()-»
return java.util.Collections.EMPTY_LIST;
«ELSE-»
java.util.List result = new java.util.LinkedList();
org.eclipse.gmf.runtime.notation.View viewObject = «viewCode»;
org.eclipse.emf.ecore.EObject modelObject = viewObject.getElement();
org.eclipse.emf.ecore.EObject nextValue;
int nodeVID;
«EXPAND addPhantoms-»
«FOREACH getChildFeatures() AS childMetaFeature-»
	«LET getGenNodes(childMetaFeature) AS genNodesCollection-»
	«IF genNodesCollection.size() > 0-»
		«IF childMetaFeature.isListType()-»
for(java.util.Iterator it = «EXPAND MetaModel::getFeatureValue("modelObject", null, true) FOR childMetaFeature».iterator(); it.hasNext(); ) {
	nextValue = (org.eclipse.emf.ecore.EObject) it.next();
		«ELSE-»
nextValue = (org.eclipse.emf.ecore.EObject) «EXPAND MetaModel::getFeatureValue("modelObject", null, false) FOR childMetaFeature»;
		«ENDIF-»
nodeVID = «getDiagram().getVisualIDRegistryQualifiedClassName()».getNodeVisualID(viewObject, nextValue);
		«LET genNodesCollection.size() > 1 AS generateSwitch-»
		«IF generateSwitch-»
switch (nodeVID) {
		«ENDIF-»
		«FOREACH genNodesCollection AS nextNode-»
			«IF generateSwitch-»
case «nextNode.getEditPartQualifiedClassName()».VISUAL_ID: {
			«ELSE-»
if («nextNode.getEditPartQualifiedClassName()».VISUAL_ID == nodeVID) {
			«ENDIF-»
	result.add(new org.eclipse.gmf.runtime.lite.edit.parts.update.canonical.ElementDescriptor(nextValue, nodeVID));
			«IF generateSwitch-»
	break;
	}
			«ELSE-»
	}
			«ENDIF-»
		«ENDFOREACH-»
		«IF generateSwitch-»
}
		«ENDIF-»
		«IF childMetaFeature.isListType()-»
	}
		«ENDIF-»
		«ENDLET-»
	«ENDIF-»
	«ENDLET-»
«ENDFOREACH-»
	return result;
«ENDIF-»
«ENDDEFINE»

«DEFINE addPhantoms FOR gmfgen::GenContainerBase»«ENDDEFINE»

«DEFINE addPhantoms FOR gmfgen::GenDiagram-»
«IF getPhantomNodes().size() > 0-»
org.eclipse.emf.ecore.resource.Resource resource = «EXPAND xpt::commands::Common::getPhantomContainmentResource FOR "viewObject"»;
for (java.util.Iterator semanticIterator = getPhantomNodesIterator(resource); semanticIterator.hasNext(); ) {
	org.eclipse.emf.ecore.EObject childElement = (org.eclipse.emf.ecore.EObject) semanticIterator.next();
	if (childElement == modelObject) {
		continue;
	}
	nodeVID = «getDiagram().getVisualIDRegistryQualifiedClassName()».getNodeVisualID(viewObject, childElement);
	switch (nodeVID) {
	«EXPAND addNextIfPhantom FOREACH getPhantomNodes()-»
	}
}
«ENDIF-»
«ENDDEFINE»

«DEFINE addNextIfPhantom FOR gmfgen::GenTopLevelNode-»
case «getEditPartQualifiedClassName()».VISUAL_ID: {
«LET getPhantomFeatures() AS phantomFeatures-»
	org.eclipse.emf.ecore.EStructuralFeature containmentFeature = childElement.eContainmentFeature();
	if (childElement.eContainer() == null«IF phantomFeatures.size() > 0» || «EXPAND checkFeature FOREACH phantomFeatures SEPARATOR "||"»«ENDIF») {
		result.add(new org.eclipse.gmf.runtime.lite.edit.parts.update.canonical.ElementDescriptor(childElement, nodeVID));
	}
«ENDLET-»
	break;
}
«ENDDEFINE»

«DEFINE checkFeature FOR genmodel::GenFeature»containmentFeature == «EXPAND MetaModel::MetaFeature»«ENDDEFINE»

«DEFINE getPhantomNodesIterator FOR gmfgen::GenContainerBase»«ENDDEFINE»

«DEFINE getPhantomNodesIterator FOR gmfgen::GenDiagram-»
«IF getPhantomNodes().size() > 0-»
«EXPAND xpt::Common::generatedMemberComment("By default, returns all contents of the resource. If phantoms are known to be confined in a subset of the resource contents,\n" + 
 "overwriting this method (and marking it as generated NOT) will significantly improve performance.")»
private java.util.Iterator getPhantomNodesIterator(org.eclipse.emf.ecore.resource.Resource resource) {
	return resource.getAllContents();
}
«ENDIF-»
«ENDDEFINE»