public void Instructions_Job_Edits()
        {
            // arrange
            List <Transformation> edits = new List <Transformation>();

            edits.Add(MetaDataTransformation.Builder
                      .Start("field name", new Regex("find text"), "replace text", "filter field", new Regex("filter pattern"))
                      .SetAltDestinationField("alt destination")
                      .SetPrependField("preprend field")
                      .SetAppendField("append field")
                      .SetJoinDelimiter("join delim")
                      .SetPrependDir(new DirectoryInfo("X:\\path"))
                      .Build());
            edits.Add(RepresentativeTransformation.Builder
                      .Start(Representative.FileType.Image, new Regex("find"), "replace")
                      .SetFilterField("filter field")
                      .SetFilterText(new Regex("filter text"))
                      .Build());
            Job job = new Job(null, null, edits.ToArray());

            // act
            string xml     = job.ToXml();
            Job    testJob = Job.Deserialize(xml);

            // assert
            for (int i = 0; i < job.Edits.Length; i++)
            {
                Transformation editA = job.Edits[i].ToTransformation();

                if (editA.GetType().Equals(typeof(MetaDataTransformation)))
                {
                    MetaDataTransformation a = (MetaDataTransformation)editA;
                    MetaDataTransformation b = (MetaDataTransformation)testJob.Edits[i].ToTransformation();
                    Assert.AreEqual(a.AlternateDestinationField, b.AlternateDestinationField);
                    Assert.AreEqual(a.AppendField, b.AppendField);
                    Assert.AreEqual(a.FieldName, b.FieldName);
                    Assert.AreEqual(a.FilterField, b.FilterField);
                    Assert.AreEqual(a.FilterText.ToString(), b.FilterText.ToString());
                    Assert.AreEqual(a.FindText.ToString(), b.FindText.ToString());
                    Assert.AreEqual(a.JoinDelimiter, b.JoinDelimiter);
                    Assert.AreEqual(a.PrependDirectory.FullName, b.PrependDirectory.FullName);
                    Assert.AreEqual(a.PrependField, b.PrependField);
                    Assert.AreEqual(a.ReplaceText, b.ReplaceText);
                }
                else
                {
                    RepresentativeTransformation a = (RepresentativeTransformation)editA;
                    RepresentativeTransformation b = (RepresentativeTransformation)testJob.Edits[i].ToTransformation();
                    Assert.AreEqual(a.FilterField, b.FilterField);
                    Assert.AreEqual(a.FilterText.ToString(), b.FilterText.ToString());
                    Assert.AreEqual(a.FindText.ToString(), b.FindText.ToString());
                    Assert.AreEqual(a.NewType, b.NewType);
                    Assert.AreEqual(a.ReplaceText, b.ReplaceText);
                    Assert.AreEqual(a.TargetType, b.TargetType);
                }
            }
        }
