You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@chemistry.apache.org by ga...@apache.org on 2014/07/18 14:18:53 UTC

svn commit: r1611607 - in /chemistry/objectivecmis/trunk: ObjectiveCMIS.xcodeproj/ ObjectiveCMIS/Bindings/Browser/ ObjectiveCMIS/Common/ ObjectiveCMIS/Utils/

Author: gavincornwell
Date: Fri Jul 18 12:18:51 2014
New Revision: 1611607

URL: http://svn.apache.org/r1611607
Log:
CMIS-823: Apps that use the ObjectiveCMIS static library crash when attempting to use the browser binding

The reason was the NSDictionary category being declared in it's own file. I've moved the category to a new CMISDictionaryUtil class and defined a helper method that is used by the library, this is enough to get the category loaded.

Added:
    chemistry/objectivecmis/trunk/ObjectiveCMIS/Utils/CMISDictionaryUtil.h
    chemistry/objectivecmis/trunk/ObjectiveCMIS/Utils/CMISDictionaryUtil.m
Removed:
    chemistry/objectivecmis/trunk/ObjectiveCMIS/Utils/CMISNSDictionary+CMISUtil.h
    chemistry/objectivecmis/trunk/ObjectiveCMIS/Utils/CMISNSDictionary+CMISUtil.m
Modified:
    chemistry/objectivecmis/trunk/ObjectiveCMIS.xcodeproj/project.pbxproj
    chemistry/objectivecmis/trunk/ObjectiveCMIS/Bindings/Browser/CMISBrowserUtil.m
    chemistry/objectivecmis/trunk/ObjectiveCMIS/Common/CMISCreatablePropertyTypes.m
    chemistry/objectivecmis/trunk/ObjectiveCMIS/Common/CMISErrors.m
    chemistry/objectivecmis/trunk/ObjectiveCMIS/Common/CMISNewTypeSettableAttributes.m
    chemistry/objectivecmis/trunk/ObjectiveCMIS/Utils/CMISObjectConverter.m

Modified: chemistry/objectivecmis/trunk/ObjectiveCMIS.xcodeproj/project.pbxproj
URL: http://svn.apache.org/viewvc/chemistry/objectivecmis/trunk/ObjectiveCMIS.xcodeproj/project.pbxproj?rev=1611607&r1=1611606&r2=1611607&view=diff
==============================================================================
--- chemistry/objectivecmis/trunk/ObjectiveCMIS.xcodeproj/project.pbxproj (original)
+++ chemistry/objectivecmis/trunk/ObjectiveCMIS.xcodeproj/project.pbxproj Fri Jul 18 12:18:51 2014
@@ -63,6 +63,8 @@
 		4EA61BE91564F75000C759E4 /* CMISErrors.h in Headers */ = {isa = PBXBuildFile; fileRef = 4EA61BE71564F75000C759E4 /* CMISErrors.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		4EA61BEA1564F75000C759E4 /* CMISErrors.m in Sources */ = {isa = PBXBuildFile; fileRef = 4EA61BE81564F75000C759E4 /* CMISErrors.m */; };
 		4EA61BEB1564F75000C759E4 /* CMISErrors.m in Sources */ = {isa = PBXBuildFile; fileRef = 4EA61BE81564F75000C759E4 /* CMISErrors.m */; };
+		581A001E197945B8003581F4 /* CMISDictionaryUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = 581A001C197945B8003581F4 /* CMISDictionaryUtil.h */; settings = {ATTRIBUTES = (Public, ); }; };
+		581A001F197945B8003581F4 /* CMISDictionaryUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 581A001D197945B8003581F4 /* CMISDictionaryUtil.m */; };
 		5892CB74192CB5DF00C7734A /* CMISLinkRelations.h in Headers */ = {isa = PBXBuildFile; fileRef = 5892CB72192CB5DF00C7734A /* CMISLinkRelations.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		5892CB75192CB5DF00C7734A /* CMISLinkRelations.m in Sources */ = {isa = PBXBuildFile; fileRef = 5892CB73192CB5DF00C7734A /* CMISLinkRelations.m */; };
 		5892CB80192CB65D00C7734A /* CMISFolderTypeDefinition.h in Headers */ = {isa = PBXBuildFile; fileRef = 5892CB76192CB65D00C7734A /* CMISFolderTypeDefinition.h */; settings = {ATTRIBUTES = (Public, ); }; };
@@ -140,9 +142,6 @@
 		5892CC0E192CB83800C7734A /* CMISBrowserVersioningService.m in Sources */ = {isa = PBXBuildFile; fileRef = 5892CBF7192CB83800C7734A /* CMISBrowserVersioningService.m */; };
 		5892CC13192CB91300C7734A /* CMISMimeHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 5892CC0F192CB91300C7734A /* CMISMimeHelper.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		5892CC14192CB91300C7734A /* CMISMimeHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 5892CC10192CB91300C7734A /* CMISMimeHelper.m */; };
