Skip to content

Commit

Permalink
Handle case where type is set but there's no identifier
Browse files Browse the repository at this point in the history
  • Loading branch information
qqmyers committed Sep 14, 2024
1 parent 1c7a31a commit ffc366c
Showing 1 changed file with 45 additions and 44 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -990,56 +990,57 @@ private void writeRelatedIdentifiers(XMLStreamWriter xmlw, DvObject dvObject) th
}
logger.fine("Related identifier: " + relatedIdentifier);
// For types where we understand the protocol, get the canonical form

switch (pubIdType != null ? pubIdType : "none") {
case "DOI":
if (!(relatedIdentifier.startsWith("doi:") || relatedIdentifier.startsWith("http"))) {
relatedIdentifier = "doi:" + relatedIdentifier;
}
logger.fine("Intermediate Related identifier: " + relatedIdentifier);
try {
GlobalId pid = PidUtil.parseAsGlobalID(relatedIdentifier);
relatedIdentifier = pid.asRawIdentifier();
} catch (IllegalArgumentException e) {
logger.warning("Invalid DOI: " + e.getLocalizedMessage());
relatedIdentifier = null;
}
logger.fine("Final Related identifier: " + relatedIdentifier);
break;
case "Handle":
if (!relatedIdentifier.startsWith("hdl:") || !relatedIdentifier.startsWith("http")) {
relatedIdentifier = "hdl:" + relatedIdentifier;
}
try {
GlobalId pid = PidUtil.parseAsGlobalID(relatedIdentifier);
relatedIdentifier = pid.asRawIdentifier();
} catch (IllegalArgumentException e) {
relatedIdentifier = null;
}
break;
case "URL":
break;
default:
if (relatedIdentifier != null) {
//See if it is a GlobalID we know
if (StringUtils.isNotBlank(relatedIdentifier)) {
switch (pubIdType != null ? pubIdType : "none") {
case "DOI":
if (!(relatedIdentifier.startsWith("doi:") || relatedIdentifier.startsWith("http"))) {
relatedIdentifier = "doi:" + relatedIdentifier;
}
logger.fine("Intermediate Related identifier: " + relatedIdentifier);
try {
GlobalId pid = PidUtil.parseAsGlobalID(relatedIdentifier);
relatedIdentifier = pid.asRawIdentifier();
pubIdType = getCanonicalPublicationType(pid.getProtocol());
} catch (IllegalArgumentException e) {
logger.warning("Invalid DOI: " + e.getLocalizedMessage());
relatedIdentifier = null;
}
logger.fine("Final Related identifier: " + relatedIdentifier);
break;
case "Handle":
if (!relatedIdentifier.startsWith("hdl:") || !relatedIdentifier.startsWith("http")) {
relatedIdentifier = "hdl:" + relatedIdentifier;
}
// For non-URL types, if a URL is given, split the string to get a schemeUri
try {
URL relatedUrl = new URI(relatedIdentifier).toURL();
String protocol = relatedUrl.getProtocol();
String authority = relatedUrl.getAuthority();
String site = String.format("%s://%s", protocol, authority);
relatedIdentifier = relatedIdentifier.substring(site.length());
attributes.put("schemeURI", site);
pubIdType = "URL";
} catch (URISyntaxException | MalformedURLException | IllegalArgumentException e) {
// Just an identifier but without a pubIdType we won't include it
logger.warning("Related Identifier found without type: " + relatedIdentifier);
GlobalId pid = PidUtil.parseAsGlobalID(relatedIdentifier);
relatedIdentifier = pid.asRawIdentifier();
} catch (IllegalArgumentException e) {
relatedIdentifier = null;
}
break;
case "URL":
break;
default:
if (relatedIdentifier != null) {
// See if it is a GlobalID we know
try {
GlobalId pid = PidUtil.parseAsGlobalID(relatedIdentifier);
relatedIdentifier = pid.asRawIdentifier();
pubIdType = getCanonicalPublicationType(pid.getProtocol());
} catch (IllegalArgumentException e) {
}
// For non-URL types, if a URL is given, split the string to get a schemeUri
try {
URL relatedUrl = new URI(relatedIdentifier).toURL();
String protocol = relatedUrl.getProtocol();
String authority = relatedUrl.getAuthority();
String site = String.format("%s://%s", protocol, authority);
relatedIdentifier = relatedIdentifier.substring(site.length());
attributes.put("schemeURI", site);
pubIdType = "URL";
} catch (URISyntaxException | MalformedURLException | IllegalArgumentException e) {
// Just an identifier but without a pubIdType we won't include it
logger.warning("Related Identifier found without type: " + relatedIdentifier);
}
}
}
}
Expand Down

0 comments on commit ffc366c

Please sign in to comment.