/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.
*/
package com.google.j2objc.net;
/*-[
// Macros to simplify returning a string of a preprocessor definition.
#define NSStringize_helper(x) #x
#define NSStringize(x) @NSStringize_helper(x)
#define return_name_case(type) case type: return NSStringize(type)
]-*/
/**
* A wrapper class for an NSError, which is documented here:
* https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSError_Class/
*/
public class NSErrorException extends RuntimeException {
private Object nsError;
private static final long serialVersionUID = 7794185784954426448L;
public NSErrorException(Object nsError) {
super(getErrorDescription(nsError));
this.nsError = nsError;
Object underlyingError = getUnderlyingError(nsError);
if (underlyingError != null) {
initCause(new NSErrorException(underlyingError));
}
}
// These methods are static so they can be called from the constructor.
private static native String getErrorDescription(Object nsError) /*-[
return ((NSError *)nsError).localizedDescription;
]-*/;
private static native Object getUnderlyingError(Object nsError) /*-[
NSDictionary *userInfo = ((NSError *)nsError).userInfo;
return [userInfo objectForKey:NSUnderlyingErrorKey];
]-*/;
/**
* Returns the native NSError instance.
*/
public Object getNSError() {
return nsError;
}
/**
* Returns the error domain for this NSError.
*/
public native String getDomain() /*-[
return ((NSError *)nsError_).domain;
]-*/;
/**
* Returns the native NSError code.
*/
public native long getErrorCode() /*-[
return ((NSError *)nsError_).code;
]-*/;
/**
* Returns the failing URL string, or null if not defined
* by this NSError.
*/
public native String getFailingURLString() /*-[
NSDictionary *userInfo = ((NSError *)nsError_).userInfo;
return [userInfo objectForKey:NSURLErrorFailingURLStringErrorKey];
]-*/;
/**
* Returns the name of the NSError code, or null if not known.
*/
public native String getErrorName() /*-[
switch (((NSError *)nsError_).code) {
return_name_case(NSFileNoSuchFileError);
return_name_case(NSFileLockingError);
return_name_case(NSFileReadUnknownError);
return_name_case(NSFileReadNoPermissionError);
return_name_case(NSFileReadInvalidFileNameError);
return_name_case(NSFileReadCorruptFileError);
return_name_case(NSFileReadNoSuchFileError);
return_name_case(NSFileReadInapplicableStringEncodingError);
return_name_case(NSFileReadUnsupportedSchemeError);
return_name_case(NSFileReadTooLargeError);
return_name_case(NSFileReadUnknownStringEncodingError);
return_name_case(NSFileWriteUnknownError);
return_name_case(NSFileWriteNoPermissionError);
return_name_case(NSFileWriteInvalidFileNameError);
return_name_case(NSFileWriteFileExistsError);
return_name_case(NSFileWriteInapplicableStringEncodingError);
return_name_case(NSFileWriteUnsupportedSchemeError);
return_name_case(NSFileWriteOutOfSpaceError);
return_name_case(NSFileWriteVolumeReadOnlyError);
return_name_case(NSKeyValueValidationError);
return_name_case(NSFormattingError);
return_name_case(NSUserCancelledError);
return_name_case(NSFeatureUnsupportedError);
return_name_case(NSPropertyListReadCorruptError);
return_name_case(NSPropertyListReadUnknownVersionError);
return_name_case(NSPropertyListReadStreamError);
return_name_case(NSPropertyListWriteStreamError);
return_name_case(NSExecutableNotLoadableError);
return_name_case(NSExecutableArchitectureMismatchError);
return_name_case(NSExecutableRuntimeMismatchError);
return_name_case(NSExecutableLoadError);
return_name_case(NSExecutableLinkError);
return_name_case(NSURLErrorUnknown);
return_name_case(NSURLErrorCancelled);
return_name_case(NSURLErrorBadURL);
return_name_case(NSURLErrorTimedOut);
return_name_case(NSURLErrorUnsupportedURL);
return_name_case(NSURLErrorCannotFindHost);
return_name_case(NSURLErrorCannotConnectToHost);
return_name_case(NSURLErrorDataLengthExceedsMaximum);
return_name_case(NSURLErrorNetworkConnectionLost);
return_name_case(NSURLErrorDNSLookupFailed);
return_name_case(NSURLErrorHTTPTooManyRedirects);
return_name_case(NSURLErrorResourceUnavailable);
return_name_case(NSURLErrorNotConnectedToInternet);
return_name_case(NSURLErrorRedirectToNonExistentLocation);
return_name_case(NSURLErrorBadServerResponse);
return_name_case(NSURLErrorUserCancelledAuthentication);
return_name_case(NSURLErrorUserAuthenticationRequired);
return_name_case(NSURLErrorZeroByteResource);
return_name_case(NSURLErrorCannotDecodeRawData);
return_name_case(NSURLErrorCannotDecodeContentData);
return_name_case(NSURLErrorCannotParseResponse);
return_name_case(NSURLErrorInternationalRoamingOff);
return_name_case(NSURLErrorCallIsActive);
return_name_case(NSURLErrorDataNotAllowed);
return_name_case(NSURLErrorRequestBodyStreamExhausted);
return_name_case(NSURLErrorFileDoesNotExist);
return_name_case(NSURLErrorFileIsDirectory);
return_name_case(NSURLErrorNoPermissionsToReadFile);
return_name_case(NSURLErrorSecureConnectionFailed);
return_name_case(NSURLErrorServerCertificateHasBadDate);
return_name_case(NSURLErrorServerCertificateUntrusted);
return_name_case(NSURLErrorServerCertificateHasUnknownRoot);
return_name_case(NSURLErrorServerCertificateNotYetValid);
return_name_case(NSURLErrorClientCertificateRejected);
return_name_case(NSURLErrorClientCertificateRequired);
return_name_case(NSURLErrorCannotLoadFromNetwork);
return_name_case(NSURLErrorCannotCreateFile);
return_name_case(NSURLErrorCannotOpenFile);
return_name_case(NSURLErrorCannotCloseFile);
return_name_case(NSURLErrorCannotWriteToFile);
return_name_case(NSURLErrorCannotRemoveFile);
return_name_case(NSURLErrorCannotMoveFile);
return_name_case(NSURLErrorDownloadDecodingFailedMidStream);
return_name_case(NSURLErrorDownloadDecodingFailedToComplete);
}
return nil;
]-*/;
}