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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
package Torello.JavaDoc;

import Torello.Java.ReadOnly.ReadOnlyList;

/**
 * An interface that may be implemented by a user to execute detailed customizations and
 * modifications to a specific Java-Doc Web Page.  This interface should be implemented by a class
 * that has the same name as the class being processed, but ending with a <B>{@code '$'}</B>.
 * 
 * <BR /><BR />After writing a Java Class which implements this interface, simply copy it to the
 * directory in your file-system that contains the Java CIET/Type - <I>in a sub-directory that has
 * the following name:</I>
 * 
 * <BR /><BR /><B><CODE>upgrade-files/user-processors/MyClassName$.java</CODE></B>
 * 
 * <BR /><BR />Notice that the name of the this particular class ends with a <B>{@code '$'}</B>.
 * The first part of the class' name is being utilized to identify to the Java-Doc Upgrader logic
 * the name of the actual class/CIET/Type that your processor-class is going to process.
 * 
 * <BR /><BR />If you had a class named <B>{@code 'BigNumberCruncher.java'}</B> that was a Java
 * {@code 'class'}, and you wanted to write an HTML-Processor to insert several notices into the
 * JavaDoc Page for the {@code BigNumberCruncher} type - <B><I>you would write a user-processor
 * named {@code 'BigNumberCruncher$.java'}</I></B>.  You would make sure to leave the processor
 * in the following Java Source-Code Directory:
 * 
 * <BR /><BR /><B><CODE>
 * ../com/MyCompany/MyPackage/upgrade-files/user-processors/BigNumberCruncher$.class</CODE></B>
 * 
 * <BR /><BR />The class that you write would implement this interface {@code 'UserProcessorPage'}.
 * During the JavaDoc Upgrader phase of your build, the upgrader logic would invoke your 
 * user-processor and pass it the relevant HTML Data from the Java-Doc HTML Web-Page that had been
 * created by the Java-Doc Tool to your processor.
 */
public interface UserProcessorPage
{
    // ********************************************************************************************
    // ********************************************************************************************
    // Main process dispatch method (and also header/footer dispatch)
    // ********************************************************************************************
    // ********************************************************************************************


    /**
     * Process a complete Java-Doc Generated Web-Page
     * @param jdhf An instance of the fully parsed HTML Page.
     */
    public default void process(JavaDocHTMLFile jdhf) { }

    /**
     * <EMBED CLASS='external-html' DATA-FILE-ID=UPP_HEADFOOT_DESC>
     * @param headerFooter <EMBED CLASS='external-html' DATA-FILE-ID=UPP_HEADFOOT_PARAM>
     * @see JavaDocHTMLFile#headerFooter
     */
    public default void processHeaderFooter(HeaderFooterHTML headerFooter) { }


    // ********************************************************************************************
    // ********************************************************************************************
    // Summary Table HTML Hooks
    // ********************************************************************************************
    // ********************************************************************************************


    /**
     * <EMBED CLASS=defs DATA-ENTITY=Field DATA-ACCESSOR=fieldSummaryTable>
     * <EMBED CLASS='external-html' DATA-FILE-ID=UPP_SUMMARY_DESC>
     * @param fieldSummaries <EMBED CLASS='external-html' DATA-FILE-ID=UPP_SUMMARY_PARAM>
     * @see JavaDocHTMLFile#fieldSummaryTable
     */
    public default void processFieldSumm(SummaryTableHTML<Field> fieldSummaries) { }

    /**
     * <EMBED CLASS=defs DATA-ENTITY=Constructor DATA-ACCESSOR=constructorSummaryTable>
     * <EMBED CLASS='external-html' DATA-FILE-ID=UPP_SUMMARY_DESC>
     * @param constructorSummaries <EMBED CLASS='external-html' DATA-FILE-ID=UPP_SUMMARY_PARAM>
     * @see JavaDocHTMLFile#constructorSummaryTable
     */
    public default void processCtorSumm(SummaryTableHTML<Constructor> constructorSummaries) { }

    /**
     * <EMBED CLASS=defs DATA-ENTITY=Method DATA-ACCESSOR=methodSummaryTable>
     * <EMBED CLASS='external-html' DATA-FILE-ID=UPP_SUMMARY_DESC>
     * @param methodSummaries <EMBED CLASS='external-html' DATA-FILE-ID=UPP_SUMMARY_PARAM>
     * @see JavaDocHTMLFile#methodSummaryTable
     */
    public default void processMethodSumm(SummaryTableHTML<Method> methodSummaries) { }

