public ZustandTrottoirViewModel(
            ZustandsabschnittGISDTO zustandsabschnittGisdto,
            StrassenabschnittGISDTO strassenabschnittGisdto,
            IDTOService dtoService,
            IWindowService windowService)
        {
            this.zustandsabschnittGisdto = zustandsabschnittGisdto;
            this.strassenabschnittGisdto = strassenabschnittGisdto;
            this.dtoService    = dtoService;
            this.windowService = windowService;

            Load(zustandsabschnittGisdto);

            PropertyChanged += (sender, args) =>
            {
                if (
                    args.PropertyName == ExpressionHelper.GetPropertyName(() => ZustandsindexTrottoirLinks) ||
                    args.PropertyName == ExpressionHelper.GetPropertyName(() => ZustandsindexTrottoirRechts) ||
                    args.PropertyName == ExpressionHelper.GetPropertyName(() => DringlichkeitTrottoirLinks) ||
                    args.PropertyName == ExpressionHelper.GetPropertyName(() => DringlichkeitTrottoirRechts) ||
                    args.PropertyName == ExpressionHelper.GetPropertyName(() => MassnahmenvorschlagTrottoirLinks) ||
                    args.PropertyName == ExpressionHelper.GetPropertyName(() => MassnahmenvorschlagTrottoirRechts)
                    )
                {
                    OnChanged();
                }
            };
        }
示例#2
0
        private void Load(ZustandsabschnittGISDTO dto, bool isNew)
        {
            if (!isNew)
            {
                Zustandsindex = dto.Zustandsindex;
            }

            var massnahmenvorschlagKatalogDtos = dtoService
                                                 .Get <MassnahmenvorschlagKatalogDTO>()
                                                 .Where(mvk => mvk.KatalogTyp == MassnahmenvorschlagKatalogTyp.Fahrbahn && mvk.Belastungskategorie == strassenabschnittGisdto.Belastungskategorie);

            MassnahmenvorschlagList = new List <NameValueItemViewModel <Guid?> > {
                new NameValueItemViewModel <Guid?>(string.Empty, null)
            }
            .Concat(massnahmenvorschlagKatalogDtos
                    .Select(mvk => new NameValueItemViewModel <Guid?>(MobileLocalization.GetLocalizedMassnahmenvorschlag(mvk.Typ), mvk.Id)))
            .ToList();

            ZustandsErfassungsmodus = zustandsabschnittGisDto.Erfassungsmodus;

            Dringlichkeit       = dto.MassnahmenvorschlagFahrbahnDTO == null ? DringlichkeitTyp.Unbekannt : dto.MassnahmenvorschlagFahrbahnDTO.Dringlichkeit;
            Massnahmenvorschlag = dto.MassnahmenvorschlagFahrbahnDTO == null ? null : dto.MassnahmenvorschlagFahrbahnDTO.Typ;

            IsGrobDetailZustandserfassungSupported = strassenabschnittGisdto.Belag != BelagsTyp.Chaussierung && strassenabschnittGisdto.Belag != BelagsTyp.Pflaesterung;

            HasZustandsIndexChanges = false;
            Notify(() => Zustandsindex);
        }
