Example #1
0
 /// <summary>
 /// Add a method to the definition for the entity.
 /// </summary>
 /// <param name="entity"></param>
 /// <param name="method"></param>
 private static void AddMethodToEntity(OrmEntity entity, MethodDescription method)
 {
     OrmEntityMethod targetMethod = null;
     targetMethod = method.CreateMethod(entity);
     OrmMethodTarget targetStep = method.CreateTarget(AUTOWIRE_HEADER);
     TargetMethodCollection targetColl = null;
     switch (method.StepType)
     {
         case TargetStepType.PreExecute:
             targetColl = targetMethod.PreExecuteTargets;
             break;
         case TargetStepType.PostFlush:
             targetColl = targetMethod.PostFlushTargets;
             break;
         case TargetStepType.PostExecute:
             targetColl = targetMethod.PostExecuteTargets;
             break;
         case TargetStepType.Primary:
         default:
             targetColl = targetMethod.MethodTargets;
             break;
     }
     targetColl.Add(targetStep);
     entity.Methods.Add(targetMethod);
 }
Example #2
0
        /// <summary>
        /// Add a method to the definition for the entity.
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="method"></param>
        private static void AddMethodToEntity(OrmEntity entity, MethodDescription method)
        {
            OrmEntityMethod targetMethod = null;

            targetMethod = method.CreateMethod(entity);
            OrmMethodTarget        targetStep = method.CreateTarget(AUTOWIRE_HEADER);
            TargetMethodCollection targetColl = null;

            switch (method.StepType)
            {
            case TargetStepType.PreExecute:
                targetColl = targetMethod.PreExecuteTargets;
                break;

            case TargetStepType.PostFlush:
                targetColl = targetMethod.PostFlushTargets;
                break;

            case TargetStepType.PostExecute:
                targetColl = targetMethod.PostExecuteTargets;
                break;

            case TargetStepType.Primary:
            default:
                targetColl = targetMethod.MethodTargets;
                break;
            }
            targetColl.Add(targetStep);
            entity.Methods.Add(targetMethod);
        }
Example #3
0
        private static bool CleanAutowireMethodsTarget(TargetStepType targetStepType, TargetMethodCollection targetColl, List <MethodDescription> methodsToCreate)
        {
            List <OrmMethodTarget> targetsToRemove = new List <OrmMethodTarget>();

            foreach (OrmMethodTarget target in targetColl)
            {
                if (IsOpenSlxTarget(target))
                {
                    MethodDescription targetMatch = methodsToCreate.FirstOrDefault(x => x.MatchTarget(target, targetStepType, AUTOWIRE_HEADER));
                    if (targetMatch != null)
                    {
                        methodsToCreate.Remove(targetMatch);
                    }
                    else
                    {
                        targetsToRemove.Add(target);
                    }
                }
            }
            foreach (OrmMethodTarget target in targetsToRemove)
            {
                targetColl.Remove(target);
            }

            return(targetsToRemove.Count > 0);
        }
Example #4
0
        public override bool Equals(object obj)
        {
            MethodDescription right = obj as MethodDescription;

            if (right == null)
            {
                return(false);
            }
            return(Name == right.Name &&
                   TargetEntity == right.TargetEntity &&
                   StepType == right.StepType &&
                   DeclaringType == right.DeclaringType);
        }
