Esempio n. 1
0
        private static string PrepareResponseXML(Forsendelse message, ByggesakType byggesak)
        {
            string[] bygningsNummer;
            if (byggesak.matrikkelopplysninger == null)
            {
                //We make up something to pretend we've added a new building
                Random rnd = new Random();
                bygningsNummer = new string[] { rnd.Next(10000, 100000).ToString() };
            }
            else
            {
                bygningsNummer = byggesak.matrikkelopplysninger.bygning.Select(bygning => bygning.bygningsnummer).ToArray();

                if (bygningsNummer[0] == null)
                {
                    //We make up something to pretend we've added a new building
                    Random rnd = new Random();
                    bygningsNummer = new string[] { rnd.Next(10000, 100000).ToString() };
                }
            }

            MatrikkelFoeringsResponsType responseMessage = new MatrikkelFoeringsResponsType()
            {
                bygningsnummer = bygningsNummer,
                saksnummer     = new no.geointegrasjon.rep.matrikkelfoeringsrespons.SaksnummerType()
                {
                    //Tostring because XSD.exe maps xml:integer to string because it's not bounded like int32
                    //TODO: Check assumption that ids may be larger than int32
                    saksaar           = message.metadataForImport.saksaar.ToString(),          //saksaar = byggesak.saksnummer.saksaar, //message.metadataFraAvleverendeSystem.saksaar.ToString(),
                    sakssekvensnummer = message.metadataForImport.sakssekvensnummer.ToString() //sakssekvensnummer = byggesak.saksnummer.sakssekvensnummer //message.metadataFraAvleverendeSystem.sakssekvensnummer.ToString()
                }
            };

            return(writeMatrikkelFoeringsResponsXML(responseMessage));
        }
Esempio n. 2
0
        private static void SendMatrikkelFoeringsResponse(Forsendelse message, ByggesakType byggesak)
        {
            string responseXml = PrepareResponseXML(message, byggesak);

            List <dokument> dokumenter       = new List <dokument>();
            dokument        matrikkelRespons = new dokument()
            {
                dokumentType = "ByggesakMatrikkelFøringsRespons",
                data         = System.Text.Encoding.UTF8.GetBytes(responseXml),
                filnavn      = "matrikkelrespons.xml",
                mimetype     = "application/xml"
            };

            dokumenter.Add(matrikkelRespons);

            string orgnrTilKommunen = ConfigurationManager.AppSettings["OrgNrReceiver"];
            // LARS: saksaar & sakssekvensnummer from Byggesak
            string systemId = message.id; //byggesak.systemId; //TODO: Check

            SvarUtService.Send("matrikkelsystem", ForsendelsesTypeGeointegrasjonMatrikkelRespons, "Matrikkelføringsrespons for " + message.tittel, systemId,
                               orgnrTilKommunen, "Matrikkelføringsrespons klient", dokumenter.ToArray(),
                               byggesak.saksnummer.saksaar, byggesak.saksnummer.sakssekvensnummer);
            //             SvarUtService.Send("matrikkelsystem", ForsendelsesTypeGeointegrasjonMatrikkelRespons, "Matrikkelføringsrespons for " + message.tittel, "12345", orgnrTilKommunen, "Matrikkelføringsrespons klient", dokumenter.ToArray(),
            // byggesak.saksnummer.saksaar, byggesak.saksnummer.sakssekvensnummer);
        }
Esempio n. 3
0
        private static async Task <ByggesakType> readByggeSakXml(Forsendelse message)
        {
            string byggesakXML = await ReadByggesakXMLFromZip(message);

            var serializer = new System.Xml.Serialization.XmlSerializer(typeof(ByggesakType));

            using (var stringReader = new StringReader(byggesakXML))
            {
                return((ByggesakType)serializer.Deserialize(stringReader));
            }
        }
