Skip to content

Commit cca8987

Browse files
committed
showcase what is the goal of this extension
1 parent 744c4ec commit cca8987

File tree

5 files changed

+166
-12
lines changed

5 files changed

+166
-12
lines changed

src/main/java/org/uniqueck/asciidoctorj/LiquibaseBlockMacroProcessor.java

+19-12
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,10 @@
33
import org.asciidoctor.ast.StructuralNode;
44
import org.asciidoctor.extension.BlockMacroProcessor;
55
import org.asciidoctor.extension.Name;
6-
import org.jdom2.Document;
7-
import org.jdom2.JDOMException;
8-
import org.jdom2.input.SAXBuilder;
6+
import org.uniqueck.asciidoctorj.liquibase.LiquibaseChangesetParser;
7+
import org.uniqueck.asciidoctorj.liquibase.model.Table;
98

109
import java.io.File;
11-
import java.io.IOException;
1210
import java.util.ArrayList;
1311
import java.util.List;
1412
import java.util.Map;
@@ -18,17 +16,26 @@ public class LiquibaseBlockMacroProcessor extends BlockMacroProcessor {
1816

1917

2018
protected List<String> generateAsciiDocMarkup(StructuralNode parent, File sourceFile, Map<String, Object> attributes) {
19+
List<String> content = new ArrayList<>();
20+
Map<String, Table> parsedTables = new LiquibaseChangesetParser().parse(sourceFile);
2121

22-
SAXBuilder saxBuilder = new SAXBuilder();
23-
try {
24-
Document jdomDocument2 = saxBuilder.build(sourceFile);
25-
} catch (JDOMException e) {
26-
e.printStackTrace();
27-
} catch (IOException e) {
28-
e.printStackTrace();
22+
content.add("[plantuml]");
23+
content.add("----");
24+
content.add("!define Table(name,desc) class name as \"desc\" << (T,#FFAAAA) >>");
25+
content.add("!define primary_key(x) <b>x</b>");
26+
content.add("!define unique(x) <color:green>x</color>");
27+
content.add("!define not_null(x) <u>x</u>");
28+
content.add("hide methods");
29+
content.add("hide stereotypes");
30+
31+
32+
content.add("'entities");
33+
for (Table table : parsedTables.values()) {
34+
content.add("Table(" + table.getName()+ "," + table.getName() + ")");
2935
}
36+
content.add("----");
3037

31-
return new ArrayList<>();
38+
return content;
3239
}
3340

3441
@Override
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
package org.uniqueck.asciidoctorj.liquibase;
2+
3+
import lombok.AccessLevel;
4+
import lombok.Getter;
5+
import org.jdom2.Document;
6+
import org.jdom2.Element;
7+
import org.jdom2.JDOMException;
8+
import org.jdom2.Namespace;
9+
import org.jdom2.input.SAXBuilder;
10+
import org.uniqueck.asciidoctorj.liquibase.model.Column;
11+
import org.uniqueck.asciidoctorj.liquibase.model.Table;
12+
13+
import java.io.File;
14+
import java.io.IOException;
15+
import java.util.HashMap;
16+
import java.util.List;
17+
import java.util.Map;
18+
19+
@Getter(AccessLevel.PROTECTED)
20+
public class LiquibaseChangesetParser {
21+
22+
23+
final private SAXBuilder saxBuilder;
24+
25+
public LiquibaseChangesetParser() {
26+
this.saxBuilder = new SAXBuilder();
27+
}
28+
29+
public Map<String, Table> parse(File masterFile) {
30+
Map<String, Table> parsedTables = new HashMap<>();
31+
try {
32+
Document rootDocument = getSaxBuilder().build(masterFile);
33+
Namespace namespace = getNamespace4Liquibase(rootDocument.getRootElement());
34+
35+
List<Element> changeSets = rootDocument.getRootElement().getChildren("changeSet", namespace);
36+
for (Element changeSet : changeSets) {
37+
Element documentTable = changeSet.getChild("createTable", namespace);
38+
if (documentTable != null) {
39+
Table table = extractTable(namespace, documentTable);
40+
parsedTables.put(table.getName(), table);
41+
}
42+
}
43+
} catch (JDOMException e) {
44+
e.printStackTrace();
45+
} catch (IOException e) {
46+
e.printStackTrace();
47+
}
48+
return parsedTables;
49+
}
50+
51+
52+
protected Table extractTable(Namespace namespace, Element tableElement) {
53+
String tableName = tableElement.getAttributeValue("tableName");
54+
Table table = new Table(tableName);
55+
List<Element> columns = tableElement.getChildren("column", namespace);
56+
for (Element columnElement : columns) {
57+
extractColumn(table, namespace, columnElement);
58+
}
59+
return table;
60+
}
61+
62+
protected Column extractColumn(Table table, Namespace namespace, Element columnElement) {
63+
String name = columnElement.getAttributeValue("name");
64+
String type = columnElement.getAttributeValue("type");
65+
return table.add(name, type);
66+
}
67+
68+
protected Namespace getNamespace4Liquibase(Element rootElement) {
69+
return rootElement.getNamespace();
70+
}
71+
72+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package org.uniqueck.asciidoctorj.liquibase.model;
2+
3+
4+
import lombok.Data;
5+
6+
7+
@Data
8+
public class Column {
9+
10+
final String name;
11+
final String type;
12+
13+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package org.uniqueck.asciidoctorj.liquibase.model;
2+
3+
import lombok.EqualsAndHashCode;
4+
import lombok.Getter;
5+
import lombok.RequiredArgsConstructor;
6+
import lombok.ToString;
7+
8+
import java.util.ArrayList;
9+
import java.util.Collections;
10+
import java.util.List;
11+
12+
@ToString
13+
@EqualsAndHashCode
14+
@Getter
15+
public class Table {
16+
17+
final String name;
18+
19+
final List<Column> columns;
20+
21+
public Table(String name) {
22+
this.name = name;
23+
this.columns = new ArrayList<>();
24+
}
25+
26+
public Column add(String name, String type) {
27+
Column column = new Column(name, type);
28+
this.columns.add(column);
29+
return column;
30+
}
31+
32+
public List<Column> getColums() {
33+
return Collections.unmodifiableList(columns);
34+
}
35+
36+
37+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package org.uniqueck.asciidoctorj.liquibase;
2+
3+
import org.junit.jupiter.api.Test;
4+
import org.uniqueck.asciidoctorj.liquibase.model.Table;
5+
6+
import java.io.File;
7+
import java.util.Map;
8+
9+
import static org.junit.jupiter.api.Assertions.*;
10+
11+
class LiquibaseChangesetParserTest {
12+
13+
@Test
14+
void testParse() {
15+
Map<String, Table> parsedTables = new LiquibaseChangesetParser().parse(new File("src/test/resources/simpleChangeSet.xml"));
16+
assertNotNull(parsedTables);
17+
assertEquals(1, parsedTables.size());
18+
Table expectedTable = new Table("TablesAndTables");
19+
expectedTable.add("COLUMN1", "TEXT");
20+
assertEquals(expectedTable, parsedTables.get("TablesAndTables"));
21+
assertEquals(1, parsedTables.get("TablesAndTables").getColumns().size());
22+
23+
}
24+
25+
}

0 commit comments

Comments
 (0)