Statistics
| Branch: | Revision:

root / trunk / Pithos.Interfaces / PermissionConverter.cs @ 9aa8abad

History | View | Annotate | Download (1.6 kB)

1
using System;
2
using System.Collections.Generic;
3
using System.Linq;
4
using System.Text;
5
using Newtonsoft.Json;
6

    
7
namespace Pithos.Interfaces
8
{
9
    public class PermissionConverter:JsonConverter
10
    {
11
        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
12
        {
13
            var dict = (Dictionary<string, string>) value;
14
            var pairs = from pair in dict
15
                        group pair by pair.Value into g
16
                        select new {Permission=g.Key,Names=String.Join(",", g.SelectMany(p=>p.Key))};
17

    
18
            var result=pairs.Aggregate(new StringBuilder(),
19
                                       (builder, perm) => 
20
                                       builder.AppendFormat("{0}={1};", perm.Permission, perm.Names));
21

    
22
            var finalValue = result.ToString();
23
            writer.WriteValue(finalValue);
24
        }
25

    
26
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
27
        {
28
            
29
            var permissionString= (string) reader.Value;
30

    
31
            var permissions = (from permisson in permissionString.Split(';')
32
                               let parsed = permisson.Split('=')
33
                               from account in parsed[1].Split(',')
34
                               select new { account, Permission = parsed[0] })
35
                .ToDictionary(perm=>perm.account,perm=>perm.Permission);
36

    
37
            return permissions;
38
        }
39

    
40
        public override bool CanConvert(Type objectType)
41
        {
42
            return (objectType==typeof(Dictionary<string,string>));
43
        }
44
    }
45
}