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)); schemaNode.addNode(createNodeTable(table));
} }
for (Relationship rs:schema.getRelationships()) { 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); String name = rsName(rs);
return new MaisDocNode(rs,name,name,name); 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) { private String rsName(Relationship rs) {
StringBuilder buf = new StringBuilder(); StringBuilder buf = new StringBuilder();

View file

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