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

Minting Handles For Datasets #3146

Closed
wants to merge 17 commits into from
Closed
Show file tree
Hide file tree
Changes from 13 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,6 @@ scripts/api/py_api_wrapper/local-data/*
doc/sphinx-guides/build
faces-config.NavData
src/main/java/BuildNumber.properties
scripts/installer/dvinstall.zip
scripts/installer/dvinstall/
/nbproject/
49 changes: 49 additions & 0 deletions src/main/java/edu/harvard/iq/dataverse/AbstractIdServiceBean.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package edu.harvard.iq.dataverse;

import java.util.*;

public abstract class AbstractIdServiceBean implements IdServiceBean {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for adding the AbstractIdServiceBean class! It's a great help!


@Override
public String generateYear()
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • generateYear this method is not needed. e.g. methods like getMetadataFromStudyForCreateIndicator will be overwritten

{
StringBuilder guid = new StringBuilder();

// Create a calendar to get the date formatted properly
String[] ids = TimeZone.getAvailableIDs(-8 * 60 * 60 * 1000);
SimpleTimeZone pdt = new SimpleTimeZone(-8 * 60 * 60 * 1000, ids[0]);
pdt.setStartRule(Calendar.APRIL, 1, Calendar.SUNDAY, 2 * 60 * 60 * 1000);
pdt.setEndRule(Calendar.OCTOBER, -1, Calendar.SUNDAY, 2 * 60 * 60 * 1000);
Calendar calendar = new GregorianCalendar(pdt);
Date trialTime = new Date();
calendar.setTime(trialTime);
guid.append(calendar.get(Calendar.YEAR));

return guid.toString();
}

@Override
public String generateTimeString()
{
StringBuilder guid = new StringBuilder();

// Create a calendar to get the date formatted properly
String[] ids = TimeZone.getAvailableIDs(-8 * 60 * 60 * 1000);
SimpleTimeZone pdt = new SimpleTimeZone(-8 * 60 * 60 * 1000, ids[0]);
pdt.setStartRule(Calendar.APRIL, 1, Calendar.SUNDAY, 2 * 60 * 60 * 1000);
pdt.setEndRule(Calendar.OCTOBER, -1, Calendar.SUNDAY, 2 * 60 * 60 * 1000);
Calendar calendar = new GregorianCalendar(pdt);
Date trialTime = new Date();
calendar.setTime(trialTime);
guid.append(calendar.get(Calendar.YEAR));
guid.append(calendar.get(Calendar.DAY_OF_YEAR));
guid.append(calendar.get(Calendar.HOUR_OF_DAY));
guid.append(calendar.get(Calendar.MINUTE));
guid.append(calendar.get(Calendar.SECOND));
guid.append(calendar.get(Calendar.MILLISECOND));
double random = Math.random();
guid.append(random);

return guid.toString();
}
}
114 changes: 48 additions & 66 deletions src/main/java/edu/harvard/iq/dataverse/DOIDataCiteServiceBean.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,7 @@

import edu.harvard.iq.dataverse.settings.SettingsServiceBean;
import edu.harvard.iq.dataverse.util.SystemConfig;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.SimpleTimeZone;
import java.util.TimeZone;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.EJB;
Expand All @@ -25,9 +18,9 @@
* @author luopc
*/
@Stateless
public class DOIDataCiteServiceBean {
public class DOIDataCiteServiceBean extends AbstractIdServiceBean {

private static final Logger logger = Logger.getLogger("edu.harvard.iq.dataverse.DOIDataCiteServiceBean");
private static final Logger logger = Logger.getLogger(DOIDataCiteServiceBean.class.getCanonicalName());


@EJB
Expand All @@ -39,13 +32,18 @@ public class DOIDataCiteServiceBean {
@EJB
SystemConfig systemConfig;

private String DOISHOULDER = "";

public DOIDataCiteServiceBean() {

}

public boolean alreadyExists (Dataset dataset){

@Override
public boolean registerWhenPublished() {
return true;
}

@Override
public boolean alreadyExists (Dataset dataset){
logger.log(Level.FINE,"alreadyExists");
boolean alreadyExists;
String identifier = getIdentifierFromDataset(dataset);
try{
Expand All @@ -57,8 +55,10 @@ public boolean alreadyExists (Dataset dataset){
return alreadyExists;
}

@Override
public String createIdentifier(Dataset dataset) throws Exception {
String retString = "";
logger.log(Level.FINE,"createIdentifier");
String retString;
String identifier = getIdentifierFromDataset(dataset);
HashMap metadata = getMetadataFromStudyForCreateIndicator(dataset);
metadata.put("_status", "reserved");
Expand All @@ -75,8 +75,10 @@ public String createIdentifier(Dataset dataset) throws Exception {
}
return retString;
}


@Override
public HashMap getIdentifierMetadata(Dataset dataset) {
logger.log(Level.FINE,"getIdentifierMetadata");
String identifier = getIdentifierFromDataset(dataset);
HashMap metadata = new HashMap();
try {
Expand All @@ -92,7 +94,9 @@ public HashMap getIdentifierMetadata(Dataset dataset) {
return metadata;
}

@Override
public HashMap lookupMetadataFromIdentifier(String protocol, String authority, String separator, String identifier) {
logger.log(Level.FINE,"lookupMetadataFromIdentifier");
String identifierOut = getIdentifierForLookup(protocol, authority, separator, identifier);
HashMap metadata = new HashMap();
try {
Expand All @@ -105,11 +109,15 @@ public HashMap lookupMetadataFromIdentifier(String protocol, String authority, S
return metadata;
}

@Override
public String getIdentifierForLookup(String protocol, String authority, String separator, String identifier) {
logger.log(Level.FINE,"getIdentifierForLookup");
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This method seems the same to me for both EZId and Datacite and I suppose it should become the same for handlenet as well. If true we can pull this one up to the abstract service bean. Any future exception to the rule can still override.

return protocol + ":" + authority + separator + identifier;
}

@Override
public String modifyIdentifier(Dataset dataset, HashMap metadata) throws Exception {
logger.log(Level.FINE,"modifyIdentifier");
String identifier = getIdentifierFromDataset(dataset);
try {
doiDataCiteRegisterService.createIdentifier(identifier, metadata, dataset);
Expand All @@ -125,6 +133,7 @@ public String modifyIdentifier(Dataset dataset, HashMap metadata) throws Excepti
}

public void deleteRecordFromCache(Dataset datasetIn){
logger.log(Level.FINE,"deleteRecordFromCache");
String identifier = getIdentifierFromDataset(datasetIn);
HashMap doiMetadata = new HashMap();
try {
Expand All @@ -151,13 +160,13 @@ public void deleteRecordFromCache(Dataset datasetIn){
logger.log(Level.INFO, "message " + e.getMessage());
throw new RuntimeException(e);
}
return;
}

}



@Override
public void deleteIdentifier(Dataset datasetIn) throws Exception {
logger.log(Level.FINE,"deleteIdentifier");
String identifier = getIdentifierFromDataset(datasetIn);
HashMap doiMetadata = new HashMap();
try {
Expand Down Expand Up @@ -192,6 +201,7 @@ public void deleteIdentifier(Dataset datasetIn) throws Exception {
}

private HashMap getUpdateMetadataFromDataset(Dataset datasetIn) {
logger.log(Level.FINE,"getUpdateMetadataFromDataset");
HashMap<String, String> metadata = new HashMap<String, String>();

String authorString = datasetIn.getLatestVersion().getAuthorsStr();
Expand All @@ -213,7 +223,9 @@ private HashMap getUpdateMetadataFromDataset(Dataset datasetIn) {
return metadata;
}

private HashMap getMetadataFromStudyForCreateIndicator(Dataset datasetIn) {
@Override
public HashMap getMetadataFromStudyForCreateIndicator(Dataset datasetIn) {
logger.log(Level.FINE,"getMetadataFromStudyForCreateIndicator");
HashMap<String, String> metadata = new HashMap<String, String>();

String authorString = datasetIn.getLatestVersion().getAuthorsStr();
Expand All @@ -234,78 +246,48 @@ private HashMap getMetadataFromStudyForCreateIndicator(Dataset datasetIn) {
metadata.put("_target", getTargetUrl(datasetIn));
return metadata;
}


@Override
public HashMap getMetadataFromDatasetForTargetURL(Dataset datasetIn) {
HashMap<String, String> metadata = new HashMap<>();
logger.log(Level.FINE,"getMetadataFromDatasetForTargetURL");
HashMap<String, String> metadata = new HashMap<>();
metadata.put("_target", getTargetUrl(datasetIn));
return metadata;
}

private String getTargetUrl(Dataset datasetIn){
return systemConfig.getDataverseSiteUrl() + Dataset.TARGET_URL + datasetIn.getGlobalId();
logger.log(Level.FINE,"getTargetUrl");
return systemConfig.getDataverseSiteUrl() + Dataset.TARGET_URL + datasetIn.getGlobalId();
}

private String getIdentifierFromDataset(Dataset dataset) {
@Override
public String getIdentifierFromDataset(Dataset dataset) {
logger.log(Level.FINE,"getIdentifierFromDataset");
return dataset.getGlobalId();
}

public void publicizeIdentifier(Dataset dataset) throws Exception {
updateIdentifierStatus(dataset, "public");
@Override
public boolean publicizeIdentifier(Dataset dataset) {
logger.log(Level.FINE,"publicizeIdentifier");
return updateIdentifierStatus(dataset, "public");
}

private void updateIdentifierStatus(Dataset dataset, String statusIn) throws Exception {
private boolean updateIdentifierStatus(Dataset dataset, String statusIn) {
logger.log(Level.FINE,"updateIdentifierStatus");
String identifier = getIdentifierFromDataset(dataset);
HashMap metadata = getUpdateMetadataFromDataset(dataset);
metadata.put("_target", getTargetUrl(dataset));
metadata.put("_status", statusIn);
try {
doiDataCiteRegisterService.createIdentifier(identifier, metadata, dataset);
return true;
} catch (Exception e) {
logger.log(Level.INFO, "modifyMetadata failed");
logger.log(Level.INFO, "String " + e.toString());
logger.log(Level.INFO, "localized message " + e.getLocalizedMessage());
logger.log(Level.INFO, "cause " + e.getCause());
logger.log(Level.INFO, "message " + e.getMessage());
throw e;
return false;
}
}

public static String generateYear() {
StringBuilder guid = new StringBuilder();

// Create a calendar to get the date formatted properly
String[] ids = TimeZone.getAvailableIDs(-8 * 60 * 60 * 1000);
SimpleTimeZone pdt = new SimpleTimeZone(-8 * 60 * 60 * 1000, ids[0]);
pdt.setStartRule(Calendar.APRIL, 1, Calendar.SUNDAY, 2 * 60 * 60 * 1000);
pdt.setEndRule(Calendar.OCTOBER, -1, Calendar.SUNDAY, 2 * 60 * 60 * 1000);
Calendar calendar = new GregorianCalendar(pdt);
Date trialTime = new Date();
calendar.setTime(trialTime);
guid.append(calendar.get(Calendar.YEAR));

return guid.toString();
}

public static String generateTimeString() {
StringBuilder guid = new StringBuilder();

// Create a calendar to get the date formatted properly
String[] ids = TimeZone.getAvailableIDs(-8 * 60 * 60 * 1000);
SimpleTimeZone pdt = new SimpleTimeZone(-8 * 60 * 60 * 1000, ids[0]);
pdt.setStartRule(Calendar.APRIL, 1, Calendar.SUNDAY, 2 * 60 * 60 * 1000);
pdt.setEndRule(Calendar.OCTOBER, -1, Calendar.SUNDAY, 2 * 60 * 60 * 1000);
Calendar calendar = new GregorianCalendar(pdt);
Date trialTime = new Date();
calendar.setTime(trialTime);
guid.append(calendar.get(Calendar.YEAR));
guid.append(calendar.get(Calendar.DAY_OF_YEAR));
guid.append(calendar.get(Calendar.HOUR_OF_DAY));
guid.append(calendar.get(Calendar.MINUTE));
guid.append(calendar.get(Calendar.SECOND));
guid.append(calendar.get(Calendar.MILLISECOND));
double random = Math.random();
guid.append(random);

return guid.toString();
}
}
Loading