diff --git a/spring-data-mongodb/Spring Data MongoDB.sonargraph b/spring-data-mongodb/Spring Data MongoDB.sonargraph index b44d23e41..88b450d1f 100644 --- a/spring-data-mongodb/Spring Data MongoDB.sonargraph +++ b/spring-data-mongodb/Spring Data MongoDB.sonargraph @@ -1,5 +1,5 @@ - + @@ -35,6 +35,12 @@ + + + + + + @@ -76,6 +82,11 @@ + + + + + @@ -83,6 +94,7 @@ + @@ -105,6 +117,11 @@ + + + + + @@ -113,8 +130,10 @@ + + @@ -169,7 +188,32 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoExceptionTranslator.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoExceptionTranslator.java index 737655e11..b37bd9f03 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoExceptionTranslator.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoExceptionTranslator.java @@ -16,7 +16,6 @@ package org.springframework.data.mongodb.core; import java.util.Arrays; -import java.util.HashMap; import java.util.HashSet; import java.util.Set; @@ -29,6 +28,7 @@ import org.springframework.dao.InvalidDataAccessResourceUsageException; import org.springframework.dao.PermissionDeniedDataAccessException; import org.springframework.dao.support.PersistenceExceptionTranslator; import org.springframework.data.mongodb.UncategorizedMongoDbException; +import org.springframework.data.mongodb.util.MongoDbErrorCodes; import org.springframework.util.ClassUtils; import com.mongodb.MongoException; @@ -106,126 +106,4 @@ public class MongoExceptionTranslator implements PersistenceExceptionTranslator // that translation should not occur. return null; } - - /** - * {@link MongoDbErrorCodes} holds MongoDB specific error codes outlined in {@literal mongo/base/error_codes.err}. - * - * @author Christoph Strobl - * @since 1.8 - */ - public static final class MongoDbErrorCodes { - - static HashMap dataAccessResourceFailureCodes; - static HashMap dataIntegrityViolationCodes; - static HashMap duplicateKeyCodes; - static HashMap invalidDataAccessApiUsageExeption; - static HashMap permissionDeniedCodes; - - static HashMap errorCodes; - - static { - - dataAccessResourceFailureCodes = new HashMap(10); - dataAccessResourceFailureCodes.put(6, "HostUnreachable"); - dataAccessResourceFailureCodes.put(7, "HostNotFound"); - dataAccessResourceFailureCodes.put(89, "NetworkTimeout"); - dataAccessResourceFailureCodes.put(91, "ShutdownInProgress"); - dataAccessResourceFailureCodes.put(12000, "SlaveDelayDifferential"); - dataAccessResourceFailureCodes.put(10084, "CannotFindMapFile64Bit"); - dataAccessResourceFailureCodes.put(10085, "CannotFindMapFile"); - dataAccessResourceFailureCodes.put(10357, "ShutdownInProgress"); - dataAccessResourceFailureCodes.put(10359, "Header==0"); - dataAccessResourceFailureCodes.put(13440, "BadOffsetInFile"); - dataAccessResourceFailureCodes.put(13441, "BadOffsetInFile"); - dataAccessResourceFailureCodes.put(13640, "DataFileHeaderCorrupt"); - - dataIntegrityViolationCodes = new HashMap(6); - dataIntegrityViolationCodes.put(67, "CannotCreateIndex"); - dataIntegrityViolationCodes.put(68, "IndexAlreadyExists"); - dataIntegrityViolationCodes.put(85, "IndexOptionsConflict"); - dataIntegrityViolationCodes.put(86, "IndexKeySpecsConflict"); - dataIntegrityViolationCodes.put(112, "WriteConflict"); - dataIntegrityViolationCodes.put(117, "ConflictingOperationInProgress"); - - duplicateKeyCodes = new HashMap(3); - duplicateKeyCodes.put(3, "OBSOLETE_DuplicateKey"); - duplicateKeyCodes.put(84, "DuplicateKeyValue"); - duplicateKeyCodes.put(11000, "DuplicateKey"); - duplicateKeyCodes.put(11001, "DuplicateKey"); - - invalidDataAccessApiUsageExeption = new HashMap(); - invalidDataAccessApiUsageExeption.put(5, "GraphContainsCycle"); - invalidDataAccessApiUsageExeption.put(9, "FailedToParse"); - invalidDataAccessApiUsageExeption.put(14, "TypeMismatch"); - invalidDataAccessApiUsageExeption.put(15, "Overflow"); - invalidDataAccessApiUsageExeption.put(16, "InvalidLength"); - invalidDataAccessApiUsageExeption.put(20, "IllegalOperation"); - invalidDataAccessApiUsageExeption.put(21, "EmptyArrayOperation"); - invalidDataAccessApiUsageExeption.put(22, "InvalidBSON"); - invalidDataAccessApiUsageExeption.put(23, "AlreadyInitialized"); - invalidDataAccessApiUsageExeption.put(29, "NonExistentPath"); - invalidDataAccessApiUsageExeption.put(30, "InvalidPath"); - invalidDataAccessApiUsageExeption.put(40, "ConflictingUpdateOperators"); - invalidDataAccessApiUsageExeption.put(45, "UserDataInconsistent"); - invalidDataAccessApiUsageExeption.put(30, "DollarPrefixedFieldName"); - invalidDataAccessApiUsageExeption.put(52, "InvalidPath"); - invalidDataAccessApiUsageExeption.put(53, "InvalidIdField"); - invalidDataAccessApiUsageExeption.put(54, "NotSingleValueField"); - invalidDataAccessApiUsageExeption.put(55, "InvalidDBRef"); - invalidDataAccessApiUsageExeption.put(56, "EmptyFieldName"); - invalidDataAccessApiUsageExeption.put(57, "DottedFieldName"); - invalidDataAccessApiUsageExeption.put(59, "CommandNotFound"); - invalidDataAccessApiUsageExeption.put(60, "DatabaseNotFound"); - invalidDataAccessApiUsageExeption.put(61, "ShardKeyNotFound"); - invalidDataAccessApiUsageExeption.put(62, "OplogOperationUnsupported"); - invalidDataAccessApiUsageExeption.put(66, "ImmutableField"); - invalidDataAccessApiUsageExeption.put(72, "InvalidOptions"); - invalidDataAccessApiUsageExeption.put(115, "CommandNotSupported"); - invalidDataAccessApiUsageExeption.put(116, "DocTooLargeForCapped"); - invalidDataAccessApiUsageExeption.put(130, "SymbolNotFound"); - invalidDataAccessApiUsageExeption.put(17280, "KeyTooLong"); - invalidDataAccessApiUsageExeption.put(13334, "ShardKeyTooBig"); - - permissionDeniedCodes = new HashMap(); - permissionDeniedCodes.put(11, "UserNotFound"); - permissionDeniedCodes.put(18, "AuthenticationFailed"); - permissionDeniedCodes.put(31, "RoleNotFound"); - permissionDeniedCodes.put(32, "RolesNotRelated"); - permissionDeniedCodes.put(33, "PrvilegeNotFound"); - permissionDeniedCodes.put(15847, "CannotAuthenticate"); - permissionDeniedCodes.put(16704, "CannotAuthenticateToAdminDB"); - permissionDeniedCodes.put(16705, "CannotAuthenticateToAdminDB"); - - errorCodes = new HashMap(); - errorCodes.putAll(dataAccessResourceFailureCodes); - errorCodes.putAll(dataIntegrityViolationCodes); - errorCodes.putAll(duplicateKeyCodes); - errorCodes.putAll(invalidDataAccessApiUsageExeption); - errorCodes.putAll(permissionDeniedCodes); - } - - public static boolean isDataIntegrityViolationCode(Integer errorCode) { - return errorCode == null ? false : dataIntegrityViolationCodes.containsKey(errorCode); - } - - public static boolean isDataAccessResourceFailureCode(Integer errorCode) { - return errorCode == null ? false : dataAccessResourceFailureCodes.containsKey(errorCode); - } - - public static boolean isDuplicateKeyCode(Integer errorCode) { - return errorCode == null ? false : duplicateKeyCodes.containsKey(errorCode); - } - - public static boolean isPermissionDeniedCode(Integer errorCode) { - return errorCode == null ? false : permissionDeniedCodes.containsKey(errorCode); - } - - public static boolean isInvalidDataAccessApiUsageCode(Integer errorCode) { - return errorCode == null ? false : invalidDataAccessApiUsageExeption.containsKey(errorCode); - } - - public static String getErrorDescription(Integer errorCode) { - return errorCode == null ? null : errorCodes.get(errorCode); - } - } } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/MongoPersistentEntityIndexCreator.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/MongoPersistentEntityIndexCreator.java index 11cc7db9b..41018a8c8 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/MongoPersistentEntityIndexCreator.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/MongoPersistentEntityIndexCreator.java @@ -26,11 +26,11 @@ import org.springframework.data.mapping.PersistentEntity; import org.springframework.data.mapping.context.MappingContext; import org.springframework.data.mapping.context.MappingContextEvent; import org.springframework.data.mongodb.MongoDbFactory; -import org.springframework.data.mongodb.core.MongoExceptionTranslator.MongoDbErrorCodes; import org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexResolver.IndexDefinitionHolder; import org.springframework.data.mongodb.core.mapping.Document; import org.springframework.data.mongodb.core.mapping.MongoMappingContext; import org.springframework.data.mongodb.core.mapping.MongoPersistentEntity; +import org.springframework.data.mongodb.util.MongoDbErrorCodes; import org.springframework.util.Assert; import org.springframework.util.ObjectUtils; diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/util/MongoDbErrorCodes.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/util/MongoDbErrorCodes.java new file mode 100644 index 000000000..ff846dd0b --- /dev/null +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/util/MongoDbErrorCodes.java @@ -0,0 +1,140 @@ +/* + * Copyright 2015 the original author or authors. + * + * 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. + */ +package org.springframework.data.mongodb.util; + +import java.util.HashMap; + +/** + * {@link MongoDbErrorCodes} holds MongoDB specific error codes outlined in {@literal mongo/base/error_codes.err}. + * + * @author Christoph Strobl + * @since 1.8 + */ +public final class MongoDbErrorCodes { + + static HashMap dataAccessResourceFailureCodes; + static HashMap dataIntegrityViolationCodes; + static HashMap duplicateKeyCodes; + static HashMap invalidDataAccessApiUsageExeption; + static HashMap permissionDeniedCodes; + + static HashMap errorCodes; + + static { + + dataAccessResourceFailureCodes = new HashMap(10); + dataAccessResourceFailureCodes.put(6, "HostUnreachable"); + dataAccessResourceFailureCodes.put(7, "HostNotFound"); + dataAccessResourceFailureCodes.put(89, "NetworkTimeout"); + dataAccessResourceFailureCodes.put(91, "ShutdownInProgress"); + dataAccessResourceFailureCodes.put(12000, "SlaveDelayDifferential"); + dataAccessResourceFailureCodes.put(10084, "CannotFindMapFile64Bit"); + dataAccessResourceFailureCodes.put(10085, "CannotFindMapFile"); + dataAccessResourceFailureCodes.put(10357, "ShutdownInProgress"); + dataAccessResourceFailureCodes.put(10359, "Header==0"); + dataAccessResourceFailureCodes.put(13440, "BadOffsetInFile"); + dataAccessResourceFailureCodes.put(13441, "BadOffsetInFile"); + dataAccessResourceFailureCodes.put(13640, "DataFileHeaderCorrupt"); + + dataIntegrityViolationCodes = new HashMap(6); + dataIntegrityViolationCodes.put(67, "CannotCreateIndex"); + dataIntegrityViolationCodes.put(68, "IndexAlreadyExists"); + dataIntegrityViolationCodes.put(85, "IndexOptionsConflict"); + dataIntegrityViolationCodes.put(86, "IndexKeySpecsConflict"); + dataIntegrityViolationCodes.put(112, "WriteConflict"); + dataIntegrityViolationCodes.put(117, "ConflictingOperationInProgress"); + + duplicateKeyCodes = new HashMap(3); + duplicateKeyCodes.put(3, "OBSOLETE_DuplicateKey"); + duplicateKeyCodes.put(84, "DuplicateKeyValue"); + duplicateKeyCodes.put(11000, "DuplicateKey"); + duplicateKeyCodes.put(11001, "DuplicateKey"); + + invalidDataAccessApiUsageExeption = new HashMap(); + invalidDataAccessApiUsageExeption.put(5, "GraphContainsCycle"); + invalidDataAccessApiUsageExeption.put(9, "FailedToParse"); + invalidDataAccessApiUsageExeption.put(14, "TypeMismatch"); + invalidDataAccessApiUsageExeption.put(15, "Overflow"); + invalidDataAccessApiUsageExeption.put(16, "InvalidLength"); + invalidDataAccessApiUsageExeption.put(20, "IllegalOperation"); + invalidDataAccessApiUsageExeption.put(21, "EmptyArrayOperation"); + invalidDataAccessApiUsageExeption.put(22, "InvalidBSON"); + invalidDataAccessApiUsageExeption.put(23, "AlreadyInitialized"); + invalidDataAccessApiUsageExeption.put(29, "NonExistentPath"); + invalidDataAccessApiUsageExeption.put(30, "InvalidPath"); + invalidDataAccessApiUsageExeption.put(40, "ConflictingUpdateOperators"); + invalidDataAccessApiUsageExeption.put(45, "UserDataInconsistent"); + invalidDataAccessApiUsageExeption.put(30, "DollarPrefixedFieldName"); + invalidDataAccessApiUsageExeption.put(52, "InvalidPath"); + invalidDataAccessApiUsageExeption.put(53, "InvalidIdField"); + invalidDataAccessApiUsageExeption.put(54, "NotSingleValueField"); + invalidDataAccessApiUsageExeption.put(55, "InvalidDBRef"); + invalidDataAccessApiUsageExeption.put(56, "EmptyFieldName"); + invalidDataAccessApiUsageExeption.put(57, "DottedFieldName"); + invalidDataAccessApiUsageExeption.put(59, "CommandNotFound"); + invalidDataAccessApiUsageExeption.put(60, "DatabaseNotFound"); + invalidDataAccessApiUsageExeption.put(61, "ShardKeyNotFound"); + invalidDataAccessApiUsageExeption.put(62, "OplogOperationUnsupported"); + invalidDataAccessApiUsageExeption.put(66, "ImmutableField"); + invalidDataAccessApiUsageExeption.put(72, "InvalidOptions"); + invalidDataAccessApiUsageExeption.put(115, "CommandNotSupported"); + invalidDataAccessApiUsageExeption.put(116, "DocTooLargeForCapped"); + invalidDataAccessApiUsageExeption.put(130, "SymbolNotFound"); + invalidDataAccessApiUsageExeption.put(17280, "KeyTooLong"); + invalidDataAccessApiUsageExeption.put(13334, "ShardKeyTooBig"); + + permissionDeniedCodes = new HashMap(); + permissionDeniedCodes.put(11, "UserNotFound"); + permissionDeniedCodes.put(18, "AuthenticationFailed"); + permissionDeniedCodes.put(31, "RoleNotFound"); + permissionDeniedCodes.put(32, "RolesNotRelated"); + permissionDeniedCodes.put(33, "PrvilegeNotFound"); + permissionDeniedCodes.put(15847, "CannotAuthenticate"); + permissionDeniedCodes.put(16704, "CannotAuthenticateToAdminDB"); + permissionDeniedCodes.put(16705, "CannotAuthenticateToAdminDB"); + + errorCodes = new HashMap(); + errorCodes.putAll(dataAccessResourceFailureCodes); + errorCodes.putAll(dataIntegrityViolationCodes); + errorCodes.putAll(duplicateKeyCodes); + errorCodes.putAll(invalidDataAccessApiUsageExeption); + errorCodes.putAll(permissionDeniedCodes); + } + + public static boolean isDataIntegrityViolationCode(Integer errorCode) { + return errorCode == null ? false : dataIntegrityViolationCodes.containsKey(errorCode); + } + + public static boolean isDataAccessResourceFailureCode(Integer errorCode) { + return errorCode == null ? false : dataAccessResourceFailureCodes.containsKey(errorCode); + } + + public static boolean isDuplicateKeyCode(Integer errorCode) { + return errorCode == null ? false : duplicateKeyCodes.containsKey(errorCode); + } + + public static boolean isPermissionDeniedCode(Integer errorCode) { + return errorCode == null ? false : permissionDeniedCodes.containsKey(errorCode); + } + + public static boolean isInvalidDataAccessApiUsageCode(Integer errorCode) { + return errorCode == null ? false : invalidDataAccessApiUsageExeption.containsKey(errorCode); + } + + public static String getErrorDescription(Integer errorCode) { + return errorCode == null ? null : errorCodes.get(errorCode); + } +} \ No newline at end of file