From c0e5480e4b0147cb18ba1db57a4eca44e8840a99 Mon Sep 17 00:00:00 2001 From: Willem Date: Mon, 3 Feb 2025 23:48:24 +0100 Subject: [PATCH] Corrected MM doc column remark and add ignore for bug --- .../metamodel/doc/DocModelWriter.java | 13 ++- .../metamodel/doc/DocModelWriterTable.java | 105 ++++++++++++++---- 2 files changed, 93 insertions(+), 25 deletions(-) diff --git a/nx01-mushroom-mais-mm/src/main/java/org/eobjects/metamodel/doc/DocModelWriter.java b/nx01-mushroom-mais-mm/src/main/java/org/eobjects/metamodel/doc/DocModelWriter.java index 8a0e249..7a69464 100644 --- a/nx01-mushroom-mais-mm/src/main/java/org/eobjects/metamodel/doc/DocModelWriter.java +++ b/nx01-mushroom-mais-mm/src/main/java/org/eobjects/metamodel/doc/DocModelWriter.java @@ -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(); diff --git a/nx01-mushroom-mais-mm/src/main/java/org/eobjects/metamodel/doc/DocModelWriterTable.java b/nx01-mushroom-mais-mm/src/main/java/org/eobjects/metamodel/doc/DocModelWriterTable.java index 8170b44..a20493e 100644 --- a/nx01-mushroom-mais-mm/src/main/java/org/eobjects/metamodel/doc/DocModelWriterTable.java +++ b/nx01-mushroom-mais-mm/src/main/java/org/eobjects/metamodel/doc/DocModelWriterTable.java @@ -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 rsFilterColumn(Collection rsa,Column column,boolean filterPrimary) { + List filtered = rsFilter(rsa, column.getTable(), filterPrimary); + List result = new ArrayList(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 rsFilter(Collection rsa,Table table,boolean filterPrimary) { List result = new ArrayList(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 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 rsIn = rsFilterColumn(table.getRelationships(),column,false).iterator(); + Iterator 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();