Skip to content

Commit 0ab7265

Browse files
committed
fix new report creation with save as and resolving of csv/json files
1 parent 1c6d997 commit 0ab7265

File tree

5 files changed

+42
-104
lines changed

5 files changed

+42
-104
lines changed

SqlDefinitionStorageExample/CustomDefinitionStorage.cs

Lines changed: 19 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -26,76 +26,41 @@ public CustomDefinitionStorage(SqlDefinitionStorageContext dbContext, string roo
2626
}
2727

2828
return base.CreateFolderAsync(model);
29-
}
30-
31-
public new Task DeleteAsync(string uri)
32-
{
33-
return base.DeleteAsync(this.PrepareResourceUri(uri));
34-
}
35-
36-
public new Task<ResourceFolderModel> GetFolderAsync(string uri)
37-
{
38-
var newUri = string.IsNullOrEmpty(uri)
39-
? Root
40-
: Root + "\\" + (uri ?? "");
41-
42-
return base.GetFolderAsync(newUri);
43-
}
44-
45-
public new Task<IEnumerable<ResourceModelBase>> GetFolderContentsAsync(string uri)
46-
{
47-
return base.GetFolderContentsAsync(PrepareResourceUri(uri));
48-
}
49-
29+
}
30+
5031
public new Task<ResourceFileModel> SaveAsync(SaveResourceModel model, byte[] resource)
5132
{
52-
if (string.IsNullOrEmpty(model.ParentUri))
53-
{
54-
model.ParentUri = Root;
55-
}
33+
model.ParentUri = PrepareResourceUri(model.ParentUri);
5634

5735
return base.SaveAsync(model, resource);
5836
}
5937

60-
Task IAssetsStorage.DeleteFolderAsync(string uri)
61-
{
62-
return base.DeleteFolderAsync(PrepareResourceUri(uri));
63-
}
38+
public new Task<ResourceFolderModel> GetFolderAsync(string uri) => base.GetFolderAsync(PrepareResourceUri(uri));
39+
public new Task DeleteAsync(string uri) => base.DeleteAsync(PrepareResourceUri(uri));
6440

65-
Task<byte[]> IAssetsStorage.GetAsync(string resourceName)
66-
{
67-
if (!resourceName.Contains($"{Root}\\"))
68-
{
69-
resourceName = $"{Root}\\{resourceName}";
70-
}
41+
public new Task<IEnumerable<ResourceModelBase>> GetFolderContentsAsync(string uri) => base.GetFolderContentsAsync(PrepareResourceUri(uri));
7142

72-
return base.GetAsync(PrepareResourceUri(resourceName));
73-
}
43+
Task IAssetsStorage.DeleteFolderAsync(string uri) => DeleteFolderAsync(PrepareResourceUri(uri));
7444

75-
Task<ResourceFileModel> IAssetsStorage.GetModelAsync(string uri)
76-
{
77-
return base.GetModelAsync(PrepareResourceUri(uri));
78-
}
45+
Task<byte[]> IAssetsStorage.GetAsync(string resourceName) => GetAsync(PrepareResourceUri(resourceName));
7946

80-
Task<ResourceFileModel> IAssetsStorage.RenameAsync(RenameResourceModel model)
81-
{
82-
return base.RenameAsync(model);
83-
}
47+
Task<ResourceFileModel> IAssetsStorage.GetModelAsync(string uri) => GetModelAsync(PrepareResourceUri(uri));
8448

85-
Task<ResourceFolderModel> IAssetsStorage.RenameFolderAsync(RenameFolderModel model)
86-
{
87-
return base.RenameFolderAsync(model);
88-
}
49+
Task<ResourceFileModel> IAssetsStorage.RenameAsync(RenameResourceModel model) => RenameAsync(model);
8950

90-
string PrepareResourceUri(string resourceName)
51+
Task<ResourceFolderModel> IAssetsStorage.RenameFolderAsync(RenameFolderModel model) => RenameFolderAsync(model);
52+
53+
protected string PrepareResourceUri(string uri)
9154
{
92-
if (string.IsNullOrEmpty(resourceName))
55+
if (string.IsNullOrEmpty(uri))
9356
{
94-
resourceName = Root;
57+
return Root;
9558
}
9659

97-
resourceName = resourceName.Replace("/", "\\");
98-
return resourceName;
60+
uri = uri.Replace("/", "\\");
61+
uri = uri.Contains($"{Root}\\") ? uri : $"{Root}\\{uri}";
62+
63+
return uri;
9964
}
10065
}
10166
}

SqlDefinitionStorageExample/CustomResourceStorage.cs

