/// <summary> /// To insure that a CSV files headers are all unique and simple, propertyesque, names. /// </summary> /// <param name="someStrings"></param> /// <returns></returns> public static string[] FormatCsvHeaders(string[] someStrings) { var newNames = new List <string>(); var names2Count = new Dictionary <string, int>(); foreach (var s in someStrings) { if (names2Count.ContainsKey(s)) { names2Count[s] += 1; } else { names2Count.Add(s, 1); } } foreach (var k in names2Count.Keys) { var repeated = names2Count[k]; var newName = NfString.SafeDotNetIdentifier(k); if (repeated > 1) { for (var i = 0; i < names2Count[k]; i++) { newNames.Add(String.Format("{0}{1:00}", newName, i + 1)); } } else { newNames.Add(newName); } } return(newNames.ToArray()); }
public AsmDiagramEdge(Tuple <FlattenedItem, FlattenedItem> f) { _node1Name = NfString.SafeDotNetIdentifier(f.Item1.TypeFullName.Replace(".", "_"), false, 128); _node2Name = NfString.SafeDotNetIdentifier(f.Item2.TypeFullName.Replace(".", "_"), false, 128); Node1 = f.Item1.TypeFullName; Node2 = f.Item2.TypeFullName; IsEnumerable = f.Item2.IsEnumerable; }
public override string ToString() { if (_nsNodes == null || _nsNodes.Count <= 0) { return(string.Empty); } var graphViz = new StringBuilder(); graphViz.Append($"subgraph cluster_{NfString.SafeDotNetIdentifier(_ns)}"); graphViz.AppendLine("{"); graphViz.AppendLine("\tlabel=\"\";"); graphViz.AppendLine("\tcolor=red;"); foreach (var item in _nsNodes) { graphViz.AppendLine($"\t{item}"); } graphViz.AppendLine("}"); return(graphViz.ToString()); }
public string GetDotNetPropertyName() { if (string.IsNullOrWhiteSpace(ParamName)) { return(null); } var cName = ParamName.StartsWith("@") ? ParamName.Substring(1, ParamName.Length - 1) : ParamName; cName = NfString.SafeDotNetIdentifier(cName); cName = NfString.CapWords(cName, null); if (GetSqlDataType() == SqlDbType.Bit && !cName.StartsWith("Is")) { cName = string.Format("Is{0}", cName); } if (cName.EndsWith("ID")) { cName = string.Format("{0}Id", cName.Substring(0, cName.Length - 2)); } return(cName); }
public static string PropertyName(string name, bool replaceInvalidsWithHexEsc = false) { name = NfString.ExtractLastWholeWord(name, Shared.Core.NfSettings.DefaultTypeSeparator); name = NfString.CapWords(name, null); return(NfString.SafeDotNetIdentifier(name, replaceInvalidsWithHexEsc)); }
public AsmDiagram(Assembly asm, bool withNamespaceSubGraphs = false) { if (asm == null) { throw new ArgumentNullException(nameof(asm)); } _targetedNs = asm.GetName().Name; _withNsSubgraphs = withNamespaceSubGraphs; _asmName = NfString.SafeDotNetIdentifier(asm.GetName().Name); foreach ( var asmType in asm.NfGetExportedTypes() .Where(x => !string.IsNullOrWhiteSpace(x.Namespace) && AssemblyName.ReferenceMatchesDefinition(asm.GetName(), x.Assembly.GetName()))) { var item1 = new FlattenedItem(asmType) { FlName = asmType.Name }; if (item1.IsTerminalNode || NfReflect.IsEnumType(asmType)) { continue; } foreach ( var p in asmType.NfGetProperties(NfSettings.DefaultFlags, false) .Where( x => x != null && !string.IsNullOrWhiteSpace(x.NfPropertyType(false)?.Namespace) && AssemblyName.ReferenceMatchesDefinition(x.NfPropertyType(false)?.Assembly.GetName(), asm.GetName())) ) { if (NfReflect.IsEnumType(p.PropertyType)) { continue; } var item2 = new FlattenedItem(p.PropertyType) { FlName = p.Name }; if (item2.IsTerminalNode) { continue; } var tupleOfItems = new Tuple <FlattenedItem, FlattenedItem>(item1, item2); var itemEv = new AsmDiagramEdge(tupleOfItems); if (Edges.Any(x => x.AreSame(itemEv))) { continue; } Edges.Add(itemEv); } } Edges = RemoveDuplicates(Edges); var names = Edges.SelectMany(x => x.NodeName).ToList(); var uqNames = names.Distinct().OrderBy(x => x).ToList(); _nodes = uqNames.Select(x => new AsmDiagramNode(x, GetCountOfEdgesOn(x))).ToList(); if (_withNsSubgraphs) { var uqNamespaces = _nodes.Select(x => x.NodeNamespace).Distinct().ToList(); foreach (var ns in uqNamespaces) { _nsSubGraphs.Add(new AsmDiagramSubGraph(ns, _nodes)); } } }
/// <summary> /// Produces a single hbm.xml with the sql-query node in tow. /// </summary> /// <param name="outputNamespace"></param> /// <param name="storedProc"></param> /// <returns>The path to the generated hbm.xml file.</returns> public static string GetHbmNamedQueryXml(string outputNamespace, string storedProc) { if (Sorting.AllStoredProcNames == null || Sorting.AllStoredProcNames.Count <= 0) { throw new RahRowRagee("There doesn't appear to be any stored procs here."); } if (Settings.DoNotReference.Contains(storedProc) || !Sorting.AllStoredProx.ContainsKey(storedProc)) { return(null); } var sp = Sorting.AllStoredProx[storedProc]; if (sp == null) { return(null); } var returnedData = sp.ReturnedData; if (returnedData == null || returnedData.Count <= 0) { return(null); } if (returnedData.Keys.Count <= 0) { Settings.WriteToStoredProcLog(string.Format("Stored proc named '{0}' has an empty dataset", sp.ProcName)); if (!Sorting.EmptyDatasetProx.Contains(sp.ProcName)) { Sorting.EmptyDatasetProx.Add(sp.ProcName); } return(null); } //both the return types and the callable sql-query are wrapped in this root node var xe = XeFactory.HibernateMappingNode(); if (returnedData.Count > 1) { Settings.WriteToStoredProcLog(string.Format("Stored Proc named '{0}' returns a multi-table dataset", storedProc)); if (!Sorting.MultiTableDsProx.Contains(storedProc)) { Sorting.MultiTableDsProx.Add(storedProc); } } //possiable duplicate names handled within this var className = Compose.ClassName(string.Format("{0}.{1}{2}", Globals.STORED_PROX_FOLDER_NAME, storedProc, "Table"), outputNamespace); var classXe = XeFactory.ClassNode(className, null, null); classXe.Add(XeFactory.IdNode(null)); var sqlQryName = NfString.SafeDotNetIdentifier(storedProc); var returnsXe = XeFactory.ReturnNode(sqlQryName, className); foreach (var cMeta in returnedData[returnedData.Keys.First()]) { var simplePropName = Compose.PropertyName(cMeta.column_name, true); var simplePropColumn = NfString.ExtractLastWholeWord(cMeta.column_name, null); var simplePropDataType = Util.Lexicon.DotNet2HbmTypes[cMeta.data_type]; classXe.Add(XeFactory.PropertyNode(Globals.HbmXmlNames.PROPERTY, simplePropName, null, simplePropDataType, (cMeta.data_type == "System.String" ? Globals.MSSQL_MAX_VARCHAR.ToString(CultureInfo.InvariantCulture) : null), cMeta.is_nullable.HasValue && cMeta.is_nullable == true, string.Empty)); returnsXe.Add(XeFactory.ReturnPropertyNode(simplePropColumn, simplePropName)); } var sqlQryXe = XeFactory.SqlQueryNode(sqlQryName); sqlQryXe.Add(returnsXe); sqlQryXe.Add(new XCData(sp.ToHbmSql())); xe.Add(classXe); xe.Add(sqlQryXe); var hbmXmlOutputPath = Path.Combine(Settings.HbmStoredProcsDirectory, Compose.HbmFileName(storedProc.Replace(" ", Globals.REPLACE_SPACE_WITH_SEQUENCE))); var xmlContent = xe.ToString() .Replace("<hibernate-mapping>", "<hibernate-mapping xmlns=\"urn:nhibernate-mapping-2.2\">"); File.WriteAllText(hbmXmlOutputPath, xmlContent); CorrectHbmXmlDuplicateNames(hbmXmlOutputPath, true); return(hbmXmlOutputPath); }