Skip to content

Commit

Permalink
Merge pull request #9472 from GlobalDataverseCommunityConsortium/DANS…
Browse files Browse the repository at this point in the history
…/local_pid_provider

IQSS/9471- support delayed setting of :DoiProvider
  • Loading branch information
kcondon committed Mar 28, 2023
2 parents 753ee84 + 4257351 commit 2e76bdb
Show file tree
Hide file tree
Showing 7 changed files with 69 additions and 29 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ public abstract class AbstractGlobalIdServiceBean implements GlobalIdServiceBean
@Inject
SystemConfig systemConfig;

protected boolean configured = false;
protected Boolean configured = null;

public static String UNAVAILABLE = ":unav";

Expand Down Expand Up @@ -217,7 +217,7 @@ public boolean isGlobalIdUnique(GlobalId globalId) {
*/
@Override
public GlobalId parsePersistentId(String fullIdentifierString) {
if(!configured) {
if(!isConfigured()) {
return null;
}
int index1 = fullIdentifierString.indexOf(':');
Expand All @@ -231,7 +231,7 @@ public GlobalId parsePersistentId(String fullIdentifierString) {
}

protected GlobalId parsePersistentId(String protocol, String identifierString) {
if(!configured) {
if(!isConfigured()) {
return null;
}
String authority;
Expand Down Expand Up @@ -262,7 +262,7 @@ protected GlobalId parsePersistentId(String protocol, String identifierString) {
}

public GlobalId parsePersistentId(String protocol, String authority, String identifier) {
if(!configured) {
if(!isConfigured()) {
return null;
}
logger.fine("Parsing: " + protocol + ":" + authority + getSeparator() + identifier + " in " + getProviderInformation().get(0));
Expand Down Expand Up @@ -684,6 +684,10 @@ public boolean canManagePID() {

@Override
public boolean isConfigured() {
return configured;
if(configured==null) {
return false;
} else {
return configured.booleanValue();
}
}
}
16 changes: 4 additions & 12 deletions src/main/java/edu/harvard/iq/dataverse/DOIDataCiteServiceBean.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,12 @@
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.ejb.Stateless;

import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;

import edu.harvard.iq.dataverse.settings.SettingsServiceBean.Key;


/**
*
Expand All @@ -38,14 +35,6 @@ public class DOIDataCiteServiceBean extends DOIServiceBean {
@EJB
DOIDataCiteRegisterService doiDataCiteRegisterService;

@PostConstruct
private void init() {
String doiProvider = settingsService.getValueForKey(Key.DoiProvider, "");
if("DataCite".equals(doiProvider)) {
configured=true;
}
}

@Override
public boolean registerWhenPublished() {
return false;
Expand Down Expand Up @@ -256,7 +245,10 @@ public List<String> getProviderInformation(){
return providerInfo;
}

//PID recognition


@Override
protected String getProviderKeyName() {
return "DataCite";
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package edu.harvard.iq.dataverse;

import edu.harvard.iq.dataverse.settings.SettingsServiceBean.Key;
import edu.ucsb.nceas.ezid.EZIDException;
import edu.ucsb.nceas.ezid.EZIDService;
import edu.ucsb.nceas.ezid.EZIDServiceRequest;
Expand Down Expand Up @@ -285,5 +284,10 @@ private <T> HashMap<T,T> asHashMap(Map<T,T> map) {
return (map instanceof HashMap) ? (HashMap)map : new HashMap<>(map);
}

@Override
protected String getProviderKeyName() {
return "EZID";
}

}

23 changes: 23 additions & 0 deletions src/main/java/edu/harvard/iq/dataverse/DOIServiceBean.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package edu.harvard.iq.dataverse;

import edu.harvard.iq.dataverse.settings.SettingsServiceBean.Key;

public abstract class DOIServiceBean extends AbstractGlobalIdServiceBean {

public static final String DOI_PROTOCOL = "doi";
Expand Down Expand Up @@ -52,5 +54,26 @@ public GlobalId parsePersistentId(String protocol, String authority, String iden
public String getUrlPrefix() {
return DOI_RESOLVER_URL;
}

@Override
public boolean isConfigured() {
if (configured == null) {
if (getProviderKeyName() == null) {
configured = false;
} else {
String doiProvider = settingsService.getValueForKey(Key.DoiProvider, "");
if (getProviderKeyName().equals(doiProvider)) {
configured = true;
} else if (!doiProvider.isEmpty()) {
configured = false;
}
}
}
return super.isConfigured();
}

protected String getProviderKeyName() {
return null;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -3,29 +3,19 @@
import edu.harvard.iq.dataverse.DOIServiceBean;
import edu.harvard.iq.dataverse.DvObject;
import edu.harvard.iq.dataverse.GlobalId;
import edu.harvard.iq.dataverse.settings.SettingsServiceBean.Key;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Logger;

import javax.annotation.PostConstruct;
import javax.ejb.Stateless;

@Stateless
public class FakePidProviderServiceBean extends DOIServiceBean {

private static final Logger logger = Logger.getLogger(FakePidProviderServiceBean.class.getCanonicalName());

@PostConstruct
private void init() {
String doiProvider = settingsService.getValueForKey(Key.DoiProvider, "");
if("FAKE".equals(doiProvider)) {
configured=true;
}
}

//Only need to check locally
public boolean isGlobalIdUnique(GlobalId globalId) {
Expand Down Expand Up @@ -82,5 +72,10 @@ public void deleteIdentifier(DvObject dvo) throws Exception {
public boolean publicizeIdentifier(DvObject studyIn) {
return true;
}

@Override
protected String getProviderKeyName() {
return "FAKE";
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@ public List<String> getProviderInformation() {
return providerInfo;
}


// PID recognition
// Done by DOIServiceBean

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,17 +12,30 @@
import edu.harvard.iq.dataverse.settings.SettingsServiceBean;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.mockito.junit.MockitoJUnitRunner;

import static org.junit.Assert.*;

/**
*
* @author michael
*/
@RunWith(MockitoJUnitRunner.class)
public class PersistentIdentifierServiceBeanTest {


@Mock
private SettingsServiceBean settingsServiceBean;

@InjectMocks
DOIEZIdServiceBean ezidServiceBean = new DOIEZIdServiceBean();
@InjectMocks
DOIDataCiteServiceBean dataCiteServiceBean = new DOIDataCiteServiceBean();
@InjectMocks
FakePidProviderServiceBean fakePidProviderServiceBean = new FakePidProviderServiceBean();
HandlenetServiceBean hdlServiceBean = new HandlenetServiceBean();
PermaLinkPidProviderServiceBean permaLinkServiceBean = new PermaLinkPidProviderServiceBean();
Expand All @@ -31,6 +44,7 @@ public class PersistentIdentifierServiceBeanTest {

@Before
public void setup() {
MockitoAnnotations.initMocks(this);
ctxt = new TestCommandContext(){
@Override
public HandlenetServiceBean handleNet() {
Expand Down Expand Up @@ -66,14 +80,20 @@ public PermaLinkPidProviderServiceBean permaLinkProvider() {
@Test
public void testGetBean_String_CommandContext_OK() {
ctxt.settings().setValueForKey( SettingsServiceBean.Key.DoiProvider, "EZID");
Mockito.when(settingsServiceBean.getValueForKey(SettingsServiceBean.Key.DoiProvider, "")).thenReturn("EZID");

assertEquals(ezidServiceBean,
GlobalIdServiceBean.getBean("doi", ctxt));

ctxt.settings().setValueForKey( SettingsServiceBean.Key.DoiProvider, "DataCite");
Mockito.when(settingsServiceBean.getValueForKey(SettingsServiceBean.Key.DoiProvider, "")).thenReturn("DataCite");

assertEquals(dataCiteServiceBean,
GlobalIdServiceBean.getBean("doi", ctxt));

ctxt.settings().setValueForKey(SettingsServiceBean.Key.DoiProvider, "FAKE");
Mockito.when(settingsServiceBean.getValueForKey(SettingsServiceBean.Key.DoiProvider, "")).thenReturn("FAKE");

assertEquals(fakePidProviderServiceBean,
GlobalIdServiceBean.getBean("doi", ctxt));

Expand All @@ -100,6 +120,7 @@ public void testGetBean_String_CommandContext_BAD() {
public void testGetBean_CommandContext() {
ctxt.settings().setValueForKey( SettingsServiceBean.Key.Protocol, "doi");
ctxt.settings().setValueForKey( SettingsServiceBean.Key.DoiProvider, "EZID");
Mockito.when(settingsServiceBean.getValueForKey(SettingsServiceBean.Key.DoiProvider, "")).thenReturn("EZID");

assertEquals(ezidServiceBean,
GlobalIdServiceBean.getBean("doi", ctxt));
Expand Down

0 comments on commit 2e76bdb

Please sign in to comment.