Skip to content

Commit a5d5c8f

Browse files
committed
RSDEV-271: Integration with Digital Commons Data
1 parent 374cafd commit a5d5c8f

17 files changed

+910
-1
lines changed

pom.xml

+19
Original file line numberDiff line numberDiff line change
@@ -1951,6 +1951,25 @@
19511951
</exclusion>
19521952
</exclusions>
19531953
</dependency>
1954+
<dependency>
1955+
<groupId>com.github.rspace-os</groupId>
1956+
<artifactId>rspace-digital-commons-data-adapter</artifactId>
1957+
<version>0.0.1-SNAPSHOT</version>
1958+
<exclusions>
1959+
<exclusion>
1960+
<groupId>com.github.rspace-os</groupId>
1961+
<artifactId>repository-spi</artifactId>
1962+
</exclusion>
1963+
<exclusion>
1964+
<groupId>log4j</groupId>
1965+
<artifactId>log4j</artifactId>
1966+
</exclusion>
1967+
<exclusion>
1968+
<groupId>org.slf4j</groupId>
1969+
<artifactId>slf4j-log4j12</artifactId>
1970+
</exclusion>
1971+
</exclusions>
1972+
</dependency>
19541973
<dependency>
19551974
<groupId>com.github.rspace-os</groupId>
19561975
<artifactId>protocols-java-client</artifactId>

src/main/java/com/researchspace/properties/IPropertyHolder.java

+2
Original file line numberDiff line numberDiff line change
@@ -269,5 +269,7 @@ public interface IPropertyHolder extends Versionable {
269269

270270
String getZenodoApiUrl();
271271

272+
String getDigitalCommonsDataApiUrl();
273+
272274
boolean isAsposeEnabled();
273275
}

src/main/java/com/researchspace/properties/PropertyHolder.java

