Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

IQSS/9471- support delayed setting of :DoiProvider #9472

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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
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";
}
}
@@ -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
@@ -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;
}

}
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";
}

}
Expand Up @@ -82,6 +82,7 @@ public List<String> getProviderInformation() {
return providerInfo;
}


// PID recognition
// Done by DOIServiceBean

Expand Down
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