-		5892CC15192CB91300C7734A /* CMISNSDictionary+CMISUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = 5892CC11192CB91300C7734A /* CMISNSDictionary+CMISUtil.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		5892CC16192CB91300C7734A /* CMISNSDictionary+CMISUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 5892CC12192CB91300C7734A /* CMISNSDictionary+CMISUtil.m */; };
-		5892CC17192CB93E00C7734A /* CMISNSDictionary+CMISUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 5892CC12192CB91300C7734A /* CMISNSDictionary+CMISUtil.m */; };
 		5892CC1A192CE23F00C7734A /* CMISReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = 5892CC18192CE23F00C7734A /* CMISReachability.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		5892CC1B192CE23F00C7734A /* CMISReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 5892CC19192CE23F00C7734A /* CMISReachability.m */; };
 		5892CC20192CEE3E00C7734A /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5892CC1F192CEE3E00C7734A /* SystemConfiguration.framework */; };
@@ -317,6 +316,8 @@
 		4EA61BE71564F75000C759E4 /* CMISErrors.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CMISErrors.h; path = Common/CMISErrors.h; sourceTree = "<group>"; };
 		4EA61BE81564F75000C759E4 /* CMISErrors.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CMISErrors.m; path = Common/CMISErrors.m; sourceTree = "<group>"; };
 		580123DB196AEE010028422E /* ObjectiveCMIS.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ObjectiveCMIS.xcconfig; sourceTree = "<group>"; };
+		581A001C197945B8003581F4 /* CMISDictionaryUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CMISDictionaryUtil.h; path = Utils/CMISDictionaryUtil.h; sourceTree = "<group>"; };
+		581A001D197945B8003581F4 /* CMISDictionaryUtil.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CMISDictionaryUtil.m; path = Utils/CMISDictionaryUtil.m; sourceTree = "<group>"; };
 		5892CB72192CB5DF00C7734A /* CMISLinkRelations.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CMISLinkRelations.h; path = Common/CMISLinkRelations.h; sourceTree = "<group>"; };
 		5892CB73192CB5DF00C7734A /* CMISLinkRelations.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CMISLinkRelations.m; path = Common/CMISLinkRelations.m; sourceTree = "<group>"; };
 		5892CB76192CB65D00C7734A /* CMISFolderTypeDefinition.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CMISFolderTypeDefinition.h; path = Bindings/CMISFolderTypeDefinition.h; sourceTree = "<group>"; };
@@ -394,8 +395,6 @@
 		5892CBF7192CB83800C7734A /* CMISBrowserVersioningService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CMISBrowserVersioningService.m; sourceTree = "<group>"; };
 		5892CC0F192CB91300C7734A /* CMISMimeHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CMISMimeHelper.h; path = Utils/CMISMimeHelper.h; sourceTree = "<group>"; };
 		5892CC10192CB91300C7734A /* CMISMimeHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CMISMimeHelper.m; path = Utils/CMISMimeHelper.m; sourceTree = "<group>"; };
-		5892CC11192CB91300C7734A /* CMISNSDictionary+CMISUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "CMISNSDictionary+CMISUtil.h"; path = "Utils/CMISNSDictionary+CMISUtil.h"; sourceTree = "<group>"; };
-		5892CC12192CB91300C7734A /* CMISNSDictionary+CMISUtil.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "CMISNSDictionary+CMISUtil.m"; path = "Utils/CMISNSDictionary+CMISUtil.m"; sourceTree = "<group>"; };
 		5892CC18192CE23F00C7734A /* CMISReachability.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CMISReachability.h; path = Utils/CMISReachability.h; sourceTree = "<group>"; };
 		5892CC19192CE23F00C7734A /* CMISReachability.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CMISReachability.m; path = Utils/CMISReachability.m; sourceTree = "<group>"; };
 		5892CC1C192CE2F700C7734A /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; };
@@ -821,6 +820,8 @@
 				4E39DF5B163A72B400F21DE6 /* CMISDateUtil.m */,
 				4E10ABFD16B916B500E2287E /* CMISDefaultNetworkProvider.h */,
 				4E10ABFE16B916B500E2287E /* CMISDefaultNetworkProvider.m */,
