{
return true;
}
boolean result = true;
EDataType eDataType = eAttribute.getEAttributeType();
EValidator rootValidator = getRootEValidator(context);
Object value = eObject.eGet(eAttribute);
if (FeatureMapUtil.isFeatureMap(eAttribute))
{
@SuppressWarnings("unchecked") Collection<FeatureMap.Entry> featureMap = (Collection<FeatureMap.Entry>)value;
EClass eClass = eObject.eClass();
Map<EStructuralFeature, DiagnosticChain> entryFeatureToDiagnosticChainMap = null;
for (Iterator<FeatureMap.Entry> i = featureMap.iterator(); i.hasNext() && (result || diagnostics != null); )
{
FeatureMap.Entry entry = i.next();
EStructuralFeature entryFeature = entry.getEStructuralFeature();
if (entryFeature instanceof EAttribute &&
ExtendedMetaData.INSTANCE.getAffiliation(eClass, entryFeature) == eAttribute)
{
EDataType entryType = (EDataType)entryFeature.getEType();
Object entryValue = entry.getValue();
boolean entryIsValid = rootValidator.validate(entryType, entryValue, null, context);
if (!entryIsValid)
{
result = false;
if (diagnostics != null)
{
if (entryFeatureToDiagnosticChainMap == null)
{
entryFeatureToDiagnosticChainMap = new HashMap<EStructuralFeature, DiagnosticChain>();
}
DiagnosticChain entryFeatureDiagnostic = entryFeatureToDiagnosticChainMap.get(entryFeature);
if (entryFeatureDiagnostic == null)
{
entryFeatureDiagnostic = createBadDataValueDiagnostic(eObject, (EAttribute)entryFeature, diagnostics, context);
entryFeatureToDiagnosticChainMap.put(entryFeature, entryFeatureDiagnostic);
}
rootValidator.validate(entryType, entryValue, entryFeatureDiagnostic, context);
}
}
}
}
}
else if (eAttribute.isMany())
{
for (Iterator<?> i = ((List<?>)value).iterator(); i.hasNext() && result; )
{
result &= rootValidator.validate(eDataType, i.next(), null, context);
}
if (!result && diagnostics != null)
{
DiagnosticChain diagnostic = createBadDataValueDiagnostic(eObject, eAttribute, diagnostics, context);
for (Iterator<?> i = ((List<?>)value).iterator(); i.hasNext(); )
{
rootValidator.validate(eDataType, i.next(), diagnostic, context);
}
}
}
else if (value != null)
{
result = rootValidator.validate(eDataType, value, null, context);
if (!result && diagnostics != null)
{
DiagnosticChain diagnostic = createBadDataValueDiagnostic(eObject, eAttribute, diagnostics, context);
rootValidator.validate(eDataType, value, diagnostic, context);
}
}
return result;
}