001/*
002 *  Licensed to the Apache Software Foundation (ASF) under one
003 *  or more contributor license agreements.  See the NOTICE file
004 *  distributed with this work for additional information
005 *  regarding copyright ownership.  The ASF licenses this file
006 *  to you under the Apache License, Version 2.0 (the
007 *  "License"); you may not use this file except in compliance
008 *  with the License.  You may obtain a copy of the License at
009 *
010 *        http://www.apache.org/licenses/LICENSE-2.0
011 *
012 *  Unless required by applicable law or agreed to in writing,
013 *  software distributed under the License is distributed on an
014 *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015 *  KIND, either express or implied.  See the License for the
016 *  specific language governing permissions and limitations
017 *  under the License.
018 */
019package org.apache.isis.persistence.jdo.spring.exceptions;
020
021import org.springframework.dao.DataRetrievalFailureException;
022
023/**
024 * Exception thrown if a mapped object could not be retrieved via its identifier.
025 * Provides information about the persistent class and the identifier.
026 *
027 */
028@SuppressWarnings("serial")
029public class ObjectRetrievalFailureException extends DataRetrievalFailureException {
030
031        private Object persistentClass;
032
033        private Object identifier;
034
035
036        /**
037         * Create a general ObjectRetrievalFailureException with the given message,
038         * without any information on the affected object.
039         * @param msg the detail message
040         * @param cause the source exception
041         */
042        public ObjectRetrievalFailureException(String msg, Throwable cause) {
043                super(msg, cause);
044        }
045
046        /**
047         * Create a new ObjectRetrievalFailureException for the given object,
048         * with the default "not found" message.
049         * @param persistentClass the persistent class
050         * @param identifier the ID of the object that should have been retrieved
051         */
052        public ObjectRetrievalFailureException(Class<?> persistentClass, Object identifier) {
053                this(persistentClass, identifier,
054                                "Object of class [" + persistentClass.getName() + "] with identifier [" + identifier + "]: not found",
055                                null);
056        }
057
058        /**
059         * Create a new ObjectRetrievalFailureException for the given object,
060         * with the given explicit message and exception.
061         * @param persistentClass the persistent class
062         * @param identifier the ID of the object that should have been retrieved
063         * @param msg the detail message
064         * @param cause the source exception
065         */
066        public ObjectRetrievalFailureException(
067                        Class<?> persistentClass, Object identifier, String msg, Throwable cause) {
068
069                super(msg, cause);
070                this.persistentClass = persistentClass;
071                this.identifier = identifier;
072        }
073
074        /**
075         * Create a new ObjectRetrievalFailureException for the given object,
076         * with the default "not found" message.
077         * @param persistentClassName the name of the persistent class
078         * @param identifier the ID of the object that should have been retrieved
079         */
080        public ObjectRetrievalFailureException(String persistentClassName, Object identifier) {
081                this(persistentClassName, identifier,
082                                "Object of class [" + persistentClassName + "] with identifier [" + identifier + "]: not found",
083                                null);
084        }
085
086        /**
087         * Create a new ObjectRetrievalFailureException for the given object,
088         * with the given explicit message and exception.
089         * @param persistentClassName the name of the persistent class
090         * @param identifier the ID of the object that should have been retrieved
091         * @param msg the detail message
092         * @param cause the source exception
093         */
094        public ObjectRetrievalFailureException(
095                        String persistentClassName, Object identifier, String msg, Throwable cause) {
096
097                super(msg, cause);
098                this.persistentClass = persistentClassName;
099                this.identifier = identifier;
100        }
101
102
103        /**
104         * Return the persistent class of the object that was not found.
105         * If no Class was specified, this method returns null.
106         */
107        public Class<?> getPersistentClass() {
108                return (this.persistentClass instanceof Class ? (Class<?>) this.persistentClass : null);
109        }
110
111        /**
112         * Return the name of the persistent class of the object that was not found.
113         * Will work for both Class objects and String names.
114         */
115        public String getPersistentClassName() {
116                if (this.persistentClass instanceof Class) {
117                        return ((Class<?>) this.persistentClass).getName();
118                }
119                return (this.persistentClass != null ? this.persistentClass.toString() : null);
120        }
121
122        /**
123         * Return the identifier of the object that was not found.
124         */
125        public Object getIdentifier() {
126                return identifier;
127        }
128
129}