示例#3
0
        public ZustandsErfassungsmodusChooserViewModel(
            ZustandsabschnittGISDTO zustandsabschnittGisDto,
            StrassenabschnittGISDTO strassenabschnittGisdto,
            IDTOService dtoService,
            IWindowService windowService,
            ISchadenMetadatenService schadenMetadatenService,
            IMessageBoxService messageBoxService,
            bool isNew)
        {
            this.zustandsabschnittGisDto = zustandsabschnittGisDto;
            this.strassenabschnittGisdto = strassenabschnittGisdto;
            this.dtoService              = dtoService;
            this.windowService           = windowService;
            this.schadenMetadatenService = schadenMetadatenService;
            this.messageBoxService       = messageBoxService;
            this.isNew = isNew;

            OpenZustandsFahrbahnWindowCommand = new DelegateCommand(OpenZustandsFahrbahnWindow);

            RegisterValidation(m => m.Zustandsindex, () => IsValidDecimalWithDecimalPlaces(Zustandsindex, 2), string.Format(MobileLocalization.InvalidDecimalPlacesValidationError, 2));
            RegisterValidation(m => m.Zustandsindex, () => RangeValidator(Zustandsindex, 0, 5), RangeValidationMessage(0, 5));
            RegisterValidation(m => m.Zustandsindex, IsZustandsindexValid, RangeValidationMessage(0, 5));
            RegisterValidation(m => m.IsGrobInitializiert, () => ZustandsErfassungsmodus != ZustandsErfassungsmodus.Grob || IsGrobInitializiert, MobileLocalization.GrobFormIsNotinitialized);
            RegisterValidation(m => m.IsDetailInitializiert, () => ZustandsErfassungsmodus != ZustandsErfassungsmodus.Detail || IsDetailInitializiert, MobileLocalization.DetailFormIsNotinitialized);

            ReCreateZustabdFahrbahnWindowViewModel();

            Load(zustandsabschnittGisDto, isNew);

            PropertyChanged += (sender, args) =>
            {
                if (args.PropertyName == ExpressionHelper.GetPropertyName(() => Zustandsindex))
                {
                    HasNoChanges = false;
                }
            };

            DelegateEvent(() => IsValid, () => HasError);
            DelegateEvent(() => Zustandsindex, () => ZustandsindexCalculated);

            PropertyChanged += (sender, args) =>
            {
                if (
                    args.PropertyName == ExpressionHelper.GetPropertyName(() => Zustandsindex) ||
                    args.PropertyName == ExpressionHelper.GetPropertyName(() => IsGrobInitializiert) ||
                    args.PropertyName == ExpressionHelper.GetPropertyName(() => IsDetailInitializiert) ||
                    args.PropertyName == ExpressionHelper.GetPropertyName(() => Massnahmenvorschlag) ||
                    args.PropertyName == ExpressionHelper.GetPropertyName(() => ZustandsErfassungsmodus) ||
                    args.PropertyName == ExpressionHelper.GetPropertyName(() => Dringlichkeit)
                    )
                {
                    OnChanged();
                }
            };
        }
示例#4
0
 private void Load(ZustandsabschnittGISDTO za, StrassenabschnittGISDTO sa)
 {
     Laenge                = za.Laenge;
     Aufnahmedatum         = za.Aufnahmedatum;
     Aufnahmeteam          = za.Aufnahmeteam;
     Abschnittsnummer      = za.Abschnittsnummer;
     Wetter                = za.Wetter;
     Bemerkung             = za.Bemerkung;
     FlaecheFahrbahn       = za.FlaecheFahrbahn;
     FlaecheTrottoirLinks  = za.FlaceheTrottoirLinks;
     FlaecheTrottoirRechts = za.FlaceheTrottoirRechts;
     HasTrottoir           = sa.Trottoir != TrottoirTyp.NochNichtErfasst && sa.Trottoir != TrottoirTyp.KeinTrottoir;
 }
示例#5
0
        private void MapServiceOnZustandsabschnittCreated(object sender, CreateZustandsabschnittDataTransferEventArgs dataTransferEventArgs)
        {
            var zustandsabschnittGisdto = new ZustandsabschnittGISDTO
            {
                Id = dataTransferEventArgs.Id,
                StrassenabschnittGIS = dataTransferEventArgs.StrassenabschnittId,
                Erfassungsmodus      = ZustandsErfassungsmodus.Manuel,
                Aufnahmedatum        = DateTime.Now
            };
            //should only be saved if Save or Apply is pressed
            //dtoService.CreateOrReplaceDTO(zustandsabschnittGisdto);

            var strassenabschnittGisdto = dtoService.Get <StrassenabschnittGISDTO>().Single(s => s.Id == zustandsabschnittGisdto.StrassenabschnittGIS);

            ZustandsabschnittViewModel = new ZustandsabschnittViewModel(zustandsabschnittGisdto, strassenabschnittGisdto, dtoService, windowService, schadenMetadatenService, formService, messageBoxService, geoJsonService, true);
            IsVisible = true;
        }
