2architecture.tex 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. \section{Assumptions}\label{sec:assumptions}
  2. The following assumptions are made for the implementation of the node placement algorithm:
  3. \begin{itemize}
  4. \item There are no hyperedges.
  5. \item There are no port constraints.
  6. \item There are no labels.
  7. \item There are no cross-hierarchy edges.
  8. \item No edges over multiple layers (the previous phases should have added dummy nodes).
  9. \end{itemize}
  10. \section{Input File Format}\label{sec:inputFileFormat}
  11. The input to \appname is a JSON file.
  12. An example is displayed in figure~\ref{fig:json-example}.
  13. The structure is as follows:
  14. \begin{itemize}
  15. \item The object in the JSON file is a node.
  16. \item A node has the attributes that are displayed in table~\ref{table:node-attributes}.
  17. \item An edge has the attributes that are displayed in table~\ref{table:edge-attributes}.
  18. \end{itemize}
  19. For parsing the JSON file the JSON-java library~\cite{leary_json-java:_2018} is used.
  20. The classes for reading and writing those JSON files are displayed in figure~\ref{fig:io}.
  21. The internal representation of graphs is further explained in the section~\ref{sec:model}.
  22. \begin{figure}[tp]
  23. \centering
  24. \includegraphics[width=\linewidth, trim={0 20cm 0 0}]{img/IO.pdf}
  25. \caption{Class diagram of the \enquote{IO} package, containing utilities for reading and writing graphs.}
  26. \label{fig:io}
  27. \end{figure}
  28. \centering
  29. \begin{longtable}{|p{1.8cm}|p{2cm}|p{1.8cm}|p{8.5cm}|}
  30. \hline
  31. Attribute & Type & Optional & Explanation \\\hline\hline
  32. name & string & yes & If not omitted, this must be unique for a given parent node. \\\hline
  33. width & integer & yes & The minimum width of the node.
  34. The node can be wider if it contains other nodes that need more space. \\\hline
  35. height & integer & yes & The minimum height of the node.
  36. The node can be higher if it contains other nodes that need more space. \\\hline
  37. layers & list of lists of nodes & yes & The layers of nodes inside this node (Hierarchy). \\\hline
  38. edges & list of edges & yes & The edges between nodes whose parent node is this node. \\\hline
  39. \caption{Node Attributes}
  40. \label{table:node-attributes}
  41. \end{longtable}
  42. \newpage
  43. \begin{longtable}{|p{1.8cm}|p{2cm}|p{1.8cm}|p{8.5cm}|}
  44. \hline
  45. Attribute & Type & Optional & Explanation \\\hline\hline
  46. source & string & no & The name of the source of this edge.
  47. Must be a node with the same parent node as the node specified by the \enquote{target} attribute. \\\hline
  48. target & string & no & The name of the target of this edge.
  49. Must be a node with the same parent node as the node specified by the \enquote{source} attribute. \\\hline
  50. \caption{Edge Attributes}
  51. \label{table:edge-attributes}
  52. \end{longtable}
  53. \raggedright
  54. %\begin{figure}[tp]
  55. % \centering
  56. % \includegraphics[width=0.9\textwidth]{img/json.png}
  57. % \caption[Input file format]{Input file format illustrated as a HERM diagram}
  58. % \label{fig:iff}
  59. %\end{figure}
  60. \begin{figure}
  61. \begin{lstinputlisting}[language=json,emph={}]{img/graph.json}
  62. \end{lstinputlisting}
  63. \caption[Example Input File]{Example Input file that is understood by \appname.}
  64. \label{fig:json-example}
  65. \end{figure}
  66. \section{Internal graph representation, \enquote{Model}}\label{sec:model}
  67. One feature that is important to us, is to be able to work with hierarchical graphs (cf.\ chapter~\ref{ch:progress}).
  68. Therefore a node not only has edges to other nodes, but also it can contain other nodes and edges.
  69. So far this is similar to what we described in section~\ref{sec:inputFileFormat}.
  70. Additionally, there are multiple attributes that are used during the computation or as output variables.
  71. \begin{itemize}
  72. \item The attributes \enquote{shift}, \enquote{sink}, \enquote{root} and \enquote{align} correspond to the variables used by Brandes and Köpf~\cite{brandes_fast_2001}.
  73. They are summarized in table~\ref{table:bk-variables}.
  74. \item The \enquote{parent} of a node is the node that contains it in the hierarchy.
  75. \item The attributes $x$ and $y$ are the coordinates of the node relative to its parent node.
  76. \end{itemize}
  77. Similarly, edges have additional attributes:
  78. \begin{itemize}
  79. \item \enquote{dummy} specifies whether they are dummy edges.
  80. \item \enquote{conflicted} corresponds to the variable used by Brandes and Köpf~\cite{brandes_fast_2001} and indicates that this edge won't be drawn vertically.
  81. \item \enquote{bindPoints} is a list of bend points for the edge.
  82. \end{itemize}
  83. A class diagram of the package \enquote{Model} is displayed in figure~\ref{fig:model}.
  84. \begin{figure}[tp]
  85. \centering
  86. \includegraphics[width=\linewidth, trim={0 6cm 0 0}]{img/Model.pdf}
  87. \caption{Class diagram of the \enquote{Model} package.}
  88. \label{fig:model}
  89. \end{figure}
  90. \begin{longtable}{|p{2.8cm}|p{10cm}|}
  91. \hline
  92. Attribute & Explanation \\\hline\hline
  93. root & The root node of the block of this node.
  94. Unique for all nodes in the same block. \\\hline
  95. sink & The topmost sink in the block graph that can be reached from the block that this node belongs to.
  96. Only used for nodes that are the root of a block.
  97. Unique for all nodes in the same class. \\\hline
  98. shift & The shift of the class that this node belongs to.
  99. Only used for nodes that are a sink of a class. \\\hline
  100. \caption{Variables also used by Brandes and Köpf~\cite{brandes_fast_2001}}
  101. \label{table:bk-variables}
  102. \end{longtable}
  103. \section{The actual algorithm}\label{sec:theActualAlgorithm}
  104. This section assumes that the reader is familiar with the node placement algorithm by Brandes and Köpf~\cite{brandes_fast_2001}.
  105. A \enquote{stage} of the algorithm, interface \enquote{AlgorithmStage}, is an interval during which each step of the algorithm is performed in a similar way.
  106. Each time such a step is performed it returns whether the stage is already finished.
  107. For example, a forward step in the stage of calculating one extremal layout, class \enquote{ExtremalLayoutCalc}, consists of either a step of calculating the blocks, class \enquote{BlockCalc}, or a step of compacting the layout, class \enquote{Compaction}.
  108. All the stages are displayed in class diagram~\ref{fig:animated}.
  109. To be able to undo a step each stage needs to implement methods for both forward and backward steps.
  110. \begin{figure}[tp]
  111. \centering
  112. \includegraphics[width=\linewidth, trim={0 9cm 0 0}]{img/Algorithms_Animated.pdf}
  113. \caption{Class diagram of the package \enquote{Algorithms.Animated}.}
  114. \label{fig:animated}
  115. \end{figure}
  116. \section{View}\label{sec:view}
  117. This section only covers the software architecture regarding the views.
  118. For an explanation of what is actually displayed, see chapter~\ref{ch:ui}
  119. \TODO{Kolja ausfragen}