Regenerate with Operation Reflection and consistent URI
diff --git a/docs/publications/ESE2010LongTalk/ESEExampleTree.diagram/plugin.xml b/docs/publications/ESE2010LongTalk/ESEExampleTree.diagram/plugin.xml
index 5466043..cfa6c38 100644
--- a/docs/publications/ESE2010LongTalk/ESEExampleTree.diagram/plugin.xml
+++ b/docs/publications/ESE2010LongTalk/ESEExampleTree.diagram/plugin.xml
@@ -267,7 +267,7 @@
 
    <extension point="org.eclipse.gmf.runtime.emf.type.core.elementTypes" id="element-types">
       <?gmfgen generated="true"?>
-      <metamodel nsURI="http://www.clipse.org/ecamples/tree">
+      <metamodel nsURI="http://www.eclipse.org/examples/tree">
          <metamodelType
                id="ESEExampleTree.diagram.Universe_1000"
                name="%metatype.name.Universe_1000"
@@ -277,7 +277,7 @@
             <param name="semanticHint" value="1000"/>
          </metamodelType>
       </metamodel>
-      <metamodel nsURI="http://www.clipse.org/ecamples/tree">
+      <metamodel nsURI="http://www.eclipse.org/examples/tree">
          <metamodelType
                id="ESEExampleTree.diagram.Person_2001"
                name="%metatype.name.Person_2001"
@@ -287,7 +287,7 @@
             <param name="semanticHint" value="2001"/>
          </metamodelType>
       </metamodel>
-      <metamodel nsURI="http://www.clipse.org/ecamples/tree">
+      <metamodel nsURI="http://www.eclipse.org/examples/tree">
          <specializationType
                id="ESEExampleTree.diagram.PersonChildren_4002"
                name="%metatype.name.PersonChildren_4002"
diff --git a/docs/publications/ESE2010LongTalk/ESEExampleTree.diagram/src/people/diagram/navigator/PeopleNavigatorContentProvider.java b/docs/publications/ESE2010LongTalk/ESEExampleTree.diagram/src/people/diagram/navigator/PeopleNavigatorContentProvider.java
index ffa9a58..912f0ba 100644
--- a/docs/publications/ESE2010LongTalk/ESEExampleTree.diagram/src/people/diagram/navigator/PeopleNavigatorContentProvider.java
+++ b/docs/publications/ESE2010LongTalk/ESEExampleTree.diagram/src/people/diagram/navigator/PeopleNavigatorContentProvider.java
@@ -219,35 +219,6 @@
 	private Object[] getViewChildren(View view, Object parentElement) {
 		switch (PeopleVisualIDRegistry.getVisualID(view)) {
 
-		case PersonEditPart.VISUAL_ID: {
-			LinkedList<PeopleAbstractNavigatorItem> result = new LinkedList<PeopleAbstractNavigatorItem>();
-			Node sv = (Node) view;
-			PeopleNavigatorGroup incominglinks = new PeopleNavigatorGroup(
-					Messages.NavigatorGroupName_Person_2001_incominglinks,
-					"icons/incomingLinksNavigatorGroup.gif", parentElement); //$NON-NLS-1$
-			PeopleNavigatorGroup outgoinglinks = new PeopleNavigatorGroup(
-					Messages.NavigatorGroupName_Person_2001_outgoinglinks,
-					"icons/outgoingLinksNavigatorGroup.gif", parentElement); //$NON-NLS-1$
-			Collection<View> connectedViews;
-			connectedViews = getIncomingLinksByType(Collections.singleton(sv),
-					PeopleVisualIDRegistry
-							.getType(PersonChildrenEditPart.VISUAL_ID));
-			incominglinks.addChildren(createNavigatorItems(connectedViews,
-					incominglinks, true));
-			connectedViews = getOutgoingLinksByType(Collections.singleton(sv),
-					PeopleVisualIDRegistry
-							.getType(PersonChildrenEditPart.VISUAL_ID));
-			outgoinglinks.addChildren(createNavigatorItems(connectedViews,
-					outgoinglinks, true));
-			if (!incominglinks.isEmpty()) {
-				result.add(incominglinks);
-			}
-			if (!outgoinglinks.isEmpty()) {
-				result.add(outgoinglinks);
-			}
-			return result.toArray();
-		}
-
 		case PersonChildrenEditPart.VISUAL_ID: {
 			LinkedList<PeopleAbstractNavigatorItem> result = new LinkedList<PeopleAbstractNavigatorItem>();
 			Edge sv = (Edge) view;
@@ -295,6 +266,35 @@
 			}
 			return result.toArray();
 		}
+
+		case PersonEditPart.VISUAL_ID: {
+			LinkedList<PeopleAbstractNavigatorItem> result = new LinkedList<PeopleAbstractNavigatorItem>();
+			Node sv = (Node) view;
+			PeopleNavigatorGroup incominglinks = new PeopleNavigatorGroup(
+					Messages.NavigatorGroupName_Person_2001_incominglinks,
+					"icons/incomingLinksNavigatorGroup.gif", parentElement); //$NON-NLS-1$
+			PeopleNavigatorGroup outgoinglinks = new PeopleNavigatorGroup(
+					Messages.NavigatorGroupName_Person_2001_outgoinglinks,
+					"icons/outgoingLinksNavigatorGroup.gif", parentElement); //$NON-NLS-1$
+			Collection<View> connectedViews;
+			connectedViews = getIncomingLinksByType(Collections.singleton(sv),
+					PeopleVisualIDRegistry
+							.getType(PersonChildrenEditPart.VISUAL_ID));
+			incominglinks.addChildren(createNavigatorItems(connectedViews,
+					incominglinks, true));
+			connectedViews = getOutgoingLinksByType(Collections.singleton(sv),
+					PeopleVisualIDRegistry
+							.getType(PersonChildrenEditPart.VISUAL_ID));
+			outgoinglinks.addChildren(createNavigatorItems(connectedViews,
+					outgoinglinks, true));
+			if (!incominglinks.isEmpty()) {
+				result.add(incominglinks);
+			}
+			if (!outgoinglinks.isEmpty()) {
+				result.add(outgoinglinks);
+			}
+			return result.toArray();
+		}
 		}
 		return EMPTY_ARRAY;
 	}
