95 lines
3.0 KiB
C#
95 lines
3.0 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Windows.Forms;
|
|
using System.Xml.Serialization;
|
|
using NHibernate;
|
|
using Results.Entities;
|
|
using ResultsBrowser.Resources;
|
|
|
|
namespace ResultsBrowser.Filters
|
|
{
|
|
public class SerialNrFilter : IFilter
|
|
{
|
|
public static string GetFilterID() { return "SerialNr"; }
|
|
public static string GetFilterName() { return Strings.Serial_Number; }
|
|
|
|
///
|
|
/// Obligatory wrappers
|
|
///
|
|
public string GetThisFilterID() { return GetFilterID(); }
|
|
public void Save(StringBuilder sb) { (new XmlSerializer(this.GetType())).Serialize(new StringWriter(sb), this); }
|
|
public void Data2UI() { userIface.Data2UI(); }
|
|
public void UI2Data() { userIface.UI2Data(); }
|
|
public UserControl GetFilterUI() { return userIface as UserControl; }
|
|
|
|
///
|
|
/// Serialized filter data
|
|
///
|
|
public string SerialNr;
|
|
|
|
private SerialNrFilterUI userIface;
|
|
|
|
public SerialNrFilter()
|
|
{
|
|
userIface = new SerialNrFilterUI(this);
|
|
}
|
|
|
|
public IList<WaterMeter> ExecuteQuery(ISession[] sessions, IList<WaterMeter> waterMeters)
|
|
{
|
|
IList<WaterMeter> filteredWaterMeters = new List<WaterMeter>();
|
|
|
|
if (string.IsNullOrEmpty(SerialNr)) return filteredWaterMeters; /// Empty s/n => Return an empty list of WM-s
|
|
|
|
IList<string> serialNumbers = new List<string>();
|
|
///
|
|
if (SerialNr[0] == '@')
|
|
{
|
|
try
|
|
{
|
|
TextReader rdr = new StreamReader(SerialNr.Substring(1));
|
|
string line = rdr.ReadLine();
|
|
while (!string.IsNullOrEmpty(line))
|
|
{
|
|
serialNumbers.Add(line);
|
|
line = rdr.ReadLine();
|
|
}
|
|
}
|
|
catch (Exception)
|
|
{
|
|
return filteredWaterMeters;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
serialNumbers.Add(SerialNr);
|
|
}
|
|
|
|
if (waterMeters == null)
|
|
{
|
|
foreach (var se in sessions)
|
|
{
|
|
foreach (var oneSerialNr in serialNumbers)
|
|
{
|
|
IList<WaterMeter> wms = se.QueryOver<WaterMeter>()
|
|
.Where(x => (x.SerialNr == oneSerialNr))
|
|
.List<WaterMeter>();
|
|
foreach (var wm in wms) filteredWaterMeters.Add(wm);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
foreach (var wm in waterMeters)
|
|
{
|
|
if (serialNumbers.Contains(wm.SerialNr)) filteredWaterMeters.Add(wm);
|
|
}
|
|
}
|
|
|
|
return filteredWaterMeters;
|
|
}
|
|
}
|
|
}
|