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/reader/RoCrateReader.java b/src/main/java/edu/kit/datamanager/ro_crate/reader/RoCrateReader.java index cf5cc4e..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 @@ -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( @@ -124,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(); 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; + } } /**