root / pithos-macos / SharingDictionaryTransformer.m @ 46b46b83
History | View | Annotate | Download (5.1 kB)
1 | 705d0947 | Miltiadis Vasilakis | // |
---|---|---|---|
2 | 705d0947 | Miltiadis Vasilakis | // SharingDictionaryTransformer.m |
3 | 705d0947 | Miltiadis Vasilakis | // pithos-macos |
4 | 705d0947 | Miltiadis Vasilakis | // |
5 | 705d0947 | Miltiadis Vasilakis | // Copyright 2011 GRNET S.A. All rights reserved. |
6 | 705d0947 | Miltiadis Vasilakis | // |
7 | 705d0947 | Miltiadis Vasilakis | // Redistribution and use in source and binary forms, with or |
8 | 705d0947 | Miltiadis Vasilakis | // without modification, are permitted provided that the following |
9 | 705d0947 | Miltiadis Vasilakis | // conditions are met: |
10 | 705d0947 | Miltiadis Vasilakis | // |
11 | 705d0947 | Miltiadis Vasilakis | // 1. Redistributions of source code must retain the above |
12 | 705d0947 | Miltiadis Vasilakis | // copyright notice, this list of conditions and the following |
13 | 705d0947 | Miltiadis Vasilakis | // disclaimer. |
14 | 705d0947 | Miltiadis Vasilakis | // |
15 | 705d0947 | Miltiadis Vasilakis | // 2. Redistributions in binary form must reproduce the above |
16 | 705d0947 | Miltiadis Vasilakis | // copyright notice, this list of conditions and the following |
17 | 705d0947 | Miltiadis Vasilakis | // disclaimer in the documentation and/or other materials |
18 | 705d0947 | Miltiadis Vasilakis | // provided with the distribution. |
19 | 705d0947 | Miltiadis Vasilakis | // |
20 | 705d0947 | Miltiadis Vasilakis | // THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS |
21 | 705d0947 | Miltiadis Vasilakis | // OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
22 | 705d0947 | Miltiadis Vasilakis | // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
23 | 705d0947 | Miltiadis Vasilakis | // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR |
24 | 705d0947 | Miltiadis Vasilakis | // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
25 | 705d0947 | Miltiadis Vasilakis | // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
26 | 705d0947 | Miltiadis Vasilakis | // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF |
27 | 705d0947 | Miltiadis Vasilakis | // USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED |
28 | 705d0947 | Miltiadis Vasilakis | // AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
29 | 705d0947 | Miltiadis Vasilakis | // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN |
30 | 705d0947 | Miltiadis Vasilakis | // ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
31 | 705d0947 | Miltiadis Vasilakis | // POSSIBILITY OF SUCH DAMAGE. |
32 | 705d0947 | Miltiadis Vasilakis | // |
33 | 705d0947 | Miltiadis Vasilakis | // The views and conclusions contained in the software and |
34 | 705d0947 | Miltiadis Vasilakis | // documentation are those of the authors and should not be |
35 | 705d0947 | Miltiadis Vasilakis | // interpreted as representing official policies, either expressed |
36 | 705d0947 | Miltiadis Vasilakis | // or implied, of GRNET S.A. |
37 | 705d0947 | Miltiadis Vasilakis | |
38 | 705d0947 | Miltiadis Vasilakis | #import "SharingDictionaryTransformer.h" |
39 | 705d0947 | Miltiadis Vasilakis | |
40 | 705d0947 | Miltiadis Vasilakis | @implementation SharingDictionaryTransformer |
41 | 705d0947 | Miltiadis Vasilakis | |
42 | 705d0947 | Miltiadis Vasilakis | + (Class)transformedValueClass { |
43 | 705d0947 | Miltiadis Vasilakis | return [NSMutableDictionary class]; |
44 | 705d0947 | Miltiadis Vasilakis | } |
45 | 705d0947 | Miltiadis Vasilakis | |
46 | 705d0947 | Miltiadis Vasilakis | + (BOOL)allowsReverseTransformation { |
47 | 705d0947 | Miltiadis Vasilakis | return YES; |
48 | 705d0947 | Miltiadis Vasilakis | } |
49 | 705d0947 | Miltiadis Vasilakis | |
50 | 705d0947 | Miltiadis Vasilakis | - (id)transformedValue:(id)value { |
51 | 705d0947 | Miltiadis Vasilakis | NSMutableDictionary *sharingDictionary = [NSMutableDictionary dictionary]; |
52 | 705d0947 | Miltiadis Vasilakis | |
53 | 705d0947 | Miltiadis Vasilakis | if (value == nil) |
54 | 705d0947 | Miltiadis Vasilakis | return sharingDictionary; |
55 | 705d0947 | Miltiadis Vasilakis | |
56 | 705d0947 | Miltiadis Vasilakis | NSRange readRange = [(NSString *)value rangeOfString:@"read=" options:NSCaseInsensitiveSearch]; |
57 | 705d0947 | Miltiadis Vasilakis | NSUInteger readStart = readRange.location + readRange.length; |
58 | 705d0947 | Miltiadis Vasilakis | NSRange writeRange = [(NSString *)value rangeOfString:@"write=" options:NSCaseInsensitiveSearch]; |
59 | 705d0947 | Miltiadis Vasilakis | NSUInteger writeStart = writeRange.location + writeRange.length; |
60 | 705d0947 | Miltiadis Vasilakis | if (writeRange.length == 0) { |
61 | 705d0947 | Miltiadis Vasilakis | if (readRange.length == 0) { |
62 | 705d0947 | Miltiadis Vasilakis | return sharingDictionary; |
63 | 705d0947 | Miltiadis Vasilakis | } |
64 | 705d0947 | Miltiadis Vasilakis | for (NSString *readUser in [[(NSString *)value substringFromIndex:readStart] componentsSeparatedByString:@","]) { |
65 | 705d0947 | Miltiadis Vasilakis | [sharingDictionary setValue:@"read" forKey:readUser]; |
66 | 705d0947 | Miltiadis Vasilakis | } |
67 | 705d0947 | Miltiadis Vasilakis | } else if (readRange.length == 0) { |
68 | 705d0947 | Miltiadis Vasilakis | for (NSString *writeUser in [[(NSString *)value substringFromIndex:writeStart] componentsSeparatedByString:@","]) { |
69 | 705d0947 | Miltiadis Vasilakis | [sharingDictionary setValue:@"write" forKey:writeUser]; |
70 | 705d0947 | Miltiadis Vasilakis | } |
71 | 705d0947 | Miltiadis Vasilakis | } else if (readRange.location < writeRange.location) { |
72 | 705d0947 | Miltiadis Vasilakis | NSRange semicolonRange = [(NSString *)value rangeOfString:@";"]; |
73 | 705d0947 | Miltiadis Vasilakis | for (NSString *readUser in [[(NSString *)value substringWithRange:NSMakeRange(readStart, semicolonRange.location - readStart)] componentsSeparatedByString:@","]) { |
74 | 705d0947 | Miltiadis Vasilakis | [sharingDictionary setValue:@"read" forKey:readUser]; |
75 | 705d0947 | Miltiadis Vasilakis | } |
76 | 705d0947 | Miltiadis Vasilakis | for (NSString *writeUser in [[(NSString *)value substringFromIndex:writeStart] componentsSeparatedByString:@","]) { |
77 | 705d0947 | Miltiadis Vasilakis | [sharingDictionary setValue:@"write" forKey:writeUser]; |
78 | 705d0947 | Miltiadis Vasilakis | } |
79 | 705d0947 | Miltiadis Vasilakis | } else { |
80 | 705d0947 | Miltiadis Vasilakis | NSRange semicolonRange = [(NSString *)value rangeOfString:@";"]; |
81 | 705d0947 | Miltiadis Vasilakis | for (NSString *readUser in [[(NSString *)value substringFromIndex:readStart] componentsSeparatedByString:@","]) { |
82 | 705d0947 | Miltiadis Vasilakis | [sharingDictionary setValue:@"read" forKey:readUser]; |
83 | 705d0947 | Miltiadis Vasilakis | } |
84 | 705d0947 | Miltiadis Vasilakis | for (NSString *writeUser in [[(NSString *)value substringWithRange:NSMakeRange(writeStart, semicolonRange.location - writeStart)] componentsSeparatedByString:@","]) { |
85 | 705d0947 | Miltiadis Vasilakis | [sharingDictionary setValue:@"write" forKey:writeUser]; |
86 | 705d0947 | Miltiadis Vasilakis | } |
87 | 705d0947 | Miltiadis Vasilakis | } |
88 | 705d0947 | Miltiadis Vasilakis | |
89 | 705d0947 | Miltiadis Vasilakis | return sharingDictionary; |
90 | 705d0947 | Miltiadis Vasilakis | } |
91 | 705d0947 | Miltiadis Vasilakis | |
92 | 705d0947 | Miltiadis Vasilakis | - (id)reverseTransformedValue:(id)value { |
93 | 470e6f81 | Miltiadis Vasilakis | if ((value == nil) || ([(NSMutableDictionary *)value count] == 0)) |
94 | 705d0947 | Miltiadis Vasilakis | return nil; |
95 | 705d0947 | Miltiadis Vasilakis | |
96 | 705d0947 | Miltiadis Vasilakis | NSString *readSharingString = nil; |
97 | 705d0947 | Miltiadis Vasilakis | NSArray *readUsers = [(NSMutableDictionary *)value allKeysForObject:@"read"]; |
98 | 705d0947 | Miltiadis Vasilakis | if ([readUsers count]) |
99 | 705d0947 | Miltiadis Vasilakis | readSharingString = [NSString stringWithFormat:@"read=%@", [readUsers componentsJoinedByString:@","]]; |
100 | 705d0947 | Miltiadis Vasilakis | NSString *writeSharingString = nil; |
101 | 705d0947 | Miltiadis Vasilakis | |
102 | 705d0947 | Miltiadis Vasilakis | NSArray *writeUsers = [(NSMutableDictionary *)value allKeysForObject:@"write"]; |
103 | 705d0947 | Miltiadis Vasilakis | if ([writeUsers count]) |
104 | 705d0947 | Miltiadis Vasilakis | writeSharingString = [NSString stringWithFormat:@"write=%@", [writeUsers componentsJoinedByString:@","]]; |
105 | 705d0947 | Miltiadis Vasilakis | |
106 | 705d0947 | Miltiadis Vasilakis | |
107 | 705d0947 | Miltiadis Vasilakis | if (readSharingString) { |
108 | 705d0947 | Miltiadis Vasilakis | if (writeSharingString) { |
109 | 705d0947 | Miltiadis Vasilakis | return [NSString stringWithFormat:@"%@;%@", readSharingString, writeSharingString]; |
110 | 705d0947 | Miltiadis Vasilakis | } |
111 | 705d0947 | Miltiadis Vasilakis | return readSharingString; |
112 | 705d0947 | Miltiadis Vasilakis | } else { |
113 | 705d0947 | Miltiadis Vasilakis | return writeSharingString; |
114 | 705d0947 | Miltiadis Vasilakis | } |
115 | 705d0947 | Miltiadis Vasilakis | } |
116 | 705d0947 | Miltiadis Vasilakis | |
117 | 705d0947 | Miltiadis Vasilakis | + (void)initialize { |
118 | 705d0947 | Miltiadis Vasilakis | [[NSValueTransformer class] setValueTransformer:[self new] forName:@"SharingDictionaryTransformer"]; |
119 | 705d0947 | Miltiadis Vasilakis | } |
120 | 705d0947 | Miltiadis Vasilakis | |
121 | 705d0947 | Miltiadis Vasilakis | @end |