1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97 | package Torello.Java;
import java.nio.file.*;
import java.io.IOException;
/**
* Thrown when a move or copy operation has specified identical <CODE>source</CODE> and
* <CODE>target</CODE> places on disk.
*
* <EMBED CLASS='external-html' DATA-FILE-ID=SAME_SOURCE_EX>
*/
public class SameSourceAndTargetException extends RuntimeException
{
/** <EMBED CLASS='external-html' DATA-FILE-ID=SVUIDEX> */
public static final long serialVersionUID = 1;
/** Constructs a {@code SameSourceAndTargetException} with no detail message. */
public SameSourceAndTargetException()
{ super(); }
/**
* Constructs a {@code SameSourceAndTargetException} with the specified detail message.
* @param message the detail message.
*/
public SameSourceAndTargetException(String message)
{ super(message); }
/**
* Constructs a new exception with the specified detail message and cause.
*
* <BR /><BR /><DIV CLASS=JDHint>
* <B STYLE='color:red;'>Note:</B> The detail message associated with cause is not
* automatically incorporated into this exception's detail message.
* </DIV>
*
* @param message The detail message (which is saved for later retrieval by the
* {@code Throwable.getMessage()} method).
*
* @param cause the cause (which is saved for later retrieval by the {@code Throwable.getCause()}
* method). (A null value is permitted, and indicates that the cause is nonexistent or unknown.)
*/
public SameSourceAndTargetException(String message, Throwable cause)
{ super(message, cause); }
/**
* Constructs a new exception with the specified cause and a detail message of
* {@code (cause==null ? null : cause.toString())} (which typically contains the class and
* detail message of cause). This constructor is useful for exceptions that are little more
* than wrappers for other {@code Throwable's}.
*
* @param cause The cause (which is saved for later retrieval by the
* {@code Throwable.getCause()} method). (A null value is permitted, and indicates that the
* cause is nonexistent or unknown.)
*/
public SameSourceAndTargetException(Throwable cause)
{ super(cause); }
/**
* This method can be used to check whether the source and target directories in a program are
* actually pointing to the same location on the file-system. If they are, or if there are any
* problems in attempting to ascertain this information, then exceptions will be thrown.
*
* @param directory This may be any instance of {@code FileNode} that represents a directory.
*
* @param targetDirectory This is a {@code java.lang.String} that represents the target
* directory.
*
* @throws SameSourceAndTargetException If after obtaining the <B>'Real Path'</B> of both the
* {@code source} and the {@code target} directories, both real-path's indicate the same
* location on the file-system, then this exception will throw.
*
* @throws InvalidPathException If the <I>Java Virtual Machine</I> is unable to instantiate an
* instance of {@code java.nio.files.Path} for either the {@code 'directory'} parameter or the
* {@code 'targetDirectoryParameter'}, then this exception will be thrown.
*
* @throws NoSuchFileException If, after instantiating an instance of {@code Path} for either
* the {@code source} or the {@code target} directories, the <I>Java Virtual Machine</I> is
* unable to build an instance of {@code Path} using the method {@code Path.toRealPath()}, then
* this exception will throw.
*
* @throws IOException If the method {@code 'Path.toRealPath()'} fails with any I/O problems
* then ths exception will throw
*/
public static void check(FileNode directory, String targetDirectory)
throws IOException, SameSourceAndTargetException, InvalidPathException, NoSuchFileException
{
String sourceDir = Paths.get(directory.getFullPathName()).toRealPath().toString();
if (sourceDir.equals(Paths.get(targetDirectory).toRealPath().toString()))
throw new SameSourceAndTargetException(
"The source directory: \n\t" + directory.getFullPathName() + '\n' +
"And the target directory: \n\t" + targetDirectory + '\n' +
"Have the same real-path: \n\t" + sourceDir
);
}
}
|