Lines changed: 11 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
using System;
44
using System.Collections.Generic;
55
using System.Linq;
6-
using System.Threading.Tasks;
76
using Telerik.WebReportDesigner.Services;
87
using Telerik.WebReportDesigner.Services.Models;
98

@@ -50,11 +49,6 @@ public string Save(string resourceName, byte[] resource)
5049

5150
#endregion
5251

53-
public new Task<IEnumerable<ResourceModelBase>> GetFolderContentsAsync(string uri)
54-
{
55-
return base.GetFolderContentsAsync(uri);
56-
}
57-
5852
public ResourceFileDataModel GetFile(string resourceUri)
5953
{
6054
var file = DbContext.Resources.FirstOrDefault(r => r.Uri == resourceUri);
@@ -66,48 +60,30 @@ public ResourceFileDataModel GetFile(string resourceUri)
6660
MimeType = null // Currently MIME-type is not supported. To be implemented based on file extension and/or containing parent folder.
6761
};
6862
}
69-
70-
public ResourceFolderModel GetFolderByName(string folderName)
71-
{
72-
return DbContext.ResourceFolders.FirstOrDefault(x => x.Name == folderName).ToResourceFolderModel();
73-
}
74-
75-
public bool ResourceExists(string uri)
76-
{
77-
return DbContext.Resources.Any(r => r.Name == uri);
78-
}
79-
80-
public bool ResourceNameExists(string resourceName)
81-
{
82-
return DbContext.Resources.Any(r => r.Name == resourceName);
83-
}
84-
63+
8564
public IEnumerable<ResourceModelBase> Search(SearchResourcesModel model)
8665
{
8766
return DbContext.Resources.Where(r => r.ParentUri == model.ResourceFolderUri && r.Name.Contains(model.SearchPattern)).Select(r => r.ToResourceFileModel());
8867
}
8968

9069
public IEnumerable<ResourceFileModel> GetAllByExtension(string[] extensions)
9170
{
92-
return DbContext.Resources.Where(r => extensions.Any(ex => r.Name.Contains(ex.Substring(1)))).Select(r => r.ToResourceFileModel()).AsEnumerable<ResourceFileModel>();
71+
return DbContext.Resources.Where(r => extensions.Any(ex => r.Name.Contains(ex.Substring(1)))).Select(r => r.ToResourceFileModel()).AsEnumerable();
9372
}
9473

9574
public byte[] GetByUri(string uri)
9675
{
97-
uri = uri.Replace("/", "\\");
98-
var resource = DbContext.Resources.FirstOrDefault(r => r.Uri == uri);
99-
100-
if (resource == null)
101-
{
102-
throw new ResourceNotFoundException($"The resource located at {uri} cannot be found.");
103-
}
76+
var resource = DbContext.Resources.FirstOrDefault(r => r.Uri == uri.Replace("/", "\\"));
10477

105-
return resource.Bytes;
78+
return resource == null ? throw new ResourceNotFoundException($"The resource located at {uri} cannot be found.") : resource.Bytes;
10679
}
10780

108-
public ResourceFileModel GetModelByName(string resourceName)
109-
{
110-
return DbContext.Resources.FirstOrDefault(r => r.Uri == resourceName).ToResourceFileModel();
111-
}
81+
public ResourceFileModel GetModelByName(string resourceName) => DbContext.Resources.FirstOrDefault(r => r.Uri == resourceName).ToResourceFileModel();
82+
83+
public ResourceFolderModel GetFolderByName(string folderName) => DbContext.ResourceFolders.FirstOrDefault(x => x.Name == folderName).ToResourceFolderModel();
84+
85+
public bool ResourceExists(string uri) => DbContext.Resources.Any(r => r.Name == uri);
86+
87+
public bool ResourceNameExists(string resourceName) => DbContext.Resources.Any(r => r.Name == resourceName);
11288
}
11389
}

SqlDefinitionStorageExample/CustomSharedDataSourceStorage.cs

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
using SqlDefinitionStorageExample.EFCore;
22
using SqlDefinitionStorageExample.EFCore.Models;
33
using System;
4-
using System.Collections.Generic;
54
using System.Linq;
65
using System.Threading.Tasks;
76
using Telerik.WebReportDesigner.Services;
@@ -26,19 +25,18 @@ Task<SharedDataSourceModel> ISharedDataSourceStorage.RenameAsync(RenameResourceM
2625
return Task.FromResult(RenameCore(model));
2726
}
2827

