Advertisement
Guest User

TrainService

a guest
Mar 16th, 2016
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 11.36 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Runtime.Serialization;
  5. using System.ServiceModel;
  6. using System.ServiceModel.Web;
  7. using System.Text;
  8. using System.Web.Hosting;
  9. using System.Xml.Linq;
  10. using IIProjectService.EventAndMasterServiceReference;
  11. using System.Globalization;
  12.  
  13. namespace IIProjectService
  14. {
  15.     // NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "Service1" in code, svc and config file together.
  16.     // NOTE: In order to launch WCF Test Client for testing this service, please select Service1.svc or Service1.svc.cs at the Solution Explorer and start debugging.
  17.     public class TrainService : ITrainService
  18.     {
  19.         string appDataFolder;
  20.         EpcisEventServiceClient eventService;
  21.         NamingServiceClient namingService;
  22.         //XElement xml;
  23.        
  24.         public TrainService()
  25.         {
  26.             appDataFolder = HostingEnvironment.MapPath("/App_Data/");
  27.             eventService = new EpcisEventServiceClient();
  28.             namingService = new NamingServiceClient();
  29.         }
  30.        
  31.         public IEnumerable<XElement> Test()
  32.         {
  33.             EpcisEventServiceClient test = new EpcisEventServiceClient();
  34.             string plats = "urn:epc:id:sgln:735999271.000.13";
  35.             DateTime from = new DateTime(2011,03,25);
  36.             DateTime to = new DateTime(2011,11,10);
  37.             IEnumerable<XElement> result = (IEnumerable<XElement>)test.GetEvents(from, to, plats);
  38.             XElement locations = new XElement("Locations",
  39.                                     new XElement("Plats", "Goteborg"),
  40.                                     new XElement("Plats", "Falkoping"));
  41.             XElement test3 = CreateVehicle("urn:epc:id:giai:123456.1847447213244");
  42.             //XElement test2 = GetTrainData(from, to, locations, "lukas", "hej");
  43.             //bool existingUser = UserAuthorization("Lukas", "123456");
  44.             //bool wrongPassword = UserAuthorization("Lukas", "12346");
  45.             //bool nonExistingUser = UserAuthorization("dsa", "sada");
  46.             return result;
  47.         }
  48.        
  49.  
  50.  
  51.  
  52.         public XElement GetTrainData(XElement request)
  53.         {
  54.  
  55.             DateTime from = Convert.ToDateTime(request.Descendants("FromTid").First().Value);
  56.             DateTime to = Convert.ToDateTime(request.Descendants("TomTid").First().Value);
  57.  
  58.             XElement locations = new XElement("Platser", request.Descendants("Plats"));
  59.  
  60.             XElement filteredEvents = searchFiltering(from, to, locations);
  61.             bool authorizedUser = UserAuthorization(request.Descendants("Användarnamn").First().Value, request.Descendants("Lösenord").First().Value);
  62.             string message;
  63.             string svarskod;
  64.            
  65.             if (authorizedUser)
  66.             {
  67.                 message = "Authorized user";
  68.                 svarskod = "1";
  69.             }
  70.             else
  71.             {
  72.                 message = "Nonauthorized user";
  73.                 svarskod = "0";
  74.             }
  75.            
  76.             XElement serviceResult = new XElement("Servicesvar",
  77.                                         new XElement("Tjänstemeddelande",
  78.                                             new XElement("Svarsinformation",
  79.                                                 new XElement("Svarskod", svarskod),
  80.                                                 new XElement("Meddelande", message),
  81.                                                 new XElement("Tjänsteansvarig", "Grupp6"),
  82.                                                 new XElement("Applikation",
  83.                                                     new XElement("Namn", "TraceTrains"),
  84.                                                     new XElement("Version", "1.0")
  85.                                                 ),
  86.                                                 new XElement("Svarstid", DateTime.Now)
  87.                                             ),
  88.                                             new XElement("Anropsinformation",
  89.                                                 new XElement("Anropsansvarig",
  90.                                                     new XElement("Användarnamn", request.Descendants("Användarnamn").First().Value),
  91.                                                     new XElement("Lösenord", request.Descendants("Lösenord").First().Value)
  92.                                                 ),
  93.                                                 new XElement("Sökfilter",
  94.                                                     new XElement("FromTid", from),
  95.                                                     new XElement("TomTid", to),
  96.                                                     new XElement("Platser",
  97.                                                         from location in request.Descendants("Plats")
  98.                                                         select new XElement("Plats",
  99.                                                                 new XElement("Ortsnamn", location.Value)
  100.                                                         )
  101.                                                     )
  102.                                                 )
  103.                                             )
  104.                                         )
  105.                                     );
  106.         if(authorizedUser)
  107.         {
  108.  
  109.             XElement tempVehicleResult = new XElement("Fordonspassager",
  110.                         from objectEvent in filteredEvents.Descendants("ObjectEvent")
  111.                         select new XElement("Fordonspassage",
  112.                             new XElement("Tidpunkt", (string)objectEvent.Element("eventTime")),
  113.                             new XElement("Fordon", CreateVehicle((string)objectEvent.Descendants("epc").First())),
  114.                             new XElement("Plats",
  115.                                 new XElement("PlatsEpc", (string)objectEvent.Element("readPoint").Element("id")),
  116.                                 new XElement("Platsnamn", namingService.GetLocation((string)objectEvent.Descendants("id").First()).Descendants("Name").First().Value)
  117.                             )
  118.                         )
  119.                     );
  120.             if(tempVehicleResult.Descendants().Where(d => string.IsNullOrEmpty(d.Value)).Equals(true))
  121.             {
  122.                 message += ", " + "Some problems with elements with a null reference";
  123.             }
  124.             serviceResult.Add(tempVehicleResult);
  125.         }
  126.                                        
  127.                                  
  128.             return serviceResult;
  129.         }
  130.  
  131.         private bool UserAuthorization(string username, string password)
  132.         {
  133.  
  134.            
  135.             XElement usersXml = XElement.Load(appDataFolder + "anvandare.xml");
  136.             try
  137.             {
  138.  
  139.                 XElement selectedUser = usersXml.Descendants("Användare").Where(u => u.Element("Användarnamn").Value == username).First();
  140.                 if (password == selectedUser.Element("Lösenord").Value)
  141.                 {
  142.                     return true;
  143.                 }
  144.                 else
  145.                 {
  146.                     return false;
  147.                 }
  148.             }
  149.             catch
  150.             {
  151.                 return false;
  152.             }
  153.         }
  154.  
  155.         private XElement CreateVehicle(string vehicleEpc)
  156.         {
  157.             XElement fordonsindivid = new XElement("fordonsindivid", namingService.GetVehicle(vehicleEpc));
  158.             XElement tempVehicle = new XElement("Fordon");
  159.  
  160.             string response = (string)fordonsindivid.Descendants("ResponseStatus").First().Value;
  161.  
  162.             try
  163.             {
  164.                 tempVehicle.Add(
  165.                     new XElement("Fordonstyp", (string)fordonsindivid.Descendants("FordonskategoriKodFullVardeSE").First()),
  166.                     new XElement("Fordonsunderkategori", (string)fordonsindivid.Descendants("FordonsunderkategoriKodFullVardeSE").First()),
  167.                     new XElement("FordonsEpc", vehicleEpc),
  168.                     new XElement("FordonsEvn", (string)fordonsindivid.Descendants("Fordonsnummer").First()),
  169.                     new XElement("Fordonsinnehavare",
  170.                         new XElement("FöretagsId", (string)fordonsindivid.Descendants("Fordonsinnehavare").First().Element("ForetagId")),
  171.                         new XElement("Företagsnamn", (string)fordonsindivid.Descendants("Fordonsinnehavare").First().Element("Foretag"))
  172.                     ),
  173.                     new XElement("Underhållsansvarig",
  174.                         new XElement("FöretagsId", (string)fordonsindivid.Descendants("UnderhallsansvarigtForetag").First().Element("ForetagId")),
  175.                         new XElement("Företagsnamn", (string)fordonsindivid.Descendants("UnderhallsansvarigtForetag").First().Element("Foretag"))
  176.                     ),
  177.                     from godkannande in fordonsindivid.Descendants("Godkannande")
  178.                     select new XElement("Godkännande",
  179.                         new XElement("Status", (string)godkannande.Element("FordonsgodkannandeFullVardeSE")),
  180.                         new XElement("GiltigFrom", (string)godkannande.Element("GiltigtFrom")),
  181.                         new XElement("GiltigTom", (string)godkannande.Element("GiltigtTom"))
  182.                     )
  183.                 );
  184.                 return tempVehicle;
  185.             }
  186.             catch
  187.             {
  188.                 if (fordonsindivid.Descendants("ResponseStatus").First().Value.Equals("0"))
  189.                 {
  190.                     tempVehicle = null;
  191.                 }
  192.                 return tempVehicle;
  193.             }
  194.         }
  195.  
  196.         private XElement searchFiltering(DateTime from, DateTime to, XElement locations)
  197.         {          
  198.             //Sortera ut rätt passager efter ort
  199.             List<string> epcLocationList = new List<string>();
  200.             foreach (string location in locations.Descendants("Plats").Select(l => l.Value).ToList())
  201.             {
  202.                 epcLocationList.Add(namingService.GetAllLocations().Descendants("Location").Where(l => l.Element("Name").Value.Equals(location)).Select(epc => epc.Element("Epc").Value).First());
  203.             }
  204.  
  205.             //Sortera ut rätt passager efter datum
  206.             XElement trainPassageXml = new XElement("TrainPassageXml");
  207.             foreach(string epc in epcLocationList)
  208.             {
  209.                 IEnumerable<XElement> trainPassageEvents = eventService.GetEvents(from, to, epc);
  210.  
  211.                
  212.  
  213.                 foreach(XElement trainPassage in trainPassageEvents)
  214.                 {
  215.                     //XElement tempVehicle = new XElement("", )
  216.  
  217.                     XElement tempLocation = namingService.GetLocation(epc);
  218.                     XElement tempVehicle = namingService.GetVehicle(trainPassage.Descendants("epc").Select(vehicleEpc => vehicleEpc.Value).First());
  219.                     trainPassage.Add(tempVehicle);
  220.                     trainPassage.Add(tempLocation);
  221.                     trainPassageXml.Add(trainPassage);  
  222.                 }
  223.  
  224.             }
  225.             return trainPassageXml;
  226.         }
  227.  
  228.         public IEnumerable<string> GetAllLocations()
  229.         {
  230.             XElement allLocations = namingService.GetAllLocations();
  231.             List<string> locationList = allLocations.Descendants("Name").Select(n => (string)n.Value).ToList();
  232.             return locationList;
  233.         }
  234.     }
  235. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement