View Javadoc

1   /*******************************************************************************
2    * Copyright 2013 André Rouél and Dominik Seichter
3    * 
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    * 
8    *   http://www.apache.org/licenses/LICENSE-2.0
9    * 
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   ******************************************************************************/
16  package net.sf.qualitytest.exception;
17  
18  import javax.annotation.Nonnull;
19  
20  import net.sf.qualitycheck.Check;
21  import net.sf.qualitytest.blueprint.BlueprintSession;
22  
23  /**
24   * Thrown to indicate a cycle in the graph while blueprinting. As a workaround you should add a hint on how to blueprint
25   * the class using {@code BlueprintConfiguration.with}.
26   * 
27   * @author Dominik Seichter
28   */
29  public class BlueprintCycleException extends RuntimeException {
30  
31  	private static final long serialVersionUID = -7011658424196608479L;
32  	private static final String DEFAULT_MESSAGE = "Error during blueprinting class '%s': %s";
33  
34  	private final BlueprintSession session;
35  
36  	/**
37  	 * Constructs a {@code BlueprintCycleException} with the default message
38  	 * {@link BlueprintCycleException#DEFAULT_MESSAGE}.
39  	 * 
40  	 * @param session
41  	 *            The current BlueprintSession giving access to the context of the error.
42  	 * @param clazz
43  	 *            The class causing the cycle.
44  	 */
45  	public BlueprintCycleException(@Nonnull final BlueprintSession session, @Nonnull final Class<?> clazz) {
46  		super(String.format(DEFAULT_MESSAGE, Check.notNull(clazz, "clazz").getName(), Check.notNull(session, "session").getContext()));
47  
48  		this.session = session;
49  	}
50  
51  	/**
52  	 * Constructs a {@code BlueprintCycleException} with a message.
53  	 * 
54  	 * @param session
55  	 *            The current BlueprintSession giving access to the context of the error.
56  	 * @param clazz
57  	 *            The class causing the cycle.
58  	 * @param cause
59  	 *            the cause (which is saved for later retrieval by the {@link Throwable#getCause()} method). (A
60  	 *            {@code null} value is permitted, and indicates that the cause is nonexistent or unknown.)
61  	 */
62  	public BlueprintCycleException(@Nonnull final BlueprintSession session, @Nonnull final Class<?> clazz, final Throwable cause) {
63  		super(String.format(DEFAULT_MESSAGE, Check.notNull(clazz, "clazz").getName(), Check.notNull(session, "session").getContext()),
64  				cause);
65  
66  		this.session = session;
67  	}
68  
69  	/**
70  	 * Access the {@link BlueprintSession} during which the exception has occurred.
71  	 * 
72  	 * @return {@code BlueprintSession}
73  	 */
74  	public @Nonnull
75  	BlueprintSession getSession() {
76  		return session;
77  	}
78  
79  }