private static void OnTemplateBuildingBlockSave(TemplateBuildingBlock subject, SaveEventArgs e, EventPhases phase)
        {
            if (!subject.IsAssemblyTemplateBuildingBlock())
                return;

            using (var session = subject.Session)
            {
                var templatingAssembly = new TemplatingAssembly(subject);

                foreach (var embeddedParameterSchema in templatingAssembly.EmbeddedParameterSchemas)
                {
                    if (session.IsExistingObject(String.Concat(subject.OrganizationalItem.WebDavUrl, "/", embeddedParameterSchema.Title, ".xsd")))
                        continue;

                    var parameterSchema = new Schema(session, subject.OrganizationalItem.Id)
                    {
                        Title = embeddedParameterSchema.Title,
                        Description = embeddedParameterSchema.Title,
                        Purpose = SchemaPurpose.TemplateParameters,
                        RootElementName = "Parameters",
                        Xsd = embeddedParameterSchema.Xsd
                    };

                    parameterSchema.Save(true);
                }

                foreach (var cSharpTemplateBuildingBlock in templatingAssembly.CSharpTemplateBuildingBlocks)
                {
                    //If a TBB already exists
                    if (session.IsExistingObject(String.Concat(subject.OrganizationalItem.WebDavUrl, "/", cSharpTemplateBuildingBlock.Title, ".tbbcs")))
                        continue;

                    //Create a new C# TBB
                    var templateBuildingBlock = new TemplateBuildingBlock(session, subject.OrganizationalItem.Id)
                    {
                        Title = cSharpTemplateBuildingBlock.Title,
                        TemplateType = TemplateTypes.CSharpTemplate,
                        Content = String.Format(CSharpTemplateBuildingBlockContent, templatingAssembly.Id, cSharpTemplateBuildingBlock.ClassName)
                    };

                    if (cSharpTemplateBuildingBlock.ParameterSchema != null)
                    {
                        if (cSharpTemplateBuildingBlock.ParameterSchema.ToLower().StartsWith("/webdav/") || cSharpTemplateBuildingBlock.ParameterSchema.ToLower().StartsWith("tcm:"))
                        {
                            var parameterSchema = (Schema) session.GetObject(cSharpTemplateBuildingBlock.ParameterSchema);
                            templateBuildingBlock.ParameterSchema = parameterSchema;
                        }
                        else if (cSharpTemplateBuildingBlock.ParameterSchema.ToLower().StartsWith("resource:"))
                        {
                            var parameterSchemaUrl = String.Concat(subject.OrganizationalItem.WebDavUrl, "/", Regex.Match(cSharpTemplateBuildingBlock.ParameterSchema, @"[\w ]*(?=\.xsd$)").Value, ".xsd");
                            var parameterSchema = (Schema)session.GetObject(parameterSchemaUrl);
                            templateBuildingBlock.ParameterSchema = parameterSchema;
                        }
                    }

                    templateBuildingBlock.Save(true);
                }
            }
        }
        /// <summary>
        /// Clears the where used items of this template.
        /// </summary>
        /// <param name="template"></param>
        public void ClearWhereUsed(TemplateBuildingBlock template)
        {
            UsingItemsFilter filter = new UsingItemsFilter(template.Session);

            filter.BaseColumns = ListBaseColumns.Id;
            filter.ItemTypes   = new ItemType[] { ItemType.TemplateBuildingBlock };

            XmlElement items = template.GetListUsingItems(filter);

            foreach (XmlElement item in items)
            {
                RemoveTemplate(item.Attributes["ID"].Value);
            }
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="TransformXml"/> class.
        /// </summary>
        /// <param name="engine"><see cref="T:Tridion.ContentManager.Templating.Engine" /></param>
        /// <param name="package"><see cref="T:Tridion.ContentManager.Templating.Package" /></param>
        /// <param name="templateBase"><see cref="T:TcmTemplating.TemplateBase" /></param>
        /// <param name="templateBuildingBlock">Tridion template building block to use as source</param>
        public TransformXml(Engine engine, Package package, TemplateBase templateBase, Uri templateBuildingBlockUri) : this(engine, package, templateBase)
        {
            TemplateBuildingBlock templateBuildingBlock = engine.GetObject(templateBuildingBlockUri.ToString()) as TemplateBuildingBlock;

            if (templateBuildingBlock == null)
            {
                throw new ArgumentException("templateBuildingBlock is not ItemType.TemplateBuildingBlock");
            }

            String content = templateBuildingBlock.Content.Replace("tcm:include", "xsl:include");

            using (StringReader sr = new StringReader(content))
            {
                using (XmlReader reader = XmlReader.Create(sr))
                {
                    mXslCompiledTransform.Load(reader, XsltSettings, new XmlTcmUriResolver(engine));
                }
            }
        }
 private void OnTBBSavePre(TemplateBuildingBlock tbb, CheckInEventArgs args, EventPhases phase)
 {
     configManager = ConfigurationManager.GetInstance(tbb);
 }
 private void OnTBBSavePre(TemplateBuildingBlock tbb, CheckInEventArgs args, EventPhases phase)
 {
     configManager = ConfigurationManager.GetInstance(tbb);
 }
 public TemplatingAssembly(TemplateBuildingBlock templateBuildingBlock)
 {
     _assembly = Assembly.Load(templateBuildingBlock.BinaryContent.GetByteArray());
     Id = templateBuildingBlock.Id;
 }