-
Notifications
You must be signed in to change notification settings - Fork 485
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
Changes from 13 commits
84eb5d4
b1f171b
c4c246f
3d87237
0ba96ca
edd75c8
c92614c
a56a771
cfd7f26
5c35dc4
322ce23
1558680
cafe13b
354e624
592b18b
ee0e6e0
a43e2e9
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
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 { | ||
|
||
@Override | ||
public String generateYear() | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||
{ | ||
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(); | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -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; | ||
|
@@ -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 | ||
|
@@ -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{ | ||
|
@@ -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"); | ||
|
@@ -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 { | ||
|
@@ -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 { | ||
|
@@ -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"); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe 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); | ||
|
@@ -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 { | ||
|
@@ -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 { | ||
|
@@ -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(); | ||
|
@@ -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(); | ||
|
@@ -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(); | ||
} | ||
} |
There was a problem hiding this comment.
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!