View Javadoc
1   /*******************************************************************************
2    * Copyright (c) 2010, 2014 Sonatype, Inc.
3    * All rights reserved. This program and the accompanying materials
4    * are made available under the terms of the Eclipse Public License v1.0
5    * which accompanies this distribution, and is available at
6    * http://www.eclipse.org/legal/epl-v10.html
7    *
8    * Contributors:
9    *    Sonatype, Inc. - initial API and implementation
10   *******************************************************************************/
11  package org.eclipse.aether.transfer;
12  
13  import org.eclipse.aether.RepositoryException;
14  
15  /**
16   * Thrown in case of a checksum failure during an artifact/metadata download.
17   */
18  public class ChecksumFailureException
19      extends RepositoryException
20  {
21  
22      private final String expected;
23  
24      private final String actual;
25  
26      private final boolean retryWorthy;
27  
28      /**
29       * Creates a new exception with the specified expected and actual checksum. The resulting exception is
30       * {@link #isRetryWorthy() retry-worthy}.
31       * 
32       * @param expected The expected checksum as declared by the hosting repository, may be {@code null}.
33       * @param actual The actual checksum as computed from the local bytes, may be {@code null}.
34       */
35      public ChecksumFailureException( String expected, String actual )
36      {
37          super( "Checksum validation failed, expected " + expected + " but is " + actual );
38          this.expected = expected;
39          this.actual = actual;
40          retryWorthy = true;
41      }
42  
43      /**
44       * Creates a new exception with the specified detail message. The resulting exception is not
45       * {@link #isRetryWorthy() retry-worthy}.
46       * 
47       * @param message The detail message, may be {@code null}.
48       */
49      public ChecksumFailureException( String message )
50      {
51          this( false, message, null );
52      }
53  
54      /**
55       * Creates a new exception with the specified cause. The resulting exception is not {@link #isRetryWorthy()
56       * retry-worthy}.
57       * 
58       * @param cause The exception that caused this one, may be {@code null}.
59       */
60      public ChecksumFailureException( Throwable cause )
61      {
62          this( "Checksum validation failed" + getMessage( ": ", cause ), cause );
63      }
64  
65      /**
66       * Creates a new exception with the specified detail message and cause. The resulting exception is not
67       * {@link #isRetryWorthy() retry-worthy}.
68       * 
69       * @param message The detail message, may be {@code null}.
70       * @param cause The exception that caused this one, may be {@code null}.
71       */
72      public ChecksumFailureException( String message, Throwable cause )
73      {
74          this( false, message, cause );
75      }
76  
77      /**
78       * Creates a new exception with the specified retry flag, detail message and cause.
79       * 
80       * @param retryWorthy {@code true} if the exception is retry-worthy, {@code false} otherwise.
81       * @param message The detail message, may be {@code null}.
82       * @param cause The exception that caused this one, may be {@code null}.
83       */
84      public ChecksumFailureException( boolean retryWorthy, String message, Throwable cause )
85      {
86          super( message, cause );
87          expected = actual = "";
88          this.retryWorthy = retryWorthy;
89      }
90  
91      /**
92       * Gets the expected checksum for the downloaded artifact/metadata.
93       * 
94       * @return The expected checksum as declared by the hosting repository or {@code null} if unknown.
95       */
96      public String getExpected()
97      {
98          return expected;
99      }
100 
101     /**
102      * Gets the actual checksum for the downloaded artifact/metadata.
103      * 
104      * @return The actual checksum as computed from the local bytes or {@code null} if unknown.
105      */
106     public String getActual()
107     {
108         return actual;
109     }
110 
111     /**
112      * Indicates whether the corresponding download is retry-worthy.
113      * 
114      * @return {@code true} if retrying the download might solve the checksum failure, {@code false} if the checksum
115      *         failure is non-recoverable.
116      */
117     public boolean isRetryWorthy()
118     {
119         return retryWorthy;
120     }
121 
122 }