示例#6
0
        public ZustandsabschnittDetailsViewModel(
            ZustandsabschnittGISDTO zustandsabschnittGisdto,
            StrassenabschnittGISDTO strassenabschnittGisdto,
            IDTOService dtoService,
            IWindowService windowService)
        {
            this.zustandsabschnittGisdto = zustandsabschnittGisdto;
            this.strassenabschnittGisdto = strassenabschnittGisdto;
            this.dtoService    = dtoService;
            this.windowService = windowService;

            RegisterValidation(vm => vm.Aufnahmeteam, () => LenghtValidator(Aufnahmeteam), LengthValidationMessage());
            RegisterValidation(vm => vm.Bemerkung, () => LenghtValidator(Bemerkung, 8000), LengthValidationMessage(8000));

            RegisterValidation(vm => vm.Aufnahmedatum, () => DateTimeValidator(Aufnahmedatum), DateTimeValidationMessage());
            RegisterValidation(vm => vm.Aufnahmedatum, () => RequiredValidator(Aufnahmedatum), MobileLocalization.RequiredValidationError);

            RegisterValidation(vm => vm.Abschnittsnummer, () => RangeValidator(Abschnittsnummer), RangeValidationMessage());

            RegisterValidation(vm => vm.Laenge, () => RequiredValidator(Laenge), MobileLocalization.GeometryShouldBeNotNull);
            RegisterValidation(vm => vm.Laenge, () => RangeValidator(Laenge, 1), RangeValidationMessage(1));
            RegisterValidation(vm => vm.Laenge, ValidateZustandsabschnittStrassenabschnittLaenge, ZustandsabschnittStrassenabschnittLaengeValidationMessage());

            Load(zustandsabschnittGisdto, strassenabschnittGisdto);

            DelegateEvent(() => IsValid, () => HasError);


            PropertyChanged += (sender, args) =>
            {
                if (
                    args.PropertyName == ExpressionHelper.GetPropertyName(() => Aufnahmedatum) ||
                    args.PropertyName == ExpressionHelper.GetPropertyName(() => Laenge) ||
                    args.PropertyName == ExpressionHelper.GetPropertyName(() => Aufnahmeteam) ||
                    args.PropertyName == ExpressionHelper.GetPropertyName(() => Bemerkung) ||
                    args.PropertyName == ExpressionHelper.GetPropertyName(() => Wetter)
                    )
                {
                    OnChanged();
                }
            };
        }
        private void Load(ZustandsabschnittGISDTO za)
        {
            var strassenabschnitt = dtoService.GetDTOByID <StrassenabschnittGISDTO>(za.StrassenabschnittGIS);
            var massnahmenvorschlagKatalogDtos = dtoService
                                                 .Get <MassnahmenvorschlagKatalogDTO>()
                                                 .Where(mvk => mvk.KatalogTyp == MassnahmenvorschlagKatalogTyp.Trottoir && mvk.Belastungskategorie == strassenabschnitt.Belastungskategorie);

            MassnahmenvorschlagList = new List <NameValueItemViewModel <Guid?> > {
                new NameValueItemViewModel <Guid?>(string.Empty, null)
            }
            .Concat(massnahmenvorschlagKatalogDtos
                    .Select(mvk => new NameValueItemViewModel <Guid?>(MobileLocalization.GetLocalizedMassnahmenvorschlag(mvk.Typ), mvk.Id)))
            .ToList();

            if (string.IsNullOrEmpty(za.BezeichnungVon) && string.IsNullOrEmpty(za.BezeichnungBis))
            {
                WindowTitle = string.Format(MobileLocalization.ZustandTrottoirShortWindowTitle, strassenabschnittGisdto.Strassenname);
            }
            else
            {
                WindowTitle = string.Format(MobileLocalization.ZustandTrottoirtWindowTitle, strassenabschnittGisdto.Strassenname, za.BezeichnungVon, za.BezeichnungBis);
            }

            HasTrottoirBeideSeiten = strassenabschnittGisdto.Trottoir == TrottoirTyp.BeideSeiten;

            HasTrottoirLinks = strassenabschnittGisdto.Trottoir == TrottoirTyp.Links ||
                               strassenabschnittGisdto.Trottoir == TrottoirTyp.BeideSeiten;

            HasTrottoirRechts = strassenabschnittGisdto.Trottoir == TrottoirTyp.Rechts ||
                                strassenabschnittGisdto.Trottoir == TrottoirTyp.BeideSeiten;

            ZustandsindexTrottoirLinks  = za.ZustandsindexTrottoirLinks;
            ZustandsindexTrottoirRechts = za.ZustandsindexTrottoirRechts;

            DringlichkeitTrottoirLinks  = za.MassnahmenvorschlagLinks == null ? DringlichkeitTyp.Unbekannt : za.MassnahmenvorschlagLinks.Dringlichkeit;
            DringlichkeitTrottoirRechts = za.MassnahmenvorschlagRechts == null ? DringlichkeitTyp.Unbekannt : za.MassnahmenvorschlagRechts.Dringlichkeit;

            MassnahmenvorschlagTrottoirLinks  = za.MassnahmenvorschlagLinks == null ? null : za.MassnahmenvorschlagLinks.Typ;
            MassnahmenvorschlagTrottoirRechts = za.MassnahmenvorschlagRechts == null ? null : za.MassnahmenvorschlagRechts.Typ;
        }
