public void TestWriteReadStream()
        {
            Journal journal = Journal.Open("test");

            journal.Write("name123", 1, EntryBatch.Of("type1", "type1_instance1"));
            journal.Write("name456", 1, EntryBatch.Of("type2", "type2_instance1"));
            journal.Write("name123", 2, EntryBatch.Of("type1-1", "type1-1_instance1"));
            journal.Write("name123", 3, EntryBatch.Of("type1-2", "type1-2_instance1"));
            journal.Write("name456", 2, EntryBatch.Of("type2-1", "type2-1_instance1"));

            EntryStreamReader streamReader = journal.StreamReader();

            EntryStream eventStream123 = streamReader.StreamFor("name123");

            Assert.AreEqual(3, eventStream123.StreamVersion);
            Assert.AreEqual(3, eventStream123.Stream.Count);
            Assert.AreEqual(new EntryValue("name123", 1, "type1", "type1_instance1", ""), eventStream123.Stream[0]);
            Assert.AreEqual(new EntryValue("name123", 2, "type1-1", "type1-1_instance1", ""), eventStream123.Stream[1]);
            Assert.AreEqual(new EntryValue("name123", 3, "type1-2", "type1-2_instance1", ""), eventStream123.Stream[2]);

            EntryStream eventStream456 = streamReader.StreamFor("name456");

            Assert.AreEqual(2, eventStream456.StreamVersion);
            Assert.AreEqual(2, eventStream456.Stream.Count);
            Assert.AreEqual(new EntryValue("name456", 1, "type2", "type2_instance1", ""), eventStream456.Stream[0]);
            Assert.AreEqual(new EntryValue("name456", 2, "type2-1", "type2-1_instance1", ""), eventStream456.Stream[1]);

            journal.Close();
        }
        public void TestWriteReadStreamSnapshot()
        {
            Journal journal = Journal.Open("test");

            journal.Write("name123", 1, EntryBatch.Of("type1", "type1_instance1", "SNAPSHOT123-1"));
            journal.Write("name456", 1, EntryBatch.Of("type2", "type2_instance1", "SNAPSHOT456-1"));
            journal.Write("name123", 2, EntryBatch.Of("type1-1", "type1-1_instance1", "SNAPSHOT123-2"));
            journal.Write("name123", 3, EntryBatch.Of("type1-2", "type1-2_instance1"));
            journal.Write("name456", 2, EntryBatch.Of("type2-1", "type2-1_instance1", "SNAPSHOT456-2"));

            EntryStreamReader streamReader = journal.StreamReader();

            EntryStream eventStream123 = streamReader.StreamFor("name123");

            Assert.AreEqual("name123", eventStream123.StreamName);
            Assert.AreEqual(3, eventStream123.StreamVersion);
            Assert.AreEqual(1, eventStream123.Stream.Count);
            Assert.AreEqual("SNAPSHOT123-2", eventStream123.Snapshot);

            EntryStream eventStream456 = streamReader.StreamFor("name456");

            Assert.AreEqual("name456", eventStream456.StreamName);
            Assert.AreEqual(2, eventStream456.StreamVersion);
            Assert.AreEqual(0, eventStream456.Stream.Count);
            Assert.AreEqual("SNAPSHOT456-2", eventStream456.Snapshot);

            journal.Close();
        }
 internal PersonRepository()
 {
     journal = Journal.Open("repo-test");
     reader  = journal.StreamReader();
 }
Example #4
0
        static int Main(string[] args)
        {
            if (args.Length != 1)
            {
                printUsage(Environment.GetCommandLineArgs()[0]);
                return(-1);
            }

            string pstFile = args[0];

            // Check if the file exists

            if (!File.Exists(pstFile))
            {
                Console.WriteLine(
                    "The specified PST file argument is incorrect. " +
                    "Either it is not a file or the file does not exist");
                return(-1);
            }

            IPst pst             = new Pst(pstFile);
            var  nameIdMap       = pst.NameIDMap;
            var  nameIdMapObject = nameIdMap.PropertyBag;

            Console.WriteLine("Bucket Count: {0}", nameIdMap.BucketCount);
            Console.WriteLine(Environment.NewLine);

            //Dump out all the Guids
            using (var guids =
                       new GuidStreamReader(nameIdMapObject.OpenPropertyStream(PropId.KnownValue.PidTagNameidStreamGuid)))
            {
                Console.WriteLine("GUID Stream: (* indicates predefined guid)");
                Console.WriteLine("\t [000] {0}*", Guid.Empty);
                Console.WriteLine("\t [001] {0}*", GuidStreamReader.MapiGuid);
                Console.WriteLine("\t [002] {0}*", GuidStreamReader.PublicStringsGuid);

                for (int i = 3; i < nameIdMap.PropertyCount; i++)
                {
                    Console.WriteLine("\t [{0:D3}] {1}", i, guids.ReadGuid(i));
                }
            }

            Console.WriteLine(Environment.NewLine);

            //Dump out the Entry Stream);
            using (var entries =
                       new EntryStreamReader(nameIdMapObject.OpenPropertyStream(PropId.KnownValue.PidTagNameidStreamEntry)))
            {
                Console.WriteLine("Entry Stream: ");
                for (int i = 0; i < nameIdMap.PropertyCount; i++)
                {
                    Console.WriteLine("\t [{0:D3}] {1}", i, entries.ReadEntry(i));
                }
            }

            Console.WriteLine(Environment.NewLine);

            using (var strings = new BinaryReader(nameIdMapObject.OpenPropertyStream(PropId.KnownValue.PidTagNameidStreamString)))
            {
                Console.WriteLine("String Stream: ");
                var streamLength = strings.BaseStream.Length;

                while (strings.BaseStream.Position < streamLength)
                {
                    var stringLength = strings.ReadInt32();
                    var stringBytes  = strings.ReadBytes(stringLength);

                    Console.WriteLine(Encoding.Unicode.GetString(stringBytes));

                    //seek to nearest 4-byte boundary
                    var offset = stringLength % 4;

                    if (offset != 0)
                    {
                        strings.BaseStream.Seek((4 - offset), SeekOrigin.Current);
                    }
                }
            }

            Console.WriteLine("Hash Buckets:");
            for (int i = 0; i < nameIdMap.BucketCount; i++)
            {
                var bucketProperty = i + 0x1000;

                if (nameIdMapObject.PropertyExists((PropId)bucketProperty))
                {
                    var bytes       = nameIdMapObject.ReadProperty((PropId)bucketProperty);
                    var nameIdbytes = new byte[8];

                    for (int x = 0; x < bytes.Length; x += 8)
                    {
                        Array.Copy(bytes, x, nameIdbytes, 0, 8);

                        var nameId = new NameId(nameIdbytes);
                        Console.WriteLine("[{0:D3}] Hash: 0x{1:X8}, Guid Index: {2}, \r\n\tProperty Index: 0x{3:X4}, Is String? {4}",
                                          i, nameId.Id, nameId.GuidIndex, (nameId.PropertyIndex + 0x8000), nameId.IsString);
                        Console.WriteLine();
                    }
                }
            }


            foreach (var np in nameIdMap.NamedProperties)
            {
                Console.WriteLine();
                Console.WriteLine(np.ToString());
                Console.WriteLine();
            }

            Console.ReadKey(true);

            return(0);
        }
 internal ProductRepository(string journalName)
 {
     journal = Journal.Open(journalName);
     reader  = journal.StreamReader();
 }
 internal PersonRepository()
 {
     this.journal = Journal.Open("repo-test");
     this.reader  = this.journal.StreamReader();
 }