Skip to content

Commit fde9065

Browse files
authored
Merge pull request #11742 from GlobalDataverseCommunityConsortium/IQSS/11592-HandleFix
IQSS/11592-Fix Handle case insensitivity broken in 6.5
2 parents 338dfa2 + b1ef66b commit fde9065

File tree

3 files changed

+16
-4
lines changed

3 files changed

+16
-4
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
A bug introduced in v6.5 broken Handle parsing when using a lower-case shoulder. This is now fixed.

src/main/java/edu/harvard/iq/dataverse/pidproviders/AbstractPidProvider.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -343,8 +343,13 @@ public GlobalId parsePersistentId(String protocol, String authority, String iden
343343
if (!PidProvider.isValidGlobalId(protocol, authority, identifier)) {
344344
return null;
345345
}
346+
String comparableShoulder = getShoulder();
347+
346348
if(isCaseInsensitive) {
347349
identifier = identifier.toUpperCase();
350+
if(comparableShoulder != null) {
351+
comparableShoulder = comparableShoulder.toUpperCase();
352+
}
348353
}
349354
// Check authority/identifier if this is a provider that manages specific
350355
// identifiers
@@ -362,7 +367,7 @@ public GlobalId parsePersistentId(String protocol, String authority, String iden
362367
logger.fine("managed in " + getId() + ": " + getManagedSet().contains(cleanIdentifier));
363368
logger.fine("excluded from " + getId() + ": " + getExcludedSet().contains(cleanIdentifier));
364369

365-
if (!(((authority.equals(getAuthority()) && identifier.startsWith(getShoulder().toUpperCase()))
370+
if (!(((authority.equals(getAuthority()) && identifier.startsWith(comparableShoulder))
366371
|| getManagedSet().contains(cleanIdentifier)) && !getExcludedSet().contains(cleanIdentifier))) {
367372
return null;
368373
}

src/test/java/edu/harvard/iq/dataverse/pidproviders/PidUtilTest.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@
107107
@JvmSetting(key = JvmSettings.PID_PROVIDER_LABEL, value = "HDL 1", varArgs = "hdl1")
108108
@JvmSetting(key = JvmSettings.PID_PROVIDER_TYPE, value = HandlePidProvider.TYPE, varArgs = "hdl1")
109109
@JvmSetting(key = JvmSettings.PID_PROVIDER_AUTHORITY, value = "20.500.1234", varArgs = "hdl1")
110-
@JvmSetting(key = JvmSettings.PID_PROVIDER_SHOULDER, value = "", varArgs = "hdl1")
110+
@JvmSetting(key = JvmSettings.PID_PROVIDER_SHOULDER, value = "test", varArgs = "hdl1")
111111
@JvmSetting(key = JvmSettings.PID_PROVIDER_MANAGED_LIST, value = "hdl:20.20.20/FK2ABCDEF", varArgs ="hdl1")
112112
@JvmSetting(key = JvmSettings.HANDLENET_AUTH_HANDLE, value = "20.500.1234/ADMIN", varArgs ="hdl1")
113113
@JvmSetting(key = JvmSettings.HANDLENET_INDEPENDENT_SERVICE, value = "true", varArgs ="hdl1")
@@ -294,16 +294,22 @@ public void testDOIParsing() throws IOException {
294294
@Test
295295
public void testHandleParsing() throws IOException {
296296

297-
String pid1String = "hdl:20.500.1234/10052";
297+
String pid1String = "hdl:20.500.1234/test10052";
298298
GlobalId pid2 = PidUtil.parseAsGlobalID(pid1String);
299299
assertEquals(pid1String, pid2.asString());
300300
assertEquals("hdl1", pid2.getProviderId());
301-
assertEquals("https://hdl.handle.net/" + pid2.getAuthority() + PidUtil.getPidProvider(pid2.getProviderId()).getSeparator() + pid2.getIdentifier(),pid2.asURL());
301+
assertEquals("https://hdl.handle.net/" + pid2.getAuthority() + PidUtil.getPidProvider(pid2.getProviderId()).getSeparator() + pid2.getIdentifier(), pid2.asURL());
302302
assertEquals("20.500.1234", pid2.getAuthority());
303303
assertEquals(HandlePidProvider.HDL_PROTOCOL, pid2.getProtocol());
304304
GlobalId pid3 = PidUtil.parseAsGlobalID(pid2.asURL());
305305
assertEquals(pid1String, pid3.asString());
306306
assertEquals("hdl1", pid3.getProviderId());
307+
308+
// Test case sensitivity - a handle with uppercase "TEST" should not match the hdl1 provider
309+
String pid4String = "hdl:20.500.1234/TEST10052";
310+
GlobalId pid4 = PidUtil.parseAsGlobalID(pid4String);
311+
assertEquals(pid4String, pid4.asString());
312+
assertEquals(UnmanagedHandlePidProvider.ID, pid4.getProviderId());
307313
}
308314

309315
@Test

0 commit comments

Comments
 (0)