示例#8
0
        public void DeleteZustandsabschnitt(ZustandsabschnittGISDTO dto)
        {
            var schadengruppeDtos = Get <SchadengruppeDTO>().Where(sg => sg.ZustandsabschnittId == dto.Id).ToList();
            var schadendetailDtos = Get <SchadendetailDTO>().Where(sg => sg.ZustandsabschnittId == dto.Id).ToList();

            foreach (var schadengruppeDto in schadengruppeDtos)
            {
                DeleteDTO(schadengruppeDto);
            }
            foreach (var schadendetail in schadendetailDtos)
            {
                DeleteDTO(schadendetail);
            }
            var strab = this.GetDTOByID <StrassenabschnittGISDTO>(dto.StrassenabschnittGIS);

            strab.ZustandsabschnittenId.Remove(strab.ZustandsabschnittenId.SingleOrDefault(z => z.Equals(dto.Id)));
            //set the length of the zustandsabschnitt dto to 0
            //to prevent certain validation errors

            dto.Laenge = 0;
            DeleteDTO(dto);
        }
        public ZustandFahrbahnWindowViewModel(
            ZustandsabschnittGISDTO zustandsabschnittGisdto,
            StrassenabschnittGISDTO strassenabschnittGisdto,
            IDTOService dtoService,
            ISchadenMetadatenService schadenMetadatenService,
            IWindowService windowService,
            IMessageBoxService messageBoxService)
        {
            this.zustandsabschnittGisdto = zustandsabschnittGisdto;
            this.strassenabschnittGisdto = strassenabschnittGisdto;
            this.dtoService = dtoService;
            this.schadenMetadatenService = schadenMetadatenService;
            this.messageBoxService       = messageBoxService;

            OkCommand     = new DelegateCommand(Ok);
            CancelCommand = new DelegateCommand(Cancel);

            RegisterValidation(m => m.Zustandsindex, () => IsValidDecimalWithDecimalPlaces(Zustandsindex, 2), string.Format(MobileLocalization.InvalidDecimalPlacesValidationError, 2));
            RegisterValidation(m => m.Zustandsindex, () => RangeValidator(Zustandsindex, 0, 5), RangeValidationMessage(0, 5));

            GrobItemViewModels        = new ObservableCollection <GrobItemViewModel>();
            DetailGroupItemViewModels = new ObservableCollection <DetailGroupItemViewModel>();

            Load(zustandsabschnittGisdto);
            PropertyChanged += (sender, args) =>
            {
                if (args.PropertyName != ExpressionHelper.GetPropertyName(() => IsValid) &&
                    args.PropertyName != ExpressionHelper.GetPropertyName(() => ValidationErrorStrings) &&
                    args.PropertyName != ExpressionHelper.GetPropertyName(() => IsGrobInitializiert) &&
                    args.PropertyName != ExpressionHelper.GetPropertyName(() => IsDetailInitializiert) &&
                    args.PropertyName != ExpressionHelper.GetPropertyName(() => HasNoChanges)
                    )
                {
                    HasNoChanges = false;
                }
            };
            HasNoChanges = true;
        }
        private void Load(ZustandsabschnittGISDTO za)
        {
            if (string.IsNullOrEmpty(za.BezeichnungVon) && string.IsNullOrEmpty(za.BezeichnungBis))
            {
                WindowTitle = string.Format(MobileLocalization.ZustandFahrbahnShortWindowTitle, strassenabschnittGisdto.Strassenname);
            }
            else
            {
                WindowTitle = string.Format(MobileLocalization.ZustandFahrbahnWindowTitle, strassenabschnittGisdto.Strassenname, za.BezeichnungVon, za.BezeichnungBis);
            }

            belagsTyp         = strassenabschnittGisdto.Belag;
            schadengruppeDtos = dtoService.Get <SchadengruppeDTO>().Where(sg => sg.ZustandsabschnittId == za.Id).ToList();
            schadendetailDtos = dtoService.Get <SchadendetailDTO>().Where(sg => sg.ZustandsabschnittId == za.Id).ToList();

            temporallySavedSchadendetailDtos.Clear();
            temporallySavedSchadendetailDtos.AddRange(schadendetailDtos);

            temporallySavedSchadengruppeDtos.Clear();
            temporallySavedSchadengruppeDtos.AddRange(schadengruppeDtos);

            ZustandsErfassungsmodus = zustandsabschnittGisdto.Erfassungsmodus;
        }
示例#11
0
        public ZustandsabschnittViewModel(
            ZustandsabschnittGISDTO zustandsabschnittGisDto,
            StrassenabschnittGISDTO strassenabschnittGisdto,
            IDTOService dtoService,
            IWindowService windowService,
            ISchadenMetadatenService schadenMetadatenService,
            IFormService formService,
            IMessageBoxService messageBoxService,
            IGeoJsonService geoJsonService,
            bool isNew = false)
        {
            this.zustandsabschnittGisDto = zustandsabschnittGisDto;
            this.strassenabschnittGisdto = strassenabschnittGisdto;
            this.dtoService        = dtoService;
            this.formService       = formService;
            this.messageBoxService = messageBoxService;
            this.geoJsonService    = geoJsonService;

            ZustandsabschnittDetailsViewModel       = new ZustandsabschnittDetailsViewModel(zustandsabschnittGisDto, strassenabschnittGisdto, dtoService, windowService);
            ZustandsErfassungsmodusChooserViewModel = new ZustandsErfassungsmodusChooserViewModel(zustandsabschnittGisDto, strassenabschnittGisdto, dtoService, windowService, schadenMetadatenService, messageBoxService, isNew);

            TabViewModels = new ObservableCollection <IZustandsabschnittTabViewModel>
            {
                ZustandsabschnittDetailsViewModel,
                ZustandsErfassungsmodusChooserViewModel
            };

            if (strassenabschnittGisdto.Trottoir != TrottoirTyp.KeinTrottoir && strassenabschnittGisdto.Trottoir != TrottoirTyp.NochNichtErfasst)
            {
                ZustandTrottoirViewModel = new ZustandTrottoirViewModel(zustandsabschnittGisDto, strassenabschnittGisdto, dtoService, windowService);
                TabViewModels.Add(ZustandTrottoirViewModel);
            }

            SaveCommand           = new DelegateCommand(Save);
            ApplyCommand          = new DelegateCommand(Apply);
            CancelCommand         = new DelegateCommand(Cancel);
            DeleteCommand         = new DelegateCommand(Delete);
            OpenHelpWindowCommand = new DelegateCommand(() => { if (SelectedTabViewModel != null)
                                                                {
                                                                    SelectedTabViewModel.OpenHelp();
                                                                }
                                                        });

            foreach (var tabViewModel in TabViewModels)
            {
                tabViewModel.PropertyChanged += (sender, args) =>
                {
                    if (args.PropertyName == ExpressionHelper.GetPropertyName(() => IsValid))
                    {
                        IsChildsValid = TabViewModels.All(tvm => tvm.IsValid);
                    }
                };

                tabViewModel.Changed += (sender, args) => { HasChanges = true; };
            }

            IsNew = isNew;

            RegisterValidation(vm => vm.BezeichnungVon, () => LenghtValidator(BezeichnungVon), LengthValidationMessage());
            RegisterValidation(vm => vm.BezeichnungBis, () => LenghtValidator(BezeichnungBis), LengthValidationMessage());

            Load();

            PropertyChanged += (sender, args) =>
            {
                if (
                    args.PropertyName == ExpressionHelper.GetPropertyName(() => BezeichnungVon) ||
                    args.PropertyName == ExpressionHelper.GetPropertyName(() => BezeichnungBis)
                    )
                {
                    HasChanges = true;
                }
            };
        }
