Advertisement
Guest User

Untitled

a guest
Oct 21st, 2018
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 9.39 KB | None | 0 0
  1.         [HttpPost]
  2.         [RequiredAuthorization(Order = 1)]
  3.         public ActionResult Fix()
  4.         {
  5.             var configSet = JsonNetHelper.Desreialize<ConfigSet>(Request.Form["configSet"]);
  6.             var inputParameters = configSet.InputParameters;
  7.             var curveConfigs = configSet.CurveConfigs;
  8.  
  9.             var fixerParameters = new FixerParameters
  10.             {
  11.                 Codepage = inputParameters.Codepage,
  12.                 ParameterNames = inputParameters.ParameterCurves,
  13.                 DoAddCurveNames = inputParameters.Mask == "WELL_CURVES",
  14.                 DoEncode = inputParameters.DoEncode,
  15.                 DoMerge = inputParameters.DoMerge,
  16.                 Upper = inputParameters.Upper,
  17.                 Lower = inputParameters.Lower,
  18.                 MergeFilterWells = inputParameters.MergeFilterWells ?? new List<string>(),
  19.                 MergeFilterCurves = inputParameters.MergeFilterCurves ?? new List<string>(),
  20.                 DoMergeFilterEdges = inputParameters.DoMergeFilterEdges
  21.             };
  22.             var curveFixes = curveConfigs
  23.                 .Select(x => new CurveFix
  24.                 {
  25.                     Names = x.Name + "," + x.NameVariants,
  26.                     TransformName = x.Name,
  27.                     TransformDesc = x.Name,
  28.                     TransformUnit = x.Unit
  29.                 }).ToList();
  30.  
  31.             var userId = Convert.ToInt64(User.Identity.Name);
  32.             var cloudPath = Server.MapPath($"~/App_Data/{userId}/cloud");
  33.             if (!Directory.Exists(cloudPath)) Directory.CreateDirectory(cloudPath);
  34.             var fixerPath = Server.MapPath($"~/App_Data/{userId}/fixer");
  35.             if (!Directory.Exists(fixerPath)) Directory.CreateDirectory(fixerPath);
  36.             var archivePath = $"{fixerPath}/archive";
  37.             if (Directory.Exists(archivePath)) Directory.Delete(archivePath, true);
  38.             Directory.CreateDirectory(archivePath);
  39.  
  40.             foreach (var filePath in Directory.EnumerateFiles(cloudPath, "*.las", SearchOption.AllDirectories))
  41.             {
  42.                 var file = new FileStream(filePath, FileMode.Open, FileAccess.Read);
  43.                 var fileState = _parserService.CheckFile(file);
  44.                 if (fileState != FileState.Ok)
  45.                 {
  46.                     file.Close();
  47.                     continue;
  48.                 }
  49.  
  50.                 var parseResult = _parserService.ParseLasFile(file, fixerParameters.Codepage);
  51.                 if (parseResult.ParseState != ParseState.Ok)
  52.                 {
  53.                     file.Close();
  54.                     continue;
  55.                 }
  56.  
  57.                 if (fixerParameters.DoMerge &&
  58.                     fixerParameters.MergeFilterWells.Count != 0 &&
  59.                     !fixerParameters.MergeFilterWells.Contains(parseResult.LasContent.WellInformation.Well))
  60.                 {
  61.                     file.Close();
  62.                     continue;
  63.                 }
  64.  
  65.                 parseResult.LasContent = _fixerService.ApplyFixes(parseResult.LasContent, curveFixes);
  66.                 var fixedText = _serializerService.Serialize(parseResult.LasContent);
  67.  
  68.                 var wellName = parseResult.LasContent.WellInformation.Well == "" ?
  69.                     "UNKNOWNWELL" :
  70.                     PathUtils.SanitizeFileName(parseResult.LasContent.WellInformation.Well);
  71.  
  72.                 var curveName = "";
  73.                 if (fixerParameters.DoAddCurveNames)
  74.                 {
  75.                     var sb = new StringBuilder();
  76.                     var delimiter = '_';
  77.                     for (int i = 1; i < parseResult.LasContent.CurveInformation.Curves.Count; i++)
  78.                     {
  79.                         var curve = parseResult.LasContent.CurveInformation.Curves[i];
  80.                         sb.Append(delimiter);
  81.                         sb.Append(curve.Mnem);
  82.                     }
  83.                     curveName = sb.ToString();
  84.                 }
  85.  
  86.                 var wellPath = $"{archivePath}/{wellName}";
  87.                 var fixedFileNamePart = PathUtils.SanitizeFileName($"{wellName}{curveName}");
  88.                 var fixedFilePath = $"{wellPath}/{fixedFileNamePart}.las";
  89.                 if (fixedFilePath.Length > 240)
  90.                 {
  91.                     fixedFileNamePart = fixedFileNamePart.Substring(0, fixedFileNamePart.Length - (fixedFilePath.Length - 240));
  92.                 }
  93.                 var fixedFileName = fixedFileNamePart;
  94.                 var index = 1;
  95.                 while (System.IO.File.Exists($"{wellPath}/{fixedFileName}.las"))
  96.                 {
  97.                     index++;
  98.                     fixedFileName = $"{fixedFileNamePart} ({index})";
  99.                 }
  100.  
  101.                 if (!Directory.Exists(wellPath)) Directory.CreateDirectory(wellPath);
  102.                 using (var sw = new StreamWriter($"{wellPath}/{fixedFileName}.las", false, Encoding.GetEncoding(1251)))
  103.                 {
  104.                     sw.Write(fixedText);
  105.                     sw.Close();
  106.                 }
  107.  
  108.                 file.Close();
  109.             }
  110.  
  111.             if (fixerParameters.DoMerge)
  112.             {
  113.                 var mergerPath = Server.MapPath($"~/App_Data/{userId}/merger");
  114.                 if (!Directory.Exists(mergerPath)) Directory.CreateDirectory(mergerPath);
  115.  
  116.                 var mergerArchivePath = $"{mergerPath}/archive";
  117.                 if (Directory.Exists(mergerArchivePath)) Directory.Delete(mergerArchivePath, true);
  118.                 Directory.CreateDirectory(mergerArchivePath);
  119.  
  120.                 foreach (var wellDirectory in Directory.EnumerateDirectories(archivePath))
  121.                 {
  122.                     var wellName = Path.GetFileName(wellDirectory);
  123.                     var mergedWellPath = $"{mergerArchivePath}/{wellName}";
  124.                     if (!Directory.Exists(mergedWellPath)) Directory.CreateDirectory(mergedWellPath);
  125.  
  126.                     if (wellName == "UNKNOWNWELL")
  127.                     {
  128.                         foreach (var srcFile in Directory.EnumerateFiles(wellDirectory, "*.las", SearchOption.AllDirectories))
  129.                         {
  130.                             var srcFileName = Path.GetFileName(srcFile);
  131.                             System.IO.File.Copy(srcFile, $"{mergedWellPath}/{srcFileName}", true);
  132.                         }
  133.                         continue;
  134.                     }
  135.  
  136.                     List<LasContent> outContents;
  137.                     foreach (var srcFile in Directory.EnumerateFiles(wellDirectory, "*.las", SearchOption.AllDirectories))
  138.                     {
  139.                         var file = new FileStream(srcFile, FileMode.Open, FileAccess.Read);
  140.                         var parseResult = _parserService.ParseLasFile(file);
  141.                         file.Close();
  142.                         _mergerService.Merge(parseResult.LasContent, fixerParameters);
  143.                     }
  144.                     outContents = _mergerService.CompleteMerge();
  145.                     _mergerService.EraseCurrentWorkflow();
  146.  
  147.                     foreach (var content in outContents)
  148.                     {
  149.                         if (content == null)
  150.                         {
  151.                             continue;
  152.                         }
  153.                         var mergedFileText = _serializerService.Serialize(content);
  154.  
  155.                         var curveName = "";
  156.                         if (fixerParameters.DoAddCurveNames)
  157.                         {
  158.                             var sb = new StringBuilder();
  159.                             var delimiter = '_';
  160.                             for (int i = 1; i < content.CurveInformation.Curves.Count; i++)
  161.                             {
  162.                                 var curve = content.CurveInformation.Curves[i];
  163.                                 sb.Append(delimiter);
  164.                                 sb.Append(curve.Mnem);
  165.                             }
  166.                             curveName = sb.ToString();
  167.                         }
  168.  
  169.                         var mergedFileName = PathUtils.SanitizeFileName($"{wellName}{curveName}");
  170.                         var mergedFilePath = $"{mergedWellPath}/{mergedFileName}.las";
  171.                         if (mergedFilePath.Length > 251)
  172.                         {
  173.                             mergedFileName = mergedFileName.Substring(0, mergedFileName.Length - (mergedFilePath.Length - 251));
  174.                             mergedFilePath = $"{mergedWellPath}/{mergedFileName}$.las";
  175.                         }
  176.                         using (var sw = new StreamWriter(mergedFilePath, false, Encoding.GetEncoding(1251)))
  177.                         {
  178.                             sw.Write(mergedFileText);
  179.                             sw.Close();
  180.                         }
  181.                     }
  182.                 }
  183.  
  184.                 archivePath = mergerArchivePath;
  185.             }
  186.  
  187.             using (var archive = new FileStream(fixerPath + "/fixed_archive.zip", FileMode.Create))
  188.             {
  189.                 using (var zipWriter = WriterFactory.Open(archive, ArchiveType.Zip, new WriterOptions(CompressionType.Deflate)))
  190.                 {
  191.                     foreach (var filePath in Directory.EnumerateFiles(archivePath, "*.las", SearchOption.AllDirectories))
  192.                     {
  193.                         zipWriter.Write(filePath.Replace(archivePath, ""), filePath);
  194.                     }
  195.                 }
  196.             }
  197.  
  198.             return this.JsonNet(new { FileName = "fixed_archive" });
  199.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement