Exemple #1
0
        public void VerifyExtendedSignatureUsingPublicationsCodeAutoExtend()
        {
            // Read signature, assume to be not extended
            IKsiSignature signature = LoadUnextendedSignature();

            IDataHasher dataHasher = new DataHasher(signature.GetAggregationHashChains()[0].InputHash.Algorithm);

            dataHasher.AddData(File.ReadAllBytes("Resources/infile.txt"));

            PublicationData publicationData = new PublicationData("AAAAAA-CWYEKQ-AAIYPA-UJ4GRT-HXMFBE-OTB4AB-XH3PT3-KNIKGV-PYCJXU-HL2TN4-RG6SCC-3ZGSBM");

            // Do the verification and check the result
            VerificationPolicy policy = new PublicationBasedVerificationPolicy();

            VerificationContext context = new VerificationContext(signature)
            {
                DocumentHash       = dataHasher.GetHash(),
                UserPublication    = publicationData,
                IsExtendingAllowed = true,
                KsiService         = GetKsiService(),
            };

            VerificationResult verificationResult = policy.Verify(context);

            if (verificationResult.ResultCode == VerificationResultCode.Ok)
            {
                Console.WriteLine("VerifyExtendedSignatureUsingPublicationsCodeAutoExtend > signature valid");
            }
            else
            {
                Console.WriteLine("VerifyExtendedSignatureUsingPublicationsCodeAutoExtend > signature verification failed with error > " + verificationResult.VerificationError);
            }
        }
        public void PublicationDataFromPublicationStringTest()
        {
            PublicationData pub = new PublicationData("AAAAAA-CVZ2AQ-AANGVK-SV7GJL-36LN65-AVJYZR-6XRZSL-HIMRH3-6GU7WR-YNRY7C-X2XECY-WFQXRB");

            Assert.AreEqual(new DataHash(Base16.Decode("01A6AAA55F992BDF96DF74154E331F5E3992CE8644FBF1A9FB470D8E3E2BEAE416")), pub.PublicationHash, "Unexpected publication hash.");
            Assert.AreEqual(1439596800, pub.PublicationTime, "Unexpected publication time.");
        }
