示例#1
0
        public bool validate(EClass eClass, EObject eObject, DiagnosticChain diagnostics, Dictionary <object, object> context)
        {
            Object eValidator = null;
            EClass eType      = eClass;

            //while ((eValidator = eValidatorRegistry.get(eType.eContainer())) == null)

            while (!eValidatorRegistry.ContainsKey(eType.eContainer() as EPackage))
            {
                eValidator = eValidatorRegistry[eType.eContainer() as EPackage];
                List <EClass> eSuperTypes = eType.eSuperTypes;
                if (eSuperTypes.Count == 0)
                {
                    //TODO return a defaultCase
                    eValidator = null;// eValidatorRegistry.get(null);
                    break;
                }
                else
                {
                    eType = eSuperTypes.ElementAt(0);
                }
            }
            //bool circular = context.get(EObjectValidator.ROOT_OBJECT) == eObject;
            //TODO containskey check
            bool circular = context[EObjectValidator.ROOT_OBJECT] == eObject;
            bool result   = doValidate((EValidator)eValidator, eClass, eObject, diagnostics, context);

            if ((result || diagnostics != null) && !circular)
            {
                result &= doValidateContents(eObject, diagnostics, context);
            }
            return(result);
        }
        public virtual bool validate(EClass eClass, EObject eObject, DiagnosticChain diagnostics, Dictionary <object, object> context)
        {
            if (eObject.eIsProxy())
            {
                if (context != null && context.ContainsKey(ROOT_OBJECT) && context[ROOT_OBJECT] != null)
                {
                    if (diagnostics != null)
                    {
                        diagnostics.add
                            (createDiagnostic
                                (BasicDiagnostic.ERROR,
                                DIAGNOSTIC_SOURCE,
                                EOBJECT__EVERY_PROXY_RESOLVES,
                                "_UI_UnresolvedProxy_diagnostic",
                                new Object[]
                        {
                            getFeatureLabel(eObject.eContainmentFeature(), context),
                            getObjectLabel(eObject.eContainer(), context),
                            getObjectLabel(eObject, context)
                        },
                                new Object[] { eObject.eContainer(), eObject.eContainmentFeature(), eObject },
                                context));
                    }
                    return(false);
                }
                else
                {
                    return(true);
                }
            }
            else if (eClass.eContainer() == getEPackage())
            {
                return(validate(eClass.getClassifierID(), eObject, diagnostics, context));
            }
            else
            {
                return(true);

                /*
                 * return
                 * new DynamicEClassValidator()
                 * {
                 * // Ensure that the class loader for this class will be used downstream.
                 * //
                 * }.validate(eClass, eObject, diagnostics, context);
                 */
            }
        }