diff --git a/docs/publications/ESE2010LongTalk/ESEExampleTree.diagram/src/people/diagram/navigator/PeopleNavigatorLabelProvider.java b/docs/publications/ESE2010LongTalk/ESEExampleTree.diagram/src/people/diagram/navigator/PeopleNavigatorLabelProvider.java
index a382db6..d69e111 100644
--- a/docs/publications/ESE2010LongTalk/ESEExampleTree.diagram/src/people/diagram/navigator/PeopleNavigatorLabelProvider.java
+++ b/docs/publications/ESE2010LongTalk/ESEExampleTree.diagram/src/people/diagram/navigator/PeopleNavigatorLabelProvider.java
@@ -84,15 +84,15 @@
 	 */
 	public Image getImage(View view) {
 		switch (PeopleVisualIDRegistry.getVisualID(view)) {
-		case PersonEditPart.VISUAL_ID:
-			return getImage(
-					"Navigator?TopLevelNode?http://www.clipse.org/ecamples/tree?Person", PeopleElementTypes.Person_2001); //$NON-NLS-1$
 		case PersonChildrenEditPart.VISUAL_ID:
 			return getImage(
-					"Navigator?Link?http://www.clipse.org/ecamples/tree?Person?children", PeopleElementTypes.PersonChildren_4002); //$NON-NLS-1$
+					"Navigator?Link?http://www.eclipse.org/examples/tree?Person?children", PeopleElementTypes.PersonChildren_4002); //$NON-NLS-1$
 		case UniverseEditPart.VISUAL_ID:
 			return getImage(
-					"Navigator?Diagram?http://www.clipse.org/ecamples/tree?Universe", PeopleElementTypes.Universe_1000); //$NON-NLS-1$
+					"Navigator?Diagram?http://www.eclipse.org/examples/tree?Universe", PeopleElementTypes.Universe_1000); //$NON-NLS-1$
+		case PersonEditPart.VISUAL_ID:
+			return getImage(
+					"Navigator?TopLevelNode?http://www.eclipse.org/examples/tree?Person", PeopleElementTypes.Person_2001); //$NON-NLS-1$
 		}
 		return getImage("Navigator?UnknownElement", null); //$NON-NLS-1$
 	}
@@ -145,12 +145,12 @@
 			return getUnresolvedDomainElementProxyText(view);
 		}
 		switch (PeopleVisualIDRegistry.getVisualID(view)) {
-		case PersonEditPart.VISUAL_ID:
-			return getPerson_2001Text(view);
 		case PersonChildrenEditPart.VISUAL_ID:
 			return getPersonChildren_4002Text(view);
 		case UniverseEditPart.VISUAL_ID:
 			return getUniverse_1000Text(view);
+		case PersonEditPart.VISUAL_ID:
+			return getPerson_2001Text(view);
 		}
 		return getUnknownElementText(view);
 	}
diff --git a/docs/publications/ESE2010LongTalk/ESEExampleTree/model/People.ecore b/docs/publications/ESE2010LongTalk/ESEExampleTree/model/People.ecore
index 505f48b..e67bbdf 100644
--- a/docs/publications/ESE2010LongTalk/ESEExampleTree/model/People.ecore
+++ b/docs/publications/ESE2010LongTalk/ESEExampleTree/model/People.ecore
@@ -2,7 +2,7 @@
 <ecore:EPackage xmi:version="2.0"
     xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="people"
-    nsURI="http://www.clipse.org/ecamples/tree" nsPrefix="tree">
+    nsURI="http://www.eclipse.org/examples/tree" nsPrefix="tree">
   <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
     <details key="invocationDelegates" value="http://www.eclipse.org/emf/2002/Ecore/OCL"/>
     <details key="settingDelegates" value="http://www.eclipse.org/emf/2002/Ecore/OCL"/>
diff --git a/docs/publications/ESE2010LongTalk/ESEExampleTree/model/default.people_diagram b/docs/publications/ESE2010LongTalk/ESEExampleTree/model/default.people_diagram
index 06cde78..18b9427 100644
--- a/docs/publications/ESE2010LongTalk/ESEExampleTree/model/default.people_diagram
+++ b/docs/publications/ESE2010LongTalk/ESEExampleTree/model/default.people_diagram
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:tree="http://www.clipse.org/ecamples/tree" xmi:id="__hwfwNhVEd-DhoABUGS8wA" type="People" measurementUnit="Pixel">
+<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:tree="http://www.eclipse.org/examples/tree" xmi:id="__hwfwNhVEd-DhoABUGS8wA" type="People" measurementUnit="Pixel">
   <children xmi:type="notation:Shape" xmi:id="__ihUwNhVEd-DhoABUGS8wA" type="2001" fontName="Microsoft Sans Serif">
     <children xmi:type="notation:DecorationNode" xmi:id="__ih70NhVEd-DhoABUGS8wA" type="5001"/>
     <element xmi:type="tree:Person" href="default.people#//@people.0"/>
