[ 
https://issues.apache.org/jira/browse/FLINK-5781?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15959777#comment-15959777
 ] 

ASF GitHub Bot commented on FLINK-5781:
---------------------------------------

Github user zentol commented on the issue:

    https://github.com/apache/flink/pull/3495
  
    Alright here's what i came up with. We define a single antrun task which 
does the following:
    
    Since all *Options classes reside in the same directory we just take a look 
in there and filter out the Options classes. We then load the class via 
reflection, generate the html and manually write out the file.
     
    The antrun plugin in flink-core is configured like this:
    ```
    <plugin>
        <artifactId>maven-antrun-plugin</artifactId>
        <version>1.7</version>
        <executions>
                <execution>
                        <id>high-availability</id>
                        <phase>package</phase>
                        <goals>
                                <goal>run</goal>
                        </goals>
                        <configuration>
                                <target>
                                        <java 
classname="org.apache.flink.configuration.ConfigGroup" fork="true">
                                                <classpath 
refid="maven.compile.classpath" />
                                                <arg 
value="${rootDir}/${generated.docs.dir}/" />
                                        </java>
                                </target>
                        </configuration>
                </execution>
        </executions>
    </plugin>
    ```
    
    While the ConfigGroup has gotten a new main method:
    ``ยด
    public static void main(String[] args) throws Exception {
        String basePath = args[0];
    
        File path = new 
File("../src/main/java/org/apache/flink/configuration/");
    
        String[] classes = path.list();
    
        Pattern p2 = Pattern.compile("([A-Z][a-z]*)");
        Pattern p = Pattern.compile("([a-zA-Z]*Options).java");
        for (String clazz : classes) {
                Matcher m = p.matcher(clazz);
                if (m.matches()) {
    
                        String className = m.group(1);
                        if (!className.equals("ConfigOptions")) {
                                Matcher m2 = p2.matcher(clazz);
                                List<String> parts = new ArrayList<>();
                                while (m2.find()) {
                                        parts.add(m2.group(1));
                                }
                                StringBuilder sb = new StringBuilder();
                                for (int x = 0; x < parts.size() - 1; x++) {
                                        sb.append(parts.get(x).toLowerCase());
                                        sb.append("_");
                                }
                                sb.append("configuration.html");
    
                                String generatedDocFilePath = basePath + sb;
                                String fullClassPath = 
"org.apache.flink.configuration." + className;
    
                                String doc = 
create(Class.forName(fullClassPath)).toHTMLTable(false);
    
                                File f = new File(generatedDocFilePath);
                                f.getParentFile().mkdirs();
                                f.createNewFile();
    
                                try (FileWriter fw = new FileWriter(f)) {
                                        fw.write(doc);
                                        fw.flush();
                                }
                        }
                }
        }
    }
    ```
    
    Haven't cleaned the code up yet, since it's 11pm after all, but it works. 
Maybe you can refine it a bit.
    
    The result is that the docs will be generated automatically for every new 
*Options class that is placed under org.apache.flink.configuration in 
flink-core, which is a must-have imo.


> Generation HTML from ConfigOption
> ---------------------------------
>
>                 Key: FLINK-5781
>                 URL: https://issues.apache.org/jira/browse/FLINK-5781
>             Project: Flink
>          Issue Type: Sub-task
>          Components: Documentation
>            Reporter: Ufuk Celebi
>            Assignee: Dawid Wysakowicz
>
> Use the ConfigOption instances to generate a HTML page that we can use to 
> include in the docs configuration page.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to