internal static bool CompareLastNVGDirectories(KnowledgeBase KB, IOutputService output) { try { bool isSuccess = true; string pathNvg = Path.Combine(Utility.SpcDirectory(KB), "NvgComparer"); string fileWildcard = @"*.*"; string[] Files = Directory.GetDirectories(pathNvg, fileWildcard); string[] Last2directories = GetLast2Directorys(Files, output); int cant_error = 0; if (Last2directories == null || Last2directories.Length != 2) { output.AddErrorLine("Ocurrió un error procesando los directorios de navegaciones."); output.AddErrorLine("Asegúrece de que existen al menos dos directorios con nombres en el formato válido (NVG-AAAA-MM-DD-HHMM)"); } else { KBDoctorOutput.Message("Se utilizarán los siguientes directorios para comparar:"); KBDoctorOutput.Message("-- " + Last2directories[0].ToString()); KBDoctorOutput.Message("-- " + Last2directories[1].ToString()); List <string> Diffs = EqualNavigationDirectories(Last2directories[0], Last2directories[1], output); KBDoctorOutput.Message("-- Los directorios se procesaron correctamente."); if (Diffs.Count > 0) { KBDoctorOutput.Message("-- Se encontraron diferencias en las navegaciones de los siguientes objetos:"); List <string> FilesDiff = new List <string>(); foreach (string x in Diffs) { string[] objectnametype = Utility.ReadQnameTypeFromNVGFile(x, output); string filename = Path.GetFileName(x); string objtype = objectnametype[0]; string objmodule = objectnametype[1]; string objname = objectnametype[2]; KBObjectDescriptor kbod = KBObjectDescriptor.Get(objtype); QualifiedName qname = new QualifiedName(objmodule, objname); //Null in HCIHisMo KBObject obj = KB.DesignModel.Objects.Get(kbod.Id, qname); if (obj != null) { if (obj.Timestamp <= Utility.GetDateTimeNVGDirectory(Last2directories[1].ToString())) { FilesDiff.Add(filename); if (objmodule != "") { KBDoctorOutput.Message("-- ERROR " + objmodule + '.' + objname + " fue modificado en \t\t" + obj.Timestamp.ToString()); } else { KBDoctorOutput.Message("-- ERROR " + objname + " fue modificado en \t\t" + obj.Timestamp.ToString()); } isSuccess = false; cant_error++; } else { if (objmodule != "") { KBDoctorOutput.Message("-- -- OK " + objmodule + '.' + objname + " fue modificado en \t\t" + obj.Timestamp.ToString()); } else { KBDoctorOutput.Message("-- -- OK " + objname + " fue modificado en \t\t" + obj.Timestamp.ToString()); } } } else { KBDoctorOutput.Message("-- NO SE ENCONTRO EL OBJETO: " + qname.ToString()); } } CopyDifferences(FilesDiff, Last2directories[0], Last2directories[1], "NvgErrors"); } else { DeleteDifferenceDir(KB); KBDoctorOutput.Message("No se encontraron diferencias en las navegaciones"); } } if (cant_error > 0) { output.AddErrorLine("Se encontraron " + cant_error + " errores en la comparación."); } return(isSuccess); } catch (Exception e) { KBDoctorOutput.Message(e.Message); return(false); } }