+				581A001C197945B8003581F4 /* CMISDictionaryUtil.h */,
+				581A001D197945B8003581F4 /* CMISDictionaryUtil.m */,
 				8276E12B155E355D00344A29 /* CMISFileUtil.h */,
 				8276E12C155E355D00344A29 /* CMISFileUtil.m */,
 				BD5C96FC16281A54002DDC6E /* CMISHttpRequest.h */,
@@ -835,8 +836,6 @@
 				82895A1A16D8A8C5007BC80A /* CMISLog.m */,
 				5892CC0F192CB91300C7734A /* CMISMimeHelper.h */,
 				5892CC10192CB91300C7734A /* CMISMimeHelper.m */,
-				5892CC11192CB91300C7734A /* CMISNSDictionary+CMISUtil.h */,
-				5892CC12192CB91300C7734A /* CMISNSDictionary+CMISUtil.m */,
 				828073291515407000EF635C /* CMISObjectConverter.h */,
 				8280732A1515407000EF635C /* CMISObjectConverter.m */,
 				5892CC18192CE23F00C7734A /* CMISReachability.h */,
@@ -932,7 +931,6 @@
 				5892CBC9192CB7D900C7734A /* CMISAtomPubExtensionDataParserBase.h in Headers */,
 				828072E91515403800EF635C /* CMISFileableObject.h in Headers */,
 				828072EB1515403800EF635C /* CMISFolder.h in Headers */,
-				5892CC15192CB91300C7734A /* CMISNSDictionary+CMISUtil.h in Headers */,
 				5892CBCF192CB7D900C7734A /* CMISAtomPubPrincipalParser.h in Headers */,
 				5892CBF8192CB83800C7734A /* CMISBroswerFormDataWriter.h in Headers */,
 				828072ED1515403800EF635C /* CMISObject.h in Headers */,
@@ -1013,6 +1011,7 @@
 				FE417D6715761A34009056AA /* CMISTypeDefinition.h in Headers */,
 				5892CC07192CB83800C7734A /* CMISBrowserRepositoryService.h in Headers */,
 				FE417D6815761A34009056C0 /* CMISRenditionData.h in Headers */,
+				581A001E197945B8003581F4 /* CMISDictionaryUtil.h in Headers */,
 				FE417D6815761A34009056C4 /* CMISRendition.h in Headers */,
 				4E39DF5C163A72B400F21DE6 /* CMISDateUtil.h in Headers */,
 				BD5C96FE16281A54002DDC6E /* CMISHttpRequest.h in Headers */,
@@ -1208,6 +1207,7 @@
 				82AD4AEC1541642A0012DDB6 /* CMISBindingFactory.m in Sources */,
 				5892CB81192CB65D00C7734A /* CMISFolderTypeDefinition.m in Sources */,
 				82ABA0491554655A00935225 /* CMISBindingSession.m in Sources */,
+				581A001F197945B8003581F4 /* CMISDictionaryUtil.m in Sources */,
 				5892CBCC192CB7D900C7734A /* CMISAtomPubExtensionElementParser.m in Sources */,
 				25F721221907E0FE00B2FD66 /* CMISNewTypeSettableAttributes.m in Sources */,
 				5892CB97192CB73D00C7734A /* CMISAtomPubObjectByPathUriBuilder.m in Sources */,
@@ -1229,7 +1229,6 @@
 				5892CC02192CB83800C7734A /* CMISBrowserDiscoveryService.m in Sources */,
 				4EA61BE21564F73900C759E4 /* CMISObjectList.m in Sources */,
 				5892CBFC192CB83800C7734A /* CMISBrowserBaseService.m in Sources */,
