📄 celldb.cs
字号:
using System;
using System.Data;
using System.IO;
using System.Xml;
using NiceTracker.Libraries;
namespace NiceTracker
{
/// <summary>
/// Summary description for CellDB.
/// </summary>
public class CellDB
{
public const string Filename = "cells.xml";
private static DataSet dsData = new DataSet( "data" );
private static DataTable dtCells = null;
private static DataTable dtAreas = null;
public CellDB()
{
}
public const string CELL_UNKNOWN = "Unknown";
public const string AREA_UNKNOWN = "Unknown";
public const string CELL_NO_NAME = "<No name>";
public const string AREA_NO_NAME = "<No name>";
public static void Load()
{
string fullFilename = MiscLib.ToFilename( DBPath, Filename );
if ( !File.Exists( fullFilename ) )
{
dtCells = setupCellDB( dsData );
dtAreas = setupAreaDB( dsData );
dsData.WriteXml( fullFilename );
}
else
{
dsData.ReadXml( fullFilename );
dtCells = setupCellDB( dsData );
dtAreas = setupAreaDB( dsData );
}
// Ensure that relational data is correct
mergeDataTables();
// Ensure that defaulted data is present
setDefaultsInDataTables();
}
public static void Save()
{
string fullFilename = MiscLib.ToFilename( DBPath, Filename );
dsData.WriteXml( fullFilename );
}
private static DataTable setupCellDB( DataSet ds )
{
DataTable dt = null;
if ( ds.Tables.Contains( "cells" ) )
dt = ds.Tables[ "cells" ];
else
{
dt = new DataTable( "cells" );
ds.Tables.Add( dt );
}
if ( !dt.Columns.Contains( "description" ) )
dt.Columns.Add( "description", typeof( string ) );
if ( !dt.Columns.Contains( "lac" ) )
dt.Columns.Add( "lac", typeof( string ) );
if ( !dt.Columns.Contains( "ci" ) )
dt.Columns.Add( "ci", typeof( string ) );
if ( !dt.Columns.Contains( "operator" ) )
dt.Columns.Add( "operator", typeof( string ) );
return dt;
}
private static DataTable setupAreaDB( DataSet ds )
{
DataTable dt = null;
if ( ds.Tables.Contains( "areas" ) )
dt = ds.Tables[ "areas" ];
else
{
dt = new DataTable( "areas" );
ds.Tables.Add( dt );
}
if ( !dt.Columns.Contains( "description" ) )
dt.Columns.Add( "description", typeof( string ) );
if ( !dt.Columns.Contains( "lac" ) )
dt.Columns.Add( "lac", typeof( string ) );
if ( !dt.Columns.Contains( "operator" ) )
dt.Columns.Add( "operator", typeof( string ) );
return dt;
}
public static bool IsNewCell( string LAC, string CI )
{
DataRow[] rows = dtCells.Select( "lac='" + LAC + "' and ci='" + CI + "'" );
return ( rows.Length == 0 );
}
public static bool IsNewArea( string LAC )
{
DataRow[] rows = dtAreas.Select( "lac='" + LAC + "'" );
return ( rows.Length == 0 );
}
public static string GetCellDescription( GSMCell cell )
{
return GetCellDescription( cell.LAC, cell.CI );
}
public static string GetCellDescription( string LAC, string CI )
{
DataRow[] rows = dtCells.Select( "lac='" + LAC + "' and ci='" + CI + "'" );
if ( rows.Length >= 1 )
return rows[0]["description"].ToString();
else
return CELL_UNKNOWN;
}
public static string GetAreaDescription( GSMCell cell )
{
return GetAreaDescription( cell.LAC, cell.CI );
}
public static string GetAreaDescription( string LAC, string CI )
{
DataRow[] rows = dtAreas.Select( "lac='" + LAC + "'" );
if ( rows.Length >= 1 )
return rows[0]["description"].ToString();
else
return AREA_UNKNOWN;
}
public static void AddNewCell( string LAC, string CI )
{
AddNewCell( LAC, CI, CELL_NO_NAME );
}
public static void AddNewCell( string LAC, string CI, string description )
{
DataRow dr = dtCells.NewRow();
dr[ "lac" ] = LAC;
dr[ "ci" ] = CI;
dr[ "description" ] = description;
dr[ "operator" ] = CellTrack.OperatorCode;
dtCells.Rows.Add( dr );
}
public static void AddNewArea( string LAC, string description )
{
DataRow dr = dtAreas.NewRow();
dr[ "lac" ] = LAC;
dr[ "description" ] = description;
dr[ "operator" ] = CellTrack.OperatorCode;
dtAreas.Rows.Add( dr );
}
public static void AddNewArea( string LAC )
{
AddNewArea( LAC, AREA_NO_NAME );
}
public static void ImportCells( XmlDocument xmlDoc )
{
foreach ( XmlNode cellNode in xmlDoc.DocumentElement.ChildNodes )
{
if ( cellNode.Name == "cells" )
{
string oper = "";
string lac = "";
string ci = "";
string description = "";
foreach ( XmlNode dataNode in cellNode.ChildNodes )
{
if ( dataNode.Name == "operator" )
oper = dataNode.InnerText;
else if ( dataNode.Name == "lac" )
lac = dataNode.InnerText;
else if ( dataNode.Name == "ci" )
ci = dataNode.InnerText;
else if ( dataNode.Name == "description" )
description = dataNode.InnerText;
}
if ( oper != "" &&
lac != "" &&
ci != "" &&
description != "" )
{
if ( IsNewCell( lac, ci ) )
AddNewCell( lac, ci, description );
}
}
}
}
public static void ImportAreas( XmlDocument xmlDoc )
{
foreach ( XmlNode cellNode in xmlDoc.DocumentElement.ChildNodes )
{
if ( cellNode.Name == "areas" )
{
string oper = "";
string lac = "";
string description = "";
foreach ( XmlNode dataNode in cellNode.ChildNodes )
{
if ( dataNode.Name == "operator" )
oper = dataNode.InnerText;
else if ( dataNode.Name == "lac" )
lac = dataNode.InnerText;
else if ( dataNode.Name == "description" )
description = dataNode.InnerText;
}
if ( oper != "" &&
lac != "" &&
description != "" )
{
if ( IsNewArea( lac ) )
AddNewArea( lac, description );
}
}
}
}
private static void mergeDataTables()
{
foreach ( DataRow dr in dtCells.Rows )
{
string description = dr[ "description" ].ToString();
string lac = dr[ "lac" ].ToString();
if ( IsNewArea( lac ) )
{
AddNewArea( lac, description );
}
}
}
private static void setDefaultsInDataTables()
{
foreach ( DataRow dr in dtAreas.Rows )
{
dr[ "lac" ] = dr[ "lac" ].ToString().Replace( " ", "" );
if ( dr[ "operator" ] == DBNull.Value )
dr[ "operator" ] = CellTrack.OperatorCode;
}
foreach ( DataRow dr in dtCells.Rows )
{
dr[ "lac" ] = dr[ "lac" ].ToString().Replace( " ", "" );
dr[ "ci" ] = dr[ "ci" ].ToString().Replace( " ", "" );
if ( dr[ "operator" ] == DBNull.Value )
dr[ "operator" ] = CellTrack.OperatorCode;
}
}
public static DataTable DTCells
{
get
{
return dtCells;
}
}
public static DataTable DTAreas
{
get
{
return dtAreas;
}
}
public static string DBPath
{
get
{
return Config.ConfigManager.DBLocation;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -