public ExportResult Export(CheckOutGISStreams checkoutGISStream, IList <CheckOutsGISModel> cogModelList) { var exportResult = new ExportResult(); try { string clientFilesPath = serverConfigurationProvider.ClientFilesFolderPath; using (ZipFile zipFile = new ZipFile()) { zipFile.CompressionLevel = Ionic.Zlib.CompressionLevel.BestSpeed; AddLocalizedResourcesToZip(clientFilesPath, zipFile); zipFile.AddDirectory(Path.Combine(clientFilesPath, FileNameConstants.MobilePackageFolderName), FileNameConstants.MobilePackageFolderName); zipFile.AddEntry(checkoutGISStream.Bezeichnung + ".model", checkoutGISStream.ModelsToExport); foreach (var kvp in checkoutGISStream.LegendStreams) { zipFile.AddEntry(kvp.Key, kvp.Value); } foreach (var tileInfo in checkoutGISStream.Tiles) { System.Uri uri1 = new Uri(Path.Combine(tileInfo.BasePath, tileInfo.RelativePath)); foreach (string file in tileInfo.AbsoluteFilePaths) { FileInfo info = new FileInfo(file); DirectoryInfo directory = info.Directory; System.Uri uri2 = new Uri(directory.ToString()); Uri relativeUri = uri1.MakeRelativeUri(uri2); zipFile.AddFile(file, Path.Combine(FileNameConstants.TileFolderName, tileInfo.RelativePath, relativeUri.ToString())); } } cogModelList.ToList().ForEach(cog => cog = checkOutsGISService.CreateEntity(cog)); AddPackageDescriptor(zipFile, cogModelList, checkoutGISStream); zipFile.Save(exportResult.Stream); } exportResult.Stream.Seek(0, 0); } catch (Exception ex) { Loggers.ApplicationLogger.Error("Exception while creating Zipfile for Export: " + ex.Message, ex); exportResult.Errors.Add(ex.Message); } return(exportResult); }
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); }
private void AddPackageDescriptor(ZipFile zipFile, IList <CheckOutsGISModel> cogModelList, CheckOutGISStreams checkoutGis) { XmlSerializer xmlSerializer = new XmlSerializer(typeof(ServerPackageDescriptor)); Stream packageDescriptorStream = new MemoryStream(); var packageDescriptor = new ServerPackageDescriptor { Version = PackageVersioner.GetServerPackageVersion(), CurrentCulture = Thread.CurrentThread.CurrentUICulture.Name }; foreach (var cog in cogModelList) { var id = cog.InspektionsRouteGIS; packageDescriptor.Inspektionsrouten.Add(new XMLKeyValuePair <Guid, string>(id, inspektionsRouteGISService.GetById(id).Bezeichnung)); packageDescriptor.CheckOutsGISInspektionsroutenList.Add(new XMLKeyValuePair <Guid, Guid>(cog.Id, id)); } var filepaths = zipFile.EntryFileNames.ToList(); IList <string> fileextensions = new List <string>(); filepaths.Where(fp => Path.GetExtension(fp) != string.Empty).ToList().ForEach(fp => fileextensions.Add(Path.GetExtension(fp))); foreach (var file in fileextensions.Distinct()) { packageDescriptor.FileCount.Add(new XMLKeyValuePair <string, int>(file, fileextensions.Count(fe => fe == file))); } packageDescriptor.LayerConfig.AddRange(checkoutGis.Tiles); xmlSerializer.Serialize(packageDescriptorStream, packageDescriptor); packageDescriptorStream.Seek(0, 0); zipFile.AddEntry(FileNameConstants.ServerPackageDescriptorFileName, packageDescriptorStream); }