-				5892CC16192CB91300C7734A /* CMISNSDictionary+CMISUtil.m in Sources */,
 				4EA61BE51564F73900C759E4 /* CMISQueryResult.m in Sources */,
 				5892CBBC192CB7D900C7734A /* CMISAtomEntryParser.m in Sources */,
 				4EA61BEA1564F75000C759E4 /* CMISErrors.m in Sources */,
@@ -1281,7 +1280,6 @@
 				4EA61BD91564F70C00C759E4 /* CMISStringInOutParameter.m in Sources */,
 				4EA61BDC1564F70C00C759E4 /* CMISURLUtil.m in Sources */,
 				4EA61BE31564F73900C759E4 /* CMISObjectList.m in Sources */,
-				5892CC17192CB93E00C7734A /* CMISNSDictionary+CMISUtil.m in Sources */,
 				4EA61BE61564F73900C759E4 /* CMISQueryResult.m in Sources */,
 				4EA61BEB1564F75000C759E4 /* CMISErrors.m in Sources */,
 				FE417D6815761A34009056D2 /* CMISBaseTest.m in Sources */,

Modified: chemistry/objectivecmis/trunk/ObjectiveCMIS/Bindings/Browser/CMISBrowserUtil.m
URL: http://svn.apache.org/viewvc/chemistry/objectivecmis/trunk/ObjectiveCMIS/Bindings/Browser/CMISBrowserUtil.m?rev=1611607&r1=1611606&r2=1611607&view=diff
==============================================================================
--- chemistry/objectivecmis/trunk/ObjectiveCMIS/Bindings/Browser/CMISBrowserUtil.m (original)
+++ chemistry/objectivecmis/trunk/ObjectiveCMIS/Bindings/Browser/CMISBrowserUtil.m Fri Jul 18 12:18:51 2014
@@ -29,7 +29,7 @@
 #import "CMISItemTypeDefinition.h"
 #import "CMISSecondaryTypeDefinition.h"
 #import "CMISErrors.h"
-#import "CMISNSDictionary+CMISUtil.h"
+#import "CMISDictionaryUtil.h"
 #import "CMISRepositoryCapabilities.h"
 #import "CMISObjectConverter.h"
 #import "CMISAcl.h"

Modified: chemistry/objectivecmis/trunk/ObjectiveCMIS/Common/CMISCreatablePropertyTypes.m
URL: http://svn.apache.org/viewvc/chemistry/objectivecmis/trunk/ObjectiveCMIS/Common/CMISCreatablePropertyTypes.m?rev=1611607&r1=1611606&r2=1611607&view=diff
==============================================================================
--- chemistry/objectivecmis/trunk/ObjectiveCMIS/Common/CMISCreatablePropertyTypes.m (original)
+++ chemistry/objectivecmis/trunk/ObjectiveCMIS/Common/CMISCreatablePropertyTypes.m Fri Jul 18 12:18:51 2014
@@ -21,7 +21,7 @@
 #import "CMISLog.h"
 #import "CMISObjectConverter.h"
 #import "CMISConstants.h"
-#import "CMISNSDictionary+CMISUtil.h"
+#import "CMISDictionaryUtil.h"
 
 @implementation CMISCreatablePropertyTypes
 

Modified: chemistry/objectivecmis/trunk/ObjectiveCMIS/Common/CMISErrors.m
URL: http://svn.apache.org/viewvc/chemistry/objectivecmis/trunk/ObjectiveCMIS/Common/CMISErrors.m?rev=1611607&r1=1611606&r2=1611607&view=diff
==============================================================================
--- chemistry/objectivecmis/trunk/ObjectiveCMIS/Common/CMISErrors.m (original)
+++ chemistry/objectivecmis/trunk/ObjectiveCMIS/Common/CMISErrors.m Fri Jul 18 12:18:51 2014
@@ -18,6 +18,7 @@
  */
 
 #import "CMISErrors.h"
+#import "CMISDictionaryUtil.h"
 
 NSString * const kCMISErrorDomainName = @"org.apache.chemistry.objectivecmis";
 //to be used in the userInfo dictionary as Localized error description
