|
|
@ -1,14 +1,25 @@
|
|
|
|
(ns wanijo.visualisation.viz
|
|
|
|
(ns wanijo.visualisation.viz
|
|
|
|
(:require [dorothy
|
|
|
|
(:require [dorothy
|
|
|
|
[core :as dot]
|
|
|
|
[core :as dot]
|
|
|
|
[jvm :as doro-jvm]]))
|
|
|
|
[jvm :as doro-jvm]]
|
|
|
|
|
|
|
|
[wanijo.framework.routing :refer [path]]))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(defn node->label
|
|
|
|
|
|
|
|
([node]
|
|
|
|
|
|
|
|
(:name node))
|
|
|
|
|
|
|
|
([node1 node2]
|
|
|
|
|
|
|
|
(str (:name node1)
|
|
|
|
|
|
|
|
"\n"
|
|
|
|
|
|
|
|
(:name node2))))
|
|
|
|
|
|
|
|
|
|
|
|
(defn single-instance [instance]
|
|
|
|
(defn single-instance [instance]
|
|
|
|
(let [out-nodes (map #(vector (-> % :target :uuid)
|
|
|
|
(let [out-nodes (map #(vector (-> % :target :uuid)
|
|
|
|
{:label (-> % :target :name)})
|
|
|
|
{:label (node->label (:target %))
|
|
|
|
|
|
|
|
:href (path :instance-show (:target %))})
|
|
|
|
(:links-out instance))
|
|
|
|
(:links-out instance))
|
|
|
|
in-nodes (map #(vector (-> % :source :uuid)
|
|
|
|
in-nodes (map #(vector (-> % :source :uuid)
|
|
|
|
{:label (-> % :source :name)})
|
|
|
|
{:label (node->label (:source %))
|
|
|
|
|
|
|
|
:href (path :instance-show (:source %))})
|
|
|
|
(:links-in instance))
|
|
|
|
(:links-in instance))
|
|
|
|
relationships-out (map (fn [{:keys [link target schema]}]
|
|
|
|
relationships-out (map (fn [{:keys [link target schema]}]
|
|
|
|
[(:uuid instance) :> (:uuid target)
|
|
|
|
[(:uuid instance) :> (:uuid target)
|
|
|
@ -23,7 +34,7 @@
|
|
|
|
"LR"
|
|
|
|
"LR"
|
|
|
|
"TD")]
|
|
|
|
"TD")]
|
|
|
|
(-> [{:rankdir rankdir}
|
|
|
|
(-> [{:rankdir rankdir}
|
|
|
|
[(:uuid instance) {:label (:name instance)
|
|
|
|
[(:uuid instance) {:label (node->label instance)
|
|
|
|
:shape "cylinder"}]]
|
|
|
|
:shape "cylinder"}]]
|
|
|
|
(into out-nodes)
|
|
|
|
(into out-nodes)
|
|
|
|
(into in-nodes)
|
|
|
|
(into in-nodes)
|
|
|
@ -34,27 +45,20 @@
|
|
|
|
(doro-jvm/render {:format :svg}))))
|
|
|
|
(doro-jvm/render {:format :svg}))))
|
|
|
|
|
|
|
|
|
|
|
|
(defn all-instances [instances]
|
|
|
|
(defn all-instances [instances]
|
|
|
|
(let [labelfn #(str (:name %1)
|
|
|
|
(let [sources (map #(vector (-> % :source :uuid)
|
|
|
|
"\n"
|
|
|
|
{:label (node->label (:source %)
|
|
|
|
(:name %2))
|
|
|
|
(:schema %))
|
|
|
|
sources (map #(vector (-> % :source :uuid)
|
|
|
|
:href (path :instance-show (:source %))})
|
|
|
|
{:label (labelfn (:source %)
|
|
|
|
|
|
|
|
(:schema %))})
|
|
|
|
|
|
|
|
instances)
|
|
|
|
instances)
|
|
|
|
linked (filter :link instances)
|
|
|
|
linked (filter :link instances)
|
|
|
|
links (map #(vector (-> % :source :uuid)
|
|
|
|
links (map #(vector (-> % :source :uuid)
|
|
|
|
:>
|
|
|
|
:>
|
|
|
|
(-> % :target :uuid)
|
|
|
|
(-> % :target :uuid)
|
|
|
|
{:label (-> % :link :name)})
|
|
|
|
{:label (-> % :link :name)})
|
|
|
|
linked)
|
|
|
|
linked)]
|
|
|
|
targets (map #(vector (-> % :target :uuid)
|
|
|
|
|
|
|
|
{:label (labelfn (:target %)
|
|
|
|
|
|
|
|
(:target_schema %))})
|
|
|
|
|
|
|
|
linked)]
|
|
|
|
|
|
|
|
(-> [{:forcelabels "true"
|
|
|
|
(-> [{:forcelabels "true"
|
|
|
|
:rankdir "LR"}]
|
|
|
|
:rankdir "LR"}]
|
|
|
|
(into sources)
|
|
|
|
(into sources)
|
|
|
|
(into targets)
|
|
|
|
|
|
|
|
(into links)
|
|
|
|
(into links)
|
|
|
|
dot/digraph
|
|
|
|
dot/digraph
|
|
|
|
dot/dot
|
|
|
|
dot/dot
|
|
|
|