public FK[] TableFKs() { System.Collections.Generic.List <FK> _output = new System.Collections.Generic.List <FK>(); XS_objectType _table_a; string _tableName_a; string _tableFieldName_a; XS_objectType _table_b; string _tableName_b; string _tableFieldName_b; string _direction; XS_objectTypeCollection _objecttypecollection = (XS_objectTypeCollection)this.parent_ref; XS_layerType _layertype = (XS_layerType)_objecttypecollection.parent_ref; XS_layerTypeCollection _layertypecollection = (XS_layerTypeCollection)_layertype.parent_ref; XS__diagram _root_ref = (XS__diagram)_layertypecollection.parent_ref; for (int l = 0; l < _root_ref.LayerCollection.Count; l++) { for (int o = 0; o < _root_ref.LayerCollection[l].ObjectCollection.Count; o++) { switch (_root_ref.LayerCollection[l].ObjectCollection[o].Type) { case "UML - Association": if (_root_ref.LayerCollection[l].ObjectCollection[o].Connections.ConnectionCollection.Count != 2) { break; } _table_a = null; _tableName_a = ""; _tableFieldName_a = ""; _table_b = null; _tableName_b = ""; _tableFieldName_b = ""; _direction = ""; for (int a = 0; a < _root_ref.LayerCollection[l].ObjectCollection[o].AttributeCollection.Count; a++) { switch (_root_ref.LayerCollection[l].ObjectCollection[o].AttributeCollection[a].Name) { case "direction": _direction = _root_ref.LayerCollection[l].ObjectCollection[o].AttributeCollection[a].Enum.Val; break; case "role_a": _table_a = _root_ref.Table_search( _root_ref.LayerCollection[l].ObjectCollection[o].Connections.ConnectionCollection[0].To ); _tableName_a = _table_a.TableName; _tableFieldName_a = _root_ref.LayerCollection[l].ObjectCollection[o].AttributeCollection[a].String.Replace("#", ""); break; case "role_b": _table_b = _root_ref.Table_search( _root_ref.LayerCollection[l].ObjectCollection[o].Connections.ConnectionCollection[1].To ); _tableName_b = _table_b.TableName; _tableFieldName_b = _root_ref.LayerCollection[l].ObjectCollection[o].AttributeCollection[a].String.Replace("#", ""); break; } } if ( (_table_a == this) && (_direction == "2") ) { _output.Add(new FK( _tableFieldName_a, _tableName_b, _tableFieldName_b )); } if ( (_table_b == this) && (_direction == "1") ) { _output.Add(new FK( _tableFieldName_b, _tableName_a, _tableFieldName_a )); } break; } } } return(_output.ToArray()); }
// public void New( // string applicationPath_in, // string documentationName_in, // dNotifyBack notifyBack_in // ) { // if (notifyBack_in != null) notifyBack_in("creating...", true); // #region DocMetadata _metadata_temp = new DocMetadata(); ...; // XS__documentation _metadata_temp = new XS__documentation(); // _metadata_temp.DocumentationName = documentationName_in; // #endregion // // if (notifyBack_in != null) notifyBack_in("- generating xml file", true); // #region string _xmlfile = ...; // string _xmlfile = string.Format( // "{0}{1}OGenDoc-metadatas{1}MD_{2}.OGenDoc-metadata.xml", // /*0*/applicationPath_in, // /*1*/System.IO.Path.DirectorySeparatorChar, // /*2*/documentationName_in // ); // #endregion // _metadata_temp.SaveState_toFile(_xmlfile); // // if (notifyBack_in != null) notifyBack_in("... finished!", true); // if (notifyBack_in != null) notifyBack_in("", true); // // Open( // _xmlfile, // true, // notifyBack_in // ); // } #endregion #region public void Open(...); public void Open( string filename_in, bool force_doNOTsave_in, dNotifyBack notifyBack_in ) { #region Checking... if (this.hasChanges) { if (!force_doNOTsave_in) { throw new Exception(string.Format( "{0}.{1}.Open(): - must save before open", this.GetType().Namespace, this.GetType().Name )); } } #endregion filename_ = filename_in; if (notifyBack_in != null) notifyBack_in("opening...", true); if (notifyBack_in != null) notifyBack_in("- reading metadata from xml file", true); diagram_ = XS__diagram.Load_fromFile( filename_ )[0]; diagram_.FilePath = filename_; if (notifyBack_in != null) notifyBack_in("... finished", true); #region more Checking... if (notifyBack_in != null) notifyBack_in("checking...", true); OGen.lib.datalayer.PostgreSQL.DBUtils_convert_Postgresql _utils_pgsql = new OGen.lib.datalayer.PostgreSQL.DBUtils_convert_Postgresql(); OGen.lib.datalayer.SQLServer.DBUtils_convert_SQLServer _utils_sqls = new OGen.lib.datalayer.SQLServer.DBUtils_convert_SQLServer(); Nullable<System.Data.DbType> _dbtype_psql; Nullable<System.Data.DbType> _dbtype_sqls; bool _isUsingPostgreSQL = false; bool _isUsingSQLServer = false; DBTableField[] _dbtablefields; DBTableField[] _dbtablefields2; XS_objectType.FK[] __fks; System.Collections.Generic.Dictionary<string, XS_objectType.FK> _fks; bool _foundFKTable; bool _foundFKField; for (int l = 0; l < diagram_.LayerCollection.Count; l++) { for (int o = 0; o < diagram_.LayerCollection[l].ObjectCollection.Count; o++) { _dbtablefields = diagram_.Table_search(l, o).TableFields(); diagram_.Table_search(l, o).TableFKs( out __fks, out _fks ); #region checking for invalid foreign keys if ( _fks.ContainsKey("") ) { throw new Exception(string.Format( "invalid foreign key at table: {0}.? -> {1}.?", diagram_.Table_search(l, o).TableName, _fks[""].FK_TableName )); } #endregion #region _isUsingPostgreSQL = ...; _isUsingSQLServer = ...; for (int f = 0; f < _dbtablefields.Length; f++) { if ( (_dbtablefields[f].PostgreSQLTypeName != null) && (_dbtablefields[f].PostgreSQLTypeName.Trim() != "") ) { _isUsingPostgreSQL = true; } if ( (_dbtablefields[f].SQLServerTypeName != null) && (_dbtablefields[f].SQLServerTypeName.Trim() != "") ) { _isUsingSQLServer = true; } if ( _isUsingPostgreSQL && _isUsingSQLServer ) { break; } } #endregion for (int f = 0; f < _dbtablefields.Length; f++) { #region checking if db server type supported if ( !_isUsingPostgreSQL && !_isUsingSQLServer ) { throw new Exception(string.Format( "no db type defined (should use at least one of the supported db servers: PostgreSQL or SQLServer)", _dbtablefields[f].TableName, _dbtablefields[f].Name )); } #endregion #region checking postgresql field type . . . _dbtype_psql = null; if ( _isUsingPostgreSQL ) { if ( (_dbtablefields[f].PostgreSQLTypeName == null) || (_dbtablefields[f].PostgreSQLTypeName.Trim() == "") ) { throw new Exception(string.Format( "invalid table field type - empty postgresql type: {0}.{1}", _dbtablefields[f].TableName, _dbtablefields[f].Name )); } _dbtype_psql = _utils_pgsql.XDbType2DbType( _utils_pgsql.XDbType_Parse( _dbtablefields[f].PostgreSQLTypeName, false ) ); } #endregion #region checking sql server field type . . . _dbtype_sqls = null; if ( _isUsingSQLServer ) { if ( (_dbtablefields[f].SQLServerTypeName == null) || (_dbtablefields[f].SQLServerTypeName.Trim() == "") ) { throw new Exception(string.Format( "invalid table field type - empty sql server type: {0}.{1}", _dbtablefields[f].TableName, _dbtablefields[f].Name )); } _dbtype_sqls = _utils_sqls.XDbType2DbType( _utils_sqls.XDbType_Parse( _dbtablefields[f].SQLServerTypeName, false ) ); } #endregion #region checking if field types match . . . if ( _isUsingPostgreSQL && _isUsingSQLServer ) { if ( (_dbtype_psql == null) || (_dbtype_sqls == null) || ( _dbtype_psql.Value != _dbtype_sqls.Value ) ) { throw new Exception(string.Format( "table field types don't match: {0}.{1}", _dbtablefields[f].TableName, _dbtablefields[f].Name )); } } #endregion #region //checking FKs . . . //if ( // (_dbtablefields[f].FK_TableName != null) // && // (_dbtablefields[f].FK_TableName.Trim() != "") //) { // _foundFKTable = false; // _foundFKField = false; // for (int l2 = 0; l2 < diagram_.LayerCollection.Count; l2++) { // for (int o2 = 0; o2 < diagram_.LayerCollection[l2].ObjectCollection.Count; o2++) { // if ( // diagram_.Table_search(l2, o2).TableName // == // _dbtablefields[f].FK_TableName // ) { // _dbtablefields2 = diagram_.Table_search(l2, o2).TableFields(); // for (int f2 = 0; f2 < _dbtablefields2.Length; f2++) { // if ( // _dbtablefields2[f2].Name // == // _dbtablefields[f].FK_FieldName // ) { // if ( // _dbtablefields2[f2].PostgreSQLTypeName // != // _dbtablefields[f].PostgreSQLTypeName // ) { // throw new Exception(string.Format( // "foreign key postgresql db type mismatch: {0}.{1}", // _dbtablefields[f].FK_TableName, // _dbtablefields[f].FK_FieldName // )); // } // if ( // _dbtablefields2[f2].SQLServerTypeName // != // _dbtablefields[f].SQLServerTypeName // ) { // throw new Exception(string.Format( // "foreign key sql server db type mismatch: {0}.{1}", // _dbtablefields[f].FK_TableName, // _dbtablefields[f].FK_FieldName // )); // } // _foundFKField = true; // break; // } // } // _foundFKTable = true; // break; // } // } // } // if (!_foundFKTable) { // throw new Exception(string.Format( // "can't find foreign key TABLE: {0}.{1}", // _dbtablefields[f].FK_TableName, // _dbtablefields[f].FK_FieldName // )); // } // if (!_foundFKField) { // throw new Exception(string.Format( // "can't find foreign key FIELD: {0}.{1}", // _dbtablefields[f].FK_TableName, // _dbtablefields[f].FK_FieldName // )); // } //} #endregion #region checking FKs . . . if ( _fks.ContainsKey( _dbtablefields[f].Name ) ) { _foundFKTable = false; _foundFKField = false; for (int l2 = 0; l2 < diagram_.LayerCollection.Count; l2++) { for (int o2 = 0; o2 < diagram_.LayerCollection[l2].ObjectCollection.Count; o2++) { if ( diagram_.Table_search(l2, o2).TableName == _fks[_dbtablefields[f].Name].FK_TableName ) { _dbtablefields2 = diagram_.Table_search(l2, o2).TableFields(); for (int f2 = 0; f2 < _dbtablefields2.Length; f2++) { if ( _dbtablefields2[f2].Name == _fks[_dbtablefields[f].Name].FK_TableFieldName ) { if ( ( (_dbtablefields2[f2].PostgreSQLTypeName == null) != (_dbtablefields[f].PostgreSQLTypeName == null) ) || ( //_dbtablefields2[f2].PostgreSQLTypeName //!= //_dbtablefields[f].PostgreSQLTypeName !( (_dbtablefields2[f2].PostgreSQLTypeName == _dbtablefields[f].PostgreSQLTypeName) || ( (_dbtablefields2[f2].PostgreSQLTypeName == "serial") && (_dbtablefields[f].PostgreSQLTypeName == "integer") ) || ( (_dbtablefields[f].PostgreSQLTypeName == "serial") && (_dbtablefields2[f2].PostgreSQLTypeName == "integer") ) || ( (_dbtablefields2[f2].PostgreSQLTypeName == "bigserial") && (_dbtablefields[f].PostgreSQLTypeName == "bigint") ) || ( (_dbtablefields[f].PostgreSQLTypeName == "bigserial") && (_dbtablefields2[f2].PostgreSQLTypeName == "bigint") ) ) ) ) { throw new Exception(string.Format( "foreign key postgresql db type mismatch: {0}.{1} -> {2}.{3}", diagram_.Table_search(l, o).TableName, _dbtablefields[f].Name, _fks[_dbtablefields[f].Name].FK_TableName, _fks[_dbtablefields[f].Name].FK_TableFieldName )); } if ( ( (_dbtablefields2[f2].SQLServerTypeName == null) != (_dbtablefields[f].SQLServerTypeName == null) ) || ( _dbtablefields2[f2].SQLServerTypeName != _dbtablefields[f].SQLServerTypeName ) ) { throw new Exception(string.Format( "foreign key sql server db type mismatch: {0}.{1} -> {2}.{3}", diagram_.Table_search(l, o).TableName, _dbtablefields[f].Name, _fks[_dbtablefields[f].Name].FK_TableName, _fks[_dbtablefields[f].Name].FK_TableFieldName )); } _foundFKField = true; break; } } _foundFKTable = true; break; } } } if (!_foundFKTable) { throw new Exception(string.Format( "can't find foreign key TABLE: {0}.{1} -> {2}.{3}", diagram_.Table_search(l, o).TableName, _dbtablefields[f].Name, _fks[_dbtablefields[f].Name].FK_TableName, _fks[_dbtablefields[f].Name].FK_TableFieldName )); } if (!_foundFKField) { throw new Exception(string.Format( "can't find foreign key FIELD: {0}.{1} -> {2}.{3}", diagram_.Table_search(l, o).TableName, _dbtablefields[f].Name, _fks[_dbtablefields[f].Name].FK_TableName, _fks[_dbtablefields[f].Name].FK_TableFieldName )); } } #endregion } } } if (notifyBack_in != null) notifyBack_in("... finished", true); #endregion }
public void TableForeignKeys( out OGen.Dia.Libraries.Metadata.Diagram.ForeignKey[] foreignKeys_out, out System.Collections.Generic.Dictionary <string, OGen.Dia.Libraries.Metadata.Diagram.ForeignKey> foreignKeys_dic_out ) { System.Collections.Generic.List <OGen.Dia.Libraries.Metadata.Diagram.ForeignKey> _output = new System.Collections.Generic.List <OGen.Dia.Libraries.Metadata.Diagram.ForeignKey>(); System.Collections.Generic.Dictionary <string, OGen.Dia.Libraries.Metadata.Diagram.ForeignKey> _output2 = new System.Collections.Generic.Dictionary <string, OGen.Dia.Libraries.Metadata.Diagram.ForeignKey>(); XS_objectType _table_a; string _tableName_a; string _tableFieldName_a; XS_objectType _table_b; string _tableName_b; string _tableFieldName_b; string _direction; XS_objectTypeCollection _objecttypecollection = (XS_objectTypeCollection)this.parent_ref; XS_layerType _layertype = (XS_layerType)_objecttypecollection.parent_ref; XS_layerTypeCollection _layertypecollection = (XS_layerTypeCollection)_layertype.parent_ref; XS__diagram _root_ref = (XS__diagram)_layertypecollection.parent_ref; OGen.Dia.Libraries.Metadata.Diagram.ForeignKey _aux; for (int l = 0; l < _root_ref.LayerCollection.Count; l++) { for (int o = 0; o < _root_ref.LayerCollection[l].ObjectCollection.Count; o++) { switch (_root_ref.LayerCollection[l].ObjectCollection[o].Type) { case "UML - Association": if (_root_ref.LayerCollection[l].ObjectCollection[o].Connections.ConnectionCollection.Count != 2) { break; } _table_a = null; _tableName_a = ""; _tableFieldName_a = ""; _table_b = null; _tableName_b = ""; _tableFieldName_b = ""; _direction = ""; for (int a = 0; a < _root_ref.LayerCollection[l].ObjectCollection[o].AttributeCollection.Count; a++) { switch (_root_ref.LayerCollection[l].ObjectCollection[o].AttributeCollection[a].Name) { case "direction": _direction = _root_ref.LayerCollection[l].ObjectCollection[o].AttributeCollection[a].Enum.Value; break; case "role_a": _table_a = _root_ref.Table_search( _root_ref.LayerCollection[l].ObjectCollection[o].Connections.ConnectionCollection[0].To ); _tableName_a = _table_a.TableName; _tableFieldName_a = _root_ref.LayerCollection[l].ObjectCollection[o].AttributeCollection[a].String.Replace("#", ""); break; case "role_b": _table_b = _root_ref.Table_search( _root_ref.LayerCollection[l].ObjectCollection[o].Connections.ConnectionCollection[1].To ); _tableName_b = _table_b.TableName; _tableFieldName_b = _root_ref.LayerCollection[l].ObjectCollection[o].AttributeCollection[a].String.Replace("#", ""); break; } } if ( (_table_a == this) && (_direction == "1") ) { _output2.Add( _tableFieldName_a, _aux = new OGen.Dia.Libraries.Metadata.Diagram.ForeignKey( _tableFieldName_a, _tableName_b, _tableFieldName_b ) ); _output.Add(_aux); } if ( (_table_b == this) && (_direction == "2") ) { _output2.Add( _tableFieldName_b, _aux = new OGen.Dia.Libraries.Metadata.Diagram.ForeignKey( _tableFieldName_b, _tableName_a, _tableFieldName_a ) ); _output.Add(_aux); } break; } } } foreignKeys_dic_out = _output2; foreignKeys_out = _output.ToArray(); //return _output.ToArray(); }