    /**
     * <EMBED CLASS=defs DATA-ENTITY='Enum-Constant' DATA-ACCESSOR=ecSummaryTable>
     * <EMBED CLASS='external-html' DATA-FILE-ID=UPP_SUMMARY_DESC>
     * 
     * <BR /><BR /><B STYLE='color: red'>NOTE:</B> The vast majority of Java Type's (CIET's) will
     * not have any "Enum Constants" - <I>and would therefore not have an Enum-Constant Summary
     * Table!</I>  Only Java <B STYLE='color: blue'>{@code enum's}</B> may have such constants
     * defined.
     * 
     * @param ecSummaries <EMBED CLASS='external-html' DATA-FILE-ID=UPP_SUMMARY_PARAM>
     * @see JavaDocHTMLFile#ecSummaryTable
     */
    public default void processECSumm(SummaryTableHTML<EnumConstant> ecSummaries) { }

    /**
     * <EMBED CLASS=defs DATA-ENTITY='Annotation-Element'>
     * <EMBED CLASS='external-html' DATA-FILE-ID=UPP_SUMMARY_DESC>
     * 
     * <BR /><BR /><B STYLE='color: red'>NOTE:</B> The vast majority of Java Type's (CIET's) will
     * not have any "Annotation Elements" - <I>and would therefore not have an Annotation Element
     * Summary Table!</I>  Only Java <B STYLE='color: blue;'>{@code @annotations}</B> may have such
     * elements defined.
     * 
     * @param oaeSummaries
     *  <EMBED CLASS='external-html' DATA-FILE-ID=UPP_SUMMARY_PARAM DATA-ACCESSOR=oaeSummaryTable>
     * 
     * @param raeSummaries
     *  <EMBED CLASS='external-html' DATA-FILE-ID=UPP_SUMMARY_PARAM DATA-ACCESSOR=raeSummaryTable>
     * 
     * @see JavaDocHTMLFile#oaeSummaryTable
     * @see JavaDocHTMLFile#raeSummaryTable
     */
    public default void processAESumm(
            SummaryTableHTML<AnnotationElem> oaeSummaries,
            SummaryTableHTML<AnnotationElem> raeSummaries
        )
    { }


    // ********************************************************************************************
    // ********************************************************************************************
    // ReflHTML (Detail) HTML Hooks
    // ********************************************************************************************
    // ********************************************************************************************


    /**
     * <EMBED CLASS=defs DATA-ENTITY=Field>
     * <EMBED CLASS='external-html' DATA-FILE-ID=UPP_DETAILS_DESC>
     * @param fieldDetails <EMBED CLASS='external-html' DATA-FILE-ID=UPP_DETAILS_PARAM>
     */
    public default void processFieldDetails(ReadOnlyList<ReflHTML<Field>> fieldDetails)
    { }

    /**
     * <EMBED CLASS=defs DATA-ENTITY=Constructor>
     * <EMBED CLASS='external-html' DATA-FILE-ID=UPP_DETAILS_DESC>
     * @param constructorDetails <EMBED CLASS='external-html' DATA-FILE-ID=UPP_DETAILS_PARAM>
     */
    public default void processCtorDetails(ReadOnlyList<ReflHTML<Constructor>> constructorDetails)
    { }

    /**
     * <EMBED CLASS=defs DATA-ENTITY=Method>
     * <EMBED CLASS='external-html' DATA-FILE-ID=UPP_DETAILS_DESC>
     * @param methodDetails <EMBED CLASS='external-html' DATA-FILE-ID=UPP_DETAILS_PARAM>
     */
    public default void processMethodDetails(ReadOnlyList<ReflHTML<Method>> methodDetails)
    { }

    /**
     * <EMBED CLASS=defs DATA-ENTITY="Enum-Constant">
     * <EMBED CLASS='external-html' DATA-FILE-ID=UPP_DETAILS_DESC>
     * 
     * <BR /><BR /><B CLASS=JDDescLabel>Extremely Uncommon:</B>
     * 
     * <BR />The vast majority of Java Type's (CIET's) will not have any "Enum Constants" -
     * <I>and would therefore not have an Annotation Element Detail HTML Block!</I>  Only Java
     * <B STYLE='color: blue;'>{@code enum}</B> may have such constants defined.
     * 
     * @param ecDetails <EMBED CLASS='external-html' DATA-FILE-ID=UPP_DETAILS_PARAM>
     */
    public default void processECDetails(ReadOnlyList<ReflHTML<EnumConstant>> ecDetails)
    { }

    /**
     * <EMBED CLASS=defs DATA-ENTITY="Annotation-Element">
     * <EMBED CLASS='external-html' DATA-FILE-ID=UPP_DETAILS_DESC>
     *  
     * <BR /><BR /><B CLASS=JDDescLabel>Extremely Uncommon:</B>
     * 
     * The vast majority of Java Type's (CIET's) will not have any "Annotation Elements" - <I>and
     * would therefore not have an Annotation Element Detail HTML Block!</I>  Only Java
     * <B STYLE='color: blue;'>{@code @annotations}</B> may have such elements defined.
     * 
     * @param aeDetails <EMBED CLASS='external-html' DATA-FILE-ID=UPP_DETAILS_PARAM>
     */
    public default void processAEDetails(ReadOnlyList<ReflHTML<AnnotationElem>> aeDetails)
    { }
}