249 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			249 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.Collections.Generic;
 | |
| using System.Text;
 | |
| using vlnObjectLibrary;
 | |
| using System.Xml;
 | |
| using System.IO;
 | |
| using System.Data;
 | |
| using System.Data.OleDb;
 | |
| using System.Reflection;
 | |
| 
 | |
| namespace vlnServerLibrary
 | |
| {
 | |
| 	public class vlnServer // This class loads children for a vlnObject
 | |
| 	{
 | |
|         #region Log4Net
 | |
|         private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
 | |
|         #endregion
 | |
| 		#region Static Properties
 | |
| 		private static string m_XmlControlPath = "vlnControl.xml";
 | |
| 		private static XmlDocument m_XmlControl;
 | |
| 		public static string XMLControlPath
 | |
| 		{
 | |
| 			get { return m_XmlControlPath; }
 | |
| 			set
 | |
| 			{
 | |
| 				m_XmlControlPath = value;
 | |
| 			}
 | |
| 		}
 | |
| 		public static XmlDocument XMLControl
 | |
| 		{
 | |
| 			get
 | |
| 			{
 | |
| 				if (m_XmlControl == null)
 | |
| 				{
 | |
| 					m_XmlControl = new XmlDocument();
 | |
| 					lock (m_XmlControl)
 | |
| 					{
 | |
| 						m_XmlControl.Load(m_XmlControlPath);
 | |
| 					}
 | |
| 				}
 | |
| 				return m_XmlControl;
 | |
| 			}
 | |
| 		}
 | |
| 		#endregion
 | |
| 		private List<vlnObject> LoadChildren(vlnObject o)
 | |
| 		{
 | |
| 			o.Children = new List<vlnObject>();
 | |
| 			LoadChildrenFromFolders(o);
 | |
| 			LoadChildrenFromDB(o,LookUp(o,"select"));
 | |
| 			return o.Children;
 | |
| 		}
 | |
| 		public string GetChildren(string sVlnObject)
 | |
| 		{
 | |
| 			using (vlnObject o = new vlnObject(sVlnObject))
 | |
| 			{
 | |
| 				LoadChildren(o);
 | |
| 				return o.AllChildren();
 | |
| 			}
 | |
| 		}
 | |
| 		public string GetDataPath()
 | |
| 		{
 | |
| 			vlnObject o = new vlnObject();
 | |
| 			o.Type="datapath";
 | |
| 			o.Title="Data Path";
 | |
| 			o.Path=LookUpX(o,".//default/@datapath");
 | |
| 			return o.ToString();
 | |
| 		}
 | |
| 		protected string LookUp(vlnObject o,string s)
 | |
| 		{
 | |
| 			string xPath = string.Format(".//dbObject[@type='{0}']/@{1}", o.Type, s);
 | |
| 			return LookUpX(o,xPath);
 | |
| 		}
 | |
| 		protected string LookUpP(vlnObject o,string s)
 | |
| 		{
 | |
| 			string xPath = string.Format(".//dbObject[@type='{0}']/@{1}", o.Parent.Type, s);
 | |
| 			return LookUpX(o,xPath);
 | |
| 		}
 | |
| 		protected string LookUpX(vlnObject o,string xPath)
 | |
| 		{
 | |
| 			return LookUpX(o,xPath, XMLControl);
 | |
| 		}
 | |
| 		private void LoadChildrenFromDB(vlnObject o,string sSelect)
 | |
| 		{
 | |
| 			if (sSelect != "")
 | |
| 			{
 | |
| 				try
 | |
| 				{
 | |
| 					string s = LookUpX(o,".//connection/@string");
 | |
| 					OleDbConnectionStringBuilder csb = new OleDbConnectionStringBuilder(s);
 | |
| 					OleDbConnection dbConn = new OleDbConnection(csb.ConnectionString);
 | |
| 					string sTable = LookUp(o,"table");
 | |
| 					//if (dbConn.State != ConnectionState.Open) dbConn.Open();
 | |
| 					OleDbDataAdapter da = new OleDbDataAdapter(sSelect, dbConn);
 | |
| 					DataSet ds = new DataSet();
 | |
| 					da.Fill(ds, sTable);
 | |
| 					string srt = LookUp(o,"sort");
 | |
| 					DataView dv = new DataView(ds.Tables[sTable], LookUp(o,"criteria"), LookUp(o,"sort"), DataViewRowState.CurrentRows);
 | |
| 					foreach (DataRowView mydrv in dv)
 | |
| 					{
 | |
| 						vlnObject vb = o.Add(LookUp(o,"child"), "", o.Path);
 | |
| 						foreach (DataColumn dc in dv.Table.Columns)
 | |
| 						{
 | |
| 							vb.AddProp(dc.ColumnName, mydrv[dc.ColumnName].ToString());
 | |
| 						}
 | |
| 						vb.Title = LookUpP(vb,"title");
 | |
| 						o.Children.Add(vb);
 | |
| 					}
 | |
| 				}
 | |
| 				catch (Exception ex)
 | |
| 				{
 | |
| 					log.ErrorFormat("{0}\r\n{1}", ex.Message, ex.InnerException);
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 		public DataSet GetDataSet(vlnObject o, string sSelect)
 | |
| 		{
 | |
| 			if (sSelect != "")
 | |
| 			{
 | |
| 				try
 | |
| 				{
 | |
| 					OleDbConnection dbConn = new OleDbConnection(LookUpX(o, ".//connection/@string"));
 | |
| 					OleDbDataAdapter da = new OleDbDataAdapter(sSelect, dbConn);
 | |
| 					DataSet ds = new DataSet();
 | |
| 					da.Fill(ds, LookUp(o, "table"));
 | |
| 					return ds;
 | |
| 				}
 | |
| 				catch (Exception ex)
 | |
| 				{
 | |
| 					log.ErrorFormat("{0}\r\n{1}", ex.Message, ex.InnerException);
 | |
| 				}
 | |
| 			}
 | |
| 			return null;
 | |
| 		}
 | |
| 		public OleDbDataReader GetDataReader(vlnObject o, string sSelect)
 | |
| 		{
 | |
| 			if (sSelect != "")
 | |
| 			{
 | |
| 				OleDbConnection dbConn = new OleDbConnection(LookUpX(o, ".//connection/@string"));
 | |
| 				OleDbCommand cmd = new OleDbCommand(sSelect, dbConn);
 | |
| 				cmd.CommandType = CommandType.Text;
 | |
| 				dbConn.Open();
 | |
| 				OleDbDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
 | |
| 				return dr;
 | |
| 			}
 | |
| 			return null;
 | |
| 		}
 | |
| 		private void LoadChildrenFromFolders(vlnObject o)
 | |
| 		{
 | |
| 			// First look in the XML to see if there are any folders for the specified item
 | |
| 			XmlNodeList nl = XMLControl.SelectNodes(string.Format(".//dbObject[@type='{0}']/folders/folder", o.Type));
 | |
| 			if (nl.Count != 0)
 | |
| 			{
 | |
| 				foreach (XmlNode xn in nl)
 | |
| 				{
 | |
| 					LoadChildrenFromFolder(o,xn);
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 		private void LoadChildrenFromFolder(vlnObject o, XmlNode xn)
 | |
| 		{
 | |
| 			// First look in the XML to see if there are any folders for the specified item
 | |
| 			string sTmp = LookUpX(o,"@template", xn);
 | |
| 			if (sTmp != "")
 | |
| 			{
 | |
| 				string sException = LookUpX(o,"@exception", xn);
 | |
| 				string sRequired = LookUpX(o,"@requires", xn);
 | |
| 				DirectoryInfo di = new DirectoryInfo(o.Path);
 | |
| 				if (sRequired == "" || di.GetFileSystemInfos(sRequired).Length > 0)
 | |
| 				{
 | |
| 					if (sException == "" || di.GetFileSystemInfos(sException).Length == 0)
 | |
| 					{
 | |
| 						try
 | |
| 						{
 | |
| 							if (sTmp == ".")
 | |
| 							{
 | |
| 								LoadChildrenFromFolder(o, xn, di);
 | |
| 							}
 | |
| 							else
 | |
| 							{
 | |
| 								if(sTmp.Contains("\\")){
 | |
| 									string[] sTmps = sTmp.Split('\\');
 | |
| 									DirectoryInfo [] dis = di.GetDirectories(sTmps[0]);
 | |
| 									foreach (DirectoryInfo di2 in dis)
 | |
| 									{
 | |
| 										foreach (FileSystemInfo di3 in di2.GetFileSystemInfos(sTmps[1]))
 | |
| 										{
 | |
| 											LoadChildrenFromFolder(o, xn, di3);
 | |
| 										}
 | |
| 									}
 | |
|    								}
 | |
| 								else
 | |
| 								{
 | |
| 								foreach (FileSystemInfo di1 in di.GetFileSystemInfos(sTmp))
 | |
| 								{
 | |
| 									LoadChildrenFromFolder(o, xn, di1);
 | |
| 								}
 | |
| 								}
 | |
| 							}
 | |
| 						}
 | |
| 						catch (DirectoryNotFoundException ex)
 | |
| 						{
 | |
| 							// Ignore this exception
 | |
| 							log.InfoFormat("Directory {0} Template {1} Error {2}",di, sTmp,ex.Message);
 | |
| 						}
 | |
| 						catch (Exception ex)
 | |
| 						{
 | |
| 							log.ErrorFormat("Error: {0}\r\n{1}", ex.Message, ex.InnerException);
 | |
| 						}
 | |
| 					}
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 		private void LoadChildrenFromFolder(vlnObject o,XmlNode xn, FileSystemInfo fi)
 | |
| 		{
 | |
| 			vlnObject vb = o.Add(LookUpX(o,"@child", xn), "", fi.FullName);
 | |
| 			vb.AddProp("filename", fi.Name);
 | |
| 			vb.Title = GetTitle(fi.FullName, LookUpX(vb,"@title", xn));
 | |
| 			o.Children.Add(vb);
 | |
| 		}
 | |
| 		protected string GetTitle(string sPath, string sDefault)
 | |
| 		{
 | |
| 			string sRetval = sDefault;
 | |
| 			if (sRetval[0] == '~')
 | |
| 			{
 | |
| 				string sTitlePath = sPath + "\\title";
 | |
| 				if (File.Exists(sTitlePath))
 | |
| 				{
 | |
| 					StreamReader sr = File.OpenText(sTitlePath);
 | |
| 					return sr.ReadToEnd();
 | |
| 				}
 | |
| 				sRetval = sRetval.Substring(1);
 | |
| 			}
 | |
| 			return sRetval;
 | |
| 		}
 | |
| 		protected string LookUpX(vlnObject o, string xPath, XmlNode xn)
 | |
| 		{
 | |
| 			XmlNode nd = xn;
 | |
| 			XmlNode ndf = nd.SelectSingleNode(xPath);
 | |
| 			while (ndf == null && nd.ParentNode != null)
 | |
| 			{
 | |
| 				nd = nd.ParentNode;
 | |
| 				ndf = nd.SelectSingleNode(xPath);
 | |
| 			}
 | |
| 			if (ndf == null) return "";
 | |
| 			return o.ProcessString(ndf.InnerText);
 | |
| 		}
 | |
| 	}
 | |
| }
 | 
