maven-compiler-plugin
3.3
diff --git a/src/main/java/pt/ptcris/ORCIDClient.java b/src/main/java/pt/ptcris/ORCIDClient.java
index 6dffab1..b71dc1e 100644
--- a/src/main/java/pt/ptcris/ORCIDClient.java
+++ b/src/main/java/pt/ptcris/ORCIDClient.java
@@ -77,4 +77,12 @@ public interface ORCIDClient {
*/
public ActivitiesSummary getActivitiesSummary() throws OrcidClientException;
+ /**
+ * The number of worker threads that will be used to communicate with the
+ * ORCID API.
+ *
+ * @return the number of ORCID worker threads
+ */
+ public int threads();
+
}
\ No newline at end of file
diff --git a/src/main/java/pt/ptcris/ORCIDClientImpl.java b/src/main/java/pt/ptcris/ORCIDClientImpl.java
index 128c717..95dcc86 100644
--- a/src/main/java/pt/ptcris/ORCIDClientImpl.java
+++ b/src/main/java/pt/ptcris/ORCIDClientImpl.java
@@ -22,6 +22,7 @@ public class ORCIDClientImpl implements ORCIDClient {
private final OrcidAccessToken orcidToken;
private final OrcidOAuthClient orcidClient;
private final String clientId;
+ private final int threads;
/**
* Instantiates an ORCID client to communicate with the ORCID API.
@@ -38,14 +39,37 @@ public class ORCIDClientImpl implements ORCIDClient {
* the redirect URI for requesting the access token
* @param orcidToken
* the access token to the user ORCID profile
+ * @param threads
+ * the number of ORCID worker threads
*/
public ORCIDClientImpl(String loginUri, String apiUri, String clientId, String clientSecret, String redirectUri,
- OrcidAccessToken orcidToken) {
+ OrcidAccessToken orcidToken, int threads) {
this.orcidToken = orcidToken;
this.clientId = clientId;
-
+ this.threads = threads;
this.orcidClient = new OrcidOAuthClient(loginUri, apiUri, clientId, clientSecret, redirectUri);
}
+
+ /**
+ * Instantiates an ORCID client to communicate with the ORCID API.
+ *
+ * @param loginUri
+ * the login URI of the ORCID service
+ * @param apiUri
+ * the URI of the ORCID API
+ * @param clientId
+ * the id of the ORCID Member API client
+ * @param clientSecret
+ * the secret of the ORCID Member API client
+ * @param redirectUri
+ * the redirect URI for requesting the access token
+ * @param orcidToken
+ * the access token to the user ORCID profile
+ */
+ public ORCIDClientImpl(String loginUri, String apiUri, String clientId, String clientSecret, String redirectUri,
+ OrcidAccessToken orcidToken) {
+ this(loginUri, apiUri, clientId, clientSecret, redirectUri, orcidToken, Runtime.getRuntime().availableProcessors() + 2);
+ }
/**
* {@inheritDoc}
@@ -95,4 +119,12 @@ public ActivitiesSummary getActivitiesSummary() throws OrcidClientException {
return orcidClient.readActivitiesSummary(orcidToken);
}
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public int threads() {
+ return threads;
+ }
+
}
diff --git a/src/main/java/pt/ptcris/PTCRISync.java b/src/main/java/pt/ptcris/PTCRISync.java
index 5afaf18..0dfbd22 100644
--- a/src/main/java/pt/ptcris/PTCRISync.java
+++ b/src/main/java/pt/ptcris/PTCRISync.java
@@ -12,9 +12,9 @@
import org.um.dsi.gavea.orcid.client.exception.OrcidClientException;
import org.um.dsi.gavea.orcid.model.activities.WorkGroup;
-import org.um.dsi.gavea.orcid.model.work.ExternalIdentifier;
+import org.um.dsi.gavea.orcid.model.common.ExternalId;
+import org.um.dsi.gavea.orcid.model.common.ExternalIds;
import org.um.dsi.gavea.orcid.model.work.Work;
-import org.um.dsi.gavea.orcid.model.work.WorkExternalIdentifiers;
import org.um.dsi.gavea.orcid.model.work.WorkSummary;
import pt.ptcris.exceptions.InvalidWorkException;
@@ -47,7 +47,7 @@
*
* The implementation of the service assumes that the local CRIS communicates
* the local productions following the established ORCID schema, according to
- * the Member API 2.0rc1. This uniforms the API and simplifies the
+ * the Member API 2.0rc2. This uniforms the API and simplifies the
* synchronization process. The current version focuses on synchronizing
* research productions, which must be encoded as ORCID {@link Work works}.
*
@@ -264,10 +264,10 @@ private static Map exportBase(ORCIDClient client, L
// the remote work has spurious external identifiers
if (!update.eidsDiff.more.isEmpty()) {
Work localWork = update.preWork;
- WorkExternalIdentifiers weids = new WorkExternalIdentifiers();
- List ids = new ArrayList(update.eidsDiff.same);
- weids.setWorkExternalIdentifier(ids);
- localWork.setExternalIdentifiers(weids);
+ ExternalIds weids = new ExternalIds();
+ List ids = new ArrayList(update.eidsDiff.same);
+ weids.setExternalId(ids);
+ localWork.setExternalIds(weids);
try {
helper.updateWork(update.posWork.getPutCode(), localWork);
result.put(ORCIDHelper.getActivityLocalKey(localWork), PTCRISyncResult.OK_UPD_RESULT);
@@ -287,11 +287,11 @@ private static Map exportBase(ORCIDClient client, L
UpdateRecord update = toUpdate.get(c);
if (!update.eidsDiff.less.isEmpty() || update.eidsDiff.more.isEmpty()) {
Work localWork = update.preWork;
- WorkExternalIdentifiers weids = new WorkExternalIdentifiers();
- List ids = new ArrayList(update.eidsDiff.same);
+ ExternalIds weids = new ExternalIds();
+ List ids = new ArrayList(update.eidsDiff.same);
ids.addAll(update.eidsDiff.less);
- weids.setWorkExternalIdentifier(ids);
- localWork.setExternalIdentifiers(weids);
+ weids.setExternalId(ids);
+ localWork.setExternalIds(weids);
try {
helper.updateWork(update.posWork.getPutCode(), localWork);
result.put(ORCIDHelper.getActivityLocalKey(localWork), PTCRISyncResult.OK_UPD_RESULT);
@@ -658,11 +658,11 @@ public static List importUpdates(ORCIDClient client, List localWorks
for (Work mathingLocalWork : matchingLocalWorks.keySet()) {
if (!ORCIDHelper.hasNewIDs(mathingLocalWork, orcidWork)) {
Work workUpdate = ORCIDHelper.clone(mathingLocalWork);
- WorkExternalIdentifiers weids = new WorkExternalIdentifiers();
- List neids = new ArrayList(matchingLocalWorks.get(mathingLocalWork).more);
- weids.setWorkExternalIdentifier(neids);
+ ExternalIds weids = new ExternalIds();
+ List neids = new ArrayList(matchingLocalWorks.get(mathingLocalWork).more);
+ weids.setExternalId(neids);
ORCIDHelper.setWorkLocalKey(workUpdate, ORCIDHelper.getActivityLocalKey(mathingLocalWork));
- workUpdate.setExternalIdentifiers(weids);
+ workUpdate.setExternalIds(weids);
workUpdate.setTitle(null);
workUpdate.setType(null);
workUpdate.setPublicationDate(null);
diff --git a/src/main/java/pt/ptcris/PTCRISyncResult.java b/src/main/java/pt/ptcris/PTCRISyncResult.java
index 6e04aec..f051e1d 100644
--- a/src/main/java/pt/ptcris/PTCRISyncResult.java
+++ b/src/main/java/pt/ptcris/PTCRISyncResult.java
@@ -12,7 +12,7 @@
*/
public final class PTCRISyncResult {
- public static final int ADDOK = -10;
+ public static final int ADDOK = -5;
public static final int UPDATEOK = -10;
public static final int UPTODATE = -20;
public static final int INVALID = -30;
diff --git a/src/main/java/pt/ptcris/utils/ExternalIdsDiff.java b/src/main/java/pt/ptcris/utils/ExternalIdsDiff.java
index c4b6925..5d481c6 100644
--- a/src/main/java/pt/ptcris/utils/ExternalIdsDiff.java
+++ b/src/main/java/pt/ptcris/utils/ExternalIdsDiff.java
@@ -5,9 +5,9 @@
import java.util.List;
import java.util.Set;
+import org.um.dsi.gavea.orcid.model.common.ExternalId;
+import org.um.dsi.gavea.orcid.model.common.ExternalIds;
import org.um.dsi.gavea.orcid.model.common.RelationshipType;
-import org.um.dsi.gavea.orcid.model.work.ExternalIdentifier;
-import org.um.dsi.gavea.orcid.model.work.WorkExternalIdentifiers;
/**
* Calculates and stores the symmetric difference between two sets of
@@ -19,17 +19,17 @@ public final class ExternalIdsDiff {
/**
* External identifiers removed from the first set.
*/
- public final Set less = new HashSet();
+ public final Set less = new HashSet();
/**
* External identifiers preserved in both sets.
*/
- public final Set same = new HashSet();
+ public final Set same = new HashSet();
/**
* External identifiers inserted in the second set.
*/
- public final Set more = new HashSet();
+ public final Set more = new HashSet();
/**
* Calculates and stores the symmetric difference between two sets of
@@ -40,15 +40,15 @@ public final class ExternalIdsDiff {
* @param eids2
* the second set of external identifiers
*/
- public ExternalIdsDiff(WorkExternalIdentifiers weids1, WorkExternalIdentifiers weids2) {
- List eids1 = new LinkedList();
- List eids2 = new LinkedList();
+ public ExternalIdsDiff(ExternalIds weids1, ExternalIds weids2) {
+ List eids1 = new LinkedList();
+ List eids2 = new LinkedList();
- if (weids1 != null && weids1.getWorkExternalIdentifier() != null)
- eids1.addAll(weids1.getWorkExternalIdentifier());
+ if (weids1 != null && weids1.getExternalId() != null)
+ eids1.addAll(weids1.getExternalId());
- if (weids2 != null && weids2.getWorkExternalIdentifier() != null)
- eids2.addAll(weids2.getWorkExternalIdentifier());
+ if (weids2 != null && weids2.getExternalId() != null)
+ eids2.addAll(weids2.getExternalId());
calculateDifference(eids1, eids2);
}
@@ -68,14 +68,14 @@ public ExternalIdsDiff(WorkExternalIdentifiers weids1, WorkExternalIdentifiers w
* @param eids2
* another set of UIDs
*/
- private void calculateDifference(List eids1, List eids2) {
+ private void calculateDifference(List eids1, List eids2) {
less.addAll(eids1);
more.addAll(eids2);
- for (final ExternalIdentifier eid2 : eids2) {
- for (final ExternalIdentifier eid1 : eids1) {
- if (sameButNotBothPartOf(eid2.getRelationship(),eid1.getRelationship())
- && eid1.getExternalIdentifierId().equals(eid2.getExternalIdentifierId())
- && eid1.getExternalIdentifierType().equals(eid2.getExternalIdentifierType())) {
+ for (final ExternalId eid2 : eids2) {
+ for (final ExternalId eid1 : eids1) {
+ if (sameButNotBothPartOf(eid2.getExternalIdRelationship(),eid1.getExternalIdRelationship())
+ && eid1.getExternalIdValue().equals(eid2.getExternalIdValue())
+ && eid1.getExternalIdType().equals(eid2.getExternalIdType())) {
same.add(eid2);
less.remove(eid1);
more.remove(eid2);
diff --git a/src/main/java/pt/ptcris/utils/ORCIDHelper.java b/src/main/java/pt/ptcris/utils/ORCIDHelper.java
index ce3a537..454b026 100644
--- a/src/main/java/pt/ptcris/utils/ORCIDHelper.java
+++ b/src/main/java/pt/ptcris/utils/ORCIDHelper.java
@@ -17,15 +17,13 @@
import org.apache.logging.log4j.Logger;
import org.um.dsi.gavea.orcid.client.exception.OrcidClientException;
import org.um.dsi.gavea.orcid.model.activities.ActivitiesSummary;
-import org.um.dsi.gavea.orcid.model.activities.Identifier;
import org.um.dsi.gavea.orcid.model.activities.WorkGroup;
-import org.um.dsi.gavea.orcid.model.common.ActivitySummary;
import org.um.dsi.gavea.orcid.model.common.ClientId;
+import org.um.dsi.gavea.orcid.model.common.ElementSummary;
+import org.um.dsi.gavea.orcid.model.common.ExternalId;
+import org.um.dsi.gavea.orcid.model.common.ExternalIds;
import org.um.dsi.gavea.orcid.model.common.RelationshipType;
-import org.um.dsi.gavea.orcid.model.work.ExternalIdentifier;
-import org.um.dsi.gavea.orcid.model.work.ExternalIdentifierType;
import org.um.dsi.gavea.orcid.model.work.Work;
-import org.um.dsi.gavea.orcid.model.work.WorkExternalIdentifiers;
import org.um.dsi.gavea.orcid.model.work.WorkSummary;
import org.um.dsi.gavea.orcid.model.work.WorkType;
@@ -43,16 +41,26 @@
public class ORCIDHelper {
public static final String INVALID_EXTERNALIDENTIFIERS = "ExternalIdentifiers";
- public static final String INVALID_WORKEXTERNALIDENTIFIERS = "WorkExternalIdentifiers";
public static final String INVALID_TITLE = "Title";
public static final String INVALID_PUBLICATIONDATE = "PublicationDate";
public static final String INVALID_YEAR = "Year";
public static final String INVALID_TYPE = "Type";
-
- /**
- * Whether to multi-thread the "get" of full works.
- */
- private final boolean threaded = true;
+
+ public enum EIdType {
+ OTHER_ID("other-id"), AGR("agr"), ARXIV("arxiv"), ASIN("asin"),
+ BIBCODE("bibcode"), CBA("cba"), CIT("cit"), CTX("ctx"), DOI("doi"),
+ EID("eid"), ETHOS("ethos"), HANDLE("handle"), HIR("hir"), ISBN("isbn"),
+ ISSN("issn"), JFM("jfm"), JSTOR("jstor"), LCCN("lccn"), MR("mr"),
+ OCLC("oclc"), OL("ol"), OSTI("osti"), PAT("pat"), PMC("pmc"),
+ PMID("pmid"), RFC("rfc"), SOURCE_WORK_ID("source-work-id"),
+ SSRN("ssrn"), URI("uri"), URN("urn"), WOSUID("wosuid"), ZBL("zbl");
+
+ public final String value;
+
+ private EIdType(String value) {
+ this.value = value;
+ }
+ }
private static final Logger _log = LogManager.getLogger(ORCIDHelper.class);
@@ -62,7 +70,7 @@ public class ORCIDHelper {
*/
public final ORCIDClient client;
- private ExecutorService executor = Executors.newFixedThreadPool(10);
+ private ExecutorService executor;
/**
* Initializes the helper with a given ORCID client.
@@ -74,6 +82,7 @@ public class ORCIDHelper {
*/
public ORCIDHelper(ORCIDClient orcidClient) {
this.client = orcidClient;
+ if (client.threads() > 1) executor = Executors.newFixedThreadPool(client.threads());
}
/**
@@ -161,7 +170,7 @@ public void getFullWork(WorkSummary mergedWork, Map cb)
if (mergedWork == null) throw new NullPointerException("Can't get null work.");
_log.debug("[getFullWork] " + mergedWork.getPutCode());
- if (threaded) {
+ if (client.threads() > 1) {
final ORCIDGetWorker worker = new ORCIDGetWorker(mergedWork,client, cb, _log);
executor.execute(worker);
} else {
@@ -214,7 +223,7 @@ public Work getFullWork(WorkSummary mergedWork)
* the original summary
*/
static void finalizeGet(Work fullWork, WorkSummary sumWork) {
- fullWork.setExternalIdentifiers(sumWork.getExternalIdentifiers());
+ fullWork.setExternalIds(sumWork.getExternalIds());
cleanWorkLocalKey(fullWork);
}
@@ -320,15 +329,13 @@ public void deleteWork(BigInteger putcode)
* if the process was interrupted
*/
public boolean waitWorkers() throws InterruptedException {
- if (!threaded) return true;
+ if (client.threads() <= 1) return true;
executor.shutdown();
final boolean timeout = executor.awaitTermination(100, TimeUnit.SECONDS);
executor = Executors.newFixedThreadPool(100);
return timeout;
}
-
-
/**
@@ -341,7 +348,7 @@ public boolean waitWorkers() throws InterruptedException {
* @throws NullPointerException
* if the activity is null
*/
- public static BigInteger getActivityLocalKey(ActivitySummary act) throws NullPointerException {
+ public static BigInteger getActivityLocalKey(ElementSummary act) throws NullPointerException {
if (act == null)
throw new NullPointerException("Can't get local key.");
@@ -357,7 +364,7 @@ public static BigInteger getActivityLocalKey(ActivitySummary act) throws NullPoi
* @throws NullPointerException
* if the activity is null
*/
- public static void setWorkLocalKey(ActivitySummary act, BigInteger key) throws NullPointerException {
+ public static void setWorkLocalKey(ElementSummary act, BigInteger key) throws NullPointerException {
if (act == null)
throw new NullPointerException("Can't set local key.");
@@ -373,7 +380,7 @@ public static void setWorkLocalKey(ActivitySummary act, BigInteger key) throws N
* @throws NullPointerException
* if the activity is null
*/
- private static void cleanWorkLocalKey(ActivitySummary act) throws NullPointerException {
+ private static void cleanWorkLocalKey(ElementSummary act) throws NullPointerException {
if (act == null)
throw new NullPointerException("Can't clear local key.");
@@ -401,7 +408,7 @@ public static Map getExternalIdsDiff(WorkSummary work, Co
final Map matches = new HashMap();
for (Work match : works) {
final ExternalIdsDiff diff =
- new ExternalIdsDiff(match.getExternalIdentifiers(), work.getExternalIdentifiers());
+ new ExternalIdsDiff(match.getExternalIds(), work.getExternalIds());
if (!diff.same.isEmpty())
matches.put(match, diff);
}
@@ -425,8 +432,8 @@ public static Map getExternalIdsDiff(WorkSummary work, Co
*/
public static boolean hasNewIDs(Work preWork, WorkSummary posWork) {
final ExternalIdsDiff diff = new ExternalIdsDiff(
- preWork.getExternalIdentifiers(),
- posWork.getExternalIdentifiers());
+ preWork.getExternalIds(),
+ posWork.getExternalIds());
return diff.more.isEmpty();
}
@@ -483,8 +490,8 @@ private static boolean isIDsUpToDate(Work preWork, WorkSummary posWork)
throw new NullPointerException("Can't test null works.");
final ExternalIdsDiff diff = new ExternalIdsDiff(
- preWork.getExternalIdentifiers(),
- posWork.getExternalIdentifiers());
+ preWork.getExternalIds(),
+ posWork.getExternalIds());
return diff.more.isEmpty() && diff.less.isEmpty();
}
@@ -505,8 +512,8 @@ private static boolean isIDsUpToDate(Work preWork, Work posWork)
throw new NullPointerException("Can't test null works.");
final ExternalIdsDiff diff = new ExternalIdsDiff(
- preWork.getExternalIdentifiers(),
- posWork.getExternalIdentifiers());
+ preWork.getExternalIds(),
+ posWork.getExternalIds());
return diff.more.isEmpty() && diff.less.isEmpty();
}
@@ -584,6 +591,8 @@ private static boolean isMetaUpToDate(Work preWork, Work posWork)
*
* The considered fields are: external identifiers, title, publication date
* (year), work type. All these meta-data is available in work summaries.
+ * The publication date is not necessary for data sets and research
+ * techniques.
*
* TODO: contributors are not being considered as they are not contained in
* the summaries.
@@ -599,19 +608,22 @@ public static Set testMinimalQuality(Work work) throws NullPointerExcept
throw new NullPointerException("Can't test null work.");
final Set res = new HashSet();
- if (work.getExternalIdentifiers() == null)
+ if (work.getExternalIds() == null)
res.add(INVALID_EXTERNALIDENTIFIERS);
- else if (work.getExternalIdentifiers().getWorkExternalIdentifier() == null
- || work.getExternalIdentifiers().getWorkExternalIdentifier().isEmpty())
- res.add(INVALID_WORKEXTERNALIDENTIFIERS);
+ else if (work.getExternalIds().getExternalId() == null
+ || work.getExternalIds().getExternalId().isEmpty())
+ res.add(INVALID_EXTERNALIDENTIFIERS);
+ else
+ for (ExternalId eid : work.getExternalIds().getExternalId())
+ if (!validEIdType(eid.getExternalIdType())) res.add(INVALID_EXTERNALIDENTIFIERS);
if (work.getTitle() == null)
res.add(INVALID_TITLE);
else if (work.getTitle().getTitle() == null)
res.add(INVALID_TITLE);
if (work.getType() == null)
res.add(INVALID_TYPE);
- if (work.getType() == null
- || (work.getType() != WorkType.DATA_SET && work.getType() != WorkType.RESEARCH_TECHNIQUE)) {
+ if (work.getType() == null ||
+ (work.getType() != WorkType.DATA_SET && work.getType() != WorkType.RESEARCH_TECHNIQUE)) {
if (work.getPublicationDate() == null)
res.add(INVALID_PUBLICATIONDATE);
else if (work.getPublicationDate().getYear() == null)
@@ -619,13 +631,15 @@ else if (work.getPublicationDate().getYear() == null)
}
return res;
}
-
+
/**
* Tests whether a work has minimal quality to be synchronized, by
* inspecting its meta-data, returns the detected invalid fields.
*
* The considered fields are: external identifiers, title, publication date
* (year), work type. All these meta-data is available in work summaries.
+ * The publication date is not necessary for data sets and research
+ * techniques.
*
* TODO: contributors are not being considered as they are not contained in
* the summaries.
@@ -641,19 +655,22 @@ public static Set testMinimalQuality(WorkSummary work) throws NullPointe
throw new NullPointerException("Can't test null work.");
final Set res = new HashSet();
- if (work.getExternalIdentifiers() == null)
+ if (work.getExternalIds() == null)
+ res.add(INVALID_EXTERNALIDENTIFIERS);
+ else if (work.getExternalIds().getExternalId() == null
+ || work.getExternalIds().getExternalId().isEmpty())
res.add(INVALID_EXTERNALIDENTIFIERS);
- else if (work.getExternalIdentifiers().getWorkExternalIdentifier() == null
- || work.getExternalIdentifiers().getWorkExternalIdentifier().isEmpty())
- res.add(INVALID_WORKEXTERNALIDENTIFIERS);
+ else
+ for (ExternalId eid : work.getExternalIds().getExternalId())
+ if (!validEIdType(eid.getExternalIdType())) res.add(INVALID_EXTERNALIDENTIFIERS);
if (work.getTitle() == null)
res.add(INVALID_TITLE);
else if (work.getTitle().getTitle() == null)
res.add(INVALID_TITLE);
if (work.getType() == null)
res.add(INVALID_TYPE);
- if (work.getType() == null
- || (work.getType() != WorkType.DATA_SET && work.getType() != WorkType.RESEARCH_TECHNIQUE)) {
+ if (work.getType() == null ||
+ (work.getType() != WorkType.DATA_SET && work.getType() != WorkType.RESEARCH_TECHNIQUE)) {
if (work.getPublicationDate() == null)
res.add(INVALID_PUBLICATIONDATE);
else if (work.getPublicationDate().getYear() == null)
@@ -710,6 +727,24 @@ public static void tryMinimalQuality(WorkSummary work) throws InvalidWorkExcepti
}
}
+ /**
+ * Test whether a give external identifiers type is valid. Elements of the
+ * enum {@link EIdType} take the shape of upper-case valid EId types, with
+ * slashes replaced by underscores.
+ *
+ * @param eid
+ * a potential EId type
+ * @return whether the string is a valid EId type
+ */
+ private static boolean validEIdType(String eid) {
+ try {
+ EIdType.valueOf(eid.replace('-', '_').toUpperCase());
+ return true;
+ } catch (Exception e) {
+ return false;
+ }
+ }
+
/**
* Merges a work group into a single work summary. Simply selects the
* meta-data from the first work of the group (i.e., the preferred one) and
@@ -733,16 +768,15 @@ private static WorkSummary groupToWork(WorkGroup group)
final WorkSummary preferred = group.getWorkSummary().get(0);
final WorkSummary dummy = clone(preferred);
- final List eids = new ArrayList();
- for (Identifier id : group.getIdentifiers().getIdentifier()) {
- final ExternalIdentifier eid = new ExternalIdentifier();
- eid.setRelationship(RelationshipType.SELF);
- eid.setExternalIdentifierType(ExternalIdentifierType.fromValue(id
- .getExternalIdentifierType().toLowerCase()));
- eid.setExternalIdentifierId(id.getExternalIdentifierId());
+ final List eids = new ArrayList();
+ for (ExternalId id : group.getExternalIds().getExternalId()) {
+ final ExternalId eid = new ExternalId();
+ eid.setExternalIdRelationship(RelationshipType.SELF);
+ eid.setExternalIdType(id.getExternalIdType().toLowerCase());
+ eid.setExternalIdValue(id.getExternalIdValue());
eids.add(eid);
}
- dummy.setExternalIdentifiers(new WorkExternalIdentifiers(eids));
+ dummy.setExternalIds(new ExternalIds(eids));
return dummy;
}
@@ -813,7 +847,7 @@ private static String getPubYear(WorkSummary work) {
* the target summary
* @throws NullPointerException if either argument is null
*/
- private static void copy(ActivitySummary from, ActivitySummary to)
+ private static void copy(ElementSummary from, ElementSummary to)
throws NullPointerException {
if (from == null || to == null)
throw new NullPointerException("Can't copy null works.");
@@ -842,7 +876,7 @@ public static WorkSummary clone(WorkSummary work) {
dummy.setPublicationDate(work.getPublicationDate());
dummy.setTitle(work.getTitle());
dummy.setType(work.getType());
- dummy.setExternalIdentifiers(work.getExternalIdentifiers());
+ dummy.setExternalIds(work.getExternalIds());
return dummy;
}
@@ -861,7 +895,7 @@ public static Work clone(Work work) {
dummy.setPublicationDate(work.getPublicationDate());
dummy.setTitle(work.getTitle());
dummy.setType(work.getType());
- dummy.setExternalIdentifiers(work.getExternalIdentifiers());
+ dummy.setExternalIds(work.getExternalIds());
dummy.setContributors(work.getContributors());
dummy.setCitation(work.getCitation());
diff --git a/src/test/java/pt/ptcris/test/PTCRISExample.java b/src/test/java/pt/ptcris/test/PTCRISExample.java
index 5bf1d55..8f46597 100644
--- a/src/test/java/pt/ptcris/test/PTCRISExample.java
+++ b/src/test/java/pt/ptcris/test/PTCRISExample.java
@@ -11,11 +11,10 @@
import java.util.logging.SimpleFormatter;
import org.um.dsi.gavea.orcid.client.exception.OrcidClientException;
+import org.um.dsi.gavea.orcid.model.common.ExternalId;
+import org.um.dsi.gavea.orcid.model.common.ExternalIds;
import org.um.dsi.gavea.orcid.model.common.RelationshipType;
-import org.um.dsi.gavea.orcid.model.work.ExternalIdentifier;
-import org.um.dsi.gavea.orcid.model.work.ExternalIdentifierType;
import org.um.dsi.gavea.orcid.model.work.Work;
-import org.um.dsi.gavea.orcid.model.work.WorkExternalIdentifiers;
import org.um.dsi.gavea.orcid.model.work.WorkTitle;
import org.um.dsi.gavea.orcid.model.work.WorkType;
@@ -91,16 +90,16 @@ private static Work work0() {
title.setTitle("Yet Another Work Updated Once");
work.setTitle(title);
- ExternalIdentifier e = new ExternalIdentifier();
- e.setRelationship(RelationshipType.SELF);
- e.setExternalIdentifierId("3000");
- e.setExternalIdentifierType(ExternalIdentifierType.DOI);
+ ExternalId e = new ExternalId();
+ e.setExternalIdRelationship(RelationshipType.SELF);
+ e.setExternalIdValue("3000");
+ e.setExternalIdType("DOI");
- WorkExternalIdentifiers uids = new WorkExternalIdentifiers();
+ ExternalIds uids = new ExternalIds();
- uids.getWorkExternalIdentifier().add(e);
+ uids.getExternalId().add(e);
- work.setExternalIdentifiers(uids);
+ work.setExternalIds(uids);
work.setType(WorkType.CONFERENCE_PAPER);
@@ -113,22 +112,22 @@ private static Work work1() {
title.setTitle("A Work Updated Once");
work.setTitle(title);
- ExternalIdentifier e = new ExternalIdentifier();
- e.setRelationship(RelationshipType.SELF);
- e.setExternalIdentifierId("4000");
- e.setExternalIdentifierType(ExternalIdentifierType.EID);
+ ExternalId e = new ExternalId();
+ e.setExternalIdRelationship(RelationshipType.SELF);
+ e.setExternalIdValue("4000");
+ e.setExternalIdType("EID");
- ExternalIdentifier e1 = new ExternalIdentifier();
- e1.setRelationship(RelationshipType.SELF);
- e1.setExternalIdentifierId("00001");
- e1.setExternalIdentifierType(ExternalIdentifierType.DOI);
+ ExternalId e1 = new ExternalId();
+ e1.setExternalIdRelationship(RelationshipType.SELF);
+ e1.setExternalIdValue("00001");
+ e1.setExternalIdType("DOI");
- WorkExternalIdentifiers uids = new WorkExternalIdentifiers();
+ ExternalIds uids = new ExternalIds();
- uids.getWorkExternalIdentifier().add(e);
- uids.getWorkExternalIdentifier().add(e1);
+ uids.getExternalId().add(e);
+ uids.getExternalId().add(e1);
- work.setExternalIdentifiers(uids);
+ work.setExternalIds(uids);
work.setType(WorkType.CONFERENCE_PAPER);
@@ -141,18 +140,18 @@ private static Work work2() {
title.setTitle("Another Work Updated Twice");
work.setTitle(title);
- ExternalIdentifier e = new ExternalIdentifier();
- e.setRelationship(RelationshipType.SELF);
+ ExternalId e = new ExternalId();
+ e.setExternalIdRelationship(RelationshipType.SELF);
// avoids conflicts
- e.setExternalIdentifierId(String.valueOf(System.currentTimeMillis()));
+ e.setExternalIdValue(String.valueOf(System.currentTimeMillis()));
- e.setExternalIdentifierType(ExternalIdentifierType.DOI);
+ e.setExternalIdType("DOI");
- WorkExternalIdentifiers uids = new WorkExternalIdentifiers();
+ ExternalIds uids = new ExternalIds();
- uids.getWorkExternalIdentifier().add(e);
+ uids.getExternalId().add(e);
- work.setExternalIdentifiers(uids);
+ work.setExternalIds(uids);
work.setType(WorkType.JOURNAL_ARTICLE);
diff --git a/src/test/java/pt/ptcris/test/TestHelper.java b/src/test/java/pt/ptcris/test/TestHelper.java
index 1ecd0c5..b62fe6d 100644
--- a/src/test/java/pt/ptcris/test/TestHelper.java
+++ b/src/test/java/pt/ptcris/test/TestHelper.java
@@ -6,18 +6,18 @@
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;
+import org.um.dsi.gavea.orcid.model.common.ExternalId;
+import org.um.dsi.gavea.orcid.model.common.ExternalIds;
import org.um.dsi.gavea.orcid.model.common.FuzzyDate;
import org.um.dsi.gavea.orcid.model.common.FuzzyDate.Year;
import org.um.dsi.gavea.orcid.model.common.RelationshipType;
-import org.um.dsi.gavea.orcid.model.work.ExternalIdentifier;
-import org.um.dsi.gavea.orcid.model.work.ExternalIdentifierType;
import org.um.dsi.gavea.orcid.model.work.Work;
-import org.um.dsi.gavea.orcid.model.work.WorkExternalIdentifiers;
import org.um.dsi.gavea.orcid.model.work.WorkTitle;
import org.um.dsi.gavea.orcid.model.work.WorkType;
import pt.ptcris.handlers.ProgressHandler;
import pt.ptcris.utils.ORCIDHelper;
+import pt.ptcris.utils.ORCIDHelper.EIdType;
public class TestHelper {
@@ -26,8 +26,8 @@ public class TestHelper {
public static Work work(BigInteger key, String meta) {
Work work = new Work();
- WorkExternalIdentifiers uids = new WorkExternalIdentifiers();
- work.setExternalIdentifiers(uids);
+ ExternalIds uids = new ExternalIds();
+ work.setExternalIds(uids);
work.setPutCode(key);
@@ -51,12 +51,57 @@ public static Work work(BigInteger key, String meta) {
public static Work workDOI(BigInteger key, String meta, String doi) {
Work work = work(key, meta);
- ExternalIdentifier e1 = new ExternalIdentifier();
- e1.setRelationship(RelationshipType.SELF);
- e1.setExternalIdentifierId(doi);
- e1.setExternalIdentifierType(ExternalIdentifierType.DOI);
+ ExternalId e1 = new ExternalId();
+ e1.setExternalIdRelationship(RelationshipType.SELF);
+ e1.setExternalIdValue(doi);
+ e1.setExternalIdType("doi");
- work.getExternalIdentifiers().getWorkExternalIdentifier().add(e1);
+ work.getExternalIds().getExternalId().add(e1);
+
+ return work;
+ }
+
+ public static Work workUnk(BigInteger key, String meta, String doi) {
+ Work work = work(key, meta);
+
+ ExternalId e1 = new ExternalId();
+ e1.setExternalIdRelationship(RelationshipType.SELF);
+ e1.setExternalIdValue(doi);
+ e1.setExternalIdType("ukn");
+
+ work.getExternalIds().getExternalId().add(e1);
+
+ return work;
+ }
+
+ public static Work workDOIUnk(BigInteger key, String meta, String doi, String eid) {
+ Work work = workDOI(key, meta, doi);
+
+ ExternalId e = new ExternalId();
+ e.setExternalIdRelationship(RelationshipType.SELF);
+ e.setExternalIdValue(eid);
+ e.setExternalIdType("wosuid-");
+
+ work.getExternalIds().getExternalId().add(e);
+ return work;
+ }
+
+ public static Work workOtherOtherDOI(BigInteger key, String meta, String doi, String eid, String eid2) {
+ Work work = workDOI(key, meta, doi);
+
+ ExternalId e = new ExternalId();
+ e.setExternalIdRelationship(RelationshipType.SELF);
+ e.setExternalIdValue(eid);
+ e.setExternalIdType(EIdType.OTHER_ID.value);
+
+ work.getExternalIds().getExternalId().add(e);
+
+ ExternalId e1 = new ExternalId();
+ e1.setExternalIdRelationship(RelationshipType.SELF);
+ e1.setExternalIdValue(eid2);
+ e1.setExternalIdType(EIdType.OTHER_ID.value);
+
+ work.getExternalIds().getExternalId().add(e1);
return work;
}
@@ -64,12 +109,12 @@ public static Work workDOI(BigInteger key, String meta, String doi) {
public static Work workHANDLE(BigInteger key, String meta, String handle) {
Work work = work(key, meta);
- ExternalIdentifier e1 = new ExternalIdentifier();
- e1.setRelationship(RelationshipType.SELF);
- e1.setExternalIdentifierId(handle);
- e1.setExternalIdentifierType(ExternalIdentifierType.HANDLE);
+ ExternalId e1 = new ExternalId();
+ e1.setExternalIdRelationship(RelationshipType.SELF);
+ e1.setExternalIdValue(handle);
+ e1.setExternalIdType("handle");
- work.getExternalIdentifiers().getWorkExternalIdentifier().add(e1);
+ work.getExternalIds().getExternalId().add(e1);
return work;
}
@@ -77,24 +122,24 @@ public static Work workHANDLE(BigInteger key, String meta, String handle) {
public static Work workDOIEID(BigInteger key, String meta, String doi, String eid) {
Work work = workDOI(key, meta, doi);
- ExternalIdentifier e = new ExternalIdentifier();
- e.setRelationship(RelationshipType.SELF);
- e.setExternalIdentifierId(eid);
- e.setExternalIdentifierType(ExternalIdentifierType.EID);
+ ExternalId e = new ExternalId();
+ e.setExternalIdRelationship(RelationshipType.SELF);
+ e.setExternalIdValue(eid);
+ e.setExternalIdType("eid");
- work.getExternalIdentifiers().getWorkExternalIdentifier().add(e);
+ work.getExternalIds().getExternalId().add(e);
return work;
}
public static Work workDOIHANDLE(BigInteger key, String meta, String doi, String handle) {
Work work = workDOI(key, meta, doi);
- ExternalIdentifier e = new ExternalIdentifier();
- e.setRelationship(RelationshipType.SELF);
- e.setExternalIdentifierId(handle);
- e.setExternalIdentifierType(ExternalIdentifierType.HANDLE);
+ ExternalId e = new ExternalId();
+ e.setExternalIdRelationship(RelationshipType.SELF);
+ e.setExternalIdValue(handle);
+ e.setExternalIdType("handle");
- work.getExternalIdentifiers().getWorkExternalIdentifier().add(e);
+ work.getExternalIds().getExternalId().add(e);
return work;
}
@@ -102,12 +147,12 @@ public static Work workDOIHANDLE(BigInteger key, String meta, String doi, String
public static Work workEIDHANDLE(BigInteger key, String meta, String eid, String handle) {
Work work = workHANDLE(key, meta, handle);
- ExternalIdentifier e = new ExternalIdentifier();
- e.setRelationship(RelationshipType.SELF);
- e.setExternalIdentifierId(eid);
- e.setExternalIdentifierType(ExternalIdentifierType.EID);
+ ExternalId e = new ExternalId();
+ e.setExternalIdRelationship(RelationshipType.SELF);
+ e.setExternalIdValue(eid);
+ e.setExternalIdType("eid");
- work.getExternalIdentifiers().getWorkExternalIdentifier().add(e);
+ work.getExternalIds().getExternalId().add(e);
return work;
}
@@ -115,12 +160,12 @@ public static Work workEIDHANDLE(BigInteger key, String meta, String eid, String
public static Work workDOIEIDHANDLE(BigInteger key, String meta, String doi, String eid, String handle) {
Work work = workDOIEID(key, meta, doi, eid);
- ExternalIdentifier e2 = new ExternalIdentifier();
- e2.setRelationship(RelationshipType.SELF);
- e2.setExternalIdentifierId(handle);
- e2.setExternalIdentifierType(ExternalIdentifierType.HANDLE);
+ ExternalId e2 = new ExternalId();
+ e2.setExternalIdRelationship(RelationshipType.SELF);
+ e2.setExternalIdValue(handle);
+ e2.setExternalIdType("handle");
- work.getExternalIdentifiers().getWorkExternalIdentifier().add(e2);
+ work.getExternalIds().getExternalId().add(e2);
return work;
}
@@ -128,12 +173,12 @@ public static Work workDOIEIDHANDLE(BigInteger key, String meta, String doi, Str
public static Work workDOIDOIEIDHANDLE(BigInteger key, String meta, String doi1, String doi2, String eid, String handle) {
Work work = workDOIEIDHANDLE(key, meta, doi1, eid, handle);
- ExternalIdentifier e1 = new ExternalIdentifier();
- e1.setRelationship(RelationshipType.SELF);
- e1.setExternalIdentifierId(doi2);
- e1.setExternalIdentifierType(ExternalIdentifierType.DOI);
+ ExternalId e1 = new ExternalId();
+ e1.setExternalIdRelationship(RelationshipType.SELF);
+ e1.setExternalIdValue(doi2);
+ e1.setExternalIdType("doi");
- work.getExternalIdentifiers().getWorkExternalIdentifier().add(e1);
+ work.getExternalIds().getExternalId().add(e1);
return work;
}
diff --git a/src/test/java/pt/ptcris/test/scenarios/Scenario01.java b/src/test/java/pt/ptcris/test/scenarios/Scenario01.java
index 00ccf25..48b6453 100644
--- a/src/test/java/pt/ptcris/test/scenarios/Scenario01.java
+++ b/src/test/java/pt/ptcris/test/scenarios/Scenario01.java
@@ -56,7 +56,7 @@ List expectedImportedInvalidWorks() {
@Override
Set expectedInvalidCodes(BigInteger putCode) {
Set res = new HashSet();
- res.add(ORCIDHelper.INVALID_WORKEXTERNALIDENTIFIERS);
+ res.add(ORCIDHelper.INVALID_EXTERNALIDENTIFIERS);
return res;
}
diff --git a/src/test/java/pt/ptcris/test/scenarios/Scenario02.java b/src/test/java/pt/ptcris/test/scenarios/Scenario02.java
index 24e59fd..046b0d2 100644
--- a/src/test/java/pt/ptcris/test/scenarios/Scenario02.java
+++ b/src/test/java/pt/ptcris/test/scenarios/Scenario02.java
@@ -65,7 +65,7 @@ List expectedImportedInvalidWorks() {
@Override
Set expectedInvalidCodes(BigInteger putCode) {
Set res = new HashSet();
- res.add(ORCIDHelper.INVALID_WORKEXTERNALIDENTIFIERS);
+ res.add(ORCIDHelper.INVALID_EXTERNALIDENTIFIERS);
return res;
}
diff --git a/src/test/java/pt/ptcris/test/scenarios/Scenario03.java b/src/test/java/pt/ptcris/test/scenarios/Scenario03.java
index 7b4f0cc..a13a14f 100644
--- a/src/test/java/pt/ptcris/test/scenarios/Scenario03.java
+++ b/src/test/java/pt/ptcris/test/scenarios/Scenario03.java
@@ -56,7 +56,7 @@ List expectedImportedInvalidWorks() {
@Override
Set expectedInvalidCodes(BigInteger putCode) {
Set res = new HashSet();
- res.add(ORCIDHelper.INVALID_WORKEXTERNALIDENTIFIERS);
+ res.add(ORCIDHelper.INVALID_EXTERNALIDENTIFIERS);
return res;
}
diff --git a/src/test/java/pt/ptcris/test/scenarios/Scenario15.java b/src/test/java/pt/ptcris/test/scenarios/Scenario15.java
index 5500405..038faa2 100644
--- a/src/test/java/pt/ptcris/test/scenarios/Scenario15.java
+++ b/src/test/java/pt/ptcris/test/scenarios/Scenario15.java
@@ -51,7 +51,7 @@ List expectedImportedInvalidWorks() {
@Override
Set expectedInvalidCodes(BigInteger putCode) {
Set res = new HashSet();
- res.add(ORCIDHelper.INVALID_WORKEXTERNALIDENTIFIERS);
+ res.add(ORCIDHelper.INVALID_EXTERNALIDENTIFIERS);
return res;
}
diff --git a/src/test/java/pt/ptcris/test/scenarios/Scenario16.java b/src/test/java/pt/ptcris/test/scenarios/Scenario16.java
index 26be049..98c7378 100644
--- a/src/test/java/pt/ptcris/test/scenarios/Scenario16.java
+++ b/src/test/java/pt/ptcris/test/scenarios/Scenario16.java
@@ -62,7 +62,7 @@ List expectedImportedInvalidWorks() {
@Override
Set expectedInvalidCodes(BigInteger putCode) {
Set res = new HashSet();
- res.add(ORCIDHelper.INVALID_WORKEXTERNALIDENTIFIERS);
+ res.add(ORCIDHelper.INVALID_EXTERNALIDENTIFIERS);
return res;
}