public static string ProcessComponentTemplate(Entity entity, ArchAngel.Providers.EntityModel.Model.EntityLayer.Component component)
        {
            System.Text.StringBuilder sb = new StringBuilder(((SourceCodeMultiLineType)SharedData.CurrentProject.GetUserOption("ComponentTemplate")).Value);

            string specName      = component.Specification.Name;
            string componentName = component.Name;

            sb.Replace("#entity.Name#", entity.Name);
            sb.Replace("#component.Name#", component.Name);
            sb.Replace("#component.Type#", specName);

            bool usePrivateSetter = (bool)SharedData.CurrentProject.GetUserOption("UsePrivateSettersOnProperties") ||
                                    (bool)component.GetUserOptionValue("Component_UsePrivateSetter");

            ProcessIfStatement(sb, "component.SetterIsPrivate", usePrivateSetter);

            return(RemoveTrailingLineBreaks(sb.ToString()));
        }