diff --git a/docs/publications/ESE2010LongTalk/ESEExampleTree/src/people/PeoplePackage.java b/docs/publications/ESE2010LongTalk/ESEExampleTree/src/people/PeoplePackage.java
index 4044243..98d3b34 100644
--- a/docs/publications/ESE2010LongTalk/ESEExampleTree/src/people/PeoplePackage.java
+++ b/docs/publications/ESE2010LongTalk/ESEExampleTree/src/people/PeoplePackage.java
@@ -2,13 +2,14 @@
  * <copyright>
  * </copyright>
  *
- * $Id: PeoplePackage.java,v 1.1 2010/10/16 12:13:05 ewillink Exp $
+ * $Id: PeoplePackage.java,v 1.2 2010/10/29 11:58:02 ewillink Exp $
  */
 package people;
 
 import org.eclipse.emf.ecore.EAttribute;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EEnum;
+import org.eclipse.emf.ecore.EOperation;
 import org.eclipse.emf.ecore.EPackage;
 import org.eclipse.emf.ecore.EReference;
 
@@ -25,6 +26,7 @@
  * <!-- end-user-doc -->
  * @see people.PeopleFactory
  * @model kind="package"
+ *        annotation="http://www.eclipse.org/emf/2002/Ecore invocationDelegates='http://www.eclipse.org/emf/2002/Ecore/OCL' settingDelegates='http://www.eclipse.org/emf/2002/Ecore/OCL' validationDelegates='http://www.eclipse.org/emf/2002/Ecore/OCL'"
  * @generated
  */
 public interface PeoplePackage extends EPackage {
@@ -42,7 +44,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	String eNS_URI = "http://www.clipse.org/ecamples/tree";
+	String eNS_URI = "http://www.eclipse.org/examples/tree";
 
 	/**
 	 * The package namespace name.
@@ -107,13 +109,49 @@
 	int PERSON__NAME = 3;
 
 	/**
+	 * The feature id for the '<em><b>Father</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PERSON__FATHER = 4;
+
+	/**
+	 * The feature id for the '<em><b>Mother</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PERSON__MOTHER = 5;
+
+	/**
 	 * The number of structural features of the '<em>Person</em>' class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int PERSON_FEATURE_COUNT = 4;
+	int PERSON_FEATURE_COUNT = 6;
+
+	/**
+	 * The operation id for the '<em>Child</em>' operation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PERSON___CHILD__STRING = 0;
+
+	/**
+	 * The number of operations of the '<em>Person</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PERSON_OPERATION_COUNT = 1;
 
 	/**
 	 * The meta object id for the '{@link people.impl.UniverseImpl <em>Universe</em>}' class.
@@ -144,6 +182,15 @@
 	int UNIVERSE_FEATURE_COUNT = 1;
 
 	/**
+	 * The number of operations of the '<em>Universe</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int UNIVERSE_OPERATION_COUNT = 0;
+
+	/**
 	 * The meta object id for the '{@link people.Gender <em>Gender</em>}' enum.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -209,6 +256,38 @@
 	EAttribute getPerson_Name();
 
 	/**
+	 * Returns the meta object for the reference '{@link people.Person#getFather <em>Father</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Father</em>'.
+	 * @see people.Person#getFather()
+	 * @see #getPerson()
+	 * @generated
+	 */
+	EReference getPerson_Father();
+
+	/**
+	 * Returns the meta object for the reference '{@link people.Person#getMother <em>Mother</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Mother</em>'.
+	 * @see people.Person#getMother()
+	 * @see #getPerson()
+	 * @generated
+	 */
+	EReference getPerson_Mother();
+
+	/**
+	 * Returns the meta object for the '{@link people.Person#child(java.lang.String) <em>Child</em>}' operation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the '<em>Child</em>' operation.
+	 * @see people.Person#child(java.lang.String)
+	 * @generated
+	 */
+	EOperation getPerson__Child__String();
+
+	/**
 	 * Returns the meta object for class '{@link people.Universe <em>Universe</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -304,6 +383,30 @@
 		EAttribute PERSON__NAME = eINSTANCE.getPerson_Name();
 
 		/**
+		 * The meta object literal for the '<em><b>Father</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference PERSON__FATHER = eINSTANCE.getPerson_Father();
+
+		/**
+		 * The meta object literal for the '<em><b>Mother</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference PERSON__MOTHER = eINSTANCE.getPerson_Mother();
+
+		/**
+		 * The meta object literal for the '<em><b>Child</b></em>' operation.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EOperation PERSON___CHILD__STRING = eINSTANCE.getPerson__Child__String();
+
+		/**
 		 * The meta object literal for the '{@link people.impl.UniverseImpl <em>Universe</em>}' class.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
diff --git a/docs/publications/ESE2010LongTalk/ESEExampleTree/src/people/Person.java b/docs/publications/ESE2010LongTalk/ESEExampleTree/src/people/Person.java
index 246257f..26ee17c 100644
--- a/docs/publications/ESE2010LongTalk/ESEExampleTree/src/people/Person.java
+++ b/docs/publications/ESE2010LongTalk/ESEExampleTree/src/people/Person.java
@@ -2,7 +2,7 @@
  * <copyright>
  * </copyright>
  *
- * $Id: Person.java,v 1.1 2010/10/16 12:13:05 ewillink Exp $
+ * $Id: Person.java,v 1.2 2010/10/29 11:58:02 ewillink Exp $
  */
 package people;
 
@@ -22,18 +22,20 @@
  *   <li>{@link people.Person#getParents <em>Parents</em>}</li>
  *   <li>{@link people.Person#getGender <em>Gender</em>}</li>
  *   <li>{@link people.Person#getName <em>Name</em>}</li>
+ *   <li>{@link people.Person#getFather <em>Father</em>}</li>
+ *   <li>{@link people.Person#getMother <em>Mother</em>}</li>
  * </ul>
  * </p>
  *
  * @see people.PeoplePackage#getPerson()
- * @model
+ * @model annotation="http://www.eclipse.org/emf/2002/Ecore constraints='null MixedGenderParents'"
+ *        annotation="http://www.eclipse.org/emf/2002/Ecore/OCL MixedGenderParents='father.gender <> mother.gender'"
  * @generated
  */
 public interface Person extends EObject {
 	/**
 	 * Returns the value of the '<em><b>Children</b></em>' reference list.
 	 * The list contents are of type {@link people.Person}.
-	 * It is bidirectional and its opposite is '{@link people.Person#getParents <em>Parents</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <p>
 	 * If the meaning of the '<em>Children</em>' reference list isn't clear,
@@ -42,8 +44,7 @@
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Children</em>' reference list.
 	 * @see people.PeoplePackage#getPerson_Children()
-	 * @see people.Person#getParents
-	 * @model opposite="parents"
+	 * @model
 	 * @generated
 	 */
 	EList<Person> getChildren();
@@ -51,7 +52,6 @@
 	/**
 	 * Returns the value of the '<em><b>Parents</b></em>' reference list.
 	 * The list contents are of type {@link people.Person}.
-	 * It is bidirectional and its opposite is '{@link people.Person#getChildren <em>Children</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <p>
 	 * If the meaning of the '<em>Parents</em>' reference list isn't clear,
@@ -60,8 +60,7 @@
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Parents</em>' reference list.
 	 * @see people.PeoplePackage#getPerson_Parents()
-	 * @see people.Person#getChildren
-	 * @model opposite="children" lower="2" upper="2"
+	 * @model upper="2"
 	 * @generated
 	 */
 	EList<Person> getParents();
@@ -121,4 +120,66 @@
 	 */
 	void setName(String value);
 
+	/**
+	 * Returns the value of the '<em><b>Father</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Father</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Father</em>' reference.
+	 * @see #setFather(Person)
+	 * @see people.PeoplePackage#getPerson_Father()
+	 * @model required="true" transient="true" volatile="true" derived="true"
+	 *        annotation="http://www.eclipse.org/emf/2002/Ecore/OCL derivation='parents->any(gender = Gender::MALE)'"
+	 * @generated
+	 */
+	Person getFather();
+
+	/**
+	 * Sets the value of the '{@link people.Person#getFather <em>Father</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Father</em>' reference.
+	 * @see #getFather()
+	 * @generated
+	 */
+	void setFather(Person value);
+
+	/**
+	 * Returns the value of the '<em><b>Mother</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Mother</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Mother</em>' reference.
+	 * @see #setMother(Person)
+	 * @see people.PeoplePackage#getPerson_Mother()
+	 * @model required="true" transient="true" volatile="true" derived="true"
+	 *        annotation="http://www.eclipse.org/emf/2002/Ecore/OCL derivation='parents->any(gender = Gender::FEMALE)'"
+	 * @generated
+	 */
+	Person getMother();
+
+	/**
+	 * Sets the value of the '{@link people.Person#getMother <em>Mother</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Mother</em>' reference.
+	 * @see #getMother()
+	 * @generated
+	 */
+	void setMother(Person value);
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @model annotation="http://www.eclipse.org/emf/2002/Ecore/OCL body='children->any(name=childName)'"
+	 * @generated
+	 */
+	Person child(String childName);
+
 } // Person
diff --git a/docs/publications/ESE2010LongTalk/ESEExampleTree/src/people/impl/PeopleFactoryImpl.java b/docs/publications/ESE2010LongTalk/ESEExampleTree/src/people/impl/PeopleFactoryImpl.java
index d741c29..14f8539 100644
--- a/docs/publications/ESE2010LongTalk/ESEExampleTree/src/people/impl/PeopleFactoryImpl.java
+++ b/docs/publications/ESE2010LongTalk/ESEExampleTree/src/people/impl/PeopleFactoryImpl.java
@@ -2,7 +2,7 @@
  * <copyright>
  * </copyright>
  *
- * $Id: PeopleFactoryImpl.java,v 1.1 2010/10/16 12:13:06 ewillink Exp $
+ * $Id: PeopleFactoryImpl.java,v 1.2 2010/10/29 11:58:02 ewillink Exp $
  */
 package people.impl;
 
@@ -32,7 +32,7 @@
 	 */
 	public static PeopleFactory init() {
 		try {
-			PeopleFactory thePeopleFactory = (PeopleFactory)EPackage.Registry.INSTANCE.getEFactory("http://www.clipse.org/ecamples/tree"); 
+			PeopleFactory thePeopleFactory = (PeopleFactory)EPackage.Registry.INSTANCE.getEFactory("http://www.eclipse.org/examples/tree"); 
 			if (thePeopleFactory != null) {
 				return thePeopleFactory;
 			}
diff --git a/docs/publications/ESE2010LongTalk/ESEExampleTree/src/people/impl/PeoplePackageImpl.java b/docs/publications/ESE2010LongTalk/ESEExampleTree/src/people/impl/PeoplePackageImpl.java
index 1e25188..465cf97 100644
--- a/docs/publications/ESE2010LongTalk/ESEExampleTree/src/people/impl/PeoplePackageImpl.java
+++ b/docs/publications/ESE2010LongTalk/ESEExampleTree/src/people/impl/PeoplePackageImpl.java
@@ -2,16 +2,18 @@
  * <copyright>
  * </copyright>
  *
- * $Id: PeoplePackageImpl.java,v 1.1 2010/10/16 12:13:06 ewillink Exp $
+ * $Id: PeoplePackageImpl.java,v 1.2 2010/10/29 11:58:02 ewillink Exp $
  */
 package people.impl;
 
 import org.eclipse.emf.ecore.EAttribute;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EEnum;
+import org.eclipse.emf.ecore.EOperation;
 import org.eclipse.emf.ecore.EPackage;
 import org.eclipse.emf.ecore.EReference;
 
+import org.eclipse.emf.ecore.EValidator;
 import org.eclipse.emf.ecore.impl.EPackageImpl;
 
 import people.Gender;
@@ -19,6 +21,7 @@
 import people.PeoplePackage;
 import people.Person;
 import people.Universe;
+import people.util.PeopleValidator;
 
 /**
  * <!-- begin-user-doc -->
@@ -100,6 +103,15 @@
 		// Initialize created meta-data
 		thePeoplePackage.initializePackageContents();
 
+		// Register package validator
+		EValidator.Registry.INSTANCE.put
+			(thePeoplePackage, 
+			 new EValidator.Descriptor() {
+				 public EValidator getEValidator() {
+					 return PeopleValidator.INSTANCE;
+				 }
+			 });
+
 		// Mark meta-data to indicate it can't be changed
 		thePeoplePackage.freeze();
 
@@ -159,6 +171,33 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	public EReference getPerson_Father() {
+		return (EReference)personEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getPerson_Mother() {
+		return (EReference)personEClass.getEStructuralFeatures().get(5);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EOperation getPerson__Child__String() {
+		return personEClass.getEOperations().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
 	public EClass getUniverse() {
 		return universeEClass;
 	}
@@ -214,6 +253,9 @@
 		createEReference(personEClass, PERSON__PARENTS);
 		createEAttribute(personEClass, PERSON__GENDER);
 		createEAttribute(personEClass, PERSON__NAME);
+		createEReference(personEClass, PERSON__FATHER);
+		createEReference(personEClass, PERSON__MOTHER);
+		createEOperation(personEClass, PERSON___CHILD__STRING);
 
 		universeEClass = createEClass(UNIVERSE);
 		createEReference(universeEClass, UNIVERSE__PEOPLE);
@@ -251,12 +293,17 @@
 
 		// Add supertypes to classes
 
-		// Initialize classes and features; add operations and parameters
+		// Initialize classes, features, and operations; add parameters
 		initEClass(personEClass, Person.class, "Person", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
-		initEReference(getPerson_Children(), this.getPerson(), this.getPerson_Parents(), "children", null, 0, -1, Person.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-		initEReference(getPerson_Parents(), this.getPerson(), this.getPerson_Children(), "parents", null, 2, 2, Person.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getPerson_Children(), this.getPerson(), null, "children", null, 0, -1, Person.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getPerson_Parents(), this.getPerson(), null, "parents", null, 0, 2, Person.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEAttribute(getPerson_Gender(), this.getGender(), "gender", null, 0, 1, Person.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEAttribute(getPerson_Name(), ecorePackage.getEString(), "name", null, 0, 1, Person.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getPerson_Father(), this.getPerson(), null, "father", null, 1, 1, Person.class, IS_TRANSIENT, IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, IS_DERIVED, IS_ORDERED);
+		initEReference(getPerson_Mother(), this.getPerson(), null, "mother", null, 1, 1, Person.class, IS_TRANSIENT, IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, IS_DERIVED, IS_ORDERED);
+
+		EOperation op = initEOperation(getPerson__Child__String(), this.getPerson(), "child", 0, 1, IS_UNIQUE, IS_ORDERED);
+		addEParameter(op, ecorePackage.getEString(), "childName", 0, 1, IS_UNIQUE, IS_ORDERED);
 
 		initEClass(universeEClass, Universe.class, "Universe", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 		initEReference(getUniverse_People(), this.getPerson(), null, "people", null, 0, -1, Universe.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
@@ -268,6 +315,70 @@
 
 		// Create resource
 		createResource(eNS_URI);
+
+		// Create annotations
+		// http://www.eclipse.org/emf/2002/Ecore
+		createEcoreAnnotations();
+		// http://www.eclipse.org/emf/2002/Ecore/OCL
+		createOCLAnnotations();
+	}
+
+	/**
+	 * Initializes the annotations for <b>http://www.eclipse.org/emf/2002/Ecore</b>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void createEcoreAnnotations() {
+		String source = "http://www.eclipse.org/emf/2002/Ecore";		
+		addAnnotation
+		  (this, 
+		   source, 
+		   new String[] {
+			 "invocationDelegates", "http://www.eclipse.org/emf/2002/Ecore/OCL",
+			 "settingDelegates", "http://www.eclipse.org/emf/2002/Ecore/OCL",
+			 "validationDelegates", "http://www.eclipse.org/emf/2002/Ecore/OCL"
+		   });		
+		addAnnotation
+		  (personEClass, 
+		   source, 
+		   new String[] {
+			 "constraints", "null MixedGenderParents"
+		   });				
+	}
+
+	/**
+	 * Initializes the annotations for <b>http://www.eclipse.org/emf/2002/Ecore/OCL</b>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void createOCLAnnotations() {
+		String source = "http://www.eclipse.org/emf/2002/Ecore/OCL";				
+		addAnnotation
+		  (personEClass, 
+		   source, 
+		   new String[] {
+			 "MixedGenderParents", "father.gender <> mother.gender"
+		   });		
+		addAnnotation
+		  (getPerson__Child__String(), 
+		   source, 
+		   new String[] {
+			 "body", "children->any(name=childName)"
+		   });		
+		addAnnotation
+		  (getPerson_Father(), 
+		   source, 
+		   new String[] {
+			 "derivation", "parents->any(gender = Gender::MALE)"
+		   });		
+		addAnnotation
+		  (getPerson_Mother(), 
+		   source, 
+		   new String[] {
+			 "derivation", "parents->any(gender = Gender::FEMALE)"
+		   });
 	}
 
 } //PeoplePackageImpl
diff --git a/docs/publications/ESE2010LongTalk/ESEExampleTree/src/people/impl/PersonImpl.java b/docs/publications/ESE2010LongTalk/ESEExampleTree/src/people/impl/PersonImpl.java
index 79f5153..93ab644 100644
--- a/docs/publications/ESE2010LongTalk/ESEExampleTree/src/people/impl/PersonImpl.java
+++ b/docs/publications/ESE2010LongTalk/ESEExampleTree/src/people/impl/PersonImpl.java
@@ -2,23 +2,29 @@
  * <copyright>
  * </copyright>
  *
- * $Id: PersonImpl.java,v 1.1 2010/10/16 12:13:06 ewillink Exp $
+ * $Id: PersonImpl.java,v 1.2 2010/10/29 11:58:02 ewillink Exp $
  */
 package people.impl;
 
+import java.lang.reflect.InvocationTargetException;
 import java.util.Collection;
 
 import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.BasicEList;
 import org.eclipse.emf.common.notify.NotificationChain;
 
 import org.eclipse.emf.common.util.EList;
 
+import org.eclipse.emf.common.util.WrappedException;
 import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EOperation;
+import org.eclipse.emf.ecore.EStructuralFeature;
 import org.eclipse.emf.ecore.InternalEObject;
 
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
 import org.eclipse.emf.ecore.impl.EObjectImpl;
 
+import org.eclipse.emf.ecore.util.EObjectResolvingEList;
 import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList;
 import org.eclipse.emf.ecore.util.InternalEList;
 
@@ -37,6 +43,8 @@
  *   <li>{@link people.impl.PersonImpl#getParents <em>Parents</em>}</li>
  *   <li>{@link people.impl.PersonImpl#getGender <em>Gender</em>}</li>
  *   <li>{@link people.impl.PersonImpl#getName <em>Name</em>}</li>
+ *   <li>{@link people.impl.PersonImpl#getFather <em>Father</em>}</li>
+ *   <li>{@link people.impl.PersonImpl#getMother <em>Mother</em>}</li>
  * </ul>
  * </p>
  *
@@ -104,6 +112,26 @@
 	protected String name = NAME_EDEFAULT;
 
 	/**
+	 * The cached setting delegate for the '{@link #getFather() <em>Father</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getFather()
+	 * @generated
+	 * @ordered
+	 */
+	protected EStructuralFeature.Internal.SettingDelegate FATHER__ESETTING_DELEGATE = ((EStructuralFeature.Internal)PeoplePackage.Literals.PERSON__FATHER).getSettingDelegate();
+
+	/**
+	 * The cached setting delegate for the '{@link #getMother() <em>Mother</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getMother()
+	 * @generated
+	 * @ordered
+	 */
+	protected EStructuralFeature.Internal.SettingDelegate MOTHER__ESETTING_DELEGATE = ((EStructuralFeature.Internal)PeoplePackage.Literals.PERSON__MOTHER).getSettingDelegate();
+
+	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
@@ -129,7 +157,7 @@
 	 */
 	public EList<Person> getChildren() {
 		if (children == null) {
-			children = new EObjectWithInverseResolvingEList.ManyInverse<Person>(Person.class, this, PeoplePackage.PERSON__CHILDREN, PeoplePackage.PERSON__PARENTS);
+			children = new EObjectResolvingEList<Person>(Person.class, this, PeoplePackage.PERSON__CHILDREN);
 		}
 		return children;
 	}
@@ -141,7 +169,7 @@
 	 */
 	public EList<Person> getParents() {
 		if (parents == null) {
-			parents = new EObjectWithInverseResolvingEList.ManyInverse<Person>(Person.class, this, PeoplePackage.PERSON__PARENTS, PeoplePackage.PERSON__CHILDREN);
+			parents = new EObjectResolvingEList<Person>(Person.class, this, PeoplePackage.PERSON__PARENTS);
 		}
 		return parents;
 	}
@@ -193,16 +221,8 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@SuppressWarnings("unchecked")
-	@Override
-	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
-		switch (featureID) {
-			case PeoplePackage.PERSON__CHILDREN:
-				return ((InternalEList<InternalEObject>)(InternalEList<?>)getChildren()).basicAdd(otherEnd, msgs);
-			case PeoplePackage.PERSON__PARENTS:
-				return ((InternalEList<InternalEObject>)(InternalEList<?>)getParents()).basicAdd(otherEnd, msgs);
-		}
-		return super.eInverseAdd(otherEnd, featureID, msgs);
+	public Person getFather() {
+		return (Person)FATHER__ESETTING_DELEGATE.dynamicGet(this, null, 0, true, false);
 	}
 
 	/**
@@ -210,15 +230,68 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
-	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
-		switch (featureID) {
-			case PeoplePackage.PERSON__CHILDREN:
-				return ((InternalEList<?>)getChildren()).basicRemove(otherEnd, msgs);
-			case PeoplePackage.PERSON__PARENTS:
-				return ((InternalEList<?>)getParents()).basicRemove(otherEnd, msgs);
+	public Person basicGetFather() {
+		return (Person)FATHER__ESETTING_DELEGATE.dynamicGet(this, null, 0, false, false);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setFather(Person newFather) {
+		FATHER__ESETTING_DELEGATE.dynamicSet(this, null, 0, newFather);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Person getMother() {
+		return (Person)MOTHER__ESETTING_DELEGATE.dynamicGet(this, null, 0, true, false);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Person basicGetMother() {
+		return (Person)MOTHER__ESETTING_DELEGATE.dynamicGet(this, null, 0, false, false);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setMother(Person newMother) {
+		MOTHER__ESETTING_DELEGATE.dynamicSet(this, null, 0, newMother);
+	}
+
+	/**
+	 * The cached invocation delegate for the '{@link #child(java.lang.String) <em>Child</em>}' operation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #child(java.lang.String)
+	 * @generated
+	 * @ordered
+	 */
+	protected static final EOperation.Internal.InvocationDelegate CHILD_STRING__EINVOCATION_DELEGATE = ((EOperation.Internal)PeoplePackage.Literals.PERSON___CHILD__STRING).getInvocationDelegate();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Person child(String childName) {
+		try {
+			return (Person)CHILD_STRING__EINVOCATION_DELEGATE.dynamicInvoke(this, new BasicEList.UnmodifiableEList<Object>(1, new Object[]{childName}));
 		}
-		return super.eInverseRemove(otherEnd, featureID, msgs);
+		catch (InvocationTargetException ite) {
+			throw new WrappedException(ite);
+		}
 	}
 
 	/**
@@ -237,6 +310,12 @@
 				return getGender();
 			case PeoplePackage.PERSON__NAME:
 				return getName();
+			case PeoplePackage.PERSON__FATHER:
+				if (resolve) return getFather();
+				return basicGetFather();
+			case PeoplePackage.PERSON__MOTHER:
+				if (resolve) return getMother();
+				return basicGetMother();
 		}
 		return super.eGet(featureID, resolve, coreType);
 	}
@@ -264,6 +343,12 @@
 			case PeoplePackage.PERSON__NAME:
 				setName((String)newValue);
 				return;
+			case PeoplePackage.PERSON__FATHER:
+				setFather((Person)newValue);
+				return;
+			case PeoplePackage.PERSON__MOTHER:
+				setMother((Person)newValue);
+				return;
 		}
 		super.eSet(featureID, newValue);
 	}
@@ -288,6 +373,12 @@
 			case PeoplePackage.PERSON__NAME:
 				setName(NAME_EDEFAULT);
 				return;
+			case PeoplePackage.PERSON__FATHER:
+				setFather((Person)null);
+				return;
+			case PeoplePackage.PERSON__MOTHER:
+				setMother((Person)null);
+				return;
 		}
 		super.eUnset(featureID);
 	}
@@ -308,6 +399,10 @@
 				return gender != GENDER_EDEFAULT;
 			case PeoplePackage.PERSON__NAME:
 				return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
+			case PeoplePackage.PERSON__FATHER:
+				return FATHER__ESETTING_DELEGATE.dynamicIsSet(this, null, 0);
+			case PeoplePackage.PERSON__MOTHER:
+				return MOTHER__ESETTING_DELEGATE.dynamicIsSet(this, null, 0);
 		}
 		return super.eIsSet(featureID);
 	}
@@ -318,6 +413,20 @@
 	 * @generated
 	 */
 	@Override
+	public Object eInvoke(int operationID, EList<?> arguments) throws InvocationTargetException {
+		switch (operationID) {
+			case PeoplePackage.PERSON___CHILD__STRING:
+				return child((String)arguments.get(0));
+		}
+		return super.eInvoke(operationID, arguments);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
 	public String toString() {
 		if (eIsProxy()) return super.toString();
 
diff --git a/docs/publications/ESE2010LongTalk/ESEExampleTree/src/people/util/PeopleValidator.java b/docs/publications/ESE2010LongTalk/ESEExampleTree/src/people/util/PeopleValidator.java
new file mode 100644
index 0000000..b8087af
--- /dev/null
+++ b/docs/publications/ESE2010LongTalk/ESEExampleTree/src/people/util/PeopleValidator.java
@@ -0,0 +1,213 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: PeopleValidator.java,v 1.1 2010/10/29 11:58:02 ewillink Exp $
+ */
+package people.util;
+
+import java.util.Map;
+
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.common.util.DiagnosticChain;
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.util.EObjectValidator;
+
+import people.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Validator</b> for the model.
+ * <!-- end-user-doc -->
+ * @see people.PeoplePackage
+ * @generated
+ */
+public class PeopleValidator extends EObjectValidator {
+	/**
+	 * The cached model package
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final PeopleValidator INSTANCE = new PeopleValidator();
+
+	/**
+	 * A constant for the {@link org.eclipse.emf.common.util.Diagnostic#getSource() source} of diagnostic {@link org.eclipse.emf.common.util.Diagnostic#getCode() codes} from this package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.emf.common.util.Diagnostic#getSource()
+	 * @see org.eclipse.emf.common.util.Diagnostic#getCode()
+	 * @generated
+	 */
+	public static final String DIAGNOSTIC_SOURCE = "people";
+
+	/**
+	 * A constant with a fixed name that can be used as the base value for additional hand written constants.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static final int GENERATED_DIAGNOSTIC_CODE_COUNT = 0;
+
+	/**
+	 * A constant with a fixed name that can be used as the base value for additional hand written constants in a derived class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static final int DIAGNOSTIC_CODE_COUNT = GENERATED_DIAGNOSTIC_CODE_COUNT;
+
+	/**
+	 * Creates an instance of the switch.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PeopleValidator() {
+		super();
+	}
+
+	/**
+	 * Returns the package of this validator switch.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EPackage getEPackage() {
+	  return PeoplePackage.eINSTANCE;
+	}
+
+	/**
+	 * Calls <code>validateXXX</code> for the corresponding classifier of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean validate(int classifierID, Object value, DiagnosticChain diagnostics, Map<Object, Object> context) {
+		switch (classifierID) {
+			case PeoplePackage.PERSON:
+				return validatePerson((Person)value, diagnostics, context);
+			case PeoplePackage.UNIVERSE:
+				return validateUniverse((Universe)value, diagnostics, context);
+			case PeoplePackage.GENDER:
+				return validateGender((Gender)value, diagnostics, context);
+			default:
+				return true;
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validatePerson(Person person, DiagnosticChain diagnostics, Map<Object, Object> context) {
+		if (!validate_NoCircularContainment(person, diagnostics, context)) return false;
+		boolean result = validate_EveryMultiplicityConforms(person, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryDataValueConforms(person, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryReferenceIsContained(person, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryBidirectionalReferenceIsPaired(person, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryProxyResolves(person, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_UniqueID(person, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryKeyUnique(person, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryMapEntryUnique(person, diagnostics, context);
+		if (result || diagnostics != null) result &= validatePerson_null(person, diagnostics, context);
+		if (result || diagnostics != null) result &= validatePerson_MixedGenderParents(person, diagnostics, context);
+		return result;
+	}
+
+	/**
+	 * Validates the null constraint of '<em>Person</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validatePerson_null(Person person, DiagnosticChain diagnostics, Map<Object, Object> context) {
+		// TODO implement the constraint
+		// -> specify the condition that violates the constraint
+		// -> verify the diagnostic details, including severity, code, and message
+		// Ensure that you remove @generated or mark it @generated NOT
+		if (false) {
+			if (diagnostics != null) {
+				diagnostics.add
+					(createDiagnostic
+						(Diagnostic.ERROR,
+						 DIAGNOSTIC_SOURCE,
+						 0,
+						 "_UI_GenericConstraint_diagnostic",
+						 new Object[] { "null", getObjectLabel(person, context) },
+						 new Object[] { person },
+						 context));
+			}
+			return false;
+		}
+		return true;
+	}
+
+	/**
+	 * The cached validation expression for the MixedGenderParents constraint of '<em>Person</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static final String PERSON__MIXED_GENDER_PARENTS__EEXPRESSION = "father.gender <> mother.gender";
+
+	/**
+	 * Validates the MixedGenderParents constraint of '<em>Person</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validatePerson_MixedGenderParents(Person person, DiagnosticChain diagnostics, Map<Object, Object> context) {
+		return
+			validate
+				(PeoplePackage.Literals.PERSON,
+				 person,
+				 diagnostics,
+				 context,
+				 "http://www.eclipse.org/emf/2002/Ecore/OCL",
+				 "MixedGenderParents",
+				 PERSON__MIXED_GENDER_PARENTS__EEXPRESSION,
+				 Diagnostic.ERROR,
+				 DIAGNOSTIC_SOURCE,
+				 0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validateUniverse(Universe universe, DiagnosticChain diagnostics, Map<Object, Object> context) {
+		return validate_EveryDefaultConstraint(universe, diagnostics, context);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validateGender(Gender gender, DiagnosticChain diagnostics, Map<Object, Object> context) {
+		return true;
+	}
+
+	/**
+	 * Returns the resource locator that will be used to fetch messages for this validator's diagnostics.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		// TODO
+		// Specialize this to return a resource locator for messages specific to this validator.
+		// Ensure that you remove @generated or mark it @generated NOT
+		return super.getResourceLocator();
+	}
+
+} //PeopleValidator