Skip to content
Snippets Groups Projects
Commit 7ccf49f8 authored by Henrik tom Wörden's avatar Henrik tom Wörden
Browse files

ENH: Provide further information in the plantuml diagram

parent c560db8a
No related branches found
No related tags found
No related merge requests found
...@@ -44,13 +44,16 @@ def get_description(description_str): ...@@ -44,13 +44,16 @@ def get_description(description_str):
words = description_str.split() words = description_str.split()
lines = [] lines = []
lines.append("") lines.append("")
for w in words: for w in words:
if len(lines[-1] + w) > 60: if len(lines[-1] + w) > 60:
lines.append("") lines.append("")
if len(lines[-1]) > 0: if len(lines[-1]) > 0:
lines[-1] += " " lines[-1] += " "
lines[-1] += w lines[-1] += w
description = "\n".join(lines) description = "\n".join(lines)
return description + "\n" return description + "\n"
...@@ -89,22 +92,28 @@ def recordtypes_to_plantuml_string(iterable): ...@@ -89,22 +92,28 @@ def recordtypes_to_plantuml_string(iterable):
def _add_properties(c, importance=None): def _add_properties(c, importance=None):
result = "" result = ""
for p in c.get_properties(): for p in c.get_properties():
if importance is None or c.get_properties().get_importance(p) == importance: if importance is None or c.get_properties().get_importance(p) == importance:
if importance is not None and len(result) == 0: if importance is not None and len(result) == 0:
result += ".." + importance.lower() + "..\n" result += ".." + importance.lower() + "..\n"
name = p.name name = p.name
p_type = p.datatype p_type = p.datatype
if p_type is None: if p_type is None:
# get type from properties # get type from properties
for p2 in properties: for p2 in properties:
if p2.name == p.name: if p2.name == p.name:
p_type = p2.datatype p_type = p2.datatype
if p_type is None: if p_type is None:
# is reference? # is reference?
for p2 in classes: for p2 in classes:
if p2.name == p.name: if p2.name == p.name:
p_type = p2 p_type = p2
if isinstance(p_type, db.Entity): if isinstance(p_type, db.Entity):
p_type = p_type.name p_type = p_type.name
dependencies[c].append(p_type) dependencies[c].append(p_type)
...@@ -114,20 +123,24 @@ def recordtypes_to_plantuml_string(iterable): ...@@ -114,20 +123,24 @@ def recordtypes_to_plantuml_string(iterable):
dependencies[c].append(c2.name) dependencies[c].append(c2.name)
result += ' {name} ({type})\n'.format( result += ' {name} ({type})\n'.format(
name=name, type=p_type) name=name, type=p_type)
return result return result
result = "@startuml\n\n" result = "@startuml\n\n"
result += "skinparam classAttributeIconSize 0\n" result += "skinparam classAttributeIconSize 0\n"
result += "package Properties #DDDDDD {\n" result += "package Properties #DDDDDD {\n"
for p in properties: for p in properties:
inheritances[p] = p.get_parents() inheritances[p] = p.get_parents()
dependencies[p] = [] dependencies[p] = []
result += "class \"{klass}\" << (P,#008800) >> {{\n".format(klass=p.name) result += "class \"{klass}\" << (P,#008800) >> {{\n".format(klass=p.name)
if p.description is not None: if p.description is not None:
result += get_description(p.description) result += get_description(p.description)
result += "\n..\n" result += "\n..\n"
if isinstance(p.datatype, str): if isinstance(p.datatype, str):
result += "datatype: " + p.datatype + "\n" result += "datatype: " + p.datatype + "\n"
elif isinstance(p.datatype, db.Entity): elif isinstance(p.datatype, db.Entity):
...@@ -138,10 +151,12 @@ def recordtypes_to_plantuml_string(iterable): ...@@ -138,10 +151,12 @@ def recordtypes_to_plantuml_string(iterable):
result += "}\n\n" result += "}\n\n"
result += "package RecordTypes #DDDDDD {\n" result += "package RecordTypes #DDDDDD {\n"
for c in classes: for c in classes:
inheritances[c] = c.get_parents() inheritances[c] = c.get_parents()
dependencies[c] = [] dependencies[c] = []
result += "class \"{klass}\" << (C,#FF1111) >> {{\n".format(klass=c.name) result += "class \"{klass}\" << (C,#FF1111) >> {{\n".format(klass=c.name)
if c.description is not None: if c.description is not None:
result += get_description(c.description) result += get_description(c.description)
...@@ -156,6 +171,7 @@ def recordtypes_to_plantuml_string(iterable): ...@@ -156,6 +171,7 @@ def recordtypes_to_plantuml_string(iterable):
else: else:
result += "\n..\n" result += "\n..\n"
result += "}\n\n" result += "}\n\n"
for g in grouped: for g in grouped:
inheritances[g] = g.get_parents() inheritances[g] = g.get_parents()
result += "class \"{klass}\" << (G,#0000FF) >> {{\n".format(klass=g.name) result += "class \"{klass}\" << (G,#0000FF) >> {{\n".format(klass=g.name)
...@@ -165,14 +181,30 @@ def recordtypes_to_plantuml_string(iterable): ...@@ -165,14 +181,30 @@ def recordtypes_to_plantuml_string(iterable):
for par in parents: for par in parents:
result += "\"{par}\" <|-- \"{klass}\"\n".format( result += "\"{par}\" <|-- \"{klass}\"\n".format(
klass=c.name, par=par.name) klass=c.name, par=par.name)
for c, deps in dependencies.items(): for c, deps in dependencies.items():
for dep in deps: for dep in deps:
result += "\"{klass}\" *-- \"{dep}\"\n".format( result += "\"{klass}\" *-- \"{dep}\"\n".format(
klass=c.name, dep=dep) klass=c.name, dep=dep)
result += "\n" result += """
result += "package \"B is a subtype of A\" <<Rectangle>> {\n A <|-- B\n}\n\n"
result += "package \"The property P references an instance of D\" <<Rectangle>> {\nclass C {\nP(D)\n}\n\n C *-- D\n}\n\n" package \"B is a subtype of A\" <<Rectangle>> {
A <|-right- B
note "This determines what you find when you query for the RecordType.\\n'FIND RECORD A' will provide Records which have a parent\\nA or B, while 'FIND RECORD B' will provide only Records which have a parent B." as N1
}
"""
result += """
package \"The property P references an instance of D\" <<Rectangle>> {
class C {
P(D)
}
C *-right- D
note "Employ this when searching for C: 'FIND RECORD C WITH D'\\nOr if the value of D is a Record: 'FIND RECORD C WHICH REFERENCES D' is possible.\\nEmploying this while searching for D: 'FIND RECORD D WHICH IS REFERENCED BY C" as N2
}
"""
result += "\n@enduml\n" result += "\n@enduml\n"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment