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>
        /// Create a new method or return existing method if appropriate
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public OrmEntityMethod CreateMethod(OrmEntity entity)
        {
            if (MethodType == Sage.Platform.Orm.Entities.MethodType.Rule)
            {
                OrmEntityMethod method = new OrmEntityMethod
                {
                    ActionType = ActionType.None,
                    ReturnType = ReturnType,
                    MethodName = Name,
                    MethodType = MethodType
                };
                if (ParameterTypes != null && ParameterTypes.Length > 0)
                {
                    //MethodParameterCollection paramColl = new MethodParameterCollection(method);
                    foreach (ParamDescription p in ParameterTypes)
                    {
                        method.MethodParameters.Add(new OrmEntityMethodParam {
                            ParamName = p.Name, ParamType = p.ParamType
                        });
                    }
                }
                return(method);
            }
            else if (MethodType == Sage.Platform.Orm.Entities.MethodType.CrudEvent)
            {
                switch (EventType)
                {
                case AutoWire.EventType.BeforeUpdate:
                    return(entity.OnBeforeUpdateMethod);

                case AutoWire.EventType.AfterUpdate:
                    return(entity.OnAfterUpdateMethod);

                case AutoWire.EventType.BeforeInsert:
                    return(entity.OnBeforeInsertMethod);

                case AutoWire.EventType.AfterInsert:
                    return(entity.OnAfterInsertMethod);

                case AutoWire.EventType.BeforeDelete:
                    return(entity.OnBeforeDeleteMethod);

                default:
                    throw new Exception("Invalid event type " + EventType + " for AutoWire method " + DeclaringType + "." + Name);
                }
            }
            else
            {
                throw new Exception("Unsupported method type " + MethodType + " for AutoWire method " + DeclaringType + "." + Name);
            }
        }
Example #3
0
 /// <summary>
 /// Create a new method or return existing method if appropriate
 /// </summary>
 /// <param name="entity"></param>
 /// <returns></returns>
 public OrmEntityMethod CreateMethod(OrmEntity entity)
 {
     if (MethodType == Sage.Platform.Orm.Entities.MethodType.Rule)
     {
         OrmEntityMethod method = new OrmEntityMethod
         {
             ActionType = ActionType.None,
             ReturnType = ReturnType,
             MethodName = Name,
             MethodType = MethodType
         };
         if (ParameterTypes != null && ParameterTypes.Length > 0)
         {
             //MethodParameterCollection paramColl = new MethodParameterCollection(method);
             foreach (ParamDescription p in ParameterTypes)
             {
                 method.MethodParameters.Add(new OrmEntityMethodParam { ParamName = p.Name, ParamType = p.ParamType });
             }
         }
         return method;
     }
     else if (MethodType == Sage.Platform.Orm.Entities.MethodType.CrudEvent)
     {
         switch (EventType)
         {
             case AutoWire.EventType.BeforeUpdate:
                 return entity.OnBeforeUpdateMethod;
             case AutoWire.EventType.AfterUpdate:
                 return entity.OnAfterUpdateMethod;
             case AutoWire.EventType.BeforeInsert:
                 return entity.OnBeforeInsertMethod;
             case AutoWire.EventType.AfterInsert:
                 return entity.OnAfterInsertMethod;
             case AutoWire.EventType.BeforeDelete:
                 return entity.OnBeforeDeleteMethod;
             default:
                 throw new Exception("Invalid event type " + EventType + " for AutoWire method " + DeclaringType + "." + Name);
         }
     }
     else
     {
         throw new Exception("Unsupported method type " + MethodType + " for AutoWire method " + DeclaringType + "." + Name);
     }
 }
Example #4
0
        private static void AttachSnippet(
            OrmEntityMethod entityMethod,
            string methodBodyTemplate,
            string relationshipProperty,
            string localProperty,
            string foreignProperty,
            params string[] usings)
        {
            string methodName = string.Format("{0}_Set{1}", entityMethod.MethodName, localProperty);
            OrmMethodTargetSnippet snippet = (OrmMethodTargetSnippet) CollectionUtils.Find(
                                                                          entityMethod.PostExecuteTargets,
                                                                          delegate(OrmMethodTarget item)
                                                                              {
                                                                                  return (item is OrmMethodTargetSnippet &&
                                                                                          StringUtils.CaseInsensitiveEquals(item.TargetMethod, methodName));
                                                                              });

            if (snippet == null)
            {
                snippet = new OrmMethodTargetSnippet(entityMethod, MethodTargetType.PostExecute);
                entityMethod.PostExecuteTargets.Add(snippet);
            }

            string namespaceName = CodeSnippetManager.GetConfiguration().DefaultNamespace;
            string className = entityMethod.Entity.Name + "BusinessRules";
            CodeSnippetTemplateContext context = new CodeSnippetTemplateContext(
                namespaceName,
                className,
                methodName,
                "void");

            foreach (string use in usings)
            {
                context.Usings.Add(use);
            }

            context.Usings.Add("NHibernate");
            string targetInstance = entityMethod.Entity.Name.ToLowerInvariant();
            context.AddParameter(entityMethod.Entity.InterfaceName, targetInstance);
            context.AddParameter("ISession", "session");

            if (!(snippet.CodeSnippet is CodeSnippetCSharp))
            {
                if (snippet.CodeSnippet != null)
                {
                    snippet.CodeSnippet.Delete();
                }

                snippet.CodeSnippet = new CodeSnippetCSharp(entityMethod, context);
            }

            snippet.CodeSnippet.Header.Name = methodName;
            snippet.CodeSnippet.Header.AssemblyReferences.Add(
                new AssemblyReference(
                    "Sage.Entity.Interfaces.dll",
                    Path.Combine("%BASEBUILDPATH%", @"interfaces\bin\Sage.Entity.Interfaces.dll")));
            snippet.CodeSnippet.Header.AssemblyReferences.Add(
                new AssemblyReference(
                    "Sage.Platform.dll",
                    Path.Combine("%BASEBUILDPATH%", @"assemblies\Sage.Platform.dll")));
            snippet.TargetMethod = methodName;
            snippet.TargetType = string.Format("{0}.{1}, {2}", namespaceName, className, snippet.CodeSnippet.Header.Assembly);

            string code = snippet.CodeSnippet.Code;
            int pos = code.IndexOf(methodName);

            if (pos >= 0)
            {
                pos = code.IndexOf("// TODO: ", pos);

                if (pos >= 0)
                {
                    int pos2 = code.IndexOfAny(new char[] {'\r', '\n'}, pos);

                    if (pos2 >= 0)
                    {
                        Hashtable contexts = new Hashtable(4);
                        contexts.Add("targetInstance", targetInstance);
                        contexts.Add("relationshipProperty", relationshipProperty);
                        contexts.Add("localProperty", localProperty);
                        contexts.Add("foreignProperty", foreignProperty);
                        ITemplateEngine engine = new NVelocityTemplateEngine();
                        ITemplate template = engine.CreateTemplate(methodBodyTemplate, contexts);
                        snippet.CodeSnippet.Code = code.Replace(
                            code.Substring(pos, pos2 - pos),
                            template.ApplyTemplate());
                    }
                }
            }

            entityMethod.Validate();
            entityMethod.Save();
        }