Skip to content

Commit 3cf7d1c

Browse files
committed
implement saving of shared data sources
1 parent 3d001a2 commit 3cf7d1c

12 files changed

+162
-180
lines changed

SqlDefinitionStorageExample/CustomReportSourceResolver.cs

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using SqlDefinitionStorageExample.EFCore;
2+
using SqlDefinitionStorageExample.EFCore.Models;
23
using System.Collections.Generic;
34
using System.IO;
45
using System.Linq;
@@ -12,25 +13,31 @@ public class CustomReportSourceResolver : IReportSourceResolver
1213

1314
private SqlDefinitionStorageContext _dbContext { get; }
1415
public CustomReportSourceResolver(SqlDefinitionStorageContext context) {
15-
this._dbContext = context;
16+
_dbContext = context;
1617
}
1718

1819
public ReportSource Resolve(string uri, OperationOrigin operationOrigin, IDictionary<string, object> currentParameterValues)
1920
{
2021
var reportPackager = new ReportPackager();
21-
var report = this._dbContext.Resources.FirstOrDefault(r => r.Uri == uri.Replace("/", "\\"));
22+
23+
if (!uri.Contains("Reports\\"))
24+
{
25+
uri = $"Reports\\{uri}";
26+
}
27+
28+
var report = _dbContext.Resources.FirstOrDefault(r => r.Uri == uri.Replace("/", "\\"));
2229

2330
if (report == null)
2431
{
2532
throw new FileNotFoundException();
2633
}
2734

2835
MemoryStream stream = new(report.Bytes);
29-
Telerik.Reporting.Report report1 = (Telerik.Reporting.Report)reportPackager.UnpackageDocument(stream);
36+
Telerik.Reporting.Report reportDocument = (Telerik.Reporting.Report)reportPackager.UnpackageDocument(stream);
3037

3138
var instanceReportSource = new InstanceReportSource
3239
{
33-
ReportDocument = report1
40+
ReportDocument = reportDocument
3441
};
3542

3643
return instanceReportSource;

SqlDefinitionStorageExample/CustomResourceStorage.cs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,6 @@ public string Save(string resourceName, byte[] resource)
5252

5353
public new Task<IEnumerable<ResourceModelBase>> GetFolderContentsAsync(string uri)
5454
{
55-
//var newUri = string.IsNullOrEmpty(uri)
56-
// ? Root
57-
// : Root + "\\" + (uri ?? "");
58-
5955
return base.GetFolderContentsAsync(uri);
6056
}
6157

SqlDefinitionStorageExample/CustomSharedDataSourceResolver.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ Telerik.Reporting.DataSource Data.ISharedDataSourceResolver.Resolve(string share
3030
throw new NullReferenceException($"The path {sharedDataSourcePath} cannot be resolved.");
3131
}
3232

33-
var sds = context.SharedDataSources.FirstOrDefault(m => m.Uri == sharedDataSourcePath);
33+
var sds = context.Resources.FirstOrDefault(m => m.Uri == sharedDataSourcePath);
3434
using (var ms = new MemoryStream(sds.Bytes))
3535
{
3636
return (Telerik.Reporting.DataSource)new Telerik.Reporting.XmlSerialization.ReportXmlSerializer()
Lines changed: 21 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using Microsoft.EntityFrameworkCore;
1+
using DocumentFormat.OpenXml.Drawing.Charts;
2+
using Microsoft.EntityFrameworkCore;
23
using SqlDefinitionStorageExample.EFCore;
34
using SqlDefinitionStorageExample.EFCore.Models;
45
using System;
@@ -10,121 +11,54 @@
1011

1112
namespace SqlDefinitionStorageExample
1213
{
13-
public class CustomSharedDataSourceStorage(SqlDefinitionStorageContext context) : CustomDefinitionStorage(context, "Shared Data Sources"), ISharedDataSourceStorage
14+
public class CustomSharedDataSourceStorage(SqlDefinitionStorageContext context) : CustomResourceStorage(context, "Shared Data Sources"), ISharedDataSourceStorage
1415
{
15-
public bool FolderExists(string uri)
16-
{
17-
throw new System.NotImplementedException();
18-
}
19-
20-
public bool FolderHasContents(string uri)
21-
{
22-
throw new System.NotImplementedException();
23-
}
24-
25-
public bool FolderNameExists(string folderName)
26-
{
27-
return false;
28-
}
29-
30-
public IEnumerable<ResourceFileModel> GetAllByExtension(string[] extensions)
31-
{
32-
throw new System.NotImplementedException();
33-
}
34-
35-
public byte[] GetByUri(string uri)
36-
{
37-
throw new System.NotImplementedException();
38-
}
39-
40-
public ResourceFileDataModel GetFile(string resourceUri)
41-
{
42-
throw new System.NotImplementedException();
43-
}
44-
45-
public ResourceFolderModel GetFolderByName(string folderName)
46-
{
47-
throw new System.NotImplementedException();
48-
}
49-
50-
public ResourceFileModel GetModelByName(string resourceName)
51-
{
52-
throw new System.NotImplementedException();
53-
}
54-
55-
public ResourceFileModel Move(MoveResourceModel model)
56-
{
57-
throw new System.NotImplementedException();
58-
}
59-
60-
public ResourceFolderModel MoveFolder(MoveFolderModel model)
61-
{
62-
throw new System.NotImplementedException();
63-
}
64-
65-
public ResourceFileModel Overwrite(OverwriteResourceModel model, byte[] resource)
16+
Task<SharedDataSourceModel> ISharedDataSourceStorage.GetModelAsync(string uri)
6617
{
67-
throw new System.NotImplementedException();
18+
return Task.FromResult(GetDbResourceModel(uri).ToResourceFileModel() as SharedDataSourceModel);
6819
}
6920

70-
public bool ResourceExists(string uri)
21+
Task<SharedDataSourceModel> ISharedDataSourceStorage.SaveAsync(SaveResourceModel model, byte[] resource)
7122
{
72-
return DbContext.SharedDataSources.Any(d => d.Uri == uri);
23+
return Task.FromResult(SaveCore(model, resource) as SharedDataSourceModel);
7324
}
7425

75-
public bool ResourceNameExists(string resourceName)
26+
Task<SharedDataSourceModel> ISharedDataSourceStorage.RenameAsync(RenameResourceModel model)
7627
{
77-
throw new System.NotImplementedException();
28+
throw new NotImplementedException();
7829
}
7930

80-
public string Save(string resourceName, byte[] resource)
31+
public new Task<ResourceFileModel> SaveAsync(SaveResourceModel model, byte[] resource)
8132
{
82-
throw new System.NotImplementedException();
33+
return Task.FromResult(SaveCore(model, resource));
8334
}
8435

85-
public IEnumerable<ResourceModelBase> Search(SearchResourcesModel model)
36+
public new ResourceFileModel Overwrite(OverwriteResourceModel model, byte[] resource)
8637
{
8738
throw new System.NotImplementedException();
8839
}
8940

90-
Task<SharedDataSourceModel> ISharedDataSourceStorage.GetModelAsync(string uri)
91-
{
92-
return Task.FromResult(
93-
this.GetDbSharedDataSourceModel(uri)
94-
.ToSharedDataSourceModel());
95-
}
9641

97-
Task<SharedDataSourceModel> ISharedDataSourceStorage.RenameAsync(RenameResourceModel model)
42+
ResourceFileModel SaveCore(SaveResourceModel model, byte[] resource)
9843
{
99-
throw new System.NotImplementedException();
100-
}
101-
102-
Task<SharedDataSourceModel> ISharedDataSourceStorage.SaveAsync(SaveResourceModel model, byte[] resource)
103-
{
104-
var entity = DbContext.SharedDataSources.FirstOrDefault(r => r.Uri == model.ParentUri + model.Name);
44+
var entity = DbContext.Resources.FirstOrDefault(r => r.Uri == model.ParentUri + "\\" + model.Name);
10545

10646
if (entity != null)
10747
{
10848
entity.Bytes = resource;
10949
entity.ModifiedOn = DateTime.Now;
110-
DbContext.SaveChanges();
111-
return Task.FromResult(entity.ToSharedDataSourceModel());
50+
entity.Description = SharedDataSourceDescriptionHelper.Read(resource);
51+
return entity.ToSharedDataSourceModel();
11252
}
11353

114-
var entityEntry = DbContext.SharedDataSources.Add(model.ToDbSharedDataSource(resource));
115-
DbContext.SaveChanges();
116-
117-
return Task.FromResult(entityEntry.Entity.ToSharedDataSourceModel());
118-
}
119-
120-
EFCore.Models.SharedDataSource GetDbSharedDataSourceModel(string uri)
121-
{
122-
if (DbContext.SharedDataSources.Any())
54+
if (string.IsNullOrEmpty(model.ParentUri))
12355
{
124-
return DbContext.SharedDataSources.FirstOrDefault(r => r.Uri == uri);
56+
model.ParentUri = Root;
12557
}
58+
var entityEntry = DbContext.Resources.Add(model.ToDbResourceModel(resource));
59+
DbContext.SaveChanges();
12660

127-
return null;
61+
return entityEntry.Entity.ToSharedDataSourceModel();
12862
}
12963
}
13064
}

SqlDefinitionStorageExample/EFCore/Models/DbModelExtensions.cs

Lines changed: 34 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -19,28 +19,31 @@ public static ResourceFileModel ToResourceFileModel(this EFCore.Models.Resource
1919
Uri = dbReportModel.Uri,
2020
Size = dbReportModel.Bytes.Length / 1024f,
2121
CreatedOn = dbReportModel.CreatedOn,
22-
ModifiedOn = dbReportModel.ModifiedOn,
22+
ModifiedOn = dbReportModel.ModifiedOn
2323
};
2424
}
2525

26-
public static SharedDataSourceModel ToSharedDataSourceModel(this EFCore.Models.SharedDataSource dbSharedDataSource)
26+
public static SharedDataSourceModel ToSharedDataSourceModel(this EFCore.Models.Resource dbReportModel)
2727
{
28-
if (dbSharedDataSource == null)
28+
if (dbReportModel == null)
2929
{
3030
return null;
3131
}
3232

33-
return new SharedDataSourceModel() {
34-
FileName = dbSharedDataSource.Name,
35-
ParentPath = dbSharedDataSource.ParentUri,
36-
Uri = dbSharedDataSource.Uri,
37-
Size = dbSharedDataSource.Bytes.Length / 1024f,
38-
CreatedOn = dbSharedDataSource.CreatedOn,
39-
ModifiedOn = dbSharedDataSource.ModifiedOn,
40-
Description = dbSharedDataSource.Description ?? string.Empty
33+
return new SharedDataSourceModel()
34+
{
35+
FileName = dbReportModel.Name,
36+
ParentPath = dbReportModel.ParentUri,
37+
Uri = dbReportModel.Uri,
38+
Size = dbReportModel.Bytes.Length / 1024f,
39+
CreatedOn = dbReportModel.CreatedOn,
40+
ModifiedOn = dbReportModel.ModifiedOn,
41+
Description = dbReportModel.Description,
42+
FullPath = dbReportModel.Uri,
4143
};
4244
}
4345

46+
4447
public static ResourceFolderModel ToResourceFolderModel(this EFCore.Models.ResourceFolder dbReportFolderModel)
4548
{
4649
if (dbReportFolderModel == null)
@@ -88,9 +91,9 @@ public static EFCore.Models.Resource ToDbResourceModel(this SaveResourceModel sa
8891
};
8992
}
9093

91-
public static EFCore.Models.SharedDataSource ToDbSharedDataSource(this SaveResourceModel saveResourceModel, byte[] data)
94+
public static EFCore.Models.Resource ToDbResourceModel(this SaveResourceModel saveResourceModel, byte[] data, string description)
9295
{
93-
return new Models.SharedDataSource()
96+
return new Models.Resource()
9497
{
9598
Name = saveResourceModel.Name,
9699
Bytes = data,
@@ -99,6 +102,24 @@ public static EFCore.Models.SharedDataSource ToDbSharedDataSource(this SaveResou
99102
? saveResourceModel.ParentUri
100103
: saveResourceModel.ParentUri + "\\") + saveResourceModel.Name,
101104
Size = data.Length,
105+
Description = description,
106+
CreatedOn = DateTime.Now,
107+
ModifiedOn = DateTime.Now
108+
};
109+
}
110+
111+
public static EFCore.Models.Resource ToDbResourceModel(this SharedDataSourceModel model, byte[] data)
112+
{
113+
return new Models.Resource()
114+
{
115+
Name = model.FileName,
116+
Bytes = data,
117+
ParentUri = model.ParentPath,
118+
Uri = (string.IsNullOrEmpty(model.ParentPath)
119+
? model.ParentPath
120+
: model.ParentPath + "\\") + model.FileName,
121+
Size = data.Length,
122+
Description = model.Description,
102123
CreatedOn = DateTime.Now,
103124
ModifiedOn = DateTime.Now
104125
};

SqlDefinitionStorageExample/EFCore/Models/Report.cs

Lines changed: 0 additions & 10 deletions
This file was deleted.

SqlDefinitionStorageExample/EFCore/Models/ReportFolder.cs

Lines changed: 0 additions & 12 deletions
This file was deleted.

SqlDefinitionStorageExample/EFCore/Models/Resource.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System;
22
using System.ComponentModel.DataAnnotations;
33
using System.ComponentModel.DataAnnotations.Schema;
4+
using System.Runtime.InteropServices;
45

56
namespace SqlDefinitionStorageExample.EFCore.Models
67
{
@@ -39,5 +40,8 @@ public class ResourceBase
3940

4041
[Column("Uri")]
4142
public string Uri { get; set; }
43+
44+
[Column("Description")]
45+
public string? Description {get;set;}
4246
}
4347
}

SqlDefinitionStorageExample/EFCore/Models/SharedDataSource.cs

Lines changed: 0 additions & 43 deletions
This file was deleted.

SqlDefinitionStorageExample/EFCore/SqlDefinitionStorageContext.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,13 @@ public class SqlDefinitionStorageContext : DbContext
1010

1111
public DbSet<ResourceFolder> ResourceFolders { get; set; }
1212

13-
public DbSet<SharedDataSource> SharedDataSources { get; set; }
14-
1513
public SqlDefinitionStorageContext(DbContextOptions<SqlDefinitionStorageContext> options) : base(options) { }
1614

1715
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
1816
{
1917
if (!optionsBuilder.IsConfigured)
2018
{
21-
var connectionString = @"Server=.\SQLEXPRESS;Database=ResourcesStorage;Trusted_Connection=True;TrustServerCertificate=True;";
19+
var connectionString = @"Server=.\SQLEXPRESS;Database=ResourceStorage;Trusted_Connection=True;TrustServerCertificate=True;";
2220
optionsBuilder.UseSqlServer(connectionString);
2321
}
2422
}

0 commit comments

Comments
 (0)