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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
package Torello.JavaDoc;

import Torello.Java.StrCmpr;
import Torello.Java.ReadOnly.ReadOnlyList;

import Torello.Java.Additional.Ret2;

import java.util.Objects;
import java.io.File;

class MainConstructor
{
    static Ret2<String, ReadOnlyList<String>> run(
            final String rootJavaDocDirectory,
            final String... rootSourceFileDirectories
        )
    {

        // System.out.println("rootJavaDocDirectory = [" + rootJavaDocDirectory + "]\n" +
        //                    "rootSourceFileDirectory = [" + rootSourceFileDirectory + "]");

        Objects.requireNonNull(
            rootJavaDocDirectory,
            "You have passed 'null' to parameter 'rootJavaDocDirectory'"
        );

        Objects.requireNonNull(
            rootSourceFileDirectories,
            "You have passed 'null' to parameter 'rootSourceFileDirectories'"
        );

        // NOTE: Java seems to have no problem with '.' and '..' inside of a File-Name
        if (StrCmpr.containsOR(rootJavaDocDirectory, "*", "?"))

            throw new UpgradeException(
                "The Root JavaDoc Directory String you have passed contains either the '*' " +
                "character, or the '?', but these is not allowed."
            );

        // Check for these errors inside the Root Source Directories too.
        for (String s : rootSourceFileDirectories) if (StrCmpr.containsOR(s, "*", "?"))

            throw new UpgradeException(
                "One of the Root Source Directory Strings that you have passed contains either " +
                "the '*' character, or the '?', but these is not allowed."
            );

        if (rootSourceFileDirectories.length == 0) throw new UpgradeException(
            "You have not passed any source-code directories to parameter " +
            "'rootSourceFileDirectories'"
        );

        /*
        // THIS HAS TO BE MOVED / COPIED
        if (rootJavaDocDirectory.length() > 0)
            UpgradeException.checkFileExistsAndCanAccess
                (rootJavaDocDirectory, "Root '.html' Java-Doc Documentation Page Directory");
        */

        for (String rootSourceDir : rootSourceFileDirectories)
            if (rootSourceDir.length() > 0)
                UpgradeException.checkFileExistsAndCanAccess
                    (rootSourceDir, "Root '.java' Source File Directory");

        // Easier to type "rsd" in the code below
        final String[] rsd = new String[rootSourceFileDirectories.length];


        // *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
        // Ensure File.separator is at the end of each of these directory-names - except dir ""
        // *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
        //
        // If the directory is the "Current Working Directory" - which is specified by the
        // Zero-Length-String (a.k.a ""), then a trailing File.separator should **NOT** be added.
        // All other directory names must end with the File.separator
        //
        // NOTE: For checking that a directory exists and can be accessed (the previous lines of
        //       code), the class java.io.File doesn't require that there be a trailing File
        //       Separator.  However, in this package (the JD-Upgrader Package), appending file
        //       names to these root-directories mandates that the File-Separator be present at the
        //       end of each of these directory-names - except, of course, the "" directory - which
        //       is the "Current Working Directory."
        //
        // SPECIFICALLY: Later on when these Upgrade-Fields are actually used by the class
        //               "MainFilesProcessor" - making sure these directory-names end with '/' is
        //               where this stuff actually comes into play

        for (int i=0; i < rootSourceFileDirectories.length; i++)

            // DON'T FORGET: This *DOES NOT* end with File.separator - but it doesn't have to!
            if (rootSourceFileDirectories[i].length() == 0)
                rsd[i] = "";

            else if (rootSourceFileDirectories[i].endsWith(File.separator))
                rsd[i] = rootSourceFileDirectories[i];

            else
                rsd[i] = rootSourceFileDirectories[i] + File.separator;


        // if (rsd == null) System.out.println("rsd is null!!!");
        // else System.out.println(Arrays.toString(rsd));
        // 
        // this.pathsTypesBuilder.rootSourceFileDirectories = ReadOnlyList.of(rsd);

        final ReadOnlyList<String> RSFD = ReadOnlyList.of(rsd);


        // *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
        // Make sure the File.separator is here too, unless Root-JD-Dir is the CWD (the "" dir)
        // *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***


        // this.pathsTypesBuilder.rootJavaDocDirectory =
        final String RJDD;

        // This *DOES NOT* end with File.separator - but it doesn't have to!
        if (rootJavaDocDirectory.length() == 0)
            RJDD = "";

        else if (rootJavaDocDirectory.endsWith(File.separator))
            RJDD = rootJavaDocDirectory;

        else
            RJDD = rootJavaDocDirectory + File.separator;

        return new Ret2<String, ReadOnlyList<String>>(RJDD, RSFD);
    }
}