From 7d5a99717b094e68a499089581c991dac3556260 Mon Sep 17 00:00:00 2001 From: Christopher Raquet Date: Tue, 9 Jul 2024 14:53:57 +0200 Subject: [PATCH 1/3] Prevent crate reader from removing data entities without corresponding file --- .../ro_crate/reader/RoCrateReader.java | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/main/java/edu/kit/datamanager/ro_crate/reader/RoCrateReader.java b/src/main/java/edu/kit/datamanager/ro_crate/reader/RoCrateReader.java index cf5cc4e..ae7c6aa 100644 --- a/src/main/java/edu/kit/datamanager/ro_crate/reader/RoCrateReader.java +++ b/src/main/java/edu/kit/datamanager/ro_crate/reader/RoCrateReader.java @@ -12,6 +12,8 @@ import edu.kit.datamanager.ro_crate.entities.data.RootDataEntity; import edu.kit.datamanager.ro_crate.special.JsonUtilFunctions; import static edu.kit.datamanager.ro_crate.special.UriUtil.decode; +import static edu.kit.datamanager.ro_crate.special.UriUtil.isUrl; + import edu.kit.datamanager.ro_crate.validation.JsonSchemaValidation; import edu.kit.datamanager.ro_crate.validation.Validator; @@ -92,17 +94,18 @@ public RoCrate readCrate(String location) { // if the id is in the root hasPart list, we know this entity is a data entity RootDataEntity root = crate.getRootDataEntity(); if (root != null && root.hasInHasPart(node.get(PROP_ID).asText())) { + // data entity + DataEntity.DataEntityBuilder dataEntity = new DataEntity.DataEntityBuilder() + .setAll(node.deepCopy()); + + // Handle data entities with corresponding file File loc = checkFolderHasFile(node.get(PROP_ID).asText(), files); if (loc != null) { usedFiles.add(loc.getPath()); - - // data entity - DataEntity dataEntity = new DataEntity.DataEntityBuilder() - .setAll(node.deepCopy()) - .addContent(loc.toPath(), loc.getName()) - .build(); - crate.addDataEntity(dataEntity, false); + dataEntity.addContent(loc.toPath(), loc.getName()); } + + crate.addDataEntity(dataEntity.build(), false); } else { // contextual entity crate.addContextualEntity( From 6998c9868157361d1dee9ce4a54a5bcbcdcc88e0 Mon Sep 17 00:00:00 2001 From: Christopher Raquet Date: Tue, 9 Jul 2024 14:54:24 +0200 Subject: [PATCH 2/3] Fix path exceptions for windows in crate reader --- .../java/edu/kit/datamanager/ro_crate/reader/RoCrateReader.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/edu/kit/datamanager/ro_crate/reader/RoCrateReader.java b/src/main/java/edu/kit/datamanager/ro_crate/reader/RoCrateReader.java index ae7c6aa..0355962 100644 --- a/src/main/java/edu/kit/datamanager/ro_crate/reader/RoCrateReader.java +++ b/src/main/java/edu/kit/datamanager/ro_crate/reader/RoCrateReader.java @@ -127,6 +127,7 @@ public RoCrate readCrate(String location) { } protected File checkFolderHasFile(String id, File file) { + if (isUrl(id)) return null; Path path = file.toPath().resolve(decode(id).get()); if (path.toFile().exists()) { return path.toFile(); From da44684c832d3fc20a1d2dd0f20f08900c9f6825 Mon Sep 17 00:00:00 2001 From: Christopher Raquet Date: Wed, 10 Jul 2024 13:20:37 +0200 Subject: [PATCH 3/3] Fix exception when checking URL validity --- .../kit/datamanager/ro_crate/entities/data/DataEntity.java | 2 +- .../java/edu/kit/datamanager/ro_crate/special/UriUtil.java | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/edu/kit/datamanager/ro_crate/entities/data/DataEntity.java b/src/main/java/edu/kit/datamanager/ro_crate/entities/data/DataEntity.java index 388d3db..cc4b9ac 100644 --- a/src/main/java/edu/kit/datamanager/ro_crate/entities/data/DataEntity.java +++ b/src/main/java/edu/kit/datamanager/ro_crate/entities/data/DataEntity.java @@ -118,7 +118,7 @@ public T addContent(Path path, String id) { public T addContent(URI uri) { if (isUrl(uri.toString())) { this.setId(uri.toString()); - } + } else throw new IllegalArgumentException("This Data Entity remote ID does not resolve to a valid URL."); return self(); } diff --git a/src/main/java/edu/kit/datamanager/ro_crate/special/UriUtil.java b/src/main/java/edu/kit/datamanager/ro_crate/special/UriUtil.java index 135db6b..63eaa13 100644 --- a/src/main/java/edu/kit/datamanager/ro_crate/special/UriUtil.java +++ b/src/main/java/edu/kit/datamanager/ro_crate/special/UriUtil.java @@ -56,7 +56,11 @@ public static boolean isValidUri(String uri) { * @return true if it is a url, false otherwise. */ public static boolean isUrl(String uri) { - return asUrl(uri).isPresent(); + try { + return asUrl(uri).isPresent(); + } catch (Exception e) { + return false; + } } /**