201 lines
7.3 KiB
C#
201 lines
7.3 KiB
C#
//-----------------------------------------------------------------------
|
|
// <copyright file="SpsModel.cs" company="BTU/IIT">
|
|
// Company copyright tag.
|
|
// </copyright>
|
|
// <author>stubbfel</author>
|
|
// <sience>08.08.2013</sience>
|
|
//----------------------------------------------------------------------
|
|
|
|
namespace CampusAppWPortalLib8.Model.GeoDb
|
|
{
|
|
using System.Collections.Generic;
|
|
using System.Collections.ObjectModel;
|
|
using System.Linq;
|
|
using System.Xml.Serialization;
|
|
|
|
/// <summary>
|
|
/// Model for a xml-response of the SPSService
|
|
/// </summary>
|
|
[XmlRoot("root")]
|
|
public class SpsModel
|
|
{
|
|
/// <summary>Initializes a new instance of the SpsModel class.</summary>
|
|
/// <remarks>Stubbfel, 20.08.2013.</remarks>
|
|
public SpsModel()
|
|
{
|
|
this.HasChanged = false;
|
|
this.Places = new ObservableCollection<PlaceModel>();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets or sets a list of places
|
|
/// </summary>
|
|
[XmlElement("place")]
|
|
public ObservableCollection<PlaceModel> Places { get; set; }
|
|
|
|
/// <summary>Gets a value indicating whether this object has changed.</summary>
|
|
/// <value>true if this object has changed, false if not.</value>
|
|
public bool HasChanged { get; set; }
|
|
|
|
/// <summary>Gets places by information.</summary>
|
|
/// <remarks>Stubbfel, 19.08.2013.</remarks>
|
|
/// <param name="query"> The query.</param>
|
|
/// <param name="ignoreCases"> (Optional) the ignore cases.</param>
|
|
/// <param name="informationName">(Optional) name of the information.</param>
|
|
/// <returns>The places by information.</returns>
|
|
public List<PlaceModel> GetPlacesByInformation(string query, bool ignoreCases = true, string informationName = null)
|
|
{
|
|
string querryLow = string.Empty;
|
|
IEnumerable<PlaceModel> resultplaces = null;
|
|
|
|
// select correct statement
|
|
if (ignoreCases && informationName == null)
|
|
{
|
|
querryLow = query.ToLower();
|
|
resultplaces = from place in this.Places
|
|
from info in place.Informations
|
|
where info.InformationValue.ToLower().Contains(querryLow)
|
|
select place;
|
|
}
|
|
else if (ignoreCases && informationName != null)
|
|
{
|
|
querryLow = query.ToLower();
|
|
resultplaces = from place in this.Places
|
|
from info in place.Informations
|
|
where info.InformationValue.ToLower().Contains(querryLow) && info.InformationName.Equals(informationName)
|
|
select place;
|
|
}
|
|
else if (!ignoreCases && informationName == null)
|
|
{
|
|
resultplaces = from place in this.Places
|
|
from info in place.Informations
|
|
where info.InformationValue.Contains(querryLow)
|
|
select place;
|
|
}
|
|
else if (!ignoreCases && informationName != null)
|
|
{
|
|
resultplaces = from place in this.Places
|
|
from info in place.Informations
|
|
where info.InformationValue.Contains(querryLow) && info.InformationName.Equals(informationName)
|
|
select place;
|
|
}
|
|
|
|
// null assert
|
|
if (resultplaces == null)
|
|
{
|
|
return null;
|
|
}
|
|
|
|
return resultplaces.ToList<PlaceModel>();
|
|
}
|
|
|
|
/// <summary>Adds the places.</summary>
|
|
/// <remarks>Stubbfel, 09.09.2013.</remarks>
|
|
/// <param name="places">A list of places.</param>
|
|
public void AddPlaces(List<PlaceModel> places)
|
|
{
|
|
foreach (PlaceModel place in places)
|
|
{
|
|
if (this.Places.Contains(place))
|
|
{
|
|
int index = this.Places.IndexOf(place);
|
|
this.Places[index].AddPlaceInformations(place.Informations.ToList());
|
|
this.Places[index].AddPlaceServices(place.Services.ToList());
|
|
}
|
|
else
|
|
{
|
|
this.Places.Add(place);
|
|
}
|
|
}
|
|
this.HasChanged = true;
|
|
}
|
|
|
|
/// <summary>Creates PID list.</summary>
|
|
/// <remarks>Stubbfel, 09.09.2013.</remarks>
|
|
/// <returns>The new PID list.</returns>
|
|
public List<string> CreatePidList()
|
|
{
|
|
List<string> pidList = new List<string>();
|
|
foreach (PlaceModel place in this.Places)
|
|
{
|
|
pidList.Add(place.PlaceId);
|
|
}
|
|
|
|
return pidList;
|
|
}
|
|
|
|
/// <summary>Gets place by identifier.</summary>
|
|
/// <remarks>Stubbfel, 09.09.2013.</remarks>
|
|
/// <param name="id">The identifier.</param>
|
|
/// <returns>The place by identifier.</returns>
|
|
public PlaceModel GetPlaceById(string id)
|
|
{
|
|
foreach (PlaceModel place in this.Places)
|
|
{
|
|
if (place.PlaceId.Equals(id))
|
|
{
|
|
return place;
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
/// <summary>Query if 'pidList' contains information names.</summary>
|
|
/// <remarks>Stubbfel, 09.09.2013.</remarks>
|
|
/// <param name="pidList">List of pids.</param>
|
|
/// <param name="names"> The names.</param>
|
|
/// <returns>true if it succeeds, false if it fails.</returns>
|
|
public bool ContainsInformationNames(List<string> pidList, List<string> names)
|
|
{
|
|
foreach (string pid in pidList)
|
|
{
|
|
PlaceModel place = this.GetPlaceById(pid);
|
|
if (!place.ContainsInformationNames(names))
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/// <summary>Query if 'pidList' contains service names.</summary>
|
|
/// <remarks>Stubbfel, 09.09.2013.</remarks>
|
|
/// <param name="pidList">List of pids.</param>
|
|
/// <param name="names"> The names.</param>
|
|
/// <returns>true if it succeeds, false if it fails.</returns>
|
|
public bool ContainsServiceNames(List<string> pidList, List<string> names)
|
|
{
|
|
foreach (string pid in pidList)
|
|
{
|
|
PlaceModel place = this.GetPlaceById(pid);
|
|
if (!place.ContainsServiceNames(names))
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/// <summary>Filter by PID.</summary>
|
|
/// <remarks>Stubbfel, 11.09.2013.</remarks>
|
|
/// <param name="pidList">List of pids.</param>
|
|
/// <returns>flitered list of places</returns>
|
|
public List<PlaceModel> FilterByPid(List<string> pidList)
|
|
{
|
|
List<PlaceModel> fitlerList = new List<PlaceModel>();
|
|
foreach (PlaceModel place in this.Places)
|
|
{
|
|
if (pidList.Contains(place.PlaceId))
|
|
{
|
|
fitlerList.Add(place);
|
|
}
|
|
}
|
|
|
|
return fitlerList;
|
|
}
|
|
}
|
|
}
|