diff --git a/pom.xml b/pom.xml index ac6ab6e..1f68bbe 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ UTF-8 - 2.0-rc1 + 2.0-rc2 2.4 4.12 @@ -40,9 +40,12 @@ org.apache.maven.plugins maven-jar-plugin - 2.6 - - + 3.3 + + 1.7 + 1.7 + + 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; }