not included in spd.
3714
def get_ptrm_dec_and_inc(self):
        """"""
        PTRMS = self.PTRMS[1:]
        CART_pTRMS_orig = numpy.array([lib_direct.dir2cart(row[1:4]) for row in PTRMS])
        #B_lab_dir = [self.B_lab_dir[0], self.B_lab_dir[1], 1.] # dir
        tmin, tmax = self.t_Arai[0], self.t_Arai[-1]
        ptrms_dec_Free, ptrms_inc_Free, ptrm_best_fit_vector_Free, ptrm_tau_Free, ptrm_v_Free, ptrm_mass_center_Free, ptrm_PCA_sigma_Free = lib_direct.get_dec_and_inc(CART_pTRMS_orig, self.t_Arai, tmin, tmax, anchored=False)
        ptrms_angle = lib_direct.get_ptrms_angle(ptrm_best_fit_vector_Free, self.B_lab_cart)
        self.pars['ptrms_dec_Free'], self.pars['ptrms_inc_Free'] = ptrms_dec_Free, ptrms_inc_Free
        self.pars['ptrms_tau_Free'] = ptrm_tau_Free
        self.pars['ptrms_angle_Free'] = ptrms_angle
94491
@Override
	public int getPropagationConditions(int vIdx) {
		if (vIdx == 1) {
			return GraphEventType.ADD_ARC.getMask() + GraphEventType.REMOVE_ARC.getMask();
		} else {
			return IntEventType.all();
		}
	}
875378
@Override
	public List<CommerceWishListItem> findByCProductId(long CProductId) {
		return findByCProductId(CProductId, QueryUtil.ALL_POS,
			QueryUtil.ALL_POS, null);
	}
504839
public boolean remove(SpdData data) {
        if (data == null)
            return false;
        if (data instanceof SpdStat) {
            return super.remove(data);
        } else {
            return false;
        }
    }
1335704
@Override
	public int eBaseStructuralFeatureID(int derivedFeatureID, Class<?> baseClass)
	{
		if (baseClass == JvmType.class)
		{
			switch (derivedFeatureID)
			{
				default: return -1;
			}
		}
		if (baseClass == JvmComponentType.class)
		{
			switch (derivedFeatureID)
			{
				case TypesPackage.JVM_DECLARED_TYPE__ARRAY_TYPE: return TypesPackage.JVM_COMPONENT_TYPE__ARRAY_TYPE;
				default: return -1;
			}
		}
		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
	}
523681
public void combine(SpdStat other) {
        if (other == null)
            return;
        if (stat.isEnabled() && other.isEnabled())
            //stat.combine((TimeStatisticImpl)other.getStatistic());
            stat.combine(other.getStatistic());
    }
279816
public function isExcluded()
    {
        $excluded = false;

        if ($this->isNonHumanBot()) {
            Common::printDebug('Search bot detected, visit excluded');
            $excluded = true;
        }

        /*
         * Requests built with piwik.js will contain a rec=1 parameter. This is used as
         * an indication that the request is made by a JS enabled device. By default, Piwik
         * doesn't track non-JS visitors.
         */
        if (!$excluded) {
            $toRecord = $this->request->getParam($parameterForceRecord = 'rec');
            if (!$toRecord) {
                Common::printDebug(@$_SERVER['REQUEST_METHOD'] . ' parameter ' . $parameterForceRecord . ' not found in URL, request excluded');
                $excluded = true;
                Common::printDebug("'$parameterForceRecord' parameter not found.");
            }
        }

        /**
         * Triggered on every tracking request.
         *
         * This event can be used to tell the Tracker not to record this particular action or visit.
         *
         * @param bool &$excluded Whether the request should be excluded or not. Initialized
         *                        to `false`. Event subscribers should set it to `true` in
         *                        order to exclude the request.
         * @param Request $request The request object which contains all of the request's information
         *
         */
        Piwik::postEvent('Tracker.isExcludedVisit', array(&$excluded, $this->request));

        /*
         * Following exclude operations happen after the hook.
         * These are of higher priority and should not be overwritten by plugins.
         */

        // Checking if the Piwik ignore cookie is set
        if (!$excluded) {
            $excluded = $this->isIgnoreCookieFound();
            if ($excluded) {
                Common::printDebug("Ignore cookie found.");
            }
        }

        // Checking for excluded IPs
        if (!$excluded) {
            $excluded = $this->isVisitorIpExcluded();
            if ($excluded) {
                Common::printDebug("IP excluded.");
            }
        }

        // Check if user agent should be excluded
        if (!$excluded) {
            $excluded = $this->isUserAgentExcluded();
            if ($excluded) {
                Common::printDebug("User agent excluded.");
            }
        }

        // Check if Referrer URL is a known spam
        if (!$excluded) {
            $excluded = $this->isReferrerSpamExcluded();
            if ($excluded) {
                Common::printDebug("Referrer URL is blacklisted as spam.");
            }
        }

        // Check if request URL is excluded
        if (!$excluded) {
            $excluded = $this->isUrlExcluded();
            if ($excluded) {
                Common::printDebug("Unknown URL is not allowed to track.");
            }
        }

        if (!$excluded) {
            if ($this->isPrefetchDetected()) {
                $excluded = true;
                Common::printDebug("Prefetch request detected, not a real visit so we Ignore this visit/pageview");
            }
        }

        if ($excluded) {
            Common::printDebug("Visitor excluded.");
            return true;
        }

        return false;
    }
1071749
private boolean isRawType(JvmTypeParameter current, RecursionGuard<JvmTypeParameter> guard) {
		if (guard.tryNext(current)) {
			List<JvmTypeConstraint> constraints = current.getConstraints();
			for(int i = 0, size = constraints.size(); i < size; i++) {
				JvmTypeConstraint constraint = constraints.get(i);
				if (constraint.eClass() == TypesPackage.Literals.JVM_UPPER_BOUND && constraint.getTypeReference() != null) {
					JvmTypeReference superType = constraint.getTypeReference();
					JvmType rawSuperType = superType.getType();
					if (rawSuperType != null) {
						if (rawSuperType.eClass() == TypesPackage.Literals.JVM_TYPE_PARAMETER) {
							if (isRawType((JvmTypeParameter) rawSuperType, guard)) {
								return true;
							}
						}
						if (rawSuperType.eClass() == TypesPackage.Literals.JVM_GENERIC_TYPE) {
							if (!((JvmGenericType) rawSuperType).getTypeParameters().isEmpty()) {
								if (superType.eClass() == TypesPackage.Literals.JVM_PARAMETERIZED_TYPE_REFERENCE) {
									JvmParameterizedTypeReference casted = (JvmParameterizedTypeReference) superType;
									if (casted.getArguments().isEmpty()) {
										return true;
									}
								}
							}
						}
					}
				}
			}
		}
		return false;
	}
1318305
public static function include_mousewheel()
    {
        if (self::$disabled || in_array('mousewheel', self::$included)) {
            return;
        }
        if (Director::isDev()) {
            Requirements::block(FORM_EXTRAS_PATH . '/javascript/jquery-mousewheel/jquery.mousewheel.min.js');
            Requirements::javascript(FORM_EXTRAS_PATH . '/javascript/jquery-mousewheel/jquery.mousewheel.js');
        } else {
            Requirements::block(FORM_EXTRAS_PATH . '/javascript/jquery-mousewheel/jquery.mousewheel.js');
            Requirements::javascript(FORM_EXTRAS_PATH . '/javascript/jquery-mousewheel/jquery.mousewheel.min.js');
        }
        self::$included[] = 'mousewheel';
    }
1332135
public void unsetStandardDeviation() {
		double oldStandardDeviation = standardDeviation;
		boolean oldStandardDeviationESet = standardDeviationESet;
		standardDeviation = STANDARD_DEVIATION_EDEFAULT;
		standardDeviationESet = false;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.UNSET, BpsimPackage.LOG_NORMAL_DISTRIBUTION_TYPE__STANDARD_DEVIATION, oldStandardDeviation, STANDARD_DEVIATION_EDEFAULT, oldStandardDeviationESet));
	}
377096
public synchronized boolean remove(SpdData data) {
        if (data == null)
            return false;

        SpdGroup aggregateData = (SpdGroup) dataTable.get(new Integer(data.getId()));
        if (aggregateData == null)
            return false;
        return aggregateData.remove(data);
    }
67471
@Override
	protected T doSwitch(int classifierID, EObject theEObject)
	{
		switch (classifierID)
		{
			case XtypePackage.XFUNCTION_TYPE_REF:
			{
				XFunctionTypeRef xFunctionTypeRef = (XFunctionTypeRef)theEObject;
				T result = caseXFunctionTypeRef(xFunctionTypeRef);
				if (result == null) result = caseJvmSpecializedTypeReference(xFunctionTypeRef);
				if (result == null) result = caseJvmTypeReference(xFunctionTypeRef);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case XtypePackage.XCOMPUTED_TYPE_REFERENCE:
			{
				XComputedTypeReference xComputedTypeReference = (XComputedTypeReference)theEObject;
				T result = caseXComputedTypeReference(xComputedTypeReference);
				if (result == null) result = caseJvmSpecializedTypeReference(xComputedTypeReference);
				if (result == null) result = caseJvmTypeReference(xComputedTypeReference);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case XtypePackage.XIMPORT_SECTION:
			{
				XImportSection xImportSection = (XImportSection)theEObject;
				T result = caseXImportSection(xImportSection);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case XtypePackage.XIMPORT_DECLARATION:
			{
				XImportDeclaration xImportDeclaration = (XImportDeclaration)theEObject;
				T result = caseXImportDeclaration(xImportDeclaration);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			default: return defaultCase(theEObject);
		}
	}
237177
@Override
	protected T doSwitch(int classifierID, EObject theEObject) {
		T t = doSwitch2(classifierID, theEObject);
		if (t != null) {
			return t;
		}
		switch (classifierID) {

		case Ifc4Package.IFC_LAG_TIME: {
			IfcLagTime ifcLagTime = (IfcLagTime) theEObject;
			T result = caseIfcLagTime(ifcLagTime);
			if (result == null)
				result = caseIfcSchedulingTime(ifcLagTime);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_LAMP: {
			IfcLamp ifcLamp = (IfcLamp) theEObject;
			T result = caseIfcLamp(ifcLamp);
			if (result == null)
				result = caseIfcFlowTerminal(ifcLamp);
			if (result == null)
				result = caseIfcDistributionFlowElement(ifcLamp);
			if (result == null)
				result = caseIfcDistributionElement(ifcLamp);
			if (result == null)
				result = caseIfcElement(ifcLamp);
			if (result == null)
				result = caseIfcProduct(ifcLamp);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcLamp);
			if (result == null)
				result = caseIfcObject(ifcLamp);
			if (result == null)
				result = caseIfcProductSelect(ifcLamp);
			if (result == null)
				result = caseIfcObjectDefinition(ifcLamp);
			if (result == null)
				result = caseIfcRoot(ifcLamp);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcLamp);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_LAMP_TYPE: {
			IfcLampType ifcLampType = (IfcLampType) theEObject;
			T result = caseIfcLampType(ifcLampType);
			if (result == null)
				result = caseIfcFlowTerminalType(ifcLampType);
			if (result == null)
				result = caseIfcDistributionFlowElementType(ifcLampType);
			if (result == null)
				result = caseIfcDistributionElementType(ifcLampType);
			if (result == null)
				result = caseIfcElementType(ifcLampType);
			if (result == null)
				result = caseIfcTypeProduct(ifcLampType);
			if (result == null)
				result = caseIfcTypeObject(ifcLampType);
			if (result == null)
				result = caseIfcProductSelect(ifcLampType);
			if (result == null)
				result = caseIfcObjectDefinition(ifcLampType);
			if (result == null)
				result = caseIfcRoot(ifcLampType);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcLampType);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_LIBRARY_INFORMATION: {
			IfcLibraryInformation ifcLibraryInformation = (IfcLibraryInformation) theEObject;
			T result = caseIfcLibraryInformation(ifcLibraryInformation);
			if (result == null)
				result = caseIfcExternalInformation(ifcLibraryInformation);
			if (result == null)
				result = caseIfcLibrarySelect(ifcLibraryInformation);
			if (result == null)
				result = caseIfcResourceObjectSelect(ifcLibraryInformation);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_LIBRARY_REFERENCE: {
			IfcLibraryReference ifcLibraryReference = (IfcLibraryReference) theEObject;
			T result = caseIfcLibraryReference(ifcLibraryReference);
			if (result == null)
				result = caseIfcExternalReference(ifcLibraryReference);
			if (result == null)
				result = caseIfcLibrarySelect(ifcLibraryReference);
			if (result == null)
				result = caseIfcLightDistributionDataSourceSelect(ifcLibraryReference);
			if (result == null)
				result = caseIfcObjectReferenceSelect(ifcLibraryReference);
			if (result == null)
				result = caseIfcResourceObjectSelect(ifcLibraryReference);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_LIGHT_DISTRIBUTION_DATA: {
			IfcLightDistributionData ifcLightDistributionData = (IfcLightDistributionData) theEObject;
			T result = caseIfcLightDistributionData(ifcLightDistributionData);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_LIGHT_FIXTURE: {
			IfcLightFixture ifcLightFixture = (IfcLightFixture) theEObject;
			T result = caseIfcLightFixture(ifcLightFixture);
			if (result == null)
				result = caseIfcFlowTerminal(ifcLightFixture);
			if (result == null)
				result = caseIfcDistributionFlowElement(ifcLightFixture);
			if (result == null)
				result = caseIfcDistributionElement(ifcLightFixture);
			if (result == null)
				result = caseIfcElement(ifcLightFixture);
			if (result == null)
				result = caseIfcProduct(ifcLightFixture);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcLightFixture);
			if (result == null)
				result = caseIfcObject(ifcLightFixture);
			if (result == null)
				result = caseIfcProductSelect(ifcLightFixture);
			if (result == null)
				result = caseIfcObjectDefinition(ifcLightFixture);
			if (result == null)
				result = caseIfcRoot(ifcLightFixture);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcLightFixture);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_LIGHT_FIXTURE_TYPE: {
			IfcLightFixtureType ifcLightFixtureType = (IfcLightFixtureType) theEObject;
			T result = caseIfcLightFixtureType(ifcLightFixtureType);
			if (result == null)
				result = caseIfcFlowTerminalType(ifcLightFixtureType);
			if (result == null)
				result = caseIfcDistributionFlowElementType(ifcLightFixtureType);
			if (result == null)
				result = caseIfcDistributionElementType(ifcLightFixtureType);
			if (result == null)
				result = caseIfcElementType(ifcLightFixtureType);
			if (result == null)
				result = caseIfcTypeProduct(ifcLightFixtureType);
			if (result == null)
				result = caseIfcTypeObject(ifcLightFixtureType);
			if (result == null)
				result = caseIfcProductSelect(ifcLightFixtureType);
			if (result == null)
				result = caseIfcObjectDefinition(ifcLightFixtureType);
			if (result == null)
				result = caseIfcRoot(ifcLightFixtureType);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcLightFixtureType);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_LIGHT_INTENSITY_DISTRIBUTION: {
			IfcLightIntensityDistribution ifcLightIntensityDistribution = (IfcLightIntensityDistribution) theEObject;
			T result = caseIfcLightIntensityDistribution(ifcLightIntensityDistribution);
			if (result == null)
				result = caseIfcLightDistributionDataSourceSelect(ifcLightIntensityDistribution);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_LIGHT_SOURCE: {
			IfcLightSource ifcLightSource = (IfcLightSource) theEObject;
			T result = caseIfcLightSource(ifcLightSource);
			if (result == null)
				result = caseIfcGeometricRepresentationItem(ifcLightSource);
			if (result == null)
				result = caseIfcRepresentationItem(ifcLightSource);
			if (result == null)
				result = caseIfcLayeredItem(ifcLightSource);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_LIGHT_SOURCE_AMBIENT: {
			IfcLightSourceAmbient ifcLightSourceAmbient = (IfcLightSourceAmbient) theEObject;
			T result = caseIfcLightSourceAmbient(ifcLightSourceAmbient);
			if (result == null)
				result = caseIfcLightSource(ifcLightSourceAmbient);
			if (result == null)
				result = caseIfcGeometricRepresentationItem(ifcLightSourceAmbient);
			if (result == null)
				result = caseIfcRepresentationItem(ifcLightSourceAmbient);
			if (result == null)
				result = caseIfcLayeredItem(ifcLightSourceAmbient);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_LIGHT_SOURCE_DIRECTIONAL: {
			IfcLightSourceDirectional ifcLightSourceDirectional = (IfcLightSourceDirectional) theEObject;
			T result = caseIfcLightSourceDirectional(ifcLightSourceDirectional);
			if (result == null)
				result = caseIfcLightSource(ifcLightSourceDirectional);
			if (result == null)
				result = caseIfcGeometricRepresentationItem(ifcLightSourceDirectional);
			if (result == null)
				result = caseIfcRepresentationItem(ifcLightSourceDirectional);
			if (result == null)
				result = caseIfcLayeredItem(ifcLightSourceDirectional);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_LIGHT_SOURCE_GONIOMETRIC: {
			IfcLightSourceGoniometric ifcLightSourceGoniometric = (IfcLightSourceGoniometric) theEObject;
			T result = caseIfcLightSourceGoniometric(ifcLightSourceGoniometric);
			if (result == null)
				result = caseIfcLightSource(ifcLightSourceGoniometric);
			if (result == null)
				result = caseIfcGeometricRepresentationItem(ifcLightSourceGoniometric);
			if (result == null)
				result = caseIfcRepresentationItem(ifcLightSourceGoniometric);
			if (result == null)
				result = caseIfcLayeredItem(ifcLightSourceGoniometric);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_LIGHT_SOURCE_POSITIONAL: {
			IfcLightSourcePositional ifcLightSourcePositional = (IfcLightSourcePositional) theEObject;
			T result = caseIfcLightSourcePositional(ifcLightSourcePositional);
			if (result == null)
				result = caseIfcLightSource(ifcLightSourcePositional);
			if (result == null)
				result = caseIfcGeometricRepresentationItem(ifcLightSourcePositional);
			if (result == null)
				result = caseIfcRepresentationItem(ifcLightSourcePositional);
			if (result == null)
				result = caseIfcLayeredItem(ifcLightSourcePositional);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_LIGHT_SOURCE_SPOT: {
			IfcLightSourceSpot ifcLightSourceSpot = (IfcLightSourceSpot) theEObject;
			T result = caseIfcLightSourceSpot(ifcLightSourceSpot);
			if (result == null)
				result = caseIfcLightSourcePositional(ifcLightSourceSpot);
			if (result == null)
				result = caseIfcLightSource(ifcLightSourceSpot);
			if (result == null)
				result = caseIfcGeometricRepresentationItem(ifcLightSourceSpot);
			if (result == null)
				result = caseIfcRepresentationItem(ifcLightSourceSpot);
			if (result == null)
				result = caseIfcLayeredItem(ifcLightSourceSpot);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_LINE: {
			IfcLine ifcLine = (IfcLine) theEObject;
			T result = caseIfcLine(ifcLine);
			if (result == null)
				result = caseIfcCurve(ifcLine);
			if (result == null)
				result = caseIfcGeometricRepresentationItem(ifcLine);
			if (result == null)
				result = caseIfcGeometricSetSelect(ifcLine);
			if (result == null)
				result = caseIfcRepresentationItem(ifcLine);
			if (result == null)
				result = caseIfcLayeredItem(ifcLine);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_LOCAL_PLACEMENT: {
			IfcLocalPlacement ifcLocalPlacement = (IfcLocalPlacement) theEObject;
			T result = caseIfcLocalPlacement(ifcLocalPlacement);
			if (result == null)
				result = caseIfcObjectPlacement(ifcLocalPlacement);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_LOOP: {
			IfcLoop ifcLoop = (IfcLoop) theEObject;
			T result = caseIfcLoop(ifcLoop);
			if (result == null)
				result = caseIfcTopologicalRepresentationItem(ifcLoop);
			if (result == null)
				result = caseIfcRepresentationItem(ifcLoop);
			if (result == null)
				result = caseIfcLayeredItem(ifcLoop);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_MANIFOLD_SOLID_BREP: {
			IfcManifoldSolidBrep ifcManifoldSolidBrep = (IfcManifoldSolidBrep) theEObject;
			T result = caseIfcManifoldSolidBrep(ifcManifoldSolidBrep);
			if (result == null)
				result = caseIfcSolidModel(ifcManifoldSolidBrep);
			if (result == null)
				result = caseIfcGeometricRepresentationItem(ifcManifoldSolidBrep);
			if (result == null)
				result = caseIfcBooleanOperand(ifcManifoldSolidBrep);
			if (result == null)
				result = caseIfcSolidOrShell(ifcManifoldSolidBrep);
			if (result == null)
				result = caseIfcRepresentationItem(ifcManifoldSolidBrep);
			if (result == null)
				result = caseIfcLayeredItem(ifcManifoldSolidBrep);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_MAP_CONVERSION: {
			IfcMapConversion ifcMapConversion = (IfcMapConversion) theEObject;
			T result = caseIfcMapConversion(ifcMapConversion);
			if (result == null)
				result = caseIfcCoordinateOperation(ifcMapConversion);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_MAPPED_ITEM: {
			IfcMappedItem ifcMappedItem = (IfcMappedItem) theEObject;
			T result = caseIfcMappedItem(ifcMappedItem);
			if (result == null)
				result = caseIfcRepresentationItem(ifcMappedItem);
			if (result == null)
				result = caseIfcLayeredItem(ifcMappedItem);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_MATERIAL: {
			IfcMaterial ifcMaterial = (IfcMaterial) theEObject;
			T result = caseIfcMaterial(ifcMaterial);
			if (result == null)
				result = caseIfcMaterialDefinition(ifcMaterial);
			if (result == null)
				result = caseIfcMaterialSelect(ifcMaterial);
			if (result == null)
				result = caseIfcObjectReferenceSelect(ifcMaterial);
			if (result == null)
				result = caseIfcResourceObjectSelect(ifcMaterial);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_MATERIAL_CLASSIFICATION_RELATIONSHIP: {
			IfcMaterialClassificationRelationship ifcMaterialClassificationRelationship = (IfcMaterialClassificationRelationship) theEObject;
			T result = caseIfcMaterialClassificationRelationship(ifcMaterialClassificationRelationship);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_MATERIAL_CONSTITUENT: {
			IfcMaterialConstituent ifcMaterialConstituent = (IfcMaterialConstituent) theEObject;
			T result = caseIfcMaterialConstituent(ifcMaterialConstituent);
			if (result == null)
				result = caseIfcMaterialDefinition(ifcMaterialConstituent);
			if (result == null)
				result = caseIfcMaterialSelect(ifcMaterialConstituent);
			if (result == null)
				result = caseIfcObjectReferenceSelect(ifcMaterialConstituent);
			if (result == null)
				result = caseIfcResourceObjectSelect(ifcMaterialConstituent);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_MATERIAL_CONSTITUENT_SET: {
			IfcMaterialConstituentSet ifcMaterialConstituentSet = (IfcMaterialConstituentSet) theEObject;
			T result = caseIfcMaterialConstituentSet(ifcMaterialConstituentSet);
			if (result == null)
				result = caseIfcMaterialDefinition(ifcMaterialConstituentSet);
			if (result == null)
				result = caseIfcMaterialSelect(ifcMaterialConstituentSet);
			if (result == null)
				result = caseIfcObjectReferenceSelect(ifcMaterialConstituentSet);
			if (result == null)
				result = caseIfcResourceObjectSelect(ifcMaterialConstituentSet);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_MATERIAL_DEFINITION: {
			IfcMaterialDefinition ifcMaterialDefinition = (IfcMaterialDefinition) theEObject;
			T result = caseIfcMaterialDefinition(ifcMaterialDefinition);
			if (result == null)
				result = caseIfcMaterialSelect(ifcMaterialDefinition);
			if (result == null)
				result = caseIfcObjectReferenceSelect(ifcMaterialDefinition);
			if (result == null)
				result = caseIfcResourceObjectSelect(ifcMaterialDefinition);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_MATERIAL_DEFINITION_REPRESENTATION: {
			IfcMaterialDefinitionRepresentation ifcMaterialDefinitionRepresentation = (IfcMaterialDefinitionRepresentation) theEObject;
			T result = caseIfcMaterialDefinitionRepresentation(ifcMaterialDefinitionRepresentation);
			if (result == null)
				result = caseIfcProductRepresentation(ifcMaterialDefinitionRepresentation);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_MATERIAL_LAYER: {
			IfcMaterialLayer ifcMaterialLayer = (IfcMaterialLayer) theEObject;
			T result = caseIfcMaterialLayer(ifcMaterialLayer);
			if (result == null)
				result = caseIfcMaterialDefinition(ifcMaterialLayer);
			if (result == null)
				result = caseIfcMaterialSelect(ifcMaterialLayer);
			if (result == null)
				result = caseIfcObjectReferenceSelect(ifcMaterialLayer);
			if (result == null)
				result = caseIfcResourceObjectSelect(ifcMaterialLayer);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_MATERIAL_LAYER_SET: {
			IfcMaterialLayerSet ifcMaterialLayerSet = (IfcMaterialLayerSet) theEObject;
			T result = caseIfcMaterialLayerSet(ifcMaterialLayerSet);
			if (result == null)
				result = caseIfcMaterialDefinition(ifcMaterialLayerSet);
			if (result == null)
				result = caseIfcMaterialSelect(ifcMaterialLayerSet);
			if (result == null)
				result = caseIfcObjectReferenceSelect(ifcMaterialLayerSet);
			if (result == null)
				result = caseIfcResourceObjectSelect(ifcMaterialLayerSet);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_MATERIAL_LAYER_SET_USAGE: {
			IfcMaterialLayerSetUsage ifcMaterialLayerSetUsage = (IfcMaterialLayerSetUsage) theEObject;
			T result = caseIfcMaterialLayerSetUsage(ifcMaterialLayerSetUsage);
			if (result == null)
				result = caseIfcMaterialUsageDefinition(ifcMaterialLayerSetUsage);
			if (result == null)
				result = caseIfcMaterialSelect(ifcMaterialLayerSetUsage);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_MATERIAL_LAYER_WITH_OFFSETS: {
			IfcMaterialLayerWithOffsets ifcMaterialLayerWithOffsets = (IfcMaterialLayerWithOffsets) theEObject;
			T result = caseIfcMaterialLayerWithOffsets(ifcMaterialLayerWithOffsets);
			if (result == null)
				result = caseIfcMaterialLayer(ifcMaterialLayerWithOffsets);
			if (result == null)
				result = caseIfcMaterialDefinition(ifcMaterialLayerWithOffsets);
			if (result == null)
				result = caseIfcMaterialSelect(ifcMaterialLayerWithOffsets);
			if (result == null)
				result = caseIfcObjectReferenceSelect(ifcMaterialLayerWithOffsets);
			if (result == null)
				result = caseIfcResourceObjectSelect(ifcMaterialLayerWithOffsets);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_MATERIAL_LIST: {
			IfcMaterialList ifcMaterialList = (IfcMaterialList) theEObject;
			T result = caseIfcMaterialList(ifcMaterialList);
			if (result == null)
				result = caseIfcMaterialSelect(ifcMaterialList);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_MATERIAL_PROFILE: {
			IfcMaterialProfile ifcMaterialProfile = (IfcMaterialProfile) theEObject;
			T result = caseIfcMaterialProfile(ifcMaterialProfile);
			if (result == null)
				result = caseIfcMaterialDefinition(ifcMaterialProfile);
			if (result == null)
				result = caseIfcMaterialSelect(ifcMaterialProfile);
			if (result == null)
				result = caseIfcObjectReferenceSelect(ifcMaterialProfile);
			if (result == null)
				result = caseIfcResourceObjectSelect(ifcMaterialProfile);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_MATERIAL_PROFILE_SET: {
			IfcMaterialProfileSet ifcMaterialProfileSet = (IfcMaterialProfileSet) theEObject;
			T result = caseIfcMaterialProfileSet(ifcMaterialProfileSet);
			if (result == null)
				result = caseIfcMaterialDefinition(ifcMaterialProfileSet);
			if (result == null)
				result = caseIfcMaterialSelect(ifcMaterialProfileSet);
			if (result == null)
				result = caseIfcObjectReferenceSelect(ifcMaterialProfileSet);
			if (result == null)
				result = caseIfcResourceObjectSelect(ifcMaterialProfileSet);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_MATERIAL_PROFILE_SET_USAGE: {
			IfcMaterialProfileSetUsage ifcMaterialProfileSetUsage = (IfcMaterialProfileSetUsage) theEObject;
			T result = caseIfcMaterialProfileSetUsage(ifcMaterialProfileSetUsage);
			if (result == null)
				result = caseIfcMaterialUsageDefinition(ifcMaterialProfileSetUsage);
			if (result == null)
				result = caseIfcMaterialSelect(ifcMaterialProfileSetUsage);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_MATERIAL_PROFILE_SET_USAGE_TAPERING: {
			IfcMaterialProfileSetUsageTapering ifcMaterialProfileSetUsageTapering = (IfcMaterialProfileSetUsageTapering) theEObject;
			T result = caseIfcMaterialProfileSetUsageTapering(ifcMaterialProfileSetUsageTapering);
			if (result == null)
				result = caseIfcMaterialProfileSetUsage(ifcMaterialProfileSetUsageTapering);
			if (result == null)
				result = caseIfcMaterialUsageDefinition(ifcMaterialProfileSetUsageTapering);
			if (result == null)
				result = caseIfcMaterialSelect(ifcMaterialProfileSetUsageTapering);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_MATERIAL_PROFILE_WITH_OFFSETS: {
			IfcMaterialProfileWithOffsets ifcMaterialProfileWithOffsets = (IfcMaterialProfileWithOffsets) theEObject;
			T result = caseIfcMaterialProfileWithOffsets(ifcMaterialProfileWithOffsets);
			if (result == null)
				result = caseIfcMaterialProfile(ifcMaterialProfileWithOffsets);
			if (result == null)
				result = caseIfcMaterialDefinition(ifcMaterialProfileWithOffsets);
			if (result == null)
				result = caseIfcMaterialSelect(ifcMaterialProfileWithOffsets);
			if (result == null)
				result = caseIfcObjectReferenceSelect(ifcMaterialProfileWithOffsets);
			if (result == null)
				result = caseIfcResourceObjectSelect(ifcMaterialProfileWithOffsets);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_MATERIAL_PROPERTIES: {
			IfcMaterialProperties ifcMaterialProperties = (IfcMaterialProperties) theEObject;
			T result = caseIfcMaterialProperties(ifcMaterialProperties);
			if (result == null)
				result = caseIfcExtendedProperties(ifcMaterialProperties);
			if (result == null)
				result = caseIfcPropertyAbstraction(ifcMaterialProperties);
			if (result == null)
				result = caseIfcResourceObjectSelect(ifcMaterialProperties);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_MATERIAL_RELATIONSHIP: {
			IfcMaterialRelationship ifcMaterialRelationship = (IfcMaterialRelationship) theEObject;
			T result = caseIfcMaterialRelationship(ifcMaterialRelationship);
			if (result == null)
				result = caseIfcResourceLevelRelationship(ifcMaterialRelationship);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_MATERIAL_USAGE_DEFINITION: {
			IfcMaterialUsageDefinition ifcMaterialUsageDefinition = (IfcMaterialUsageDefinition) theEObject;
			T result = caseIfcMaterialUsageDefinition(ifcMaterialUsageDefinition);
			if (result == null)
				result = caseIfcMaterialSelect(ifcMaterialUsageDefinition);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_MEASURE_WITH_UNIT: {
			IfcMeasureWithUnit ifcMeasureWithUnit = (IfcMeasureWithUnit) theEObject;
			T result = caseIfcMeasureWithUnit(ifcMeasureWithUnit);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcMeasureWithUnit);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcMeasureWithUnit);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_MECHANICAL_FASTENER: {
			IfcMechanicalFastener ifcMechanicalFastener = (IfcMechanicalFastener) theEObject;
			T result = caseIfcMechanicalFastener(ifcMechanicalFastener);
			if (result == null)
				result = caseIfcElementComponent(ifcMechanicalFastener);
			if (result == null)
				result = caseIfcElement(ifcMechanicalFastener);
			if (result == null)
				result = caseIfcProduct(ifcMechanicalFastener);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcMechanicalFastener);
			if (result == null)
				result = caseIfcObject(ifcMechanicalFastener);
			if (result == null)
				result = caseIfcProductSelect(ifcMechanicalFastener);
			if (result == null)
				result = caseIfcObjectDefinition(ifcMechanicalFastener);
			if (result == null)
				result = caseIfcRoot(ifcMechanicalFastener);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcMechanicalFastener);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_MECHANICAL_FASTENER_TYPE: {
			IfcMechanicalFastenerType ifcMechanicalFastenerType = (IfcMechanicalFastenerType) theEObject;
			T result = caseIfcMechanicalFastenerType(ifcMechanicalFastenerType);
			if (result == null)
				result = caseIfcElementComponentType(ifcMechanicalFastenerType);
			if (result == null)
				result = caseIfcElementType(ifcMechanicalFastenerType);
			if (result == null)
				result = caseIfcTypeProduct(ifcMechanicalFastenerType);
			if (result == null)
				result = caseIfcTypeObject(ifcMechanicalFastenerType);
			if (result == null)
				result = caseIfcProductSelect(ifcMechanicalFastenerType);
			if (result == null)
				result = caseIfcObjectDefinition(ifcMechanicalFastenerType);
			if (result == null)
				result = caseIfcRoot(ifcMechanicalFastenerType);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcMechanicalFastenerType);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_MEDICAL_DEVICE: {
			IfcMedicalDevice ifcMedicalDevice = (IfcMedicalDevice) theEObject;
			T result = caseIfcMedicalDevice(ifcMedicalDevice);
			if (result == null)
				result = caseIfcFlowTerminal(ifcMedicalDevice);
			if (result == null)
				result = caseIfcDistributionFlowElement(ifcMedicalDevice);
			if (result == null)
				result = caseIfcDistributionElement(ifcMedicalDevice);
			if (result == null)
				result = caseIfcElement(ifcMedicalDevice);
			if (result == null)
				result = caseIfcProduct(ifcMedicalDevice);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcMedicalDevice);
			if (result == null)
				result = caseIfcObject(ifcMedicalDevice);
			if (result == null)
				result = caseIfcProductSelect(ifcMedicalDevice);
			if (result == null)
				result = caseIfcObjectDefinition(ifcMedicalDevice);
			if (result == null)
				result = caseIfcRoot(ifcMedicalDevice);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcMedicalDevice);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_MEDICAL_DEVICE_TYPE: {
			IfcMedicalDeviceType ifcMedicalDeviceType = (IfcMedicalDeviceType) theEObject;
			T result = caseIfcMedicalDeviceType(ifcMedicalDeviceType);
			if (result == null)
				result = caseIfcFlowTerminalType(ifcMedicalDeviceType);
			if (result == null)
				result = caseIfcDistributionFlowElementType(ifcMedicalDeviceType);
			if (result == null)
				result = caseIfcDistributionElementType(ifcMedicalDeviceType);
			if (result == null)
				result = caseIfcElementType(ifcMedicalDeviceType);
			if (result == null)
				result = caseIfcTypeProduct(ifcMedicalDeviceType);
			if (result == null)
				result = caseIfcTypeObject(ifcMedicalDeviceType);
			if (result == null)
				result = caseIfcProductSelect(ifcMedicalDeviceType);
			if (result == null)
				result = caseIfcObjectDefinition(ifcMedicalDeviceType);
			if (result == null)
				result = caseIfcRoot(ifcMedicalDeviceType);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcMedicalDeviceType);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_MEMBER: {
			IfcMember ifcMember = (IfcMember) theEObject;
			T result = caseIfcMember(ifcMember);
			if (result == null)
				result = caseIfcBuildingElement(ifcMember);
			if (result == null)
				result = caseIfcElement(ifcMember);
			if (result == null)
				result = caseIfcProduct(ifcMember);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcMember);
			if (result == null)
				result = caseIfcObject(ifcMember);
			if (result == null)
				result = caseIfcProductSelect(ifcMember);
			if (result == null)
				result = caseIfcObjectDefinition(ifcMember);
			if (result == null)
				result = caseIfcRoot(ifcMember);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcMember);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_MEMBER_STANDARD_CASE: {
			IfcMemberStandardCase ifcMemberStandardCase = (IfcMemberStandardCase) theEObject;
			T result = caseIfcMemberStandardCase(ifcMemberStandardCase);
			if (result == null)
				result = caseIfcMember(ifcMemberStandardCase);
			if (result == null)
				result = caseIfcBuildingElement(ifcMemberStandardCase);
			if (result == null)
				result = caseIfcElement(ifcMemberStandardCase);
			if (result == null)
				result = caseIfcProduct(ifcMemberStandardCase);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcMemberStandardCase);
			if (result == null)
				result = caseIfcObject(ifcMemberStandardCase);
			if (result == null)
				result = caseIfcProductSelect(ifcMemberStandardCase);
			if (result == null)
				result = caseIfcObjectDefinition(ifcMemberStandardCase);
			if (result == null)
				result = caseIfcRoot(ifcMemberStandardCase);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcMemberStandardCase);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_MEMBER_TYPE: {
			IfcMemberType ifcMemberType = (IfcMemberType) theEObject;
			T result = caseIfcMemberType(ifcMemberType);
			if (result == null)
				result = caseIfcBuildingElementType(ifcMemberType);
			if (result == null)
				result = caseIfcElementType(ifcMemberType);
			if (result == null)
				result = caseIfcTypeProduct(ifcMemberType);
			if (result == null)
				result = caseIfcTypeObject(ifcMemberType);
			if (result == null)
				result = caseIfcProductSelect(ifcMemberType);
			if (result == null)
				result = caseIfcObjectDefinition(ifcMemberType);
			if (result == null)
				result = caseIfcRoot(ifcMemberType);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcMemberType);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_METRIC: {
			IfcMetric ifcMetric = (IfcMetric) theEObject;
			T result = caseIfcMetric(ifcMetric);
			if (result == null)
				result = caseIfcConstraint(ifcMetric);
			if (result == null)
				result = caseIfcResourceObjectSelect(ifcMetric);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_MIRRORED_PROFILE_DEF: {
			IfcMirroredProfileDef ifcMirroredProfileDef = (IfcMirroredProfileDef) theEObject;
			T result = caseIfcMirroredProfileDef(ifcMirroredProfileDef);
			if (result == null)
				result = caseIfcDerivedProfileDef(ifcMirroredProfileDef);
			if (result == null)
				result = caseIfcProfileDef(ifcMirroredProfileDef);
			if (result == null)
				result = caseIfcResourceObjectSelect(ifcMirroredProfileDef);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_MONETARY_UNIT: {
			IfcMonetaryUnit ifcMonetaryUnit = (IfcMonetaryUnit) theEObject;
			T result = caseIfcMonetaryUnit(ifcMonetaryUnit);
			if (result == null)
				result = caseIfcUnit(ifcMonetaryUnit);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_MOTOR_CONNECTION: {
			IfcMotorConnection ifcMotorConnection = (IfcMotorConnection) theEObject;
			T result = caseIfcMotorConnection(ifcMotorConnection);
			if (result == null)
				result = caseIfcEnergyConversionDevice(ifcMotorConnection);
			if (result == null)
				result = caseIfcDistributionFlowElement(ifcMotorConnection);
			if (result == null)
				result = caseIfcDistributionElement(ifcMotorConnection);
			if (result == null)
				result = caseIfcElement(ifcMotorConnection);
			if (result == null)
				result = caseIfcProduct(ifcMotorConnection);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcMotorConnection);
			if (result == null)
				result = caseIfcObject(ifcMotorConnection);
			if (result == null)
				result = caseIfcProductSelect(ifcMotorConnection);
			if (result == null)
				result = caseIfcObjectDefinition(ifcMotorConnection);
			if (result == null)
				result = caseIfcRoot(ifcMotorConnection);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcMotorConnection);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_MOTOR_CONNECTION_TYPE: {
			IfcMotorConnectionType ifcMotorConnectionType = (IfcMotorConnectionType) theEObject;
			T result = caseIfcMotorConnectionType(ifcMotorConnectionType);
			if (result == null)
				result = caseIfcEnergyConversionDeviceType(ifcMotorConnectionType);
			if (result == null)
				result = caseIfcDistributionFlowElementType(ifcMotorConnectionType);
			if (result == null)
				result = caseIfcDistributionElementType(ifcMotorConnectionType);
			if (result == null)
				result = caseIfcElementType(ifcMotorConnectionType);
			if (result == null)
				result = caseIfcTypeProduct(ifcMotorConnectionType);
			if (result == null)
				result = caseIfcTypeObject(ifcMotorConnectionType);
			if (result == null)
				result = caseIfcProductSelect(ifcMotorConnectionType);
			if (result == null)
				result = caseIfcObjectDefinition(ifcMotorConnectionType);
			if (result == null)
				result = caseIfcRoot(ifcMotorConnectionType);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcMotorConnectionType);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_NAMED_UNIT: {
			IfcNamedUnit ifcNamedUnit = (IfcNamedUnit) theEObject;
			T result = caseIfcNamedUnit(ifcNamedUnit);
			if (result == null)
				result = caseIfcUnit(ifcNamedUnit);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_OBJECT: {
			IfcObject ifcObject = (IfcObject) theEObject;
			T result = caseIfcObject(ifcObject);
			if (result == null)
				result = caseIfcObjectDefinition(ifcObject);
			if (result == null)
				result = caseIfcRoot(ifcObject);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcObject);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_OBJECT_DEFINITION: {
			IfcObjectDefinition ifcObjectDefinition = (IfcObjectDefinition) theEObject;
			T result = caseIfcObjectDefinition(ifcObjectDefinition);
			if (result == null)
				result = caseIfcRoot(ifcObjectDefinition);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcObjectDefinition);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_OBJECT_PLACEMENT: {
			IfcObjectPlacement ifcObjectPlacement = (IfcObjectPlacement) theEObject;
			T result = caseIfcObjectPlacement(ifcObjectPlacement);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_OBJECTIVE: {
			IfcObjective ifcObjective = (IfcObjective) theEObject;
			T result = caseIfcObjective(ifcObjective);
			if (result == null)
				result = caseIfcConstraint(ifcObjective);
			if (result == null)
				result = caseIfcResourceObjectSelect(ifcObjective);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_OCCUPANT: {
			IfcOccupant ifcOccupant = (IfcOccupant) theEObject;
			T result = caseIfcOccupant(ifcOccupant);
			if (result == null)
				result = caseIfcActor(ifcOccupant);
			if (result == null)
				result = caseIfcObject(ifcOccupant);
			if (result == null)
				result = caseIfcObjectDefinition(ifcOccupant);
			if (result == null)
				result = caseIfcRoot(ifcOccupant);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcOccupant);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_OFFSET_CURVE2_D: {
			IfcOffsetCurve2D ifcOffsetCurve2D = (IfcOffsetCurve2D) theEObject;
			T result = caseIfcOffsetCurve2D(ifcOffsetCurve2D);
			if (result == null)
				result = caseIfcCurve(ifcOffsetCurve2D);
			if (result == null)
				result = caseIfcGeometricRepresentationItem(ifcOffsetCurve2D);
			if (result == null)
				result = caseIfcGeometricSetSelect(ifcOffsetCurve2D);
			if (result == null)
				result = caseIfcRepresentationItem(ifcOffsetCurve2D);
			if (result == null)
				result = caseIfcLayeredItem(ifcOffsetCurve2D);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_OFFSET_CURVE3_D: {
			IfcOffsetCurve3D ifcOffsetCurve3D = (IfcOffsetCurve3D) theEObject;
			T result = caseIfcOffsetCurve3D(ifcOffsetCurve3D);
			if (result == null)
				result = caseIfcCurve(ifcOffsetCurve3D);
			if (result == null)
				result = caseIfcGeometricRepresentationItem(ifcOffsetCurve3D);
			if (result == null)
				result = caseIfcGeometricSetSelect(ifcOffsetCurve3D);
			if (result == null)
				result = caseIfcRepresentationItem(ifcOffsetCurve3D);
			if (result == null)
				result = caseIfcLayeredItem(ifcOffsetCurve3D);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_OPEN_SHELL: {
			IfcOpenShell ifcOpenShell = (IfcOpenShell) theEObject;
			T result = caseIfcOpenShell(ifcOpenShell);
			if (result == null)
				result = caseIfcConnectedFaceSet(ifcOpenShell);
			if (result == null)
				result = caseIfcShell(ifcOpenShell);
			if (result == null)
				result = caseIfcTopologicalRepresentationItem(ifcOpenShell);
			if (result == null)
				result = caseIfcRepresentationItem(ifcOpenShell);
			if (result == null)
				result = caseIfcLayeredItem(ifcOpenShell);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_OPENING_ELEMENT: {
			IfcOpeningElement ifcOpeningElement = (IfcOpeningElement) theEObject;
			T result = caseIfcOpeningElement(ifcOpeningElement);
			if (result == null)
				result = caseIfcFeatureElementSubtraction(ifcOpeningElement);
			if (result == null)
				result = caseIfcFeatureElement(ifcOpeningElement);
			if (result == null)
				result = caseIfcElement(ifcOpeningElement);
			if (result == null)
				result = caseIfcProduct(ifcOpeningElement);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcOpeningElement);
			if (result == null)
				result = caseIfcObject(ifcOpeningElement);
			if (result == null)
				result = caseIfcProductSelect(ifcOpeningElement);
			if (result == null)
				result = caseIfcObjectDefinition(ifcOpeningElement);
			if (result == null)
				result = caseIfcRoot(ifcOpeningElement);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcOpeningElement);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_OPENING_STANDARD_CASE: {
			IfcOpeningStandardCase ifcOpeningStandardCase = (IfcOpeningStandardCase) theEObject;
			T result = caseIfcOpeningStandardCase(ifcOpeningStandardCase);
			if (result == null)
				result = caseIfcOpeningElement(ifcOpeningStandardCase);
			if (result == null)
				result = caseIfcFeatureElementSubtraction(ifcOpeningStandardCase);
			if (result == null)
				result = caseIfcFeatureElement(ifcOpeningStandardCase);
			if (result == null)
				result = caseIfcElement(ifcOpeningStandardCase);
			if (result == null)
				result = caseIfcProduct(ifcOpeningStandardCase);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcOpeningStandardCase);
			if (result == null)
				result = caseIfcObject(ifcOpeningStandardCase);
			if (result == null)
				result = caseIfcProductSelect(ifcOpeningStandardCase);
			if (result == null)
				result = caseIfcObjectDefinition(ifcOpeningStandardCase);
			if (result == null)
				result = caseIfcRoot(ifcOpeningStandardCase);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcOpeningStandardCase);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_ORGANIZATION: {
			IfcOrganization ifcOrganization = (IfcOrganization) theEObject;
			T result = caseIfcOrganization(ifcOrganization);
			if (result == null)
				result = caseIfcActorSelect(ifcOrganization);
			if (result == null)
				result = caseIfcObjectReferenceSelect(ifcOrganization);
			if (result == null)
				result = caseIfcResourceObjectSelect(ifcOrganization);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_ORGANIZATION_RELATIONSHIP: {
			IfcOrganizationRelationship ifcOrganizationRelationship = (IfcOrganizationRelationship) theEObject;
			T result = caseIfcOrganizationRelationship(ifcOrganizationRelationship);
			if (result == null)
				result = caseIfcResourceLevelRelationship(ifcOrganizationRelationship);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_ORIENTED_EDGE: {
			IfcOrientedEdge ifcOrientedEdge = (IfcOrientedEdge) theEObject;
			T result = caseIfcOrientedEdge(ifcOrientedEdge);
			if (result == null)
				result = caseIfcEdge(ifcOrientedEdge);
			if (result == null)
				result = caseIfcTopologicalRepresentationItem(ifcOrientedEdge);
			if (result == null)
				result = caseIfcRepresentationItem(ifcOrientedEdge);
			if (result == null)
				result = caseIfcLayeredItem(ifcOrientedEdge);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_OUTER_BOUNDARY_CURVE: {
			IfcOuterBoundaryCurve ifcOuterBoundaryCurve = (IfcOuterBoundaryCurve) theEObject;
			T result = caseIfcOuterBoundaryCurve(ifcOuterBoundaryCurve);
			if (result == null)
				result = caseIfcBoundaryCurve(ifcOuterBoundaryCurve);
			if (result == null)
				result = caseIfcCompositeCurveOnSurface(ifcOuterBoundaryCurve);
			if (result == null)
				result = caseIfcCompositeCurve(ifcOuterBoundaryCurve);
			if (result == null)
				result = caseIfcCurveOnSurface(ifcOuterBoundaryCurve);
			if (result == null)
				result = caseIfcBoundedCurve(ifcOuterBoundaryCurve);
			if (result == null)
				result = caseIfcCurve(ifcOuterBoundaryCurve);
			if (result == null)
				result = caseIfcCurveOrEdgeCurve(ifcOuterBoundaryCurve);
			if (result == null)
				result = caseIfcGeometricRepresentationItem(ifcOuterBoundaryCurve);
			if (result == null)
				result = caseIfcGeometricSetSelect(ifcOuterBoundaryCurve);
			if (result == null)
				result = caseIfcRepresentationItem(ifcOuterBoundaryCurve);
			if (result == null)
				result = caseIfcLayeredItem(ifcOuterBoundaryCurve);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_OUTLET: {
			IfcOutlet ifcOutlet = (IfcOutlet) theEObject;
			T result = caseIfcOutlet(ifcOutlet);
			if (result == null)
				result = caseIfcFlowTerminal(ifcOutlet);
			if (result == null)
				result = caseIfcDistributionFlowElement(ifcOutlet);
			if (result == null)
				result = caseIfcDistributionElement(ifcOutlet);
			if (result == null)
				result = caseIfcElement(ifcOutlet);
			if (result == null)
				result = caseIfcProduct(ifcOutlet);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcOutlet);
			if (result == null)
				result = caseIfcObject(ifcOutlet);
			if (result == null)
				result = caseIfcProductSelect(ifcOutlet);
			if (result == null)
				result = caseIfcObjectDefinition(ifcOutlet);
			if (result == null)
				result = caseIfcRoot(ifcOutlet);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcOutlet);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_OUTLET_TYPE: {
			IfcOutletType ifcOutletType = (IfcOutletType) theEObject;
			T result = caseIfcOutletType(ifcOutletType);
			if (result == null)
				result = caseIfcFlowTerminalType(ifcOutletType);
			if (result == null)
				result = caseIfcDistributionFlowElementType(ifcOutletType);
			if (result == null)
				result = caseIfcDistributionElementType(ifcOutletType);
			if (result == null)
				result = caseIfcElementType(ifcOutletType);
			if (result == null)
				result = caseIfcTypeProduct(ifcOutletType);
			if (result == null)
				result = caseIfcTypeObject(ifcOutletType);
			if (result == null)
				result = caseIfcProductSelect(ifcOutletType);
			if (result == null)
				result = caseIfcObjectDefinition(ifcOutletType);
			if (result == null)
				result = caseIfcRoot(ifcOutletType);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcOutletType);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_OWNER_HISTORY: {
			IfcOwnerHistory ifcOwnerHistory = (IfcOwnerHistory) theEObject;
			T result = caseIfcOwnerHistory(ifcOwnerHistory);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PARAMETERIZED_PROFILE_DEF: {
			IfcParameterizedProfileDef ifcParameterizedProfileDef = (IfcParameterizedProfileDef) theEObject;
			T result = caseIfcParameterizedProfileDef(ifcParameterizedProfileDef);
			if (result == null)
				result = caseIfcProfileDef(ifcParameterizedProfileDef);
			if (result == null)
				result = caseIfcResourceObjectSelect(ifcParameterizedProfileDef);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PATH: {
			IfcPath ifcPath = (IfcPath) theEObject;
			T result = caseIfcPath(ifcPath);
			if (result == null)
				result = caseIfcTopologicalRepresentationItem(ifcPath);
			if (result == null)
				result = caseIfcRepresentationItem(ifcPath);
			if (result == null)
				result = caseIfcLayeredItem(ifcPath);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PCURVE: {
			IfcPcurve ifcPcurve = (IfcPcurve) theEObject;
			T result = caseIfcPcurve(ifcPcurve);
			if (result == null)
				result = caseIfcCurve(ifcPcurve);
			if (result == null)
				result = caseIfcCurveOnSurface(ifcPcurve);
			if (result == null)
				result = caseIfcGeometricRepresentationItem(ifcPcurve);
			if (result == null)
				result = caseIfcGeometricSetSelect(ifcPcurve);
			if (result == null)
				result = caseIfcRepresentationItem(ifcPcurve);
			if (result == null)
				result = caseIfcLayeredItem(ifcPcurve);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PERFORMANCE_HISTORY: {
			IfcPerformanceHistory ifcPerformanceHistory = (IfcPerformanceHistory) theEObject;
			T result = caseIfcPerformanceHistory(ifcPerformanceHistory);
			if (result == null)
				result = caseIfcControl(ifcPerformanceHistory);
			if (result == null)
				result = caseIfcObject(ifcPerformanceHistory);
			if (result == null)
				result = caseIfcObjectDefinition(ifcPerformanceHistory);
			if (result == null)
				result = caseIfcRoot(ifcPerformanceHistory);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcPerformanceHistory);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PERMEABLE_COVERING_PROPERTIES: {
			IfcPermeableCoveringProperties ifcPermeableCoveringProperties = (IfcPermeableCoveringProperties) theEObject;
			T result = caseIfcPermeableCoveringProperties(ifcPermeableCoveringProperties);
			if (result == null)
				result = caseIfcPreDefinedPropertySet(ifcPermeableCoveringProperties);
			if (result == null)
				result = caseIfcPropertySetDefinition(ifcPermeableCoveringProperties);
			if (result == null)
				result = caseIfcPropertyDefinition(ifcPermeableCoveringProperties);
			if (result == null)
				result = caseIfcPropertySetDefinitionSelect(ifcPermeableCoveringProperties);
			if (result == null)
				result = caseIfcRoot(ifcPermeableCoveringProperties);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcPermeableCoveringProperties);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PERMIT: {
			IfcPermit ifcPermit = (IfcPermit) theEObject;
			T result = caseIfcPermit(ifcPermit);
			if (result == null)
				result = caseIfcControl(ifcPermit);
			if (result == null)
				result = caseIfcObject(ifcPermit);
			if (result == null)
				result = caseIfcObjectDefinition(ifcPermit);
			if (result == null)
				result = caseIfcRoot(ifcPermit);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcPermit);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PERSON: {
			IfcPerson ifcPerson = (IfcPerson) theEObject;
			T result = caseIfcPerson(ifcPerson);
			if (result == null)
				result = caseIfcActorSelect(ifcPerson);
			if (result == null)
				result = caseIfcObjectReferenceSelect(ifcPerson);
			if (result == null)
				result = caseIfcResourceObjectSelect(ifcPerson);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PERSON_AND_ORGANIZATION: {
			IfcPersonAndOrganization ifcPersonAndOrganization = (IfcPersonAndOrganization) theEObject;
			T result = caseIfcPersonAndOrganization(ifcPersonAndOrganization);
			if (result == null)
				result = caseIfcActorSelect(ifcPersonAndOrganization);
			if (result == null)
				result = caseIfcObjectReferenceSelect(ifcPersonAndOrganization);
			if (result == null)
				result = caseIfcResourceObjectSelect(ifcPersonAndOrganization);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PHYSICAL_COMPLEX_QUANTITY: {
			IfcPhysicalComplexQuantity ifcPhysicalComplexQuantity = (IfcPhysicalComplexQuantity) theEObject;
			T result = caseIfcPhysicalComplexQuantity(ifcPhysicalComplexQuantity);
			if (result == null)
				result = caseIfcPhysicalQuantity(ifcPhysicalComplexQuantity);
			if (result == null)
				result = caseIfcResourceObjectSelect(ifcPhysicalComplexQuantity);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PHYSICAL_QUANTITY: {
			IfcPhysicalQuantity ifcPhysicalQuantity = (IfcPhysicalQuantity) theEObject;
			T result = caseIfcPhysicalQuantity(ifcPhysicalQuantity);
			if (result == null)
				result = caseIfcResourceObjectSelect(ifcPhysicalQuantity);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PHYSICAL_SIMPLE_QUANTITY: {
			IfcPhysicalSimpleQuantity ifcPhysicalSimpleQuantity = (IfcPhysicalSimpleQuantity) theEObject;
			T result = caseIfcPhysicalSimpleQuantity(ifcPhysicalSimpleQuantity);
			if (result == null)
				result = caseIfcPhysicalQuantity(ifcPhysicalSimpleQuantity);
			if (result == null)
				result = caseIfcResourceObjectSelect(ifcPhysicalSimpleQuantity);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PILE: {
			IfcPile ifcPile = (IfcPile) theEObject;
			T result = caseIfcPile(ifcPile);
			if (result == null)
				result = caseIfcBuildingElement(ifcPile);
			if (result == null)
				result = caseIfcElement(ifcPile);
			if (result == null)
				result = caseIfcProduct(ifcPile);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcPile);
			if (result == null)
				result = caseIfcObject(ifcPile);
			if (result == null)
				result = caseIfcProductSelect(ifcPile);
			if (result == null)
				result = caseIfcObjectDefinition(ifcPile);
			if (result == null)
				result = caseIfcRoot(ifcPile);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcPile);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PILE_TYPE: {
			IfcPileType ifcPileType = (IfcPileType) theEObject;
			T result = caseIfcPileType(ifcPileType);
			if (result == null)
				result = caseIfcBuildingElementType(ifcPileType);
			if (result == null)
				result = caseIfcElementType(ifcPileType);
			if (result == null)
				result = caseIfcTypeProduct(ifcPileType);
			if (result == null)
				result = caseIfcTypeObject(ifcPileType);
			if (result == null)
				result = caseIfcProductSelect(ifcPileType);
			if (result == null)
				result = caseIfcObjectDefinition(ifcPileType);
			if (result == null)
				result = caseIfcRoot(ifcPileType);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcPileType);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PIPE_FITTING: {
			IfcPipeFitting ifcPipeFitting = (IfcPipeFitting) theEObject;
			T result = caseIfcPipeFitting(ifcPipeFitting);
			if (result == null)
				result = caseIfcFlowFitting(ifcPipeFitting);
			if (result == null)
				result = caseIfcDistributionFlowElement(ifcPipeFitting);
			if (result == null)
				result = caseIfcDistributionElement(ifcPipeFitting);
			if (result == null)
				result = caseIfcElement(ifcPipeFitting);
			if (result == null)
				result = caseIfcProduct(ifcPipeFitting);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcPipeFitting);
			if (result == null)
				result = caseIfcObject(ifcPipeFitting);
			if (result == null)
				result = caseIfcProductSelect(ifcPipeFitting);
			if (result == null)
				result = caseIfcObjectDefinition(ifcPipeFitting);
			if (result == null)
				result = caseIfcRoot(ifcPipeFitting);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcPipeFitting);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PIPE_FITTING_TYPE: {
			IfcPipeFittingType ifcPipeFittingType = (IfcPipeFittingType) theEObject;
			T result = caseIfcPipeFittingType(ifcPipeFittingType);
			if (result == null)
				result = caseIfcFlowFittingType(ifcPipeFittingType);
			if (result == null)
				result = caseIfcDistributionFlowElementType(ifcPipeFittingType);
			if (result == null)
				result = caseIfcDistributionElementType(ifcPipeFittingType);
			if (result == null)
				result = caseIfcElementType(ifcPipeFittingType);
			if (result == null)
				result = caseIfcTypeProduct(ifcPipeFittingType);
			if (result == null)
				result = caseIfcTypeObject(ifcPipeFittingType);
			if (result == null)
				result = caseIfcProductSelect(ifcPipeFittingType);
			if (result == null)
				result = caseIfcObjectDefinition(ifcPipeFittingType);
			if (result == null)
				result = caseIfcRoot(ifcPipeFittingType);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcPipeFittingType);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PIPE_SEGMENT: {
			IfcPipeSegment ifcPipeSegment = (IfcPipeSegment) theEObject;
			T result = caseIfcPipeSegment(ifcPipeSegment);
			if (result == null)
				result = caseIfcFlowSegment(ifcPipeSegment);
			if (result == null)
				result = caseIfcDistributionFlowElement(ifcPipeSegment);
			if (result == null)
				result = caseIfcDistributionElement(ifcPipeSegment);
			if (result == null)
				result = caseIfcElement(ifcPipeSegment);
			if (result == null)
				result = caseIfcProduct(ifcPipeSegment);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcPipeSegment);
			if (result == null)
				result = caseIfcObject(ifcPipeSegment);
			if (result == null)
				result = caseIfcProductSelect(ifcPipeSegment);
			if (result == null)
				result = caseIfcObjectDefinition(ifcPipeSegment);
			if (result == null)
				result = caseIfcRoot(ifcPipeSegment);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcPipeSegment);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PIPE_SEGMENT_TYPE: {
			IfcPipeSegmentType ifcPipeSegmentType = (IfcPipeSegmentType) theEObject;
			T result = caseIfcPipeSegmentType(ifcPipeSegmentType);
			if (result == null)
				result = caseIfcFlowSegmentType(ifcPipeSegmentType);
			if (result == null)
				result = caseIfcDistributionFlowElementType(ifcPipeSegmentType);
			if (result == null)
				result = caseIfcDistributionElementType(ifcPipeSegmentType);
			if (result == null)
				result = caseIfcElementType(ifcPipeSegmentType);
			if (result == null)
				result = caseIfcTypeProduct(ifcPipeSegmentType);
			if (result == null)
				result = caseIfcTypeObject(ifcPipeSegmentType);
			if (result == null)
				result = caseIfcProductSelect(ifcPipeSegmentType);
			if (result == null)
				result = caseIfcObjectDefinition(ifcPipeSegmentType);
			if (result == null)
				result = caseIfcRoot(ifcPipeSegmentType);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcPipeSegmentType);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PIXEL_TEXTURE: {
			IfcPixelTexture ifcPixelTexture = (IfcPixelTexture) theEObject;
			T result = caseIfcPixelTexture(ifcPixelTexture);
			if (result == null)
				result = caseIfcSurfaceTexture(ifcPixelTexture);
			if (result == null)
				result = caseIfcPresentationItem(ifcPixelTexture);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PLACEMENT: {
			IfcPlacement ifcPlacement = (IfcPlacement) theEObject;
			T result = caseIfcPlacement(ifcPlacement);
			if (result == null)
				result = caseIfcGeometricRepresentationItem(ifcPlacement);
			if (result == null)
				result = caseIfcRepresentationItem(ifcPlacement);
			if (result == null)
				result = caseIfcLayeredItem(ifcPlacement);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PLANAR_BOX: {
			IfcPlanarBox ifcPlanarBox = (IfcPlanarBox) theEObject;
			T result = caseIfcPlanarBox(ifcPlanarBox);
			if (result == null)
				result = caseIfcPlanarExtent(ifcPlanarBox);
			if (result == null)
				result = caseIfcGeometricRepresentationItem(ifcPlanarBox);
			if (result == null)
				result = caseIfcRepresentationItem(ifcPlanarBox);
			if (result == null)
				result = caseIfcLayeredItem(ifcPlanarBox);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PLANAR_EXTENT: {
			IfcPlanarExtent ifcPlanarExtent = (IfcPlanarExtent) theEObject;
			T result = caseIfcPlanarExtent(ifcPlanarExtent);
			if (result == null)
				result = caseIfcGeometricRepresentationItem(ifcPlanarExtent);
			if (result == null)
				result = caseIfcRepresentationItem(ifcPlanarExtent);
			if (result == null)
				result = caseIfcLayeredItem(ifcPlanarExtent);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PLANE: {
			IfcPlane ifcPlane = (IfcPlane) theEObject;
			T result = caseIfcPlane(ifcPlane);
			if (result == null)
				result = caseIfcElementarySurface(ifcPlane);
			if (result == null)
				result = caseIfcSurface(ifcPlane);
			if (result == null)
				result = caseIfcGeometricRepresentationItem(ifcPlane);
			if (result == null)
				result = caseIfcGeometricSetSelect(ifcPlane);
			if (result == null)
				result = caseIfcSurfaceOrFaceSurface(ifcPlane);
			if (result == null)
				result = caseIfcRepresentationItem(ifcPlane);
			if (result == null)
				result = caseIfcLayeredItem(ifcPlane);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PLATE: {
			IfcPlate ifcPlate = (IfcPlate) theEObject;
			T result = caseIfcPlate(ifcPlate);
			if (result == null)
				result = caseIfcBuildingElement(ifcPlate);
			if (result == null)
				result = caseIfcElement(ifcPlate);
			if (result == null)
				result = caseIfcProduct(ifcPlate);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcPlate);
			if (result == null)
				result = caseIfcObject(ifcPlate);
			if (result == null)
				result = caseIfcProductSelect(ifcPlate);
			if (result == null)
				result = caseIfcObjectDefinition(ifcPlate);
			if (result == null)
				result = caseIfcRoot(ifcPlate);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcPlate);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PLATE_STANDARD_CASE: {
			IfcPlateStandardCase ifcPlateStandardCase = (IfcPlateStandardCase) theEObject;
			T result = caseIfcPlateStandardCase(ifcPlateStandardCase);
			if (result == null)
				result = caseIfcPlate(ifcPlateStandardCase);
			if (result == null)
				result = caseIfcBuildingElement(ifcPlateStandardCase);
			if (result == null)
				result = caseIfcElement(ifcPlateStandardCase);
			if (result == null)
				result = caseIfcProduct(ifcPlateStandardCase);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcPlateStandardCase);
			if (result == null)
				result = caseIfcObject(ifcPlateStandardCase);
			if (result == null)
				result = caseIfcProductSelect(ifcPlateStandardCase);
			if (result == null)
				result = caseIfcObjectDefinition(ifcPlateStandardCase);
			if (result == null)
				result = caseIfcRoot(ifcPlateStandardCase);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcPlateStandardCase);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PLATE_TYPE: {
			IfcPlateType ifcPlateType = (IfcPlateType) theEObject;
			T result = caseIfcPlateType(ifcPlateType);
			if (result == null)
				result = caseIfcBuildingElementType(ifcPlateType);
			if (result == null)
				result = caseIfcElementType(ifcPlateType);
			if (result == null)
				result = caseIfcTypeProduct(ifcPlateType);
			if (result == null)
				result = caseIfcTypeObject(ifcPlateType);
			if (result == null)
				result = caseIfcProductSelect(ifcPlateType);
			if (result == null)
				result = caseIfcObjectDefinition(ifcPlateType);
			if (result == null)
				result = caseIfcRoot(ifcPlateType);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcPlateType);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_POINT: {
			IfcPoint ifcPoint = (IfcPoint) theEObject;
			T result = caseIfcPoint(ifcPoint);
			if (result == null)
				result = caseIfcGeometricRepresentationItem(ifcPoint);
			if (result == null)
				result = caseIfcGeometricSetSelect(ifcPoint);
			if (result == null)
				result = caseIfcPointOrVertexPoint(ifcPoint);
			if (result == null)
				result = caseIfcRepresentationItem(ifcPoint);
			if (result == null)
				result = caseIfcLayeredItem(ifcPoint);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_POINT_ON_CURVE: {
			IfcPointOnCurve ifcPointOnCurve = (IfcPointOnCurve) theEObject;
			T result = caseIfcPointOnCurve(ifcPointOnCurve);
			if (result == null)
				result = caseIfcPoint(ifcPointOnCurve);
			if (result == null)
				result = caseIfcGeometricRepresentationItem(ifcPointOnCurve);
			if (result == null)
				result = caseIfcGeometricSetSelect(ifcPointOnCurve);
			if (result == null)
				result = caseIfcPointOrVertexPoint(ifcPointOnCurve);
			if (result == null)
				result = caseIfcRepresentationItem(ifcPointOnCurve);
			if (result == null)
				result = caseIfcLayeredItem(ifcPointOnCurve);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_POINT_ON_SURFACE: {
			IfcPointOnSurface ifcPointOnSurface = (IfcPointOnSurface) theEObject;
			T result = caseIfcPointOnSurface(ifcPointOnSurface);
			if (result == null)
				result = caseIfcPoint(ifcPointOnSurface);
			if (result == null)
				result = caseIfcGeometricRepresentationItem(ifcPointOnSurface);
			if (result == null)
				result = caseIfcGeometricSetSelect(ifcPointOnSurface);
			if (result == null)
				result = caseIfcPointOrVertexPoint(ifcPointOnSurface);
			if (result == null)
				result = caseIfcRepresentationItem(ifcPointOnSurface);
			if (result == null)
				result = caseIfcLayeredItem(ifcPointOnSurface);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_POLY_LOOP: {
			IfcPolyLoop ifcPolyLoop = (IfcPolyLoop) theEObject;
			T result = caseIfcPolyLoop(ifcPolyLoop);
			if (result == null)
				result = caseIfcLoop(ifcPolyLoop);
			if (result == null)
				result = caseIfcTopologicalRepresentationItem(ifcPolyLoop);
			if (result == null)
				result = caseIfcRepresentationItem(ifcPolyLoop);
			if (result == null)
				result = caseIfcLayeredItem(ifcPolyLoop);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_POLYGONAL_BOUNDED_HALF_SPACE: {
			IfcPolygonalBoundedHalfSpace ifcPolygonalBoundedHalfSpace = (IfcPolygonalBoundedHalfSpace) theEObject;
			T result = caseIfcPolygonalBoundedHalfSpace(ifcPolygonalBoundedHalfSpace);
			if (result == null)
				result = caseIfcHalfSpaceSolid(ifcPolygonalBoundedHalfSpace);
			if (result == null)
				result = caseIfcGeometricRepresentationItem(ifcPolygonalBoundedHalfSpace);
			if (result == null)
				result = caseIfcBooleanOperand(ifcPolygonalBoundedHalfSpace);
			if (result == null)
				result = caseIfcRepresentationItem(ifcPolygonalBoundedHalfSpace);
			if (result == null)
				result = caseIfcLayeredItem(ifcPolygonalBoundedHalfSpace);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_POLYGONAL_FACE_SET: {
			IfcPolygonalFaceSet ifcPolygonalFaceSet = (IfcPolygonalFaceSet) theEObject;
			T result = caseIfcPolygonalFaceSet(ifcPolygonalFaceSet);
			if (result == null)
				result = caseIfcTessellatedFaceSet(ifcPolygonalFaceSet);
			if (result == null)
				result = caseIfcTessellatedItem(ifcPolygonalFaceSet);
			if (result == null)
				result = caseIfcBooleanOperand(ifcPolygonalFaceSet);
			if (result == null)
				result = caseIfcGeometricRepresentationItem(ifcPolygonalFaceSet);
			if (result == null)
				result = caseIfcRepresentationItem(ifcPolygonalFaceSet);
			if (result == null)
				result = caseIfcLayeredItem(ifcPolygonalFaceSet);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_POLYLINE: {
			IfcPolyline ifcPolyline = (IfcPolyline) theEObject;
			T result = caseIfcPolyline(ifcPolyline);
			if (result == null)
				result = caseIfcBoundedCurve(ifcPolyline);
			if (result == null)
				result = caseIfcCurve(ifcPolyline);
			if (result == null)
				result = caseIfcCurveOrEdgeCurve(ifcPolyline);
			if (result == null)
				result = caseIfcGeometricRepresentationItem(ifcPolyline);
			if (result == null)
				result = caseIfcGeometricSetSelect(ifcPolyline);
			if (result == null)
				result = caseIfcRepresentationItem(ifcPolyline);
			if (result == null)
				result = caseIfcLayeredItem(ifcPolyline);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PORT: {
			IfcPort ifcPort = (IfcPort) theEObject;
			T result = caseIfcPort(ifcPort);
			if (result == null)
				result = caseIfcProduct(ifcPort);
			if (result == null)
				result = caseIfcObject(ifcPort);
			if (result == null)
				result = caseIfcProductSelect(ifcPort);
			if (result == null)
				result = caseIfcObjectDefinition(ifcPort);
			if (result == null)
				result = caseIfcRoot(ifcPort);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcPort);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_POSTAL_ADDRESS: {
			IfcPostalAddress ifcPostalAddress = (IfcPostalAddress) theEObject;
			T result = caseIfcPostalAddress(ifcPostalAddress);
			if (result == null)
				result = caseIfcAddress(ifcPostalAddress);
			if (result == null)
				result = caseIfcObjectReferenceSelect(ifcPostalAddress);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PRE_DEFINED_COLOUR: {
			IfcPreDefinedColour ifcPreDefinedColour = (IfcPreDefinedColour) theEObject;
			T result = caseIfcPreDefinedColour(ifcPreDefinedColour);
			if (result == null)
				result = caseIfcPreDefinedItem(ifcPreDefinedColour);
			if (result == null)
				result = caseIfcColour(ifcPreDefinedColour);
			if (result == null)
				result = caseIfcPresentationItem(ifcPreDefinedColour);
			if (result == null)
				result = caseIfcFillStyleSelect(ifcPreDefinedColour);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PRE_DEFINED_CURVE_FONT: {
			IfcPreDefinedCurveFont ifcPreDefinedCurveFont = (IfcPreDefinedCurveFont) theEObject;
			T result = caseIfcPreDefinedCurveFont(ifcPreDefinedCurveFont);
			if (result == null)
				result = caseIfcPreDefinedItem(ifcPreDefinedCurveFont);
			if (result == null)
				result = caseIfcCurveStyleFontSelect(ifcPreDefinedCurveFont);
			if (result == null)
				result = caseIfcPresentationItem(ifcPreDefinedCurveFont);
			if (result == null)
				result = caseIfcCurveFontOrScaledCurveFontSelect(ifcPreDefinedCurveFont);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PRE_DEFINED_ITEM: {
			IfcPreDefinedItem ifcPreDefinedItem = (IfcPreDefinedItem) theEObject;
			T result = caseIfcPreDefinedItem(ifcPreDefinedItem);
			if (result == null)
				result = caseIfcPresentationItem(ifcPreDefinedItem);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PRE_DEFINED_PROPERTIES: {
			IfcPreDefinedProperties ifcPreDefinedProperties = (IfcPreDefinedProperties) theEObject;
			T result = caseIfcPreDefinedProperties(ifcPreDefinedProperties);
			if (result == null)
				result = caseIfcPropertyAbstraction(ifcPreDefinedProperties);
			if (result == null)
				result = caseIfcResourceObjectSelect(ifcPreDefinedProperties);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PRE_DEFINED_PROPERTY_SET: {
			IfcPreDefinedPropertySet ifcPreDefinedPropertySet = (IfcPreDefinedPropertySet) theEObject;
			T result = caseIfcPreDefinedPropertySet(ifcPreDefinedPropertySet);
			if (result == null)
				result = caseIfcPropertySetDefinition(ifcPreDefinedPropertySet);
			if (result == null)
				result = caseIfcPropertyDefinition(ifcPreDefinedPropertySet);
			if (result == null)
				result = caseIfcPropertySetDefinitionSelect(ifcPreDefinedPropertySet);
			if (result == null)
				result = caseIfcRoot(ifcPreDefinedPropertySet);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcPreDefinedPropertySet);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PRE_DEFINED_TEXT_FONT: {
			IfcPreDefinedTextFont ifcPreDefinedTextFont = (IfcPreDefinedTextFont) theEObject;
			T result = caseIfcPreDefinedTextFont(ifcPreDefinedTextFont);
			if (result == null)
				result = caseIfcPreDefinedItem(ifcPreDefinedTextFont);
			if (result == null)
				result = caseIfcTextFontSelect(ifcPreDefinedTextFont);
			if (result == null)
				result = caseIfcPresentationItem(ifcPreDefinedTextFont);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PRESENTATION_ITEM: {
			IfcPresentationItem ifcPresentationItem = (IfcPresentationItem) theEObject;
			T result = caseIfcPresentationItem(ifcPresentationItem);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PRESENTATION_LAYER_ASSIGNMENT: {
			IfcPresentationLayerAssignment ifcPresentationLayerAssignment = (IfcPresentationLayerAssignment) theEObject;
			T result = caseIfcPresentationLayerAssignment(ifcPresentationLayerAssignment);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PRESENTATION_LAYER_WITH_STYLE: {
			IfcPresentationLayerWithStyle ifcPresentationLayerWithStyle = (IfcPresentationLayerWithStyle) theEObject;
			T result = caseIfcPresentationLayerWithStyle(ifcPresentationLayerWithStyle);
			if (result == null)
				result = caseIfcPresentationLayerAssignment(ifcPresentationLayerWithStyle);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PRESENTATION_STYLE: {
			IfcPresentationStyle ifcPresentationStyle = (IfcPresentationStyle) theEObject;
			T result = caseIfcPresentationStyle(ifcPresentationStyle);
			if (result == null)
				result = caseIfcStyleAssignmentSelect(ifcPresentationStyle);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PRESENTATION_STYLE_ASSIGNMENT: {
			IfcPresentationStyleAssignment ifcPresentationStyleAssignment = (IfcPresentationStyleAssignment) theEObject;
			T result = caseIfcPresentationStyleAssignment(ifcPresentationStyleAssignment);
			if (result == null)
				result = caseIfcStyleAssignmentSelect(ifcPresentationStyleAssignment);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PROCEDURE: {
			IfcProcedure ifcProcedure = (IfcProcedure) theEObject;
			T result = caseIfcProcedure(ifcProcedure);
			if (result == null)
				result = caseIfcProcess(ifcProcedure);
			if (result == null)
				result = caseIfcObject(ifcProcedure);
			if (result == null)
				result = caseIfcProcessSelect(ifcProcedure);
			if (result == null)
				result = caseIfcObjectDefinition(ifcProcedure);
			if (result == null)
				result = caseIfcRoot(ifcProcedure);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcProcedure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PROCEDURE_TYPE: {
			IfcProcedureType ifcProcedureType = (IfcProcedureType) theEObject;
			T result = caseIfcProcedureType(ifcProcedureType);
			if (result == null)
				result = caseIfcTypeProcess(ifcProcedureType);
			if (result == null)
				result = caseIfcTypeObject(ifcProcedureType);
			if (result == null)
				result = caseIfcProcessSelect(ifcProcedureType);
			if (result == null)
				result = caseIfcObjectDefinition(ifcProcedureType);
			if (result == null)
				result = caseIfcRoot(ifcProcedureType);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcProcedureType);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PROCESS: {
			IfcProcess ifcProcess = (IfcProcess) theEObject;
			T result = caseIfcProcess(ifcProcess);
			if (result == null)
				result = caseIfcObject(ifcProcess);
			if (result == null)
				result = caseIfcProcessSelect(ifcProcess);
			if (result == null)
				result = caseIfcObjectDefinition(ifcProcess);
			if (result == null)
				result = caseIfcRoot(ifcProcess);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcProcess);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PRODUCT: {
			IfcProduct ifcProduct = (IfcProduct) theEObject;
			T result = caseIfcProduct(ifcProduct);
			if (result == null)
				result = caseIfcObject(ifcProduct);
			if (result == null)
				result = caseIfcProductSelect(ifcProduct);
			if (result == null)
				result = caseIfcObjectDefinition(ifcProduct);
			if (result == null)
				result = caseIfcRoot(ifcProduct);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcProduct);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PRODUCT_DEFINITION_SHAPE: {
			IfcProductDefinitionShape ifcProductDefinitionShape = (IfcProductDefinitionShape) theEObject;
			T result = caseIfcProductDefinitionShape(ifcProductDefinitionShape);
			if (result == null)
				result = caseIfcProductRepresentation(ifcProductDefinitionShape);
			if (result == null)
				result = caseIfcProductRepresentationSelect(ifcProductDefinitionShape);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PRODUCT_REPRESENTATION: {
			IfcProductRepresentation ifcProductRepresentation = (IfcProductRepresentation) theEObject;
			T result = caseIfcProductRepresentation(ifcProductRepresentation);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PROFILE_DEF: {
			IfcProfileDef ifcProfileDef = (IfcProfileDef) theEObject;
			T result = caseIfcProfileDef(ifcProfileDef);
			if (result == null)
				result = caseIfcResourceObjectSelect(ifcProfileDef);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PROFILE_PROPERTIES: {
			IfcProfileProperties ifcProfileProperties = (IfcProfileProperties) theEObject;
			T result = caseIfcProfileProperties(ifcProfileProperties);
			if (result == null)
				result = caseIfcExtendedProperties(ifcProfileProperties);
			if (result == null)
				result = caseIfcPropertyAbstraction(ifcProfileProperties);
			if (result == null)
				result = caseIfcResourceObjectSelect(ifcProfileProperties);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PROJECT: {
			IfcProject ifcProject = (IfcProject) theEObject;
			T result = caseIfcProject(ifcProject);
			if (result == null)
				result = caseIfcContext(ifcProject);
			if (result == null)
				result = caseIfcObjectDefinition(ifcProject);
			if (result == null)
				result = caseIfcRoot(ifcProject);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcProject);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PROJECT_LIBRARY: {
			IfcProjectLibrary ifcProjectLibrary = (IfcProjectLibrary) theEObject;
			T result = caseIfcProjectLibrary(ifcProjectLibrary);
			if (result == null)
				result = caseIfcContext(ifcProjectLibrary);
			if (result == null)
				result = caseIfcObjectDefinition(ifcProjectLibrary);
			if (result == null)
				result = caseIfcRoot(ifcProjectLibrary);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcProjectLibrary);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PROJECT_ORDER: {
			IfcProjectOrder ifcProjectOrder = (IfcProjectOrder) theEObject;
			T result = caseIfcProjectOrder(ifcProjectOrder);
			if (result == null)
				result = caseIfcControl(ifcProjectOrder);
			if (result == null)
				result = caseIfcObject(ifcProjectOrder);
			if (result == null)
				result = caseIfcObjectDefinition(ifcProjectOrder);
			if (result == null)
				result = caseIfcRoot(ifcProjectOrder);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcProjectOrder);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PROJECTED_CRS: {
			IfcProjectedCRS ifcProjectedCRS = (IfcProjectedCRS) theEObject;
			T result = caseIfcProjectedCRS(ifcProjectedCRS);
			if (result == null)
				result = caseIfcCoordinateReferenceSystem(ifcProjectedCRS);
			if (result == null)
				result = caseIfcCoordinateReferenceSystemSelect(ifcProjectedCRS);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PROJECTION_ELEMENT: {
			IfcProjectionElement ifcProjectionElement = (IfcProjectionElement) theEObject;
			T result = caseIfcProjectionElement(ifcProjectionElement);
			if (result == null)
				result = caseIfcFeatureElementAddition(ifcProjectionElement);
			if (result == null)
				result = caseIfcFeatureElement(ifcProjectionElement);
			if (result == null)
				result = caseIfcElement(ifcProjectionElement);
			if (result == null)
				result = caseIfcProduct(ifcProjectionElement);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcProjectionElement);
			if (result == null)
				result = caseIfcObject(ifcProjectionElement);
			if (result == null)
				result = caseIfcProductSelect(ifcProjectionElement);
			if (result == null)
				result = caseIfcObjectDefinition(ifcProjectionElement);
			if (result == null)
				result = caseIfcRoot(ifcProjectionElement);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcProjectionElement);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PROPERTY: {
			IfcProperty ifcProperty = (IfcProperty) theEObject;
			T result = caseIfcProperty(ifcProperty);
			if (result == null)
				result = caseIfcPropertyAbstraction(ifcProperty);
			if (result == null)
				result = caseIfcResourceObjectSelect(ifcProperty);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PROPERTY_ABSTRACTION: {
			IfcPropertyAbstraction ifcPropertyAbstraction = (IfcPropertyAbstraction) theEObject;
			T result = caseIfcPropertyAbstraction(ifcPropertyAbstraction);
			if (result == null)
				result = caseIfcResourceObjectSelect(ifcPropertyAbstraction);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PROPERTY_BOUNDED_VALUE: {
			IfcPropertyBoundedValue ifcPropertyBoundedValue = (IfcPropertyBoundedValue) theEObject;
			T result = caseIfcPropertyBoundedValue(ifcPropertyBoundedValue);
			if (result == null)
				result = caseIfcSimpleProperty(ifcPropertyBoundedValue);
			if (result == null)
				result = caseIfcProperty(ifcPropertyBoundedValue);
			if (result == null)
				result = caseIfcPropertyAbstraction(ifcPropertyBoundedValue);
			if (result == null)
				result = caseIfcResourceObjectSelect(ifcPropertyBoundedValue);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PROPERTY_DEFINITION: {
			IfcPropertyDefinition ifcPropertyDefinition = (IfcPropertyDefinition) theEObject;
			T result = caseIfcPropertyDefinition(ifcPropertyDefinition);
			if (result == null)
				result = caseIfcRoot(ifcPropertyDefinition);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcPropertyDefinition);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PROPERTY_DEPENDENCY_RELATIONSHIP: {
			IfcPropertyDependencyRelationship ifcPropertyDependencyRelationship = (IfcPropertyDependencyRelationship) theEObject;
			T result = caseIfcPropertyDependencyRelationship(ifcPropertyDependencyRelationship);
			if (result == null)
				result = caseIfcResourceLevelRelationship(ifcPropertyDependencyRelationship);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PROPERTY_ENUMERATED_VALUE: {
			IfcPropertyEnumeratedValue ifcPropertyEnumeratedValue = (IfcPropertyEnumeratedValue) theEObject;
			T result = caseIfcPropertyEnumeratedValue(ifcPropertyEnumeratedValue);
			if (result == null)
				result = caseIfcSimpleProperty(ifcPropertyEnumeratedValue);
			if (result == null)
				result = caseIfcProperty(ifcPropertyEnumeratedValue);
			if (result == null)
				result = caseIfcPropertyAbstraction(ifcPropertyEnumeratedValue);
			if (result == null)
				result = caseIfcResourceObjectSelect(ifcPropertyEnumeratedValue);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PROPERTY_ENUMERATION: {
			IfcPropertyEnumeration ifcPropertyEnumeration = (IfcPropertyEnumeration) theEObject;
			T result = caseIfcPropertyEnumeration(ifcPropertyEnumeration);
			if (result == null)
				result = caseIfcPropertyAbstraction(ifcPropertyEnumeration);
			if (result == null)
				result = caseIfcResourceObjectSelect(ifcPropertyEnumeration);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PROPERTY_LIST_VALUE: {
			IfcPropertyListValue ifcPropertyListValue = (IfcPropertyListValue) theEObject;
			T result = caseIfcPropertyListValue(ifcPropertyListValue);
			if (result == null)
				result = caseIfcSimpleProperty(ifcPropertyListValue);
			if (result == null)
				result = caseIfcProperty(ifcPropertyListValue);
			if (result == null)
				result = caseIfcPropertyAbstraction(ifcPropertyListValue);
			if (result == null)
				result = caseIfcResourceObjectSelect(ifcPropertyListValue);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PROPERTY_REFERENCE_VALUE: {
			IfcPropertyReferenceValue ifcPropertyReferenceValue = (IfcPropertyReferenceValue) theEObject;
			T result = caseIfcPropertyReferenceValue(ifcPropertyReferenceValue);
			if (result == null)
				result = caseIfcSimpleProperty(ifcPropertyReferenceValue);
			if (result == null)
				result = caseIfcProperty(ifcPropertyReferenceValue);
			if (result == null)
				result = caseIfcPropertyAbstraction(ifcPropertyReferenceValue);
			if (result == null)
				result = caseIfcResourceObjectSelect(ifcPropertyReferenceValue);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PROPERTY_SET: {
			IfcPropertySet ifcPropertySet = (IfcPropertySet) theEObject;
			T result = caseIfcPropertySet(ifcPropertySet);
			if (result == null)
				result = caseIfcPropertySetDefinition(ifcPropertySet);
			if (result == null)
				result = caseIfcPropertyDefinition(ifcPropertySet);
			if (result == null)
				result = caseIfcPropertySetDefinitionSelect(ifcPropertySet);
			if (result == null)
				result = caseIfcRoot(ifcPropertySet);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcPropertySet);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PROPERTY_SET_DEFINITION: {
			IfcPropertySetDefinition ifcPropertySetDefinition = (IfcPropertySetDefinition) theEObject;
			T result = caseIfcPropertySetDefinition(ifcPropertySetDefinition);
			if (result == null)
				result = caseIfcPropertyDefinition(ifcPropertySetDefinition);
			if (result == null)
				result = caseIfcPropertySetDefinitionSelect(ifcPropertySetDefinition);
			if (result == null)
				result = caseIfcRoot(ifcPropertySetDefinition);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcPropertySetDefinition);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PROPERTY_SET_TEMPLATE: {
			IfcPropertySetTemplate ifcPropertySetTemplate = (IfcPropertySetTemplate) theEObject;
			T result = caseIfcPropertySetTemplate(ifcPropertySetTemplate);
			if (result == null)
				result = caseIfcPropertyTemplateDefinition(ifcPropertySetTemplate);
			if (result == null)
				result = caseIfcPropertyDefinition(ifcPropertySetTemplate);
			if (result == null)
				result = caseIfcRoot(ifcPropertySetTemplate);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcPropertySetTemplate);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PROPERTY_SINGLE_VALUE: {
			IfcPropertySingleValue ifcPropertySingleValue = (IfcPropertySingleValue) theEObject;
			T result = caseIfcPropertySingleValue(ifcPropertySingleValue);
			if (result == null)
				result = caseIfcSimpleProperty(ifcPropertySingleValue);
			if (result == null)
				result = caseIfcProperty(ifcPropertySingleValue);
			if (result == null)
				result = caseIfcPropertyAbstraction(ifcPropertySingleValue);
			if (result == null)
				result = caseIfcResourceObjectSelect(ifcPropertySingleValue);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PROPERTY_TABLE_VALUE: {
			IfcPropertyTableValue ifcPropertyTableValue = (IfcPropertyTableValue) theEObject;
			T result = caseIfcPropertyTableValue(ifcPropertyTableValue);
			if (result == null)
				result = caseIfcSimpleProperty(ifcPropertyTableValue);
			if (result == null)
				result = caseIfcProperty(ifcPropertyTableValue);
			if (result == null)
				result = caseIfcPropertyAbstraction(ifcPropertyTableValue);
			if (result == null)
				result = caseIfcResourceObjectSelect(ifcPropertyTableValue);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PROPERTY_TEMPLATE: {
			IfcPropertyTemplate ifcPropertyTemplate = (IfcPropertyTemplate) theEObject;
			T result = caseIfcPropertyTemplate(ifcPropertyTemplate);
			if (result == null)
				result = caseIfcPropertyTemplateDefinition(ifcPropertyTemplate);
			if (result == null)
				result = caseIfcPropertyDefinition(ifcPropertyTemplate);
			if (result == null)
				result = caseIfcRoot(ifcPropertyTemplate);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcPropertyTemplate);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PROPERTY_TEMPLATE_DEFINITION: {
			IfcPropertyTemplateDefinition ifcPropertyTemplateDefinition = (IfcPropertyTemplateDefinition) theEObject;
			T result = caseIfcPropertyTemplateDefinition(ifcPropertyTemplateDefinition);
			if (result == null)
				result = caseIfcPropertyDefinition(ifcPropertyTemplateDefinition);
			if (result == null)
				result = caseIfcRoot(ifcPropertyTemplateDefinition);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcPropertyTemplateDefinition);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PROTECTIVE_DEVICE: {
			IfcProtectiveDevice ifcProtectiveDevice = (IfcProtectiveDevice) theEObject;
			T result = caseIfcProtectiveDevice(ifcProtectiveDevice);
			if (result == null)
				result = caseIfcFlowController(ifcProtectiveDevice);
			if (result == null)
				result = caseIfcDistributionFlowElement(ifcProtectiveDevice);
			if (result == null)
				result = caseIfcDistributionElement(ifcProtectiveDevice);
			if (result == null)
				result = caseIfcElement(ifcProtectiveDevice);
			if (result == null)
				result = caseIfcProduct(ifcProtectiveDevice);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcProtectiveDevice);
			if (result == null)
				result = caseIfcObject(ifcProtectiveDevice);
			if (result == null)
				result = caseIfcProductSelect(ifcProtectiveDevice);
			if (result == null)
				result = caseIfcObjectDefinition(ifcProtectiveDevice);
			if (result == null)
				result = caseIfcRoot(ifcProtectiveDevice);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcProtectiveDevice);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PROTECTIVE_DEVICE_TRIPPING_UNIT: {
			IfcProtectiveDeviceTrippingUnit ifcProtectiveDeviceTrippingUnit = (IfcProtectiveDeviceTrippingUnit) theEObject;
			T result = caseIfcProtectiveDeviceTrippingUnit(ifcProtectiveDeviceTrippingUnit);
			if (result == null)
				result = caseIfcDistributionControlElement(ifcProtectiveDeviceTrippingUnit);
			if (result == null)
				result = caseIfcDistributionElement(ifcProtectiveDeviceTrippingUnit);
			if (result == null)
				result = caseIfcElement(ifcProtectiveDeviceTrippingUnit);
			if (result == null)
				result = caseIfcProduct(ifcProtectiveDeviceTrippingUnit);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcProtectiveDeviceTrippingUnit);
			if (result == null)
				result = caseIfcObject(ifcProtectiveDeviceTrippingUnit);
			if (result == null)
				result = caseIfcProductSelect(ifcProtectiveDeviceTrippingUnit);
			if (result == null)
				result = caseIfcObjectDefinition(ifcProtectiveDeviceTrippingUnit);
			if (result == null)
				result = caseIfcRoot(ifcProtectiveDeviceTrippingUnit);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcProtectiveDeviceTrippingUnit);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PROTECTIVE_DEVICE_TRIPPING_UNIT_TYPE: {
			IfcProtectiveDeviceTrippingUnitType ifcProtectiveDeviceTrippingUnitType = (IfcProtectiveDeviceTrippingUnitType) theEObject;
			T result = caseIfcProtectiveDeviceTrippingUnitType(ifcProtectiveDeviceTrippingUnitType);
			if (result == null)
				result = caseIfcDistributionControlElementType(ifcProtectiveDeviceTrippingUnitType);
			if (result == null)
				result = caseIfcDistributionElementType(ifcProtectiveDeviceTrippingUnitType);
			if (result == null)
				result = caseIfcElementType(ifcProtectiveDeviceTrippingUnitType);
			if (result == null)
				result = caseIfcTypeProduct(ifcProtectiveDeviceTrippingUnitType);
			if (result == null)
				result = caseIfcTypeObject(ifcProtectiveDeviceTrippingUnitType);
			if (result == null)
				result = caseIfcProductSelect(ifcProtectiveDeviceTrippingUnitType);
			if (result == null)
				result = caseIfcObjectDefinition(ifcProtectiveDeviceTrippingUnitType);
			if (result == null)
				result = caseIfcRoot(ifcProtectiveDeviceTrippingUnitType);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcProtectiveDeviceTrippingUnitType);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PROTECTIVE_DEVICE_TYPE: {
			IfcProtectiveDeviceType ifcProtectiveDeviceType = (IfcProtectiveDeviceType) theEObject;
			T result = caseIfcProtectiveDeviceType(ifcProtectiveDeviceType);
			if (result == null)
				result = caseIfcFlowControllerType(ifcProtectiveDeviceType);
			if (result == null)
				result = caseIfcDistributionFlowElementType(ifcProtectiveDeviceType);
			if (result == null)
				result = caseIfcDistributionElementType(ifcProtectiveDeviceType);
			if (result == null)
				result = caseIfcElementType(ifcProtectiveDeviceType);
			if (result == null)
				result = caseIfcTypeProduct(ifcProtectiveDeviceType);
			if (result == null)
				result = caseIfcTypeObject(ifcProtectiveDeviceType);
			if (result == null)
				result = caseIfcProductSelect(ifcProtectiveDeviceType);
			if (result == null)
				result = caseIfcObjectDefinition(ifcProtectiveDeviceType);
			if (result == null)
				result = caseIfcRoot(ifcProtectiveDeviceType);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcProtectiveDeviceType);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PROXY: {
			IfcProxy ifcProxy = (IfcProxy) theEObject;
			T result = caseIfcProxy(ifcProxy);
			if (result == null)
				result = caseIfcProduct(ifcProxy);
			if (result == null)
				result = caseIfcObject(ifcProxy);
			if (result == null)
				result = caseIfcProductSelect(ifcProxy);
			if (result == null)
				result = caseIfcObjectDefinition(ifcProxy);
			if (result == null)
				result = caseIfcRoot(ifcProxy);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcProxy);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PUMP: {
			IfcPump ifcPump = (IfcPump) theEObject;
			T result = caseIfcPump(ifcPump);
			if (result == null)
				result = caseIfcFlowMovingDevice(ifcPump);
			if (result == null)
				result = caseIfcDistributionFlowElement(ifcPump);
			if (result == null)
				result = caseIfcDistributionElement(ifcPump);
			if (result == null)
				result = caseIfcElement(ifcPump);
			if (result == null)
				result = caseIfcProduct(ifcPump);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcPump);
			if (result == null)
				result = caseIfcObject(ifcPump);
			if (result == null)
				result = caseIfcProductSelect(ifcPump);
			if (result == null)
				result = caseIfcObjectDefinition(ifcPump);
			if (result == null)
				result = caseIfcRoot(ifcPump);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcPump);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PUMP_TYPE: {
			IfcPumpType ifcPumpType = (IfcPumpType) theEObject;
			T result = caseIfcPumpType(ifcPumpType);
			if (result == null)
				result = caseIfcFlowMovingDeviceType(ifcPumpType);
			if (result == null)
				result = caseIfcDistributionFlowElementType(ifcPumpType);
			if (result == null)
				result = caseIfcDistributionElementType(ifcPumpType);
			if (result == null)
				result = caseIfcElementType(ifcPumpType);
			if (result == null)
				result = caseIfcTypeProduct(ifcPumpType);
			if (result == null)
				result = caseIfcTypeObject(ifcPumpType);
			if (result == null)
				result = caseIfcProductSelect(ifcPumpType);
			if (result == null)
				result = caseIfcObjectDefinition(ifcPumpType);
			if (result == null)
				result = caseIfcRoot(ifcPumpType);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcPumpType);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_QUANTITY_AREA: {
			IfcQuantityArea ifcQuantityArea = (IfcQuantityArea) theEObject;
			T result = caseIfcQuantityArea(ifcQuantityArea);
			if (result == null)
				result = caseIfcPhysicalSimpleQuantity(ifcQuantityArea);
			if (result == null)
				result = caseIfcPhysicalQuantity(ifcQuantityArea);
			if (result == null)
				result = caseIfcResourceObjectSelect(ifcQuantityArea);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_QUANTITY_COUNT: {
			IfcQuantityCount ifcQuantityCount = (IfcQuantityCount) theEObject;
			T result = caseIfcQuantityCount(ifcQuantityCount);
			if (result == null)
				result = caseIfcPhysicalSimpleQuantity(ifcQuantityCount);
			if (result == null)
				result = caseIfcPhysicalQuantity(ifcQuantityCount);
			if (result == null)
				result = caseIfcResourceObjectSelect(ifcQuantityCount);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_QUANTITY_LENGTH: {
			IfcQuantityLength ifcQuantityLength = (IfcQuantityLength) theEObject;
			T result = caseIfcQuantityLength(ifcQuantityLength);
			if (result == null)
				result = caseIfcPhysicalSimpleQuantity(ifcQuantityLength);
			if (result == null)
				result = caseIfcPhysicalQuantity(ifcQuantityLength);
			if (result == null)
				result = caseIfcResourceObjectSelect(ifcQuantityLength);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_QUANTITY_SET: {
			IfcQuantitySet ifcQuantitySet = (IfcQuantitySet) theEObject;
			T result = caseIfcQuantitySet(ifcQuantitySet);
			if (result == null)
				result = caseIfcPropertySetDefinition(ifcQuantitySet);
			if (result == null)
				result = caseIfcPropertyDefinition(ifcQuantitySet);
			if (result == null)
				result = caseIfcPropertySetDefinitionSelect(ifcQuantitySet);
			if (result == null)
				result = caseIfcRoot(ifcQuantitySet);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcQuantitySet);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_QUANTITY_TIME: {
			IfcQuantityTime ifcQuantityTime = (IfcQuantityTime) theEObject;
			T result = caseIfcQuantityTime(ifcQuantityTime);
			if (result == null)
				result = caseIfcPhysicalSimpleQuantity(ifcQuantityTime);
			if (result == null)
				result = caseIfcPhysicalQuantity(ifcQuantityTime);
			if (result == null)
				result = caseIfcResourceObjectSelect(ifcQuantityTime);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_QUANTITY_VOLUME: {
			IfcQuantityVolume ifcQuantityVolume = (IfcQuantityVolume) theEObject;
			T result = caseIfcQuantityVolume(ifcQuantityVolume);
			if (result == null)
				result = caseIfcPhysicalSimpleQuantity(ifcQuantityVolume);
			if (result == null)
				result = caseIfcPhysicalQuantity(ifcQuantityVolume);
			if (result == null)
				result = caseIfcResourceObjectSelect(ifcQuantityVolume);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_QUANTITY_WEIGHT: {
			IfcQuantityWeight ifcQuantityWeight = (IfcQuantityWeight) theEObject;
			T result = caseIfcQuantityWeight(ifcQuantityWeight);
			if (result == null)
				result = caseIfcPhysicalSimpleQuantity(ifcQuantityWeight);
			if (result == null)
				result = caseIfcPhysicalQuantity(ifcQuantityWeight);
			if (result == null)
				result = caseIfcResourceObjectSelect(ifcQuantityWeight);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_RAILING: {
			IfcRailing ifcRailing = (IfcRailing) theEObject;
			T result = caseIfcRailing(ifcRailing);
			if (result == null)
				result = caseIfcBuildingElement(ifcRailing);
			if (result == null)
				result = caseIfcElement(ifcRailing);
			if (result == null)
				result = caseIfcProduct(ifcRailing);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcRailing);
			if (result == null)
				result = caseIfcObject(ifcRailing);
			if (result == null)
				result = caseIfcProductSelect(ifcRailing);
			if (result == null)
				result = caseIfcObjectDefinition(ifcRailing);
			if (result == null)
				result = caseIfcRoot(ifcRailing);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcRailing);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_RAILING_TYPE: {
			IfcRailingType ifcRailingType = (IfcRailingType) theEObject;
			T result = caseIfcRailingType(ifcRailingType);
			if (result == null)
				result = caseIfcBuildingElementType(ifcRailingType);
			if (result == null)
				result = caseIfcElementType(ifcRailingType);
			if (result == null)
				result = caseIfcTypeProduct(ifcRailingType);
			if (result == null)
				result = caseIfcTypeObject(ifcRailingType);
			if (result == null)
				result = caseIfcProductSelect(ifcRailingType);
			if (result == null)
				result = caseIfcObjectDefinition(ifcRailingType);
			if (result == null)
				result = caseIfcRoot(ifcRailingType);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcRailingType);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_RAMP: {
			IfcRamp ifcRamp = (IfcRamp) theEObject;
			T result = caseIfcRamp(ifcRamp);
			if (result == null)
				result = caseIfcBuildingElement(ifcRamp);
			if (result == null)
				result = caseIfcElement(ifcRamp);
			if (result == null)
				result = caseIfcProduct(ifcRamp);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcRamp);
			if (result == null)
				result = caseIfcObject(ifcRamp);
			if (result == null)
				result = caseIfcProductSelect(ifcRamp);
			if (result == null)
				result = caseIfcObjectDefinition(ifcRamp);
			if (result == null)
				result = caseIfcRoot(ifcRamp);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcRamp);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_RAMP_FLIGHT: {
			IfcRampFlight ifcRampFlight = (IfcRampFlight) theEObject;
			T result = caseIfcRampFlight(ifcRampFlight);
			if (result == null)
				result = caseIfcBuildingElement(ifcRampFlight);
			if (result == null)
				result = caseIfcElement(ifcRampFlight);
			if (result == null)
				result = caseIfcProduct(ifcRampFlight);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcRampFlight);
			if (result == null)
				result = caseIfcObject(ifcRampFlight);
			if (result == null)
				result = caseIfcProductSelect(ifcRampFlight);
			if (result == null)
				result = caseIfcObjectDefinition(ifcRampFlight);
			if (result == null)
				result = caseIfcRoot(ifcRampFlight);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcRampFlight);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_RAMP_FLIGHT_TYPE: {
			IfcRampFlightType ifcRampFlightType = (IfcRampFlightType) theEObject;
			T result = caseIfcRampFlightType(ifcRampFlightType);
			if (result == null)
				result = caseIfcBuildingElementType(ifcRampFlightType);
			if (result == null)
				result = caseIfcElementType(ifcRampFlightType);
			if (result == null)
				result = caseIfcTypeProduct(ifcRampFlightType);
			if (result == null)
				result = caseIfcTypeObject(ifcRampFlightType);
			if (result == null)
				result = caseIfcProductSelect(ifcRampFlightType);
			if (result == null)
				result = caseIfcObjectDefinition(ifcRampFlightType);
			if (result == null)
				result = caseIfcRoot(ifcRampFlightType);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcRampFlightType);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_RAMP_TYPE: {
			IfcRampType ifcRampType = (IfcRampType) theEObject;
			T result = caseIfcRampType(ifcRampType);
			if (result == null)
				result = caseIfcBuildingElementType(ifcRampType);
			if (result == null)
				result = caseIfcElementType(ifcRampType);
			if (result == null)
				result = caseIfcTypeProduct(ifcRampType);
			if (result == null)
				result = caseIfcTypeObject(ifcRampType);
			if (result == null)
				result = caseIfcProductSelect(ifcRampType);
			if (result == null)
				result = caseIfcObjectDefinition(ifcRampType);
			if (result == null)
				result = caseIfcRoot(ifcRampType);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcRampType);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_RATIONAL_BSPLINE_CURVE_WITH_KNOTS: {
			IfcRationalBSplineCurveWithKnots ifcRationalBSplineCurveWithKnots = (IfcRationalBSplineCurveWithKnots) theEObject;
			T result = caseIfcRationalBSplineCurveWithKnots(ifcRationalBSplineCurveWithKnots);
			if (result == null)
				result = caseIfcBSplineCurveWithKnots(ifcRationalBSplineCurveWithKnots);
			if (result == null)
				result = caseIfcBSplineCurve(ifcRationalBSplineCurveWithKnots);
			if (result == null)
				result = caseIfcBoundedCurve(ifcRationalBSplineCurveWithKnots);
			if (result == null)
				result = caseIfcCurve(ifcRationalBSplineCurveWithKnots);
			if (result == null)
				result = caseIfcCurveOrEdgeCurve(ifcRationalBSplineCurveWithKnots);
			if (result == null)
				result = caseIfcGeometricRepresentationItem(ifcRationalBSplineCurveWithKnots);
			if (result == null)
				result = caseIfcGeometricSetSelect(ifcRationalBSplineCurveWithKnots);
			if (result == null)
				result = caseIfcRepresentationItem(ifcRationalBSplineCurveWithKnots);
			if (result == null)
				result = caseIfcLayeredItem(ifcRationalBSplineCurveWithKnots);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_RATIONAL_BSPLINE_SURFACE_WITH_KNOTS: {
			IfcRationalBSplineSurfaceWithKnots ifcRationalBSplineSurfaceWithKnots = (IfcRationalBSplineSurfaceWithKnots) theEObject;
			T result = caseIfcRationalBSplineSurfaceWithKnots(ifcRationalBSplineSurfaceWithKnots);
			if (result == null)
				result = caseIfcBSplineSurfaceWithKnots(ifcRationalBSplineSurfaceWithKnots);
			if (result == null)
				result = caseIfcBSplineSurface(ifcRationalBSplineSurfaceWithKnots);
			if (result == null)
				result = caseIfcBoundedSurface(ifcRationalBSplineSurfaceWithKnots);
			if (result == null)
				result = caseIfcSurface(ifcRationalBSplineSurfaceWithKnots);
			if (result == null)
				result = caseIfcGeometricRepresentationItem(ifcRationalBSplineSurfaceWithKnots);
			if (result == null)
				result = caseIfcGeometricSetSelect(ifcRationalBSplineSurfaceWithKnots);
			if (result == null)
				result = caseIfcSurfaceOrFaceSurface(ifcRationalBSplineSurfaceWithKnots);
			if (result == null)
				result = caseIfcRepresentationItem(ifcRationalBSplineSurfaceWithKnots);
			if (result == null)
				result = caseIfcLayeredItem(ifcRationalBSplineSurfaceWithKnots);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_RECTANGLE_HOLLOW_PROFILE_DEF: {
			IfcRectangleHollowProfileDef ifcRectangleHollowProfileDef = (IfcRectangleHollowProfileDef) theEObject;
			T result = caseIfcRectangleHollowProfileDef(ifcRectangleHollowProfileDef);
			if (result == null)
				result = caseIfcRectangleProfileDef(ifcRectangleHollowProfileDef);
			if (result == null)
				result = caseIfcParameterizedProfileDef(ifcRectangleHollowProfileDef);
			if (result == null)
				result = caseIfcProfileDef(ifcRectangleHollowProfileDef);
			if (result == null)
				result = caseIfcResourceObjectSelect(ifcRectangleHollowProfileDef);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_RECTANGLE_PROFILE_DEF: {
			IfcRectangleProfileDef ifcRectangleProfileDef = (IfcRectangleProfileDef) theEObject;
			T result = caseIfcRectangleProfileDef(ifcRectangleProfileDef);
			if (result == null)
				result = caseIfcParameterizedProfileDef(ifcRectangleProfileDef);
			if (result == null)
				result = caseIfcProfileDef(ifcRectangleProfileDef);
			if (result == null)
				result = caseIfcResourceObjectSelect(ifcRectangleProfileDef);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_RECTANGULAR_PYRAMID: {
			IfcRectangularPyramid ifcRectangularPyramid = (IfcRectangularPyramid) theEObject;
			T result = caseIfcRectangularPyramid(ifcRectangularPyramid);
			if (result == null)
				result = caseIfcCsgPrimitive3D(ifcRectangularPyramid);
			if (result == null)
				result = caseIfcGeometricRepresentationItem(ifcRectangularPyramid);
			if (result == null)
				result = caseIfcBooleanOperand(ifcRectangularPyramid);
			if (result == null)
				result = caseIfcCsgSelect(ifcRectangularPyramid);
			if (result == null)
				result = caseIfcRepresentationItem(ifcRectangularPyramid);
			if (result == null)
				result = caseIfcLayeredItem(ifcRectangularPyramid);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_RECTANGULAR_TRIMMED_SURFACE: {
			IfcRectangularTrimmedSurface ifcRectangularTrimmedSurface = (IfcRectangularTrimmedSurface) theEObject;
			T result = caseIfcRectangularTrimmedSurface(ifcRectangularTrimmedSurface);
			if (result == null)
				result = caseIfcBoundedSurface(ifcRectangularTrimmedSurface);
			if (result == null)
				result = caseIfcSurface(ifcRectangularTrimmedSurface);
			if (result == null)
				result = caseIfcGeometricRepresentationItem(ifcRectangularTrimmedSurface);
			if (result == null)
				result = caseIfcGeometricSetSelect(ifcRectangularTrimmedSurface);
			if (result == null)
				result = caseIfcSurfaceOrFaceSurface(ifcRectangularTrimmedSurface);
			if (result == null)
				result = caseIfcRepresentationItem(ifcRectangularTrimmedSurface);
			if (result == null)
				result = caseIfcLayeredItem(ifcRectangularTrimmedSurface);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_RECURRENCE_PATTERN: {
			IfcRecurrencePattern ifcRecurrencePattern = (IfcRecurrencePattern) theEObject;
			T result = caseIfcRecurrencePattern(ifcRecurrencePattern);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REFERENCE: {
			IfcReference ifcReference = (IfcReference) theEObject;
			T result = caseIfcReference(ifcReference);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcReference);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcReference);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REGULAR_TIME_SERIES: {
			IfcRegularTimeSeries ifcRegularTimeSeries = (IfcRegularTimeSeries) theEObject;
			T result = caseIfcRegularTimeSeries(ifcRegularTimeSeries);
			if (result == null)
				result = caseIfcTimeSeries(ifcRegularTimeSeries);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcRegularTimeSeries);
			if (result == null)
				result = caseIfcObjectReferenceSelect(ifcRegularTimeSeries);
			if (result == null)
				result = caseIfcResourceObjectSelect(ifcRegularTimeSeries);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REINFORCEMENT_BAR_PROPERTIES: {
			IfcReinforcementBarProperties ifcReinforcementBarProperties = (IfcReinforcementBarProperties) theEObject;
			T result = caseIfcReinforcementBarProperties(ifcReinforcementBarProperties);
			if (result == null)
				result = caseIfcPreDefinedProperties(ifcReinforcementBarProperties);
			if (result == null)
				result = caseIfcPropertyAbstraction(ifcReinforcementBarProperties);
			if (result == null)
				result = caseIfcResourceObjectSelect(ifcReinforcementBarProperties);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REINFORCEMENT_DEFINITION_PROPERTIES: {
			IfcReinforcementDefinitionProperties ifcReinforcementDefinitionProperties = (IfcReinforcementDefinitionProperties) theEObject;
			T result = caseIfcReinforcementDefinitionProperties(ifcReinforcementDefinitionProperties);
			if (result == null)
				result = caseIfcPreDefinedPropertySet(ifcReinforcementDefinitionProperties);
			if (result == null)
				result = caseIfcPropertySetDefinition(ifcReinforcementDefinitionProperties);
			if (result == null)
				result = caseIfcPropertyDefinition(ifcReinforcementDefinitionProperties);
			if (result == null)
				result = caseIfcPropertySetDefinitionSelect(ifcReinforcementDefinitionProperties);
			if (result == null)
				result = caseIfcRoot(ifcReinforcementDefinitionProperties);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcReinforcementDefinitionProperties);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REINFORCING_BAR: {
			IfcReinforcingBar ifcReinforcingBar = (IfcReinforcingBar) theEObject;
			T result = caseIfcReinforcingBar(ifcReinforcingBar);
			if (result == null)
				result = caseIfcReinforcingElement(ifcReinforcingBar);
			if (result == null)
				result = caseIfcElementComponent(ifcReinforcingBar);
			if (result == null)
				result = caseIfcElement(ifcReinforcingBar);
			if (result == null)
				result = caseIfcProduct(ifcReinforcingBar);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcReinforcingBar);
			if (result == null)
				result = caseIfcObject(ifcReinforcingBar);
			if (result == null)
				result = caseIfcProductSelect(ifcReinforcingBar);
			if (result == null)
				result = caseIfcObjectDefinition(ifcReinforcingBar);
			if (result == null)
				result = caseIfcRoot(ifcReinforcingBar);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcReinforcingBar);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REINFORCING_BAR_TYPE: {
			IfcReinforcingBarType ifcReinforcingBarType = (IfcReinforcingBarType) theEObject;
			T result = caseIfcReinforcingBarType(ifcReinforcingBarType);
			if (result == null)
				result = caseIfcReinforcingElementType(ifcReinforcingBarType);
			if (result == null)
				result = caseIfcElementComponentType(ifcReinforcingBarType);
			if (result == null)
				result = caseIfcElementType(ifcReinforcingBarType);
			if (result == null)
				result = caseIfcTypeProduct(ifcReinforcingBarType);
			if (result == null)
				result = caseIfcTypeObject(ifcReinforcingBarType);
			if (result == null)
				result = caseIfcProductSelect(ifcReinforcingBarType);
			if (result == null)
				result = caseIfcObjectDefinition(ifcReinforcingBarType);
			if (result == null)
				result = caseIfcRoot(ifcReinforcingBarType);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcReinforcingBarType);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REINFORCING_ELEMENT: {
			IfcReinforcingElement ifcReinforcingElement = (IfcReinforcingElement) theEObject;
			T result = caseIfcReinforcingElement(ifcReinforcingElement);
			if (result == null)
				result = caseIfcElementComponent(ifcReinforcingElement);
			if (result == null)
				result = caseIfcElement(ifcReinforcingElement);
			if (result == null)
				result = caseIfcProduct(ifcReinforcingElement);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcReinforcingElement);
			if (result == null)
				result = caseIfcObject(ifcReinforcingElement);
			if (result == null)
				result = caseIfcProductSelect(ifcReinforcingElement);
			if (result == null)
				result = caseIfcObjectDefinition(ifcReinforcingElement);
			if (result == null)
				result = caseIfcRoot(ifcReinforcingElement);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcReinforcingElement);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REINFORCING_ELEMENT_TYPE: {
			IfcReinforcingElementType ifcReinforcingElementType = (IfcReinforcingElementType) theEObject;
			T result = caseIfcReinforcingElementType(ifcReinforcingElementType);
			if (result == null)
				result = caseIfcElementComponentType(ifcReinforcingElementType);
			if (result == null)
				result = caseIfcElementType(ifcReinforcingElementType);
			if (result == null)
				result = caseIfcTypeProduct(ifcReinforcingElementType);
			if (result == null)
				result = caseIfcTypeObject(ifcReinforcingElementType);
			if (result == null)
				result = caseIfcProductSelect(ifcReinforcingElementType);
			if (result == null)
				result = caseIfcObjectDefinition(ifcReinforcingElementType);
			if (result == null)
				result = caseIfcRoot(ifcReinforcingElementType);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcReinforcingElementType);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REINFORCING_MESH: {
			IfcReinforcingMesh ifcReinforcingMesh = (IfcReinforcingMesh) theEObject;
			T result = caseIfcReinforcingMesh(ifcReinforcingMesh);
			if (result == null)
				result = caseIfcReinforcingElement(ifcReinforcingMesh);
			if (result == null)
				result = caseIfcElementComponent(ifcReinforcingMesh);
			if (result == null)
				result = caseIfcElement(ifcReinforcingMesh);
			if (result == null)
				result = caseIfcProduct(ifcReinforcingMesh);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcReinforcingMesh);
			if (result == null)
				result = caseIfcObject(ifcReinforcingMesh);
			if (result == null)
				result = caseIfcProductSelect(ifcReinforcingMesh);
			if (result == null)
				result = caseIfcObjectDefinition(ifcReinforcingMesh);
			if (result == null)
				result = caseIfcRoot(ifcReinforcingMesh);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcReinforcingMesh);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REINFORCING_MESH_TYPE: {
			IfcReinforcingMeshType ifcReinforcingMeshType = (IfcReinforcingMeshType) theEObject;
			T result = caseIfcReinforcingMeshType(ifcReinforcingMeshType);
			if (result == null)
				result = caseIfcReinforcingElementType(ifcReinforcingMeshType);
			if (result == null)
				result = caseIfcElementComponentType(ifcReinforcingMeshType);
			if (result == null)
				result = caseIfcElementType(ifcReinforcingMeshType);
			if (result == null)
				result = caseIfcTypeProduct(ifcReinforcingMeshType);
			if (result == null)
				result = caseIfcTypeObject(ifcReinforcingMeshType);
			if (result == null)
				result = caseIfcProductSelect(ifcReinforcingMeshType);
			if (result == null)
				result = caseIfcObjectDefinition(ifcReinforcingMeshType);
			if (result == null)
				result = caseIfcRoot(ifcReinforcingMeshType);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcReinforcingMeshType);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REL_AGGREGATES: {
			IfcRelAggregates ifcRelAggregates = (IfcRelAggregates) theEObject;
			T result = caseIfcRelAggregates(ifcRelAggregates);
			if (result == null)
				result = caseIfcRelDecomposes(ifcRelAggregates);
			if (result == null)
				result = caseIfcRelationship(ifcRelAggregates);
			if (result == null)
				result = caseIfcRoot(ifcRelAggregates);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REL_ASSIGNS: {
			IfcRelAssigns ifcRelAssigns = (IfcRelAssigns) theEObject;
			T result = caseIfcRelAssigns(ifcRelAssigns);
			if (result == null)
				result = caseIfcRelationship(ifcRelAssigns);
			if (result == null)
				result = caseIfcRoot(ifcRelAssigns);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REL_ASSIGNS_TO_ACTOR: {
			IfcRelAssignsToActor ifcRelAssignsToActor = (IfcRelAssignsToActor) theEObject;
			T result = caseIfcRelAssignsToActor(ifcRelAssignsToActor);
			if (result == null)
				result = caseIfcRelAssigns(ifcRelAssignsToActor);
			if (result == null)
				result = caseIfcRelationship(ifcRelAssignsToActor);
			if (result == null)
				result = caseIfcRoot(ifcRelAssignsToActor);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REL_ASSIGNS_TO_CONTROL: {
			IfcRelAssignsToControl ifcRelAssignsToControl = (IfcRelAssignsToControl) theEObject;
			T result = caseIfcRelAssignsToControl(ifcRelAssignsToControl);
			if (result == null)
				result = caseIfcRelAssigns(ifcRelAssignsToControl);
			if (result == null)
				result = caseIfcRelationship(ifcRelAssignsToControl);
			if (result == null)
				result = caseIfcRoot(ifcRelAssignsToControl);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REL_ASSIGNS_TO_GROUP: {
			IfcRelAssignsToGroup ifcRelAssignsToGroup = (IfcRelAssignsToGroup) theEObject;
			T result = caseIfcRelAssignsToGroup(ifcRelAssignsToGroup);
			if (result == null)
				result = caseIfcRelAssigns(ifcRelAssignsToGroup);
			if (result == null)
				result = caseIfcRelationship(ifcRelAssignsToGroup);
			if (result == null)
				result = caseIfcRoot(ifcRelAssignsToGroup);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REL_ASSIGNS_TO_GROUP_BY_FACTOR: {
			IfcRelAssignsToGroupByFactor ifcRelAssignsToGroupByFactor = (IfcRelAssignsToGroupByFactor) theEObject;
			T result = caseIfcRelAssignsToGroupByFactor(ifcRelAssignsToGroupByFactor);
			if (result == null)
				result = caseIfcRelAssignsToGroup(ifcRelAssignsToGroupByFactor);
			if (result == null)
				result = caseIfcRelAssigns(ifcRelAssignsToGroupByFactor);
			if (result == null)
				result = caseIfcRelationship(ifcRelAssignsToGroupByFactor);
			if (result == null)
				result = caseIfcRoot(ifcRelAssignsToGroupByFactor);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REL_ASSIGNS_TO_PROCESS: {
			IfcRelAssignsToProcess ifcRelAssignsToProcess = (IfcRelAssignsToProcess) theEObject;
			T result = caseIfcRelAssignsToProcess(ifcRelAssignsToProcess);
			if (result == null)
				result = caseIfcRelAssigns(ifcRelAssignsToProcess);
			if (result == null)
				result = caseIfcRelationship(ifcRelAssignsToProcess);
			if (result == null)
				result = caseIfcRoot(ifcRelAssignsToProcess);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REL_ASSIGNS_TO_PRODUCT: {
			IfcRelAssignsToProduct ifcRelAssignsToProduct = (IfcRelAssignsToProduct) theEObject;
			T result = caseIfcRelAssignsToProduct(ifcRelAssignsToProduct);
			if (result == null)
				result = caseIfcRelAssigns(ifcRelAssignsToProduct);
			if (result == null)
				result = caseIfcRelationship(ifcRelAssignsToProduct);
			if (result == null)
				result = caseIfcRoot(ifcRelAssignsToProduct);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REL_ASSIGNS_TO_RESOURCE: {
			IfcRelAssignsToResource ifcRelAssignsToResource = (IfcRelAssignsToResource) theEObject;
			T result = caseIfcRelAssignsToResource(ifcRelAssignsToResource);
			if (result == null)
				result = caseIfcRelAssigns(ifcRelAssignsToResource);
			if (result == null)
				result = caseIfcRelationship(ifcRelAssignsToResource);
			if (result == null)
				result = caseIfcRoot(ifcRelAssignsToResource);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REL_ASSOCIATES: {
			IfcRelAssociates ifcRelAssociates = (IfcRelAssociates) theEObject;
			T result = caseIfcRelAssociates(ifcRelAssociates);
			if (result == null)
				result = caseIfcRelationship(ifcRelAssociates);
			if (result == null)
				result = caseIfcRoot(ifcRelAssociates);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REL_ASSOCIATES_APPROVAL: {
			IfcRelAssociatesApproval ifcRelAssociatesApproval = (IfcRelAssociatesApproval) theEObject;
			T result = caseIfcRelAssociatesApproval(ifcRelAssociatesApproval);
			if (result == null)
				result = caseIfcRelAssociates(ifcRelAssociatesApproval);
			if (result == null)
				result = caseIfcRelationship(ifcRelAssociatesApproval);
			if (result == null)
				result = caseIfcRoot(ifcRelAssociatesApproval);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REL_ASSOCIATES_CLASSIFICATION: {
			IfcRelAssociatesClassification ifcRelAssociatesClassification = (IfcRelAssociatesClassification) theEObject;
			T result = caseIfcRelAssociatesClassification(ifcRelAssociatesClassification);
			if (result == null)
				result = caseIfcRelAssociates(ifcRelAssociatesClassification);
			if (result == null)
				result = caseIfcRelationship(ifcRelAssociatesClassification);
			if (result == null)
				result = caseIfcRoot(ifcRelAssociatesClassification);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REL_ASSOCIATES_CONSTRAINT: {
			IfcRelAssociatesConstraint ifcRelAssociatesConstraint = (IfcRelAssociatesConstraint) theEObject;
			T result = caseIfcRelAssociatesConstraint(ifcRelAssociatesConstraint);
			if (result == null)
				result = caseIfcRelAssociates(ifcRelAssociatesConstraint);
			if (result == null)
				result = caseIfcRelationship(ifcRelAssociatesConstraint);
			if (result == null)
				result = caseIfcRoot(ifcRelAssociatesConstraint);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REL_ASSOCIATES_DOCUMENT: {
			IfcRelAssociatesDocument ifcRelAssociatesDocument = (IfcRelAssociatesDocument) theEObject;
			T result = caseIfcRelAssociatesDocument(ifcRelAssociatesDocument);
			if (result == null)
				result = caseIfcRelAssociates(ifcRelAssociatesDocument);
			if (result == null)
				result = caseIfcRelationship(ifcRelAssociatesDocument);
			if (result == null)
				result = caseIfcRoot(ifcRelAssociatesDocument);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REL_ASSOCIATES_LIBRARY: {
			IfcRelAssociatesLibrary ifcRelAssociatesLibrary = (IfcRelAssociatesLibrary) theEObject;
			T result = caseIfcRelAssociatesLibrary(ifcRelAssociatesLibrary);
			if (result == null)
				result = caseIfcRelAssociates(ifcRelAssociatesLibrary);
			if (result == null)
				result = caseIfcRelationship(ifcRelAssociatesLibrary);
			if (result == null)
				result = caseIfcRoot(ifcRelAssociatesLibrary);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REL_ASSOCIATES_MATERIAL: {
			IfcRelAssociatesMaterial ifcRelAssociatesMaterial = (IfcRelAssociatesMaterial) theEObject;
			T result = caseIfcRelAssociatesMaterial(ifcRelAssociatesMaterial);
			if (result == null)
				result = caseIfcRelAssociates(ifcRelAssociatesMaterial);
			if (result == null)
				result = caseIfcRelationship(ifcRelAssociatesMaterial);
			if (result == null)
				result = caseIfcRoot(ifcRelAssociatesMaterial);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REL_CONNECTS: {
			IfcRelConnects ifcRelConnects = (IfcRelConnects) theEObject;
			T result = caseIfcRelConnects(ifcRelConnects);
			if (result == null)
				result = caseIfcRelationship(ifcRelConnects);
			if (result == null)
				result = caseIfcRoot(ifcRelConnects);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REL_CONNECTS_ELEMENTS: {
			IfcRelConnectsElements ifcRelConnectsElements = (IfcRelConnectsElements) theEObject;
			T result = caseIfcRelConnectsElements(ifcRelConnectsElements);
			if (result == null)
				result = caseIfcRelConnects(ifcRelConnectsElements);
			if (result == null)
				result = caseIfcRelationship(ifcRelConnectsElements);
			if (result == null)
				result = caseIfcRoot(ifcRelConnectsElements);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REL_CONNECTS_PATH_ELEMENTS: {
			IfcRelConnectsPathElements ifcRelConnectsPathElements = (IfcRelConnectsPathElements) theEObject;
			T result = caseIfcRelConnectsPathElements(ifcRelConnectsPathElements);
			if (result == null)
				result = caseIfcRelConnectsElements(ifcRelConnectsPathElements);
			if (result == null)
				result = caseIfcRelConnects(ifcRelConnectsPathElements);
			if (result == null)
				result = caseIfcRelationship(ifcRelConnectsPathElements);
			if (result == null)
				result = caseIfcRoot(ifcRelConnectsPathElements);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REL_CONNECTS_PORT_TO_ELEMENT: {
			IfcRelConnectsPortToElement ifcRelConnectsPortToElement = (IfcRelConnectsPortToElement) theEObject;
			T result = caseIfcRelConnectsPortToElement(ifcRelConnectsPortToElement);
			if (result == null)
				result = caseIfcRelConnects(ifcRelConnectsPortToElement);
			if (result == null)
				result = caseIfcRelationship(ifcRelConnectsPortToElement);
			if (result == null)
				result = caseIfcRoot(ifcRelConnectsPortToElement);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REL_CONNECTS_PORTS: {
			IfcRelConnectsPorts ifcRelConnectsPorts = (IfcRelConnectsPorts) theEObject;
			T result = caseIfcRelConnectsPorts(ifcRelConnectsPorts);
			if (result == null)
				result = caseIfcRelConnects(ifcRelConnectsPorts);
			if (result == null)
				result = caseIfcRelationship(ifcRelConnectsPorts);
			if (result == null)
				result = caseIfcRoot(ifcRelConnectsPorts);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REL_CONNECTS_STRUCTURAL_ACTIVITY: {
			IfcRelConnectsStructuralActivity ifcRelConnectsStructuralActivity = (IfcRelConnectsStructuralActivity) theEObject;
			T result = caseIfcRelConnectsStructuralActivity(ifcRelConnectsStructuralActivity);
			if (result == null)
				result = caseIfcRelConnects(ifcRelConnectsStructuralActivity);
			if (result == null)
				result = caseIfcRelationship(ifcRelConnectsStructuralActivity);
			if (result == null)
				result = caseIfcRoot(ifcRelConnectsStructuralActivity);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REL_CONNECTS_STRUCTURAL_MEMBER: {
			IfcRelConnectsStructuralMember ifcRelConnectsStructuralMember = (IfcRelConnectsStructuralMember) theEObject;
			T result = caseIfcRelConnectsStructuralMember(ifcRelConnectsStructuralMember);
			if (result == null)
				result = caseIfcRelConnects(ifcRelConnectsStructuralMember);
			if (result == null)
				result = caseIfcRelationship(ifcRelConnectsStructuralMember);
			if (result == null)
				result = caseIfcRoot(ifcRelConnectsStructuralMember);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REL_CONNECTS_WITH_ECCENTRICITY: {
			IfcRelConnectsWithEccentricity ifcRelConnectsWithEccentricity = (IfcRelConnectsWithEccentricity) theEObject;
			T result = caseIfcRelConnectsWithEccentricity(ifcRelConnectsWithEccentricity);
			if (result == null)
				result = caseIfcRelConnectsStructuralMember(ifcRelConnectsWithEccentricity);
			if (result == null)
				result = caseIfcRelConnects(ifcRelConnectsWithEccentricity);
			if (result == null)
				result = caseIfcRelationship(ifcRelConnectsWithEccentricity);
			if (result == null)
				result = caseIfcRoot(ifcRelConnectsWithEccentricity);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REL_CONNECTS_WITH_REALIZING_ELEMENTS: {
			IfcRelConnectsWithRealizingElements ifcRelConnectsWithRealizingElements = (IfcRelConnectsWithRealizingElements) theEObject;
			T result = caseIfcRelConnectsWithRealizingElements(ifcRelConnectsWithRealizingElements);
			if (result == null)
				result = caseIfcRelConnectsElements(ifcRelConnectsWithRealizingElements);
			if (result == null)
				result = caseIfcRelConnects(ifcRelConnectsWithRealizingElements);
			if (result == null)
				result = caseIfcRelationship(ifcRelConnectsWithRealizingElements);
			if (result == null)
				result = caseIfcRoot(ifcRelConnectsWithRealizingElements);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REL_CONTAINED_IN_SPATIAL_STRUCTURE: {
			IfcRelContainedInSpatialStructure ifcRelContainedInSpatialStructure = (IfcRelContainedInSpatialStructure) theEObject;
			T result = caseIfcRelContainedInSpatialStructure(ifcRelContainedInSpatialStructure);
			if (result == null)
				result = caseIfcRelConnects(ifcRelContainedInSpatialStructure);
			if (result == null)
				result = caseIfcRelationship(ifcRelContainedInSpatialStructure);
			if (result == null)
				result = caseIfcRoot(ifcRelContainedInSpatialStructure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REL_COVERS_BLDG_ELEMENTS: {
			IfcRelCoversBldgElements ifcRelCoversBldgElements = (IfcRelCoversBldgElements) theEObject;
			T result = caseIfcRelCoversBldgElements(ifcRelCoversBldgElements);
			if (result == null)
				result = caseIfcRelConnects(ifcRelCoversBldgElements);
			if (result == null)
				result = caseIfcRelationship(ifcRelCoversBldgElements);
			if (result == null)
				result = caseIfcRoot(ifcRelCoversBldgElements);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REL_COVERS_SPACES: {
			IfcRelCoversSpaces ifcRelCoversSpaces = (IfcRelCoversSpaces) theEObject;
			T result = caseIfcRelCoversSpaces(ifcRelCoversSpaces);
			if (result == null)
				result = caseIfcRelConnects(ifcRelCoversSpaces);
			if (result == null)
				result = caseIfcRelationship(ifcRelCoversSpaces);
			if (result == null)
				result = caseIfcRoot(ifcRelCoversSpaces);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REL_DECLARES: {
			IfcRelDeclares ifcRelDeclares = (IfcRelDeclares) theEObject;
			T result = caseIfcRelDeclares(ifcRelDeclares);
			if (result == null)
				result = caseIfcRelationship(ifcRelDeclares);
			if (result == null)
				result = caseIfcRoot(ifcRelDeclares);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REL_DECOMPOSES: {
			IfcRelDecomposes ifcRelDecomposes = (IfcRelDecomposes) theEObject;
			T result = caseIfcRelDecomposes(ifcRelDecomposes);
			if (result == null)
				result = caseIfcRelationship(ifcRelDecomposes);
			if (result == null)
				result = caseIfcRoot(ifcRelDecomposes);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REL_DEFINES: {
			IfcRelDefines ifcRelDefines = (IfcRelDefines) theEObject;
			T result = caseIfcRelDefines(ifcRelDefines);
			if (result == null)
				result = caseIfcRelationship(ifcRelDefines);
			if (result == null)
				result = caseIfcRoot(ifcRelDefines);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REL_DEFINES_BY_OBJECT: {
			IfcRelDefinesByObject ifcRelDefinesByObject = (IfcRelDefinesByObject) theEObject;
			T result = caseIfcRelDefinesByObject(ifcRelDefinesByObject);
			if (result == null)
				result = caseIfcRelDefines(ifcRelDefinesByObject);
			if (result == null)
				result = caseIfcRelationship(ifcRelDefinesByObject);
			if (result == null)
				result = caseIfcRoot(ifcRelDefinesByObject);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REL_DEFINES_BY_PROPERTIES: {
			IfcRelDefinesByProperties ifcRelDefinesByProperties = (IfcRelDefinesByProperties) theEObject;
			T result = caseIfcRelDefinesByProperties(ifcRelDefinesByProperties);
			if (result == null)
				result = caseIfcRelDefines(ifcRelDefinesByProperties);
			if (result == null)
				result = caseIfcRelationship(ifcRelDefinesByProperties);
			if (result == null)
				result = caseIfcRoot(ifcRelDefinesByProperties);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REL_DEFINES_BY_TEMPLATE: {
			IfcRelDefinesByTemplate ifcRelDefinesByTemplate = (IfcRelDefinesByTemplate) theEObject;
			T result = caseIfcRelDefinesByTemplate(ifcRelDefinesByTemplate);
			if (result == null)
				result = caseIfcRelDefines(ifcRelDefinesByTemplate);
			if (result == null)
				result = caseIfcRelationship(ifcRelDefinesByTemplate);
			if (result == null)
				result = caseIfcRoot(ifcRelDefinesByTemplate);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REL_DEFINES_BY_TYPE: {
			IfcRelDefinesByType ifcRelDefinesByType = (IfcRelDefinesByType) theEObject;
			T result = caseIfcRelDefinesByType(ifcRelDefinesByType);
			if (result == null)
				result = caseIfcRelDefines(ifcRelDefinesByType);
			if (result == null)
				result = caseIfcRelationship(ifcRelDefinesByType);
			if (result == null)
				result = caseIfcRoot(ifcRelDefinesByType);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REL_FILLS_ELEMENT: {
			IfcRelFillsElement ifcRelFillsElement = (IfcRelFillsElement) theEObject;
			T result = caseIfcRelFillsElement(ifcRelFillsElement);
			if (result == null)
				result = caseIfcRelConnects(ifcRelFillsElement);
			if (result == null)
				result = caseIfcRelationship(ifcRelFillsElement);
			if (result == null)
				result = caseIfcRoot(ifcRelFillsElement);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REL_FLOW_CONTROL_ELEMENTS: {
			IfcRelFlowControlElements ifcRelFlowControlElements = (IfcRelFlowControlElements) theEObject;
			T result = caseIfcRelFlowControlElements(ifcRelFlowControlElements);
			if (result == null)
				result = caseIfcRelConnects(ifcRelFlowControlElements);
			if (result == null)
				result = caseIfcRelationship(ifcRelFlowControlElements);
			if (result == null)
				result = caseIfcRoot(ifcRelFlowControlElements);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REL_INTERFERES_ELEMENTS: {
			IfcRelInterferesElements ifcRelInterferesElements = (IfcRelInterferesElements) theEObject;
			T result = caseIfcRelInterferesElements(ifcRelInterferesElements);
			if (result == null)
				result = caseIfcRelConnects(ifcRelInterferesElements);
			if (result == null)
				result = caseIfcRelationship(ifcRelInterferesElements);
			if (result == null)
				result = caseIfcRoot(ifcRelInterferesElements);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REL_NESTS: {
			IfcRelNests ifcRelNests = (IfcRelNests) theEObject;
			T result = caseIfcRelNests(ifcRelNests);
			if (result == null)
				result = caseIfcRelDecomposes(ifcRelNests);
			if (result == null)
				result = caseIfcRelationship(ifcRelNests);
			if (result == null)
				result = caseIfcRoot(ifcRelNests);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REL_PROJECTS_ELEMENT: {
			IfcRelProjectsElement ifcRelProjectsElement = (IfcRelProjectsElement) theEObject;
			T result = caseIfcRelProjectsElement(ifcRelProjectsElement);
			if (result == null)
				result = caseIfcRelDecomposes(ifcRelProjectsElement);
			if (result == null)
				result = caseIfcRelationship(ifcRelProjectsElement);
			if (result == null)
				result = caseIfcRoot(ifcRelProjectsElement);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REL_REFERENCED_IN_SPATIAL_STRUCTURE: {
			IfcRelReferencedInSpatialStructure ifcRelReferencedInSpatialStructure = (IfcRelReferencedInSpatialStructure) theEObject;
			T result = caseIfcRelReferencedInSpatialStructure(ifcRelReferencedInSpatialStructure);
			if (result == null)
				result = caseIfcRelConnects(ifcRelReferencedInSpatialStructure);
			if (result == null)
				result = caseIfcRelationship(ifcRelReferencedInSpatialStructure);
			if (result == null)
				result = caseIfcRoot(ifcRelReferencedInSpatialStructure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REL_SEQUENCE: {
			IfcRelSequence ifcRelSequence = (IfcRelSequence) theEObject;
			T result = caseIfcRelSequence(ifcRelSequence);
			if (result == null)
				result = caseIfcRelConnects(ifcRelSequence);
			if (result == null)
				result = caseIfcRelationship(ifcRelSequence);
			if (result == null)
				result = caseIfcRoot(ifcRelSequence);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REL_SERVICES_BUILDINGS: {
			IfcRelServicesBuildings ifcRelServicesBuildings = (IfcRelServicesBuildings) theEObject;
			T result = caseIfcRelServicesBuildings(ifcRelServicesBuildings);
			if (result == null)
				result = caseIfcRelConnects(ifcRelServicesBuildings);
			if (result == null)
				result = caseIfcRelationship(ifcRelServicesBuildings);
			if (result == null)
				result = caseIfcRoot(ifcRelServicesBuildings);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REL_SPACE_BOUNDARY: {
			IfcRelSpaceBoundary ifcRelSpaceBoundary = (IfcRelSpaceBoundary) theEObject;
			T result = caseIfcRelSpaceBoundary(ifcRelSpaceBoundary);
			if (result == null)
				result = caseIfcRelConnects(ifcRelSpaceBoundary);
			if (result == null)
				result = caseIfcRelationship(ifcRelSpaceBoundary);
			if (result == null)
				result = caseIfcRoot(ifcRelSpaceBoundary);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REL_SPACE_BOUNDARY1ST_LEVEL: {
			IfcRelSpaceBoundary1stLevel ifcRelSpaceBoundary1stLevel = (IfcRelSpaceBoundary1stLevel) theEObject;
			T result = caseIfcRelSpaceBoundary1stLevel(ifcRelSpaceBoundary1stLevel);
			if (result == null)
				result = caseIfcRelSpaceBoundary(ifcRelSpaceBoundary1stLevel);
			if (result == null)
				result = caseIfcRelConnects(ifcRelSpaceBoundary1stLevel);
			if (result == null)
				result = caseIfcRelationship(ifcRelSpaceBoundary1stLevel);
			if (result == null)
				result = caseIfcRoot(ifcRelSpaceBoundary1stLevel);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REL_SPACE_BOUNDARY2ND_LEVEL: {
			IfcRelSpaceBoundary2ndLevel ifcRelSpaceBoundary2ndLevel = (IfcRelSpaceBoundary2ndLevel) theEObject;
			T result = caseIfcRelSpaceBoundary2ndLevel(ifcRelSpaceBoundary2ndLevel);
			if (result == null)
				result = caseIfcRelSpaceBoundary1stLevel(ifcRelSpaceBoundary2ndLevel);
			if (result == null)
				result = caseIfcRelSpaceBoundary(ifcRelSpaceBoundary2ndLevel);
			if (result == null)
				result = caseIfcRelConnects(ifcRelSpaceBoundary2ndLevel);
			if (result == null)
				result = caseIfcRelationship(ifcRelSpaceBoundary2ndLevel);
			if (result == null)
				result = caseIfcRoot(ifcRelSpaceBoundary2ndLevel);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REL_VOIDS_ELEMENT: {
			IfcRelVoidsElement ifcRelVoidsElement = (IfcRelVoidsElement) theEObject;
			T result = caseIfcRelVoidsElement(ifcRelVoidsElement);
			if (result == null)
				result = caseIfcRelDecomposes(ifcRelVoidsElement);
			if (result == null)
				result = caseIfcRelationship(ifcRelVoidsElement);
			if (result == null)
				result = caseIfcRoot(ifcRelVoidsElement);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_RELATIONSHIP: {
			IfcRelationship ifcRelationship = (IfcRelationship) theEObject;
			T result = caseIfcRelationship(ifcRelationship);
			if (result == null)
				result = caseIfcRoot(ifcRelationship);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REPARAMETRISED_COMPOSITE_CURVE_SEGMENT: {
			IfcReparametrisedCompositeCurveSegment ifcReparametrisedCompositeCurveSegment = (IfcReparametrisedCompositeCurveSegment) theEObject;
			T result = caseIfcReparametrisedCompositeCurveSegment(ifcReparametrisedCompositeCurveSegment);
			if (result == null)
				result = caseIfcCompositeCurveSegment(ifcReparametrisedCompositeCurveSegment);
			if (result == null)
				result = caseIfcGeometricRepresentationItem(ifcReparametrisedCompositeCurveSegment);
			if (result == null)
				result = caseIfcRepresentationItem(ifcReparametrisedCompositeCurveSegment);
			if (result == null)
				result = caseIfcLayeredItem(ifcReparametrisedCompositeCurveSegment);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REPRESENTATION: {
			IfcRepresentation ifcRepresentation = (IfcRepresentation) theEObject;
			T result = caseIfcRepresentation(ifcRepresentation);
			if (result == null)
				result = caseIfcLayeredItem(ifcRepresentation);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REPRESENTATION_CONTEXT: {
			IfcRepresentationContext ifcRepresentationContext = (IfcRepresentationContext) theEObject;
			T result = caseIfcRepresentationContext(ifcRepresentationContext);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REPRESENTATION_ITEM: {
			IfcRepresentationItem ifcRepresentationItem = (IfcRepresentationItem) theEObject;
			T result = caseIfcRepresentationItem(ifcRepresentationItem);
			if (result == null)
				result = caseIfcLayeredItem(ifcRepresentationItem);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REPRESENTATION_MAP: {
			IfcRepresentationMap ifcRepresentationMap = (IfcRepresentationMap) theEObject;
			T result = caseIfcRepresentationMap(ifcRepresentationMap);
			if (result == null)
				result = caseIfcProductRepresentationSelect(ifcRepresentationMap);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_RESOURCE: {
			IfcResource ifcResource = (IfcResource) theEObject;
			T result = caseIfcResource(ifcResource);
			if (result == null)
				result = caseIfcObject(ifcResource);
			if (result == null)
				result = caseIfcResourceSelect(ifcResource);
			if (result == null)
				result = caseIfcObjectDefinition(ifcResource);
			if (result == null)
				result = caseIfcRoot(ifcResource);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcResource);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_RESOURCE_APPROVAL_RELATIONSHIP: {
			IfcResourceApprovalRelationship ifcResourceApprovalRelationship = (IfcResourceApprovalRelationship) theEObject;
			T result = caseIfcResourceApprovalRelationship(ifcResourceApprovalRelationship);
			if (result == null)
				result = caseIfcResourceLevelRelationship(ifcResourceApprovalRelationship);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_RESOURCE_CONSTRAINT_RELATIONSHIP: {
			IfcResourceConstraintRelationship ifcResourceConstraintRelationship = (IfcResourceConstraintRelationship) theEObject;
			T result = caseIfcResourceConstraintRelationship(ifcResourceConstraintRelationship);
			if (result == null)
				result = caseIfcResourceLevelRelationship(ifcResourceConstraintRelationship);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_RESOURCE_LEVEL_RELATIONSHIP: {
			IfcResourceLevelRelationship ifcResourceLevelRelationship = (IfcResourceLevelRelationship) theEObject;
			T result = caseIfcResourceLevelRelationship(ifcResourceLevelRelationship);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_RESOURCE_TIME: {
			IfcResourceTime ifcResourceTime = (IfcResourceTime) theEObject;
			T result = caseIfcResourceTime(ifcResourceTime);
			if (result == null)
				result = caseIfcSchedulingTime(ifcResourceTime);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REVOLVED_AREA_SOLID: {
			IfcRevolvedAreaSolid ifcRevolvedAreaSolid = (IfcRevolvedAreaSolid) theEObject;
			T result = caseIfcRevolvedAreaSolid(ifcRevolvedAreaSolid);
			if (result == null)
				result = caseIfcSweptAreaSolid(ifcRevolvedAreaSolid);
			if (result == null)
				result = caseIfcSolidModel(ifcRevolvedAreaSolid);
			if (result == null)
				result = caseIfcGeometricRepresentationItem(ifcRevolvedAreaSolid);
			if (result == null)
				result = caseIfcBooleanOperand(ifcRevolvedAreaSolid);
			if (result == null)
				result = caseIfcSolidOrShell(ifcRevolvedAreaSolid);
			if (result == null)
				result = caseIfcRepresentationItem(ifcRevolvedAreaSolid);
			if (result == null)
				result = caseIfcLayeredItem(ifcRevolvedAreaSolid);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REVOLVED_AREA_SOLID_TAPERED: {
			IfcRevolvedAreaSolidTapered ifcRevolvedAreaSolidTapered = (IfcRevolvedAreaSolidTapered) theEObject;
			T result = caseIfcRevolvedAreaSolidTapered(ifcRevolvedAreaSolidTapered);
			if (result == null)
				result = caseIfcRevolvedAreaSolid(ifcRevolvedAreaSolidTapered);
			if (result == null)
				result = caseIfcSweptAreaSolid(ifcRevolvedAreaSolidTapered);
			if (result == null)
				result = caseIfcSolidModel(ifcRevolvedAreaSolidTapered);
			if (result == null)
				result = caseIfcGeometricRepresentationItem(ifcRevolvedAreaSolidTapered);
			if (result == null)
				result = caseIfcBooleanOperand(ifcRevolvedAreaSolidTapered);
			if (result == null)
				result = caseIfcSolidOrShell(ifcRevolvedAreaSolidTapered);
			if (result == null)
				result = caseIfcRepresentationItem(ifcRevolvedAreaSolidTapered);
			if (result == null)
				result = caseIfcLayeredItem(ifcRevolvedAreaSolidTapered);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_RIGHT_CIRCULAR_CONE: {
			IfcRightCircularCone ifcRightCircularCone = (IfcRightCircularCone) theEObject;
			T result = caseIfcRightCircularCone(ifcRightCircularCone);
			if (result == null)
				result = caseIfcCsgPrimitive3D(ifcRightCircularCone);
			if (result == null)
				result = caseIfcGeometricRepresentationItem(ifcRightCircularCone);
			if (result == null)
				result = caseIfcBooleanOperand(ifcRightCircularCone);
			if (result == null)
				result = caseIfcCsgSelect(ifcRightCircularCone);
			if (result == null)
				result = caseIfcRepresentationItem(ifcRightCircularCone);
			if (result == null)
				result = caseIfcLayeredItem(ifcRightCircularCone);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_RIGHT_CIRCULAR_CYLINDER: {
			IfcRightCircularCylinder ifcRightCircularCylinder = (IfcRightCircularCylinder) theEObject;
			T result = caseIfcRightCircularCylinder(ifcRightCircularCylinder);
			if (result == null)
				result = caseIfcCsgPrimitive3D(ifcRightCircularCylinder);
			if (result == null)
				result = caseIfcGeometricRepresentationItem(ifcRightCircularCylinder);
			if (result == null)
				result = caseIfcBooleanOperand(ifcRightCircularCylinder);
			if (result == null)
				result = caseIfcCsgSelect(ifcRightCircularCylinder);
			if (result == null)
				result = caseIfcRepresentationItem(ifcRightCircularCylinder);
			if (result == null)
				result = caseIfcLayeredItem(ifcRightCircularCylinder);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_ROOF: {
			IfcRoof ifcRoof = (IfcRoof) theEObject;
			T result = caseIfcRoof(ifcRoof);
			if (result == null)
				result = caseIfcBuildingElement(ifcRoof);
			if (result == null)
				result = caseIfcElement(ifcRoof);
			if (result == null)
				result = caseIfcProduct(ifcRoof);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcRoof);
			if (result == null)
				result = caseIfcObject(ifcRoof);
			if (result == null)
				result = caseIfcProductSelect(ifcRoof);
			if (result == null)
				result = caseIfcObjectDefinition(ifcRoof);
			if (result == null)
				result = caseIfcRoot(ifcRoof);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcRoof);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_ROOF_TYPE: {
			IfcRoofType ifcRoofType = (IfcRoofType) theEObject;
			T result = caseIfcRoofType(ifcRoofType);
			if (result == null)
				result = caseIfcBuildingElementType(ifcRoofType);
			if (result == null)
				result = caseIfcElementType(ifcRoofType);
			if (result == null)
				result = caseIfcTypeProduct(ifcRoofType);
			if (result == null)
				result = caseIfcTypeObject(ifcRoofType);
			if (result == null)
				result = caseIfcProductSelect(ifcRoofType);
			if (result == null)
				result = caseIfcObjectDefinition(ifcRoofType);
			if (result == null)
				result = caseIfcRoot(ifcRoofType);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcRoofType);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_ROOT: {
			IfcRoot ifcRoot = (IfcRoot) theEObject;
			T result = caseIfcRoot(ifcRoot);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_ROUNDED_RECTANGLE_PROFILE_DEF: {
			IfcRoundedRectangleProfileDef ifcRoundedRectangleProfileDef = (IfcRoundedRectangleProfileDef) theEObject;
			T result = caseIfcRoundedRectangleProfileDef(ifcRoundedRectangleProfileDef);
			if (result == null)
				result = caseIfcRectangleProfileDef(ifcRoundedRectangleProfileDef);
			if (result == null)
				result = caseIfcParameterizedProfileDef(ifcRoundedRectangleProfileDef);
			if (result == null)
				result = caseIfcProfileDef(ifcRoundedRectangleProfileDef);
			if (result == null)
				result = caseIfcResourceObjectSelect(ifcRoundedRectangleProfileDef);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SI_UNIT: {
			IfcSIUnit ifcSIUnit = (IfcSIUnit) theEObject;
			T result = caseIfcSIUnit(ifcSIUnit);
			if (result == null)
				result = caseIfcNamedUnit(ifcSIUnit);
			if (result == null)
				result = caseIfcUnit(ifcSIUnit);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SANITARY_TERMINAL: {
			IfcSanitaryTerminal ifcSanitaryTerminal = (IfcSanitaryTerminal) theEObject;
			T result = caseIfcSanitaryTerminal(ifcSanitaryTerminal);
			if (result == null)
				result = caseIfcFlowTerminal(ifcSanitaryTerminal);
			if (result == null)
				result = caseIfcDistributionFlowElement(ifcSanitaryTerminal);
			if (result == null)
				result = caseIfcDistributionElement(ifcSanitaryTerminal);
			if (result == null)
				result = caseIfcElement(ifcSanitaryTerminal);
			if (result == null)
				result = caseIfcProduct(ifcSanitaryTerminal);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcSanitaryTerminal);
			if (result == null)
				result = caseIfcObject(ifcSanitaryTerminal);
			if (result == null)
				result = caseIfcProductSelect(ifcSanitaryTerminal);
			if (result == null)
				result = caseIfcObjectDefinition(ifcSanitaryTerminal);
			if (result == null)
				result = caseIfcRoot(ifcSanitaryTerminal);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcSanitaryTerminal);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SANITARY_TERMINAL_TYPE: {
			IfcSanitaryTerminalType ifcSanitaryTerminalType = (IfcSanitaryTerminalType) theEObject;
			T result = caseIfcSanitaryTerminalType(ifcSanitaryTerminalType);
			if (result == null)
				result = caseIfcFlowTerminalType(ifcSanitaryTerminalType);
			if (result == null)
				result = caseIfcDistributionFlowElementType(ifcSanitaryTerminalType);
			if (result == null)
				result = caseIfcDistributionElementType(ifcSanitaryTerminalType);
			if (result == null)
				result = caseIfcElementType(ifcSanitaryTerminalType);
			if (result == null)
				result = caseIfcTypeProduct(ifcSanitaryTerminalType);
			if (result == null)
				result = caseIfcTypeObject(ifcSanitaryTerminalType);
			if (result == null)
				result = caseIfcProductSelect(ifcSanitaryTerminalType);
			if (result == null)
				result = caseIfcObjectDefinition(ifcSanitaryTerminalType);
			if (result == null)
				result = caseIfcRoot(ifcSanitaryTerminalType);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcSanitaryTerminalType);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SCHEDULING_TIME: {
			IfcSchedulingTime ifcSchedulingTime = (IfcSchedulingTime) theEObject;
			T result = caseIfcSchedulingTime(ifcSchedulingTime);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SEAM_CURVE: {
			IfcSeamCurve ifcSeamCurve = (IfcSeamCurve) theEObject;
			T result = caseIfcSeamCurve(ifcSeamCurve);
			if (result == null)
				result = caseIfcSurfaceCurve(ifcSeamCurve);
			if (result == null)
				result = caseIfcCurve(ifcSeamCurve);
			if (result == null)
				result = caseIfcCurveOnSurface(ifcSeamCurve);
			if (result == null)
				result = caseIfcGeometricRepresentationItem(ifcSeamCurve);
			if (result == null)
				result = caseIfcGeometricSetSelect(ifcSeamCurve);
			if (result == null)
				result = caseIfcRepresentationItem(ifcSeamCurve);
			if (result == null)
				result = caseIfcLayeredItem(ifcSeamCurve);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SECTION_PROPERTIES: {
			IfcSectionProperties ifcSectionProperties = (IfcSectionProperties) theEObject;
			T result = caseIfcSectionProperties(ifcSectionProperties);
			if (result == null)
				result = caseIfcPreDefinedProperties(ifcSectionProperties);
			if (result == null)
				result = caseIfcPropertyAbstraction(ifcSectionProperties);
			if (result == null)
				result = caseIfcResourceObjectSelect(ifcSectionProperties);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SECTION_REINFORCEMENT_PROPERTIES: {
			IfcSectionReinforcementProperties ifcSectionReinforcementProperties = (IfcSectionReinforcementProperties) theEObject;
			T result = caseIfcSectionReinforcementProperties(ifcSectionReinforcementProperties);
			if (result == null)
				result = caseIfcPreDefinedProperties(ifcSectionReinforcementProperties);
			if (result == null)
				result = caseIfcPropertyAbstraction(ifcSectionReinforcementProperties);
			if (result == null)
				result = caseIfcResourceObjectSelect(ifcSectionReinforcementProperties);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SECTIONED_SPINE: {
			IfcSectionedSpine ifcSectionedSpine = (IfcSectionedSpine) theEObject;
			T result = caseIfcSectionedSpine(ifcSectionedSpine);
			if (result == null)
				result = caseIfcGeometricRepresentationItem(ifcSectionedSpine);
			if (result == null)
				result = caseIfcRepresentationItem(ifcSectionedSpine);
			if (result == null)
				result = caseIfcLayeredItem(ifcSectionedSpine);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SENSOR: {
			IfcSensor ifcSensor = (IfcSensor) theEObject;
			T result = caseIfcSensor(ifcSensor);
			if (result == null)
				result = caseIfcDistributionControlElement(ifcSensor);
			if (result == null)
				result = caseIfcDistributionElement(ifcSensor);
			if (result == null)
				result = caseIfcElement(ifcSensor);
			if (result == null)
				result = caseIfcProduct(ifcSensor);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcSensor);
			if (result == null)
				result = caseIfcObject(ifcSensor);
			if (result == null)
				result = caseIfcProductSelect(ifcSensor);
			if (result == null)
				result = caseIfcObjectDefinition(ifcSensor);
			if (result == null)
				result = caseIfcRoot(ifcSensor);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcSensor);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SENSOR_TYPE: {
			IfcSensorType ifcSensorType = (IfcSensorType) theEObject;
			T result = caseIfcSensorType(ifcSensorType);
			if (result == null)
				result = caseIfcDistributionControlElementType(ifcSensorType);
			if (result == null)
				result = caseIfcDistributionElementType(ifcSensorType);
			if (result == null)
				result = caseIfcElementType(ifcSensorType);
			if (result == null)
				result = caseIfcTypeProduct(ifcSensorType);
			if (result == null)
				result = caseIfcTypeObject(ifcSensorType);
			if (result == null)
				result = caseIfcProductSelect(ifcSensorType);
			if (result == null)
				result = caseIfcObjectDefinition(ifcSensorType);
			if (result == null)
				result = caseIfcRoot(ifcSensorType);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcSensorType);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SHADING_DEVICE: {
			IfcShadingDevice ifcShadingDevice = (IfcShadingDevice) theEObject;
			T result = caseIfcShadingDevice(ifcShadingDevice);
			if (result == null)
				result = caseIfcBuildingElement(ifcShadingDevice);
			if (result == null)
				result = caseIfcElement(ifcShadingDevice);
			if (result == null)
				result = caseIfcProduct(ifcShadingDevice);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcShadingDevice);
			if (result == null)
				result = caseIfcObject(ifcShadingDevice);
			if (result == null)
				result = caseIfcProductSelect(ifcShadingDevice);
			if (result == null)
				result = caseIfcObjectDefinition(ifcShadingDevice);
			if (result == null)
				result = caseIfcRoot(ifcShadingDevice);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcShadingDevice);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SHADING_DEVICE_TYPE: {
			IfcShadingDeviceType ifcShadingDeviceType = (IfcShadingDeviceType) theEObject;
			T result = caseIfcShadingDeviceType(ifcShadingDeviceType);
			if (result == null)
				result = caseIfcBuildingElementType(ifcShadingDeviceType);
			if (result == null)
				result = caseIfcElementType(ifcShadingDeviceType);
			if (result == null)
				result = caseIfcTypeProduct(ifcShadingDeviceType);
			if (result == null)
				result = caseIfcTypeObject(ifcShadingDeviceType);
			if (result == null)
				result = caseIfcProductSelect(ifcShadingDeviceType);
			if (result == null)
				result = caseIfcObjectDefinition(ifcShadingDeviceType);
			if (result == null)
				result = caseIfcRoot(ifcShadingDeviceType);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcShadingDeviceType);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SHAPE_ASPECT: {
			IfcShapeAspect ifcShapeAspect = (IfcShapeAspect) theEObject;
			T result = caseIfcShapeAspect(ifcShapeAspect);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SHAPE_MODEL: {
			IfcShapeModel ifcShapeModel = (IfcShapeModel) theEObject;
			T result = caseIfcShapeModel(ifcShapeModel);
			if (result == null)
				result = caseIfcRepresentation(ifcShapeModel);
			if (result == null)
				result = caseIfcLayeredItem(ifcShapeModel);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SHAPE_REPRESENTATION: {
			IfcShapeRepresentation ifcShapeRepresentation = (IfcShapeRepresentation) theEObject;
			T result = caseIfcShapeRepresentation(ifcShapeRepresentation);
			if (result == null)
				result = caseIfcShapeModel(ifcShapeRepresentation);
			if (result == null)
				result = caseIfcRepresentation(ifcShapeRepresentation);
			if (result == null)
				result = caseIfcLayeredItem(ifcShapeRepresentation);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SHELL_BASED_SURFACE_MODEL: {
			IfcShellBasedSurfaceModel ifcShellBasedSurfaceModel = (IfcShellBasedSurfaceModel) theEObject;
			T result = caseIfcShellBasedSurfaceModel(ifcShellBasedSurfaceModel);
			if (result == null)
				result = caseIfcGeometricRepresentationItem(ifcShellBasedSurfaceModel);
			if (result == null)
				result = caseIfcRepresentationItem(ifcShellBasedSurfaceModel);
			if (result == null)
				result = caseIfcLayeredItem(ifcShellBasedSurfaceModel);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SIMPLE_PROPERTY: {
			IfcSimpleProperty ifcSimpleProperty = (IfcSimpleProperty) theEObject;
			T result = caseIfcSimpleProperty(ifcSimpleProperty);
			if (result == null)
				result = caseIfcProperty(ifcSimpleProperty);
			if (result == null)
				result = caseIfcPropertyAbstraction(ifcSimpleProperty);
			if (result == null)
				result = caseIfcResourceObjectSelect(ifcSimpleProperty);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SIMPLE_PROPERTY_TEMPLATE: {
			IfcSimplePropertyTemplate ifcSimplePropertyTemplate = (IfcSimplePropertyTemplate) theEObject;
			T result = caseIfcSimplePropertyTemplate(ifcSimplePropertyTemplate);
			if (result == null)
				result = caseIfcPropertyTemplate(ifcSimplePropertyTemplate);
			if (result == null)
				result = caseIfcPropertyTemplateDefinition(ifcSimplePropertyTemplate);
			if (result == null)
				result = caseIfcPropertyDefinition(ifcSimplePropertyTemplate);
			if (result == null)
				result = caseIfcRoot(ifcSimplePropertyTemplate);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcSimplePropertyTemplate);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SITE: {
			IfcSite ifcSite = (IfcSite) theEObject;
			T result = caseIfcSite(ifcSite);
			if (result == null)
				result = caseIfcSpatialStructureElement(ifcSite);
			if (result == null)
				result = caseIfcSpatialElement(ifcSite);
			if (result == null)
				result = caseIfcProduct(ifcSite);
			if (result == null)
				result = caseIfcObject(ifcSite);
			if (result == null)
				result = caseIfcProductSelect(ifcSite);
			if (result == null)
				result = caseIfcObjectDefinition(ifcSite);
			if (result == null)
				result = caseIfcRoot(ifcSite);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcSite);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SLAB: {
			IfcSlab ifcSlab = (IfcSlab) theEObject;
			T result = caseIfcSlab(ifcSlab);
			if (result == null)
				result = caseIfcBuildingElement(ifcSlab);
			if (result == null)
				result = caseIfcElement(ifcSlab);
			if (result == null)
				result = caseIfcProduct(ifcSlab);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcSlab);
			if (result == null)
				result = caseIfcObject(ifcSlab);
			if (result == null)
				result = caseIfcProductSelect(ifcSlab);
			if (result == null)
				result = caseIfcObjectDefinition(ifcSlab);
			if (result == null)
				result = caseIfcRoot(ifcSlab);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcSlab);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SLAB_ELEMENTED_CASE: {
			IfcSlabElementedCase ifcSlabElementedCase = (IfcSlabElementedCase) theEObject;
			T result = caseIfcSlabElementedCase(ifcSlabElementedCase);
			if (result == null)
				result = caseIfcSlab(ifcSlabElementedCase);
			if (result == null)
				result = caseIfcBuildingElement(ifcSlabElementedCase);
			if (result == null)
				result = caseIfcElement(ifcSlabElementedCase);
			if (result == null)
				result = caseIfcProduct(ifcSlabElementedCase);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcSlabElementedCase);
			if (result == null)
				result = caseIfcObject(ifcSlabElementedCase);
			if (result == null)
				result = caseIfcProductSelect(ifcSlabElementedCase);
			if (result == null)
				result = caseIfcObjectDefinition(ifcSlabElementedCase);
			if (result == null)
				result = caseIfcRoot(ifcSlabElementedCase);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcSlabElementedCase);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SLAB_STANDARD_CASE: {
			IfcSlabStandardCase ifcSlabStandardCase = (IfcSlabStandardCase) theEObject;
			T result = caseIfcSlabStandardCase(ifcSlabStandardCase);
			if (result == null)
				result = caseIfcSlab(ifcSlabStandardCase);
			if (result == null)
				result = caseIfcBuildingElement(ifcSlabStandardCase);
			if (result == null)
				result = caseIfcElement(ifcSlabStandardCase);
			if (result == null)
				result = caseIfcProduct(ifcSlabStandardCase);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcSlabStandardCase);
			if (result == null)
				result = caseIfcObject(ifcSlabStandardCase);
			if (result == null)
				result = caseIfcProductSelect(ifcSlabStandardCase);
			if (result == null)
				result = caseIfcObjectDefinition(ifcSlabStandardCase);
			if (result == null)
				result = caseIfcRoot(ifcSlabStandardCase);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcSlabStandardCase);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SLAB_TYPE: {
			IfcSlabType ifcSlabType = (IfcSlabType) theEObject;
			T result = caseIfcSlabType(ifcSlabType);
			if (result == null)
				result = caseIfcBuildingElementType(ifcSlabType);
			if (result == null)
				result = caseIfcElementType(ifcSlabType);
			if (result == null)
				result = caseIfcTypeProduct(ifcSlabType);
			if (result == null)
				result = caseIfcTypeObject(ifcSlabType);
			if (result == null)
				result = caseIfcProductSelect(ifcSlabType);
			if (result == null)
				result = caseIfcObjectDefinition(ifcSlabType);
			if (result == null)
				result = caseIfcRoot(ifcSlabType);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcSlabType);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SLIPPAGE_CONNECTION_CONDITION: {
			IfcSlippageConnectionCondition ifcSlippageConnectionCondition = (IfcSlippageConnectionCondition) theEObject;
			T result = caseIfcSlippageConnectionCondition(ifcSlippageConnectionCondition);
			if (result == null)
				result = caseIfcStructuralConnectionCondition(ifcSlippageConnectionCondition);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SOLAR_DEVICE: {
			IfcSolarDevice ifcSolarDevice = (IfcSolarDevice) theEObject;
			T result = caseIfcSolarDevice(ifcSolarDevice);
			if (result == null)
				result = caseIfcEnergyConversionDevice(ifcSolarDevice);
			if (result == null)
				result = caseIfcDistributionFlowElement(ifcSolarDevice);
			if (result == null)
				result = caseIfcDistributionElement(ifcSolarDevice);
			if (result == null)
				result = caseIfcElement(ifcSolarDevice);
			if (result == null)
				result = caseIfcProduct(ifcSolarDevice);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcSolarDevice);
			if (result == null)
				result = caseIfcObject(ifcSolarDevice);
			if (result == null)
				result = caseIfcProductSelect(ifcSolarDevice);
			if (result == null)
				result = caseIfcObjectDefinition(ifcSolarDevice);
			if (result == null)
				result = caseIfcRoot(ifcSolarDevice);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcSolarDevice);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SOLAR_DEVICE_TYPE: {
			IfcSolarDeviceType ifcSolarDeviceType = (IfcSolarDeviceType) theEObject;
			T result = caseIfcSolarDeviceType(ifcSolarDeviceType);
			if (result == null)
				result = caseIfcEnergyConversionDeviceType(ifcSolarDeviceType);
			if (result == null)
				result = caseIfcDistributionFlowElementType(ifcSolarDeviceType);
			if (result == null)
				result = caseIfcDistributionElementType(ifcSolarDeviceType);
			if (result == null)
				result = caseIfcElementType(ifcSolarDeviceType);
			if (result == null)
				result = caseIfcTypeProduct(ifcSolarDeviceType);
			if (result == null)
				result = caseIfcTypeObject(ifcSolarDeviceType);
			if (result == null)
				result = caseIfcProductSelect(ifcSolarDeviceType);
			if (result == null)
				result = caseIfcObjectDefinition(ifcSolarDeviceType);
			if (result == null)
				result = caseIfcRoot(ifcSolarDeviceType);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcSolarDeviceType);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SOLID_MODEL: {
			IfcSolidModel ifcSolidModel = (IfcSolidModel) theEObject;
			T result = caseIfcSolidModel(ifcSolidModel);
			if (result == null)
				result = caseIfcGeometricRepresentationItem(ifcSolidModel);
			if (result == null)
				result = caseIfcBooleanOperand(ifcSolidModel);
			if (result == null)
				result = caseIfcSolidOrShell(ifcSolidModel);
			if (result == null)
				result = caseIfcRepresentationItem(ifcSolidModel);
			if (result == null)
				result = caseIfcLayeredItem(ifcSolidModel);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SPACE: {
			IfcSpace ifcSpace = (IfcSpace) theEObject;
			T result = caseIfcSpace(ifcSpace);
			if (result == null)
				result = caseIfcSpatialStructureElement(ifcSpace);
			if (result == null)
				result = caseIfcSpaceBoundarySelect(ifcSpace);
			if (result == null)
				result = caseIfcSpatialElement(ifcSpace);
			if (result == null)
				result = caseIfcProduct(ifcSpace);
			if (result == null)
				result = caseIfcObject(ifcSpace);
			if (result == null)
				result = caseIfcProductSelect(ifcSpace);
			if (result == null)
				result = caseIfcObjectDefinition(ifcSpace);
			if (result == null)
				result = caseIfcRoot(ifcSpace);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcSpace);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SPACE_HEATER: {
			IfcSpaceHeater ifcSpaceHeater = (IfcSpaceHeater) theEObject;
			T result = caseIfcSpaceHeater(ifcSpaceHeater);
			if (result == null)
				result = caseIfcFlowTerminal(ifcSpaceHeater);
			if (result == null)
				result = caseIfcDistributionFlowElement(ifcSpaceHeater);
			if (result == null)
				result = caseIfcDistributionElement(ifcSpaceHeater);
			if (result == null)
				result = caseIfcElement(ifcSpaceHeater);
			if (result == null)
				result = caseIfcProduct(ifcSpaceHeater);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcSpaceHeater);
			if (result == null)
				result = caseIfcObject(ifcSpaceHeater);
			if (result == null)
				result = caseIfcProductSelect(ifcSpaceHeater);
			if (result == null)
				result = caseIfcObjectDefinition(ifcSpaceHeater);
			if (result == null)
				result = caseIfcRoot(ifcSpaceHeater);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcSpaceHeater);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SPACE_HEATER_TYPE: {
			IfcSpaceHeaterType ifcSpaceHeaterType = (IfcSpaceHeaterType) theEObject;
			T result = caseIfcSpaceHeaterType(ifcSpaceHeaterType);
			if (result == null)
				result = caseIfcFlowTerminalType(ifcSpaceHeaterType);
			if (result == null)
				result = caseIfcDistributionFlowElementType(ifcSpaceHeaterType);
			if (result == null)
				result = caseIfcDistributionElementType(ifcSpaceHeaterType);
			if (result == null)
				result = caseIfcElementType(ifcSpaceHeaterType);
			if (result == null)
				result = caseIfcTypeProduct(ifcSpaceHeaterType);
			if (result == null)
				result = caseIfcTypeObject(ifcSpaceHeaterType);
			if (result == null)
				result = caseIfcProductSelect(ifcSpaceHeaterType);
			if (result == null)
				result = caseIfcObjectDefinition(ifcSpaceHeaterType);
			if (result == null)
				result = caseIfcRoot(ifcSpaceHeaterType);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcSpaceHeaterType);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SPACE_TYPE: {
			IfcSpaceType ifcSpaceType = (IfcSpaceType) theEObject;
			T result = caseIfcSpaceType(ifcSpaceType);
			if (result == null)
				result = caseIfcSpatialStructureElementType(ifcSpaceType);
			if (result == null)
				result = caseIfcSpatialElementType(ifcSpaceType);
			if (result == null)
				result = caseIfcTypeProduct(ifcSpaceType);
			if (result == null)
				result = caseIfcTypeObject(ifcSpaceType);
			if (result == null)
				result = caseIfcProductSelect(ifcSpaceType);
			if (result == null)
				result = caseIfcObjectDefinition(ifcSpaceType);
			if (result == null)
				result = caseIfcRoot(ifcSpaceType);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcSpaceType);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SPATIAL_ELEMENT: {
			IfcSpatialElement ifcSpatialElement = (IfcSpatialElement) theEObject;
			T result = caseIfcSpatialElement(ifcSpatialElement);
			if (result == null)
				result = caseIfcProduct(ifcSpatialElement);
			if (result == null)
				result = caseIfcObject(ifcSpatialElement);
			if (result == null)
				result = caseIfcProductSelect(ifcSpatialElement);
			if (result == null)
				result = caseIfcObjectDefinition(ifcSpatialElement);
			if (result == null)
				result = caseIfcRoot(ifcSpatialElement);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcSpatialElement);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SPATIAL_ELEMENT_TYPE: {
			IfcSpatialElementType ifcSpatialElementType = (IfcSpatialElementType) theEObject;
			T result = caseIfcSpatialElementType(ifcSpatialElementType);
			if (result == null)
				result = caseIfcTypeProduct(ifcSpatialElementType);
			if (result == null)
				result = caseIfcTypeObject(ifcSpatialElementType);
			if (result == null)
				result = caseIfcProductSelect(ifcSpatialElementType);
			if (result == null)
				result = caseIfcObjectDefinition(ifcSpatialElementType);
			if (result == null)
				result = caseIfcRoot(ifcSpatialElementType);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcSpatialElementType);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SPATIAL_STRUCTURE_ELEMENT: {
			IfcSpatialStructureElement ifcSpatialStructureElement = (IfcSpatialStructureElement) theEObject;
			T result = caseIfcSpatialStructureElement(ifcSpatialStructureElement);
			if (result == null)
				result = caseIfcSpatialElement(ifcSpatialStructureElement);
			if (result == null)
				result = caseIfcProduct(ifcSpatialStructureElement);
			if (result == null)
				result = caseIfcObject(ifcSpatialStructureElement);
			if (result == null)
				result = caseIfcProductSelect(ifcSpatialStructureElement);
			if (result == null)
				result = caseIfcObjectDefinition(ifcSpatialStructureElement);
			if (result == null)
				result = caseIfcRoot(ifcSpatialStructureElement);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcSpatialStructureElement);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SPATIAL_STRUCTURE_ELEMENT_TYPE: {
			IfcSpatialStructureElementType ifcSpatialStructureElementType = (IfcSpatialStructureElementType) theEObject;
			T result = caseIfcSpatialStructureElementType(ifcSpatialStructureElementType);
			if (result == null)
				result = caseIfcSpatialElementType(ifcSpatialStructureElementType);
			if (result == null)
				result = caseIfcTypeProduct(ifcSpatialStructureElementType);
			if (result == null)
				result = caseIfcTypeObject(ifcSpatialStructureElementType);
			if (result == null)
				result = caseIfcProductSelect(ifcSpatialStructureElementType);
			if (result == null)
				result = caseIfcObjectDefinition(ifcSpatialStructureElementType);
			if (result == null)
				result = caseIfcRoot(ifcSpatialStructureElementType);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcSpatialStructureElementType);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SPATIAL_ZONE: {
			IfcSpatialZone ifcSpatialZone = (IfcSpatialZone) theEObject;
			T result = caseIfcSpatialZone(ifcSpatialZone);
			if (result == null)
				result = caseIfcSpatialElement(ifcSpatialZone);
			if (result == null)
				result = caseIfcProduct(ifcSpatialZone);
			if (result == null)
				result = caseIfcObject(ifcSpatialZone);
			if (result == null)
				result = caseIfcProductSelect(ifcSpatialZone);
			if (result == null)
				result = caseIfcObjectDefinition(ifcSpatialZone);
			if (result == null)
				result = caseIfcRoot(ifcSpatialZone);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcSpatialZone);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SPATIAL_ZONE_TYPE: {
			IfcSpatialZoneType ifcSpatialZoneType = (IfcSpatialZoneType) theEObject;
			T result = caseIfcSpatialZoneType(ifcSpatialZoneType);
			if (result == null)
				result = caseIfcSpatialElementType(ifcSpatialZoneType);
			if (result == null)
				result = caseIfcTypeProduct(ifcSpatialZoneType);
			if (result == null)
				result = caseIfcTypeObject(ifcSpatialZoneType);
			if (result == null)
				result = caseIfcProductSelect(ifcSpatialZoneType);
			if (result == null)
				result = caseIfcObjectDefinition(ifcSpatialZoneType);
			if (result == null)
				result = caseIfcRoot(ifcSpatialZoneType);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcSpatialZoneType);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SPHERE: {
			IfcSphere ifcSphere = (IfcSphere) theEObject;
			T result = caseIfcSphere(ifcSphere);
			if (result == null)
				result = caseIfcCsgPrimitive3D(ifcSphere);
			if (result == null)
				result = caseIfcGeometricRepresentationItem(ifcSphere);
			if (result == null)
				result = caseIfcBooleanOperand(ifcSphere);
			if (result == null)
				result = caseIfcCsgSelect(ifcSphere);
			if (result == null)
				result = caseIfcRepresentationItem(ifcSphere);
			if (result == null)
				result = caseIfcLayeredItem(ifcSphere);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SPHERICAL_SURFACE: {
			IfcSphericalSurface ifcSphericalSurface = (IfcSphericalSurface) theEObject;
			T result = caseIfcSphericalSurface(ifcSphericalSurface);
			if (result == null)
				result = caseIfcElementarySurface(ifcSphericalSurface);
			if (result == null)
				result = caseIfcSurface(ifcSphericalSurface);
			if (result == null)
				result = caseIfcGeometricRepresentationItem(ifcSphericalSurface);
			if (result == null)
				result = caseIfcGeometricSetSelect(ifcSphericalSurface);
			if (result == null)
				result = caseIfcSurfaceOrFaceSurface(ifcSphericalSurface);
			if (result == null)
				result = caseIfcRepresentationItem(ifcSphericalSurface);
			if (result == null)
				result = caseIfcLayeredItem(ifcSphericalSurface);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_STACK_TERMINAL: {
			IfcStackTerminal ifcStackTerminal = (IfcStackTerminal) theEObject;
			T result = caseIfcStackTerminal(ifcStackTerminal);
			if (result == null)
				result = caseIfcFlowTerminal(ifcStackTerminal);
			if (result == null)
				result = caseIfcDistributionFlowElement(ifcStackTerminal);
			if (result == null)
				result = caseIfcDistributionElement(ifcStackTerminal);
			if (result == null)
				result = caseIfcElement(ifcStackTerminal);
			if (result == null)
				result = caseIfcProduct(ifcStackTerminal);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcStackTerminal);
			if (result == null)
				result = caseIfcObject(ifcStackTerminal);
			if (result == null)
				result = caseIfcProductSelect(ifcStackTerminal);
			if (result == null)
				result = caseIfcObjectDefinition(ifcStackTerminal);
			if (result == null)
				result = caseIfcRoot(ifcStackTerminal);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcStackTerminal);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_STACK_TERMINAL_TYPE: {
			IfcStackTerminalType ifcStackTerminalType = (IfcStackTerminalType) theEObject;
			T result = caseIfcStackTerminalType(ifcStackTerminalType);
			if (result == null)
				result = caseIfcFlowTerminalType(ifcStackTerminalType);
			if (result == null)
				result = caseIfcDistributionFlowElementType(ifcStackTerminalType);
			if (result == null)
				result = caseIfcDistributionElementType(ifcStackTerminalType);
			if (result == null)
				result = caseIfcElementType(ifcStackTerminalType);
			if (result == null)
				result = caseIfcTypeProduct(ifcStackTerminalType);
			if (result == null)
				result = caseIfcTypeObject(ifcStackTerminalType);
			if (result == null)
				result = caseIfcProductSelect(ifcStackTerminalType);
			if (result == null)
				result = caseIfcObjectDefinition(ifcStackTerminalType);
			if (result == null)
				result = caseIfcRoot(ifcStackTerminalType);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcStackTerminalType);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_STAIR: {
			IfcStair ifcStair = (IfcStair) theEObject;
			T result = caseIfcStair(ifcStair);
			if (result == null)
				result = caseIfcBuildingElement(ifcStair);
			if (result == null)
				result = caseIfcElement(ifcStair);
			if (result == null)
				result = caseIfcProduct(ifcStair);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcStair);
			if (result == null)
				result = caseIfcObject(ifcStair);
			if (result == null)
				result = caseIfcProductSelect(ifcStair);
			if (result == null)
				result = caseIfcObjectDefinition(ifcStair);
			if (result == null)
				result = caseIfcRoot(ifcStair);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcStair);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_STAIR_FLIGHT: {
			IfcStairFlight ifcStairFlight = (IfcStairFlight) theEObject;
			T result = caseIfcStairFlight(ifcStairFlight);
			if (result == null)
				result = caseIfcBuildingElement(ifcStairFlight);
			if (result == null)
				result = caseIfcElement(ifcStairFlight);
			if (result == null)
				result = caseIfcProduct(ifcStairFlight);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcStairFlight);
			if (result == null)
				result = caseIfcObject(ifcStairFlight);
			if (result == null)
				result = caseIfcProductSelect(ifcStairFlight);
			if (result == null)
				result = caseIfcObjectDefinition(ifcStairFlight);
			if (result == null)
				result = caseIfcRoot(ifcStairFlight);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcStairFlight);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_STAIR_FLIGHT_TYPE: {
			IfcStairFlightType ifcStairFlightType = (IfcStairFlightType) theEObject;
			T result = caseIfcStairFlightType(ifcStairFlightType);
			if (result == null)
				result = caseIfcBuildingElementType(ifcStairFlightType);
			if (result == null)
				result = caseIfcElementType(ifcStairFlightType);
			if (result == null)
				result = caseIfcTypeProduct(ifcStairFlightType);
			if (result == null)
				result = caseIfcTypeObject(ifcStairFlightType);
			if (result == null)
				result = caseIfcProductSelect(ifcStairFlightType);
			if (result == null)
				result = caseIfcObjectDefinition(ifcStairFlightType);
			if (result == null)
				result = caseIfcRoot(ifcStairFlightType);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcStairFlightType);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_STAIR_TYPE: {
			IfcStairType ifcStairType = (IfcStairType) theEObject;
			T result = caseIfcStairType(ifcStairType);
			if (result == null)
				result = caseIfcBuildingElementType(ifcStairType);
			if (result == null)
				result = caseIfcElementType(ifcStairType);
			if (result == null)
				result = caseIfcTypeProduct(ifcStairType);
			if (result == null)
				result = caseIfcTypeObject(ifcStairType);
			if (result == null)
				result = caseIfcProductSelect(ifcStairType);
			if (result == null)
				result = caseIfcObjectDefinition(ifcStairType);
			if (result == null)
				result = caseIfcRoot(ifcStairType);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcStairType);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_STRUCTURAL_ACTION: {
			IfcStructuralAction ifcStructuralAction = (IfcStructuralAction) theEObject;
			T result = caseIfcStructuralAction(ifcStructuralAction);
			if (result == null)
				result = caseIfcStructuralActivity(ifcStructuralAction);
			if (result == null)
				result = caseIfcProduct(ifcStructuralAction);
			if (result == null)
				result = caseIfcObject(ifcStructuralAction);
			if (result == null)
				result = caseIfcProductSelect(ifcStructuralAction);
			if (result == null)
				result = caseIfcObjectDefinition(ifcStructuralAction);
			if (result == null)
				result = caseIfcRoot(ifcStructuralAction);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcStructuralAction);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_STRUCTURAL_ACTIVITY: {
			IfcStructuralActivity ifcStructuralActivity = (IfcStructuralActivity) theEObject;
			T result = caseIfcStructuralActivity(ifcStructuralActivity);
			if (result == null)
				result = caseIfcProduct(ifcStructuralActivity);
			if (result == null)
				result = caseIfcObject(ifcStructuralActivity);
			if (result == null)
				result = caseIfcProductSelect(ifcStructuralActivity);
			if (result == null)
				result = caseIfcObjectDefinition(ifcStructuralActivity);
			if (result == null)
				result = caseIfcRoot(ifcStructuralActivity);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcStructuralActivity);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_STRUCTURAL_ANALYSIS_MODEL: {
			IfcStructuralAnalysisModel ifcStructuralAnalysisModel = (IfcStructuralAnalysisModel) theEObject;
			T result = caseIfcStructuralAnalysisModel(ifcStructuralAnalysisModel);
			if (result == null)
				result = caseIfcSystem(ifcStructuralAnalysisModel);
			if (result == null)
				result = caseIfcGroup(ifcStructuralAnalysisModel);
			if (result == null)
				result = caseIfcObject(ifcStructuralAnalysisModel);
			if (result == null)
				result = caseIfcObjectDefinition(ifcStructuralAnalysisModel);
			if (result == null)
				result = caseIfcRoot(ifcStructuralAnalysisModel);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcStructuralAnalysisModel);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_STRUCTURAL_CONNECTION: {
			IfcStructuralConnection ifcStructuralConnection = (IfcStructuralConnection) theEObject;
			T result = caseIfcStructuralConnection(ifcStructuralConnection);
			if (result == null)
				result = caseIfcStructuralItem(ifcStructuralConnection);
			if (result == null)
				result = caseIfcProduct(ifcStructuralConnection);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcStructuralConnection);
			if (result == null)
				result = caseIfcObject(ifcStructuralConnection);
			if (result == null)
				result = caseIfcProductSelect(ifcStructuralConnection);
			if (result == null)
				result = caseIfcObjectDefinition(ifcStructuralConnection);
			if (result == null)
				result = caseIfcRoot(ifcStructuralConnection);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcStructuralConnection);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_STRUCTURAL_CONNECTION_CONDITION: {
			IfcStructuralConnectionCondition ifcStructuralConnectionCondition = (IfcStructuralConnectionCondition) theEObject;
			T result = caseIfcStructuralConnectionCondition(ifcStructuralConnectionCondition);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_STRUCTURAL_CURVE_ACTION: {
			IfcStructuralCurveAction ifcStructuralCurveAction = (IfcStructuralCurveAction) theEObject;
			T result = caseIfcStructuralCurveAction(ifcStructuralCurveAction);
			if (result == null)
				result = caseIfcStructuralAction(ifcStructuralCurveAction);
			if (result == null)
				result = caseIfcStructuralActivity(ifcStructuralCurveAction);
			if (result == null)
				result = caseIfcProduct(ifcStructuralCurveAction);
			if (result == null)
				result = caseIfcObject(ifcStructuralCurveAction);
			if (result == null)
				result = caseIfcProductSelect(ifcStructuralCurveAction);
			if (result == null)
				result = caseIfcObjectDefinition(ifcStructuralCurveAction);
			if (result == null)
				result = caseIfcRoot(ifcStructuralCurveAction);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcStructuralCurveAction);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_STRUCTURAL_CURVE_CONNECTION: {
			IfcStructuralCurveConnection ifcStructuralCurveConnection = (IfcStructuralCurveConnection) theEObject;
			T result = caseIfcStructuralCurveConnection(ifcStructuralCurveConnection);
			if (result == null)
				result = caseIfcStructuralConnection(ifcStructuralCurveConnection);
			if (result == null)
				result = caseIfcStructuralItem(ifcStructuralCurveConnection);
			if (result == null)
				result = caseIfcProduct(ifcStructuralCurveConnection);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcStructuralCurveConnection);
			if (result == null)
				result = caseIfcObject(ifcStructuralCurveConnection);
			if (result == null)
				result = caseIfcProductSelect(ifcStructuralCurveConnection);
			if (result == null)
				result = caseIfcObjectDefinition(ifcStructuralCurveConnection);
			if (result == null)
				result = caseIfcRoot(ifcStructuralCurveConnection);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcStructuralCurveConnection);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_STRUCTURAL_CURVE_MEMBER: {
			IfcStructuralCurveMember ifcStructuralCurveMember = (IfcStructuralCurveMember) theEObject;
			T result = caseIfcStructuralCurveMember(ifcStructuralCurveMember);
			if (result == null)
				result = caseIfcStructuralMember(ifcStructuralCurveMember);
			if (result == null)
				result = caseIfcStructuralItem(ifcStructuralCurveMember);
			if (result == null)
				result = caseIfcProduct(ifcStructuralCurveMember);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcStructuralCurveMember);
			if (result == null)
				result = caseIfcObject(ifcStructuralCurveMember);
			if (result == null)
				result = caseIfcProductSelect(ifcStructuralCurveMember);
			if (result == null)
				result = caseIfcObjectDefinition(ifcStructuralCurveMember);
			if (result == null)
				result = caseIfcRoot(ifcStructuralCurveMember);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcStructuralCurveMember);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_STRUCTURAL_CURVE_MEMBER_VARYING: {
			IfcStructuralCurveMemberVarying ifcStructuralCurveMemberVarying = (IfcStructuralCurveMemberVarying) theEObject;
			T result = caseIfcStructuralCurveMemberVarying(ifcStructuralCurveMemberVarying);
			if (result == null)
				result = caseIfcStructuralCurveMember(ifcStructuralCurveMemberVarying);
			if (result == null)
				result = caseIfcStructuralMember(ifcStructuralCurveMemberVarying);
			if (result == null)
				result = caseIfcStructuralItem(ifcStructuralCurveMemberVarying);
			if (result == null)
				result = caseIfcProduct(ifcStructuralCurveMemberVarying);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcStructuralCurveMemberVarying);
			if (result == null)
				result = caseIfcObject(ifcStructuralCurveMemberVarying);
			if (result == null)
				result = caseIfcProductSelect(ifcStructuralCurveMemberVarying);
			if (result == null)
				result = caseIfcObjectDefinition(ifcStructuralCurveMemberVarying);
			if (result == null)
				result = caseIfcRoot(ifcStructuralCurveMemberVarying);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcStructuralCurveMemberVarying);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_STRUCTURAL_CURVE_REACTION: {
			IfcStructuralCurveReaction ifcStructuralCurveReaction = (IfcStructuralCurveReaction) theEObject;
			T result = caseIfcStructuralCurveReaction(ifcStructuralCurveReaction);
			if (result == null)
				result = caseIfcStructuralReaction(ifcStructuralCurveReaction);
			if (result == null)
				result = caseIfcStructuralActivity(ifcStructuralCurveReaction);
			if (result == null)
				result = caseIfcProduct(ifcStructuralCurveReaction);
			if (result == null)
				result = caseIfcObject(ifcStructuralCurveReaction);
			if (result == null)
				result = caseIfcProductSelect(ifcStructuralCurveReaction);
			if (result == null)
				result = caseIfcObjectDefinition(ifcStructuralCurveReaction);
			if (result == null)
				result = caseIfcRoot(ifcStructuralCurveReaction);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcStructuralCurveReaction);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_STRUCTURAL_ITEM: {
			IfcStructuralItem ifcStructuralItem = (IfcStructuralItem) theEObject;
			T result = caseIfcStructuralItem(ifcStructuralItem);
			if (result == null)
				result = caseIfcProduct(ifcStructuralItem);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcStructuralItem);
			if (result == null)
				result = caseIfcObject(ifcStructuralItem);
			if (result == null)
				result = caseIfcProductSelect(ifcStructuralItem);
			if (result == null)
				result = caseIfcObjectDefinition(ifcStructuralItem);
			if (result == null)
				result = caseIfcRoot(ifcStructuralItem);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcStructuralItem);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_STRUCTURAL_LINEAR_ACTION: {
			IfcStructuralLinearAction ifcStructuralLinearAction = (IfcStructuralLinearAction) theEObject;
			T result = caseIfcStructuralLinearAction(ifcStructuralLinearAction);
			if (result == null)
				result = caseIfcStructuralCurveAction(ifcStructuralLinearAction);
			if (result == null)
				result = caseIfcStructuralAction(ifcStructuralLinearAction);
			if (result == null)
				result = caseIfcStructuralActivity(ifcStructuralLinearAction);
			if (result == null)
				result = caseIfcProduct(ifcStructuralLinearAction);
			if (result == null)
				result = caseIfcObject(ifcStructuralLinearAction);
			if (result == null)
				result = caseIfcProductSelect(ifcStructuralLinearAction);
			if (result == null)
				result = caseIfcObjectDefinition(ifcStructuralLinearAction);
			if (result == null)
				result = caseIfcRoot(ifcStructuralLinearAction);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcStructuralLinearAction);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_STRUCTURAL_LOAD: {
			IfcStructuralLoad ifcStructuralLoad = (IfcStructuralLoad) theEObject;
			T result = caseIfcStructuralLoad(ifcStructuralLoad);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_STRUCTURAL_LOAD_CASE: {
			IfcStructuralLoadCase ifcStructuralLoadCase = (IfcStructuralLoadCase) theEObject;
			T result = caseIfcStructuralLoadCase(ifcStructuralLoadCase);
			if (result == null)
				result = caseIfcStructuralLoadGroup(ifcStructuralLoadCase);
			if (result == null)
				result = caseIfcGroup(ifcStructuralLoadCase);
			if (result == null)
				result = caseIfcObject(ifcStructuralLoadCase);
			if (result == null)
				result = caseIfcObjectDefinition(ifcStructuralLoadCase);
			if (result == null)
				result = caseIfcRoot(ifcStructuralLoadCase);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcStructuralLoadCase);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_STRUCTURAL_LOAD_CONFIGURATION: {
			IfcStructuralLoadConfiguration ifcStructuralLoadConfiguration = (IfcStructuralLoadConfiguration) theEObject;
			T result = caseIfcStructuralLoadConfiguration(ifcStructuralLoadConfiguration);
			if (result == null)
				result = caseIfcStructuralLoad(ifcStructuralLoadConfiguration);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_STRUCTURAL_LOAD_GROUP: {
			IfcStructuralLoadGroup ifcStructuralLoadGroup = (IfcStructuralLoadGroup) theEObject;
			T result = caseIfcStructuralLoadGroup(ifcStructuralLoadGroup);
			if (result == null)
				result = caseIfcGroup(ifcStructuralLoadGroup);
			if (result == null)
				result = caseIfcObject(ifcStructuralLoadGroup);
			if (result == null)
				result = caseIfcObjectDefinition(ifcStructuralLoadGroup);
			if (result == null)
				result = caseIfcRoot(ifcStructuralLoadGroup);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcStructuralLoadGroup);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_STRUCTURAL_LOAD_LINEAR_FORCE: {
			IfcStructuralLoadLinearForce ifcStructuralLoadLinearForce = (IfcStructuralLoadLinearForce) theEObject;
			T result = caseIfcStructuralLoadLinearForce(ifcStructuralLoadLinearForce);
			if (result == null)
				result = caseIfcStructuralLoadStatic(ifcStructuralLoadLinearForce);
			if (result == null)
				result = caseIfcStructuralLoadOrResult(ifcStructuralLoadLinearForce);
			if (result == null)
				result = caseIfcStructuralLoad(ifcStructuralLoadLinearForce);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_STRUCTURAL_LOAD_OR_RESULT: {
			IfcStructuralLoadOrResult ifcStructuralLoadOrResult = (IfcStructuralLoadOrResult) theEObject;
			T result = caseIfcStructuralLoadOrResult(ifcStructuralLoadOrResult);
			if (result == null)
				result = caseIfcStructuralLoad(ifcStructuralLoadOrResult);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_STRUCTURAL_LOAD_PLANAR_FORCE: {
			IfcStructuralLoadPlanarForce ifcStructuralLoadPlanarForce = (IfcStructuralLoadPlanarForce) theEObject;
			T result = caseIfcStructuralLoadPlanarForce(ifcStructuralLoadPlanarForce);
			if (result == null)
				result = caseIfcStructuralLoadStatic(ifcStructuralLoadPlanarForce);
			if (result == null)
				result = caseIfcStructuralLoadOrResult(ifcStructuralLoadPlanarForce);
			if (result == null)
				result = caseIfcStructuralLoad(ifcStructuralLoadPlanarForce);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_STRUCTURAL_LOAD_SINGLE_DISPLACEMENT: {
			IfcStructuralLoadSingleDisplacement ifcStructuralLoadSingleDisplacement = (IfcStructuralLoadSingleDisplacement) theEObject;
			T result = caseIfcStructuralLoadSingleDisplacement(ifcStructuralLoadSingleDisplacement);
			if (result == null)
				result = caseIfcStructuralLoadStatic(ifcStructuralLoadSingleDisplacement);
			if (result == null)
				result = caseIfcStructuralLoadOrResult(ifcStructuralLoadSingleDisplacement);
			if (result == null)
				result = caseIfcStructuralLoad(ifcStructuralLoadSingleDisplacement);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_STRUCTURAL_LOAD_SINGLE_DISPLACEMENT_DISTORTION: {
			IfcStructuralLoadSingleDisplacementDistortion ifcStructuralLoadSingleDisplacementDistortion = (IfcStructuralLoadSingleDisplacementDistortion) theEObject;
			T result = caseIfcStructuralLoadSingleDisplacementDistortion(ifcStructuralLoadSingleDisplacementDistortion);
			if (result == null)
				result = caseIfcStructuralLoadSingleDisplacement(ifcStructuralLoadSingleDisplacementDistortion);
			if (result == null)
				result = caseIfcStructuralLoadStatic(ifcStructuralLoadSingleDisplacementDistortion);
			if (result == null)
				result = caseIfcStructuralLoadOrResult(ifcStructuralLoadSingleDisplacementDistortion);
			if (result == null)
				result = caseIfcStructuralLoad(ifcStructuralLoadSingleDisplacementDistortion);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_STRUCTURAL_LOAD_SINGLE_FORCE: {
			IfcStructuralLoadSingleForce ifcStructuralLoadSingleForce = (IfcStructuralLoadSingleForce) theEObject;
			T result = caseIfcStructuralLoadSingleForce(ifcStructuralLoadSingleForce);
			if (result == null)
				result = caseIfcStructuralLoadStatic(ifcStructuralLoadSingleForce);
			if (result == null)
				result = caseIfcStructuralLoadOrResult(ifcStructuralLoadSingleForce);
			if (result == null)
				result = caseIfcStructuralLoad(ifcStructuralLoadSingleForce);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_STRUCTURAL_LOAD_SINGLE_FORCE_WARPING: {
			IfcStructuralLoadSingleForceWarping ifcStructuralLoadSingleForceWarping = (IfcStructuralLoadSingleForceWarping) theEObject;
			T result = caseIfcStructuralLoadSingleForceWarping(ifcStructuralLoadSingleForceWarping);
			if (result == null)
				result = caseIfcStructuralLoadSingleForce(ifcStructuralLoadSingleForceWarping);
			if (result == null)
				result = caseIfcStructuralLoadStatic(ifcStructuralLoadSingleForceWarping);
			if (result == null)
				result = caseIfcStructuralLoadOrResult(ifcStructuralLoadSingleForceWarping);
			if (result == null)
				result = caseIfcStructuralLoad(ifcStructuralLoadSingleForceWarping);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_STRUCTURAL_LOAD_STATIC: {
			IfcStructuralLoadStatic ifcStructuralLoadStatic = (IfcStructuralLoadStatic) theEObject;
			T result = caseIfcStructuralLoadStatic(ifcStructuralLoadStatic);
			if (result == null)
				result = caseIfcStructuralLoadOrResult(ifcStructuralLoadStatic);
			if (result == null)
				result = caseIfcStructuralLoad(ifcStructuralLoadStatic);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_STRUCTURAL_LOAD_TEMPERATURE: {
			IfcStructuralLoadTemperature ifcStructuralLoadTemperature = (IfcStructuralLoadTemperature) theEObject;
			T result = caseIfcStructuralLoadTemperature(ifcStructuralLoadTemperature);
			if (result == null)
				result = caseIfcStructuralLoadStatic(ifcStructuralLoadTemperature);
			if (result == null)
				result = caseIfcStructuralLoadOrResult(ifcStructuralLoadTemperature);
			if (result == null)
				result = caseIfcStructuralLoad(ifcStructuralLoadTemperature);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_STRUCTURAL_MEMBER: {
			IfcStructuralMember ifcStructuralMember = (IfcStructuralMember) theEObject;
			T result = caseIfcStructuralMember(ifcStructuralMember);
			if (result == null)
				result = caseIfcStructuralItem(ifcStructuralMember);
			if (result == null)
				result = caseIfcProduct(ifcStructuralMember);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcStructuralMember);
			if (result == null)
				result = caseIfcObject(ifcStructuralMember);
			if (result == null)
				result = caseIfcProductSelect(ifcStructuralMember);
			if (result == null)
				result = caseIfcObjectDefinition(ifcStructuralMember);
			if (result == null)
				result = caseIfcRoot(ifcStructuralMember);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcStructuralMember);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_STRUCTURAL_PLANAR_ACTION: {
			IfcStructuralPlanarAction ifcStructuralPlanarAction = (IfcStructuralPlanarAction) theEObject;
			T result = caseIfcStructuralPlanarAction(ifcStructuralPlanarAction);
			if (result == null)
				result = caseIfcStructuralSurfaceAction(ifcStructuralPlanarAction);
			if (result == null)
				result = caseIfcStructuralAction(ifcStructuralPlanarAction);
			if (result == null)
				result = caseIfcStructuralActivity(ifcStructuralPlanarAction);
			if (result == null)
				result = caseIfcProduct(ifcStructuralPlanarAction);
			if (result == null)
				result = caseIfcObject(ifcStructuralPlanarAction);
			if (result == null)
				result = caseIfcProductSelect(ifcStructuralPlanarAction);
			if (result == null)
				result = caseIfcObjectDefinition(ifcStructuralPlanarAction);
			if (result == null)
				result = caseIfcRoot(ifcStructuralPlanarAction);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcStructuralPlanarAction);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_STRUCTURAL_POINT_ACTION: {
			IfcStructuralPointAction ifcStructuralPointAction = (IfcStructuralPointAction) theEObject;
			T result = caseIfcStructuralPointAction(ifcStructuralPointAction);
			if (result == null)
				result = caseIfcStructuralAction(ifcStructuralPointAction);
			if (result == null)
				result = caseIfcStructuralActivity(ifcStructuralPointAction);
			if (result == null)
				result = caseIfcProduct(ifcStructuralPointAction);
			if (result == null)
				result = caseIfcObject(ifcStructuralPointAction);
			if (result == null)
				result = caseIfcProductSelect(ifcStructuralPointAction);
			if (result == null)
				result = caseIfcObjectDefinition(ifcStructuralPointAction);
			if (result == null)
				result = caseIfcRoot(ifcStructuralPointAction);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcStructuralPointAction);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_STRUCTURAL_POINT_CONNECTION: {
			IfcStructuralPointConnection ifcStructuralPointConnection = (IfcStructuralPointConnection) theEObject;
			T result = caseIfcStructuralPointConnection(ifcStructuralPointConnection);
			if (result == null)
				result = caseIfcStructuralConnection(ifcStructuralPointConnection);
			if (result == null)
				result = caseIfcStructuralItem(ifcStructuralPointConnection);
			if (result == null)
				result = caseIfcProduct(ifcStructuralPointConnection);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcStructuralPointConnection);
			if (result == null)
				result = caseIfcObject(ifcStructuralPointConnection);
			if (result == null)
				result = caseIfcProductSelect(ifcStructuralPointConnection);
			if (result == null)
				result = caseIfcObjectDefinition(ifcStructuralPointConnection);
			if (result == null)
				result = caseIfcRoot(ifcStructuralPointConnection);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcStructuralPointConnection);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_STRUCTURAL_POINT_REACTION: {
			IfcStructuralPointReaction ifcStructuralPointReaction = (IfcStructuralPointReaction) theEObject;
			T result = caseIfcStructuralPointReaction(ifcStructuralPointReaction);
			if (result == null)
				result = caseIfcStructuralReaction(ifcStructuralPointReaction);
			if (result == null)
				result = caseIfcStructuralActivity(ifcStructuralPointReaction);
			if (result == null)
				result = caseIfcProduct(ifcStructuralPointReaction);
			if (result == null)
				result = caseIfcObject(ifcStructuralPointReaction);
			if (result == null)
				result = caseIfcProductSelect(ifcStructuralPointReaction);
			if (result == null)
				result = caseIfcObjectDefinition(ifcStructuralPointReaction);
			if (result == null)
				result = caseIfcRoot(ifcStructuralPointReaction);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcStructuralPointReaction);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_STRUCTURAL_REACTION: {
			IfcStructuralReaction ifcStructuralReaction = (IfcStructuralReaction) theEObject;
			T result = caseIfcStructuralReaction(ifcStructuralReaction);
			if (result == null)
				result = caseIfcStructuralActivity(ifcStructuralReaction);
			if (result == null)
				result = caseIfcProduct(ifcStructuralReaction);
			if (result == null)
				result = caseIfcObject(ifcStructuralReaction);
			if (result == null)
				result = caseIfcProductSelect(ifcStructuralReaction);
			if (result == null)
				result = caseIfcObjectDefinition(ifcStructuralReaction);
			if (result == null)
				result = caseIfcRoot(ifcStructuralReaction);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcStructuralReaction);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_STRUCTURAL_RESULT_GROUP: {
			IfcStructuralResultGroup ifcStructuralResultGroup = (IfcStructuralResultGroup) theEObject;
			T result = caseIfcStructuralResultGroup(ifcStructuralResultGroup);
			if (result == null)
				result = caseIfcGroup(ifcStructuralResultGroup);
			if (result == null)
				result = caseIfcObject(ifcStructuralResultGroup);
			if (result == null)
				result = caseIfcObjectDefinition(ifcStructuralResultGroup);
			if (result == null)
				result = caseIfcRoot(ifcStructuralResultGroup);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcStructuralResultGroup);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_STRUCTURAL_SURFACE_ACTION: {
			IfcStructuralSurfaceAction ifcStructuralSurfaceAction = (IfcStructuralSurfaceAction) theEObject;
			T result = caseIfcStructuralSurfaceAction(ifcStructuralSurfaceAction);
			if (result == null)
				result = caseIfcStructuralAction(ifcStructuralSurfaceAction);
			if (result == null)
				result = caseIfcStructuralActivity(ifcStructuralSurfaceAction);
			if (result == null)
				result = caseIfcProduct(ifcStructuralSurfaceAction);
			if (result == null)
				result = caseIfcObject(ifcStructuralSurfaceAction);
			if (result == null)
				result = caseIfcProductSelect(ifcStructuralSurfaceAction);
			if (result == null)
				result = caseIfcObjectDefinition(ifcStructuralSurfaceAction);
			if (result == null)
				result = caseIfcRoot(ifcStructuralSurfaceAction);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcStructuralSurfaceAction);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_STRUCTURAL_SURFACE_CONNECTION: {
			IfcStructuralSurfaceConnection ifcStructuralSurfaceConnection = (IfcStructuralSurfaceConnection) theEObject;
			T result = caseIfcStructuralSurfaceConnection(ifcStructuralSurfaceConnection);
			if (result == null)
				result = caseIfcStructuralConnection(ifcStructuralSurfaceConnection);
			if (result == null)
				result = caseIfcStructuralItem(ifcStructuralSurfaceConnection);
			if (result == null)
				result = caseIfcProduct(ifcStructuralSurfaceConnection);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcStructuralSurfaceConnection);
			if (result == null)
				result = caseIfcObject(ifcStructuralSurfaceConnection);
			if (result == null)
				result = caseIfcProductSelect(ifcStructuralSurfaceConnection);
			if (result == null)
				result = caseIfcObjectDefinition(ifcStructuralSurfaceConnection);
			if (result == null)
				result = caseIfcRoot(ifcStructuralSurfaceConnection);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcStructuralSurfaceConnection);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_STRUCTURAL_SURFACE_MEMBER: {
			IfcStructuralSurfaceMember ifcStructuralSurfaceMember = (IfcStructuralSurfaceMember) theEObject;
			T result = caseIfcStructuralSurfaceMember(ifcStructuralSurfaceMember);
			if (result == null)
				result = caseIfcStructuralMember(ifcStructuralSurfaceMember);
			if (result == null)
				result = caseIfcStructuralItem(ifcStructuralSurfaceMember);
			if (result == null)
				result = caseIfcProduct(ifcStructuralSurfaceMember);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcStructuralSurfaceMember);
			if (result == null)
				result = caseIfcObject(ifcStructuralSurfaceMember);
			if (result == null)
				result = caseIfcProductSelect(ifcStructuralSurfaceMember);
			if (result == null)
				result = caseIfcObjectDefinition(ifcStructuralSurfaceMember);
			if (result == null)
				result = caseIfcRoot(ifcStructuralSurfaceMember);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcStructuralSurfaceMember);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_STRUCTURAL_SURFACE_MEMBER_VARYING: {
			IfcStructuralSurfaceMemberVarying ifcStructuralSurfaceMemberVarying = (IfcStructuralSurfaceMemberVarying) theEObject;
			T result = caseIfcStructuralSurfaceMemberVarying(ifcStructuralSurfaceMemberVarying);
			if (result == null)
				result = caseIfcStructuralSurfaceMember(ifcStructuralSurfaceMemberVarying);
			if (result == null)
				result = caseIfcStructuralMember(ifcStructuralSurfaceMemberVarying);
			if (result == null)
				result = caseIfcStructuralItem(ifcStructuralSurfaceMemberVarying);
			if (result == null)
				result = caseIfcProduct(ifcStructuralSurfaceMemberVarying);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcStructuralSurfaceMemberVarying);
			if (result == null)
				result = caseIfcObject(ifcStructuralSurfaceMemberVarying);
			if (result == null)
				result = caseIfcProductSelect(ifcStructuralSurfaceMemberVarying);
			if (result == null)
				result = caseIfcObjectDefinition(ifcStructuralSurfaceMemberVarying);
			if (result == null)
				result = caseIfcRoot(ifcStructuralSurfaceMemberVarying);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcStructuralSurfaceMemberVarying);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_STRUCTURAL_SURFACE_REACTION: {
			IfcStructuralSurfaceReaction ifcStructuralSurfaceReaction = (IfcStructuralSurfaceReaction) theEObject;
			T result = caseIfcStructuralSurfaceReaction(ifcStructuralSurfaceReaction);
			if (result == null)
				result = caseIfcStructuralReaction(ifcStructuralSurfaceReaction);
			if (result == null)
				result = caseIfcStructuralActivity(ifcStructuralSurfaceReaction);
			if (result == null)
				result = caseIfcProduct(ifcStructuralSurfaceReaction);
			if (result == null)
				result = caseIfcObject(ifcStructuralSurfaceReaction);
			if (result == null)
				result = caseIfcProductSelect(ifcStructuralSurfaceReaction);
			if (result == null)
				result = caseIfcObjectDefinition(ifcStructuralSurfaceReaction);
			if (result == null)
				result = caseIfcRoot(ifcStructuralSurfaceReaction);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcStructuralSurfaceReaction);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_STYLE_MODEL: {
			IfcStyleModel ifcStyleModel = (IfcStyleModel) theEObject;
			T result = caseIfcStyleModel(ifcStyleModel);
			if (result == null)
				result = caseIfcRepresentation(ifcStyleModel);
			if (result == null)
				result = caseIfcLayeredItem(ifcStyleModel);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_STYLED_ITEM: {
			IfcStyledItem ifcStyledItem = (IfcStyledItem) theEObject;
			T result = caseIfcStyledItem(ifcStyledItem);
			if (result == null)
				result = caseIfcRepresentationItem(ifcStyledItem);
			if (result == null)
				result = caseIfcLayeredItem(ifcStyledItem);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_STYLED_REPRESENTATION: {
			IfcStyledRepresentation ifcStyledRepresentation = (IfcStyledRepresentation) theEObject;
			T result = caseIfcStyledRepresentation(ifcStyledRepresentation);
			if (result == null)
				result = caseIfcStyleModel(ifcStyledRepresentation);
			if (result == null)
				result = caseIfcRepresentation(ifcStyledRepresentation);
			if (result == null)
				result = caseIfcLayeredItem(ifcStyledRepresentation);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SUB_CONTRACT_RESOURCE: {
			IfcSubContractResource ifcSubContractResource = (IfcSubContractResource) theEObject;
			T result = caseIfcSubContractResource(ifcSubContractResource);
			if (result == null)
				result = caseIfcConstructionResource(ifcSubContractResource);
			if (result == null)
				result = caseIfcResource(ifcSubContractResource);
			if (result == null)
				result = caseIfcObject(ifcSubContractResource);
			if (result == null)
				result = caseIfcResourceSelect(ifcSubContractResource);
			if (result == null)
				result = caseIfcObjectDefinition(ifcSubContractResource);
			if (result == null)
				result = caseIfcRoot(ifcSubContractResource);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcSubContractResource);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SUB_CONTRACT_RESOURCE_TYPE: {
			IfcSubContractResourceType ifcSubContractResourceType = (IfcSubContractResourceType) theEObject;
			T result = caseIfcSubContractResourceType(ifcSubContractResourceType);
			if (result == null)
				result = caseIfcConstructionResourceType(ifcSubContractResourceType);
			if (result == null)
				result = caseIfcTypeResource(ifcSubContractResourceType);
			if (result == null)
				result = caseIfcTypeObject(ifcSubContractResourceType);
			if (result == null)
				result = caseIfcResourceSelect(ifcSubContractResourceType);
			if (result == null)
				result = caseIfcObjectDefinition(ifcSubContractResourceType);
			if (result == null)
				result = caseIfcRoot(ifcSubContractResourceType);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcSubContractResourceType);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SUBEDGE: {
			IfcSubedge ifcSubedge = (IfcSubedge) theEObject;
			T result = caseIfcSubedge(ifcSubedge);
			if (result == null)
				result = caseIfcEdge(ifcSubedge);
			if (result == null)
				result = caseIfcTopologicalRepresentationItem(ifcSubedge);
			if (result == null)
				result = caseIfcRepresentationItem(ifcSubedge);
			if (result == null)
				result = caseIfcLayeredItem(ifcSubedge);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SURFACE: {
			IfcSurface ifcSurface = (IfcSurface) theEObject;
			T result = caseIfcSurface(ifcSurface);
			if (result == null)
				result = caseIfcGeometricRepresentationItem(ifcSurface);
			if (result == null)
				result = caseIfcGeometricSetSelect(ifcSurface);
			if (result == null)
				result = caseIfcSurfaceOrFaceSurface(ifcSurface);
			if (result == null)
				result = caseIfcRepresentationItem(ifcSurface);
			if (result == null)
				result = caseIfcLayeredItem(ifcSurface);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SURFACE_CURVE: {
			IfcSurfaceCurve ifcSurfaceCurve = (IfcSurfaceCurve) theEObject;
			T result = caseIfcSurfaceCurve(ifcSurfaceCurve);
			if (result == null)
				result = caseIfcCurve(ifcSurfaceCurve);
			if (result == null)
				result = caseIfcCurveOnSurface(ifcSurfaceCurve);
			if (result == null)
				result = caseIfcGeometricRepresentationItem(ifcSurfaceCurve);
			if (result == null)
				result = caseIfcGeometricSetSelect(ifcSurfaceCurve);
			if (result == null)
				result = caseIfcRepresentationItem(ifcSurfaceCurve);
			if (result == null)
				result = caseIfcLayeredItem(ifcSurfaceCurve);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SURFACE_CURVE_SWEPT_AREA_SOLID: {
			IfcSurfaceCurveSweptAreaSolid ifcSurfaceCurveSweptAreaSolid = (IfcSurfaceCurveSweptAreaSolid) theEObject;
			T result = caseIfcSurfaceCurveSweptAreaSolid(ifcSurfaceCurveSweptAreaSolid);
			if (result == null)
				result = caseIfcSweptAreaSolid(ifcSurfaceCurveSweptAreaSolid);
			if (result == null)
				result = caseIfcSolidModel(ifcSurfaceCurveSweptAreaSolid);
			if (result == null)
				result = caseIfcGeometricRepresentationItem(ifcSurfaceCurveSweptAreaSolid);
			if (result == null)
				result = caseIfcBooleanOperand(ifcSurfaceCurveSweptAreaSolid);
			if (result == null)
				result = caseIfcSolidOrShell(ifcSurfaceCurveSweptAreaSolid);
			if (result == null)
				result = caseIfcRepresentationItem(ifcSurfaceCurveSweptAreaSolid);
			if (result == null)
				result = caseIfcLayeredItem(ifcSurfaceCurveSweptAreaSolid);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SURFACE_FEATURE: {
			IfcSurfaceFeature ifcSurfaceFeature = (IfcSurfaceFeature) theEObject;
			T result = caseIfcSurfaceFeature(ifcSurfaceFeature);
			if (result == null)
				result = caseIfcFeatureElement(ifcSurfaceFeature);
			if (result == null)
				result = caseIfcElement(ifcSurfaceFeature);
			if (result == null)
				result = caseIfcProduct(ifcSurfaceFeature);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcSurfaceFeature);
			if (result == null)
				result = caseIfcObject(ifcSurfaceFeature);
			if (result == null)
				result = caseIfcProductSelect(ifcSurfaceFeature);
			if (result == null)
				result = caseIfcObjectDefinition(ifcSurfaceFeature);
			if (result == null)
				result = caseIfcRoot(ifcSurfaceFeature);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcSurfaceFeature);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SURFACE_OF_LINEAR_EXTRUSION: {
			IfcSurfaceOfLinearExtrusion ifcSurfaceOfLinearExtrusion = (IfcSurfaceOfLinearExtrusion) theEObject;
			T result = caseIfcSurfaceOfLinearExtrusion(ifcSurfaceOfLinearExtrusion);
			if (result == null)
				result = caseIfcSweptSurface(ifcSurfaceOfLinearExtrusion);
			if (result == null)
				result = caseIfcSurface(ifcSurfaceOfLinearExtrusion);
			if (result == null)
				result = caseIfcGeometricRepresentationItem(ifcSurfaceOfLinearExtrusion);
			if (result == null)
				result = caseIfcGeometricSetSelect(ifcSurfaceOfLinearExtrusion);
			if (result == null)
				result = caseIfcSurfaceOrFaceSurface(ifcSurfaceOfLinearExtrusion);
			if (result == null)
				result = caseIfcRepresentationItem(ifcSurfaceOfLinearExtrusion);
			if (result == null)
				result = caseIfcLayeredItem(ifcSurfaceOfLinearExtrusion);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SURFACE_OF_REVOLUTION: {
			IfcSurfaceOfRevolution ifcSurfaceOfRevolution = (IfcSurfaceOfRevolution) theEObject;
			T result = caseIfcSurfaceOfRevolution(ifcSurfaceOfRevolution);
			if (result == null)
				result = caseIfcSweptSurface(ifcSurfaceOfRevolution);
			if (result == null)
				result = caseIfcSurface(ifcSurfaceOfRevolution);
			if (result == null)
				result = caseIfcGeometricRepresentationItem(ifcSurfaceOfRevolution);
			if (result == null)
				result = caseIfcGeometricSetSelect(ifcSurfaceOfRevolution);
			if (result == null)
				result = caseIfcSurfaceOrFaceSurface(ifcSurfaceOfRevolution);
			if (result == null)
				result = caseIfcRepresentationItem(ifcSurfaceOfRevolution);
			if (result == null)
				result = caseIfcLayeredItem(ifcSurfaceOfRevolution);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SURFACE_REINFORCEMENT_AREA: {
			IfcSurfaceReinforcementArea ifcSurfaceReinforcementArea = (IfcSurfaceReinforcementArea) theEObject;
			T result = caseIfcSurfaceReinforcementArea(ifcSurfaceReinforcementArea);
			if (result == null)
				result = caseIfcStructuralLoadOrResult(ifcSurfaceReinforcementArea);
			if (result == null)
				result = caseIfcStructuralLoad(ifcSurfaceReinforcementArea);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SURFACE_STYLE: {
			IfcSurfaceStyle ifcSurfaceStyle = (IfcSurfaceStyle) theEObject;
			T result = caseIfcSurfaceStyle(ifcSurfaceStyle);
			if (result == null)
				result = caseIfcPresentationStyle(ifcSurfaceStyle);
			if (result == null)
				result = caseIfcPresentationStyleSelect(ifcSurfaceStyle);
			if (result == null)
				result = caseIfcStyleAssignmentSelect(ifcSurfaceStyle);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SURFACE_STYLE_LIGHTING: {
			IfcSurfaceStyleLighting ifcSurfaceStyleLighting = (IfcSurfaceStyleLighting) theEObject;
			T result = caseIfcSurfaceStyleLighting(ifcSurfaceStyleLighting);
			if (result == null)
				result = caseIfcPresentationItem(ifcSurfaceStyleLighting);
			if (result == null)
				result = caseIfcSurfaceStyleElementSelect(ifcSurfaceStyleLighting);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SURFACE_STYLE_REFRACTION: {
			IfcSurfaceStyleRefraction ifcSurfaceStyleRefraction = (IfcSurfaceStyleRefraction) theEObject;
			T result = caseIfcSurfaceStyleRefraction(ifcSurfaceStyleRefraction);
			if (result == null)
				result = caseIfcPresentationItem(ifcSurfaceStyleRefraction);
			if (result == null)
				result = caseIfcSurfaceStyleElementSelect(ifcSurfaceStyleRefraction);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SURFACE_STYLE_RENDERING: {
			IfcSurfaceStyleRendering ifcSurfaceStyleRendering = (IfcSurfaceStyleRendering) theEObject;
			T result = caseIfcSurfaceStyleRendering(ifcSurfaceStyleRendering);
			if (result == null)
				result = caseIfcSurfaceStyleShading(ifcSurfaceStyleRendering);
			if (result == null)
				result = caseIfcPresentationItem(ifcSurfaceStyleRendering);
			if (result == null)
				result = caseIfcSurfaceStyleElementSelect(ifcSurfaceStyleRendering);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SURFACE_STYLE_SHADING: {
			IfcSurfaceStyleShading ifcSurfaceStyleShading = (IfcSurfaceStyleShading) theEObject;
			T result = caseIfcSurfaceStyleShading(ifcSurfaceStyleShading);
			if (result == null)
				result = caseIfcPresentationItem(ifcSurfaceStyleShading);
			if (result == null)
				result = caseIfcSurfaceStyleElementSelect(ifcSurfaceStyleShading);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SURFACE_STYLE_WITH_TEXTURES: {
			IfcSurfaceStyleWithTextures ifcSurfaceStyleWithTextures = (IfcSurfaceStyleWithTextures) theEObject;
			T result = caseIfcSurfaceStyleWithTextures(ifcSurfaceStyleWithTextures);
			if (result == null)
				result = caseIfcPresentationItem(ifcSurfaceStyleWithTextures);
			if (result == null)
				result = caseIfcSurfaceStyleElementSelect(ifcSurfaceStyleWithTextures);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SURFACE_TEXTURE: {
			IfcSurfaceTexture ifcSurfaceTexture = (IfcSurfaceTexture) theEObject;
			T result = caseIfcSurfaceTexture(ifcSurfaceTexture);
			if (result == null)
				result = caseIfcPresentationItem(ifcSurfaceTexture);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SWEPT_AREA_SOLID: {
			IfcSweptAreaSolid ifcSweptAreaSolid = (IfcSweptAreaSolid) theEObject;
			T result = caseIfcSweptAreaSolid(ifcSweptAreaSolid);
			if (result == null)
				result = caseIfcSolidModel(ifcSweptAreaSolid);
			if (result == null)
				result = caseIfcGeometricRepresentationItem(ifcSweptAreaSolid);
			if (result == null)
				result = caseIfcBooleanOperand(ifcSweptAreaSolid);
			if (result == null)
				result = caseIfcSolidOrShell(ifcSweptAreaSolid);
			if (result == null)
				result = caseIfcRepresentationItem(ifcSweptAreaSolid);
			if (result == null)
				result = caseIfcLayeredItem(ifcSweptAreaSolid);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SWEPT_DISK_SOLID: {
			IfcSweptDiskSolid ifcSweptDiskSolid = (IfcSweptDiskSolid) theEObject;
			T result = caseIfcSweptDiskSolid(ifcSweptDiskSolid);
			if (result == null)
				result = caseIfcSolidModel(ifcSweptDiskSolid);
			if (result == null)
				result = caseIfcGeometricRepresentationItem(ifcSweptDiskSolid);
			if (result == null)
				result = caseIfcBooleanOperand(ifcSweptDiskSolid);
			if (result == null)
				result = caseIfcSolidOrShell(ifcSweptDiskSolid);
			if (result == null)
				result = caseIfcRepresentationItem(ifcSweptDiskSolid);
			if (result == null)
				result = caseIfcLayeredItem(ifcSweptDiskSolid);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SWEPT_DISK_SOLID_POLYGONAL: {
			IfcSweptDiskSolidPolygonal ifcSweptDiskSolidPolygonal = (IfcSweptDiskSolidPolygonal) theEObject;
			T result = caseIfcSweptDiskSolidPolygonal(ifcSweptDiskSolidPolygonal);
			if (result == null)
				result = caseIfcSweptDiskSolid(ifcSweptDiskSolidPolygonal);
			if (result == null)
				result = caseIfcSolidModel(ifcSweptDiskSolidPolygonal);
			if (result == null)
				result = caseIfcGeometricRepresentationItem(ifcSweptDiskSolidPolygonal);
			if (result == null)
				result = caseIfcBooleanOperand(ifcSweptDiskSolidPolygonal);
			if (result == null)
				result = caseIfcSolidOrShell(ifcSweptDiskSolidPolygonal);
			if (result == null)
				result = caseIfcRepresentationItem(ifcSweptDiskSolidPolygonal);
			if (result == null)
				result = caseIfcLayeredItem(ifcSweptDiskSolidPolygonal);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SWEPT_SURFACE: {
			IfcSweptSurface ifcSweptSurface = (IfcSweptSurface) theEObject;
			T result = caseIfcSweptSurface(ifcSweptSurface);
			if (result == null)
				result = caseIfcSurface(ifcSweptSurface);
			if (result == null)
				result = caseIfcGeometricRepresentationItem(ifcSweptSurface);
			if (result == null)
				result = caseIfcGeometricSetSelect(ifcSweptSurface);
			if (result == null)
				result = caseIfcSurfaceOrFaceSurface(ifcSweptSurface);
			if (result == null)
				result = caseIfcRepresentationItem(ifcSweptSurface);
			if (result == null)
				result = caseIfcLayeredItem(ifcSweptSurface);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SWITCHING_DEVICE: {
			IfcSwitchingDevice ifcSwitchingDevice = (IfcSwitchingDevice) theEObject;
			T result = caseIfcSwitchingDevice(ifcSwitchingDevice);
			if (result == null)
				result = caseIfcFlowController(ifcSwitchingDevice);
			if (result == null)
				result = caseIfcDistributionFlowElement(ifcSwitchingDevice);
			if (result == null)
				result = caseIfcDistributionElement(ifcSwitchingDevice);
			if (result == null)
				result = caseIfcElement(ifcSwitchingDevice);
			if (result == null)
				result = caseIfcProduct(ifcSwitchingDevice);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcSwitchingDevice);
			if (result == null)
				result = caseIfcObject(ifcSwitchingDevice);
			if (result == null)
				result = caseIfcProductSelect(ifcSwitchingDevice);
			if (result == null)
				result = caseIfcObjectDefinition(ifcSwitchingDevice);
			if (result == null)
				result = caseIfcRoot(ifcSwitchingDevice);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcSwitchingDevice);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SWITCHING_DEVICE_TYPE: {
			IfcSwitchingDeviceType ifcSwitchingDeviceType = (IfcSwitchingDeviceType) theEObject;
			T result = caseIfcSwitchingDeviceType(ifcSwitchingDeviceType);
			if (result == null)
				result = caseIfcFlowControllerType(ifcSwitchingDeviceType);
			if (result == null)
				result = caseIfcDistributionFlowElementType(ifcSwitchingDeviceType);
			if (result == null)
				result = caseIfcDistributionElementType(ifcSwitchingDeviceType);
			if (result == null)
				result = caseIfcElementType(ifcSwitchingDeviceType);
			if (result == null)
				result = caseIfcTypeProduct(ifcSwitchingDeviceType);
			if (result == null)
				result = caseIfcTypeObject(ifcSwitchingDeviceType);
			if (result == null)
				result = caseIfcProductSelect(ifcSwitchingDeviceType);
			if (result == null)
				result = caseIfcObjectDefinition(ifcSwitchingDeviceType);
			if (result == null)
				result = caseIfcRoot(ifcSwitchingDeviceType);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcSwitchingDeviceType);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SYSTEM: {
			IfcSystem ifcSystem = (IfcSystem) theEObject;
			T result = caseIfcSystem(ifcSystem);
			if (result == null)
				result = caseIfcGroup(ifcSystem);
			if (result == null)
				result = caseIfcObject(ifcSystem);
			if (result == null)
				result = caseIfcObjectDefinition(ifcSystem);
			if (result == null)
				result = caseIfcRoot(ifcSystem);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcSystem);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SYSTEM_FURNITURE_ELEMENT: {
			IfcSystemFurnitureElement ifcSystemFurnitureElement = (IfcSystemFurnitureElement) theEObject;
			T result = caseIfcSystemFurnitureElement(ifcSystemFurnitureElement);
			if (result == null)
				result = caseIfcFurnishingElement(ifcSystemFurnitureElement);
			if (result == null)
				result = caseIfcElement(ifcSystemFurnitureElement);
			if (result == null)
				result = caseIfcProduct(ifcSystemFurnitureElement);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcSystemFurnitureElement);
			if (result == null)
				result = caseIfcObject(ifcSystemFurnitureElement);
			if (result == null)
				result = caseIfcProductSelect(ifcSystemFurnitureElement);
			if (result == null)
				result = caseIfcObjectDefinition(ifcSystemFurnitureElement);
			if (result == null)
				result = caseIfcRoot(ifcSystemFurnitureElement);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcSystemFurnitureElement);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SYSTEM_FURNITURE_ELEMENT_TYPE: {
			IfcSystemFurnitureElementType ifcSystemFurnitureElementType = (IfcSystemFurnitureElementType) theEObject;
			T result = caseIfcSystemFurnitureElementType(ifcSystemFurnitureElementType);
			if (result == null)
				result = caseIfcFurnishingElementType(ifcSystemFurnitureElementType);
			if (result == null)
				result = caseIfcElementType(ifcSystemFurnitureElementType);
			if (result == null)
				result = caseIfcTypeProduct(ifcSystemFurnitureElementType);
			if (result == null)
				result = caseIfcTypeObject(ifcSystemFurnitureElementType);
			if (result == null)
				result = caseIfcProductSelect(ifcSystemFurnitureElementType);
			if (result == null)
				result = caseIfcObjectDefinition(ifcSystemFurnitureElementType);
			if (result == null)
				result = caseIfcRoot(ifcSystemFurnitureElementType);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcSystemFurnitureElementType);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_TSHAPE_PROFILE_DEF: {
			IfcTShapeProfileDef ifcTShapeProfileDef = (IfcTShapeProfileDef) theEObject;
			T result = caseIfcTShapeProfileDef(ifcTShapeProfileDef);
			if (result == null)
				result = caseIfcParameterizedProfileDef(ifcTShapeProfileDef);
			if (result == null)
				result = caseIfcProfileDef(ifcTShapeProfileDef);
			if (result == null)
				result = caseIfcResourceObjectSelect(ifcTShapeProfileDef);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_TABLE: {
			IfcTable ifcTable = (IfcTable) theEObject;
			T result = caseIfcTable(ifcTable);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcTable);
			if (result == null)
				result = caseIfcObjectReferenceSelect(ifcTable);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_TABLE_COLUMN: {
			IfcTableColumn ifcTableColumn = (IfcTableColumn) theEObject;
			T result = caseIfcTableColumn(ifcTableColumn);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_TABLE_ROW: {
			IfcTableRow ifcTableRow = (IfcTableRow) theEObject;
			T result = caseIfcTableRow(ifcTableRow);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_TANK: {
			IfcTank ifcTank = (IfcTank) theEObject;
			T result = caseIfcTank(ifcTank);
			if (result == null)
				result = caseIfcFlowStorageDevice(ifcTank);
			if (result == null)
				result = caseIfcDistributionFlowElement(ifcTank);
			if (result == null)
				result = caseIfcDistributionElement(ifcTank);
			if (result == null)
				result = caseIfcElement(ifcTank);
			if (result == null)
				result = caseIfcProduct(ifcTank);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcTank);
			if (result == null)
				result = caseIfcObject(ifcTank);
			if (result == null)
				result = caseIfcProductSelect(ifcTank);
			if (result == null)
				result = caseIfcObjectDefinition(ifcTank);
			if (result == null)
				result = caseIfcRoot(ifcTank);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcTank);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_TANK_TYPE: {
			IfcTankType ifcTankType = (IfcTankType) theEObject;
			T result = caseIfcTankType(ifcTankType);
			if (result == null)
				result = caseIfcFlowStorageDeviceType(ifcTankType);
			if (result == null)
				result = caseIfcDistributionFlowElementType(ifcTankType);
			if (result == null)
				result = caseIfcDistributionElementType(ifcTankType);
			if (result == null)
				result = caseIfcElementType(ifcTankType);
			if (result == null)
				result = caseIfcTypeProduct(ifcTankType);
			if (result == null)
				result = caseIfcTypeObject(ifcTankType);
			if (result == null)
				result = caseIfcProductSelect(ifcTankType);
			if (result == null)
				result = caseIfcObjectDefinition(ifcTankType);
			if (result == null)
				result = caseIfcRoot(ifcTankType);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcTankType);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_TASK: {
			IfcTask ifcTask = (IfcTask) theEObject;
			T result = caseIfcTask(ifcTask);
			if (result == null)
				result = caseIfcProcess(ifcTask);
			if (result == null)
				result = caseIfcObject(ifcTask);
			if (result == null)
				result = caseIfcProcessSelect(ifcTask);
			if (result == null)
				result = caseIfcObjectDefinition(ifcTask);
			if (result == null)
				result = caseIfcRoot(ifcTask);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcTask);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_TASK_TIME: {
			IfcTaskTime ifcTaskTime = (IfcTaskTime) theEObject;
			T result = caseIfcTaskTime(ifcTaskTime);
			if (result == null)
				result = caseIfcSchedulingTime(ifcTaskTime);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_TASK_TIME_RECURRING: {
			IfcTaskTimeRecurring ifcTaskTimeRecurring = (IfcTaskTimeRecurring) theEObject;
			T result = caseIfcTaskTimeRecurring(ifcTaskTimeRecurring);
			if (result == null)
				result = caseIfcTaskTime(ifcTaskTimeRecurring);
			if (result == null)
				result = caseIfcSchedulingTime(ifcTaskTimeRecurring);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_TASK_TYPE: {
			IfcTaskType ifcTaskType = (IfcTaskType) theEObject;
			T result = caseIfcTaskType(ifcTaskType);
			if (result == null)
				result = caseIfcTypeProcess(ifcTaskType);
			if (result == null)
				result = caseIfcTypeObject(ifcTaskType);
			if (result == null)
				result = caseIfcProcessSelect(ifcTaskType);
			if (result == null)
				result = caseIfcObjectDefinition(ifcTaskType);
			if (result == null)
				result = caseIfcRoot(ifcTaskType);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcTaskType);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_TELECOM_ADDRESS: {
			IfcTelecomAddress ifcTelecomAddress = (IfcTelecomAddress) theEObject;
			T result = caseIfcTelecomAddress(ifcTelecomAddress);
			if (result == null)
				result = caseIfcAddress(ifcTelecomAddress);
			if (result == null)
				result = caseIfcObjectReferenceSelect(ifcTelecomAddress);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_TENDON: {
			IfcTendon ifcTendon = (IfcTendon) theEObject;
			T result = caseIfcTendon(ifcTendon);
			if (result == null)
				result = caseIfcReinforcingElement(ifcTendon);
			if (result == null)
				result = caseIfcElementComponent(ifcTendon);
			if (result == null)
				result = caseIfcElement(ifcTendon);
			if (result == null)
				result = caseIfcProduct(ifcTendon);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcTendon);
			if (result == null)
				result = caseIfcObject(ifcTendon);
			if (result == null)
				result = caseIfcProductSelect(ifcTendon);
			if (result == null)
				result = caseIfcObjectDefinition(ifcTendon);
			if (result == null)
				result = caseIfcRoot(ifcTendon);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcTendon);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_TENDON_ANCHOR: {
			IfcTendonAnchor ifcTendonAnchor = (IfcTendonAnchor) theEObject;
			T result = caseIfcTendonAnchor(ifcTendonAnchor);
			if (result == null)
				result = caseIfcReinforcingElement(ifcTendonAnchor);
			if (result == null)
				result = caseIfcElementComponent(ifcTendonAnchor);
			if (result == null)
				result = caseIfcElement(ifcTendonAnchor);
			if (result == null)
				result = caseIfcProduct(ifcTendonAnchor);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcTendonAnchor);
			if (result == null)
				result = caseIfcObject(ifcTendonAnchor);
			if (result == null)
				result = caseIfcProductSelect(ifcTendonAnchor);
			if (result == null)
				result = caseIfcObjectDefinition(ifcTendonAnchor);
			if (result == null)
				result = caseIfcRoot(ifcTendonAnchor);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcTendonAnchor);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_TENDON_ANCHOR_TYPE: {
			IfcTendonAnchorType ifcTendonAnchorType = (IfcTendonAnchorType) theEObject;
			T result = caseIfcTendonAnchorType(ifcTendonAnchorType);
			if (result == null)
				result = caseIfcReinforcingElementType(ifcTendonAnchorType);
			if (result == null)
				result = caseIfcElementComponentType(ifcTendonAnchorType);
			if (result == null)
				result = caseIfcElementType(ifcTendonAnchorType);
			if (result == null)
				result = caseIfcTypeProduct(ifcTendonAnchorType);
			if (result == null)
				result = caseIfcTypeObject(ifcTendonAnchorType);
			if (result == null)
				result = caseIfcProductSelect(ifcTendonAnchorType);
			if (result == null)
				result = caseIfcObjectDefinition(ifcTendonAnchorType);
			if (result == null)
				result = caseIfcRoot(ifcTendonAnchorType);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcTendonAnchorType);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_TENDON_TYPE: {
			IfcTendonType ifcTendonType = (IfcTendonType) theEObject;
			T result = caseIfcTendonType(ifcTendonType);
			if (result == null)
				result = caseIfcReinforcingElementType(ifcTendonType);
			if (result == null)
				result = caseIfcElementComponentType(ifcTendonType);
			if (result == null)
				result = caseIfcElementType(ifcTendonType);
			if (result == null)
				result = caseIfcTypeProduct(ifcTendonType);
			if (result == null)
				result = caseIfcTypeObject(ifcTendonType);
			if (result == null)
				result = caseIfcProductSelect(ifcTendonType);
			if (result == null)
				result = caseIfcObjectDefinition(ifcTendonType);
			if (result == null)
				result = caseIfcRoot(ifcTendonType);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcTendonType);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_TESSELLATED_FACE_SET: {
			IfcTessellatedFaceSet ifcTessellatedFaceSet = (IfcTessellatedFaceSet) theEObject;
			T result = caseIfcTessellatedFaceSet(ifcTessellatedFaceSet);
			if (result == null)
				result = caseIfcTessellatedItem(ifcTessellatedFaceSet);
			if (result == null)
				result = caseIfcBooleanOperand(ifcTessellatedFaceSet);
			if (result == null)
				result = caseIfcGeometricRepresentationItem(ifcTessellatedFaceSet);
			if (result == null)
				result = caseIfcRepresentationItem(ifcTessellatedFaceSet);
			if (result == null)
				result = caseIfcLayeredItem(ifcTessellatedFaceSet);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_TESSELLATED_ITEM: {
			IfcTessellatedItem ifcTessellatedItem = (IfcTessellatedItem) theEObject;
			T result = caseIfcTessellatedItem(ifcTessellatedItem);
			if (result == null)
				result = caseIfcGeometricRepresentationItem(ifcTessellatedItem);
			if (result == null)
				result = caseIfcRepresentationItem(ifcTessellatedItem);
			if (result == null)
				result = caseIfcLayeredItem(ifcTessellatedItem);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_TEXT_LITERAL: {
			IfcTextLiteral ifcTextLiteral = (IfcTextLiteral) theEObject;
			T result = caseIfcTextLiteral(ifcTextLiteral);
			if (result == null)
				result = caseIfcGeometricRepresentationItem(ifcTextLiteral);
			if (result == null)
				result = caseIfcRepresentationItem(ifcTextLiteral);
			if (result == null)
				result = caseIfcLayeredItem(ifcTextLiteral);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_TEXT_LITERAL_WITH_EXTENT: {
			IfcTextLiteralWithExtent ifcTextLiteralWithExtent = (IfcTextLiteralWithExtent) theEObject;
			T result = caseIfcTextLiteralWithExtent(ifcTextLiteralWithExtent);
			if (result == null)
				result = caseIfcTextLiteral(ifcTextLiteralWithExtent);
			if (result == null)
				result = caseIfcGeometricRepresentationItem(ifcTextLiteralWithExtent);
			if (result == null)
				result = caseIfcRepresentationItem(ifcTextLiteralWithExtent);
			if (result == null)
				result = caseIfcLayeredItem(ifcTextLiteralWithExtent);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_TEXT_STYLE: {
			IfcTextStyle ifcTextStyle = (IfcTextStyle) theEObject;
			T result = caseIfcTextStyle(ifcTextStyle);
			if (result == null)
				result = caseIfcPresentationStyle(ifcTextStyle);
			if (result == null)
				result = caseIfcPresentationStyleSelect(ifcTextStyle);
			if (result == null)
				result = caseIfcStyleAssignmentSelect(ifcTextStyle);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_TEXT_STYLE_FONT_MODEL: {
			IfcTextStyleFontModel ifcTextStyleFontModel = (IfcTextStyleFontModel) theEObject;
			T result = caseIfcTextStyleFontModel(ifcTextStyleFontModel);
			if (result == null)
				result = caseIfcPreDefinedTextFont(ifcTextStyleFontModel);
			if (result == null)
				result = caseIfcPreDefinedItem(ifcTextStyleFontModel);
			if (result == null)
				result = caseIfcTextFontSelect(ifcTextStyleFontModel);
			if (result == null)
				result = caseIfcPresentationItem(ifcTextStyleFontModel);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_TEXT_STYLE_FOR_DEFINED_FONT: {
			IfcTextStyleForDefinedFont ifcTextStyleForDefinedFont = (IfcTextStyleForDefinedFont) theEObject;
			T result = caseIfcTextStyleForDefinedFont(ifcTextStyleForDefinedFont);
			if (result == null)
				result = caseIfcPresentationItem(ifcTextStyleForDefinedFont);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_TEXT_STYLE_TEXT_MODEL: {
			IfcTextStyleTextModel ifcTextStyleTextModel = (IfcTextStyleTextModel) theEObject;
			T result = caseIfcTextStyleTextModel(ifcTextStyleTextModel);
			if (result == null)
				result = caseIfcPresentationItem(ifcTextStyleTextModel);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_TEXTURE_COORDINATE: {
			IfcTextureCoordinate ifcTextureCoordinate = (IfcTextureCoordinate) theEObject;
			T result = caseIfcTextureCoordinate(ifcTextureCoordinate);
			if (result == null)
				result = caseIfcPresentationItem(ifcTextureCoordinate);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_TEXTURE_COORDINATE_GENERATOR: {
			IfcTextureCoordinateGenerator ifcTextureCoordinateGenerator = (IfcTextureCoordinateGenerator) theEObject;
			T result = caseIfcTextureCoordinateGenerator(ifcTextureCoordinateGenerator);
			if (result == null)
				result = caseIfcTextureCoordinate(ifcTextureCoordinateGenerator);
			if (result == null)
				result = caseIfcPresentationItem(ifcTextureCoordinateGenerator);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_TEXTURE_MAP: {
			IfcTextureMap ifcTextureMap = (IfcTextureMap) theEObject;
			T result = caseIfcTextureMap(ifcTextureMap);
			if (result == null)
				result = caseIfcTextureCoordinate(ifcTextureMap);
			if (result == null)
				result = caseIfcPresentationItem(ifcTextureMap);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_TEXTURE_VERTEX: {
			IfcTextureVertex ifcTextureVertex = (IfcTextureVertex) theEObject;
			T result = caseIfcTextureVertex(ifcTextureVertex);
			if (result == null)
				result = caseIfcPresentationItem(ifcTextureVertex);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_TEXTURE_VERTEX_LIST: {
			IfcTextureVertexList ifcTextureVertexList = (IfcTextureVertexList) theEObject;
			T result = caseIfcTextureVertexList(ifcTextureVertexList);
			if (result == null)
				result = caseIfcPresentationItem(ifcTextureVertexList);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_TIME_PERIOD: {
			IfcTimePeriod ifcTimePeriod = (IfcTimePeriod) theEObject;
			T result = caseIfcTimePeriod(ifcTimePeriod);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_TIME_SERIES: {
			IfcTimeSeries ifcTimeSeries = (IfcTimeSeries) theEObject;
			T result = caseIfcTimeSeries(ifcTimeSeries);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcTimeSeries);
			if (result == null)
				result = caseIfcObjectReferenceSelect(ifcTimeSeries);
			if (result == null)
				result = caseIfcResourceObjectSelect(ifcTimeSeries);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_TIME_SERIES_VALUE: {
			IfcTimeSeriesValue ifcTimeSeriesValue = (IfcTimeSeriesValue) theEObject;
			T result = caseIfcTimeSeriesValue(ifcTimeSeriesValue);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_TOPOLOGICAL_REPRESENTATION_ITEM: {
			IfcTopologicalRepresentationItem ifcTopologicalRepresentationItem = (IfcTopologicalRepresentationItem) theEObject;
			T result = caseIfcTopologicalRepresentationItem(ifcTopologicalRepresentationItem);
			if (result == null)
				result = caseIfcRepresentationItem(ifcTopologicalRepresentationItem);
			if (result == null)
				result = caseIfcLayeredItem(ifcTopologicalRepresentationItem);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_TOPOLOGY_REPRESENTATION: {
			IfcTopologyRepresentation ifcTopologyRepresentation = (IfcTopologyRepresentation) theEObject;
			T result = caseIfcTopologyRepresentation(ifcTopologyRepresentation);
			if (result == null)
				result = caseIfcShapeModel(ifcTopologyRepresentation);
			if (result == null)
				result = caseIfcRepresentation(ifcTopologyRepresentation);
			if (result == null)
				result = caseIfcLayeredItem(ifcTopologyRepresentation);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_TOROIDAL_SURFACE: {
			IfcToroidalSurface ifcToroidalSurface = (IfcToroidalSurface) theEObject;
			T result = caseIfcToroidalSurface(ifcToroidalSurface);
			if (result == null)
				result = caseIfcElementarySurface(ifcToroidalSurface);
			if (result == null)
				result = caseIfcSurface(ifcToroidalSurface);
			if (result == null)
				result = caseIfcGeometricRepresentationItem(ifcToroidalSurface);
			if (result == null)
				result = caseIfcGeometricSetSelect(ifcToroidalSurface);
			if (result == null)
				result = caseIfcSurfaceOrFaceSurface(ifcToroidalSurface);
			if (result == null)
				result = caseIfcRepresentationItem(ifcToroidalSurface);
			if (result == null)
				result = caseIfcLayeredItem(ifcToroidalSurface);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_TRANSFORMER: {
			IfcTransformer ifcTransformer = (IfcTransformer) theEObject;
			T result = caseIfcTransformer(ifcTransformer);
			if (result == null)
				result = caseIfcEnergyConversionDevice(ifcTransformer);
			if (result == null)
				result = caseIfcDistributionFlowElement(ifcTransformer);
			if (result == null)
				result = caseIfcDistributionElement(ifcTransformer);
			if (result == null)
				result = caseIfcElement(ifcTransformer);
			if (result == null)
				result = caseIfcProduct(ifcTransformer);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcTransformer);
			if (result == null)
				result = caseIfcObject(ifcTransformer);
			if (result == null)
				result = caseIfcProductSelect(ifcTransformer);
			if (result == null)
				result = caseIfcObjectDefinition(ifcTransformer);
			if (result == null)
				result = caseIfcRoot(ifcTransformer);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcTransformer);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_TRANSFORMER_TYPE: {
			IfcTransformerType ifcTransformerType = (IfcTransformerType) theEObject;
			T result = caseIfcTransformerType(ifcTransformerType);
			if (result == null)
				result = caseIfcEnergyConversionDeviceType(ifcTransformerType);
			if (result == null)
				result = caseIfcDistributionFlowElementType(ifcTransformerType);
			if (result == null)
				result = caseIfcDistributionElementType(ifcTransformerType);
			if (result == null)
				result = caseIfcElementType(ifcTransformerType);
			if (result == null)
				result = caseIfcTypeProduct(ifcTransformerType);
			if (result == null)
				result = caseIfcTypeObject(ifcTransformerType);
			if (result == null)
				result = caseIfcProductSelect(ifcTransformerType);
			if (result == null)
				result = caseIfcObjectDefinition(ifcTransformerType);
			if (result == null)
				result = caseIfcRoot(ifcTransformerType);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcTransformerType);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_TRANSPORT_ELEMENT: {
			IfcTransportElement ifcTransportElement = (IfcTransportElement) theEObject;
			T result = caseIfcTransportElement(ifcTransportElement);
			if (result == null)
				result = caseIfcElement(ifcTransportElement);
			if (result == null)
				result = caseIfcProduct(ifcTransportElement);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcTransportElement);
			if (result == null)
				result = caseIfcObject(ifcTransportElement);
			if (result == null)
				result = caseIfcProductSelect(ifcTransportElement);
			if (result == null)
				result = caseIfcObjectDefinition(ifcTransportElement);
			if (result == null)
				result = caseIfcRoot(ifcTransportElement);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcTransportElement);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_TRANSPORT_ELEMENT_TYPE: {
			IfcTransportElementType ifcTransportElementType = (IfcTransportElementType) theEObject;
			T result = caseIfcTransportElementType(ifcTransportElementType);
			if (result == null)
				result = caseIfcElementType(ifcTransportElementType);
			if (result == null)
				result = caseIfcTypeProduct(ifcTransportElementType);
			if (result == null)
				result = caseIfcTypeObject(ifcTransportElementType);
			if (result == null)
				result = caseIfcProductSelect(ifcTransportElementType);
			if (result == null)
				result = caseIfcObjectDefinition(ifcTransportElementType);
			if (result == null)
				result = caseIfcRoot(ifcTransportElementType);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcTransportElementType);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_TRAPEZIUM_PROFILE_DEF: {
			IfcTrapeziumProfileDef ifcTrapeziumProfileDef = (IfcTrapeziumProfileDef) theEObject;
			T result = caseIfcTrapeziumProfileDef(ifcTrapeziumProfileDef);
			if (result == null)
				result = caseIfcParameterizedProfileDef(ifcTrapeziumProfileDef);
			if (result == null)
				result = caseIfcProfileDef(ifcTrapeziumProfileDef);
			if (result == null)
				result = caseIfcResourceObjectSelect(ifcTrapeziumProfileDef);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_TRIANGULATED_FACE_SET: {
			IfcTriangulatedFaceSet ifcTriangulatedFaceSet = (IfcTriangulatedFaceSet) theEObject;
			T result = caseIfcTriangulatedFaceSet(ifcTriangulatedFaceSet);
			if (result == null)
				result = caseIfcTessellatedFaceSet(ifcTriangulatedFaceSet);
			if (result == null)
				result = caseIfcTessellatedItem(ifcTriangulatedFaceSet);
			if (result == null)
				result = caseIfcBooleanOperand(ifcTriangulatedFaceSet);
			if (result == null)
				result = caseIfcGeometricRepresentationItem(ifcTriangulatedFaceSet);
			if (result == null)
				result = caseIfcRepresentationItem(ifcTriangulatedFaceSet);
			if (result == null)
				result = caseIfcLayeredItem(ifcTriangulatedFaceSet);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_TRIMMED_CURVE: {
			IfcTrimmedCurve ifcTrimmedCurve = (IfcTrimmedCurve) theEObject;
			T result = caseIfcTrimmedCurve(ifcTrimmedCurve);
			if (result == null)
				result = caseIfcBoundedCurve(ifcTrimmedCurve);
			if (result == null)
				result = caseIfcCurve(ifcTrimmedCurve);
			if (result == null)
				result = caseIfcCurveOrEdgeCurve(ifcTrimmedCurve);
			if (result == null)
				result = caseIfcGeometricRepresentationItem(ifcTrimmedCurve);
			if (result == null)
				result = caseIfcGeometricSetSelect(ifcTrimmedCurve);
			if (result == null)
				result = caseIfcRepresentationItem(ifcTrimmedCurve);
			if (result == null)
				result = caseIfcLayeredItem(ifcTrimmedCurve);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_TUBE_BUNDLE: {
			IfcTubeBundle ifcTubeBundle = (IfcTubeBundle) theEObject;
			T result = caseIfcTubeBundle(ifcTubeBundle);
			if (result == null)
				result = caseIfcEnergyConversionDevice(ifcTubeBundle);
			if (result == null)
				result = caseIfcDistributionFlowElement(ifcTubeBundle);
			if (result == null)
				result = caseIfcDistributionElement(ifcTubeBundle);
			if (result == null)
				result = caseIfcElement(ifcTubeBundle);
			if (result == null)
				result = caseIfcProduct(ifcTubeBundle);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcTubeBundle);
			if (result == null)
				result = caseIfcObject(ifcTubeBundle);
			if (result == null)
				result = caseIfcProductSelect(ifcTubeBundle);
			if (result == null)
				result = caseIfcObjectDefinition(ifcTubeBundle);
			if (result == null)
				result = caseIfcRoot(ifcTubeBundle);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcTubeBundle);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_TUBE_BUNDLE_TYPE: {
			IfcTubeBundleType ifcTubeBundleType = (IfcTubeBundleType) theEObject;
			T result = caseIfcTubeBundleType(ifcTubeBundleType);
			if (result == null)
				result = caseIfcEnergyConversionDeviceType(ifcTubeBundleType);
			if (result == null)
				result = caseIfcDistributionFlowElementType(ifcTubeBundleType);
			if (result == null)
				result = caseIfcDistributionElementType(ifcTubeBundleType);
			if (result == null)
				result = caseIfcElementType(ifcTubeBundleType);
			if (result == null)
				result = caseIfcTypeProduct(ifcTubeBundleType);
			if (result == null)
				result = caseIfcTypeObject(ifcTubeBundleType);
			if (result == null)
				result = caseIfcProductSelect(ifcTubeBundleType);
			if (result == null)
				result = caseIfcObjectDefinition(ifcTubeBundleType);
			if (result == null)
				result = caseIfcRoot(ifcTubeBundleType);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcTubeBundleType);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_TYPE_OBJECT: {
			IfcTypeObject ifcTypeObject = (IfcTypeObject) theEObject;
			T result = caseIfcTypeObject(ifcTypeObject);
			if (result == null)
				result = caseIfcObjectDefinition(ifcTypeObject);
			if (result == null)
				result = caseIfcRoot(ifcTypeObject);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcTypeObject);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_TYPE_PROCESS: {
			IfcTypeProcess ifcTypeProcess = (IfcTypeProcess) theEObject;
			T result = caseIfcTypeProcess(ifcTypeProcess);
			if (result == null)
				result = caseIfcTypeObject(ifcTypeProcess);
			if (result == null)
				result = caseIfcProcessSelect(ifcTypeProcess);
			if (result == null)
				result = caseIfcObjectDefinition(ifcTypeProcess);
			if (result == null)
				result = caseIfcRoot(ifcTypeProcess);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcTypeProcess);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_TYPE_PRODUCT: {
			IfcTypeProduct ifcTypeProduct = (IfcTypeProduct) theEObject;
			T result = caseIfcTypeProduct(ifcTypeProduct);
			if (result == null)
				result = caseIfcTypeObject(ifcTypeProduct);
			if (result == null)
				result = caseIfcProductSelect(ifcTypeProduct);
			if (result == null)
				result = caseIfcObjectDefinition(ifcTypeProduct);
			if (result == null)
				result = caseIfcRoot(ifcTypeProduct);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcTypeProduct);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_TYPE_RESOURCE: {
			IfcTypeResource ifcTypeResource = (IfcTypeResource) theEObject;
			T result = caseIfcTypeResource(ifcTypeResource);
			if (result == null)
				result = caseIfcTypeObject(ifcTypeResource);
			if (result == null)
				result = caseIfcResourceSelect(ifcTypeResource);
			if (result == null)
				result = caseIfcObjectDefinition(ifcTypeResource);
			if (result == null)
				result = caseIfcRoot(ifcTypeResource);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcTypeResource);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_USHAPE_PROFILE_DEF: {
			IfcUShapeProfileDef ifcUShapeProfileDef = (IfcUShapeProfileDef) theEObject;
			T result = caseIfcUShapeProfileDef(ifcUShapeProfileDef);
			if (result == null)
				result = caseIfcParameterizedProfileDef(ifcUShapeProfileDef);
			if (result == null)
				result = caseIfcProfileDef(ifcUShapeProfileDef);
			if (result == null)
				result = caseIfcResourceObjectSelect(ifcUShapeProfileDef);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_UNIT_ASSIGNMENT: {
			IfcUnitAssignment ifcUnitAssignment = (IfcUnitAssignment) theEObject;
			T result = caseIfcUnitAssignment(ifcUnitAssignment);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_UNITARY_CONTROL_ELEMENT: {
			IfcUnitaryControlElement ifcUnitaryControlElement = (IfcUnitaryControlElement) theEObject;
			T result = caseIfcUnitaryControlElement(ifcUnitaryControlElement);
			if (result == null)
				result = caseIfcDistributionControlElement(ifcUnitaryControlElement);
			if (result == null)
				result = caseIfcDistributionElement(ifcUnitaryControlElement);
			if (result == null)
				result = caseIfcElement(ifcUnitaryControlElement);
			if (result == null)
				result = caseIfcProduct(ifcUnitaryControlElement);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcUnitaryControlElement);
			if (result == null)
				result = caseIfcObject(ifcUnitaryControlElement);
			if (result == null)
				result = caseIfcProductSelect(ifcUnitaryControlElement);
			if (result == null)
				result = caseIfcObjectDefinition(ifcUnitaryControlElement);
			if (result == null)
				result = caseIfcRoot(ifcUnitaryControlElement);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcUnitaryControlElement);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_UNITARY_CONTROL_ELEMENT_TYPE: {
			IfcUnitaryControlElementType ifcUnitaryControlElementType = (IfcUnitaryControlElementType) theEObject;
			T result = caseIfcUnitaryControlElementType(ifcUnitaryControlElementType);
			if (result == null)
				result = caseIfcDistributionControlElementType(ifcUnitaryControlElementType);
			if (result == null)
				result = caseIfcDistributionElementType(ifcUnitaryControlElementType);
			if (result == null)
				result = caseIfcElementType(ifcUnitaryControlElementType);
			if (result == null)
				result = caseIfcTypeProduct(ifcUnitaryControlElementType);
			if (result == null)
				result = caseIfcTypeObject(ifcUnitaryControlElementType);
			if (result == null)
				result = caseIfcProductSelect(ifcUnitaryControlElementType);
			if (result == null)
				result = caseIfcObjectDefinition(ifcUnitaryControlElementType);
			if (result == null)
				result = caseIfcRoot(ifcUnitaryControlElementType);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcUnitaryControlElementType);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_UNITARY_EQUIPMENT: {
			IfcUnitaryEquipment ifcUnitaryEquipment = (IfcUnitaryEquipment) theEObject;
			T result = caseIfcUnitaryEquipment(ifcUnitaryEquipment);
			if (result == null)
				result = caseIfcEnergyConversionDevice(ifcUnitaryEquipment);
			if (result == null)
				result = caseIfcDistributionFlowElement(ifcUnitaryEquipment);
			if (result == null)
				result = caseIfcDistributionElement(ifcUnitaryEquipment);
			if (result == null)
				result = caseIfcElement(ifcUnitaryEquipment);
			if (result == null)
				result = caseIfcProduct(ifcUnitaryEquipment);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcUnitaryEquipment);
			if (result == null)
				result = caseIfcObject(ifcUnitaryEquipment);
			if (result == null)
				result = caseIfcProductSelect(ifcUnitaryEquipment);
			if (result == null)
				result = caseIfcObjectDefinition(ifcUnitaryEquipment);
			if (result == null)
				result = caseIfcRoot(ifcUnitaryEquipment);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcUnitaryEquipment);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_UNITARY_EQUIPMENT_TYPE: {
			IfcUnitaryEquipmentType ifcUnitaryEquipmentType = (IfcUnitaryEquipmentType) theEObject;
			T result = caseIfcUnitaryEquipmentType(ifcUnitaryEquipmentType);
			if (result == null)
				result = caseIfcEnergyConversionDeviceType(ifcUnitaryEquipmentType);
			if (result == null)
				result = caseIfcDistributionFlowElementType(ifcUnitaryEquipmentType);
			if (result == null)
				result = caseIfcDistributionElementType(ifcUnitaryEquipmentType);
			if (result == null)
				result = caseIfcElementType(ifcUnitaryEquipmentType);
			if (result == null)
				result = caseIfcTypeProduct(ifcUnitaryEquipmentType);
			if (result == null)
				result = caseIfcTypeObject(ifcUnitaryEquipmentType);
			if (result == null)
				result = caseIfcProductSelect(ifcUnitaryEquipmentType);
			if (result == null)
				result = caseIfcObjectDefinition(ifcUnitaryEquipmentType);
			if (result == null)
				result = caseIfcRoot(ifcUnitaryEquipmentType);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcUnitaryEquipmentType);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_VALVE: {
			IfcValve ifcValve = (IfcValve) theEObject;
			T result = caseIfcValve(ifcValve);
			if (result == null)
				result = caseIfcFlowController(ifcValve);
			if (result == null)
				result = caseIfcDistributionFlowElement(ifcValve);
			if (result == null)
				result = caseIfcDistributionElement(ifcValve);
			if (result == null)
				result = caseIfcElement(ifcValve);
			if (result == null)
				result = caseIfcProduct(ifcValve);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcValve);
			if (result == null)
				result = caseIfcObject(ifcValve);
			if (result == null)
				result = caseIfcProductSelect(ifcValve);
			if (result == null)
				result = caseIfcObjectDefinition(ifcValve);
			if (result == null)
				result = caseIfcRoot(ifcValve);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcValve);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_VALVE_TYPE: {
			IfcValveType ifcValveType = (IfcValveType) theEObject;
			T result = caseIfcValveType(ifcValveType);
			if (result == null)
				result = caseIfcFlowControllerType(ifcValveType);
			if (result == null)
				result = caseIfcDistributionFlowElementType(ifcValveType);
			if (result == null)
				result = caseIfcDistributionElementType(ifcValveType);
			if (result == null)
				result = caseIfcElementType(ifcValveType);
			if (result == null)
				result = caseIfcTypeProduct(ifcValveType);
			if (result == null)
				result = caseIfcTypeObject(ifcValveType);
			if (result == null)
				result = caseIfcProductSelect(ifcValveType);
			if (result == null)
				result = caseIfcObjectDefinition(ifcValveType);
			if (result == null)
				result = caseIfcRoot(ifcValveType);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcValveType);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_VECTOR: {
			IfcVector ifcVector = (IfcVector) theEObject;
			T result = caseIfcVector(ifcVector);
			if (result == null)
				result = caseIfcGeometricRepresentationItem(ifcVector);
			if (result == null)
				result = caseIfcHatchLineDistanceSelect(ifcVector);
			if (result == null)
				result = caseIfcVectorOrDirection(ifcVector);
			if (result == null)
				result = caseIfcRepresentationItem(ifcVector);
			if (result == null)
				result = caseIfcLayeredItem(ifcVector);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_VERTEX: {
			IfcVertex ifcVertex = (IfcVertex) theEObject;
			T result = caseIfcVertex(ifcVertex);
			if (result == null)
				result = caseIfcTopologicalRepresentationItem(ifcVertex);
			if (result == null)
				result = caseIfcRepresentationItem(ifcVertex);
			if (result == null)
				result = caseIfcLayeredItem(ifcVertex);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_VERTEX_LOOP: {
			IfcVertexLoop ifcVertexLoop = (IfcVertexLoop) theEObject;
			T result = caseIfcVertexLoop(ifcVertexLoop);
			if (result == null)
				result = caseIfcLoop(ifcVertexLoop);
			if (result == null)
				result = caseIfcTopologicalRepresentationItem(ifcVertexLoop);
			if (result == null)
				result = caseIfcRepresentationItem(ifcVertexLoop);
			if (result == null)
				result = caseIfcLayeredItem(ifcVertexLoop);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_VERTEX_POINT: {
			IfcVertexPoint ifcVertexPoint = (IfcVertexPoint) theEObject;
			T result = caseIfcVertexPoint(ifcVertexPoint);
			if (result == null)
				result = caseIfcVertex(ifcVertexPoint);
			if (result == null)
				result = caseIfcPointOrVertexPoint(ifcVertexPoint);
			if (result == null)
				result = caseIfcTopologicalRepresentationItem(ifcVertexPoint);
			if (result == null)
				result = caseIfcRepresentationItem(ifcVertexPoint);
			if (result == null)
				result = caseIfcLayeredItem(ifcVertexPoint);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_VIBRATION_ISOLATOR: {
			IfcVibrationIsolator ifcVibrationIsolator = (IfcVibrationIsolator) theEObject;
			T result = caseIfcVibrationIsolator(ifcVibrationIsolator);
			if (result == null)
				result = caseIfcElementComponent(ifcVibrationIsolator);
			if (result == null)
				result = caseIfcElement(ifcVibrationIsolator);
			if (result == null)
				result = caseIfcProduct(ifcVibrationIsolator);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcVibrationIsolator);
			if (result == null)
				result = caseIfcObject(ifcVibrationIsolator);
			if (result == null)
				result = caseIfcProductSelect(ifcVibrationIsolator);
			if (result == null)
				result = caseIfcObjectDefinition(ifcVibrationIsolator);
			if (result == null)
				result = caseIfcRoot(ifcVibrationIsolator);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcVibrationIsolator);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_VIBRATION_ISOLATOR_TYPE: {
			IfcVibrationIsolatorType ifcVibrationIsolatorType = (IfcVibrationIsolatorType) theEObject;
			T result = caseIfcVibrationIsolatorType(ifcVibrationIsolatorType);
			if (result == null)
				result = caseIfcElementComponentType(ifcVibrationIsolatorType);
			if (result == null)
				result = caseIfcElementType(ifcVibrationIsolatorType);
			if (result == null)
				result = caseIfcTypeProduct(ifcVibrationIsolatorType);
			if (result == null)
				result = caseIfcTypeObject(ifcVibrationIsolatorType);
			if (result == null)
				result = caseIfcProductSelect(ifcVibrationIsolatorType);
			if (result == null)
				result = caseIfcObjectDefinition(ifcVibrationIsolatorType);
			if (result == null)
				result = caseIfcRoot(ifcVibrationIsolatorType);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcVibrationIsolatorType);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_VIRTUAL_ELEMENT: {
			IfcVirtualElement ifcVirtualElement = (IfcVirtualElement) theEObject;
			T result = caseIfcVirtualElement(ifcVirtualElement);
			if (result == null)
				result = caseIfcElement(ifcVirtualElement);
			if (result == null)
				result = caseIfcProduct(ifcVirtualElement);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcVirtualElement);
			if (result == null)
				result = caseIfcObject(ifcVirtualElement);
			if (result == null)
				result = caseIfcProductSelect(ifcVirtualElement);
			if (result == null)
				result = caseIfcObjectDefinition(ifcVirtualElement);
			if (result == null)
				result = caseIfcRoot(ifcVirtualElement);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcVirtualElement);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_VIRTUAL_GRID_INTERSECTION: {
			IfcVirtualGridIntersection ifcVirtualGridIntersection = (IfcVirtualGridIntersection) theEObject;
			T result = caseIfcVirtualGridIntersection(ifcVirtualGridIntersection);
			if (result == null)
				result = caseIfcGridPlacementDirectionSelect(ifcVirtualGridIntersection);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_VOIDING_FEATURE: {
			IfcVoidingFeature ifcVoidingFeature = (IfcVoidingFeature) theEObject;
			T result = caseIfcVoidingFeature(ifcVoidingFeature);
			if (result == null)
				result = caseIfcFeatureElementSubtraction(ifcVoidingFeature);
			if (result == null)
				result = caseIfcFeatureElement(ifcVoidingFeature);
			if (result == null)
				result = caseIfcElement(ifcVoidingFeature);
			if (result == null)
				result = caseIfcProduct(ifcVoidingFeature);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcVoidingFeature);
			if (result == null)
				result = caseIfcObject(ifcVoidingFeature);
			if (result == null)
				result = caseIfcProductSelect(ifcVoidingFeature);
			if (result == null)
				result = caseIfcObjectDefinition(ifcVoidingFeature);
			if (result == null)
				result = caseIfcRoot(ifcVoidingFeature);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcVoidingFeature);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_WALL: {
			IfcWall ifcWall = (IfcWall) theEObject;
			T result = caseIfcWall(ifcWall);
			if (result == null)
				result = caseIfcBuildingElement(ifcWall);
			if (result == null)
				result = caseIfcElement(ifcWall);
			if (result == null)
				result = caseIfcProduct(ifcWall);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcWall);
			if (result == null)
				result = caseIfcObject(ifcWall);
			if (result == null)
				result = caseIfcProductSelect(ifcWall);
			if (result == null)
				result = caseIfcObjectDefinition(ifcWall);
			if (result == null)
				result = caseIfcRoot(ifcWall);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcWall);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_WALL_ELEMENTED_CASE: {
			IfcWallElementedCase ifcWallElementedCase = (IfcWallElementedCase) theEObject;
			T result = caseIfcWallElementedCase(ifcWallElementedCase);
			if (result == null)
				result = caseIfcWall(ifcWallElementedCase);
			if (result == null)
				result = caseIfcBuildingElement(ifcWallElementedCase);
			if (result == null)
				result = caseIfcElement(ifcWallElementedCase);
			if (result == null)
				result = caseIfcProduct(ifcWallElementedCase);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcWallElementedCase);
			if (result == null)
				result = caseIfcObject(ifcWallElementedCase);
			if (result == null)
				result = caseIfcProductSelect(ifcWallElementedCase);
			if (result == null)
				result = caseIfcObjectDefinition(ifcWallElementedCase);
			if (result == null)
				result = caseIfcRoot(ifcWallElementedCase);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcWallElementedCase);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_WALL_STANDARD_CASE: {
			IfcWallStandardCase ifcWallStandardCase = (IfcWallStandardCase) theEObject;
			T result = caseIfcWallStandardCase(ifcWallStandardCase);
			if (result == null)
				result = caseIfcWall(ifcWallStandardCase);
			if (result == null)
				result = caseIfcBuildingElement(ifcWallStandardCase);
			if (result == null)
				result = caseIfcElement(ifcWallStandardCase);
			if (result == null)
				result = caseIfcProduct(ifcWallStandardCase);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcWallStandardCase);
			if (result == null)
				result = caseIfcObject(ifcWallStandardCase);
			if (result == null)
				result = caseIfcProductSelect(ifcWallStandardCase);
			if (result == null)
				result = caseIfcObjectDefinition(ifcWallStandardCase);
			if (result == null)
				result = caseIfcRoot(ifcWallStandardCase);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcWallStandardCase);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_WALL_TYPE: {
			IfcWallType ifcWallType = (IfcWallType) theEObject;
			T result = caseIfcWallType(ifcWallType);
			if (result == null)
				result = caseIfcBuildingElementType(ifcWallType);
			if (result == null)
				result = caseIfcElementType(ifcWallType);
			if (result == null)
				result = caseIfcTypeProduct(ifcWallType);
			if (result == null)
				result = caseIfcTypeObject(ifcWallType);
			if (result == null)
				result = caseIfcProductSelect(ifcWallType);
			if (result == null)
				result = caseIfcObjectDefinition(ifcWallType);
			if (result == null)
				result = caseIfcRoot(ifcWallType);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcWallType);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_WASTE_TERMINAL: {
			IfcWasteTerminal ifcWasteTerminal = (IfcWasteTerminal) theEObject;
			T result = caseIfcWasteTerminal(ifcWasteTerminal);
			if (result == null)
				result = caseIfcFlowTerminal(ifcWasteTerminal);
			if (result == null)
				result = caseIfcDistributionFlowElement(ifcWasteTerminal);
			if (result == null)
				result = caseIfcDistributionElement(ifcWasteTerminal);
			if (result == null)
				result = caseIfcElement(ifcWasteTerminal);
			if (result == null)
				result = caseIfcProduct(ifcWasteTerminal);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcWasteTerminal);
			if (result == null)
				result = caseIfcObject(ifcWasteTerminal);
			if (result == null)
				result = caseIfcProductSelect(ifcWasteTerminal);
			if (result == null)
				result = caseIfcObjectDefinition(ifcWasteTerminal);
			if (result == null)
				result = caseIfcRoot(ifcWasteTerminal);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcWasteTerminal);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_WASTE_TERMINAL_TYPE: {
			IfcWasteTerminalType ifcWasteTerminalType = (IfcWasteTerminalType) theEObject;
			T result = caseIfcWasteTerminalType(ifcWasteTerminalType);
			if (result == null)
				result = caseIfcFlowTerminalType(ifcWasteTerminalType);
			if (result == null)
				result = caseIfcDistributionFlowElementType(ifcWasteTerminalType);
			if (result == null)
				result = caseIfcDistributionElementType(ifcWasteTerminalType);
			if (result == null)
				result = caseIfcElementType(ifcWasteTerminalType);
			if (result == null)
				result = caseIfcTypeProduct(ifcWasteTerminalType);
			if (result == null)
				result = caseIfcTypeObject(ifcWasteTerminalType);
			if (result == null)
				result = caseIfcProductSelect(ifcWasteTerminalType);
			if (result == null)
				result = caseIfcObjectDefinition(ifcWasteTerminalType);
			if (result == null)
				result = caseIfcRoot(ifcWasteTerminalType);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcWasteTerminalType);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_WINDOW: {
			IfcWindow ifcWindow = (IfcWindow) theEObject;
			T result = caseIfcWindow(ifcWindow);
			if (result == null)
				result = caseIfcBuildingElement(ifcWindow);
			if (result == null)
				result = caseIfcElement(ifcWindow);
			if (result == null)
				result = caseIfcProduct(ifcWindow);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcWindow);
			if (result == null)
				result = caseIfcObject(ifcWindow);
			if (result == null)
				result = caseIfcProductSelect(ifcWindow);
			if (result == null)
				result = caseIfcObjectDefinition(ifcWindow);
			if (result == null)
				result = caseIfcRoot(ifcWindow);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcWindow);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_WINDOW_LINING_PROPERTIES: {
			IfcWindowLiningProperties ifcWindowLiningProperties = (IfcWindowLiningProperties) theEObject;
			T result = caseIfcWindowLiningProperties(ifcWindowLiningProperties);
			if (result == null)
				result = caseIfcPreDefinedPropertySet(ifcWindowLiningProperties);
			if (result == null)
				result = caseIfcPropertySetDefinition(ifcWindowLiningProperties);
			if (result == null)
				result = caseIfcPropertyDefinition(ifcWindowLiningProperties);
			if (result == null)
				result = caseIfcPropertySetDefinitionSelect(ifcWindowLiningProperties);
			if (result == null)
				result = caseIfcRoot(ifcWindowLiningProperties);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcWindowLiningProperties);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_WINDOW_PANEL_PROPERTIES: {
			IfcWindowPanelProperties ifcWindowPanelProperties = (IfcWindowPanelProperties) theEObject;
			T result = caseIfcWindowPanelProperties(ifcWindowPanelProperties);
			if (result == null)
				result = caseIfcPreDefinedPropertySet(ifcWindowPanelProperties);
			if (result == null)
				result = caseIfcPropertySetDefinition(ifcWindowPanelProperties);
			if (result == null)
				result = caseIfcPropertyDefinition(ifcWindowPanelProperties);
			if (result == null)
				result = caseIfcPropertySetDefinitionSelect(ifcWindowPanelProperties);
			if (result == null)
				result = caseIfcRoot(ifcWindowPanelProperties);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcWindowPanelProperties);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_WINDOW_STANDARD_CASE: {
			IfcWindowStandardCase ifcWindowStandardCase = (IfcWindowStandardCase) theEObject;
			T result = caseIfcWindowStandardCase(ifcWindowStandardCase);
			if (result == null)
				result = caseIfcWindow(ifcWindowStandardCase);
			if (result == null)
				result = caseIfcBuildingElement(ifcWindowStandardCase);
			if (result == null)
				result = caseIfcElement(ifcWindowStandardCase);
			if (result == null)
				result = caseIfcProduct(ifcWindowStandardCase);
			if (result == null)
				result = caseIfcStructuralActivityAssignmentSelect(ifcWindowStandardCase);
			if (result == null)
				result = caseIfcObject(ifcWindowStandardCase);
			if (result == null)
				result = caseIfcProductSelect(ifcWindowStandardCase);
			if (result == null)
				result = caseIfcObjectDefinition(ifcWindowStandardCase);
			if (result == null)
				result = caseIfcRoot(ifcWindowStandardCase);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcWindowStandardCase);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_WINDOW_STYLE: {
			IfcWindowStyle ifcWindowStyle = (IfcWindowStyle) theEObject;
			T result = caseIfcWindowStyle(ifcWindowStyle);
			if (result == null)
				result = caseIfcTypeProduct(ifcWindowStyle);
			if (result == null)
				result = caseIfcTypeObject(ifcWindowStyle);
			if (result == null)
				result = caseIfcProductSelect(ifcWindowStyle);
			if (result == null)
				result = caseIfcObjectDefinition(ifcWindowStyle);
			if (result == null)
				result = caseIfcRoot(ifcWindowStyle);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcWindowStyle);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_WINDOW_TYPE: {
			IfcWindowType ifcWindowType = (IfcWindowType) theEObject;
			T result = caseIfcWindowType(ifcWindowType);
			if (result == null)
				result = caseIfcBuildingElementType(ifcWindowType);
			if (result == null)
				result = caseIfcElementType(ifcWindowType);
			if (result == null)
				result = caseIfcTypeProduct(ifcWindowType);
			if (result == null)
				result = caseIfcTypeObject(ifcWindowType);
			if (result == null)
				result = caseIfcProductSelect(ifcWindowType);
			if (result == null)
				result = caseIfcObjectDefinition(ifcWindowType);
			if (result == null)
				result = caseIfcRoot(ifcWindowType);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcWindowType);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_WORK_CALENDAR: {
			IfcWorkCalendar ifcWorkCalendar = (IfcWorkCalendar) theEObject;
			T result = caseIfcWorkCalendar(ifcWorkCalendar);
			if (result == null)
				result = caseIfcControl(ifcWorkCalendar);
			if (result == null)
				result = caseIfcObject(ifcWorkCalendar);
			if (result == null)
				result = caseIfcObjectDefinition(ifcWorkCalendar);
			if (result == null)
				result = caseIfcRoot(ifcWorkCalendar);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcWorkCalendar);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_WORK_CONTROL: {
			IfcWorkControl ifcWorkControl = (IfcWorkControl) theEObject;
			T result = caseIfcWorkControl(ifcWorkControl);
			if (result == null)
				result = caseIfcControl(ifcWorkControl);
			if (result == null)
				result = caseIfcObject(ifcWorkControl);
			if (result == null)
				result = caseIfcObjectDefinition(ifcWorkControl);
			if (result == null)
				result = caseIfcRoot(ifcWorkControl);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcWorkControl);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_WORK_PLAN: {
			IfcWorkPlan ifcWorkPlan = (IfcWorkPlan) theEObject;
			T result = caseIfcWorkPlan(ifcWorkPlan);
			if (result == null)
				result = caseIfcWorkControl(ifcWorkPlan);
			if (result == null)
				result = caseIfcControl(ifcWorkPlan);
			if (result == null)
				result = caseIfcObject(ifcWorkPlan);
			if (result == null)
				result = caseIfcObjectDefinition(ifcWorkPlan);
			if (result == null)
				result = caseIfcRoot(ifcWorkPlan);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcWorkPlan);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_WORK_SCHEDULE: {
			IfcWorkSchedule ifcWorkSchedule = (IfcWorkSchedule) theEObject;
			T result = caseIfcWorkSchedule(ifcWorkSchedule);
			if (result == null)
				result = caseIfcWorkControl(ifcWorkSchedule);
			if (result == null)
				result = caseIfcControl(ifcWorkSchedule);
			if (result == null)
				result = caseIfcObject(ifcWorkSchedule);
			if (result == null)
				result = caseIfcObjectDefinition(ifcWorkSchedule);
			if (result == null)
				result = caseIfcRoot(ifcWorkSchedule);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcWorkSchedule);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_WORK_TIME: {
			IfcWorkTime ifcWorkTime = (IfcWorkTime) theEObject;
			T result = caseIfcWorkTime(ifcWorkTime);
			if (result == null)
				result = caseIfcSchedulingTime(ifcWorkTime);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_ZSHAPE_PROFILE_DEF: {
			IfcZShapeProfileDef ifcZShapeProfileDef = (IfcZShapeProfileDef) theEObject;
			T result = caseIfcZShapeProfileDef(ifcZShapeProfileDef);
			if (result == null)
				result = caseIfcParameterizedProfileDef(ifcZShapeProfileDef);
			if (result == null)
				result = caseIfcProfileDef(ifcZShapeProfileDef);
			if (result == null)
				result = caseIfcResourceObjectSelect(ifcZShapeProfileDef);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_ZONE: {
			IfcZone ifcZone = (IfcZone) theEObject;
			T result = caseIfcZone(ifcZone);
			if (result == null)
				result = caseIfcSystem(ifcZone);
			if (result == null)
				result = caseIfcGroup(ifcZone);
			if (result == null)
				result = caseIfcObject(ifcZone);
			if (result == null)
				result = caseIfcObjectDefinition(ifcZone);
			if (result == null)
				result = caseIfcRoot(ifcZone);
			if (result == null)
				result = caseIfcDefinitionSelect(ifcZone);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_STRIPPED_OPTIONAL: {
			IfcStrippedOptional ifcStrippedOptional = (IfcStrippedOptional) theEObject;
			T result = caseIfcStrippedOptional(ifcStrippedOptional);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_ABSORBED_DOSE_MEASURE: {
			IfcAbsorbedDoseMeasure ifcAbsorbedDoseMeasure = (IfcAbsorbedDoseMeasure) theEObject;
			T result = caseIfcAbsorbedDoseMeasure(ifcAbsorbedDoseMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcAbsorbedDoseMeasure);
			if (result == null)
				result = caseIfcValue(ifcAbsorbedDoseMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcAbsorbedDoseMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcAbsorbedDoseMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_ACCELERATION_MEASURE: {
			IfcAccelerationMeasure ifcAccelerationMeasure = (IfcAccelerationMeasure) theEObject;
			T result = caseIfcAccelerationMeasure(ifcAccelerationMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcAccelerationMeasure);
			if (result == null)
				result = caseIfcValue(ifcAccelerationMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcAccelerationMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcAccelerationMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_AMOUNT_OF_SUBSTANCE_MEASURE: {
			IfcAmountOfSubstanceMeasure ifcAmountOfSubstanceMeasure = (IfcAmountOfSubstanceMeasure) theEObject;
			T result = caseIfcAmountOfSubstanceMeasure(ifcAmountOfSubstanceMeasure);
			if (result == null)
				result = caseIfcMeasureValue(ifcAmountOfSubstanceMeasure);
			if (result == null)
				result = caseIfcValue(ifcAmountOfSubstanceMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcAmountOfSubstanceMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcAmountOfSubstanceMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_ANGULAR_VELOCITY_MEASURE: {
			IfcAngularVelocityMeasure ifcAngularVelocityMeasure = (IfcAngularVelocityMeasure) theEObject;
			T result = caseIfcAngularVelocityMeasure(ifcAngularVelocityMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcAngularVelocityMeasure);
			if (result == null)
				result = caseIfcValue(ifcAngularVelocityMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcAngularVelocityMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcAngularVelocityMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_AREA_DENSITY_MEASURE: {
			IfcAreaDensityMeasure ifcAreaDensityMeasure = (IfcAreaDensityMeasure) theEObject;
			T result = caseIfcAreaDensityMeasure(ifcAreaDensityMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcAreaDensityMeasure);
			if (result == null)
				result = caseIfcValue(ifcAreaDensityMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcAreaDensityMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcAreaDensityMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_AREA_MEASURE: {
			IfcAreaMeasure ifcAreaMeasure = (IfcAreaMeasure) theEObject;
			T result = caseIfcAreaMeasure(ifcAreaMeasure);
			if (result == null)
				result = caseIfcMeasureValue(ifcAreaMeasure);
			if (result == null)
				result = caseIfcValue(ifcAreaMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcAreaMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcAreaMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_BINARY: {
			IfcBinary ifcBinary = (IfcBinary) theEObject;
			T result = caseIfcBinary(ifcBinary);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_BOOLEAN: {
			IfcBoolean ifcBoolean = (IfcBoolean) theEObject;
			T result = caseIfcBoolean(ifcBoolean);
			if (result == null)
				result = caseIfcModulusOfRotationalSubgradeReactionSelect(ifcBoolean);
			if (result == null)
				result = caseIfcModulusOfSubgradeReactionSelect(ifcBoolean);
			if (result == null)
				result = caseIfcModulusOfTranslationalSubgradeReactionSelect(ifcBoolean);
			if (result == null)
				result = caseIfcRotationalStiffnessSelect(ifcBoolean);
			if (result == null)
				result = caseIfcSimpleValue(ifcBoolean);
			if (result == null)
				result = caseIfcTranslationalStiffnessSelect(ifcBoolean);
			if (result == null)
				result = caseIfcWarpingStiffnessSelect(ifcBoolean);
			if (result == null)
				result = caseIfcValue(ifcBoolean);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcBoolean);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcBoolean);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_CARDINAL_POINT_REFERENCE: {
			IfcCardinalPointReference ifcCardinalPointReference = (IfcCardinalPointReference) theEObject;
			T result = caseIfcCardinalPointReference(ifcCardinalPointReference);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_CONTEXT_DEPENDENT_MEASURE: {
			IfcContextDependentMeasure ifcContextDependentMeasure = (IfcContextDependentMeasure) theEObject;
			T result = caseIfcContextDependentMeasure(ifcContextDependentMeasure);
			if (result == null)
				result = caseIfcMeasureValue(ifcContextDependentMeasure);
			if (result == null)
				result = caseIfcValue(ifcContextDependentMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcContextDependentMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcContextDependentMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_COUNT_MEASURE: {
			IfcCountMeasure ifcCountMeasure = (IfcCountMeasure) theEObject;
			T result = caseIfcCountMeasure(ifcCountMeasure);
			if (result == null)
				result = caseIfcMeasureValue(ifcCountMeasure);
			if (result == null)
				result = caseIfcValue(ifcCountMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcCountMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcCountMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_CURVATURE_MEASURE: {
			IfcCurvatureMeasure ifcCurvatureMeasure = (IfcCurvatureMeasure) theEObject;
			T result = caseIfcCurvatureMeasure(ifcCurvatureMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcCurvatureMeasure);
			if (result == null)
				result = caseIfcValue(ifcCurvatureMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcCurvatureMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcCurvatureMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_DATE: {
			IfcDate ifcDate = (IfcDate) theEObject;
			T result = caseIfcDate(ifcDate);
			if (result == null)
				result = caseIfcSimpleValue(ifcDate);
			if (result == null)
				result = caseIfcValue(ifcDate);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcDate);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcDate);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_DATE_TIME: {
			IfcDateTime ifcDateTime = (IfcDateTime) theEObject;
			T result = caseIfcDateTime(ifcDateTime);
			if (result == null)
				result = caseIfcSimpleValue(ifcDateTime);
			if (result == null)
				result = caseIfcValue(ifcDateTime);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcDateTime);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcDateTime);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_DAY_IN_MONTH_NUMBER: {
			IfcDayInMonthNumber ifcDayInMonthNumber = (IfcDayInMonthNumber) theEObject;
			T result = caseIfcDayInMonthNumber(ifcDayInMonthNumber);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_DAY_IN_WEEK_NUMBER: {
			IfcDayInWeekNumber ifcDayInWeekNumber = (IfcDayInWeekNumber) theEObject;
			T result = caseIfcDayInWeekNumber(ifcDayInWeekNumber);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_DESCRIPTIVE_MEASURE: {
			IfcDescriptiveMeasure ifcDescriptiveMeasure = (IfcDescriptiveMeasure) theEObject;
			T result = caseIfcDescriptiveMeasure(ifcDescriptiveMeasure);
			if (result == null)
				result = caseIfcMeasureValue(ifcDescriptiveMeasure);
			if (result == null)
				result = caseIfcSizeSelect(ifcDescriptiveMeasure);
			if (result == null)
				result = caseIfcValue(ifcDescriptiveMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcDescriptiveMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcDescriptiveMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_DIMENSION_COUNT: {
			IfcDimensionCount ifcDimensionCount = (IfcDimensionCount) theEObject;
			T result = caseIfcDimensionCount(ifcDimensionCount);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_DOSE_EQUIVALENT_MEASURE: {
			IfcDoseEquivalentMeasure ifcDoseEquivalentMeasure = (IfcDoseEquivalentMeasure) theEObject;
			T result = caseIfcDoseEquivalentMeasure(ifcDoseEquivalentMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcDoseEquivalentMeasure);
			if (result == null)
				result = caseIfcValue(ifcDoseEquivalentMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcDoseEquivalentMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcDoseEquivalentMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_DURATION: {
			IfcDuration ifcDuration = (IfcDuration) theEObject;
			T result = caseIfcDuration(ifcDuration);
			if (result == null)
				result = caseIfcSimpleValue(ifcDuration);
			if (result == null)
				result = caseIfcTimeOrRatioSelect(ifcDuration);
			if (result == null)
				result = caseIfcValue(ifcDuration);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcDuration);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcDuration);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_DYNAMIC_VISCOSITY_MEASURE: {
			IfcDynamicViscosityMeasure ifcDynamicViscosityMeasure = (IfcDynamicViscosityMeasure) theEObject;
			T result = caseIfcDynamicViscosityMeasure(ifcDynamicViscosityMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcDynamicViscosityMeasure);
			if (result == null)
				result = caseIfcValue(ifcDynamicViscosityMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcDynamicViscosityMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcDynamicViscosityMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_ELECTRIC_CAPACITANCE_MEASURE: {
			IfcElectricCapacitanceMeasure ifcElectricCapacitanceMeasure = (IfcElectricCapacitanceMeasure) theEObject;
			T result = caseIfcElectricCapacitanceMeasure(ifcElectricCapacitanceMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcElectricCapacitanceMeasure);
			if (result == null)
				result = caseIfcValue(ifcElectricCapacitanceMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcElectricCapacitanceMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcElectricCapacitanceMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_ELECTRIC_CHARGE_MEASURE: {
			IfcElectricChargeMeasure ifcElectricChargeMeasure = (IfcElectricChargeMeasure) theEObject;
			T result = caseIfcElectricChargeMeasure(ifcElectricChargeMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcElectricChargeMeasure);
			if (result == null)
				result = caseIfcValue(ifcElectricChargeMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcElectricChargeMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcElectricChargeMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_ELECTRIC_CONDUCTANCE_MEASURE: {
			IfcElectricConductanceMeasure ifcElectricConductanceMeasure = (IfcElectricConductanceMeasure) theEObject;
			T result = caseIfcElectricConductanceMeasure(ifcElectricConductanceMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcElectricConductanceMeasure);
			if (result == null)
				result = caseIfcValue(ifcElectricConductanceMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcElectricConductanceMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcElectricConductanceMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_ELECTRIC_CURRENT_MEASURE: {
			IfcElectricCurrentMeasure ifcElectricCurrentMeasure = (IfcElectricCurrentMeasure) theEObject;
			T result = caseIfcElectricCurrentMeasure(ifcElectricCurrentMeasure);
			if (result == null)
				result = caseIfcMeasureValue(ifcElectricCurrentMeasure);
			if (result == null)
				result = caseIfcValue(ifcElectricCurrentMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcElectricCurrentMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcElectricCurrentMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_ELECTRIC_RESISTANCE_MEASURE: {
			IfcElectricResistanceMeasure ifcElectricResistanceMeasure = (IfcElectricResistanceMeasure) theEObject;
			T result = caseIfcElectricResistanceMeasure(ifcElectricResistanceMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcElectricResistanceMeasure);
			if (result == null)
				result = caseIfcValue(ifcElectricResistanceMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcElectricResistanceMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcElectricResistanceMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_ELECTRIC_VOLTAGE_MEASURE: {
			IfcElectricVoltageMeasure ifcElectricVoltageMeasure = (IfcElectricVoltageMeasure) theEObject;
			T result = caseIfcElectricVoltageMeasure(ifcElectricVoltageMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcElectricVoltageMeasure);
			if (result == null)
				result = caseIfcValue(ifcElectricVoltageMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcElectricVoltageMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcElectricVoltageMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_ENERGY_MEASURE: {
			IfcEnergyMeasure ifcEnergyMeasure = (IfcEnergyMeasure) theEObject;
			T result = caseIfcEnergyMeasure(ifcEnergyMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcEnergyMeasure);
			if (result == null)
				result = caseIfcValue(ifcEnergyMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcEnergyMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcEnergyMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_FONT_STYLE: {
			IfcFontStyle ifcFontStyle = (IfcFontStyle) theEObject;
			T result = caseIfcFontStyle(ifcFontStyle);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_FONT_VARIANT: {
			IfcFontVariant ifcFontVariant = (IfcFontVariant) theEObject;
			T result = caseIfcFontVariant(ifcFontVariant);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_FONT_WEIGHT: {
			IfcFontWeight ifcFontWeight = (IfcFontWeight) theEObject;
			T result = caseIfcFontWeight(ifcFontWeight);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_FORCE_MEASURE: {
			IfcForceMeasure ifcForceMeasure = (IfcForceMeasure) theEObject;
			T result = caseIfcForceMeasure(ifcForceMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcForceMeasure);
			if (result == null)
				result = caseIfcValue(ifcForceMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcForceMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcForceMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_FREQUENCY_MEASURE: {
			IfcFrequencyMeasure ifcFrequencyMeasure = (IfcFrequencyMeasure) theEObject;
			T result = caseIfcFrequencyMeasure(ifcFrequencyMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcFrequencyMeasure);
			if (result == null)
				result = caseIfcValue(ifcFrequencyMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcFrequencyMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcFrequencyMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_GLOBALLY_UNIQUE_ID: {
			IfcGloballyUniqueId ifcGloballyUniqueId = (IfcGloballyUniqueId) theEObject;
			T result = caseIfcGloballyUniqueId(ifcGloballyUniqueId);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_HEAT_FLUX_DENSITY_MEASURE: {
			IfcHeatFluxDensityMeasure ifcHeatFluxDensityMeasure = (IfcHeatFluxDensityMeasure) theEObject;
			T result = caseIfcHeatFluxDensityMeasure(ifcHeatFluxDensityMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcHeatFluxDensityMeasure);
			if (result == null)
				result = caseIfcValue(ifcHeatFluxDensityMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcHeatFluxDensityMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcHeatFluxDensityMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_HEATING_VALUE_MEASURE: {
			IfcHeatingValueMeasure ifcHeatingValueMeasure = (IfcHeatingValueMeasure) theEObject;
			T result = caseIfcHeatingValueMeasure(ifcHeatingValueMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcHeatingValueMeasure);
			if (result == null)
				result = caseIfcValue(ifcHeatingValueMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcHeatingValueMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcHeatingValueMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_IDENTIFIER: {
			IfcIdentifier ifcIdentifier = (IfcIdentifier) theEObject;
			T result = caseIfcIdentifier(ifcIdentifier);
			if (result == null)
				result = caseIfcSimpleValue(ifcIdentifier);
			if (result == null)
				result = caseIfcValue(ifcIdentifier);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcIdentifier);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcIdentifier);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_ILLUMINANCE_MEASURE: {
			IfcIlluminanceMeasure ifcIlluminanceMeasure = (IfcIlluminanceMeasure) theEObject;
			T result = caseIfcIlluminanceMeasure(ifcIlluminanceMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcIlluminanceMeasure);
			if (result == null)
				result = caseIfcValue(ifcIlluminanceMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcIlluminanceMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcIlluminanceMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_INDUCTANCE_MEASURE: {
			IfcInductanceMeasure ifcInductanceMeasure = (IfcInductanceMeasure) theEObject;
			T result = caseIfcInductanceMeasure(ifcInductanceMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcInductanceMeasure);
			if (result == null)
				result = caseIfcValue(ifcInductanceMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcInductanceMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcInductanceMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_INTEGER: {
			IfcInteger ifcInteger = (IfcInteger) theEObject;
			T result = caseIfcInteger(ifcInteger);
			if (result == null)
				result = caseIfcSimpleValue(ifcInteger);
			if (result == null)
				result = caseIfcValue(ifcInteger);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcInteger);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcInteger);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_INTEGER_COUNT_RATE_MEASURE: {
			IfcIntegerCountRateMeasure ifcIntegerCountRateMeasure = (IfcIntegerCountRateMeasure) theEObject;
			T result = caseIfcIntegerCountRateMeasure(ifcIntegerCountRateMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcIntegerCountRateMeasure);
			if (result == null)
				result = caseIfcValue(ifcIntegerCountRateMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcIntegerCountRateMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcIntegerCountRateMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_ION_CONCENTRATION_MEASURE: {
			IfcIonConcentrationMeasure ifcIonConcentrationMeasure = (IfcIonConcentrationMeasure) theEObject;
			T result = caseIfcIonConcentrationMeasure(ifcIonConcentrationMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcIonConcentrationMeasure);
			if (result == null)
				result = caseIfcValue(ifcIonConcentrationMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcIonConcentrationMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcIonConcentrationMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_ISOTHERMAL_MOISTURE_CAPACITY_MEASURE: {
			IfcIsothermalMoistureCapacityMeasure ifcIsothermalMoistureCapacityMeasure = (IfcIsothermalMoistureCapacityMeasure) theEObject;
			T result = caseIfcIsothermalMoistureCapacityMeasure(ifcIsothermalMoistureCapacityMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcIsothermalMoistureCapacityMeasure);
			if (result == null)
				result = caseIfcValue(ifcIsothermalMoistureCapacityMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcIsothermalMoistureCapacityMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcIsothermalMoistureCapacityMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_KINEMATIC_VISCOSITY_MEASURE: {
			IfcKinematicViscosityMeasure ifcKinematicViscosityMeasure = (IfcKinematicViscosityMeasure) theEObject;
			T result = caseIfcKinematicViscosityMeasure(ifcKinematicViscosityMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcKinematicViscosityMeasure);
			if (result == null)
				result = caseIfcValue(ifcKinematicViscosityMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcKinematicViscosityMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcKinematicViscosityMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_LABEL: {
			IfcLabel ifcLabel = (IfcLabel) theEObject;
			T result = caseIfcLabel(ifcLabel);
			if (result == null)
				result = caseIfcSimpleValue(ifcLabel);
			if (result == null)
				result = caseIfcValue(ifcLabel);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcLabel);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcLabel);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_LENGTH_MEASURE: {
			IfcLengthMeasure ifcLengthMeasure = (IfcLengthMeasure) theEObject;
			T result = caseIfcLengthMeasure(ifcLengthMeasure);
			if (result == null)
				result = caseIfcBendingParameterSelect(ifcLengthMeasure);
			if (result == null)
				result = caseIfcMeasureValue(ifcLengthMeasure);
			if (result == null)
				result = caseIfcSizeSelect(ifcLengthMeasure);
			if (result == null)
				result = caseIfcValue(ifcLengthMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcLengthMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcLengthMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_LINEAR_FORCE_MEASURE: {
			IfcLinearForceMeasure ifcLinearForceMeasure = (IfcLinearForceMeasure) theEObject;
			T result = caseIfcLinearForceMeasure(ifcLinearForceMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcLinearForceMeasure);
			if (result == null)
				result = caseIfcValue(ifcLinearForceMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcLinearForceMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcLinearForceMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_LINEAR_MOMENT_MEASURE: {
			IfcLinearMomentMeasure ifcLinearMomentMeasure = (IfcLinearMomentMeasure) theEObject;
			T result = caseIfcLinearMomentMeasure(ifcLinearMomentMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcLinearMomentMeasure);
			if (result == null)
				result = caseIfcValue(ifcLinearMomentMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcLinearMomentMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcLinearMomentMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_LINEAR_STIFFNESS_MEASURE: {
			IfcLinearStiffnessMeasure ifcLinearStiffnessMeasure = (IfcLinearStiffnessMeasure) theEObject;
			T result = caseIfcLinearStiffnessMeasure(ifcLinearStiffnessMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcLinearStiffnessMeasure);
			if (result == null)
				result = caseIfcTranslationalStiffnessSelect(ifcLinearStiffnessMeasure);
			if (result == null)
				result = caseIfcValue(ifcLinearStiffnessMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcLinearStiffnessMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcLinearStiffnessMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_LINEAR_VELOCITY_MEASURE: {
			IfcLinearVelocityMeasure ifcLinearVelocityMeasure = (IfcLinearVelocityMeasure) theEObject;
			T result = caseIfcLinearVelocityMeasure(ifcLinearVelocityMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcLinearVelocityMeasure);
			if (result == null)
				result = caseIfcValue(ifcLinearVelocityMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcLinearVelocityMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcLinearVelocityMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_LOGICAL: {
			IfcLogical ifcLogical = (IfcLogical) theEObject;
			T result = caseIfcLogical(ifcLogical);
			if (result == null)
				result = caseIfcSimpleValue(ifcLogical);
			if (result == null)
				result = caseIfcValue(ifcLogical);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcLogical);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcLogical);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_LUMINOUS_FLUX_MEASURE: {
			IfcLuminousFluxMeasure ifcLuminousFluxMeasure = (IfcLuminousFluxMeasure) theEObject;
			T result = caseIfcLuminousFluxMeasure(ifcLuminousFluxMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcLuminousFluxMeasure);
			if (result == null)
				result = caseIfcValue(ifcLuminousFluxMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcLuminousFluxMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcLuminousFluxMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_LUMINOUS_INTENSITY_DISTRIBUTION_MEASURE: {
			IfcLuminousIntensityDistributionMeasure ifcLuminousIntensityDistributionMeasure = (IfcLuminousIntensityDistributionMeasure) theEObject;
			T result = caseIfcLuminousIntensityDistributionMeasure(ifcLuminousIntensityDistributionMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcLuminousIntensityDistributionMeasure);
			if (result == null)
				result = caseIfcValue(ifcLuminousIntensityDistributionMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcLuminousIntensityDistributionMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcLuminousIntensityDistributionMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_LUMINOUS_INTENSITY_MEASURE: {
			IfcLuminousIntensityMeasure ifcLuminousIntensityMeasure = (IfcLuminousIntensityMeasure) theEObject;
			T result = caseIfcLuminousIntensityMeasure(ifcLuminousIntensityMeasure);
			if (result == null)
				result = caseIfcMeasureValue(ifcLuminousIntensityMeasure);
			if (result == null)
				result = caseIfcValue(ifcLuminousIntensityMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcLuminousIntensityMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcLuminousIntensityMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_MAGNETIC_FLUX_DENSITY_MEASURE: {
			IfcMagneticFluxDensityMeasure ifcMagneticFluxDensityMeasure = (IfcMagneticFluxDensityMeasure) theEObject;
			T result = caseIfcMagneticFluxDensityMeasure(ifcMagneticFluxDensityMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcMagneticFluxDensityMeasure);
			if (result == null)
				result = caseIfcValue(ifcMagneticFluxDensityMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcMagneticFluxDensityMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcMagneticFluxDensityMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_MAGNETIC_FLUX_MEASURE: {
			IfcMagneticFluxMeasure ifcMagneticFluxMeasure = (IfcMagneticFluxMeasure) theEObject;
			T result = caseIfcMagneticFluxMeasure(ifcMagneticFluxMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcMagneticFluxMeasure);
			if (result == null)
				result = caseIfcValue(ifcMagneticFluxMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcMagneticFluxMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcMagneticFluxMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_MASS_DENSITY_MEASURE: {
			IfcMassDensityMeasure ifcMassDensityMeasure = (IfcMassDensityMeasure) theEObject;
			T result = caseIfcMassDensityMeasure(ifcMassDensityMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcMassDensityMeasure);
			if (result == null)
				result = caseIfcValue(ifcMassDensityMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcMassDensityMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcMassDensityMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_MASS_FLOW_RATE_MEASURE: {
			IfcMassFlowRateMeasure ifcMassFlowRateMeasure = (IfcMassFlowRateMeasure) theEObject;
			T result = caseIfcMassFlowRateMeasure(ifcMassFlowRateMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcMassFlowRateMeasure);
			if (result == null)
				result = caseIfcValue(ifcMassFlowRateMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcMassFlowRateMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcMassFlowRateMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_MASS_MEASURE: {
			IfcMassMeasure ifcMassMeasure = (IfcMassMeasure) theEObject;
			T result = caseIfcMassMeasure(ifcMassMeasure);
			if (result == null)
				result = caseIfcMeasureValue(ifcMassMeasure);
			if (result == null)
				result = caseIfcValue(ifcMassMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcMassMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcMassMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_MASS_PER_LENGTH_MEASURE: {
			IfcMassPerLengthMeasure ifcMassPerLengthMeasure = (IfcMassPerLengthMeasure) theEObject;
			T result = caseIfcMassPerLengthMeasure(ifcMassPerLengthMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcMassPerLengthMeasure);
			if (result == null)
				result = caseIfcValue(ifcMassPerLengthMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcMassPerLengthMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcMassPerLengthMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_MODULUS_OF_ELASTICITY_MEASURE: {
			IfcModulusOfElasticityMeasure ifcModulusOfElasticityMeasure = (IfcModulusOfElasticityMeasure) theEObject;
			T result = caseIfcModulusOfElasticityMeasure(ifcModulusOfElasticityMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcModulusOfElasticityMeasure);
			if (result == null)
				result = caseIfcValue(ifcModulusOfElasticityMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcModulusOfElasticityMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcModulusOfElasticityMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_MODULUS_OF_LINEAR_SUBGRADE_REACTION_MEASURE: {
			IfcModulusOfLinearSubgradeReactionMeasure ifcModulusOfLinearSubgradeReactionMeasure = (IfcModulusOfLinearSubgradeReactionMeasure) theEObject;
			T result = caseIfcModulusOfLinearSubgradeReactionMeasure(ifcModulusOfLinearSubgradeReactionMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcModulusOfLinearSubgradeReactionMeasure);
			if (result == null)
				result = caseIfcModulusOfTranslationalSubgradeReactionSelect(ifcModulusOfLinearSubgradeReactionMeasure);
			if (result == null)
				result = caseIfcValue(ifcModulusOfLinearSubgradeReactionMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcModulusOfLinearSubgradeReactionMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcModulusOfLinearSubgradeReactionMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_MODULUS_OF_ROTATIONAL_SUBGRADE_REACTION_MEASURE: {
			IfcModulusOfRotationalSubgradeReactionMeasure ifcModulusOfRotationalSubgradeReactionMeasure = (IfcModulusOfRotationalSubgradeReactionMeasure) theEObject;
			T result = caseIfcModulusOfRotationalSubgradeReactionMeasure(ifcModulusOfRotationalSubgradeReactionMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcModulusOfRotationalSubgradeReactionMeasure);
			if (result == null)
				result = caseIfcModulusOfRotationalSubgradeReactionSelect(
						ifcModulusOfRotationalSubgradeReactionMeasure);
			if (result == null)
				result = caseIfcValue(ifcModulusOfRotationalSubgradeReactionMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcModulusOfRotationalSubgradeReactionMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcModulusOfRotationalSubgradeReactionMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_MODULUS_OF_SUBGRADE_REACTION_MEASURE: {
			IfcModulusOfSubgradeReactionMeasure ifcModulusOfSubgradeReactionMeasure = (IfcModulusOfSubgradeReactionMeasure) theEObject;
			T result = caseIfcModulusOfSubgradeReactionMeasure(ifcModulusOfSubgradeReactionMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcModulusOfSubgradeReactionMeasure);
			if (result == null)
				result = caseIfcModulusOfSubgradeReactionSelect(ifcModulusOfSubgradeReactionMeasure);
			if (result == null)
				result = caseIfcValue(ifcModulusOfSubgradeReactionMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcModulusOfSubgradeReactionMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcModulusOfSubgradeReactionMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_MOISTURE_DIFFUSIVITY_MEASURE: {
			IfcMoistureDiffusivityMeasure ifcMoistureDiffusivityMeasure = (IfcMoistureDiffusivityMeasure) theEObject;
			T result = caseIfcMoistureDiffusivityMeasure(ifcMoistureDiffusivityMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcMoistureDiffusivityMeasure);
			if (result == null)
				result = caseIfcValue(ifcMoistureDiffusivityMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcMoistureDiffusivityMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcMoistureDiffusivityMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_MOLECULAR_WEIGHT_MEASURE: {
			IfcMolecularWeightMeasure ifcMolecularWeightMeasure = (IfcMolecularWeightMeasure) theEObject;
			T result = caseIfcMolecularWeightMeasure(ifcMolecularWeightMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcMolecularWeightMeasure);
			if (result == null)
				result = caseIfcValue(ifcMolecularWeightMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcMolecularWeightMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcMolecularWeightMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_MOMENT_OF_INERTIA_MEASURE: {
			IfcMomentOfInertiaMeasure ifcMomentOfInertiaMeasure = (IfcMomentOfInertiaMeasure) theEObject;
			T result = caseIfcMomentOfInertiaMeasure(ifcMomentOfInertiaMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcMomentOfInertiaMeasure);
			if (result == null)
				result = caseIfcValue(ifcMomentOfInertiaMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcMomentOfInertiaMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcMomentOfInertiaMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_MONETARY_MEASURE: {
			IfcMonetaryMeasure ifcMonetaryMeasure = (IfcMonetaryMeasure) theEObject;
			T result = caseIfcMonetaryMeasure(ifcMonetaryMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcMonetaryMeasure);
			if (result == null)
				result = caseIfcValue(ifcMonetaryMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcMonetaryMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcMonetaryMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_MONTH_IN_YEAR_NUMBER: {
			IfcMonthInYearNumber ifcMonthInYearNumber = (IfcMonthInYearNumber) theEObject;
			T result = caseIfcMonthInYearNumber(ifcMonthInYearNumber);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_NUMERIC_MEASURE: {
			IfcNumericMeasure ifcNumericMeasure = (IfcNumericMeasure) theEObject;
			T result = caseIfcNumericMeasure(ifcNumericMeasure);
			if (result == null)
				result = caseIfcMeasureValue(ifcNumericMeasure);
			if (result == null)
				result = caseIfcValue(ifcNumericMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcNumericMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcNumericMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PH_MEASURE: {
			IfcPHMeasure ifcPHMeasure = (IfcPHMeasure) theEObject;
			T result = caseIfcPHMeasure(ifcPHMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcPHMeasure);
			if (result == null)
				result = caseIfcValue(ifcPHMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcPHMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcPHMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PARAMETER_VALUE: {
			IfcParameterValue ifcParameterValue = (IfcParameterValue) theEObject;
			T result = caseIfcParameterValue(ifcParameterValue);
			if (result == null)
				result = caseIfcMeasureValue(ifcParameterValue);
			if (result == null)
				result = caseIfcTrimmingSelect(ifcParameterValue);
			if (result == null)
				result = caseIfcValue(ifcParameterValue);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcParameterValue);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcParameterValue);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PLANAR_FORCE_MEASURE: {
			IfcPlanarForceMeasure ifcPlanarForceMeasure = (IfcPlanarForceMeasure) theEObject;
			T result = caseIfcPlanarForceMeasure(ifcPlanarForceMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcPlanarForceMeasure);
			if (result == null)
				result = caseIfcValue(ifcPlanarForceMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcPlanarForceMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcPlanarForceMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PLANE_ANGLE_MEASURE: {
			IfcPlaneAngleMeasure ifcPlaneAngleMeasure = (IfcPlaneAngleMeasure) theEObject;
			T result = caseIfcPlaneAngleMeasure(ifcPlaneAngleMeasure);
			if (result == null)
				result = caseIfcBendingParameterSelect(ifcPlaneAngleMeasure);
			if (result == null)
				result = caseIfcMeasureValue(ifcPlaneAngleMeasure);
			if (result == null)
				result = caseIfcValue(ifcPlaneAngleMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcPlaneAngleMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcPlaneAngleMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_POWER_MEASURE: {
			IfcPowerMeasure ifcPowerMeasure = (IfcPowerMeasure) theEObject;
			T result = caseIfcPowerMeasure(ifcPowerMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcPowerMeasure);
			if (result == null)
				result = caseIfcValue(ifcPowerMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcPowerMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcPowerMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PRESENTABLE_TEXT: {
			IfcPresentableText ifcPresentableText = (IfcPresentableText) theEObject;
			T result = caseIfcPresentableText(ifcPresentableText);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PRESSURE_MEASURE: {
			IfcPressureMeasure ifcPressureMeasure = (IfcPressureMeasure) theEObject;
			T result = caseIfcPressureMeasure(ifcPressureMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcPressureMeasure);
			if (result == null)
				result = caseIfcValue(ifcPressureMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcPressureMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcPressureMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_RADIO_ACTIVITY_MEASURE: {
			IfcRadioActivityMeasure ifcRadioActivityMeasure = (IfcRadioActivityMeasure) theEObject;
			T result = caseIfcRadioActivityMeasure(ifcRadioActivityMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcRadioActivityMeasure);
			if (result == null)
				result = caseIfcValue(ifcRadioActivityMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcRadioActivityMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcRadioActivityMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_RATIO_MEASURE: {
			IfcRatioMeasure ifcRatioMeasure = (IfcRatioMeasure) theEObject;
			T result = caseIfcRatioMeasure(ifcRatioMeasure);
			if (result == null)
				result = caseIfcMeasureValue(ifcRatioMeasure);
			if (result == null)
				result = caseIfcSizeSelect(ifcRatioMeasure);
			if (result == null)
				result = caseIfcTimeOrRatioSelect(ifcRatioMeasure);
			if (result == null)
				result = caseIfcValue(ifcRatioMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcRatioMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcRatioMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_REAL: {
			IfcReal ifcReal = (IfcReal) theEObject;
			T result = caseIfcReal(ifcReal);
			if (result == null)
				result = caseIfcSimpleValue(ifcReal);
			if (result == null)
				result = caseIfcValue(ifcReal);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcReal);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcReal);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_ROTATIONAL_FREQUENCY_MEASURE: {
			IfcRotationalFrequencyMeasure ifcRotationalFrequencyMeasure = (IfcRotationalFrequencyMeasure) theEObject;
			T result = caseIfcRotationalFrequencyMeasure(ifcRotationalFrequencyMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcRotationalFrequencyMeasure);
			if (result == null)
				result = caseIfcValue(ifcRotationalFrequencyMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcRotationalFrequencyMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcRotationalFrequencyMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_ROTATIONAL_MASS_MEASURE: {
			IfcRotationalMassMeasure ifcRotationalMassMeasure = (IfcRotationalMassMeasure) theEObject;
			T result = caseIfcRotationalMassMeasure(ifcRotationalMassMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcRotationalMassMeasure);
			if (result == null)
				result = caseIfcValue(ifcRotationalMassMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcRotationalMassMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcRotationalMassMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_ROTATIONAL_STIFFNESS_MEASURE: {
			IfcRotationalStiffnessMeasure ifcRotationalStiffnessMeasure = (IfcRotationalStiffnessMeasure) theEObject;
			T result = caseIfcRotationalStiffnessMeasure(ifcRotationalStiffnessMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcRotationalStiffnessMeasure);
			if (result == null)
				result = caseIfcRotationalStiffnessSelect(ifcRotationalStiffnessMeasure);
			if (result == null)
				result = caseIfcValue(ifcRotationalStiffnessMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcRotationalStiffnessMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcRotationalStiffnessMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SECTION_MODULUS_MEASURE: {
			IfcSectionModulusMeasure ifcSectionModulusMeasure = (IfcSectionModulusMeasure) theEObject;
			T result = caseIfcSectionModulusMeasure(ifcSectionModulusMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcSectionModulusMeasure);
			if (result == null)
				result = caseIfcValue(ifcSectionModulusMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcSectionModulusMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcSectionModulusMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SECTIONAL_AREA_INTEGRAL_MEASURE: {
			IfcSectionalAreaIntegralMeasure ifcSectionalAreaIntegralMeasure = (IfcSectionalAreaIntegralMeasure) theEObject;
			T result = caseIfcSectionalAreaIntegralMeasure(ifcSectionalAreaIntegralMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcSectionalAreaIntegralMeasure);
			if (result == null)
				result = caseIfcValue(ifcSectionalAreaIntegralMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcSectionalAreaIntegralMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcSectionalAreaIntegralMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SHEAR_MODULUS_MEASURE: {
			IfcShearModulusMeasure ifcShearModulusMeasure = (IfcShearModulusMeasure) theEObject;
			T result = caseIfcShearModulusMeasure(ifcShearModulusMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcShearModulusMeasure);
			if (result == null)
				result = caseIfcValue(ifcShearModulusMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcShearModulusMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcShearModulusMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SOLID_ANGLE_MEASURE: {
			IfcSolidAngleMeasure ifcSolidAngleMeasure = (IfcSolidAngleMeasure) theEObject;
			T result = caseIfcSolidAngleMeasure(ifcSolidAngleMeasure);
			if (result == null)
				result = caseIfcMeasureValue(ifcSolidAngleMeasure);
			if (result == null)
				result = caseIfcValue(ifcSolidAngleMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcSolidAngleMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcSolidAngleMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SOUND_POWER_LEVEL_MEASURE: {
			IfcSoundPowerLevelMeasure ifcSoundPowerLevelMeasure = (IfcSoundPowerLevelMeasure) theEObject;
			T result = caseIfcSoundPowerLevelMeasure(ifcSoundPowerLevelMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcSoundPowerLevelMeasure);
			if (result == null)
				result = caseIfcValue(ifcSoundPowerLevelMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcSoundPowerLevelMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcSoundPowerLevelMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SOUND_POWER_MEASURE: {
			IfcSoundPowerMeasure ifcSoundPowerMeasure = (IfcSoundPowerMeasure) theEObject;
			T result = caseIfcSoundPowerMeasure(ifcSoundPowerMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcSoundPowerMeasure);
			if (result == null)
				result = caseIfcValue(ifcSoundPowerMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcSoundPowerMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcSoundPowerMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SOUND_PRESSURE_LEVEL_MEASURE: {
			IfcSoundPressureLevelMeasure ifcSoundPressureLevelMeasure = (IfcSoundPressureLevelMeasure) theEObject;
			T result = caseIfcSoundPressureLevelMeasure(ifcSoundPressureLevelMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcSoundPressureLevelMeasure);
			if (result == null)
				result = caseIfcValue(ifcSoundPressureLevelMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcSoundPressureLevelMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcSoundPressureLevelMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SOUND_PRESSURE_MEASURE: {
			IfcSoundPressureMeasure ifcSoundPressureMeasure = (IfcSoundPressureMeasure) theEObject;
			T result = caseIfcSoundPressureMeasure(ifcSoundPressureMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcSoundPressureMeasure);
			if (result == null)
				result = caseIfcValue(ifcSoundPressureMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcSoundPressureMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcSoundPressureMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SPECIFIC_HEAT_CAPACITY_MEASURE: {
			IfcSpecificHeatCapacityMeasure ifcSpecificHeatCapacityMeasure = (IfcSpecificHeatCapacityMeasure) theEObject;
			T result = caseIfcSpecificHeatCapacityMeasure(ifcSpecificHeatCapacityMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcSpecificHeatCapacityMeasure);
			if (result == null)
				result = caseIfcValue(ifcSpecificHeatCapacityMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcSpecificHeatCapacityMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcSpecificHeatCapacityMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SPECULAR_EXPONENT: {
			IfcSpecularExponent ifcSpecularExponent = (IfcSpecularExponent) theEObject;
			T result = caseIfcSpecularExponent(ifcSpecularExponent);
			if (result == null)
				result = caseIfcSpecularHighlightSelect(ifcSpecularExponent);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SPECULAR_ROUGHNESS: {
			IfcSpecularRoughness ifcSpecularRoughness = (IfcSpecularRoughness) theEObject;
			T result = caseIfcSpecularRoughness(ifcSpecularRoughness);
			if (result == null)
				result = caseIfcSpecularHighlightSelect(ifcSpecularRoughness);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_TEMPERATURE_GRADIENT_MEASURE: {
			IfcTemperatureGradientMeasure ifcTemperatureGradientMeasure = (IfcTemperatureGradientMeasure) theEObject;
			T result = caseIfcTemperatureGradientMeasure(ifcTemperatureGradientMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcTemperatureGradientMeasure);
			if (result == null)
				result = caseIfcValue(ifcTemperatureGradientMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcTemperatureGradientMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcTemperatureGradientMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_TEMPERATURE_RATE_OF_CHANGE_MEASURE: {
			IfcTemperatureRateOfChangeMeasure ifcTemperatureRateOfChangeMeasure = (IfcTemperatureRateOfChangeMeasure) theEObject;
			T result = caseIfcTemperatureRateOfChangeMeasure(ifcTemperatureRateOfChangeMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcTemperatureRateOfChangeMeasure);
			if (result == null)
				result = caseIfcValue(ifcTemperatureRateOfChangeMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcTemperatureRateOfChangeMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcTemperatureRateOfChangeMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_TEXT: {
			IfcText ifcText = (IfcText) theEObject;
			T result = caseIfcText(ifcText);
			if (result == null)
				result = caseIfcSimpleValue(ifcText);
			if (result == null)
				result = caseIfcValue(ifcText);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcText);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcText);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_TEXT_ALIGNMENT: {
			IfcTextAlignment ifcTextAlignment = (IfcTextAlignment) theEObject;
			T result = caseIfcTextAlignment(ifcTextAlignment);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_TEXT_DECORATION: {
			IfcTextDecoration ifcTextDecoration = (IfcTextDecoration) theEObject;
			T result = caseIfcTextDecoration(ifcTextDecoration);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_TEXT_FONT_NAME: {
			IfcTextFontName ifcTextFontName = (IfcTextFontName) theEObject;
			T result = caseIfcTextFontName(ifcTextFontName);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_TEXT_TRANSFORMATION: {
			IfcTextTransformation ifcTextTransformation = (IfcTextTransformation) theEObject;
			T result = caseIfcTextTransformation(ifcTextTransformation);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_THERMAL_ADMITTANCE_MEASURE: {
			IfcThermalAdmittanceMeasure ifcThermalAdmittanceMeasure = (IfcThermalAdmittanceMeasure) theEObject;
			T result = caseIfcThermalAdmittanceMeasure(ifcThermalAdmittanceMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcThermalAdmittanceMeasure);
			if (result == null)
				result = caseIfcValue(ifcThermalAdmittanceMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcThermalAdmittanceMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcThermalAdmittanceMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_THERMAL_CONDUCTIVITY_MEASURE: {
			IfcThermalConductivityMeasure ifcThermalConductivityMeasure = (IfcThermalConductivityMeasure) theEObject;
			T result = caseIfcThermalConductivityMeasure(ifcThermalConductivityMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcThermalConductivityMeasure);
			if (result == null)
				result = caseIfcValue(ifcThermalConductivityMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcThermalConductivityMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcThermalConductivityMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_THERMAL_EXPANSION_COEFFICIENT_MEASURE: {
			IfcThermalExpansionCoefficientMeasure ifcThermalExpansionCoefficientMeasure = (IfcThermalExpansionCoefficientMeasure) theEObject;
			T result = caseIfcThermalExpansionCoefficientMeasure(ifcThermalExpansionCoefficientMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcThermalExpansionCoefficientMeasure);
			if (result == null)
				result = caseIfcValue(ifcThermalExpansionCoefficientMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcThermalExpansionCoefficientMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcThermalExpansionCoefficientMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_THERMAL_RESISTANCE_MEASURE: {
			IfcThermalResistanceMeasure ifcThermalResistanceMeasure = (IfcThermalResistanceMeasure) theEObject;
			T result = caseIfcThermalResistanceMeasure(ifcThermalResistanceMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcThermalResistanceMeasure);
			if (result == null)
				result = caseIfcValue(ifcThermalResistanceMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcThermalResistanceMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcThermalResistanceMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_THERMAL_TRANSMITTANCE_MEASURE: {
			IfcThermalTransmittanceMeasure ifcThermalTransmittanceMeasure = (IfcThermalTransmittanceMeasure) theEObject;
			T result = caseIfcThermalTransmittanceMeasure(ifcThermalTransmittanceMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcThermalTransmittanceMeasure);
			if (result == null)
				result = caseIfcValue(ifcThermalTransmittanceMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcThermalTransmittanceMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcThermalTransmittanceMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_THERMODYNAMIC_TEMPERATURE_MEASURE: {
			IfcThermodynamicTemperatureMeasure ifcThermodynamicTemperatureMeasure = (IfcThermodynamicTemperatureMeasure) theEObject;
			T result = caseIfcThermodynamicTemperatureMeasure(ifcThermodynamicTemperatureMeasure);
			if (result == null)
				result = caseIfcMeasureValue(ifcThermodynamicTemperatureMeasure);
			if (result == null)
				result = caseIfcValue(ifcThermodynamicTemperatureMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcThermodynamicTemperatureMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcThermodynamicTemperatureMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_TIME: {
			IfcTime ifcTime = (IfcTime) theEObject;
			T result = caseIfcTime(ifcTime);
			if (result == null)
				result = caseIfcSimpleValue(ifcTime);
			if (result == null)
				result = caseIfcValue(ifcTime);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcTime);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcTime);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_TIME_MEASURE: {
			IfcTimeMeasure ifcTimeMeasure = (IfcTimeMeasure) theEObject;
			T result = caseIfcTimeMeasure(ifcTimeMeasure);
			if (result == null)
				result = caseIfcMeasureValue(ifcTimeMeasure);
			if (result == null)
				result = caseIfcValue(ifcTimeMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcTimeMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcTimeMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_TIME_STAMP: {
			IfcTimeStamp ifcTimeStamp = (IfcTimeStamp) theEObject;
			T result = caseIfcTimeStamp(ifcTimeStamp);
			if (result == null)
				result = caseIfcSimpleValue(ifcTimeStamp);
			if (result == null)
				result = caseIfcValue(ifcTimeStamp);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcTimeStamp);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcTimeStamp);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_TORQUE_MEASURE: {
			IfcTorqueMeasure ifcTorqueMeasure = (IfcTorqueMeasure) theEObject;
			T result = caseIfcTorqueMeasure(ifcTorqueMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcTorqueMeasure);
			if (result == null)
				result = caseIfcValue(ifcTorqueMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcTorqueMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcTorqueMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_URI_REFERENCE: {
			IfcURIReference ifcURIReference = (IfcURIReference) theEObject;
			T result = caseIfcURIReference(ifcURIReference);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_VAPOR_PERMEABILITY_MEASURE: {
			IfcVaporPermeabilityMeasure ifcVaporPermeabilityMeasure = (IfcVaporPermeabilityMeasure) theEObject;
			T result = caseIfcVaporPermeabilityMeasure(ifcVaporPermeabilityMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcVaporPermeabilityMeasure);
			if (result == null)
				result = caseIfcValue(ifcVaporPermeabilityMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcVaporPermeabilityMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcVaporPermeabilityMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_VOLUME_MEASURE: {
			IfcVolumeMeasure ifcVolumeMeasure = (IfcVolumeMeasure) theEObject;
			T result = caseIfcVolumeMeasure(ifcVolumeMeasure);
			if (result == null)
				result = caseIfcMeasureValue(ifcVolumeMeasure);
			if (result == null)
				result = caseIfcValue(ifcVolumeMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcVolumeMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcVolumeMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_VOLUMETRIC_FLOW_RATE_MEASURE: {
			IfcVolumetricFlowRateMeasure ifcVolumetricFlowRateMeasure = (IfcVolumetricFlowRateMeasure) theEObject;
			T result = caseIfcVolumetricFlowRateMeasure(ifcVolumetricFlowRateMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcVolumetricFlowRateMeasure);
			if (result == null)
				result = caseIfcValue(ifcVolumetricFlowRateMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcVolumetricFlowRateMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcVolumetricFlowRateMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_WARPING_CONSTANT_MEASURE: {
			IfcWarpingConstantMeasure ifcWarpingConstantMeasure = (IfcWarpingConstantMeasure) theEObject;
			T result = caseIfcWarpingConstantMeasure(ifcWarpingConstantMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcWarpingConstantMeasure);
			if (result == null)
				result = caseIfcValue(ifcWarpingConstantMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcWarpingConstantMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcWarpingConstantMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_WARPING_MOMENT_MEASURE: {
			IfcWarpingMomentMeasure ifcWarpingMomentMeasure = (IfcWarpingMomentMeasure) theEObject;
			T result = caseIfcWarpingMomentMeasure(ifcWarpingMomentMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcWarpingMomentMeasure);
			if (result == null)
				result = caseIfcWarpingStiffnessSelect(ifcWarpingMomentMeasure);
			if (result == null)
				result = caseIfcValue(ifcWarpingMomentMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcWarpingMomentMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcWarpingMomentMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_BOX_ALIGNMENT: {
			IfcBoxAlignment ifcBoxAlignment = (IfcBoxAlignment) theEObject;
			T result = caseIfcBoxAlignment(ifcBoxAlignment);
			if (result == null)
				result = caseIfcLabel(ifcBoxAlignment);
			if (result == null)
				result = caseIfcSimpleValue(ifcBoxAlignment);
			if (result == null)
				result = caseIfcValue(ifcBoxAlignment);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcBoxAlignment);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcBoxAlignment);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_COMPOUND_PLANE_ANGLE_MEASURE: {
			IfcCompoundPlaneAngleMeasure ifcCompoundPlaneAngleMeasure = (IfcCompoundPlaneAngleMeasure) theEObject;
			T result = caseIfcCompoundPlaneAngleMeasure(ifcCompoundPlaneAngleMeasure);
			if (result == null)
				result = caseIfcDerivedMeasureValue(ifcCompoundPlaneAngleMeasure);
			if (result == null)
				result = caseIfcValue(ifcCompoundPlaneAngleMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcCompoundPlaneAngleMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcCompoundPlaneAngleMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_LANGUAGE_ID: {
			IfcLanguageId ifcLanguageId = (IfcLanguageId) theEObject;
			T result = caseIfcLanguageId(ifcLanguageId);
			if (result == null)
				result = caseIfcIdentifier(ifcLanguageId);
			if (result == null)
				result = caseIfcSimpleValue(ifcLanguageId);
			if (result == null)
				result = caseIfcValue(ifcLanguageId);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcLanguageId);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcLanguageId);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_NON_NEGATIVE_LENGTH_MEASURE: {
			IfcNonNegativeLengthMeasure ifcNonNegativeLengthMeasure = (IfcNonNegativeLengthMeasure) theEObject;
			T result = caseIfcNonNegativeLengthMeasure(ifcNonNegativeLengthMeasure);
			if (result == null)
				result = caseIfcLengthMeasure(ifcNonNegativeLengthMeasure);
			if (result == null)
				result = caseIfcBendingParameterSelect(ifcNonNegativeLengthMeasure);
			if (result == null)
				result = caseIfcMeasureValue(ifcNonNegativeLengthMeasure);
			if (result == null)
				result = caseIfcSizeSelect(ifcNonNegativeLengthMeasure);
			if (result == null)
				result = caseIfcValue(ifcNonNegativeLengthMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcNonNegativeLengthMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcNonNegativeLengthMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_NORMALISED_RATIO_MEASURE: {
			IfcNormalisedRatioMeasure ifcNormalisedRatioMeasure = (IfcNormalisedRatioMeasure) theEObject;
			T result = caseIfcNormalisedRatioMeasure(ifcNormalisedRatioMeasure);
			if (result == null)
				result = caseIfcRatioMeasure(ifcNormalisedRatioMeasure);
			if (result == null)
				result = caseIfcColourOrFactor(ifcNormalisedRatioMeasure);
			if (result == null)
				result = caseIfcMeasureValue(ifcNormalisedRatioMeasure);
			if (result == null)
				result = caseIfcSizeSelect(ifcNormalisedRatioMeasure);
			if (result == null)
				result = caseIfcTimeOrRatioSelect(ifcNormalisedRatioMeasure);
			if (result == null)
				result = caseIfcValue(ifcNormalisedRatioMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcNormalisedRatioMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcNormalisedRatioMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_POSITIVE_INTEGER: {
			IfcPositiveInteger ifcPositiveInteger = (IfcPositiveInteger) theEObject;
			T result = caseIfcPositiveInteger(ifcPositiveInteger);
			if (result == null)
				result = caseIfcInteger(ifcPositiveInteger);
			if (result == null)
				result = caseIfcSimpleValue(ifcPositiveInteger);
			if (result == null)
				result = caseIfcValue(ifcPositiveInteger);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcPositiveInteger);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcPositiveInteger);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_POSITIVE_LENGTH_MEASURE: {
			IfcPositiveLengthMeasure ifcPositiveLengthMeasure = (IfcPositiveLengthMeasure) theEObject;
			T result = caseIfcPositiveLengthMeasure(ifcPositiveLengthMeasure);
			if (result == null)
				result = caseIfcLengthMeasure(ifcPositiveLengthMeasure);
			if (result == null)
				result = caseIfcHatchLineDistanceSelect(ifcPositiveLengthMeasure);
			if (result == null)
				result = caseIfcBendingParameterSelect(ifcPositiveLengthMeasure);
			if (result == null)
				result = caseIfcMeasureValue(ifcPositiveLengthMeasure);
			if (result == null)
				result = caseIfcSizeSelect(ifcPositiveLengthMeasure);
			if (result == null)
				result = caseIfcValue(ifcPositiveLengthMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcPositiveLengthMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcPositiveLengthMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_POSITIVE_PLANE_ANGLE_MEASURE: {
			IfcPositivePlaneAngleMeasure ifcPositivePlaneAngleMeasure = (IfcPositivePlaneAngleMeasure) theEObject;
			T result = caseIfcPositivePlaneAngleMeasure(ifcPositivePlaneAngleMeasure);
			if (result == null)
				result = caseIfcPlaneAngleMeasure(ifcPositivePlaneAngleMeasure);
			if (result == null)
				result = caseIfcBendingParameterSelect(ifcPositivePlaneAngleMeasure);
			if (result == null)
				result = caseIfcMeasureValue(ifcPositivePlaneAngleMeasure);
			if (result == null)
				result = caseIfcValue(ifcPositivePlaneAngleMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcPositivePlaneAngleMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcPositivePlaneAngleMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_POSITIVE_RATIO_MEASURE: {
			IfcPositiveRatioMeasure ifcPositiveRatioMeasure = (IfcPositiveRatioMeasure) theEObject;
			T result = caseIfcPositiveRatioMeasure(ifcPositiveRatioMeasure);
			if (result == null)
				result = caseIfcRatioMeasure(ifcPositiveRatioMeasure);
			if (result == null)
				result = caseIfcMeasureValue(ifcPositiveRatioMeasure);
			if (result == null)
				result = caseIfcSizeSelect(ifcPositiveRatioMeasure);
			if (result == null)
				result = caseIfcTimeOrRatioSelect(ifcPositiveRatioMeasure);
			if (result == null)
				result = caseIfcValue(ifcPositiveRatioMeasure);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcPositiveRatioMeasure);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcPositiveRatioMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_ARC_INDEX: {
			IfcArcIndex ifcArcIndex = (IfcArcIndex) theEObject;
			T result = caseIfcArcIndex(ifcArcIndex);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_COMPLEX_NUMBER: {
			IfcComplexNumber ifcComplexNumber = (IfcComplexNumber) theEObject;
			T result = caseIfcComplexNumber(ifcComplexNumber);
			if (result == null)
				result = caseIfcMeasureValue(ifcComplexNumber);
			if (result == null)
				result = caseIfcValue(ifcComplexNumber);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcComplexNumber);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcComplexNumber);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_LINE_INDEX: {
			IfcLineIndex ifcLineIndex = (IfcLineIndex) theEObject;
			T result = caseIfcLineIndex(ifcLineIndex);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_NULL_STYLE: {
			IfcNullStyle ifcNullStyle = (IfcNullStyle) theEObject;
			T result = caseIfcNullStyle(ifcNullStyle);
			if (result == null)
				result = caseIfcPresentationStyleSelect(ifcNullStyle);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_ACTOR_SELECT: {
			IfcActorSelect ifcActorSelect = (IfcActorSelect) theEObject;
			T result = caseIfcActorSelect(ifcActorSelect);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_APPLIED_VALUE_SELECT: {
			IfcAppliedValueSelect ifcAppliedValueSelect = (IfcAppliedValueSelect) theEObject;
			T result = caseIfcAppliedValueSelect(ifcAppliedValueSelect);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_AXIS2_PLACEMENT: {
			IfcAxis2Placement ifcAxis2Placement = (IfcAxis2Placement) theEObject;
			T result = caseIfcAxis2Placement(ifcAxis2Placement);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_BENDING_PARAMETER_SELECT: {
			IfcBendingParameterSelect ifcBendingParameterSelect = (IfcBendingParameterSelect) theEObject;
			T result = caseIfcBendingParameterSelect(ifcBendingParameterSelect);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_BOOLEAN_OPERAND: {
			IfcBooleanOperand ifcBooleanOperand = (IfcBooleanOperand) theEObject;
			T result = caseIfcBooleanOperand(ifcBooleanOperand);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_CLASSIFICATION_REFERENCE_SELECT: {
			IfcClassificationReferenceSelect ifcClassificationReferenceSelect = (IfcClassificationReferenceSelect) theEObject;
			T result = caseIfcClassificationReferenceSelect(ifcClassificationReferenceSelect);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_CLASSIFICATION_SELECT: {
			IfcClassificationSelect ifcClassificationSelect = (IfcClassificationSelect) theEObject;
			T result = caseIfcClassificationSelect(ifcClassificationSelect);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_COLOUR: {
			IfcColour ifcColour = (IfcColour) theEObject;
			T result = caseIfcColour(ifcColour);
			if (result == null)
				result = caseIfcFillStyleSelect(ifcColour);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_COLOUR_OR_FACTOR: {
			IfcColourOrFactor ifcColourOrFactor = (IfcColourOrFactor) theEObject;
			T result = caseIfcColourOrFactor(ifcColourOrFactor);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_COORDINATE_REFERENCE_SYSTEM_SELECT: {
			IfcCoordinateReferenceSystemSelect ifcCoordinateReferenceSystemSelect = (IfcCoordinateReferenceSystemSelect) theEObject;
			T result = caseIfcCoordinateReferenceSystemSelect(ifcCoordinateReferenceSystemSelect);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_CSG_SELECT: {
			IfcCsgSelect ifcCsgSelect = (IfcCsgSelect) theEObject;
			T result = caseIfcCsgSelect(ifcCsgSelect);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_CURVE_FONT_OR_SCALED_CURVE_FONT_SELECT: {
			IfcCurveFontOrScaledCurveFontSelect ifcCurveFontOrScaledCurveFontSelect = (IfcCurveFontOrScaledCurveFontSelect) theEObject;
			T result = caseIfcCurveFontOrScaledCurveFontSelect(ifcCurveFontOrScaledCurveFontSelect);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_CURVE_ON_SURFACE: {
			IfcCurveOnSurface ifcCurveOnSurface = (IfcCurveOnSurface) theEObject;
			T result = caseIfcCurveOnSurface(ifcCurveOnSurface);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_CURVE_OR_EDGE_CURVE: {
			IfcCurveOrEdgeCurve ifcCurveOrEdgeCurve = (IfcCurveOrEdgeCurve) theEObject;
			T result = caseIfcCurveOrEdgeCurve(ifcCurveOrEdgeCurve);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_CURVE_STYLE_FONT_SELECT: {
			IfcCurveStyleFontSelect ifcCurveStyleFontSelect = (IfcCurveStyleFontSelect) theEObject;
			T result = caseIfcCurveStyleFontSelect(ifcCurveStyleFontSelect);
			if (result == null)
				result = caseIfcCurveFontOrScaledCurveFontSelect(ifcCurveStyleFontSelect);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_DEFINITION_SELECT: {
			IfcDefinitionSelect ifcDefinitionSelect = (IfcDefinitionSelect) theEObject;
			T result = caseIfcDefinitionSelect(ifcDefinitionSelect);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_DERIVED_MEASURE_VALUE: {
			IfcDerivedMeasureValue ifcDerivedMeasureValue = (IfcDerivedMeasureValue) theEObject;
			T result = caseIfcDerivedMeasureValue(ifcDerivedMeasureValue);
			if (result == null)
				result = caseIfcValue(ifcDerivedMeasureValue);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcDerivedMeasureValue);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcDerivedMeasureValue);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_DOCUMENT_SELECT: {
			IfcDocumentSelect ifcDocumentSelect = (IfcDocumentSelect) theEObject;
			T result = caseIfcDocumentSelect(ifcDocumentSelect);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_FILL_STYLE_SELECT: {
			IfcFillStyleSelect ifcFillStyleSelect = (IfcFillStyleSelect) theEObject;
			T result = caseIfcFillStyleSelect(ifcFillStyleSelect);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_GEOMETRIC_SET_SELECT: {
			IfcGeometricSetSelect ifcGeometricSetSelect = (IfcGeometricSetSelect) theEObject;
			T result = caseIfcGeometricSetSelect(ifcGeometricSetSelect);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_GRID_PLACEMENT_DIRECTION_SELECT: {
			IfcGridPlacementDirectionSelect ifcGridPlacementDirectionSelect = (IfcGridPlacementDirectionSelect) theEObject;
			T result = caseIfcGridPlacementDirectionSelect(ifcGridPlacementDirectionSelect);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_HATCH_LINE_DISTANCE_SELECT: {
			IfcHatchLineDistanceSelect ifcHatchLineDistanceSelect = (IfcHatchLineDistanceSelect) theEObject;
			T result = caseIfcHatchLineDistanceSelect(ifcHatchLineDistanceSelect);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_LAYERED_ITEM: {
			IfcLayeredItem ifcLayeredItem = (IfcLayeredItem) theEObject;
			T result = caseIfcLayeredItem(ifcLayeredItem);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_LIBRARY_SELECT: {
			IfcLibrarySelect ifcLibrarySelect = (IfcLibrarySelect) theEObject;
			T result = caseIfcLibrarySelect(ifcLibrarySelect);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_LIGHT_DISTRIBUTION_DATA_SOURCE_SELECT: {
			IfcLightDistributionDataSourceSelect ifcLightDistributionDataSourceSelect = (IfcLightDistributionDataSourceSelect) theEObject;
			T result = caseIfcLightDistributionDataSourceSelect(ifcLightDistributionDataSourceSelect);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_MATERIAL_SELECT: {
			IfcMaterialSelect ifcMaterialSelect = (IfcMaterialSelect) theEObject;
			T result = caseIfcMaterialSelect(ifcMaterialSelect);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_MEASURE_VALUE: {
			IfcMeasureValue ifcMeasureValue = (IfcMeasureValue) theEObject;
			T result = caseIfcMeasureValue(ifcMeasureValue);
			if (result == null)
				result = caseIfcValue(ifcMeasureValue);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcMeasureValue);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcMeasureValue);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_METRIC_VALUE_SELECT: {
			IfcMetricValueSelect ifcMetricValueSelect = (IfcMetricValueSelect) theEObject;
			T result = caseIfcMetricValueSelect(ifcMetricValueSelect);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_MODULUS_OF_ROTATIONAL_SUBGRADE_REACTION_SELECT: {
			IfcModulusOfRotationalSubgradeReactionSelect ifcModulusOfRotationalSubgradeReactionSelect = (IfcModulusOfRotationalSubgradeReactionSelect) theEObject;
			T result = caseIfcModulusOfRotationalSubgradeReactionSelect(ifcModulusOfRotationalSubgradeReactionSelect);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_MODULUS_OF_SUBGRADE_REACTION_SELECT: {
			IfcModulusOfSubgradeReactionSelect ifcModulusOfSubgradeReactionSelect = (IfcModulusOfSubgradeReactionSelect) theEObject;
			T result = caseIfcModulusOfSubgradeReactionSelect(ifcModulusOfSubgradeReactionSelect);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_MODULUS_OF_TRANSLATIONAL_SUBGRADE_REACTION_SELECT: {
			IfcModulusOfTranslationalSubgradeReactionSelect ifcModulusOfTranslationalSubgradeReactionSelect = (IfcModulusOfTranslationalSubgradeReactionSelect) theEObject;
			T result = caseIfcModulusOfTranslationalSubgradeReactionSelect(
					ifcModulusOfTranslationalSubgradeReactionSelect);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_OBJECT_REFERENCE_SELECT: {
			IfcObjectReferenceSelect ifcObjectReferenceSelect = (IfcObjectReferenceSelect) theEObject;
			T result = caseIfcObjectReferenceSelect(ifcObjectReferenceSelect);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_POINT_OR_VERTEX_POINT: {
			IfcPointOrVertexPoint ifcPointOrVertexPoint = (IfcPointOrVertexPoint) theEObject;
			T result = caseIfcPointOrVertexPoint(ifcPointOrVertexPoint);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PRESENTATION_STYLE_SELECT: {
			IfcPresentationStyleSelect ifcPresentationStyleSelect = (IfcPresentationStyleSelect) theEObject;
			T result = caseIfcPresentationStyleSelect(ifcPresentationStyleSelect);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PROCESS_SELECT: {
			IfcProcessSelect ifcProcessSelect = (IfcProcessSelect) theEObject;
			T result = caseIfcProcessSelect(ifcProcessSelect);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PRODUCT_REPRESENTATION_SELECT: {
			IfcProductRepresentationSelect ifcProductRepresentationSelect = (IfcProductRepresentationSelect) theEObject;
			T result = caseIfcProductRepresentationSelect(ifcProductRepresentationSelect);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PRODUCT_SELECT: {
			IfcProductSelect ifcProductSelect = (IfcProductSelect) theEObject;
			T result = caseIfcProductSelect(ifcProductSelect);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_PROPERTY_SET_DEFINITION_SELECT: {
			IfcPropertySetDefinitionSelect ifcPropertySetDefinitionSelect = (IfcPropertySetDefinitionSelect) theEObject;
			T result = caseIfcPropertySetDefinitionSelect(ifcPropertySetDefinitionSelect);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_RESOURCE_OBJECT_SELECT: {
			IfcResourceObjectSelect ifcResourceObjectSelect = (IfcResourceObjectSelect) theEObject;
			T result = caseIfcResourceObjectSelect(ifcResourceObjectSelect);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_RESOURCE_SELECT: {
			IfcResourceSelect ifcResourceSelect = (IfcResourceSelect) theEObject;
			T result = caseIfcResourceSelect(ifcResourceSelect);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_ROTATIONAL_STIFFNESS_SELECT: {
			IfcRotationalStiffnessSelect ifcRotationalStiffnessSelect = (IfcRotationalStiffnessSelect) theEObject;
			T result = caseIfcRotationalStiffnessSelect(ifcRotationalStiffnessSelect);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SEGMENT_INDEX_SELECT: {
			IfcSegmentIndexSelect ifcSegmentIndexSelect = (IfcSegmentIndexSelect) theEObject;
			T result = caseIfcSegmentIndexSelect(ifcSegmentIndexSelect);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SHELL: {
			IfcShell ifcShell = (IfcShell) theEObject;
			T result = caseIfcShell(ifcShell);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SIMPLE_VALUE: {
			IfcSimpleValue ifcSimpleValue = (IfcSimpleValue) theEObject;
			T result = caseIfcSimpleValue(ifcSimpleValue);
			if (result == null)
				result = caseIfcValue(ifcSimpleValue);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcSimpleValue);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcSimpleValue);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SIZE_SELECT: {
			IfcSizeSelect ifcSizeSelect = (IfcSizeSelect) theEObject;
			T result = caseIfcSizeSelect(ifcSizeSelect);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SOLID_OR_SHELL: {
			IfcSolidOrShell ifcSolidOrShell = (IfcSolidOrShell) theEObject;
			T result = caseIfcSolidOrShell(ifcSolidOrShell);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SPACE_BOUNDARY_SELECT: {
			IfcSpaceBoundarySelect ifcSpaceBoundarySelect = (IfcSpaceBoundarySelect) theEObject;
			T result = caseIfcSpaceBoundarySelect(ifcSpaceBoundarySelect);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SPECULAR_HIGHLIGHT_SELECT: {
			IfcSpecularHighlightSelect ifcSpecularHighlightSelect = (IfcSpecularHighlightSelect) theEObject;
			T result = caseIfcSpecularHighlightSelect(ifcSpecularHighlightSelect);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_STRUCTURAL_ACTIVITY_ASSIGNMENT_SELECT: {
			IfcStructuralActivityAssignmentSelect ifcStructuralActivityAssignmentSelect = (IfcStructuralActivityAssignmentSelect) theEObject;
			T result = caseIfcStructuralActivityAssignmentSelect(ifcStructuralActivityAssignmentSelect);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_STYLE_ASSIGNMENT_SELECT: {
			IfcStyleAssignmentSelect ifcStyleAssignmentSelect = (IfcStyleAssignmentSelect) theEObject;
			T result = caseIfcStyleAssignmentSelect(ifcStyleAssignmentSelect);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SURFACE_OR_FACE_SURFACE: {
			IfcSurfaceOrFaceSurface ifcSurfaceOrFaceSurface = (IfcSurfaceOrFaceSurface) theEObject;
			T result = caseIfcSurfaceOrFaceSurface(ifcSurfaceOrFaceSurface);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_SURFACE_STYLE_ELEMENT_SELECT: {
			IfcSurfaceStyleElementSelect ifcSurfaceStyleElementSelect = (IfcSurfaceStyleElementSelect) theEObject;
			T result = caseIfcSurfaceStyleElementSelect(ifcSurfaceStyleElementSelect);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_TEXT_FONT_SELECT: {
			IfcTextFontSelect ifcTextFontSelect = (IfcTextFontSelect) theEObject;
			T result = caseIfcTextFontSelect(ifcTextFontSelect);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_TIME_OR_RATIO_SELECT: {
			IfcTimeOrRatioSelect ifcTimeOrRatioSelect = (IfcTimeOrRatioSelect) theEObject;
			T result = caseIfcTimeOrRatioSelect(ifcTimeOrRatioSelect);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_TRANSLATIONAL_STIFFNESS_SELECT: {
			IfcTranslationalStiffnessSelect ifcTranslationalStiffnessSelect = (IfcTranslationalStiffnessSelect) theEObject;
			T result = caseIfcTranslationalStiffnessSelect(ifcTranslationalStiffnessSelect);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_TRIMMING_SELECT: {
			IfcTrimmingSelect ifcTrimmingSelect = (IfcTrimmingSelect) theEObject;
			T result = caseIfcTrimmingSelect(ifcTrimmingSelect);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_UNIT: {
			IfcUnit ifcUnit = (IfcUnit) theEObject;
			T result = caseIfcUnit(ifcUnit);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_VALUE: {
			IfcValue ifcValue = (IfcValue) theEObject;
			T result = caseIfcValue(ifcValue);
			if (result == null)
				result = caseIfcAppliedValueSelect(ifcValue);
			if (result == null)
				result = caseIfcMetricValueSelect(ifcValue);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_VECTOR_OR_DIRECTION: {
			IfcVectorOrDirection ifcVectorOrDirection = (IfcVectorOrDirection) theEObject;
			T result = caseIfcVectorOrDirection(ifcVectorOrDirection);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.IFC_WARPING_STIFFNESS_SELECT: {
			IfcWarpingStiffnessSelect ifcWarpingStiffnessSelect = (IfcWarpingStiffnessSelect) theEObject;
			T result = caseIfcWarpingStiffnessSelect(ifcWarpingStiffnessSelect);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.LIST_OF_IFC_CARTESIAN_POINT: {
			ListOfIfcCartesianPoint listOfIfcCartesianPoint = (ListOfIfcCartesianPoint) theEObject;
			T result = caseListOfIfcCartesianPoint(listOfIfcCartesianPoint);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.LIST_OF_IFC_LENGTH_MEASURE: {
			ListOfIfcLengthMeasure listOfIfcLengthMeasure = (ListOfIfcLengthMeasure) theEObject;
			T result = caseListOfIfcLengthMeasure(listOfIfcLengthMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.LIST_OF_IFC_NORMALISED_RATIO_MEASURE: {
			ListOfIfcNormalisedRatioMeasure listOfIfcNormalisedRatioMeasure = (ListOfIfcNormalisedRatioMeasure) theEObject;
			T result = caseListOfIfcNormalisedRatioMeasure(listOfIfcNormalisedRatioMeasure);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.LIST_OF_ELONG: {
			ListOfELong listOfELong = (ListOfELong) theEObject;
			T result = caseListOfELong(listOfELong);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.LIST_OF_EDOUBLE: {
			ListOfEDouble listOfEDouble = (ListOfEDouble) theEObject;
			T result = caseListOfEDouble(listOfEDouble);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		case Ifc4Package.LIST_OF_IFC_PARAMETER_VALUE: {
			ListOfIfcParameterValue listOfIfcParameterValue = (ListOfIfcParameterValue) theEObject;
			T result = caseListOfIfcParameterValue(listOfIfcParameterValue);
			if (result == null)
				result = defaultCase(theEObject);
			return result;
		}
		default:
			return defaultCase(theEObject);
		}
	}
871323
public com.google.api.ads.admanager.axis.v201902.Technology[] getExcludedMobileDeviceSubmodels() {
        return excludedMobileDeviceSubmodels;
    }
1240015
public Optional<BIC> getBic() {
        return (bic == null) ? Optional.empty() : Optional.of(bic);
    }
1112589
public boolean isExcluded(ItemData eventData)
   {
      if (excludedPath != null
         && (eventData.getQPath().isDescendantOf(excludedPath) || eventData.getQPath().equals(excludedPath)))
      {
         return true;
      }

      return !allIndexing && !eventData.getQPath().isDescendantOf(indexingRootQpath)
         && !eventData.getQPath().equals(indexingRootQpath);
   }
1106179
@Override
	public void removeByCProductId(long CProductId) {
		for (CommerceWishListItem commerceWishListItem : findByCProductId(
				CProductId, QueryUtil.ALL_POS, QueryUtil.ALL_POS, null)) {
			remove(commerceWishListItem);
		}
	}