@@ -68,30 +69,23 @@ NSString * const kCMISErrorDescriptionVe
     if (error == nil) {//shouldn't really get there
         return nil;
     }
+    
     if ([error.domain isEqualToString:kCMISErrorDomainName]) {
         return error;
     }
-    NSMutableDictionary *errorInfo = [NSMutableDictionary dictionary];
-    [errorInfo setValue:[CMISErrors localizedDescriptionForCode:code] forKey:NSLocalizedDescriptionKey];
-    [errorInfo setObject:error forKey:NSUnderlyingErrorKey];
-    
-    if (error.localizedFailureReason != nil)
-    {
-        errorInfo[NSLocalizedFailureReasonErrorKey] = error.localizedFailureReason;
-    }
     
-    return [NSError errorWithDomain:kCMISErrorDomainName code:code userInfo:errorInfo];
+    NSDictionary *userInfo = [CMISDictionaryUtil userInfoDictionaryForErrorWithDescription:[CMISErrors localizedDescriptionForCode:code]
+                                                                                    reason:nil
+                                                                           underlyingError:error];
+    return [NSError errorWithDomain:kCMISErrorDomainName code:code userInfo:userInfo];
 }
 
 + (NSError *)createCMISErrorWithCode:(CMISErrorCodes)code detailedDescription:(NSString *)detailedDescription
 {
-    NSMutableDictionary *errorInfo = [NSMutableDictionary dictionary];
-    [errorInfo setValue:[CMISErrors localizedDescriptionForCode:code] forKey:NSLocalizedDescriptionKey];
-    if (detailedDescription != nil) {
-        [errorInfo setValue:detailedDescription forKey:NSLocalizedFailureReasonErrorKey];
-    }
-    
-    return [NSError errorWithDomain:kCMISErrorDomainName code:code userInfo:errorInfo];
+    NSDictionary *userInfo = [CMISDictionaryUtil userInfoDictionaryForErrorWithDescription:[CMISErrors localizedDescriptionForCode:code]
+                                                                                    reason:detailedDescription
+                                                                           underlyingError:nil];
+    return [NSError errorWithDomain:kCMISErrorDomainName code:code userInfo:userInfo];
 }
 
 + (NSString *)localizedDescriptionForCode:(CMISErrorCodes)code

Modified: chemistry/objectivecmis/trunk/ObjectiveCMIS/Common/CMISNewTypeSettableAttributes.m
URL: http://svn.apache.org/viewvc/chemistry/objectivecmis/trunk/ObjectiveCMIS/Common/CMISNewTypeSettableAttributes.m?rev=1611607&r1=1611606&r2=1611607&view=diff
==============================================================================
--- chemistry/objectivecmis/trunk/ObjectiveCMIS/Common/CMISNewTypeSettableAttributes.m (original)
+++ chemistry/objectivecmis/trunk/ObjectiveCMIS/Common/CMISNewTypeSettableAttributes.m Fri Jul 18 12:18:51 2014
@@ -18,7 +18,7 @@
  */
 
 #import "CMISNewTypeSettableAttributes.h"
-#import "CMISNSDictionary+CMISUtil.h"
+#import "CMISDictionaryUtil.h"
 #import "CMISLog.h"
 #import "CMISConstants.h"
 #import "CMISObjectConverter.h"