示例#12
0
        public CheckOutGISStreams CheckOutData(IList <Guid> ids, bool exportBackground)
        {
            CheckOutGISStreams checkoutGISStreams = new CheckOutGISStreams();


            DTOContainer dtosToExport = new DTOContainer();
            Mandant      mandant      = null;
            IGeometry    bbox         = null;

            foreach (Guid id in ids)
            {
                InspektionsRouteGIS inspektionsroute = inspektionsRouteGISService.GetInspektionsRouteById(id);
                mandant = inspektionsroute.Mandant;
                if (bbox != null)
                {
                    bbox = bbox.Union(inspektionsroute.Shape.Envelope).Envelope;
                }
                else
                {
                    bbox = inspektionsroute.Shape.Envelope;
                }
                IList <InspektionsRtStrAbschnitte> inspektionsroutenAbschnitte = inspektionsRtStrAbschnitteService.GetCurrentEntities().Where(ira => ira.InspektionsRouteGIS.Id == inspektionsroute.Id).ToList();

                inspektionsroutenAbschnitte.OrderBy(ira => ira.Reihenfolge);

                //Strassenabschnitte
                foreach (InspektionsRtStrAbschnitte inspektionsroutenAbschnitt in inspektionsroutenAbschnitte)
                {
                    StrassenabschnittGISDTO strassenabschnittGISDTO = strassenabschnittGISDTOService.GetDTOByID(inspektionsroutenAbschnitt.StrassenabschnittGIS.Id);
                    dtosToExport.DataTransferObjects.Add(strassenabschnittGISDTO);

                    //Zustandsabschnitte
                    foreach (ZustandsabschnittGIS zustandsabschnitt in inspektionsroutenAbschnitt.StrassenabschnittGIS.Zustandsabschnitten)
                    {
                        ZustandsabschnittGISDTO zustandsabschnittGISDTO = zustandsabschnittGISDTOService.GetDTOByID(zustandsabschnitt.Id);
                        dtosToExport.DataTransferObjects.Add(zustandsabschnittGISDTO);


                        foreach (Schadendetail schaden in zustandsabschnitt.Schadendetails)
                        {
                            SchadendetailDTO schadendto = schadendetailDTOService.GetDTOByID(schaden.Id);
                            schadendto.ZustandsabschnittId = zustandsabschnitt.Id;
                            dtosToExport.DataTransferObjects.Add(schadendto);
                        }
                        foreach (Schadengruppe schadengruppe in zustandsabschnitt.Schadengruppen)
                        {
                            SchadengruppeDTO schadengruppedto = schadengruppeDTOService.GetDTOByID(schadengruppe.Id);
                            schadengruppedto.ZustandsabschnittId = zustandsabschnitt.Id;
                            dtosToExport.DataTransferObjects.Add(schadengruppedto);
                        }
                    }
                }
            }
            IGeometry backgroundBbox = null;

            //Achsensegmente
            foreach (AchsenSegment achsensegment in achsenSegmentService.GetCurrentBySpatialFilter(bbox).Where(a => a.Mandant == mandant))
            {
                dtosToExport.DataTransferObjects.Add(achsenSegmentDTOService.GetDTOByID(achsensegment.Id));
                if (backgroundBbox != null)
                {
                    backgroundBbox = backgroundBbox.Envelope.Union(achsensegment.Shape.Envelope);
                }
                else
                {
                    backgroundBbox = achsensegment.Shape.Envelope;
                }
            }

            List <Belastungskategorie> belastungskategorien = belastungskategorieService.AlleBelastungskategorie;

            foreach (Belastungskategorie bk in belastungskategorien)
            {
                dtosToExport.DataTransferObjects.Add(belastungskategorieDTOService.GetDTOByID(bk.Id));
            }
            List <MassnahmenvorschlagKatalog> mvklist = massnahmenvorschlagKatalogService.GetCurrentEntities().Where(mvk => mvk.Mandant.Id == mandant.Id && mvk.ErfassungsPeriod.IsClosed == false).ToList();

            foreach (MassnahmenvorschlagKatalog mvk in mvklist)
            {
                dtosToExport.DataTransferObjects.Add(massnahmenvorschlagKatalogDTOService.GetDTOByID(mvk.Id));
            }

            IFormatter   formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
            MemoryStream serializedModelsStream = new MemoryStream();

            formatter.Serialize(serializedModelsStream, dtosToExport);
            serializedModelsStream.Seek(0, 0);


            checkoutGISStreams.Bezeichnung = "export";

            LayerCollection exportLayer = serverConfigurationProvider.ExportLayer;
            int             count       = exportLayer.Count;
            string          filepath    = serverConfigurationProvider.WMSCacheFolderPath;

            for (int i = 0; i < count; i++)
            {
                ITileSourceFactory fact = null;
                var layer = exportLayer[i];
                switch (layer.ServiceType)
                {
                case ServiceType.WMS:
                    fact = new WmsTileSourceFactory(layer);
                    break;

                case ServiceType.WMTS:
                    fact = new WmtsTileSourceFactory(layer);
                    break;

                default:
                    break;
                }
                TileLoader loader = new TileLoader(fact.GetTileSource());

                Stopwatch stopwatch = new Stopwatch();
                stopwatch.Start();
                checkoutGISStreams.Tiles.Add(loader.GetTiles(layer, bbox, filepath, serverConfigurationProvider.UseWMSCaching, fact.Format, serverConfigurationProvider.ExportBackgroundMapBuffer, serverConfigurationProvider.ExportTileLimit, download: exportBackground));
                stopwatch.Stop();
                Loggers.PeformanceLogger.DebugFormat("Layer {0} downloaded in {1}", layer.Name, stopwatch.Elapsed);
            }
            checkoutGISStreams.ModelsToExport = serializedModelsStream;

            checkoutGISStreams.LegendStreams.Add(FileNameConstants.AchsenSegmentLayerLegendFilename, legendService.GetLegendStream("AchsenSegmentLayer"));
            checkoutGISStreams.LegendStreams.Add(FileNameConstants.StrassenabschnittLayerLegendFilename, legendService.GetLegendStream("StrassenabschnittLayer"));
            checkoutGISStreams.LegendStreams.Add(FileNameConstants.ZustandsabschnittLayerLegendFilename, legendService.GetLegendStream("ZustandsabschnittLayer"));
            checkoutGISStreams.LegendStreams.Add(FileNameConstants.ZustandsabschnittLayerTrottoirLegendFilename, legendService.GetLegendStream("ZustandsabschnittLayer_Trottoir"));
            return(checkoutGISStreams);
        }