From 194dd252e64571407e42913f3aab12314c226e69 Mon Sep 17 00:00:00 2001 From: Neil Sachdeva Date: Mon, 20 Jan 2025 15:47:38 -0500 Subject: [PATCH 01/17] Added pathway summation in neo4j --- .../tasks/PathwaySummationMappingFile.java | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 src/main/java/org/reactome/server/export/tasks/PathwaySummationMappingFile.java diff --git a/src/main/java/org/reactome/server/export/tasks/PathwaySummationMappingFile.java b/src/main/java/org/reactome/server/export/tasks/PathwaySummationMappingFile.java new file mode 100644 index 0000000..c7d3746 --- /dev/null +++ b/src/main/java/org/reactome/server/export/tasks/PathwaySummationMappingFile.java @@ -0,0 +1,37 @@ +package org.reactome.server.export.tasks; + +import org.reactome.server.export.annotations.DataExport; +import org.reactome.server.export.tasks.common.DataExportAbstract; + +import java.io.IOException; +import java.nio.file.Path; +import java.util.Collection; +import java.util.Map; + +/** + * Export Pathway Summation Mapping from Neo4j + */ +@DataExport +public class PathwaySummationMappingFile extends DataExportAbstract { + + @Override + public String getName() { + return "pathway2summation.txt"; + } + + @Override + public String getQuery() { + return "MATCH (p:Pathway {speciesName: 'Homo sapiens'})\n" + + "OPTIONAL MATCH (p)-[:summation]->(s:Summation)\n" + + "RETURN\n" + + "p.stId AS Identifier,\n" + + "p.displayName AS Name,\n" + + "COALESCE(s.text, '') AS Summation\n" + + "ORDER BY Name"; + } + + @Override + public void printResult(Collection> result, Path path) throws IOException { + print(result, path, "Identifier", "Name", "Summation"); + } +} From 958bae21fc045d83d381389bf13d6c665660b344 Mon Sep 17 00:00:00 2001 From: Neil Sachdeva Date: Wed, 22 Jan 2025 14:55:08 -0500 Subject: [PATCH 02/17] Added human-pathway-with-diagrams file --- .../tasks/HumanPathwaysWithDiagrams.java | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 src/main/java/org/reactome/server/export/tasks/HumanPathwaysWithDiagrams.java diff --git a/src/main/java/org/reactome/server/export/tasks/HumanPathwaysWithDiagrams.java b/src/main/java/org/reactome/server/export/tasks/HumanPathwaysWithDiagrams.java new file mode 100644 index 0000000..b9c72cb --- /dev/null +++ b/src/main/java/org/reactome/server/export/tasks/HumanPathwaysWithDiagrams.java @@ -0,0 +1,37 @@ +package org.reactome.server.export.tasks; + +import org.reactome.server.export.annotations.DataExport; +import org.reactome.server.export.tasks.common.DataExportAbstract; + +import java.io.IOException; +import java.nio.file.Path; +import java.util.Collection; +import java.util.Map; + +/** + * Export Pathway Summation Mapping from Neo4j + */ +@DataExport +public class HumanPathwaysWithDiagrams extends DataExportAbstract { + + @Override + public String getName() { + return "umanPathwaysWithDiagrams.txt"; + } + + @Override + public String getQuery() { + return "MATCH (p:Pathway {speciesName: 'Homo sapiens'})\n" + + "OPTIONAL MATCH (p)-[:summation]->(s:Summation)\n" + + "RETURN\n" + + " p.stId AS Identifier,\n" + + " p.displayName AS Name,\n" + + " COALESCE(s.text, '') AS Summation\n" + + "ORDER BY Name"; + } + + @Override + public void printResult(Collection> result, Path path) throws IOException { + print(result, path, "Identifier", "Name", "Summation"); + } +} From a491b391ffa29e8ecbd27d6c29597ff2ba19eec4 Mon Sep 17 00:00:00 2001 From: Adam Wright Date: Wed, 29 Jan 2025 13:56:07 -0500 Subject: [PATCH 03/17] Update HumanPathwaysWithDiagrams.java --- .../reactome/server/export/tasks/HumanPathwaysWithDiagrams.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/reactome/server/export/tasks/HumanPathwaysWithDiagrams.java b/src/main/java/org/reactome/server/export/tasks/HumanPathwaysWithDiagrams.java index b9c72cb..75452e6 100644 --- a/src/main/java/org/reactome/server/export/tasks/HumanPathwaysWithDiagrams.java +++ b/src/main/java/org/reactome/server/export/tasks/HumanPathwaysWithDiagrams.java @@ -16,7 +16,7 @@ public class HumanPathwaysWithDiagrams extends DataExportAbstract { @Override public String getName() { - return "umanPathwaysWithDiagrams.txt"; + return "HumanPathwaysWithDiagrams"; } @Override From 859aa86f527f42ff279b66cdc5b4891e65bd53f3 Mon Sep 17 00:00:00 2001 From: Adam Wright Date: Wed, 29 Jan 2025 13:57:30 -0500 Subject: [PATCH 04/17] Update HumanPathwaysWithDiagrams.java --- .../reactome/server/export/tasks/HumanPathwaysWithDiagrams.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/reactome/server/export/tasks/HumanPathwaysWithDiagrams.java b/src/main/java/org/reactome/server/export/tasks/HumanPathwaysWithDiagrams.java index 75452e6..b4db945 100644 --- a/src/main/java/org/reactome/server/export/tasks/HumanPathwaysWithDiagrams.java +++ b/src/main/java/org/reactome/server/export/tasks/HumanPathwaysWithDiagrams.java @@ -16,7 +16,7 @@ public class HumanPathwaysWithDiagrams extends DataExportAbstract { @Override public String getName() { - return "HumanPathwaysWithDiagrams"; + return "humanPathwaysWithDiagrams"; } @Override From 353d83bc51208909146aa93cdb90c981edaf5796 Mon Sep 17 00:00:00 2001 From: Neil Sachdeva Date: Wed, 29 Jan 2025 14:32:49 -0500 Subject: [PATCH 05/17] Fixed HumanPathwaysWithDiagrams query --- .../tasks/HumanPathwaysWithDiagrams.java | 21 ++++++++++++------- .../tasks/PathwaySummationMappingFile.java | 2 +- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/main/java/org/reactome/server/export/tasks/HumanPathwaysWithDiagrams.java b/src/main/java/org/reactome/server/export/tasks/HumanPathwaysWithDiagrams.java index b9c72cb..5edcbe9 100644 --- a/src/main/java/org/reactome/server/export/tasks/HumanPathwaysWithDiagrams.java +++ b/src/main/java/org/reactome/server/export/tasks/HumanPathwaysWithDiagrams.java @@ -16,18 +16,23 @@ public class HumanPathwaysWithDiagrams extends DataExportAbstract { @Override public String getName() { - return "umanPathwaysWithDiagrams.txt"; + return "humanPathwaysWithDiagrams"; } @Override public String getQuery() { - return "MATCH (p:Pathway {speciesName: 'Homo sapiens'})\n" + - "OPTIONAL MATCH (p)-[:summation]->(s:Summation)\n" + - "RETURN\n" + - " p.stId AS Identifier,\n" + - " p.displayName AS Name,\n" + - " COALESCE(s.text, '') AS Summation\n" + - "ORDER BY Name"; + return "MATCH (p:Pathway)-[:species]->(:Species {dbId: 48887})\n"+ + "OPTIONAL MATCH (p)-[:representedPathway]->(diagram:PathwayDiagram)\n"+ + "OPTIONAL MATCH (p)-[:disease]->(d:Disease)\n"+ + "WITH p, diagram, d IS NOT NULL AS isDisease\n"+ + "WHERE diagram IS NOT NULL\n"+ + "AND NOT ALL((diagram)-[:hasNode]->(n) WHERE n:GreenBoxDiagram OR n:Compartment)\n"+ + "WITH p.dbId AS pathwayId, p.displayName AS pathwayName, isDisease\n"+ + "CALL apoc.export.csv.query(\n" + + "\"RETURN $pathwayId AS PathwayID, $pathwayName AS PathwayName, $isDisease AS IsDisease\",\n"+ + "'humanPathwaysWithDiagrams.csv',\n" + + "{headers: true}\n) YIELD file\n"+ + "RETURN 'File exported to: ' + file"; } @Override diff --git a/src/main/java/org/reactome/server/export/tasks/PathwaySummationMappingFile.java b/src/main/java/org/reactome/server/export/tasks/PathwaySummationMappingFile.java index c7d3746..2ef8f16 100644 --- a/src/main/java/org/reactome/server/export/tasks/PathwaySummationMappingFile.java +++ b/src/main/java/org/reactome/server/export/tasks/PathwaySummationMappingFile.java @@ -16,7 +16,7 @@ public class PathwaySummationMappingFile extends DataExportAbstract { @Override public String getName() { - return "pathway2summation.txt"; + return "pathway2summation"; } @Override From 6262bff2a32d126e181c074136bfc03be5916482 Mon Sep 17 00:00:00 2001 From: Neil Sachdeva Date: Wed, 29 Jan 2025 14:40:18 -0500 Subject: [PATCH 06/17] removed override for humanpathways --- .../server/export/tasks/HumanPathwaysWithDiagrams.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/main/java/org/reactome/server/export/tasks/HumanPathwaysWithDiagrams.java b/src/main/java/org/reactome/server/export/tasks/HumanPathwaysWithDiagrams.java index 5edcbe9..ca058e9 100644 --- a/src/main/java/org/reactome/server/export/tasks/HumanPathwaysWithDiagrams.java +++ b/src/main/java/org/reactome/server/export/tasks/HumanPathwaysWithDiagrams.java @@ -34,9 +34,4 @@ public String getQuery() { "{headers: true}\n) YIELD file\n"+ "RETURN 'File exported to: ' + file"; } - - @Override - public void printResult(Collection> result, Path path) throws IOException { - print(result, path, "Identifier", "Name", "Summation"); - } } From e80b4d2c3e41f48509e3e2e7baa120bf02eb2fdd Mon Sep 17 00:00:00 2001 From: adam wright Date: Wed, 29 Jan 2025 21:15:50 +0000 Subject: [PATCH 07/17] summation file being generated correctly with this query --- ...mationMappingFile.java => PathwaySummationMapping.java} | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) rename src/main/java/org/reactome/server/export/tasks/{PathwaySummationMappingFile.java => PathwaySummationMapping.java} (75%) diff --git a/src/main/java/org/reactome/server/export/tasks/PathwaySummationMappingFile.java b/src/main/java/org/reactome/server/export/tasks/PathwaySummationMapping.java similarity index 75% rename from src/main/java/org/reactome/server/export/tasks/PathwaySummationMappingFile.java rename to src/main/java/org/reactome/server/export/tasks/PathwaySummationMapping.java index 2ef8f16..7536f03 100644 --- a/src/main/java/org/reactome/server/export/tasks/PathwaySummationMappingFile.java +++ b/src/main/java/org/reactome/server/export/tasks/PathwaySummationMapping.java @@ -12,7 +12,7 @@ * Export Pathway Summation Mapping from Neo4j */ @DataExport -public class PathwaySummationMappingFile extends DataExportAbstract { +public class PathwaySummationMapping extends DataExportAbstract { @Override public String getName() { @@ -21,12 +21,11 @@ public String getName() { @Override public String getQuery() { - return "MATCH (p:Pathway {speciesName: 'Homo sapiens'})\n" + - "OPTIONAL MATCH (p)-[:summation]->(s:Summation)\n" + + return "MATCH (p:Pathway {speciesName: 'Homo sapiens'})-[:summation]->(s:Summation)\n" + "RETURN\n" + "p.stId AS Identifier,\n" + "p.displayName AS Name,\n" + - "COALESCE(s.text, '') AS Summation\n" + + "replace(replace(s.text, '\n', ' '), '\r', ' ') AS Summation\n" + "ORDER BY Name"; } From b6edb5766fefc8c4be15ba6adb3d626da4564f5a Mon Sep 17 00:00:00 2001 From: Neil Sachdeva Date: Wed, 29 Jan 2025 17:22:39 -0500 Subject: [PATCH 08/17] Changed --- .../tasks/HumanPathwaysWithDiagrams.java | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/main/java/org/reactome/server/export/tasks/HumanPathwaysWithDiagrams.java b/src/main/java/org/reactome/server/export/tasks/HumanPathwaysWithDiagrams.java index ca058e9..e9c1ec5 100644 --- a/src/main/java/org/reactome/server/export/tasks/HumanPathwaysWithDiagrams.java +++ b/src/main/java/org/reactome/server/export/tasks/HumanPathwaysWithDiagrams.java @@ -22,16 +22,15 @@ public String getName() { @Override public String getQuery() { return "MATCH (p:Pathway)-[:species]->(:Species {dbId: 48887})\n"+ - "OPTIONAL MATCH (p)-[:representedPathway]->(diagram:PathwayDiagram)\n"+ "OPTIONAL MATCH (p)-[:disease]->(d:Disease)\n"+ - "WITH p, diagram, d IS NOT NULL AS isDisease\n"+ - "WHERE diagram IS NOT NULL\n"+ - "AND NOT ALL((diagram)-[:hasNode]->(n) WHERE n:GreenBoxDiagram OR n:Compartment)\n"+ - "WITH p.dbId AS pathwayId, p.displayName AS pathwayName, isDisease\n"+ - "CALL apoc.export.csv.query(\n" + - "\"RETURN $pathwayId AS PathwayID, $pathwayName AS PathwayName, $isDisease AS IsDisease\",\n"+ - "'humanPathwaysWithDiagrams.csv',\n" + - "{headers: true}\n) YIELD file\n"+ - "RETURN 'File exported to: ' + file"; + "WITH p, d IS NOT NULL AS isDisease\n"+ + "RETURN p.stId AS pathwayId, p.displayName AS pathwayName, isDisease\n"; } + + @Override + public void printResult(Collection> result, Path path) throws IOException { + print(result, path, "pathwayId", "pathwayName", "isDisease"); + } + + // check if st ids are in the diagram } From 21bd03581952a15a1cfa730d5bd195289468dbe8 Mon Sep 17 00:00:00 2001 From: Neil Sachdeva Date: Thu, 30 Jan 2025 10:31:00 -0500 Subject: [PATCH 09/17] Added filtering system --- .../tasks/HumanPathwaysWithDiagrams.java | 44 +++++++++++++++---- 1 file changed, 35 insertions(+), 9 deletions(-) diff --git a/src/main/java/org/reactome/server/export/tasks/HumanPathwaysWithDiagrams.java b/src/main/java/org/reactome/server/export/tasks/HumanPathwaysWithDiagrams.java index e9c1ec5..f6b0e17 100644 --- a/src/main/java/org/reactome/server/export/tasks/HumanPathwaysWithDiagrams.java +++ b/src/main/java/org/reactome/server/export/tasks/HumanPathwaysWithDiagrams.java @@ -4,9 +4,9 @@ import org.reactome.server.export.tasks.common.DataExportAbstract; import java.io.IOException; -import java.nio.file.Path; -import java.util.Collection; -import java.util.Map; +import java.nio.file.*; +import java.util.*; +import java.util.stream.Collectors; /** * Export Pathway Summation Mapping from Neo4j @@ -14,6 +14,8 @@ @DataExport public class HumanPathwaysWithDiagrams extends DataExportAbstract { + private static final String DIAGRAM_DIRECTORY = "/usr/local/reactomes/Reactome/production/Website/static/download/91/diagram"; + @Override public String getName() { return "humanPathwaysWithDiagrams"; @@ -21,16 +23,40 @@ public String getName() { @Override public String getQuery() { - return "MATCH (p:Pathway)-[:species]->(:Species {dbId: 48887})\n"+ - "OPTIONAL MATCH (p)-[:disease]->(d:Disease)\n"+ - "WITH p, d IS NOT NULL AS isDisease\n"+ - "RETURN p.stId AS pathwayId, p.displayName AS pathwayName, isDisease\n"; + return "MATCH (p:Pathway)-[:species]->(:Species {dbId: 48887})\n" + + "OPTIONAL MATCH (p)-[:disease]->(d:Disease)\n" + + "WITH p, d IS NOT NULL AS isDisease\n" + + "RETURN p.stId AS pathwayId, p.displayName AS pathwayName, isDisease\n"; } @Override public void printResult(Collection> result, Path path) throws IOException { - print(result, path, "pathwayId", "pathwayName", "isDisease"); + // Get valid pathway IDs from JSON files in the directory + Set validPathwayIds = getValidPathwayIds(); + + // Filter results to include only those with matching pathway IDs + List> filteredResults = result.stream() + .filter(map -> validPathwayIds.contains(map.get("pathwayId"))) + .collect(Collectors.toList()); + + // Print only the filtered results + print(filteredResults, path, "pathwayId", "pathwayName", "isDisease"); } - // check if st ids are in the diagram + /** + * Retrieves a set of valid pathway IDs from the JSON filenames in the target directory. + */ + private Set getValidPathwayIds() { + Set pathwayIds = new HashSet<>(); + try (DirectoryStream stream = Files.newDirectoryStream(Paths.get(DIAGRAM_DIRECTORY), "*.json")) { + for (Path entry : stream) { + String filename = entry.getFileName().toString(); + String pathwayId = filename.replace(".json", ""); // Remove .json extension + pathwayIds.add(pathwayId); + } + } catch (IOException e) { + System.err.println("Error reading directory: " + e.getMessage()); + } + return pathwayIds; + } } From 279a119612c9333a7fa5d069cc64d128ac176092 Mon Sep 17 00:00:00 2001 From: Neil Sachdeva Date: Thu, 30 Jan 2025 15:04:30 -0500 Subject: [PATCH 10/17] Fixed path --- .../reactome/server/export/tasks/HumanPathwaysWithDiagrams.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/reactome/server/export/tasks/HumanPathwaysWithDiagrams.java b/src/main/java/org/reactome/server/export/tasks/HumanPathwaysWithDiagrams.java index f6b0e17..d0ea542 100644 --- a/src/main/java/org/reactome/server/export/tasks/HumanPathwaysWithDiagrams.java +++ b/src/main/java/org/reactome/server/export/tasks/HumanPathwaysWithDiagrams.java @@ -14,7 +14,7 @@ @DataExport public class HumanPathwaysWithDiagrams extends DataExportAbstract { - private static final String DIAGRAM_DIRECTORY = "/usr/local/reactomes/Reactome/production/Website/static/download/91/diagram"; + private static final String DIAGRAM_DIRECTORY = "/data/diagrams"; @Override public String getName() { From 75fa2d022c3e81973225fdf11b4d93ece3622bbe Mon Sep 17 00:00:00 2001 From: Neil Sachdeva Date: Thu, 30 Jan 2025 15:38:02 -0500 Subject: [PATCH 11/17] Fixed distinct issue --- .../reactome/server/export/tasks/HumanPathwaysWithDiagrams.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/reactome/server/export/tasks/HumanPathwaysWithDiagrams.java b/src/main/java/org/reactome/server/export/tasks/HumanPathwaysWithDiagrams.java index d0ea542..5c42d68 100644 --- a/src/main/java/org/reactome/server/export/tasks/HumanPathwaysWithDiagrams.java +++ b/src/main/java/org/reactome/server/export/tasks/HumanPathwaysWithDiagrams.java @@ -26,7 +26,7 @@ public String getQuery() { return "MATCH (p:Pathway)-[:species]->(:Species {dbId: 48887})\n" + "OPTIONAL MATCH (p)-[:disease]->(d:Disease)\n" + "WITH p, d IS NOT NULL AS isDisease\n" + - "RETURN p.stId AS pathwayId, p.displayName AS pathwayName, isDisease\n"; + "RETURN DISTINCT p.stId AS pathwayId, p.displayName AS pathwayName, isDisease\n"; } @Override From a983f526ce068b278391e781e35509d14ff66c0d Mon Sep 17 00:00:00 2001 From: Neil Sachdeva Date: Thu, 30 Jan 2025 16:29:59 -0500 Subject: [PATCH 12/17] Explicit check for Json files added --- .../export/tasks/HumanPathwaysWithDiagrams.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/reactome/server/export/tasks/HumanPathwaysWithDiagrams.java b/src/main/java/org/reactome/server/export/tasks/HumanPathwaysWithDiagrams.java index 5c42d68..011e39a 100644 --- a/src/main/java/org/reactome/server/export/tasks/HumanPathwaysWithDiagrams.java +++ b/src/main/java/org/reactome/server/export/tasks/HumanPathwaysWithDiagrams.java @@ -48,13 +48,16 @@ public void printResult(Collection> result, Path path) throw */ private Set getValidPathwayIds() { Set pathwayIds = new HashSet<>(); - try (DirectoryStream stream = Files.newDirectoryStream(Paths.get(DIAGRAM_DIRECTORY), "*.json")) { + try (DirectoryStream stream = Files.newDirectoryStream(Paths.get(DIAGRAM_DIRECTORY))) { for (Path entry : stream) { - String filename = entry.getFileName().toString(); - String pathwayId = filename.replace(".json", ""); // Remove .json extension - pathwayIds.add(pathwayId); + if (Files.isRegularFile(entry) && entry.toString().endsWith(".json")) { + String filename = entry.getFileName().toString(); + String pathwayId = filename.replace(".json", ""); // Remove .json extension + pathwayIds.add(pathwayId); + } } - } catch (IOException e) { + } + catch (IOException e) { System.err.println("Error reading directory: " + e.getMessage()); } return pathwayIds; From b4cf348d8426fcb6451afb56a5d364b1c8c170eb Mon Sep 17 00:00:00 2001 From: Neil Sachdeva Date: Wed, 5 Feb 2025 12:20:04 -0500 Subject: [PATCH 13/17] Added new check for removing pathways with only Process Nodes --- .../tasks/HumanPathwaysWithDiagrams.java | 58 ++++++++++++++++--- 1 file changed, 50 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/reactome/server/export/tasks/HumanPathwaysWithDiagrams.java b/src/main/java/org/reactome/server/export/tasks/HumanPathwaysWithDiagrams.java index 011e39a..0a3dff2 100644 --- a/src/main/java/org/reactome/server/export/tasks/HumanPathwaysWithDiagrams.java +++ b/src/main/java/org/reactome/server/export/tasks/HumanPathwaysWithDiagrams.java @@ -8,6 +8,10 @@ import java.util.*; import java.util.stream.Collectors; +// JSON parsing imports (Jackson, for example) +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + /** * Export Pathway Summation Mapping from Neo4j */ @@ -31,35 +35,73 @@ public String getQuery() { @Override public void printResult(Collection> result, Path path) throws IOException { - // Get valid pathway IDs from JSON files in the directory + // 1) Collect valid pathway IDs from the directory Set validPathwayIds = getValidPathwayIds(); - // Filter results to include only those with matching pathway IDs + // 2) Filter the Neo4j results to include only matching IDs List> filteredResults = result.stream() .filter(map -> validPathwayIds.contains(map.get("pathwayId"))) .collect(Collectors.toList()); - // Print only the filtered results + // 3) Use the parent's 'print(...)' to output the final filtered list print(filteredResults, path, "pathwayId", "pathwayName", "isDisease"); } /** - * Retrieves a set of valid pathway IDs from the JSON filenames in the target directory. + * Retrieves a set of valid pathway IDs from the JSON filenames in the target directory, + * excluding those where all nodes have renderableClass="ProcessNode". */ private Set getValidPathwayIds() { Set pathwayIds = new HashSet<>(); + try (DirectoryStream stream = Files.newDirectoryStream(Paths.get(DIAGRAM_DIRECTORY))) { for (Path entry : stream) { if (Files.isRegularFile(entry) && entry.toString().endsWith(".json")) { String filename = entry.getFileName().toString(); - String pathwayId = filename.replace(".json", ""); // Remove .json extension - pathwayIds.add(pathwayId); + String pathwayId = filename.replace(".json", ""); + + // Exclude this JSON file if it consists only of "ProcessNode" renderableClasses + if (!isAllProcessNodes(entry)) { + pathwayIds.add(pathwayId); + } } } - } - catch (IOException e) { + } catch (IOException e) { System.err.println("Error reading directory: " + e.getMessage()); } + return pathwayIds; } + + /** + * Checks if the diagram JSON file has ONLY "ProcessNode" items in its "nodes" array. + * If it does, we return true (meaning it should be excluded). + */ + private boolean isAllProcessNodes(Path jsonFilePath) { + ObjectMapper mapper = new ObjectMapper(); + try { + JsonNode root = mapper.readTree(jsonFilePath.toFile()); + JsonNode nodes = root.get("nodes"); + + // If nodes is null, not an array, or empty, it's not "all ProcessNode" + if (nodes == null || !nodes.isArray() || nodes.size() == 0) { + return false; + } + + // If ANY node is not "ProcessNode", return false + for (JsonNode node : nodes) { + JsonNode renderableClass = node.get("renderableClass"); + if (renderableClass == null || !"ProcessNode".equals(renderableClass.asText())) { + return false; + } + } + // Every node was "ProcessNode" + return true; + + } catch (IOException e) { + // If JSON can't be parsed, treat it as not exclusively "ProcessNode" + System.err.println("Error parsing JSON file " + jsonFilePath + ": " + e.getMessage()); + return false; + } + } } From 060aa7ae087010df5b63ddd021f2a66f9f7335f0 Mon Sep 17 00:00:00 2001 From: Neil Sachdeva Date: Wed, 5 Feb 2025 12:26:52 -0500 Subject: [PATCH 14/17] Removed prefix to diff with old file --- .../server/export/tasks/HumanPathwaysWithDiagrams.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/java/org/reactome/server/export/tasks/HumanPathwaysWithDiagrams.java b/src/main/java/org/reactome/server/export/tasks/HumanPathwaysWithDiagrams.java index 0a3dff2..9268029 100644 --- a/src/main/java/org/reactome/server/export/tasks/HumanPathwaysWithDiagrams.java +++ b/src/main/java/org/reactome/server/export/tasks/HumanPathwaysWithDiagrams.java @@ -43,6 +43,15 @@ public void printResult(Collection> result, Path path) throw .filter(map -> validPathwayIds.contains(map.get("pathwayId"))) .collect(Collectors.toList()); + + // Remove the R-HSA- prefix for each pathway ID to compare results (temp) + filteredResults.forEach(row -> { + String pId = (String) row.get("pathwayId"); + if (pId != null && pId.startsWith("R-HSA-")) { + row.put("pathwayId", pId.substring("R-HSA-".length())); + } + }); + // 3) Use the parent's 'print(...)' to output the final filtered list print(filteredResults, path, "pathwayId", "pathwayName", "isDisease"); } From 8f2cb3a678afc60782111be89a4cc993636a2f94 Mon Sep 17 00:00:00 2001 From: Neil Sachdeva Date: Wed, 5 Feb 2025 12:31:37 -0500 Subject: [PATCH 15/17] fixed prefix edit (temp) --- .../tasks/HumanPathwaysWithDiagrams.java | 22 ++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/reactome/server/export/tasks/HumanPathwaysWithDiagrams.java b/src/main/java/org/reactome/server/export/tasks/HumanPathwaysWithDiagrams.java index 9268029..d2ff63e 100644 --- a/src/main/java/org/reactome/server/export/tasks/HumanPathwaysWithDiagrams.java +++ b/src/main/java/org/reactome/server/export/tasks/HumanPathwaysWithDiagrams.java @@ -40,22 +40,28 @@ public void printResult(Collection> result, Path path) throw // 2) Filter the Neo4j results to include only matching IDs List> filteredResults = result.stream() - .filter(map -> validPathwayIds.contains(map.get("pathwayId"))) + .filter(row -> validPathwayIds.contains(row.get("pathwayId"))) .collect(Collectors.toList()); + // 3) Transform the filtered results by removing "R-HSA-" prefix in a new mutable map + List> transformedResults = filteredResults.stream().map(unmodifiableRow -> { + // Create a new HashMap from the unmodifiable row + Map modifiableRow = new HashMap<>(unmodifiableRow); - // Remove the R-HSA- prefix for each pathway ID to compare results (temp) - filteredResults.forEach(row -> { - String pId = (String) row.get("pathwayId"); + // Remove prefix if needed + String pId = (String) modifiableRow.get("pathwayId"); if (pId != null && pId.startsWith("R-HSA-")) { - row.put("pathwayId", pId.substring("R-HSA-".length())); + modifiableRow.put("pathwayId", pId.substring("R-HSA-".length())); } - }); - // 3) Use the parent's 'print(...)' to output the final filtered list - print(filteredResults, path, "pathwayId", "pathwayName", "isDisease"); + return modifiableRow; + }).collect(Collectors.toList()); + + // 4) Print (using parent's print method) the final transformed list + print(transformedResults, path, "pathwayId", "pathwayName", "isDisease"); } + /** * Retrieves a set of valid pathway IDs from the JSON filenames in the target directory, * excluding those where all nodes have renderableClass="ProcessNode". From 3e4883c95a0e0b49a6e67ebb608a42cd77887058 Mon Sep 17 00:00:00 2001 From: Neil Sachdeva Date: Wed, 5 Feb 2025 14:14:16 -0500 Subject: [PATCH 16/17] Added a list of excluded node values for renderedClass instead of just checking for ProcessNode --- .../tasks/HumanPathwaysWithDiagrams.java | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/reactome/server/export/tasks/HumanPathwaysWithDiagrams.java b/src/main/java/org/reactome/server/export/tasks/HumanPathwaysWithDiagrams.java index d2ff63e..d68e7ce 100644 --- a/src/main/java/org/reactome/server/export/tasks/HumanPathwaysWithDiagrams.java +++ b/src/main/java/org/reactome/server/export/tasks/HumanPathwaysWithDiagrams.java @@ -20,6 +20,14 @@ public class HumanPathwaysWithDiagrams extends DataExportAbstract { private static final String DIAGRAM_DIRECTORY = "/data/diagrams"; + private static final Set EXCLUDED_RENDERABLE_CLASSES = new HashSet<>( + Arrays.asList( + "EncapsulatedNode", + "ProcessNode" + ) +); + + @Override public String getName() { return "humanPathwaysWithDiagrams"; @@ -76,7 +84,7 @@ private Set getValidPathwayIds() { String pathwayId = filename.replace(".json", ""); // Exclude this JSON file if it consists only of "ProcessNode" renderableClasses - if (!isAllProcessNodes(entry)) { + if (!isAllExcludedClasses(entry)) { pathwayIds.add(pathwayId); } } @@ -92,7 +100,7 @@ private Set getValidPathwayIds() { * Checks if the diagram JSON file has ONLY "ProcessNode" items in its "nodes" array. * If it does, we return true (meaning it should be excluded). */ - private boolean isAllProcessNodes(Path jsonFilePath) { + private boolean isAllExcludedClasses(Path jsonFilePath) { ObjectMapper mapper = new ObjectMapper(); try { JsonNode root = mapper.readTree(jsonFilePath.toFile()); @@ -103,18 +111,18 @@ private boolean isAllProcessNodes(Path jsonFilePath) { return false; } - // If ANY node is not "ProcessNode", return false + // If ANY node is not from the excluded list, return false for (JsonNode node : nodes) { JsonNode renderableClass = node.get("renderableClass"); - if (renderableClass == null || !"ProcessNode".equals(renderableClass.asText())) { + if (renderableClass == null || !EXCLUDED_RENDERABLE_CLASSES.contains(renderableClass.asText())) { return false; } } - // Every node was "ProcessNode" + // Every node was in the excluded list return true; } catch (IOException e) { - // If JSON can't be parsed, treat it as not exclusively "ProcessNode" + // If JSON can't be parsed, treat it as not exclusively in the exlcuded list System.err.println("Error parsing JSON file " + jsonFilePath + ": " + e.getMessage()); return false; } From 47d0b382454b003f76dcb6f8bd2d7c9b0ce8a995 Mon Sep 17 00:00:00 2001 From: Neil Sachdeva Date: Wed, 5 Feb 2025 14:35:48 -0500 Subject: [PATCH 17/17] Added back the prefix --- .../tasks/HumanPathwaysWithDiagrams.java | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/main/java/org/reactome/server/export/tasks/HumanPathwaysWithDiagrams.java b/src/main/java/org/reactome/server/export/tasks/HumanPathwaysWithDiagrams.java index d68e7ce..89480b5 100644 --- a/src/main/java/org/reactome/server/export/tasks/HumanPathwaysWithDiagrams.java +++ b/src/main/java/org/reactome/server/export/tasks/HumanPathwaysWithDiagrams.java @@ -51,28 +51,28 @@ public void printResult(Collection> result, Path path) throw .filter(row -> validPathwayIds.contains(row.get("pathwayId"))) .collect(Collectors.toList()); - // 3) Transform the filtered results by removing "R-HSA-" prefix in a new mutable map - List> transformedResults = filteredResults.stream().map(unmodifiableRow -> { - // Create a new HashMap from the unmodifiable row - Map modifiableRow = new HashMap<>(unmodifiableRow); - - // Remove prefix if needed - String pId = (String) modifiableRow.get("pathwayId"); - if (pId != null && pId.startsWith("R-HSA-")) { - modifiableRow.put("pathwayId", pId.substring("R-HSA-".length())); - } + // // 3) Transform the filtered results by removing "R-HSA-" prefix in a new mutable map + // List> transformedResults = filteredResults.stream().map(unmodifiableRow -> { + // // Create a new HashMap from the unmodifiable row + // Map modifiableRow = new HashMap<>(unmodifiableRow); + + // // Remove prefix if needed + // String pId = (String) modifiableRow.get("pathwayId"); + // if (pId != null && pId.startsWith("R-HSA-")) { + // modifiableRow.put("pathwayId", pId.substring("R-HSA-".length())); + // } - return modifiableRow; - }).collect(Collectors.toList()); + // return modifiableRow; + // }).collect(Collectors.toList()); // 4) Print (using parent's print method) the final transformed list - print(transformedResults, path, "pathwayId", "pathwayName", "isDisease"); + print(filteredResults, path, "pathwayId", "pathwayName", "isDisease"); } /** * Retrieves a set of valid pathway IDs from the JSON filenames in the target directory, - * excluding those where all nodes have renderableClass="ProcessNode". + * excluding those where all nodes have renderableClass from the exclusion list. */ private Set getValidPathwayIds() { Set pathwayIds = new HashSet<>();