public string MergeJson2Docx(JsonConversionData jsonFileData, DocxConversionData docxFileData)
        {
            string ResponseMessage = "fail";

            if (jsonFileData.TotalStrings2Translate != docxFileData.TotalStrings2Translate)
            {
                return("MERGE FAILED: Docx file and Json file do not the same number of strings to merge.");
            }

            IEnumerable <string> DocxStrings = null;

            try
            {
                //Merge Json data into Docx File.
                DocxStrings = textMerger.Merge(jsonFileData, docxFileData);
            }
            catch (Exception e)
            {
                return(e.Message);
            }

            if (DocxStrings.Count() == jsonFileData.TotalStrings2Translate)
            {
                ResponseMessage = "Success";
            }

            return(ResponseMessage);
        }
Esempio n. 2
0
        public void MergeJson2Docx_TranslatedStringsMatchJsonStringCountTest()
        {
            var resultStrings = new List <string>();

            resultStrings.Add("Result string 1");
            resultStrings.Add("Result string 2");
            resultStrings.Add("Result string 3");
            resultStrings.Add("Result string 4");
            resultStrings.Add("Result string 5");

            var mockTextMerger = new Mock <IDocxTextMerger>();

            mockTextMerger.Setup(tb => tb.Merge(It.IsAny <JsonConversionData>(), It.IsAny <DocxConversionData>(), It.IsAny <bool>()))
            .Returns(resultStrings);

            var sut = new MergeService(mockTextMerger.Object);

            var jsonFileData = new JsonConversionData(fullJsonTestFilePath)
            {
                TotalStrings2Translate = 5
            };

            var docxFileData = new DocxConversionData(fullDocxTestFilePath)
            {
                TotalStrings2Translate = 5
            };

            var result = sut.MergeJson2Docx(jsonFileData, docxFileData);

            Assert.AreEqual(result, "Success");
        }
        public IEnumerable <string> Merge(JsonConversionData jsonFileData, DocxConversionData docxFileData, Boolean ignoreHidden = false)
        {
            if (docxFileData == null)
            {
                throw new ArgumentNullException("docxFileData", "DocxConversionData cannot be null.");
            }

            if (jsonFileData == null)
            {
                throw new ArgumentNullException("jsonFileData", "JsonFileData cannot be null.");
            }

            string docxConversionDataFullPath = docxFileData.FullPath;

            using (WordprocessingDocument doc = WordprocessingDocument.Open(docxConversionDataFullPath, true))
            {
                var strings2Translate = textExtractionService.ExtractText(doc, ignoreHidden);

                for (int j = 0; j < docxFileData.TotalStrings2Translate; j++)
                {
                    int indexInDocument = j + 1;
                    var newValue        = (string)jsonFileData.JsonData["lines"][j];

                    strings2Translate.Take(indexInDocument).Last().Text = newValue;
                }

                IEnumerable <string> outputStrings2Translate = strings2Translate.Select(text => text.Text);
                return(outputStrings2Translate);
            }
        }
Esempio n. 4
0
        public void TestExportJson()
        {
            //make sure test files exist
            TestingJsonFileTest();
            TestingTestDocxFile();

            var jsonIoService = new JsonIoService();

            //Test Service Methods
            DocxConversionData docxFileData = docxFileService.CreateCleanedCopy(FullDocxTestFilePath, false);
            JsonConversionData jsonFileData = docxJsonService.ExportStringsToJsonFile(docxFileData);

            File.Delete(jsonFileData.FullPath);
            jsonIoService.SaveJson(jsonFileData);

            Assert.AreEqual("Success", jsonFileData.Messages[0]);
            //Validate Json being exported has a valid schema
            Assert.IsTrue(File.Exists(jsonFileData.FullPath));
            var rawFileContents = File.ReadAllLines(jsonFileData.FullPath);

            Assert.IsNotNull(rawFileContents);

            //Clean Up file that was created
            File.Delete(docxFileData.FullPath);
            File.Delete(jsonFileData.FullPath);
        }