+8
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,9 @@ public class PropertyHolder implements IMutablePropertyHolder {
210210
@Value("${zenodo.url}")
211211
private String zenodoApiUrl;
212212

213+
@Value("${dcd.api.base.url}")
214+
private String digitalCommonsDataApiUrl;
215+
213216
@Value("${aspose.enabled:true}")
214217
private String asposeEnabled;
215218

@@ -318,6 +321,11 @@ public String getZenodoApiUrl() {
318321
return this.zenodoApiUrl;
319322
}
320323

324+
@Override
325+
public String getDigitalCommonsDataApiUrl() {
326+
return this.digitalCommonsDataApiUrl;
327+
}
328+
321329
public Integer getMinUsernameLength() {
322330
return minUsernameLength;
323331
}

src/main/java/com/researchspace/service/IntegrationsHandler.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,17 @@ public interface IntegrationsHandler {
2121
String PROTOCOLS_IO_APP_NAME = "PROTOCOLS_IO";
2222
String PYRAT_APP_NAME = "PYRAT";
2323
String DMPTOOL_APP_NAME = "DMPTOOL";
24+
String DIGITAL_COMMONS_DATA_APP_NAME = "DIGITAL_COMMONS_DATA";
2425
String CLUSTERMARKET_APP_NAME = "CLUSTERMARKET";
2526
String OMERO_APP_NAME = "OMERO";
2627
String JOVE_APP_NAME = "JOVE";
2728
String DRYAD_APP_NAME = "DRYAD";
2829
String ARGOS_APP_NAME = "ARGOS";
2930
String ZENODO_APP_NAME = "ZENODO";
3031
String DMPONLINE_APP_NAME = "DMPONLINE";
31-
3232
String PYRAT_USER_TOKEN = "PYRAT_USER_TOKEN";
3333
String ZENODO_USER_TOKEN = "ZENODO_USER_TOKEN";
34+
String DIGITAL_COMMONS_DATA_USER_TOKEN = "DIGITAL_COMMONS_DATA_USER_TOKEN";
3435
String EGNYTE_DOMAIN_SETTING = "EGNYTE_DOMAIN";
3536
String ACCESS_TOKEN_SETTING = "ACCESS_TOKEN";
3637

src/main/java/com/researchspace/service/impl/IntegrationsHandlerImpl.java

+10
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,10 @@ void postProcessInfo(IntegrationInfo info, User user) {
171171
case ZENODO_APP_NAME:
172172
setSingleUserToken(info, user, ZENODO_APP_NAME, ZENODO_USER_TOKEN);
173173
return;
174+
case DIGITAL_COMMONS_DATA_APP_NAME:
175+
setSingleUserToken(
176+
info, user, DIGITAL_COMMONS_DATA_APP_NAME, DIGITAL_COMMONS_DATA_USER_TOKEN);
177+
return;
174178
default:
175179
}
176180
}
@@ -319,6 +323,11 @@ private void saveConfigOptionsForAppsWithSingleOptionSet(User user, IntegrationI
319323
} else if (ZENODO_APP_NAME.equals(newInfo.getName())) {
320324
saveNewUserConnectionForSingleOptionApp(
321325
newInfo.getOptions().get(ZENODO_USER_TOKEN).toString(), user, ZENODO_APP_NAME);
326+
} else if (DIGITAL_COMMONS_DATA_APP_NAME.equals(newInfo.getName())) {
327+
saveNewUserConnectionForSingleOptionApp(
328+
newInfo.getOptions().get(DIGITAL_COMMONS_DATA_USER_TOKEN).toString(),
329+
user,
330+
DIGITAL_COMMONS_DATA_APP_NAME);
322331
} else if (JOVE_APP_NAME.equals(newInfo.getName())) {
323332
/**
324333
* Jove doesnt currently fit well into our existing integration handler, so we just get the
@@ -418,6 +427,7 @@ private boolean isSingleOptionSetAppConfigIntegration(String integrationName) {
418427
case PYRAT_APP_NAME:
419428
case JOVE_APP_NAME:
420429
case DMPONLINE_APP_NAME:
430+
case DIGITAL_COMMONS_DATA_APP_NAME:
421431
return true;
422432
}
423433
return false;

src/main/java/com/researchspace/service/impl/RepositoryDepositHandlerImpl.java

+5
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import com.researchspace.service.UserAppConfigManager;
2828
import com.researchspace.service.UserConnectionManager;
2929
import com.researchspace.service.UserManager;
30+
import com.researchspace.webapp.controller.repositories.DigitalCommonsDataUIConnectionConfig;
3031
import com.researchspace.webapp.controller.repositories.DryadUIConnectionConfig;
3132
import com.researchspace.webapp.controller.repositories.FigshareUIConnectionConfig;
3233
import com.researchspace.webapp.controller.repositories.RSDataverseConnectionConfig;
@@ -131,6 +132,10 @@ private RepositoryConfig getRepoConnectionInfo(
131132
ZenodoUIConnectionConfig zenodoUIConnectionConfig =
132133
new ZenodoUIConnectionConfig(userConnectionManager, subject, this.propertyHolder);
133134
repoCfg = repoCfgFactory.createRepositoryConfigFromAppCfg(zenodoUIConnectionConfig, subject);
135+
} else if (app.getName().equalsIgnoreCase(App.APP_DIGITAL_COMMONS_DATA)) {
136+
DigitalCommonsDataUIConnectionConfig dcdUIConnectionConfig =
137+
new DigitalCommonsDataUIConnectionConfig(userConnectionManager, subject, this.propertyHolder);
138+
repoCfg = repoCfgFactory.createRepositoryConfigFromAppCfg(dcdUIConnectionConfig, subject);
134139
} else {
135140
throw new IllegalArgumentException("Unknown or unconfigured repository: " + app.getName());
136141
}

src/main/java/com/researchspace/webapp/controller/IntegrationController.java

+4
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import static com.researchspace.service.IntegrationsHandler.ARGOS_APP_NAME;
44
import static com.researchspace.service.IntegrationsHandler.CLUSTERMARKET_APP_NAME;
55
import static com.researchspace.service.IntegrationsHandler.DATAVERSE_APP_NAME;
6+
import static com.researchspace.service.IntegrationsHandler.DIGITAL_COMMONS_DATA_APP_NAME;
67
import static com.researchspace.service.IntegrationsHandler.DMPONLINE_APP_NAME;
78
import static com.researchspace.service.IntegrationsHandler.DMPTOOL_APP_NAME;
89
import static com.researchspace.service.IntegrationsHandler.DRYAD_APP_NAME;
@@ -138,6 +139,9 @@ private Map<String, IntegrationInfo> getAll(User user) {
138139
rc.put(ARGOS_APP_NAME, integrationsHandler.getIntegration(user, ARGOS_APP_NAME));
139140
rc.put(ZENODO_APP_NAME, integrationsHandler.getIntegration(user, ZENODO_APP_NAME));
140141
rc.put(OMERO_APP_NAME, integrationsHandler.getIntegration(user, OMERO_APP_NAME));
142+
rc.put(
143+
DIGITAL_COMMONS_DATA_APP_NAME,
144+
integrationsHandler.getIntegration(user, DIGITAL_COMMONS_DATA_APP_NAME));
141145
return rc;
142146
}
143147

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package com.researchspace.webapp.controller.repositories;
2+
3+
import static com.researchspace.service.IntegrationsHandler.DIGITAL_COMMONS_DATA_APP_NAME;
4+
5+
import com.researchspace.model.User;
6+
import com.researchspace.properties.IPropertyHolder;
7+
import com.researchspace.service.UserConnectionManager;
8+
import java.net.MalformedURLException;
9+
import java.net.URL;
10+
import java.util.Optional;
11+
12+
public class DigitalCommonsDataUIConnectionConfig implements RSpaceRepoConnectionConfig {
13+
14+
private User subject;
15+
private UserConnectionManager source;
16+
private IPropertyHolder propertyHolder;
17+
18+
public DigitalCommonsDataUIConnectionConfig(
19+
UserConnectionManager source, User subject, IPropertyHolder propertyHolder) {
20+
this.subject = subject;
21+
this.source = source;
22+
this.propertyHolder = propertyHolder;
23+
}
24+
25+
@Override
26+
public Optional<URL> getRepositoryURL() throws MalformedURLException {
27+
try {
28+
return Optional.of(new URL(this.propertyHolder.getDigitalCommonsDataApiUrl()));
29+
} catch (MalformedURLException e) {
30+
throw new IllegalArgumentException("Couldn't create Digital Commons Data repositoryURL " + e.getMessage());
31+
}
32+
}
33+
34+
@Override
35+
public String getApiKey() {
36+
return source
37+
.findByUserNameProviderName(subject.getUsername(), DIGITAL_COMMONS_DATA_APP_NAME)
38+
.orElseThrow(
39+
() -> new IllegalArgumentException("No UserConnection exists for: " + DIGITAL_COMMONS_DATA_APP_NAME))
40+
.getAccessToken();
41+
}
42+
}

0 commit comments

Comments
 (0)