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 39cd5c439b..8f02b9c5ff 100644 --- a/dspace-api/src/main/java/org/dspace/identifier/HandleIdentifierProvider.java +++ b/dspace-api/src/main/java/org/dspace/identifier/HandleIdentifierProvider.java @@ -51,14 +51,14 @@ public class HandleIdentifierProvider extends IdentifierProvider { @Override public boolean supports(String identifier) { - String prefix = handleService.getPrefix(); + String prefix = handleService.getPrefix(); String canonicalPrefix = DSpaceServicesFactory.getInstance().getConfigurationService().getProperty("handle.canonical.prefix"); if (identifier == null) { return false; } // return true if handle has valid starting pattern - if (identifier.startsWith(prefix) + if (identifier.startsWith(prefix + "/") || identifier.startsWith(canonicalPrefix) || identifier.startsWith("hdl:") || identifier.startsWith("info:hdl") @@ -71,10 +71,11 @@ public class HandleIdentifierProvider extends IdentifierProvider { //Check additional prefixes supported in the config file String[] additionalPrefixes = DSpaceServicesFactory.getInstance().getConfigurationService().getArrayProperty("handle.additional.prefixes"); for(String additionalPrefix: additionalPrefixes) { - if (identifier.startsWith(additionalPrefix)) { + if (identifier.startsWith(additionalPrefix + "/")) { return true; } } + return false; } 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 fc6eeb85b7..c23c6e19e9 100644 --- a/dspace-api/src/main/java/org/dspace/identifier/VersionedHandleIdentifierProvider.java +++ b/dspace-api/src/main/java/org/dspace/identifier/VersionedHandleIdentifierProvider.java @@ -78,7 +78,7 @@ public class VersionedHandleIdentifierProvider extends IdentifierProvider { return false; } // return true if handle has valid starting pattern - if (identifier.startsWith(prefix) + if (identifier.startsWith(prefix + "/") || identifier.startsWith(canonicalPrefix) || identifier.startsWith("hdl:") || identifier.startsWith("info:hdl") @@ -87,13 +87,15 @@ public class VersionedHandleIdentifierProvider extends IdentifierProvider { { 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])) { + + //Check additional prefixes supported in the config file + String[] additionalPrefixes = DSpaceServicesFactory.getInstance().getConfigurationService().getArrayProperty("handle.additional.prefixes"); + for(String additionalPrefix: additionalPrefixes) { + if (identifier.startsWith(additionalPrefix + "/")) { return true; } } + // otherwise, assume invalid handle return false; } 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 a52c4fda64..0e2f8b3f57 100644 --- a/dspace-api/src/main/java/org/dspace/identifier/VersionedHandleIdentifierProviderWithCanonicalHandles.java +++ b/dspace-api/src/main/java/org/dspace/identifier/VersionedHandleIdentifierProviderWithCanonicalHandles.java @@ -74,7 +74,7 @@ public class VersionedHandleIdentifierProviderWithCanonicalHandles extends Ident return false; } // return true if handle has valid starting pattern - if (identifier.startsWith(prefix) + if (identifier.startsWith(prefix + "/") || identifier.startsWith(canonicalPrefix) || identifier.startsWith("hdl:") || identifier.startsWith("info:hdl") @@ -83,13 +83,15 @@ public class VersionedHandleIdentifierProviderWithCanonicalHandles extends Ident { 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])) { + + //Check additional prefixes supported in the config file + String[] additionalPrefixes = DSpaceServicesFactory.getInstance().getConfigurationService().getArrayProperty("handle.additional.prefixes"); + for(String additionalPrefix: additionalPrefixes) { + if (identifier.startsWith(additionalPrefix + "/")) { return true; } } + // otherwise, assume invalid handle return false; }