Example #5
0
        /// <summary>
        /// Check for custom "AutoWire" attributes added to any (static) method in the assembly, and populate corresponding
        /// descriptions.
        /// </summary>
        /// <param name="file"></param>
        /// <param name="result"></param>
        private static void CollectMethodDescriptionsForAssembly(string file, List <MethodDescription> result)
        {
            Assembly asm;

            try
            {
                asm = Assembly.ReflectionOnlyLoadFrom(file);
            }
            catch (Exception x)
            {
                //    LOG.Warn("Failed to load assembly from file " + file, x);
                return;
            }
            if (CustomAttributeData.GetCustomAttributes(asm).Count(x => x.Constructor.DeclaringType.FullName == typeof(AutoWireAttribute).FullName) == 0)
            {
                return;
            }
            Type componentRefType = Type.ReflectionOnlyGetType("Sage.Platform.ComponentModel.IComponentReference, Sage.Platform", false, false);

            foreach (Type targetType in asm.GetTypes())
            {
                foreach (MethodInfo method in targetType.GetMethods(BindingFlags.Static | BindingFlags.Public))
                {
                    ParameterInfo[] methodParams = method.GetParameters();
                    if (methodParams.Length == 0 || !componentRefType.IsAssignableFrom(methodParams[0].ParameterType))
                    {
                        continue;
                    }
                    String entityType = methodParams[0].ParameterType.Name.Substring(1);  // chop initial "I" from interface name

                    foreach (CustomAttributeData attr in CustomAttributeData.GetCustomAttributes(method))
                    {
                        Type attrType = attr.Constructor.DeclaringType;
                        if (!attrType.FullName.StartsWith("OpenSlx.Lib.AutoWire"))
                        {
                            continue;
                        }
                        MethodDescription newMethod = new MethodDescription
                        {
                            Name          = method.Name,
                            TargetEntity  = entityType,
                            DeclaringType = FormatType(targetType)
                        };
                        // set method type and default step type according to the type of rule we have
                        switch (attrType.Name)
                        {
                        case "BusinessRuleAttribute":
                            newMethod.StepType = TargetStepType.Primary;
                            break;

                        case "OnBeforeInsertAttribute":
                            newMethod.MethodType = Sage.Platform.Orm.Entities.MethodType.CrudEvent;
                            newMethod.StepType   = TargetStepType.PostExecute;
                            newMethod.EventType  = EventType.BeforeInsert;
                            break;

                        case "OnBeforeUpdateAttribute":
                            newMethod.MethodType = Sage.Platform.Orm.Entities.MethodType.CrudEvent;
                            newMethod.StepType   = TargetStepType.PostExecute;
                            newMethod.EventType  = EventType.BeforeUpdate;
                            break;

                        case "OnBeforeDeleteAttribute":
                            newMethod.MethodType = Sage.Platform.Orm.Entities.MethodType.CrudEvent;
                            newMethod.StepType   = TargetStepType.PostExecute;
                            newMethod.EventType  = EventType.BeforeDelete;
                            break;

                        case "OnAfterUpdateAttribute":
                            newMethod.MethodType = Sage.Platform.Orm.Entities.MethodType.CrudEvent;
                            newMethod.StepType   = TargetStepType.PostExecute;
                            newMethod.EventType  = EventType.AfterUpdate;
                            break;

                        case "OnAfterInsertAttribute":
                            newMethod.MethodType = Sage.Platform.Orm.Entities.MethodType.CrudEvent;
                            newMethod.StepType   = TargetStepType.PostExecute;
                            newMethod.EventType  = EventType.AfterInsert;
                            break;
                        }
                        foreach (CustomAttributeNamedArgument arg in attr.NamedArguments)
                        {
                            switch (arg.MemberInfo.Name)
                            {
                            case "StepType":
                                newMethod.StepType = (TargetStepType)arg.TypedValue.Value;
                                break;

                            case "Description":
                                newMethod.Description = (String)arg.TypedValue.Value;
                                break;
                            }
                        }
                        List <ParamDescription> newParams = new List <ParamDescription>();
                        for (int i = 1; i < methodParams.Length; i++)
                        {
                            if (methodParams[i].IsOut)
                            {
                                newMethod.ReturnType = methodParams[i].ParameterType.FullName;
                            }
                            else
                            {
                                newParams.Add(new ParamDescription
                                {
                                    ParamType = methodParams[i].ParameterType.FullName,
                                    Name      = methodParams[i].Name
                                });
                            }
                        }
                        newMethod.ParameterTypes = newParams.ToArray();


                        result.Add(newMethod);
                    }
                }
            }
        }
