Corrected MM doc column remark and add ignore for bug

This commit is contained in:
Willem Cazander 2025-02-03 23:48:24 +01:00
parent ba525f6982
commit c0e5480e4b
2 changed files with 93 additions and 25 deletions

View file

@ -130,7 +130,14 @@ public class DocModelWriter {
schemaNode.addNode(createNodeTable(table));
}
for (Relationship rs:schema.getRelationships()) {
schemaNode.addNode(createNodeRelationship(rs));
MaisDocNode rsNode = createNodeRelationship(rs);
if (rsNode.getId().length() > 255) {
// TODO-1 track BUG in meta-model
// TODO-2 change or add code for limit as nx01/pom.xml also generated an too long path
System.out.println("BUG ignored: " + rs);
continue;
}
schemaNode.addNode(rsNode);
}
}
}
@ -163,6 +170,10 @@ public class DocModelWriter {
String name = rsName(rs);
return new MaisDocNode(rs,name,name,name);
}
// BUG in lastest meta-model code
// java.io.IOException: java.io.FileNotFoundException: (File name too long)
// c_validcombination_c_validcombination_id_c_validcombination_id_c_validcombination_id_c_validcombination_id_c_validcombination_id_c_validcombination_id_c_validcombination_id_c_validcombination_id_c_validcombination_id_c_acctschema_gl_currencybalancing_acct_incomesummary_acct_intercompanydueto_acct_intercompanyduefrom_acct_ppvoffset_acct_retainedearning_acct_suspensebalancing_acct_suspenseerror_acct_cfs_order_acct_rs
private String rsName(Relationship rs) {
StringBuilder buf = new StringBuilder();

View file

@ -33,6 +33,7 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.stream.Collectors;
import org.apache.metamodel.DataContext;
import org.eobjects.metamodel.doc.jdbc.DBIndex;
@ -52,6 +53,7 @@ import org.x4o.maisdoc.model.MaisDocNode;
import org.x4o.maisdoc.model.MaisDocNodeBody;
import org.x4o.maisdoc.model.MaisDocWriteEvent;
import org.x4o.sax3.SAX3WriterHtml.Tag;
import org.x4o.sax3.io.ContentCloseable;
public class DocModelWriterTable {
@ -82,6 +84,24 @@ public class DocModelWriterTable {
}
}
private List<Relationship> rsFilterColumn(Collection<Relationship> rsa,Column column,boolean filterPrimary) {
List<Relationship> filtered = rsFilter(rsa, column.getTable(), filterPrimary);
List<Relationship> result = new ArrayList<Relationship>(10);
for (Relationship rs: filtered) {
if (!filterPrimary) {
if (!rs.getPrimaryColumns().contains(column)) {
continue;
}
} else {
if (!rs.getForeignColumns().contains(column)) {
continue;
}
}
result.add(rs);
}
return result;
}
private List<Relationship> rsFilter(Collection<Relationship> rsa,Table table,boolean filterPrimary) {
List<Relationship> result = new ArrayList<Relationship>(10);
for (Relationship rs : rsa) {
@ -154,13 +174,14 @@ public class DocModelWriterTable {
} else {
event.getWriter().printCharacters("View "+table.getQualifiedLabel());
}
DBTable tableDB = getDBTable(event);
if (tableDB!=null && tableDB.getSqlScript()!=null) {
writeSqlBlock(writer,tableDB.getSqlScript());
for (DBIndex index:tableDB.getIndexes()) {
if (index.getSqlScript()!=null) {
writeSqlBlock(writer,index.getSqlScript());
try (ContentCloseable content = writer.docPageContent()) {
writeSqlBlock(writer,tableDB.getSqlScript());
for (DBIndex index:tableDB.getIndexes()) {
if (index.getSqlScript()!=null) {
writeSqlBlock(writer,index.getSqlScript());
}
}
}
}
@ -169,15 +190,19 @@ public class DocModelWriterTable {
@MaisDocNodeWriterMethod(nodeBody=MaisDocNodeBody.SUMMARY,targetClasses={Table.class},nodeBodyOrders={3},contentGroup="Columns",contentGroupType="summary")
public void writeTableSummary(MaisDocWriteEvent<MaisDocNode> event) throws IOException {
MaisDocContentWriter writer = event.getWriter();
Table table = (Table)event.getEventObject().getUserData();
Table table = (Table)event.getEventObject().getUserData();
if (TableType.VIEW.equals(table.getType())) {
writer.docTableStart("Column Summary", "All column of the view.",null);
} else {
writer.docTableStart("Column Summary", "All column of the table.",null);
}
writer.docTableHeader("Name", "Description");
for (Column column:table.getColumns()) {
writer.docTableRowLink("#"+MaisDocContentWriter.toSafeUri(column.getName()),column.getName(),column.getQualifiedLabel());
for (Column column : table.getColumns()) {
String desc = column.getRemarks();
if (desc == null || desc.isEmpty()) {
desc = column.getQualifiedLabel();
}
writer.docTableRowLink("#" + MaisDocContentWriter.toSafeUri(column.getName()), column.getName(), desc);
}
writer.docTableEnd();
}
@ -380,11 +405,11 @@ public class DocModelWriterTable {
}
writer.printTagEnd(Tag.pre);
writer.printTagStart(Tag.div,MaisDocContentCss.block);
writer.printCharacters("Description: ");
writer.printCharacters(column.getQuotedName());
writer.printTagEnd(Tag.div);
if (column.getRemarks()!=null && !column.getRemarks().isEmpty()) {
writer.printTagStart(Tag.div,MaisDocContentCss.block);
writer.printCharacters(column.getRemarks());
writer.printTagEnd(Tag.div);
}
writer.printTagStart(Tag.dl);
if (column.isIndexed()) {
@ -420,17 +445,49 @@ public class DocModelWriterTable {
}
}
writer.printTagStart(Tag.dt);
writer.printTagStart(Tag.span,MaisDocContentCss.strong);
writer.printCharacters("References:");
writer.printTagEnd(Tag.span);
writer.printTagEnd(Tag.dt);
writer.printTagStart(Tag.dd);
writer.printTagStart(Tag.code);
writer.printCharacters("test_IDX");
writer.printTagEnd(Tag.code);
writer.printCharacters(" - FK");
writer.printTagEnd(Tag.dd);
if (!TableType.VIEW.equals(table.getType())) {
Iterator<Relationship> rsIn = rsFilterColumn(table.getRelationships(),column,false).iterator();
Iterator<Relationship> rsOut = rsFilterColumn(table.getRelationships(),column,true).iterator();
if (rsIn.hasNext()) {
writer.printTagStart(Tag.dt);
writer.printTagStart(Tag.span,MaisDocContentCss.strong);
writer.printCharacters("Referenced:");
writer.printTagEnd(Tag.span);
writer.printTagEnd(Tag.dt);
while (rsIn.hasNext()) {
Relationship rs = rsIn.next();
String uri = "../../"+MaisDocContentWriter.toSafeUri(rs.getForeignTable().getSchema().getName())+"/"+MaisDocContentWriter.toSafeUri(rs.getForeignTable().getName())+"/index.html";
String cols = rs.getForeignColumns().stream().map(v -> v.getName()).collect(Collectors.joining(" - "));
writer.printTagStart(Tag.dd);
writer.printTagStart(Tag.code);
writer.printHref(uri, rs.getForeignTable().getName() + "." + cols);
writer.printTagEnd(Tag.code);
writer.printTagEnd(Tag.dd);
}
}
if (rsOut.hasNext()) {
writer.printTagStart(Tag.dt);
writer.printTagStart(Tag.span,MaisDocContentCss.strong);
writer.printCharacters("References:");
writer.printTagEnd(Tag.span);
writer.printTagEnd(Tag.dt);
while (rsOut.hasNext()) {
Relationship rs = rsOut.next();
String uri = "../../"+MaisDocContentWriter.toSafeUri(rs.getPrimaryTable().getSchema().getName())+"/"+MaisDocContentWriter.toSafeUri(rs.getPrimaryTable().getName())+"/index.html";
String cols = rs.getPrimaryColumns().stream().map(v -> v.getName()).collect(Collectors.joining(" - "));
writer.printTagStart(Tag.dd);
writer.printTagStart(Tag.code);
writer.printHref(uri, rs.getPrimaryTable().getName() + "." + cols);
writer.printTagEnd(Tag.code);
writer.printTagEnd(Tag.dd);
}
}
}
writer.printTagEnd(Tag.dl);
writer.docPageBlockEnd();