001 /*
002 * Copyright 2002-2006 the original author or authors.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
005 * use this file except in compliance with the License. You may obtain a copy of
006 * the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
012 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
013 * License for the specific language governing permissions and limitations under
014 * the License.
015 */
016 package org.springframework.richclient.application;
017
018 /**
019 * Indicates that an application service of a given type could not be found.
020 *
021 * @author Kevin Stembridge
022 * @since 0.3
023 *
024 */
025 public class ServiceNotFoundException extends RuntimeException {
026
027 private static final long serialVersionUID = 4732373005271272964L;
028
029 private final Class serviceClass;
030
031 private static String createDefaultMessage(Class serviceClass) {
032
033 if (serviceClass != null) {
034 return "Unable to locate an application service of type [" + serviceClass.getName() + "]";
035 }
036 else {
037 return "Unable to locate an application service. The type of the service is either "
038 + "unknown or was not provided when this exception was created.";
039 }
040
041 }
042
043 /**
044 * Creates a new {@code ServiceNotFoundException}. A default message
045 * containing the name of the given class will be used.
046 *
047 * @param serviceClass The class of the application service that could not
048 * be located.
049 */
050 public ServiceNotFoundException(Class serviceClass) {
051 super(createDefaultMessage(serviceClass));
052 this.serviceClass = serviceClass;
053 }
054
055 /**
056 * Creates a new {@code ServiceNotFoundException} with the given detail
057 * message and nested exception.
058 *
059 * @param message The detail message.
060 * @param serviceClass The class of the application service that could not
061 * be located.
062 * @param cause An optional nested exception that occurred attempting to
063 * locate the service.
064 */
065 public ServiceNotFoundException(String message, Class serviceClass) {
066 super(message);
067 this.serviceClass = serviceClass;
068 }
069
070 /**
071 * Creates a new {@code ServiceNotFoundException} with the given detail
072 * message and nested exception.
073 *
074 * @param message The detail message.
075 * @param serviceClass The class of the application service that could not
076 * be located.
077 * @param cause An optional nested exception that occurred attempting to
078 * locate the service.
079 */
080 public ServiceNotFoundException(String message, Class serviceClass, Throwable cause) {
081 super(message, cause);
082 this.serviceClass = serviceClass;
083 }
084
085 /**
086 * Returns class of the application service that could not be located.
087 * @return Returns the service class.
088 */
089 public Class getServiceClass() {
090 return this.serviceClass;
091 }
092
093 }