Example #6
0
        /// <summary>
        /// Check for custom "AutoWire" attributes added to any (static) method in the assembly, and populate corresponding 
        /// descriptions.
        /// </summary>
        /// <param name="file"></param>
        /// <param name="result"></param>
        private static void CollectMethodDescriptionsForAssembly(string file, List<MethodDescription> result)
        {
            Assembly asm;
            try
            {
                asm = Assembly.ReflectionOnlyLoadFrom(file);
            }
            catch (Exception x)
            {
                //    LOG.Warn("Failed to load assembly from file " + file, x);
                return;
            }
            if (CustomAttributeData.GetCustomAttributes(asm).Count(x => x.Constructor.DeclaringType.FullName == typeof(AutoWireAttribute).FullName) == 0)
                return;
            Type componentRefType = Type.ReflectionOnlyGetType("Sage.Platform.ComponentModel.IComponentReference, Sage.Platform", false, false);
            foreach (Type targetType in asm.GetTypes())
            {
                foreach (MethodInfo method in targetType.GetMethods(BindingFlags.Static | BindingFlags.Public))
                {
                    ParameterInfo[] methodParams = method.GetParameters();
                    if (methodParams.Length == 0 || !componentRefType.IsAssignableFrom(methodParams[0].ParameterType))
                        continue;
                    String entityType = methodParams[0].ParameterType.Name.Substring(1);  // chop initial "I" from interface name

                    foreach (CustomAttributeData attr in CustomAttributeData.GetCustomAttributes(method))
                    {
                        Type attrType = attr.Constructor.DeclaringType;
                        if (!attrType.FullName.StartsWith("OpenSlx.Lib.AutoWire"))
                            continue;
                        MethodDescription newMethod = new MethodDescription
                                {
                                    Name = method.Name,
                                    TargetEntity = entityType,
                                    DeclaringType = FormatType(targetType)
                                };
                        // set method type and default step type according to the type of rule we have
                        switch (attrType.Name)
                        {
                            case "BusinessRuleAttribute":
                                newMethod.StepType = TargetStepType.Primary;
                                break;
                            case "OnBeforeInsertAttribute":
                                newMethod.MethodType = Sage.Platform.Orm.Entities.MethodType.CrudEvent;
                                newMethod.StepType = TargetStepType.PostExecute;
                                newMethod.EventType = EventType.BeforeInsert;
                                break;
                            case "OnBeforeUpdateAttribute":
                                newMethod.MethodType = Sage.Platform.Orm.Entities.MethodType.CrudEvent;
                                newMethod.StepType = TargetStepType.PostExecute;
                                newMethod.EventType = EventType.BeforeUpdate;
                                break;
                            case "OnBeforeDeleteAttribute":
                                newMethod.MethodType = Sage.Platform.Orm.Entities.MethodType.CrudEvent;
                                newMethod.StepType = TargetStepType.PostExecute;
                                newMethod.EventType = EventType.BeforeDelete;
                                break;
                            case "OnAfterUpdateAttribute":
                                newMethod.MethodType = Sage.Platform.Orm.Entities.MethodType.CrudEvent;
                                newMethod.StepType = TargetStepType.PostExecute;
                                newMethod.EventType = EventType.AfterUpdate;
                                break;
                            case "OnAfterInsertAttribute":
                                newMethod.MethodType = Sage.Platform.Orm.Entities.MethodType.CrudEvent;
                                newMethod.StepType = TargetStepType.PostExecute;
                                newMethod.EventType = EventType.AfterInsert;
                                break;
                        }
                        foreach (CustomAttributeNamedArgument arg in attr.NamedArguments)
                        {
                            switch (arg.MemberInfo.Name)
                            {
                                case "StepType":
                                    newMethod.StepType = (TargetStepType)arg.TypedValue.Value;
                                    break;
                                case "Description":
                                    newMethod.Description = (String)arg.TypedValue.Value;
                                    break;
                            }
                        }
                        List<ParamDescription> newParams = new List<ParamDescription>();
                        for (int i = 1; i < methodParams.Length; i++)
                        {
                            if (methodParams[i].IsOut)
                            {
                                newMethod.ReturnType = methodParams[i].ParameterType.FullName;
                            }
                            else
                            {
                                newParams.Add(new ParamDescription
                                {
                                    ParamType = methodParams[i].ParameterType.FullName,
                                    Name = methodParams[i].Name
                                });
                            }
                        }
                        newMethod.ParameterTypes = newParams.ToArray();

                        result.Add(newMethod);
                    }
                }
            }
        }