Added: chemistry/objectivecmis/trunk/ObjectiveCMIS/Utils/CMISDictionaryUtil.h
URL: http://svn.apache.org/viewvc/chemistry/objectivecmis/trunk/ObjectiveCMIS/Utils/CMISDictionaryUtil.h?rev=1611607&view=auto
==============================================================================
--- chemistry/objectivecmis/trunk/ObjectiveCMIS/Utils/CMISDictionaryUtil.h (added)
+++ chemistry/objectivecmis/trunk/ObjectiveCMIS/Utils/CMISDictionaryUtil.h Fri Jul 18 12:18:51 2014
@@ -0,0 +1,38 @@
+/*
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+ 
+ http://www.apache.org/licenses/LICENSE-2.0
+ 
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+
+@interface NSDictionary (CMISDictionaryUtils)
+
+///returns the object or nil if value is NSNull for given key
+- (id)cmis_objectForKeyNotNull:(id)aKey;
+
+///convenient method; returns BOOL value or NO if value is NSNull for given key
+- (BOOL)cmis_boolForKey:(id)aKey;
+
+///convenient method; returns int value or 0 if value is NSNull for given key
+- (int)cmis_intForKey:(id)aKey;
+
+@end
+
+
+@interface CMISDictionaryUtil : NSObject
+
++ (NSDictionary *)userInfoDictionaryForErrorWithDescription:(NSString *)description
+                                                     reason:(NSString *)reason
+                                            underlyingError:(NSError *)error;
+
+@end

Added: chemistry/objectivecmis/trunk/ObjectiveCMIS/Utils/CMISDictionaryUtil.m
URL: http://svn.apache.org/viewvc/chemistry/objectivecmis/trunk/ObjectiveCMIS/Utils/CMISDictionaryUtil.m?rev=1611607&view=auto
==============================================================================
--- chemistry/objectivecmis/trunk/ObjectiveCMIS/Utils/CMISDictionaryUtil.m (added)
+++ chemistry/objectivecmis/trunk/ObjectiveCMIS/Utils/CMISDictionaryUtil.m Fri Jul 18 12:18:51 2014
@@ -0,0 +1,72 @@
+/*
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+ 
+ http://www.apache.org/licenses/LICENSE-2.0
+ 
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ */
+
+#import "CMISDictionaryUtil.h"
+
+@implementation NSDictionary (CMISDictionaryUtils)
+
+- (id)cmis_objectForKeyNotNull:(id)aKey
+{
+    id value = self[aKey];
+    return value == [NSNull null] ? nil : value;
+}
+
+- (BOOL)cmis_boolForKey:(id)aKey
+{
+    return [[self cmis_objectForKeyNotNull:aKey] boolValue];
+}
+
+- (int)cmis_intForKey:(id)aKey
+{
+    return [[self cmis_objectForKeyNotNull:aKey] intValue];
+}
+
+@end
+
+
+@implementation CMISDictionaryUtil
+
++ (NSDictionary *)userInfoDictionaryForErrorWithDescription:(NSString *)description
+                                                     reason:(NSString *)reason
+                                            underlyingError:(NSError *)error
+{
+    NSMutableDictionary *errorInfo = [NSMutableDictionary dictionary];
+    
+    if (description != nil) {
+        errorInfo[NSLocalizedDescriptionKey] = description;
+    }
+    
+    if (reason != nil) {
+        errorInfo[NSLocalizedFailureReasonErrorKey] = reason;
+    }
+    
+    if (error != nil) {
+        
+        errorInfo[NSUnderlyingErrorKey] = error;
+        
+        // if a description hasn't been supplied bubble up the underlying error description, if possible
+        if (description == nil && error.localizedDescription != nil) {
+            errorInfo[NSLocalizedDescriptionKey] = error.localizedDescription;
+        }
+        
+        // if a reason hasn't been supplied bubble up the underlying error reason, if possible
+        if (reason == nil && error.localizedFailureReason != nil) {
+            errorInfo[NSLocalizedFailureReasonErrorKey] = error.localizedFailureReason;
+        }
+    }
+    
+    return errorInfo;
+}
+
+@end

Modified: chemistry/objectivecmis/trunk/ObjectiveCMIS/Utils/CMISObjectConverter.m
URL: http://svn.apache.org/viewvc/chemistry/objectivecmis/trunk/ObjectiveCMIS/Utils/CMISObjectConverter.m?rev=1611607&r1=1611606&r2=1611607&view=diff
==============================================================================
--- chemistry/objectivecmis/trunk/ObjectiveCMIS/Utils/CMISObjectConverter.m (original)
+++ chemistry/objectivecmis/trunk/ObjectiveCMIS/Utils/CMISObjectConverter.m Fri Jul 18 12:18:51 2014
@@ -26,7 +26,7 @@
 #import "CMISSession.h"
 #import "CMISDateUtil.h"
 #import "CMISConstants.h"
-#import "CMISNSDictionary+CMISUtil.h"
+#import "CMISDictionaryUtil.h"
 
 @interface CMISObjectConverter ()
 @property (nonatomic, weak) CMISSession *session;