Esempio n. 4
0
        /// <summary>
        /// Kopierer en eksisterende melding med dokument, og sender den inn på ny.
        /// Dette for å kunne låse en sak i en matrikkelklient, og frigjøre den dersom bruker avbryter.
        /// </summary>
        /// <param name="message"></param>
        private static void CopyMessageAndSendInAsNew(Forsendelse message)
        {
            List <dokument> dokumenter = ReadDocumentsAsync(message).GetAwaiter().GetResult();

            string orgnrTilKommunen  = ConfigurationManager.AppSettings["OrgNrReceiver"];
            var    saksaar           = message.metadataForImport.saksaar.ToString();
            var    sakssekvensnummer = message.metadataForImport.sakssekvensnummer.ToString();

            //message.
            string systemId = null;

            systemId = message.id;

            string avgiverSystem = message.avsender.navn;

            //avgiverSystem = "matrikkelsystem";
            avgiverSystem = "eByggesak system";

            // 20191025-Leg:  Manipulate title to get a unique one (according to Idar Borlaug (KS)).
            // Det må være mulig å kansellere en sak flere ganger.
            // For å unngå feilmelding: "Forsendelse med samme mottaker, tittel og avsender og filer er forsøkt sendt mer enn en gang. Forsendelse er derfor avvist."


            var tittel = MakeUniqueEndingToTitle(message.tittel);

            //var tittel = message.tittel;
            //// Check if message have been cancelled, tittel should end with "#number", e.g. #2.
            //if (Regex.Match(tittel, @".*#\d+$").Success)
            //{
            //    var ipos = tittel.LastIndexOf("#");
            //    var number = tittel.Substring(ipos + 1);
            //    int newNumber = ((int)Convert.ToInt32(number)) + 1;
            //    string newTitle = tittel.Substring(0, ipos + 1) + newNumber.ToString();
            //    tittel = newTitle;
            //}
            //else
            //{
            //    string newTitle = tittel + "_#2";
            //    tittel = newTitle;
            //}

            SvarUtService.Send(avgiverSystem, ForsendelsesTypeGeointegrasjonMatrikkel, tittel, systemId,
                               orgnrTilKommunen, "Matrikkelføring klient", dokumenter.ToArray(),
                               saksaar, sakssekvensnummer);

            //SvarUtService.Send(avgiverSystem, ForsendelsesTypeGeointegrasjonMatrikkel, message.tittel, systemId,
            //    orgnrTilKommunen, "Matrikkelføring klient", dokumenter.ToArray(),
            //   saksaar, sakssekvensnummer);
        }
        private static async Task ProcessWaitingMessage(HttpClient client, Forsendelse message)
        {
            Console.WriteLine("--------------------------------");
            Console.WriteLine("Tittel: " + message.tittel);
            Console.WriteLine("Forsendelses-ID: " + message.id);

            //Check if it's the right type (making sure FIKS is not misconfigured)
            if (message.forsendelseType != ForsendelsesTypeGeointegrasjonMatrikkel)
            {
                //If not, deny handling the message by sending a negative receipt
                Console.WriteLine("Kan ikke håndtere denne meldingen, sender  negativ håndteringsrespons");
                await DenyHandlingMessage(client, message.id);

                return;
            }

            Console.WriteLine("Melding er av riktig forsendelsestype.");

            //If OK, download files (Always a zip in our example, can be a single PDF in other cases)

            await DownloadAndDecryptMessageFile(client, message.id, message.downloadUrl);

            ByggesakType byggesak = await readByggeSakXml(message);

            Console.WriteLine("Melding er lastet ned, dekryptert og innlest.");

            //Send receipt that message was handled
            await client.PostAsync(string.Format(UrlMottakVelykket, message.id), new StringContent(""));

            Console.WriteLine("Mottak av melding bekreftet til SvarInn");

            //Pretend we do something interesting with the data, then possibly send a response
            Console.WriteLine("Trykk y og enter for å sende returbeskjed med SvarUt om at matrikkelen har (liksom) blitt oppdatert, eller bare enter for å ikke gjøre det.");
            bool sendProcessedResponse = (Console.ReadLine() == "y");

            if (sendProcessedResponse)
            {
                //Send a return message that the data has been acted on
                SendMatrikkelFoeringsResponse(message, byggesak);
                Console.WriteLine("Returbeskjed sendt, går videre til neste melding.");
            }
            else
            {
                Console.WriteLine("Går videre til neste melding uten å sende returbeskjed.");
            }
        }
Esempio n. 6
0
        private static async Task <string> ReadByggesakXMLFromZip(Forsendelse message)
        {
            //Get the filename from metadata

            //Read the file to extract the XML
            using (FileStream zipToOpen = new FileStream("forsendelse_" + message.id + ".zip", FileMode.Open))
            {
                using (ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Update))
                {
                    //TODO: byggesak.xml from dkument type!!!!
                    ZipArchiveEntry entry = archive.GetEntry("byggesak.xml");
                    using (StreamReader reader = new StreamReader(entry.Open()))
                    {
                        return(await reader.ReadToEndAsync());
                    }
                }
            }
        }