Beispiel #2
0
        /// <summary>
        /// Executes the imports, edits, and exports in the job.
        /// </summary>
        public virtual DocumentCollection Execute()
        {
            DocumentCollection     docs            = new DocumentCollection();
            Transformer            transformer     = new Transformer();
            IList <Transformation> transformations = GetTransformations();

            foreach (Import import in Imports)
            {
                IImporter          importer     = import.BuildImporter();
                DocumentCollection importedDocs = importer.Import(import.File, import.Encoding);
                docs.AddRange(importedDocs);

                if (import.GetType().Equals(typeof(DatImport)))
                {
                    DatImport datImport = (DatImport)import;

                    if (datImport.FolderPrependFields != null)
                    {
                        foreach (string field in datImport.FolderPrependFields)
                        {
                            MetaDataTransformation edit = MetaDataTransformation.Builder
                                                          .Start(field, null, String.Empty)
                                                          .SetPrependDir(import.File.Directory)
                                                          .Build();
                            transformations.Add(edit);
                        }
                    }

                    if (datImport.FolderPrependLinks != null)
                    {
                        Regex  find    = new Regex(@"\\?(.+)");
                        string replace = Path.Combine(import.File.Directory.FullName, "$1");

                        foreach (var type in datImport.FolderPrependLinks)
                        {
                            RepresentativeTransformation edit = RepresentativeTransformation.Builder
                                                                .Start(type, find, replace)
                                                                .Build();
                            transformations.Add(edit);
                        }
                    }
                }
            }

            transformer.Transform(docs, transformations);

            foreach (Export export in Exports)
            {
                export.BuildExporter().Export(docs);
            }

            return(docs);
        }
 /// <summary>
 /// Initializes a new instance of <see cref="MetaDataEdit"/>.
 /// </summary>
 /// <param name="edit">The edit initialization settings.</param>
 public MetaDataEdit(MetaDataTransformation edit)
 {
     base.FilterField = edit.FilterField;
     base.FilterText  = edit.FilterText;
     base.FindText    = edit.FindText;
     base.ReplaceText = edit.ReplaceText;
     this.FieldName   = edit.FieldName;
     this.AlternateDestinationField = edit.AlternateDestinationField;
     this.PrependField     = edit.PrependField;
     this.AppendField      = edit.AppendField;
     this.JoinDelimiter    = edit.JoinDelimiter;
     this.PrependDirectory = edit.PrependDirectory;
 }
        public void Instructions_Job_All()
        {
            // arrange
            List <Import> imports = new List <Import>();
            DatImport     import  = new DatImport(
                new FileInfo("x:\\test\\test.csv"),
                Encoding.Unicode,
                Delimiters.COMMA_QUOTE,
                "DOCID");

            import.HasHeader            = true;
            import.ParentColumnName     = "PARENT";
            import.ChildColumnName      = null;
            import.ChildColumnDelimiter = ";";
            import.LinkedFiles          = new RepresentativeInfo[] {
                new RepresentativeInfo(new RepresentativeBuilder("NATIVE", Representative.FileType.Native))
            };
            import.FolderPrependFields = new string[] { "ITEMPATH" };
            import.FolderPrependLinks  = new Representative.FileType[] { Representative.FileType.Native };
            imports.Add(import);
            imports.Add(new LfpImport(
                            new FileInfo("x:\\test\\test.lfp"),
                            Encoding.GetEncoding(1252),
                            new TextBuilder(
                                TextBuilder.TextLevel.Page,
                                TextBuilder.TextLocation.AlternateLocation,
                                new Regex(@"\\IMAGES", RegexOptions.IgnoreCase),
                                "\\TEXT"),
                            true
                            ));
            List <Export> exports = new List <Export>();

            exports.Add(new DatExport(
                            new FileInfo("x:\\test\\test.dat"),
                            Encoding.Unicode,
                            Delimiters.CONCORDANCE,
                            new string[] { "one", "two", "buckle", "my", "shoe" }));
            exports.Add(new OptExport(
                            new FileInfo("x:\\test\\test.opt"),
                            Encoding.Unicode,
                            "TEST001"));
            exports.Add(new XlsExport(
                            new FileInfo("x:\\test\\test.xlsx"),
                            new string[] { "three", "four", "shut", "the", "door" },
                            new HyperLinkInfo[] { new HyperLinkInfo(Representative.FileType.Native, "displayText", 2) }));
            var xref = new XrefExport();

            xref.File = new FileInfo("x:\\test\\CrossRef.txt");
            xref.CustomerDataField = "CustomerData";
            xref.NamedFolderField  = "NamedFolder";
            xref.NamedFileField    = "NamedFile";
            xref.CodePage          = 1251;
            Trigger boxTrigger = new Trigger();
            Trigger csTrigger  = new Trigger();
            Trigger gsTrigger  = new Trigger();

            boxTrigger.Type = Switch.SwitchType.FieldValueChange;
            boxTrigger.FieldChangeOption = Switch.ValueChangeOption.StripFileName;
            boxTrigger.FieldName         = "FilePath";
            csTrigger.Type              = Switch.SwitchType.Regex;
            csTrigger.RegexPattern      = "\\d";
            csTrigger.FieldName         = "Group";
            gsTrigger.Type              = Switch.SwitchType.FieldValueChange;
            gsTrigger.FieldChangeOption = Switch.ValueChangeOption.UseStartingSegments;
            gsTrigger.SegmentCount      = 2;
            gsTrigger.SegmentDelimiter  = "\\";
            xref.BoxTrigger             = boxTrigger;
            xref.CodeStartTrigger       = csTrigger;
            xref.GroupStartTrigger      = gsTrigger;
            var ss = new SlipsheetsInfo();

            ss.BindSlipsheets      = false;
            ss.FolderName          = "SlipSheets";
            ss.FontSize            = 12;
            ss.FontStyle           = System.Drawing.FontStyle.Bold;
            ss.FontFamilyName      = "Arial";
            ss.HorizontalPlacement = SlipSheet.HorizontalPlacementOption.Center;
            ss.VerticalPlacement   = SlipSheet.VerticalPlacementOption.Center;
            ss.Resolution          = 300;
            ss.UseFieldLabels      = true;
            Trigger ssTrigger = new Trigger();

            ssTrigger.Type = Switch.SwitchType.Family;
            ss.Trigger     = ssTrigger;
            List <SlipsheetField> ssFields = new List <SlipsheetField>();

            ssFields.Add(new SlipsheetField("DOCID", "BegNo"));
            ssFields.Add(new SlipsheetField("DOCTYPE", "FileType"));
            ss.Fields       = ssFields.ToArray();
            xref.Slipsheets = ss;
            exports.Add(xref);
            List <Transformation> edits = new List <Transformation>();

            edits.Add(MetaDataTransformation.Builder
                      .Start("field name", new Regex("find text"), "replace text", "filter field", new Regex("filter pattern"))
                      .SetAltDestinationField("alt destination")
                      .SetPrependField("preprend field")
                      .SetAppendField("append field")
                      .SetJoinDelimiter("join delim")
                      .SetPrependDir(new DirectoryInfo("X:\\path"))
                      .Build());
            edits.Add(RepresentativeTransformation.Builder
                      .Start(Representative.FileType.Text, new Regex("find"), "replace")
                      .SetFilterField("filter field")
                      .SetFilterText(new Regex("filter text"))
                      .Build());
            var dateEdit = new DateFormatEdit();

            dateEdit.FieldName   = "DateCreated";
            dateEdit.InputFormat = "dd/MM/yyyy";
            TimeZoneInfo outTZ = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time");
            TimeZoneInfo inTZ  = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");

            dateEdit.InputTimeZone  = inTZ;
            dateEdit.OutputTimeZone = outTZ;
            dateEdit.OutputFormat   = "yyyy-MM-dd";
            dateEdit.OnFailure      = DateFormatTransformation.FailAction.ReplaceWithNull;
            dateEdit.RangeStart     = new DateTime(1999, 5, 3);
            dateEdit.RangeEnd       = DateTime.Today;
            edits.Add(dateEdit.ToTransformation());
            Job job = new Job(imports.ToArray(), exports.ToArray(), edits.ToArray());

            // act
            string xml     = job.ToXml();
            Job    testJob = Job.Deserialize(xml);

            // assert
            // check imports
            for (int n = 0; n < job.Imports.Length; n++)
            {
                Assert.AreEqual(job.Imports[n].Encoding, testJob.Imports[n].Encoding);
                Assert.AreEqual(job.Imports[n].File.FullName, testJob.Imports[n].File.FullName);

                if (job.Imports[n].GetType().Equals(typeof(DatImport)))
                {
                    Assert.AreEqual(
                        ((DatImport)job.Imports[n]).KeyColumnName,
                        ((DatImport)testJob.Imports[n]).KeyColumnName);
                    Assert.AreEqual(
                        ((DatImport)job.Imports[n]).ParentColumnName,
                        ((DatImport)testJob.Imports[n]).ParentColumnName);
                    Assert.AreEqual(
                        ((DatImport)job.Imports[n]).ChildColumnName,
                        ((DatImport)testJob.Imports[n]).ChildColumnName);
                    Assert.AreEqual(
                        ((DatImport)job.Imports[n]).ChildColumnDelimiter,
                        ((DatImport)testJob.Imports[n]).ChildColumnDelimiter);
                    Assert.AreEqual(
                        ((DatImport)job.Imports[n]).HasHeader,
                        ((DatImport)testJob.Imports[n]).HasHeader);
                    Assert.IsTrue(Enumerable.SequenceEqual(
                                      ((DatImport)job.Imports[n]).FolderPrependFields,
                                      ((DatImport)testJob.Imports[n]).FolderPrependFields));
                    Assert.IsTrue(Enumerable.SequenceEqual(
                                      ((DatImport)job.Imports[n]).FolderPrependLinks,
                                      ((DatImport)testJob.Imports[n]).FolderPrependLinks));

                    for (int i = 0; i < ((DatImport)job.Imports[n]).LinkedFiles.Length; i++)
                    {
                        Assert.AreEqual(
                            ((DatImport)job.Imports[n]).LinkedFiles[i].ColumnName,
                            ((DatImport)testJob.Imports[n]).LinkedFiles[i].ColumnName);
                        Assert.AreEqual(
                            ((DatImport)job.Imports[n]).LinkedFiles[i].FileType,
                            ((DatImport)testJob.Imports[n]).LinkedFiles[i].FileType);
                    }
                }
                else
                {
                    Assert.AreEqual(
                        ((ImgImport)job.Imports[n]).TextBuilder.FileLevel,
                        ((ImgImport)testJob.Imports[n]).TextBuilder.FileLevel
                        );
                    Assert.AreEqual(
                        ((ImgImport)job.Imports[n]).TextBuilder.FileLocation,
                        ((ImgImport)testJob.Imports[n]).TextBuilder.FileLocation
                        );
                    Assert.AreEqual(
                        ((ImgImport)job.Imports[n]).TextBuilder.PathFind.ToString(),
                        ((ImgImport)testJob.Imports[n]).TextBuilder.PathFind.ToString()
                        );
                    Assert.AreEqual(
                        ((ImgImport)job.Imports[n]).TextBuilder.PathReplace,
                        ((ImgImport)testJob.Imports[n]).TextBuilder.PathReplace
                        );
                }
            }
            // check edits
            for (int i = 0; i < job.Edits.Length; i++)
            {
                Transformation editA = job.Edits[i].ToTransformation();

                if (editA.GetType().Equals(typeof(MetaDataTransformation)))
                {
                    MetaDataTransformation a = (MetaDataTransformation)editA;
                    MetaDataTransformation b = (MetaDataTransformation)testJob.Edits[i].ToTransformation();
                    Assert.AreEqual(a.AlternateDestinationField, b.AlternateDestinationField);
                    Assert.AreEqual(a.AppendField, b.AppendField);
                    Assert.AreEqual(a.FieldName, b.FieldName);
                    Assert.AreEqual(a.FilterField, b.FilterField);
                    Assert.AreEqual(
                        (a.FilterText != null) ? a.FilterText.ToString() : null,
                        (b.FilterText != null) ? b.FilterText.ToString() : null);
                    Assert.AreEqual(
                        (a.FindText != null) ? a.FindText.ToString() : null,
                        (b.FindText != null) ? b.FindText.ToString() : null);
                    Assert.AreEqual(a.JoinDelimiter, b.JoinDelimiter);
                    Assert.AreEqual(
                        (a.PrependDirectory != null) ? a.PrependDirectory.FullName : null,
                        (a.PrependDirectory != null) ? b.PrependDirectory.FullName : null);
                    Assert.AreEqual(a.PrependField, b.PrependField);
                    Assert.AreEqual(a.ReplaceText, b.ReplaceText);
                }
                else if (editA.GetType().Equals(typeof(RepresentativeTransformation)))
                {
                    RepresentativeTransformation a = (RepresentativeTransformation)editA;
                    RepresentativeTransformation b = (RepresentativeTransformation)testJob.Edits[i].ToTransformation();
                    Assert.AreEqual(a.FilterField, b.FilterField);
                    Assert.AreEqual(a.FilterText.ToString(), b.FilterText.ToString());
                    Assert.AreEqual(a.FindText.ToString(), b.FindText.ToString());
                    Assert.AreEqual(a.FindText.Options, b.FindText.Options);
                    Assert.AreEqual(a.NewType, b.NewType);
                    Assert.AreEqual(a.ReplaceText, b.ReplaceText);
                    Assert.AreEqual(a.TargetType, b.TargetType);
                }
                else if (editA.GetType().Equals(typeof(DateFormatTransformation)))
                {
                    DateFormatTransformation a = (DateFormatTransformation)editA;
                    DateFormatTransformation b = (DateFormatTransformation)testJob.Edits[i].ToTransformation();
                    Assert.AreEqual(a.FieldName, b.FieldName);
                    Assert.AreEqual(a.FilterField, b.FilterField);
                    Assert.AreEqual(a.FilterText, b.FilterText);
                    Assert.AreEqual(a.FindText, b.FindText);
                    Assert.AreEqual(a.InputFormat, b.InputFormat);
                    Assert.AreEqual(a.InputTimeZone, b.InputTimeZone);
                    Assert.AreEqual(a.OnFailure, b.OnFailure);
                    Assert.AreEqual(a.OutputFormat, b.OutputFormat);
                    Assert.AreEqual(a.OutputTimeZone, b.OutputTimeZone);
                    Assert.AreEqual(a.RangeEnd, b.RangeEnd);
                    Assert.AreEqual(a.RangeStart, b.RangeStart);
                    Assert.AreEqual(a.ReplaceText, b.ReplaceText);
                }
                else
                {
                    throw new Exception("Invalid type.");
                }
            }
            // check exports
            for (int i = 0; i < job.Exports.Length; i++)
            {
                Assert.AreEqual(job.Exports[i].File.FullName, testJob.Exports[i].File.FullName);
                Assert.AreEqual(job.Exports[i].Encoding, testJob.Exports[i].Encoding);

                if (job.Exports[i].GetType().Equals(typeof(DatExport)))
                {
                    Assert.AreEqual(
                        String.Join(",", ((DatExport)job.Exports[i]).ExportFields),
                        String.Join(",", ((DatExport)testJob.Exports[i]).ExportFields));
                    Assert.AreEqual(
                        ((DatExport)job.Exports[i]).Delimiters.FieldSeparator,
                        ((DatExport)testJob.Exports[i]).Delimiters.FieldSeparator);
                    Assert.AreEqual(
                        ((DatExport)job.Exports[i]).Delimiters.TextQualifier,
                        ((DatExport)testJob.Exports[i]).Delimiters.TextQualifier);
                    Assert.AreEqual(
                        ((DatExport)job.Exports[i]).Delimiters.EscapeCharacter,
                        ((DatExport)testJob.Exports[i]).Delimiters.EscapeCharacter);
                    Assert.AreEqual(
                        ((DatExport)job.Exports[i]).Delimiters.NewRecord,
                        ((DatExport)testJob.Exports[i]).Delimiters.NewRecord);
                    Assert.AreEqual(
                        ((DatExport)job.Exports[i]).Delimiters.FlattenedNewLine,
                        ((DatExport)testJob.Exports[i]).Delimiters.FlattenedNewLine);
                }
                else if (job.Exports[i].GetType().Equals(typeof(XlsExport)))
                {
                    Assert.AreEqual(
                        String.Join(",", ((XlsExport)job.Exports[i]).ExportFields),
                        String.Join(",", ((XlsExport)testJob.Exports[i]).ExportFields));
                    Assert.AreEqual(
                        ((XlsExport)job.Exports[i]).FilePath,
                        ((XlsExport)testJob.Exports[i]).FilePath);

                    for (int j = 0; j < ((XlsExport)job.Exports[i]).Hyperlinks.Length; j++)
                    {
                        Hyperlink link     = ((XlsExport)job.Exports[i]).Hyperlinks[j];
                        Hyperlink testLink = ((XlsExport)job.Exports[i]).Hyperlinks[j];

                        Assert.AreEqual(link.FileType, testLink.FileType);
                        Assert.AreEqual(link.DisplayText, testLink.DisplayText);
                        Assert.AreEqual(link.ColumnIndex, testLink.ColumnIndex);
                    }
                }
                else if (job.Exports[i].GetType().Equals(typeof(XrefExport)))
                {
                    XrefExport actual   = (XrefExport)testJob.Exports[i];
                    XrefExport expected = (XrefExport)job.Exports[i];
                    Assert.AreEqual(expected.Encoding, actual.Encoding);
                    Assert.AreEqual(expected.FilePath, actual.FilePath);
                    Assert.AreEqual(expected.CustomerDataField, actual.CustomerDataField);
                    Assert.AreEqual(expected.NamedFolderField, actual.NamedFolderField);
                    Assert.AreEqual(expected.NamedFileField, actual.NamedFileField);
                    Assert.IsTrue(expected.CodeStartTrigger.Equals(actual.CodeStartTrigger));
                    Assert.IsTrue(expected.GroupStartTrigger.Equals(actual.GroupStartTrigger));
                    Assert.IsTrue(expected.BoxTrigger.Equals(actual.BoxTrigger));
                    Assert.IsTrue(expected.Slipsheets.Equals(actual.Slipsheets));
                }
                else
                {
                    Assert.AreEqual(
                        ((ImgExport)job.Exports[i]).VolumeName,
                        ((ImgExport)testJob.Exports[i]).VolumeName);
                }
            }
        }