rudof_rdf/rdf_core/visualizer/
rdf_visualizer_config.rs1use crate::rdf_core::visualizer::style::{
2 ArrowStyle, DEFAULT_OBJECT_ARROW_STYLE, DEFAULT_PREDICATE_ARROW_STYLE, DEFAULT_SUBJECT_ARROW_STYLE, Style, UmlColor,
3};
4use serde::{Deserialize, Serialize};
5
6const DEFAULT_SUBJECT_TEXT: &str = "subj";
8const DEFAULT_PREDICATE_TEXT: &str = "pred";
10const DEFAULT_OBJECT_TEXT: &str = "obj";
12
13#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
15pub enum UmlShape {
16 Cloud,
18 Rectangle,
20}
21
22#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
27pub struct RDFVisualizationConfig {
28 uri_line_color: Option<UmlColor>,
31 uri_line_thickness: Option<u32>,
33 uri_background_color: Option<UmlColor>,
35 uri_round_corner: Option<u32>,
37
38 bnode_line_color: Option<UmlColor>,
41 bnode_line_thickness: Option<u32>,
43 bnode_background_color: Option<UmlColor>,
45 bnode_round_corner: Option<u32>,
47
48 literal_line_color: Option<UmlColor>,
51 literal_line_thickness: Option<u32>,
53 literal_background_color: Option<UmlColor>,
55 literal_round_corner: Option<u32>,
57
58 reifier_line_color: Option<UmlColor>,
61 reifier_line_thickness: Option<u32>,
63 reifier_background_color: Option<UmlColor>,
65 reifier_round_corner: Option<u32>,
67
68 asserted_line_color: Option<UmlColor>,
71 asserted_line_thickness: Option<u32>,
73 asserted_background_color: Option<UmlColor>,
75 asserted_round_corner: Option<u32>,
77
78 non_asserted_line_color: Option<UmlColor>,
81 non_asserted_line_thickness: Option<u32>,
83 non_asserted_background_color: Option<UmlColor>,
85 non_asserted_round_corner: Option<u32>,
87
88 triple_term_subject_label: Option<String>,
91 triple_term_predicate_label: Option<String>,
93 triple_term_object_label: Option<String>,
95 reifies_label: Option<String>,
97 unasserted_triple_shape: Option<UmlShape>,
99 asserted_triple_shape: Option<UmlShape>,
101
102 subject_arrow_style: Option<ArrowStyle>,
105 predicate_arrow_style: Option<ArrowStyle>,
107 object_arrow_style: Option<ArrowStyle>,
109
110 subject_text: Option<String>,
113 predicate_text: Option<String>,
115 object_text: Option<String>,
117}
118
119impl RDFVisualizationConfig {
120 pub fn new() -> Self {
122 Self::default()
123 }
124
125 pub fn with_literal_background_color(mut self, color: UmlColor) -> Self {
127 self.literal_background_color = Some(color);
128 self
129 }
130
131 pub fn with_triple_term_subject_label(mut self, label: String) -> Self {
133 self.triple_term_subject_label = Some(label);
134 self
135 }
136
137 pub fn with_triple_term_predicate_label(mut self, label: String) -> Self {
139 self.triple_term_predicate_label = Some(label);
140 self
141 }
142
143 pub fn with_triple_term_object_label(mut self, label: String) -> Self {
145 self.triple_term_object_label = Some(label);
146 self
147 }
148
149 pub fn with_reifies_label(mut self, label: String) -> Self {
151 self.reifies_label = Some(label);
152 self
153 }
154
155 pub fn uri_line_color(&self) -> UmlColor {
157 self.uri_line_color.clone().unwrap_or(URI_LINE_COLOR)
158 }
159
160 pub fn uri_line_thickness(&self) -> u32 {
162 self.uri_line_thickness.unwrap_or(URI_LINE_THICKNESS)
163 }
164
165 pub fn uri_background_color(&self) -> UmlColor {
167 self.uri_background_color.clone().unwrap_or(URI_BACKGROUND_COLOR)
168 }
169
170 pub fn uri_round_corner(&self) -> u32 {
172 self.uri_round_corner.unwrap_or(URI_ROUND_CORNER)
173 }
174
175 pub fn bnode_line_color(&self) -> UmlColor {
177 self.bnode_line_color.clone().unwrap_or(BNODE_LINE_COLOR)
178 }
179
180 pub fn bnode_line_thickness(&self) -> u32 {
182 self.bnode_line_thickness.unwrap_or(BNODE_LINE_THICKNESS)
183 }
184
185 pub fn bnode_background_color(&self) -> UmlColor {
187 self.bnode_background_color.clone().unwrap_or(BNODE_BACKGROUND_COLOR)
188 }
189
190 pub fn bnode_round_corner(&self) -> u32 {
192 self.bnode_round_corner.unwrap_or(BNODE_ROUND_CORNER)
193 }
194
195 pub fn literal_line_color(&self) -> UmlColor {
197 self.literal_line_color.clone().unwrap_or(LITERAL_LINE_COLOR)
198 }
199
200 pub fn literal_line_thickness(&self) -> u32 {
202 self.literal_line_thickness.unwrap_or(LITERAL_LINE_THICKNESS)
203 }
204
205 pub fn literal_background_color(&self) -> UmlColor {
207 self.literal_background_color
208 .clone()
209 .unwrap_or(LITERAL_BACKGROUND_COLOR)
210 }
211
212 pub fn literal_round_corner(&self) -> u32 {
214 self.literal_round_corner.unwrap_or(LITERAL_ROUND_CORNER)
215 }
216
217 pub fn reifier_line_color(&self) -> UmlColor {
219 self.reifier_line_color.clone().unwrap_or(REIFIER_LINE_COLOR)
220 }
221
222 pub fn reifier_line_thickness(&self) -> u32 {
224 self.reifier_line_thickness.unwrap_or(REIFIER_LINE_THICKNESS)
225 }
226
227 pub fn reifier_background_color(&self) -> UmlColor {
229 self.reifier_background_color
230 .clone()
231 .unwrap_or(REIFIER_BACKGROUND_COLOR)
232 }
233
234 pub fn reifier_round_corner(&self) -> u32 {
236 self.reifier_round_corner.unwrap_or(REIFIER_ROUND_CORNER)
237 }
238
239 pub fn asserted_line_color(&self) -> UmlColor {
241 self.asserted_line_color.clone().unwrap_or(URI_LINE_COLOR)
242 }
243
244 pub fn asserted_line_thickness(&self) -> u32 {
246 self.asserted_line_thickness.unwrap_or(URI_LINE_THICKNESS)
247 }
248
249 pub fn asserted_background_color(&self) -> UmlColor {
251 self.asserted_background_color.clone().unwrap_or(URI_BACKGROUND_COLOR)
252 }
253
254 pub fn asserted_round_corner(&self) -> u32 {
256 self.asserted_round_corner.unwrap_or(URI_ROUND_CORNER)
257 }
258
259 pub fn non_asserted_line_color(&self) -> UmlColor {
261 self.non_asserted_line_color.clone().unwrap_or(BNODE_LINE_COLOR)
262 }
263
264 pub fn non_asserted_line_thickness(&self) -> u32 {
266 self.non_asserted_line_thickness.unwrap_or(BNODE_LINE_THICKNESS)
267 }
268
269 pub fn non_asserted_background_color(&self) -> UmlColor {
271 self.non_asserted_background_color
272 .clone()
273 .unwrap_or(BNODE_BACKGROUND_COLOR)
274 }
275
276 pub fn non_asserted_round_corner(&self) -> u32 {
278 self.non_asserted_round_corner.unwrap_or(BNODE_ROUND_CORNER)
279 }
280
281 pub fn get_style(&self) -> Style {
283 Style::from_config(self)
284 }
285
286 pub fn get_subject_arrow_style(&self) -> ArrowStyle {
288 self.subject_arrow_style.clone().unwrap_or(DEFAULT_SUBJECT_ARROW_STYLE)
289 }
290
291 pub fn get_subject_text(&self) -> String {
293 self.subject_text.clone().unwrap_or(DEFAULT_SUBJECT_TEXT.into())
294 }
295
296 pub fn get_predicate_arrow_style(&self) -> ArrowStyle {
298 self.predicate_arrow_style
299 .clone()
300 .unwrap_or(DEFAULT_PREDICATE_ARROW_STYLE)
301 }
302
303 pub fn get_predicate_text(&self) -> String {
305 self.predicate_text.clone().unwrap_or(DEFAULT_PREDICATE_TEXT.into())
306 }
307
308 pub fn get_object_arrow_style(&self) -> ArrowStyle {
310 self.object_arrow_style.clone().unwrap_or(DEFAULT_OBJECT_ARROW_STYLE)
311 }
312
313 pub fn get_object_text(&self) -> String {
315 self.object_text.clone().unwrap_or(DEFAULT_OBJECT_TEXT.into())
316 }
317}
318
319const URI_LINE_COLOR: UmlColor = UmlColor::Blue;
323const URI_LINE_THICKNESS: u32 = 1;
325const URI_BACKGROUND_COLOR: UmlColor = UmlColor::White;
327const URI_ROUND_CORNER: u32 = 25;
329
330const BNODE_LINE_COLOR: UmlColor = UmlColor::Blue;
332const BNODE_LINE_THICKNESS: u32 = 1;
334const BNODE_BACKGROUND_COLOR: UmlColor = UmlColor::Gray;
336const BNODE_ROUND_CORNER: u32 = 25;
338
339const LITERAL_LINE_COLOR: UmlColor = UmlColor::Black;
341const LITERAL_LINE_THICKNESS: u32 = 1;
343const LITERAL_BACKGROUND_COLOR: UmlColor = UmlColor::Cyan;
345const LITERAL_ROUND_CORNER: u32 = 0;
347
348const REIFIER_LINE_COLOR: UmlColor = UmlColor::Black;
350const REIFIER_LINE_THICKNESS: u32 = 1;
352const REIFIER_BACKGROUND_COLOR: UmlColor = UmlColor::Yellow;
354const REIFIER_ROUND_CORNER: u32 = 0;
356
357const ASSERTED_LINE_COLOR: UmlColor = UmlColor::Black;
359const ASSERTED_LINE_THICKNESS: u32 = 2;
361const ASSERTED_BACKGROUND_COLOR: UmlColor = UmlColor::White;
363const ASSERTED_ROUND_CORNER: u32 = 0;
365
366const NON_ASSERTED_LINE_COLOR: UmlColor = UmlColor::Blue;
368const NON_ASSERTED_LINE_THICKNESS: u32 = 2;
370const NON_ASSERTED_BACKGROUND_COLOR: UmlColor = UmlColor::White;
372const NON_ASSERTED_ROUND_CORNER: u32 = 0;
374
375const TRIPLE_TERM_SUBJECT_LABEL: &str = "subject";
377const TRIPLE_TERM_PREDICATE_LABEL: &str = "predicate";
379const TRIPLE_TERM_OBJECT_LABEL: &str = "object";
381const REIFIES_LABEL: &str = "reifies";
383
384const ASSERTED_TRIPLE_SHAPE: UmlShape = UmlShape::Rectangle;
386const NON_ASSERTED_TRIPLE_SHAPE: UmlShape = UmlShape::Cloud;
388
389impl Default for RDFVisualizationConfig {
390 fn default() -> Self {
392 RDFVisualizationConfig {
393 uri_line_color: Some(URI_LINE_COLOR),
394 uri_line_thickness: Some(URI_LINE_THICKNESS),
395 uri_background_color: Some(URI_BACKGROUND_COLOR),
396 uri_round_corner: Some(URI_ROUND_CORNER),
397
398 bnode_line_color: Some(BNODE_LINE_COLOR),
399 bnode_line_thickness: Some(BNODE_LINE_THICKNESS),
400 bnode_background_color: Some(BNODE_BACKGROUND_COLOR),
401 bnode_round_corner: Some(BNODE_ROUND_CORNER),
402
403 literal_line_color: Some(LITERAL_LINE_COLOR),
404 literal_line_thickness: Some(LITERAL_LINE_THICKNESS),
405 literal_background_color: Some(LITERAL_BACKGROUND_COLOR),
406 literal_round_corner: Some(LITERAL_ROUND_CORNER),
407
408 reifier_line_color: Some(REIFIER_LINE_COLOR),
409 reifier_line_thickness: Some(REIFIER_LINE_THICKNESS),
410 reifier_background_color: Some(REIFIER_BACKGROUND_COLOR),
411 reifier_round_corner: Some(REIFIER_ROUND_CORNER),
412
413 asserted_line_color: Some(ASSERTED_LINE_COLOR),
414 asserted_line_thickness: Some(ASSERTED_LINE_THICKNESS),
415 asserted_background_color: Some(ASSERTED_BACKGROUND_COLOR),
416 asserted_round_corner: Some(ASSERTED_ROUND_CORNER),
417
418 non_asserted_line_color: Some(NON_ASSERTED_LINE_COLOR),
419 non_asserted_line_thickness: Some(NON_ASSERTED_LINE_THICKNESS),
420 non_asserted_background_color: Some(NON_ASSERTED_BACKGROUND_COLOR),
421 non_asserted_round_corner: Some(NON_ASSERTED_ROUND_CORNER),
422
423 triple_term_subject_label: Some(TRIPLE_TERM_SUBJECT_LABEL.into()),
424 triple_term_predicate_label: Some(TRIPLE_TERM_PREDICATE_LABEL.into()),
425 triple_term_object_label: Some(TRIPLE_TERM_OBJECT_LABEL.into()),
426
427 reifies_label: Some(REIFIES_LABEL.into()),
428 unasserted_triple_shape: Some(NON_ASSERTED_TRIPLE_SHAPE),
429 asserted_triple_shape: Some(ASSERTED_TRIPLE_SHAPE),
430
431 subject_arrow_style: Some(DEFAULT_SUBJECT_ARROW_STYLE),
432 predicate_arrow_style: Some(DEFAULT_PREDICATE_ARROW_STYLE),
433 object_arrow_style: Some(DEFAULT_OBJECT_ARROW_STYLE),
434
435 subject_text: Some(DEFAULT_SUBJECT_TEXT.into()),
436 predicate_text: Some(DEFAULT_PREDICATE_TEXT.into()),
437 object_text: Some(DEFAULT_OBJECT_TEXT.into()),
438 }
439 }
440}