Esempio n. 5
0
        public Json2Docx(string fullJsonTestFilePath,
                         string fullDocxTestFilePath,
                         IDocxFileService docxFileService,
                         IDocxJsonService jsonService,
                         IMergeService mergeService)
        {
            JsonConversionData jsonFileData = jsonService.BuildJsonConversionData(fullJsonTestFilePath);

            //Handle Errors
            if (jsonFileData.Messages[0] != "Success")
            {
                Response = jsonFileData.Messages[0];
                return;
            }

            DocxConversionData docxFileData = docxFileService.CreateCleanedCopy(fullDocxTestFilePath, false);

            //Handle Errors
            if (docxFileData.Messages[0] != "Success")
            {
                Response = docxFileData.Messages[0];
                return;
            }

            Response = mergeService.MergeJson2Docx(jsonFileData, docxFileData);

            if (Response == "Success")
            {
                //rename DocxFile
                string docxConversionDataFullPath = docxFileData.FullPath;
                string mergedFileName             = docxFileData.GetTranslatedFullPath(DateTime.Now);

                try
                {
                    File.Move(docxConversionDataFullPath, mergedFileName);

                    if (File.Exists(mergedFileName))
                    {
                        FilePath = mergedFileName;
                    }
                    else
                    {
                        Response = "Error saving merged Docx file: " + mergedFileName;
                    }
                }
                catch (Exception e)
                {
                    Response = e.Message;
                }
            }
        }
Esempio n. 6
0
        public void MergeJson2Docx_TextBuilderExceptionHandledTest()
        {
            var exceptionMessage = "This is the exception message.";
            var mockTextMerger   = new Mock <IDocxTextMerger>();

            mockTextMerger.Setup(tm => tm.Merge(It.IsAny <JsonConversionData>(), It.IsAny <DocxConversionData>(), It.IsAny <bool>()))
            .Throws(new ArgumentNullException("docxFileData", exceptionMessage));

            var sut = new MergeService(mockTextMerger.Object);

            var jsonFileData = new JsonConversionData(fullJsonTestFilePath);
            var docxFileData = new DocxConversionData(fullDocxTestFilePath);

            var result = sut.MergeJson2Docx(jsonFileData, docxFileData);

            Assert.AreEqual(0, result.IndexOf(exceptionMessage));
        }
Esempio n. 7
0
        public void TestBuildDocxConversionData()
        {
            //Make sure Test File Exists
            TestingTestDocxFile();

            //Test Service Method
            DocxConversionData docxFileData = docxFileService.CreateCleanedCopy(FullDocxTestFilePath, false);

            Assert.IsNotNull(docxFileData);
            Assert.AreEqual("Success", docxFileData.Messages[0]);
            Assert.IsTrue(docxFileData.TotalStrings2Translate > 0);

            Assert.IsTrue(File.Exists(docxFileData.FullPath));

            //Clean Up file that was created
            File.Delete(docxFileData.FullPath);
        }
Esempio n. 8
0
        public void TestMergeJson2Docx()
        {
            //make sure test files exist
            TestingJsonFileTest();
            TestingTestDocxFile();

            JsonConversionData jsonFileData = docxJsonService.BuildJsonConversionData(FullJsonTestFilePath);
            DocxConversionData docxFileData = docxFileService.CreateCleanedCopy(FullDocxTestFilePath, false);

            var    mergeService    = new MergeService(new DocxTextMerger(new DocumentTextRunExtractionService()));
            string ResponseMessage = mergeService.MergeJson2Docx(jsonFileData, docxFileData);

            Assert.AreEqual(ResponseMessage, "Success");
            Assert.IsTrue(File.Exists(docxFileData.FullPath));

            //Clean Up file that was created
            File.Delete(docxFileData.FullPath);
        }