29-
public new Task<ResourceFileModel> SaveAsync(SaveResourceModel model, byte[] resource)
30-
{
31-
return Task.FromResult(SaveCore(model, resource) as ResourceFileModel);
32-
}
33-
3428
Task<ResourceFileModel> IAssetsStorage.RenameAsync(RenameResourceModel model)
3529
{
3630
return Task.FromResult(RenameCore(model) as ResourceFileModel);
3731
}
32+
public new Task<ResourceFileModel> SaveAsync(SaveResourceModel model, byte[] resource)
33+
{
34+
return Task.FromResult(SaveCore(model, resource) as ResourceFileModel);
35+
}
3836

3937
public new ResourceFileModel Overwrite(OverwriteResourceModel model, byte[] resource)
4038
{
41-
var entity = DbContext.Resources.FirstOrDefault(r => r.Uri == $"Shared Data Sources\\{model.Uri}") ?? throw new ResourceNotFoundException();
39+
var entity = DbContext.Resources.FirstOrDefault(r => r.Uri == $"{Root}\\{model.Uri}") ?? throw new ResourceNotFoundException();
4240
entity.Bytes = resource;
4341
entity.ModifiedOn = DateTime.Now;
4442
entity.Description = SharedDataSourceDescriptionHelper.Read(resource);
@@ -61,28 +59,26 @@ Task<ResourceFileModel> IAssetsStorage.RenameAsync(RenameResourceModel model)
6159

6260
SharedDataSourceModel SaveCore(SaveResourceModel model, byte[] resource)
6361
{
64-
model.ParentUri = string.IsNullOrEmpty(model.ParentUri) ? "Shared Data Sources" : $"Shared Data Sources\\{model.ParentUri}";
62+
model.ParentUri = string.IsNullOrEmpty(model.ParentUri) ? Root : $"{Root}\\{model.ParentUri}";
6563
model.ParentUri = model.ParentUri.Replace("/", "\\");
6664

6765
if (model.ParentUri.EndsWith('\\'))
6866
{
6967
model.ParentUri = model.ParentUri.Remove(model.ParentUri.Length - 1);
7068
}
7169

72-
var entity = DbContext.Resources.FirstOrDefault(r => r.Uri == ResourceStorageBase.FixParentUri(model.ParentUri) + model.Name);
70+
var entity = DbContext.Resources.FirstOrDefault(r => r.Uri == FixParentUri(model.ParentUri) + model.Name);
7371

7472
if (entity != null)
7573
{
7674
entity.Bytes = resource;
7775
entity.ModifiedOn = DateTime.Now;
7876
entity.Description = SharedDataSourceDescriptionHelper.Read(resource);
77+
DbContext.SaveChanges();
78+
7979
return entity.ToSharedDataSourceModel();
8080
}
8181

82-
if (string.IsNullOrEmpty(model.ParentUri))
83-
{
84-
model.ParentUri = Root;
85-
}
8682
var entityEntry = DbContext.Resources.Add(model.ToDbResourceModel(resource));
8783
DbContext.SaveChanges();
8884

SqlDefinitionStorageExample/EFCore/Models/DbModelExtensions.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ public static ResourceFileModel ToResourceFileModel(this EFCore.Models.Resource
1717
FileName = dbReportModel.Name,
1818
ParentPath = dbReportModel.ParentUri,
1919
Uri = dbReportModel.Uri,
20+
FullPath = dbReportModel.Uri,
2021
Size = dbReportModel.Bytes.Length / 1024f,
2122
CreatedOn = dbReportModel.CreatedOn,
2223
ModifiedOn = dbReportModel.ModifiedOn

SqlDefinitionStorageExample/ResourceStorageBase.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public class ResourceStorageBase(SqlDefinitionStorageContext dbContext, string r
1515
{
1616
protected SqlDefinitionStorageContext DbContext { get; } = dbContext;
1717

18-
protected string Root { get; set; } = rootFolder;
18+
protected string Root { get; } = rootFolder;
1919

2020
// IF PARENT URI DOES NOT END WITH
2121
public static string FixParentUri(string uri) => uri.EndsWith('\\') ? uri : uri + "\\";
@@ -119,7 +119,7 @@ protected Task<ResourceFileModel> SaveAsync(SaveResourceModel model, byte[] reso
119119
protected Task<byte[]> GetAsync(string resourceName)
120120
{
121121
var resourceBytes = GetDbResourceModel(resourceName)?.Bytes;
122-
return resourceBytes == null ? throw new ResourceNotFoundException() : Task.FromResult(resourceBytes);
122+
return resourceBytes == null ? throw new ReportNotFoundException() : Task.FromResult(resourceBytes);
123123
}
124124

125125
protected Task<ResourceFileModel> GetModelAsync(string uri)

0 commit comments

Comments
 (0)