Esempio n. 7
0
        /// <summary>
        /// Leser inn alle dokumenter i en sak
        /// </summary>
        /// <param name="message"></param>
        /// <returns>En liste med dokumenter</returns>
        private static async Task <List <dokument> > ReadDocumentsAsync(Forsendelse message)
        {
            if (message.filmetadata.Count > 0)
            {
                List <dokument> dokumenter = new List <dokument>();

                //Read the file to extract the XML
                using (FileStream zipToOpen = new FileStream("forsendelse_" + message.id + ".zip", FileMode.Open))
                {
                    using (ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Update))
                    {
                        foreach (var fil in message.filmetadata)
                        {
                            dokument doc = new dokument();
                            doc.dokumentType = fil.dokumentType;
                            doc.mimetype     = fil.mimetype;
                            doc.filnavn      = fil.filnavn;

                            ZipArchiveEntry entry = archive.GetEntry(fil.filnavn);
                            using (StreamReader reader = new StreamReader(entry.Open()))
                            {
                                var response = await reader.ReadToEndAsync();

                                doc.data = System.Text.Encoding.UTF8.GetBytes(response);
                            }
                            dokumenter.Add(doc);
                        }
                    }
                }
                return(dokumenter);
            }
            else
            {
                return(null);
            }
        }
Esempio n. 8
0
        private static async Task <bool> ProcessWaitingMessage(HttpClient client, Forsendelse message)
        {
            Console.WriteLine("--------------------------------");
            Console.WriteLine("Tittel: " + message.tittel);
            Console.WriteLine("Forsendelses-ID: " + message.id);

            //Check if it's the right type (making sure FIKS is not misconfigured)
            if (message.forsendelseType != ForsendelsesTypeGeointegrasjonMatrikkel)
            {
                //If not, deny handling the message by sending a negative receipt
                Console.WriteLine("Kan ikke håndtere denne meldingen, sender  negativ håndteringsrespons");
                //await DenyHandlingMessage(client, message.id); // denne tar tid
                return(false);
            }



            Console.WriteLine("Melding er av riktig forsendelsestype. ID:" + message.id);

            if (false)
            {
                if (message.id != "1815c285-1226-4b2f-ad66-731bfff24578")
                {
                    Console.WriteLine("Test på filter med ID. Kan ikke håndtere denne meldingen, sender  negativ håndteringsrespons");
                    //await DenyHandlingMessage(client, message.id); // denne tar tid
                    return(false);
                }
            }

            // The message.Date is of type Unixtime
            Console.WriteLine("Meldingsdato:" + UnixTimeToDateTime(message.date));
            //dateTime dt = new DateTime(message.date);

            //If OK, download files (Always a zip in our example, can be a single PDF in other cases)

            await DownloadAndDecryptMessageFile(client, message.id, message.downloadUrl);

            ByggesakType byggesak = await readByggeSakXml(message);

            Console.WriteLine("Melding er lastet ned, dekryptert og innlest.");

            // Ikke send mottat melding her
            if (false)
            {
                //Send receipt that message was handled
                await client.PostAsync(string.Format(UrlMottakVelykket, message.id), new StringContent(""));

                Console.WriteLine("Mottak av melding bekreftet til SvarInn");
            }

            //Pretend we do something interesting with the data, then possibly send a response
            Console.WriteLine("Trykk y og enter for å sende returbeskjed med SvarUt om at matrikkelen har (liksom) blitt oppdatert, c for å avbryte, eller bare enter for å ikke gjøre det.");
            string responseConsole       = Console.ReadLine();
            bool   sendProcessedResponse = (responseConsole == "y");
            bool   cancelProcessResponse = (responseConsole == "c");

            if (sendProcessedResponse)
            {
                if (true)
                {
                    //Send receipt that message was handled
                    await client.PostAsync(string.Format(UrlMottakVelykket, message.id), new StringContent(""));

                    Console.WriteLine("Mottak av melding bekreftet til SvarInn");
                    //await Task.Delay(100).ConfigureAwait(false); // TEST
                }

                //Send a return message that the data has been acted on
                SendMatrikkelFoeringsResponse(message, byggesak);
                Console.WriteLine("Returbeskjed sendt, går videre til neste melding.");
            }
            else if (cancelProcessResponse)
            {
                // Simulerer at en sak er lastet ned, men bruker ønsker å avbryte.
                // En kopi av saken sendes da inn på nytt i mangel av metode for å gjøre dette mot SvarUt/SvarInn,
                if (true)
                {
                    //Send receipt that message was handled
                    await client.PostAsync(string.Format(UrlMottakVelykket, message.id), new StringContent(""));

                    Console.WriteLine("Mottak av melding bekreftet til SvarInn");
                    //await Task.Delay(100).ConfigureAwait(false); // TEST
                }

                //Send a return message that the data has cancelled
                CopyMessageAndSendInAsNew(message);
                Console.WriteLine("Returbeskjed sendt, går videre til neste melding.");
            }
            else
            {
                Console.WriteLine("Går videre til neste melding uten å sende returbeskjed.");
                //await DenyHandlingMessage(client, message.id); // denne tar tid
            }

            return(true);
        }