Esempio n. 9
0
        public JsonConversionData ExportStringsToJsonFile(DocxConversionData docxFileData)
        {
            if (docxFileData == null)
            {
                throw new ArgumentNullException("The DocxConversionData cannot be null.");
            }

            JsonConversionData jsonFileData = new JsonConversionData(docxFileData.FullPath);

            //Validate there is something to convert/translate in the Docx file
            if (docxFileData.Strings2Translate?.Count() == 0)
            {
                jsonFileData.Messages.Add("Docx File is Empty and has nothing to translate");
                return(jsonFileData);
            }

            jsonFileData.JsonData = JObject.Parse(@"{ 
                'id': 'spf.io_convertion_data',
                'timestamp': " + DateTime.Now.ToString("yyyyMMddHHmmssffff") + @",
                'extractedFrom': '" + docxFileData.FileName + docxFileData.FileExtension + @"',
                'lines': []
            }");

            JArray JsonLineArray = (JArray)jsonFileData.JsonData["lines"];

            foreach (string TranslationString in docxFileData.Strings2Translate)
            {
                JsonLineArray.Add(TranslationString);
            }

            jsonFileData.TotalStrings2Translate = jsonFileData.JsonData["lines"].Count();

            //Validate there is something to convert/translate in the Docx file
            if (docxFileData.TotalStrings2Translate == jsonFileData.TotalStrings2Translate)
            {
                jsonFileData.Messages.Add("Success");
            }
            else
            {
                jsonFileData.Messages.Add("The creation of the Json Data from the docx file failed.");
            }

            return(jsonFileData);
        }
Esempio n. 10
0
        public void MergeJson2Docx_EnsureStringCountsMatchTest()
        {
            var mockTextMerger = new Mock <IDocxTextMerger>();
            var sut            = new MergeService(mockTextMerger.Object);

            var jsonFileData = new JsonConversionData(fullJsonTestFilePath)
            {
                TotalStrings2Translate = 5
            };

            var docxFileData = new DocxConversionData(fullDocxTestFilePath)
            {
                TotalStrings2Translate = 3
            };

            var result = sut.MergeJson2Docx(jsonFileData, docxFileData);

            Assert.AreEqual(result.IndexOf("MERGE FAILED"), 0);
        }
Esempio n. 11
0
        public void TestConvertDocx2Json()
        {
            //make sure test files exist
            TestingTestDocxFile();

            //Valid Schema for Json Data to be exported exported
            //NOTE: I used https://jsonschema.net/ to help me build the schema
            JsonSchema schema = JsonSchema.Parse(ValueRepository.JsonSchema);

            //Test Service Methods
            DocxConversionData docxFileData = docxFileService.CreateCleanedCopy(FullDocxTestFilePath, false);
            JsonConversionData jsonFileData = docxJsonService.ExportStringsToJsonFile(docxFileData);

            Assert.AreEqual("Success", jsonFileData.Messages[0]);
            //Validate Json being exported has a valid schema
            Assert.IsTrue(jsonFileData.JsonData.IsValid(schema));
            //Validate that exported Json contains the same number of strings to be translated
            Assert.AreEqual(jsonFileData.TotalStrings2Translate, docxFileData.TotalStrings2Translate);

            //Clean Up file that was created
            File.Delete(docxFileData.FullPath);
        }
Esempio n. 12
0
        public JsonConversionData ExtractStringsToJsonFile(string fullFilePath)
        {
            if (string.IsNullOrEmpty(fullFilePath))
            {
                throw new ArgumentOutOfRangeException("The file path cannot be null or empty.");
            }

            //Extract Docx data out information from Docx file
            DocxConversionData cleanedDocxFileData = docxFileService.CreateCleanedCopy(fullFilePath, true);

            //Handle Errors
            if (cleanedDocxFileData.Messages[0] != "Success")
            {
                var errorResult = new JsonConversionData(fullFilePath);
                errorResult.Messages.Add(cleanedDocxFileData.Messages[0]);
                return(errorResult);
            }

            // We don't need the "cleaned" copy of the docx any longer, so delete it
            if (File.Exists(cleanedDocxFileData.FullPath))
            {
                File.Delete(cleanedDocxFileData.FullPath);
            }

            // We want the json file we create to have the same name as the original file, so
            // restore the original path in our data object
            var origFileData = new DocxConversionData(fullFilePath)
            {
                TotalStrings2Translate = cleanedDocxFileData.TotalStrings2Translate,
                Strings2Translate      = cleanedDocxFileData.Strings2Translate
            };

            origFileData.Messages.AddRange(cleanedDocxFileData.Messages);

            //translate data to target language
            List <string> TranslatedStrings = new List <string>();

            foreach (string line in origFileData.Strings2Translate)
            {
                string TranslatedLine = TextTranslator.TranslateText(line, "es", "en");
                TranslatedStrings.Add(TranslatedLine);
            }
            origFileData.Strings2Translate = (IEnumerable <string>)TranslatedStrings;

            //Convert docx data to json data
            JsonConversionData jsonFileData = docxJSonService.ExportStringsToJsonFile(origFileData);

            //Handle Errors
            //if (jsonFileData.Messages[0] != "Success")
            //{
            //    return jsonFileData;
            //}

            //Delete any Json file that might have the same name as the new one we are creating.
            if (File.Exists(jsonFileData.FullPath))
            {
                try
                {
                    File.Delete(jsonFileData.FullPath);
                }
                catch (Exception e)
                {
                    var errorResult = new JsonConversionData(fullFilePath);
                    errorResult.Messages.Add(e.Message);
                    return(errorResult);
                }
            }

            //Export Json data to file
            var result = jsonIoService.SaveJson(jsonFileData);

            //Handle Errors
            if (result != "Success")
            {
                jsonFileData.Messages.Insert(0, "Failed");
            }

            return(jsonFileData);
        }
Esempio n. 13
0
        public DocxConversionData CreateCleanedCopy(string fullPath, bool ignoreHidden)
        {
            if (string.IsNullOrEmpty(fullPath))
            {
                throw new ArgumentNullException("path variable cannot be null or empty");
            }

            // ensure we have a valid path to a docx file
            if (!validator.IsValid(fullPath))
            {
                return(null);
            }

            var origFileData = new DocxConversionData(fullPath);

            var cleanedFileName = origFileData.FileName + "_cleaned" + origFileData.FileExtension;
            var cleanedFileData = new DocxConversionData(Path.Join(origFileData.FilePath, cleanedFileName));

            try
            {
                // ensure there is not an orphaned copy already on disk
                File.Delete(cleanedFileData.FullPath);

                // Make a copy of the original using the "cleaned" file name
                File.Copy(origFileData.FullPath, cleanedFileData.FullPath);

                //Clean Document of extra tags
                using (WordprocessingDocument doc = WordprocessingDocument.Open(cleanedFileData.FullPath, true))
                {
                    OpenXmlPowerTools.SimplifyMarkupSettings settings = new OpenXmlPowerTools.SimplifyMarkupSettings
                    {
                        AcceptRevisions       = true,
                        NormalizeXml          = false, //setting this to false reduces translation quality, but if true some documents have XML format errors when opening
                        RemoveBookmarks       = true,
                        RemoveComments        = true,
                        RemoveContentControls = true,
                        RemoveEndAndFootNotes = true,
                        RemoveFieldCodes      = false, //FieldCode remove pagination
                        RemoveGoBackBookmark  = true,
                        //RemoveHyperlinks = false,
                        RemoveLastRenderedPageBreak       = true,
                        RemoveMarkupForDocumentComparison = true,
                        RemovePermissions     = false,
                        RemoveProof           = true,
                        RemoveRsidInfo        = true,
                        RemoveSmartTags       = true,
                        RemoveSoftHyphens     = true,
                        RemoveWebHidden       = true,
                        ReplaceTabsWithSpaces = false
                    };

                    OpenXmlPowerTools.MarkupSimplifier.SimplifyMarkup(doc, settings);

                    //Extract Strings for translation
                    var textBlocks = textExtractor.ExtractText(doc, ignoreHidden);
                    //var textBlocks = textExtractor.ExtractParagraph(doc, ignoreHidden);
                    cleanedFileData.Strings2Translate = textBlocks.Select(para => para.InnerText);
                }

                //Total the number of strings for translation
                cleanedFileData.TotalStrings2Translate = cleanedFileData.Strings2Translate.Count();

                if (File.Exists(cleanedFileData.FullPath))
                {
                    cleanedFileData.Messages.Add("Success");
                }
                else
                {
                    cleanedFileData.Messages.Add("Docx data failed to build properly.");
                }
            }
            catch (Exception e)
            {
                cleanedFileData.Messages.Add(e.Message);
            }

            return(cleanedFileData);
        }