diff --git a/dspace-api/src/main/java/org/dspace/identifier/HandleIdentifierProvider.java b/dspace-api/src/main/java/org/dspace/identifier/HandleIdentifierProvider.java index 1fb998039a..6118a3be5a 100644 --- a/dspace-api/src/main/java/org/dspace/identifier/HandleIdentifierProvider.java +++ b/dspace-api/src/main/java/org/dspace/identifier/HandleIdentifierProvider.java @@ -62,19 +62,20 @@ public class HandleIdentifierProvider extends IdentifierProvider { || identifier.startsWith(canonicalPrefix) || identifier.startsWith("hdl:") || identifier.startsWith("info:hdl") - || identifier.matches("^https?://hdl.handle.net/") - || identifier.matches("^https?://.+/handle/")) + || identifier.matches("^https?://hdl\\.handle\\.net/.*") + || identifier.matches("^https?://.+/handle/.*")) { return true; } - // return false if identifier starts with DOI prefix - if(identifier.startsWith("10.") || identifier.matches("^https?://dx.doi.org") || identifier.startsWith("doi:")) - return false; - // return false if identifier does not contain a '/' or is a URL that does not match above patterns - if(! identifier.contains("/") || identifier.matches("^https?://.+")) - return false; - // otherwise, assumed a valid handle - return true; + // return true if base prefix matches in case of multi-instance deployment with derived prefixes demarcated by a dot "." + if(prefix.contains(".")) { + String[] splitPrefix = prefix.split("\\."); + if(splitPrefix.length > 1 && identifier.startsWith(splitPrefix[0])) { + return true; + } + } + // otherwise, assume invalid handle + return false; } @Override diff --git a/dspace-api/src/main/java/org/dspace/identifier/VersionedHandleIdentifierProvider.java b/dspace-api/src/main/java/org/dspace/identifier/VersionedHandleIdentifierProvider.java index 354627780d..fc6eeb85b7 100644 --- a/dspace-api/src/main/java/org/dspace/identifier/VersionedHandleIdentifierProvider.java +++ b/dspace-api/src/main/java/org/dspace/identifier/VersionedHandleIdentifierProvider.java @@ -82,19 +82,20 @@ public class VersionedHandleIdentifierProvider extends IdentifierProvider { || identifier.startsWith(canonicalPrefix) || identifier.startsWith("hdl:") || identifier.startsWith("info:hdl") - || identifier.matches("^https?://hdl.handle.net/") - || identifier.matches("^https?://.+/handle/")) + || identifier.matches("^https?://hdl\\.handle\\.net/.*") + || identifier.matches("^https?://.+/handle/.*")) { return true; } - // return false if identifier starts with DOI prefix - if(identifier.startsWith("10.") || identifier.matches("^https?://dx.doi.org") || identifier.startsWith("doi:")) - return false; - // return false if identifier does not contain a '/' or is a URL that does not match above patterns - if(! identifier.contains("/") || identifier.matches("^https?://.+")) - return false; - // otherwise, assumed a valid handle - return true; + // return true if base prefix matches in case of multi-instance deployment with derived prefixes demarcated by a dot "." + if(prefix.contains(".")) { + String[] splitPrefix = prefix.split("\\."); + if(splitPrefix.length > 1 && identifier.startsWith(splitPrefix[0])) { + return true; + } + } + // otherwise, assume invalid handle + return false; } @Override diff --git a/dspace-api/src/main/java/org/dspace/identifier/VersionedHandleIdentifierProviderWithCanonicalHandles.java b/dspace-api/src/main/java/org/dspace/identifier/VersionedHandleIdentifierProviderWithCanonicalHandles.java index b5e6c2ef2c..a52c4fda64 100644 --- a/dspace-api/src/main/java/org/dspace/identifier/VersionedHandleIdentifierProviderWithCanonicalHandles.java +++ b/dspace-api/src/main/java/org/dspace/identifier/VersionedHandleIdentifierProviderWithCanonicalHandles.java @@ -78,19 +78,20 @@ public class VersionedHandleIdentifierProviderWithCanonicalHandles extends Ident || identifier.startsWith(canonicalPrefix) || identifier.startsWith("hdl:") || identifier.startsWith("info:hdl") - || identifier.matches("^https?://hdl.handle.net/") - || identifier.matches("^https?://.+/handle/")) + || identifier.matches("^https?://hdl\\.handle\\.net/.*") + || identifier.matches("^https?://.+/handle/.*")) { return true; } - // return false if identifier starts with DOI prefix - if(identifier.startsWith("10.") || identifier.matches("^https?://dx.doi.org") || identifier.startsWith("doi:")) - return false; - // return false if identifier does not contain a '/' or is a URL that does not match above patterns - if(! identifier.contains("/") || identifier.matches("^https?://.+")) - return false; - // otherwise, assumed a valid handle - return true; + // return true if base prefix matches in case of multi-instance deployment with derived prefixes demarcated by a dot "." + if(prefix.contains(".")) { + String[] splitPrefix = prefix.split("\\."); + if(splitPrefix.length > 1 && identifier.startsWith(splitPrefix[0])) { + return true; + } + } + // otherwise, assume invalid handle + return false; } @Override