From f2d86eebdf464c885ff5433a9df56079e8dce4b6 Mon Sep 17 00:00:00 2001 From: Saurav Bhattacharya Date: Sat, 28 Mar 2026 02:57:29 -0700 Subject: [PATCH] refactor: deduplicate edge type name/color mappings via EdgeTypeRegistry Replace hardcoded edge type name and color switch statements in AdjacencyMatrixHeatmap, InteractiveHtmlExporter, SvgExporter, and NetworkReportGenerator with calls to the existing EdgeTypeRegistry. This eliminates 5 copies of the type-to-name mapping and 3 copies of the type-to-color mapping. Adding a new edge type now requires updating only EdgeTypeRegistry instead of 5+ files. --- .../src/gvisual/AdjacencyMatrixHeatmap.java | 9 +------- .../src/gvisual/InteractiveHtmlExporter.java | 21 ++++--------------- .../src/gvisual/NetworkReportGenerator.java | 9 ++++++-- Gvisual/src/gvisual/SvgExporter.java | 20 ++++++------------ 4 files changed, 18 insertions(+), 41 deletions(-) diff --git a/Gvisual/src/gvisual/AdjacencyMatrixHeatmap.java b/Gvisual/src/gvisual/AdjacencyMatrixHeatmap.java index c23e5c0..1e82104 100644 --- a/Gvisual/src/gvisual/AdjacencyMatrixHeatmap.java +++ b/Gvisual/src/gvisual/AdjacencyMatrixHeatmap.java @@ -206,14 +206,7 @@ public String getToolTipText(MouseEvent e) { private String getEdgeTypeName(String type) { if (type == null) return "unknown"; - switch (type) { - case "f": return "Friend"; - case "c": return "Classmate"; - case "fs": return "Familiar Stranger"; - case "s": return "Stranger"; - case "sg": return "Study Group"; - default: return type; - } + return EdgeTypeRegistry.getName(type); } private Color getEdgeColor(Edge e) { diff --git a/Gvisual/src/gvisual/InteractiveHtmlExporter.java b/Gvisual/src/gvisual/InteractiveHtmlExporter.java index 4ff8c35..0798a4c 100644 --- a/Gvisual/src/gvisual/InteractiveHtmlExporter.java +++ b/Gvisual/src/gvisual/InteractiveHtmlExporter.java @@ -401,28 +401,15 @@ private String generateJs() { /** Maps Edge type codes to human-readable names. */ private static String typeName(String type) { - if (type == null) return "Unknown"; - switch (type) { - case "f": return "Friend"; - case "fs": return "Facebook"; - case "c": return "Classmate"; - case "s": return "Stranger"; - case "sg": return "Study Group"; - default: return type; - } + return EdgeTypeRegistry.getName(type); } /** Maps Edge type codes to CSS colors. */ private static String typeColor(String type) { if (type == null) return "#999"; - switch (type) { - case "f": return "#4CAF50"; - case "fs": return "#2196F3"; - case "c": return "#FF9800"; - case "s": return "#9E9E9E"; - case "sg": return "#9C27B0"; - default: return "#607D8B"; - } + String hex = EdgeTypeRegistry.getHexColor(type); + // EdgeTypeRegistry returns "#CCCCCC" for unknowns; remap to our default + return "#CCCCCC".equals(hex) ? "#607D8B" : hex; } /** diff --git a/Gvisual/src/gvisual/NetworkReportGenerator.java b/Gvisual/src/gvisual/NetworkReportGenerator.java index 69e5115..2b0bca8 100644 --- a/Gvisual/src/gvisual/NetworkReportGenerator.java +++ b/Gvisual/src/gvisual/NetworkReportGenerator.java @@ -111,8 +111,13 @@ public int compare(Map.Entry a, Map.Entry b) { friendEdges.size(), fsEdges.size(), classmateEdges.size(), strangerEdges.size(), studyGEdges.size() }; - String[] edgeTypeNames = {"Friend", "Familiar Stranger", "Classmate", "Stranger", "Study Group"}; - String[] edgeTypeColors = {"#4CAF50", "#2196F3", "#FF9800", "#F44336", "#9C27B0"}; + java.util.List typeCodes = EdgeTypeRegistry.getAllTypeCodes(); + String[] edgeTypeNames = new String[typeCodes.size()]; + String[] edgeTypeColors = new String[typeCodes.size()]; + for (int i = 0; i < typeCodes.size(); i++) { + edgeTypeNames[i] = EdgeTypeRegistry.getName(typeCodes.get(i)); + edgeTypeColors[i] = EdgeTypeRegistry.getHexColor(typeCodes.get(i)); + } int totalEdgeTypes = 0; for (int c : edgeTypeCounts) totalEdgeTypes += c; diff --git a/Gvisual/src/gvisual/SvgExporter.java b/Gvisual/src/gvisual/SvgExporter.java index 2e6b27b..cb337c8 100644 --- a/Gvisual/src/gvisual/SvgExporter.java +++ b/Gvisual/src/gvisual/SvgExporter.java @@ -56,22 +56,14 @@ public class SvgExporter { private boolean colorByEdgeType = true; private int layoutIterations = 300; - private static final Map TYPE_COLORS = new LinkedHashMap<>(); - static { - TYPE_COLORS.put("f", "#4CAF50"); // Friend — green - TYPE_COLORS.put("fs", "#2196F3"); // Familiar Stranger — blue - TYPE_COLORS.put("c", "#FF9800"); // Classmate — orange - TYPE_COLORS.put("s", "#F44336"); // Stranger — red - TYPE_COLORS.put("sg", "#9C27B0"); // Study Group — purple - } + private static final Map TYPE_COLORS = EdgeTypeRegistry.getAllHexColors(); - private static final Map TYPE_NAMES = new LinkedHashMap<>(); + private static final Map TYPE_NAMES; static { - TYPE_NAMES.put("f", "Friend"); - TYPE_NAMES.put("fs", "Familiar Stranger"); - TYPE_NAMES.put("c", "Classmate"); - TYPE_NAMES.put("s", "Stranger"); - TYPE_NAMES.put("sg", "Study Group"); + TYPE_NAMES = new LinkedHashMap<>(); + for (String code : EdgeTypeRegistry.getAllTypeCodes()) { + TYPE_NAMES.put(code, EdgeTypeRegistry.getName(code)); + } } private final Map customColors = new LinkedHashMap<>();