Exemple #3
0
        public void VerifyExtendedSignatureUsingPublicationsCode()
        {
            // Read the existing signature, assume it is extended
            IKsiSignature signature = LoadExtendedSignature();

            IDataHasher dataHasher = new DataHasher(signature.GetAggregationHashChains()[0].InputHash.Algorithm);

            dataHasher.AddData(File.ReadAllBytes("Resources/infile.txt"));

            // The trust anchor in this example is the publication code in Financial Times or on Twitter
            PublicationData publicationData = new PublicationData("AAAAAA-CWYEKQ-AAIYPA-UJ4GRT-HXMFBE-OTB4AB-XH3PT3-KNIKGV-PYCJXU-HL2TN4-RG6SCC-3ZGSBM");

            // Do the verification and check the result
            VerificationPolicy policy = new PublicationBasedVerificationPolicy();

            VerificationContext context = new VerificationContext(signature)
            {
                DocumentHash    = dataHasher.GetHash(),
                UserPublication = publicationData
            };
            VerificationResult verificationResult = policy.Verify(context);

            if (verificationResult.ResultCode == VerificationResultCode.Ok)
            {
                Console.WriteLine("VerifyExtendedSignatureUsingPublicationsCode > signature valid");
            }
            else
            {
                Console.WriteLine("VerifyExtendedSignatureUsingPublicationsCode > signature verification failed with error > " + verificationResult.VerificationError);
            }
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="Publication"/> class.
        /// </summary>
        /// <param name="client"><see cref="T:TcmCoreService.Client" /></param>
        /// <param name="publicationData"><see cref="T:Tridion.ContentManager.CoreService.Client.PublicationData" /></param>
        protected Publication(Client client, PublicationData publicationData)
            : base(client, publicationData)
        {
            if (publicationData == null)
                throw new ArgumentNullException("publicationData");

            mPublicationData = publicationData;
        }
        public void PublicationDataContentTest()
        {
            PublicationData publicationData = new PublicationData(1455494400, new DataHash(Base16.Decode("018D982C6911831201C5CF15E937514686A2169E2AD57BA36FD92CBEBD99A67E34")));

            Assert.AreEqual(new DateTime(2016, 2, 15), publicationData.GetPublicationDate(), "Publication date is invalid.");
            Assert.AreEqual(new DataHash(Base16.Decode("018D982C6911831201C5CF15E937514686A2169E2AD57BA36FD92CBEBD99A67E34")), publicationData.PublicationHash,
                            "Unexpected publication hash.");
        }
Exemple #6
0
        public ActionResult GetPublicationById(int id)
        {
            var results = PublicationData.GetPublicationById(id);

            var jsonResult = SerializeObjectToJson(results);

            return(jsonResult);
        }
Exemple #7
0
        public ActionResult GetAllPublicationsForEstimate(int id)
        {
            var results = PublicationData.GetAllPublicationsForEstimate(id);

            var jsonResult = SerializeObjectToJson(results);

            return(jsonResult);
        }
Exemple #8
0
        public ActionResult GetAllPublications()
        {
            var results = PublicationData.GetAllPublications();

            var jsonResult = SerializeObjectToJson(results);

            return(jsonResult);
        }
            public TestingRow(string row, int index)
            {
                string[] args = row.Split(';');

                FileName       = args[0];
                ActionName     = args[1];
                ErrorCode      = args[2];
                ErrorMessage   = args[3];
                InputHashLevel = !string.IsNullOrEmpty(args[4]) ? uint.Parse(args[4]) : 0;

                string s = args[5];

                if (!string.IsNullOrEmpty(s))
                {
                    InputHash = new DataHash(Base16.Decode(s));
                }

                s = args[6];
                if (!string.IsNullOrEmpty(s))
                {
                    CalendarHashChainInput = new DataHash(Base16.Decode(s));
                }

                s = args[7];
                if (!string.IsNullOrEmpty(s))
                {
                    CalendarHashChainOutput = new DataHash(Base16.Decode(s));
                }

                s = args[8];
                if (!string.IsNullOrEmpty(s))
                {
                    AggregationTime = ulong.Parse(s);
                }

                s = args[9];
                if (!string.IsNullOrEmpty(s))
                {
                    PublicationTime = ulong.Parse(s);
                }

                s = args[10];
                if (!string.IsNullOrEmpty(s))
                {
                    PublicationData = new PublicationData(s);
                }

                s = args[11];
                if (!string.IsNullOrEmpty(s) && s.ToUpper() == "TRUE")
                {
                    IsExtendingAllowed = true;
                }

                ResourceFile         = args[12];
                PublicationsFilePath = args[13];
                CertFilePath         = args[14];
                TestIndex            = index;
            }
Exemple #10
0
        /// <summary>
        ///     Extend signature to publication.
        /// </summary>
        /// <param name="signature">KSI signature</param>
        /// <param name="publicationData">publication data</param>
        /// <returns>extended KSI signature</returns>
        public IKsiSignature Extend(IKsiSignature signature, PublicationData publicationData)
        {
            if (publicationData == null)
            {
                throw new ArgumentNullException(nameof(publicationData));
            }

            return(Extend(signature, new PublicationRecordInSignature(false, false, publicationData)));
        }
Exemple #11
0
        /// <see cref="VerificationRule.Verify" />
        public override VerificationResult Verify(IVerificationContext context)
        {
            PublicationData   userPublication           = GetUserPublication(context);
            CalendarHashChain extendedCalendarHashChain = GetExtendedCalendarHashChain(context, userPublication.PublicationTime);

            return(extendedCalendarHashChain.PublicationData.PublicationHash != userPublication.PublicationHash
                ? new VerificationResult(GetRuleName(), VerificationResultCode.Fail, VerificationError.Pub01)
                : new VerificationResult(GetRuleName(), VerificationResultCode.Ok));
        }
Exemple #12
0
        /// <summary>
        /// Initializes a new instance of the <see cref="Publication"/> class.
        /// </summary>
        /// <param name="client"><see cref="T:TcmCoreService.Client" /></param>
        /// <param name="publicationData"><see cref="T:Tridion.ContentManager.CoreService.Client.PublicationData" /></param>
        protected Publication(Client client, PublicationData publicationData) : base(client, publicationData)
        {
            if (publicationData == null)
            {
                throw new ArgumentNullException("publicationData");
            }

            mPublicationData = publicationData;
        }
        public void PublicationDataFromPublicationStringTooShortTest()
        {
            TlvException ex = Assert.Throws <TlvException>(delegate
            {
                PublicationData pub = new PublicationData("AAAAAA");
            });

            Assert.That(ex.Message.StartsWith("Publication string base 32 decode failed"), "Unexpected exception message: " + ex.Message);
        }
        public void PublicationDataFromPublicationStringNullTest()
        {
            ArgumentNullException ex = Assert.Throws <ArgumentNullException>(delegate
            {
                PublicationData pub = new PublicationData((string)null);
            });

            Assert.AreEqual("publicationString", ex.ParamName, "Unexpected exception message: " + ex.Message);
        }
        public void PublicationDataFromPublicationStringInvalidCrc32Test()
        {
            TlvException ex = Assert.Throws <TlvException>(delegate
            {
                PublicationData pub = new PublicationData("AAAAAA-CVZ2AQ-AANGVK-SV7GJL-36LN65-AVJYZR-6XRZSL-HIMRH3-6GU7WR-YNRY7C-X2XECY-WFQXRA");
            });

            Assert.That(ex.Message.StartsWith("Publication string CRC 32 check failed"), "Unexpected exception message: " + ex.Message);
        }
        public void InvalidExtendAndVerifyToUserProvidedPublicationFromTestCoreTest(Ksi ksi)
        {
            // publication data from Test core, not included in publications file. Time: 2016-07-12 00:00:00 UTC
            PublicationData publicationData        = new PublicationData("AAAAAA-CXQQZQ-AAOSZH-ONCB4K-TFGPBW-R6S6TF-6EW4DU-4QMP7X-GI2VCO-TNGAZM-EV6AZR-464IOA");
            KsiSignatureInvalidContentException ex = Assert.Throws <KsiSignatureInvalidContentException>(delegate
            {
                ksi.Extend(TestUtil.GetSignature(), publicationData);
            });

            Assert.AreEqual(VerificationError.Int09.Code, ex.VerificationResult.VerificationError.Code, "Invalid result code");
        }
        public void InvalidExtendToUserProvidedPublicationTest(Ksi ksi)
        {
            // publication data with modified hash
            PublicationData publicationData        = new PublicationData("AAAAAA-CW45II-AAIYPA-UJ4GRT-HXMFBE-OTB4AB-XH3PT3-KNIKGV-PYCJXU-HL2TN4-RG6SCA-ZP3ZLX");
            KsiSignatureInvalidContentException ex = Assert.Throws <KsiSignatureInvalidContentException>(delegate
            {
                ksi.Extend(TestUtil.GetSignature(), publicationData);
            });

            Assert.AreEqual(VerificationError.Int09.Code, ex.VerificationResult.VerificationError.Code, "Unexpected result code");
        }
        /// <summary>
        /// Get user publication from verification context
        /// </summary>
        /// <param name="context">verification context</param>
        /// <returns>user publication</returns>
        public static PublicationData GetUserPublication(IVerificationContext context)
        {
            CheckVerificationContext(context);

            PublicationData userPublication = context.UserPublication;

            if (context.UserPublication == null)
            {
                throw new KsiVerificationException("Invalid user publication in context: null.");
            }
            return(userPublication);
        }
Exemple #19
0
 public ActionResult SavePublication(PublicationBO publicationEntity)
 {
     if (publicationEntity.EST_PUBID != 0 && publicationEntity.EST_PUBID != null)
     {
         PublicationData.Update(publicationEntity);
         return(new HttpStatusCodeResult(201, "Update successful"));
     }
     else
     {
         PublicationData.Save(publicationEntity);
         return(new HttpStatusCodeResult(201, "Creation successful"));
     }
 }
        internal void CreateOrIgnoreRootStructureGroup(string rootStructureGroupTitle, string publicationId)
        {
            PublicationData publication = (PublicationData)_client.Read(publicationId, _readOptions);

            if (publication.RootStructureGroup.IdRef == TcmUri.UriNull)
            {
                StructureGroupData structureGroup =
                    //(StructureGroupData)_client.GetDefaultData(ItemType.StructureGroup, publicationId, _readOptions);
                    (StructureGroupData)_client.GetDefaultData(ItemType.StructureGroup, publicationId);
                structureGroup.Title = rootStructureGroupTitle;
                _client.Save(structureGroup, null);
            }
        }
        internal string GetPublication(string publicationTitle, params string[] parentIds)
        {
            // Console.WriteLine("Getting Publication " + publicationTitle);
            Stopwatch watch = new Stopwatch();

            watch.Start();
            string publicationId = TcmUri.UriNull;

            PublicationsFilterData publicationsFilter = new PublicationsFilterData();

            foreach (XElement pub in _client.GetSystemWideListXml(publicationsFilter).Nodes())
            {
                if (!pub.Attribute("Title").Value.Equals(publicationTitle))
                {
                    continue;
                }
                publicationId = pub.Attribute("ID").Value;
                Console.WriteLine("Found publication with ID " + publicationId);
                break;
            }
            if (publicationId.Equals(TcmUri.UriNull) && CreateIfNewItem)
            {
                // New Publication
                PublicationData newPublication =
                    //(PublicationData)_client.GetDefaultData(ItemType.Publication, null, _readOptions);
                    (PublicationData)_client.GetDefaultData(ItemType.Publication, null);
                newPublication.Title = publicationTitle;
                newPublication.Key   = publicationTitle;

                if (parentIds.Length > 0)
                {
                    List <LinkToRepositoryData> parents = new List <LinkToRepositoryData>();
                    foreach (string parentId in parentIds)
                    {
                        LinkToRepositoryData linkToParent = new LinkToRepositoryData {
                            IdRef = parentId
                        };
                        parents.Add(linkToParent);
                    }

                    newPublication.Parents = parents.ToArray();
                }

                newPublication = (PublicationData)_client.Save(newPublication, _readOptions);
                publicationId  = newPublication.Id;
                Console.WriteLine("Created publication with ID " + publicationId);
            }
            watch.Stop();
            Console.WriteLine("GetPublication finished in " + watch.ElapsedMilliseconds + " milliseconds.");
            return(publicationId);
        }
        /// <see cref="VerificationRule.Verify" />
        public override VerificationResult Verify(IVerificationContext context)
        {
            PublicationData   userPublication           = GetUserPublication(context);
            CalendarHashChain extendedCalendarHashChain = GetExtendedCalendarHashChain(context, userPublication.PublicationTime);

            if (userPublication.PublicationTime != extendedCalendarHashChain.PublicationData.PublicationTime)
            {
                return(new VerificationResult(GetRuleName(), VerificationResultCode.Fail, VerificationError.Pub02));
            }

            return(GetSignature(context).AggregationTime != extendedCalendarHashChain.CalculateRegistrationTime()
                ? new VerificationResult(GetRuleName(), VerificationResultCode.Fail, VerificationError.Pub02)
                : new VerificationResult(GetRuleName(), VerificationResultCode.Ok));
        }
        public static PublicationResult From(PublicationData item, string currentUserId)
        {
            var result = new PublicationResult
            {
                Key = TextEntry.From(item.Key, Resources.LabelKey),
                PublicationPath = TextEntry.From(item.PublicationPath, Resources.LabelPublicationPath),
                PublicationUrl = TextEntry.From(item.PublicationUrl, Resources.LabelPublicationUrl),
                MultimediaPath = TextEntry.From(item.MultimediaPath, Resources.LabelMultimediaPath),
                MultimediaUrl = TextEntry.From(item.MultimediaUrl, Resources.LabelMultimediaUrl),
                WebDavUrl = TextEntry.From(item.LocationInfo.WebDavUrl, Resources.LabelWebDavUrl)
            };

            AddCommonProperties(item, result);
            return result;
        }
Exemple #24
0
        public static PublicationResult From(PublicationData item, string currentUserId)
        {
            var result = new PublicationResult
            {
                Key             = TextEntry.From(item.Key, Resources.LabelKey),
                PublicationPath = TextEntry.From(item.PublicationPath, Resources.LabelPublicationPath),
                PublicationUrl  = TextEntry.From(item.PublicationUrl, Resources.LabelPublicationUrl),
                MultimediaPath  = TextEntry.From(item.MultimediaPath, Resources.LabelMultimediaPath),
                MultimediaUrl   = TextEntry.From(item.MultimediaUrl, Resources.LabelMultimediaUrl),
                WebDavUrl       = TextEntry.From(item.LocationInfo.WebDavUrl, Resources.LabelWebDavUrl)
            };

            AddCommonProperties(item, result);
            return(result);
        }
        public void ExtendAndVerifyToUserProvidedPublicationTest(Ksi ksi)
        {
            PublicationBasedVerificationPolicy rule = new PublicationBasedVerificationPolicy();
            PublicationData publicationData         = new PublicationData("AAAAAA-CW45II-AAKWRK-F7FBNM-KB6FNV-DYYFW7-PJQN6F-JKZWBQ-3OQYZO-HCB7RA-YNYAGA-ODRL2V");
            IKsiSignature   extendedSignature       = ksi.Extend(TestUtil.GetSignature(), publicationData);

            VerificationContext context = new VerificationContext(extendedSignature)
            {
                UserPublication = publicationData
            };

            VerificationResult verificationResult = rule.Verify(context);

            Assert.AreEqual(VerificationResultCode.Ok, verificationResult.ResultCode);
        }
Exemple #26
0
        /// <see cref="VerificationRule.Verify" />
        public override VerificationResult Verify(IVerificationContext context)
        {
            IKsiSignature signature = GetSignature(context);

            if (signature.PublicationRecord == null)
            {
                return(new VerificationResult(GetRuleName(), VerificationResultCode.Ok));
            }

            PublicationData publicationRecordPublicationData = signature.PublicationRecord.PublicationData;
            PublicationData calendarHashChainPublicationData = GetCalendarHashChain(signature).PublicationData;

            return(publicationRecordPublicationData.PublicationHash != calendarHashChainPublicationData.PublicationHash
                ? new VerificationResult(GetRuleName(), VerificationResultCode.Fail, VerificationError.Int09)
                : new VerificationResult(GetRuleName(), VerificationResultCode.Ok));
        }
        public void ExtendAndVerifyToUserProvidedPublicationNotInPublicationsFileTest(Ksi ksi)
        {
            PublicationBasedVerificationPolicy rule = new PublicationBasedVerificationPolicy();
            // publication data that is not included in publications file. Time: 2016-07-12 00:00:00 UTC
            PublicationData publicationData   = new PublicationData("AAAAAA-CXQQZQ-AAPGJF-HGNMUN-DXEIQW-NJZZOE-J76OK4-BV3FKY-AEAWIP-KSPZPW-EJKVAI-JPOOR7");
            IKsiSignature   extendedSignature = ksi.Extend(TestUtil.GetSignature(), publicationData);

            VerificationContext context = new VerificationContext(extendedSignature)
            {
                UserPublication = publicationData
            };

            VerificationResult verificationResult = rule.Verify(context);

            Assert.AreEqual(VerificationResultCode.Ok, verificationResult.ResultCode);
        }
        public void ToStringTest()
        {
            PublicationData tag =
                TestUtil.GetCompositeTag <PublicationData>(Constants.PublicationData.TagType,
                                                           new ITlvTag[]
            {
                new IntegerTag(Constants.PublicationData.PublicationTimeTagType, false, false, 1),
                new ImprintTag(Constants.PublicationData.PublicationHashTagType, false, false,
                               new DataHash(HashAlgorithm.Sha2256,
                                            new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32 })),
            });

            PublicationData tag2 = new PublicationData(new RawTag(tag.Type, tag.NonCritical, tag.Forward, tag.EncodeValue()));

            Assert.AreEqual(tag.ToString(), tag2.ToString());
        }
        public void InvalidExtendToUserProvidedPublicationFromTestCoreAllowExtendingTest(KsiService service)
        {
            PublicationBasedVerificationPolicy rule = new PublicationBasedVerificationPolicy();
            // publication data from Test core. not included in publications file. Time: 2016-07-12 00:00:00 UTC
            PublicationData     publicationData = new PublicationData("AAAAAA-CXQQZQ-AAOSZH-ONCB4K-TFGPBW-R6S6TF-6EW4DU-4QMP7X-GI2VCO-TNGAZM-EV6AZR-464IOA");
            VerificationContext context         = new VerificationContext(TestUtil.GetSignature())
            {
                IsExtendingAllowed = true,
                UserPublication    = publicationData,
                KsiService         = service
            };

            VerificationResult verificationResult = rule.Verify(context);

            Assert.AreEqual(VerificationResultCode.Fail, verificationResult.ResultCode);
            Assert.AreEqual(VerificationError.Pub01, verificationResult.VerificationError);
        }
        public void TestCalendarAuthenticationRecordOk()
        {
            CalendarAuthenticationRecord calendarAuthenticationRecord = GetCalendarAuthenticationRecordFromFile(Resources.CalendarAuthenticationRecord_Ok);

            Assert.AreEqual(2, calendarAuthenticationRecord.Count, "Invalid amount of child TLV objects");

            PublicationData publicationData = new PublicationData(1398902400,
                                                                  new DataHash(Base16.Decode("01C45A4D73815CBECD5493197513A6C2C9058B0B16B99A64805368A7186D528E8B")), false, true);

            Assert.IsTrue(calendarAuthenticationRecord.PublicationData.Equals(publicationData));
            SignatureData signatureData =
                new SignatureData(new RawTag(0xb, false, false,
                                             Base16.Decode(
                                                 "0116312E322E3834302E3131333534392E312E312E3131008002010098D9A4D14722BB2C22425AC9112FBF6A2491B7051AD0CBFD8153E669BFCC6CDF20EEC80F7FCC7236985A4F83871DD6E245470BCA323A3902035B78764DDC4C6EB42416A3A7D7E5CEF6ED6AE8FADA668413758CF7DE1E9565EDF646170286D0F43CA30491DD3407B53DEEDDCBD2620057AB6580E3D3E938AE44EABAF3282357EEBB7B2325616755A1F20B3A78DE2F636DE10F7CCD75B6C5BB80EFEBA216F9BF1A302DCB93B9D3E3E9754620E6D8EC8672C5329CBBB00A9A4617242950D68B8A55CBA77E69DECDD49DD96F69FAA6BFBB0EF48A913F5F26AFA01FB08192D62123FC644BA2978CAF147229BD5702663494983A40ED77AA5016EAABC1FE8456DC17D40304C246B139")));

            Assert.IsTrue(calendarAuthenticationRecord.SignatureData.Equals(signatureData));
        }
        public void ExtendAndVerifyTest(Ksi ksi)
        {
            PublicationBasedVerificationPolicy policy = new PublicationBasedVerificationPolicy();

            IKsiSignature   ksiSignature      = TestUtil.GetSignature();
            IKsiSignature   extendedSignature = ksi.Extend(ksiSignature);
            PublicationData publicationData   = ksi.GetPublicationsFile().GetNearestPublicationRecord(ksiSignature.AggregationTime).PublicationData;

            VerificationContext context = new VerificationContext(extendedSignature)
            {
                UserPublication = publicationData,
                KsiService      = GetHttpKsiService()
            };

            VerificationResult verificationResult = policy.Verify(context);

            Assert.AreEqual(VerificationResultCode.Ok, verificationResult.ResultCode);
        }
        public void ExtendAndVerifySignatureWithAggregationChainsOnly(Ksi ksi)
        {
            PublicationBasedVerificationPolicy rule = new PublicationBasedVerificationPolicy();

            // signature contains only aggregation chains
            IKsiSignature   ksiSignature      = TestUtil.GetSignature(Resources.KsiSignature_Ok_Only_Aggregtion_Chains);
            IKsiSignature   extendedSignature = ksi.Extend(ksiSignature);
            PublicationData publicationData   = ksi.GetPublicationsFile().GetNearestPublicationRecord(ksiSignature.AggregationTime).PublicationData;

            VerificationContext context = new VerificationContext(extendedSignature)
            {
                UserPublication = publicationData
            };

            VerificationResult verificationResult = rule.Verify(context);

            Assert.AreEqual(VerificationResultCode.Ok, verificationResult.ResultCode);
        }
        /// <summary>
        /// Reload the <see cref="Publication" /> with the specified <see cref="T:Tridion.ContentManager.CoreService.Client.PublicationData" />
        /// </summary>
        /// <param name="publicationData"><see cref="T:Tridion.ContentManager.CoreService.Client.PublicationData" /></param>
        protected void Reload(PublicationData publicationData)
        {
            if (publicationData == null)
                throw new ArgumentNullException("publicationData");

            mPublicationData = publicationData;
            base.Reload(publicationData);

            mComponentSnapshotTemplate = null;
            mComponentTemplateProcess = null;
            mDefaultComponentTemplate = null;
            mDefaultPageTemplate = null;
            mDefaultTemplateBuildingBlock = null;
            mPageSnapshotTemplate = null;
            mPageTemplateProcess = null;
            mTemplateBundleProcess = null;
            mRootStructureGroup = null;
        }