From ab68fabc92194d5350392dd00328ed5b20f52147 Mon Sep 17 00:00:00 2001 From: ialarmedalien Date: Fri, 14 Apr 2023 06:27:03 -0700 Subject: [PATCH 1/2] Adding a description and repository field to the credit metadata --- .../database/provenance/CreditMetadata.java | 62 +++++- .../provenance/CreditMetadataEntryTest.java | 4 + .../provenance/CreditMetadataTest.java | 200 ++++++++++++------ 3 files changed, 197 insertions(+), 69 deletions(-) diff --git a/src/us/kbase/workspace/database/provenance/CreditMetadata.java b/src/us/kbase/workspace/database/provenance/CreditMetadata.java index d2b86fe2..f2712e6f 100644 --- a/src/us/kbase/workspace/database/provenance/CreditMetadata.java +++ b/src/us/kbase/workspace/database/provenance/CreditMetadata.java @@ -43,9 +43,11 @@ public static ResourceType getResourceType(final String resourceType) { } } + private final String description; private final String identifier; private final String license; private final String version; + private final Organization repository; private final ResourceType resourceType; private final List comments; private final List contributors; @@ -55,9 +57,11 @@ public static ResourceType getResourceType(final String resourceType) { private final List titles; private CreditMetadata( + final String description, final String identifier, final String license, final String version, + final Organization repository, final ResourceType resourceType, final List<String> comments, final List<Contributor> contributors, @@ -68,10 +72,12 @@ private CreditMetadata( this.comments = comments; this.contributors = contributors; this.dates = dates; + this.description = description; this.funding = funding; this.identifier = identifier; this.license = license; this.relatedIdentifiers = relatedIdentifiers; + this.repository = repository; this.resourceType = resourceType; this.titles = titles; this.version = version; @@ -86,6 +92,15 @@ public String getIdentifier() { return identifier; } + /** + * Gets the description of the resource. + * + * @return description (if present) + */ + public Optional<String> getDescription() { + return Optional.ofNullable(description); + } + /* * Gets the license for the resource; may be a string like 'Apache 2.0' or an URL in string * form. @@ -105,6 +120,15 @@ public Optional<String> getVersion() { return Optional.ofNullable(version); } + /* + * Gets the repository for the resource. + * + * @return the repository + */ + public Organization getRepository() { + return repository; + } + /* * Gets the resource type. * @@ -173,10 +197,12 @@ public int hashCode() { return Objects.hash(comments, contributors, dates, + description, funding, identifier, license, relatedIdentifiers, + repository, resourceType, titles, version); @@ -194,10 +220,12 @@ public boolean equals(Object obj) { return Objects.equals(comments, other.comments) && Objects.equals(contributors, other.contributors) && Objects.equals(dates, other.dates) + && Objects.equals(description, other.description) && Objects.equals(funding, other.funding) && Objects.equals(identifier, other.identifier) && Objects.equals(license, other.license) && Objects.equals(relatedIdentifiers, other.relatedIdentifiers) + && Objects.equals(repository, other.repository) && Objects.equals(resourceType, other.resourceType) && Objects.equals(titles, other.titles) && Objects.equals(version, other.version); @@ -210,6 +238,9 @@ public boolean equals(Object obj) { * unique persistent ID for the resource (i.e. the source data for this * workspace object). Should be in the format * <database name>:<identifier within database> + * @param repository + * the repository (as an {@link Organization}) from which the resource can + * be accessed * @param resourceType * type of the resource, as a {@link ResourceType} * @param contributors @@ -222,6 +253,7 @@ public boolean equals(Object obj) { */ public static Builder getBuilder( final String identifier, + final Organization repository, final ResourceType resourceType, final List<Contributor> contributors, final List<Title> titles) { @@ -229,7 +261,7 @@ public static Builder getBuilder( if (resourceType == null) { errorList.add("resourceType cannot be null"); } - return new Builder(identifier, resourceType, contributors, titles, + return new Builder(identifier, repository, resourceType, contributors, titles, errorList); } @@ -240,6 +272,9 @@ public static Builder getBuilder( * unique persistent ID for the resource (i.e. the source data for this * workspace object). Should be in the format * <database name>:<identifier within database> + * @param repository + * the repository (as an {@link Organization}) from which the resource can + * be accessed * @param resourceType * type of the resource as a string * @param contributors @@ -252,6 +287,7 @@ public static Builder getBuilder( */ public static Builder getBuilder( final String identifier, + final Organization repository, final String resourceType, final List<Contributor> contributors, final List<Title> titles) { @@ -268,7 +304,7 @@ public static Builder getBuilder( errorList.add(e.getMessage()); } } - return new Builder(identifier, rt, contributors, titles, errorList); + return new Builder(identifier, repository, rt, contributors, titles, errorList); } @@ -282,7 +318,9 @@ public static class Builder { private final String identifier; private String license = null; private String version = null; + private final Organization repository; private final ResourceType resourceType; + private String description = null; private List<String> comments = null; private final List<Contributor> contributors; private List<EventDate> dates = null; @@ -293,14 +331,20 @@ public static class Builder { private Builder( final String identifier, + final Organization repository, final ResourceType resourceType, final List<Contributor> contributors, final List<Title> titles, final List<String> errorList) { this.errorList = errorList; + this.repository = repository; this.resourceType = resourceType; + if (repository == null) { + this.errorList.add("repository cannot be null"); + } + String checkedPid = identifier; try { checkedPid = Common.checkPid(identifier, "identifier", false); @@ -345,6 +389,18 @@ public Builder withComments(final List<String> comments) { return this; } + /** + * Sets the description for the resource. + * + * @param description + * resource description as a string + * @return this builder + */ + public Builder withDescription(final String description) { + this.description = Common.processString(description); + return this; + } + /** * Sets the license for the resource; can be a string like 'Apache 2.0' or an * URL-like string; URL-like strings will be checked for well-formedness. @@ -458,9 +514,11 @@ public CreditMetadata build() { if (errorList.isEmpty()) { return new CreditMetadata( + description, identifier, license, version, + repository, resourceType, comments, contributors, diff --git a/src/us/kbase/workspace/test/database/provenance/CreditMetadataEntryTest.java b/src/us/kbase/workspace/test/database/provenance/CreditMetadataEntryTest.java index df0b0cac..69938684 100644 --- a/src/us/kbase/workspace/test/database/provenance/CreditMetadataEntryTest.java +++ b/src/us/kbase/workspace/test/database/provenance/CreditMetadataEntryTest.java @@ -17,6 +17,7 @@ import us.kbase.workspace.database.provenance.CreditMetadata; import us.kbase.workspace.database.provenance.CreditMetadata.ResourceType; import us.kbase.workspace.database.provenance.CreditMetadataEntry; +import us.kbase.workspace.database.provenance.Organization; import us.kbase.workspace.database.provenance.Title; import us.kbase.workspace.database.WorkspaceUser; @@ -56,8 +57,11 @@ public class CreditMetadataEntryTest { Title.getBuilder("\t\t\f\t\n\rA Series of Unfortunate Elephants\n\n\n ") .build()); + private static final Organization ORG_1 = Organization.getBuilder("Pillowtronics").build(); + private static final CreditMetadata CREDIT_METADATA_EXAMPLE = CreditMetadata .getBuilder("some:boring_identifier", + ORG_1, ResourceType.DATASET, CONTRIBUTOR_LIST, TITLE_LIST) diff --git a/src/us/kbase/workspace/test/database/provenance/CreditMetadataTest.java b/src/us/kbase/workspace/test/database/provenance/CreditMetadataTest.java index c1465bc2..71c02010 100644 --- a/src/us/kbase/workspace/test/database/provenance/CreditMetadataTest.java +++ b/src/us/kbase/workspace/test/database/provenance/CreditMetadataTest.java @@ -44,8 +44,10 @@ public class CreditMetadataTest { // field names private static final String COMMENTS = "comments"; private static final String ID = "identifier"; + private static final String DESCRIPTION = "description"; private static final String LICENSE = "license"; private static final String VERSION = "version"; + private static final String REPO = "repository"; private static final String TYPE = "resource type"; private static final String CONTRIBUTORS = "contributors"; private static final String DATES = "dates"; @@ -56,8 +58,10 @@ public class CreditMetadataTest { // test error strings private static final String INCORRECT_COMMENTS = INCORRECT + COMMENTS; private static final String INCORRECT_ID = INCORRECT + ID; + private static final String INCORRECT_DESCRIPTION = INCORRECT + DESCRIPTION; private static final String INCORRECT_LICENSE = INCORRECT + LICENSE; private static final String INCORRECT_TYPE = INCORRECT + TYPE; + private static final String INCORRECT_REPO = INCORRECT + REPO; private static final String INCORRECT_VERSION = INCORRECT + VERSION; private static final String INCORRECT_CONTRIBUTORS = INCORRECT + CONTRIBUTORS; private static final String INCORRECT_DATES = INCORRECT + DATES; @@ -68,6 +72,7 @@ public class CreditMetadataTest { // error messages private static final String CONTRIBUTOR_AT_LEAST_ONE = "at least one contributor must be provided"; private static final String IDENTIFIER_NON_NULL_WS = "identifier cannot be null or whitespace only"; + private static final String REPO_NON_NULL = "repository cannot be null"; private static final String RESOURCE_TYPE_NON_NULL = "resourceType cannot be null"; private static final String RESOURCE_TYPE_NON_WS_NULL = "resourceType cannot be null or whitespace only"; private static final String TITLE_AT_LEAST_ONE = "at least one title must be provided"; @@ -75,12 +80,17 @@ public class CreditMetadataTest { "or one or more 'dates', ideally indicating when the resource was " + "published or when it was last updated"; private static final String LICENSE_URL_ILLEGAL = "Illegal license url '"; + private static final String ILLEGAL_ID_BEFORE = "Illegal format for identifier: \""; + private static final String ILLEGAL_ID_AFTER = "\"\nIt should match the pattern " + + "\"^([a-zA-Z0-9][a-zA-Z0-9\\.]+)\\s*:\\s*(\\S.+)$\""; // field values private static final String IDENTIFIER_STRING = "SOME:identifier"; private static final ResourceType RESOURCE_TYPE = ResourceType.DATASET; private static final String RESOURCE_TYPE_STRING = "dataset"; + private static final String DESC_STRING = "World's worst description."; + private static final String DESC_STRING_UNTRIMMED = "\t\tWorld's worst description.\r\n \r\n"; private static final String LICENSE_STRING = "Apache 2.0"; private static final String LICENSE_STRING_UNTRIMMED = " \n \n Apache 2.0 \t\t "; private static final String VERSION_STRING = "1.2.3.4.c"; @@ -224,6 +234,8 @@ public void getResourceTypeFail() throws Exception { * instance to check * @param identifier * expected resource ID + * @param repository + * expected repository * @param rt * expected ResourceType * @param contributors @@ -232,9 +244,12 @@ public void getResourceTypeFail() throws Exception { * @param titles * list of Title objects expected to be returned by * `getTitles`; - * @param expectedMap - * key/value pairs are the field names and values for the string - * fields that are expected not to be null + * @param description + * optional string returned by `getDescription` + * @param license + * optional string returned by `getLicense` + * @param version + * optional string returned by `getVersion` * @param comments * list of strings expected to be returned by `getComments`; * @param dates @@ -252,9 +267,11 @@ public void getResourceTypeFail() throws Exception { */ private void assertCreditMetadataFields(final CreditMetadata cm, final String identifier, + final Organization repository, final ResourceType rt, final List<Contributor> contributors, final List<Title> titles, + final Optional<String> description, final Optional<String> license, final Optional<String> version, final List<String> comments, @@ -263,6 +280,8 @@ private void assertCreditMetadataFields(final CreditMetadata cm, final List<PermanentID> relatedIdentifiers) { assertThat(INCORRECT_ID, cm.getIdentifier(), is(identifier)); + assertThat(INCORRECT_REPO, cm.getRepository(), is(repository)); + assertThat(INCORRECT_ID, cm.getDescription(), is(description)); assertThat(INCORRECT_TYPE, cm.getResourceType(), is(rt)); assertThat(INCORRECT_COMMENTS, cm.getComments(), is(comments)); @@ -276,6 +295,7 @@ private void assertCreditMetadataFields(final CreditMetadata cm, is(relatedIdentifiers)); assertThat(INCORRECT_TITLES, cm.getTitles(), is(titles)); + assertThat(INCORRECT_DESCRIPTION, cm.getDescription(), is(description)); assertThat(INCORRECT_LICENSE, cm.getLicense(), is(license)); assertThat(INCORRECT_VERSION, cm.getVersion(), is(version)); } @@ -283,13 +303,15 @@ private void assertCreditMetadataFields(final CreditMetadata cm, private void assertCreditMetadataFields( final CreditMetadata cm, final String identifier, + final Organization repository, final ResourceType rt, final List<Contributor> contributors, final List<Title> titles, + final Optional<String> description, final Optional<String> license, final Optional<String> version) { - assertCreditMetadataFields(cm, identifier, rt, contributors, titles, - license, version, ELS, ELD, ELF, ELRI); + assertCreditMetadataFields(cm, identifier, repository, rt, contributors, titles, + description, license, version, ELS, ELD, ELF, ELRI); } @Test @@ -297,12 +319,12 @@ public void buildMinimal() throws Exception { for (final ResourceType rt : ResourceType.values()) { for (Map.Entry<String, String> entry : VALID_PID_MAP.entrySet()) { final CreditMetadata cm = CreditMetadata - .getBuilder(entry.getKey(), rt, + .getBuilder(entry.getKey(), ORG_1, rt, CONTRIBUTOR_LIST, TITLE_LIST) .withVersion(VERSION_STRING) .build(); - assertCreditMetadataFields(cm, entry.getValue(), rt, - CONTRIBUTOR_LIST, TITLE_LIST, ES, opt(VERSION_STRING)); + assertCreditMetadataFields(cm, entry.getValue(), ORG_1, rt, + CONTRIBUTOR_LIST, TITLE_LIST, ES, ES, opt(VERSION_STRING)); } } } @@ -312,13 +334,13 @@ public void buildMinimalResourceTypeStrings() throws Exception { for (Map.Entry<String, ResourceType> rtes : VALID_RESOURCE_TYPE_MAP.entrySet()) { for (Map.Entry<String, String> entry : VALID_PID_MAP.entrySet()) { final CreditMetadata cm = CreditMetadata - .getBuilder(entry.getKey(), rtes.getKey(), + .getBuilder(entry.getKey(), ORG_1, rtes.getKey(), CONTRIBUTOR_LIST, TITLE_LIST) .withVersion(VERSION_STRING) .build(); - assertCreditMetadataFields(cm, entry.getValue(), + assertCreditMetadataFields(cm, entry.getValue(), ORG_1, rtes.getValue(), CONTRIBUTOR_LIST, TITLE_LIST, - ES, opt(VERSION_STRING)); + ES, ES, opt(VERSION_STRING)); } } } @@ -327,14 +349,14 @@ public void buildMinimalResourceTypeStrings() throws Exception { @Test public void buildCleanAndTrimComments() throws Exception { final CreditMetadata cm = CreditMetadata - .getBuilder(IDENTIFIER_STRING, RESOURCE_TYPE_STRING, + .getBuilder(IDENTIFIER_STRING, ORG_1, RESOURCE_TYPE_STRING, CONTRIBUTOR_LIST, TITLE_LIST) .withComments(COMMENTS_LIST_UNTRIMMED) .withVersion(VERSION_STRING_UNTRIMMED) .build(); - assertCreditMetadataFields(cm, IDENTIFIER_STRING, RESOURCE_TYPE, - CONTRIBUTOR_LIST, TITLE_LIST, ES, opt(VERSION_STRING), + assertCreditMetadataFields(cm, IDENTIFIER_STRING, ORG_1, RESOURCE_TYPE, + CONTRIBUTOR_LIST, TITLE_LIST, ES, ES, opt(VERSION_STRING), COMMENTS_LIST, ELD, ELF, ELRI); } @@ -342,28 +364,30 @@ CONTRIBUTOR_LIST, TITLE_LIST, ES, opt(VERSION_STRING), public void buildCleanURLTypeLicense() throws Exception { for (final String licenseURL : VALID_URL_LIST) { final CreditMetadata cm2 = CreditMetadata - .getBuilder(IDENTIFIER_STRING, RESOURCE_TYPE_STRING, + .getBuilder(IDENTIFIER_STRING, ORG_1, RESOURCE_TYPE_STRING, CONTRIBUTOR_LIST, TITLE_LIST) .withLicense(licenseURL) .withDates(DATE_LIST) .build(); - assertCreditMetadataFields(cm2, IDENTIFIER_STRING, RESOURCE_TYPE, - CONTRIBUTOR_LIST, TITLE_LIST, opt(licenseURL), ES, + assertCreditMetadataFields(cm2, IDENTIFIER_STRING, ORG_1, RESOURCE_TYPE, + CONTRIBUTOR_LIST, TITLE_LIST, + ES, opt(licenseURL), ES, ELS, DATE_LIST, ELF, ELRI); } // trim, tidy, and normalise the URL for (Map.Entry<String, String> entry : ABNORMAL_URL_MAP.entrySet()) { final CreditMetadata cm = CreditMetadata - .getBuilder(IDENTIFIER_STRING, RESOURCE_TYPE_STRING, + .getBuilder(IDENTIFIER_STRING, ORG_1, RESOURCE_TYPE_STRING, CONTRIBUTOR_LIST, TITLE_LIST) .withLicense(entry.getKey()) - .withVersion(VERSION_STRING_UNTRIMMED) + .withDates(DATE_LIST) .build(); - assertCreditMetadataFields(cm, IDENTIFIER_STRING, RESOURCE_TYPE, + assertCreditMetadataFields(cm, IDENTIFIER_STRING, ORG_1, RESOURCE_TYPE, CONTRIBUTOR_LIST, TITLE_LIST, - opt(entry.getValue()), opt(VERSION_STRING)); + ES, opt(entry.getValue()), ES, + ELS, DATE_LIST, ELF, ELRI); } } @@ -371,7 +395,7 @@ CONTRIBUTOR_LIST, TITLE_LIST, opt(licenseURL), ES, public void buildMinimalNullEmptyLists() throws Exception { // empty list inputs final CreditMetadata cm1 = CreditMetadata - .getBuilder(IDENTIFIER_STRING, RESOURCE_TYPE_STRING, + .getBuilder(IDENTIFIER_STRING, ORG_1, RESOURCE_TYPE_STRING, CONTRIBUTOR_LIST, TITLE_LIST) .withVersion(VERSION_STRING) .withComments(ELS) @@ -379,12 +403,12 @@ public void buildMinimalNullEmptyLists() throws Exception { .withFunding(ELF) .withRelatedIdentifiers(ELRI) .build(); - assertCreditMetadataFields(cm1, IDENTIFIER_STRING, RESOURCE_TYPE, - CONTRIBUTOR_LIST, TITLE_LIST, ES, opt(VERSION_STRING)); + assertCreditMetadataFields(cm1, IDENTIFIER_STRING, ORG_1, RESOURCE_TYPE, + CONTRIBUTOR_LIST, TITLE_LIST, ES, ES, opt(VERSION_STRING)); // list of nulls final CreditMetadata cm2 = CreditMetadata - .getBuilder(IDENTIFIER_STRING, RESOURCE_TYPE_STRING, + .getBuilder(IDENTIFIER_STRING, ORG_1, RESOURCE_TYPE_STRING, CONTRIBUTOR_LIST, TITLE_LIST) .withVersion(VERSION_STRING) .withComments(Arrays.asList(null, null, null, null, null)) @@ -393,12 +417,12 @@ public void buildMinimalNullEmptyLists() throws Exception { .withRelatedIdentifiers( Arrays.asList(null, null, null, null, null)) .build(); - assertCreditMetadataFields(cm2, IDENTIFIER_STRING, RESOURCE_TYPE, - CONTRIBUTOR_LIST, TITLE_LIST, ES, opt(VERSION_STRING)); + assertCreditMetadataFields(cm2, IDENTIFIER_STRING, ORG_1, RESOURCE_TYPE, + CONTRIBUTOR_LIST, TITLE_LIST, ES, ES, opt(VERSION_STRING)); // plain nulls final CreditMetadata cm3 = CreditMetadata - .getBuilder(IDENTIFIER_STRING, RESOURCE_TYPE_STRING, + .getBuilder(IDENTIFIER_STRING, ORG_1, RESOURCE_TYPE_STRING, CONTRIBUTOR_LIST, TITLE_LIST) .withVersion(VERSION_STRING) .withComments(null) @@ -406,22 +430,23 @@ public void buildMinimalNullEmptyLists() throws Exception { .withFunding(null) .withRelatedIdentifiers(null) .build(); - assertCreditMetadataFields(cm3, IDENTIFIER_STRING, RESOURCE_TYPE, - CONTRIBUTOR_LIST, TITLE_LIST, ES, opt(VERSION_STRING)); + assertCreditMetadataFields(cm3, IDENTIFIER_STRING, ORG_1, RESOURCE_TYPE, + CONTRIBUTOR_LIST, TITLE_LIST, ES, ES, opt(VERSION_STRING)); } @Test public void buildMinimalNullEmptyString() throws Exception { for (final String nullOrWs : WHITESPACE_STRINGS_WITH_NULL) { final CreditMetadata cm = CreditMetadata - .getBuilder(IDENTIFIER_STRING, RESOURCE_TYPE_STRING, + .getBuilder(IDENTIFIER_STRING, ORG_1, RESOURCE_TYPE_STRING, CONTRIBUTOR_LIST, TITLE_LIST) + .withDescription(nullOrWs) .withLicense(nullOrWs) .withVersion(nullOrWs) .withDates(DATE_LIST) .build(); - assertCreditMetadataFields(cm, IDENTIFIER_STRING, RESOURCE_TYPE, - CONTRIBUTOR_LIST, TITLE_LIST, ES, ES, + assertCreditMetadataFields(cm, IDENTIFIER_STRING, ORG_1, RESOURCE_TYPE, + CONTRIBUTOR_LIST, TITLE_LIST, ES, ES, ES, ELS, DATE_LIST, ELF, ELRI); } } @@ -430,8 +455,9 @@ public void buildMinimalNullEmptyString() throws Exception { public void buildMaximal() throws Exception { for (Map.Entry<String, String> entry : VALID_PID_MAP.entrySet()) { final CreditMetadata cm = CreditMetadata - .getBuilder(entry.getKey(), RESOURCE_TYPE_STRING, + .getBuilder(entry.getKey(), ORG_1, RESOURCE_TYPE_STRING, CONTRIBUTOR_LIST, TITLE_LIST) + .withDescription(DESC_STRING_UNTRIMMED) .withLicense(LICENSE_STRING_UNTRIMMED) .withVersion(VERSION_STRING_UNTRIMMED) .withComments(COMMENTS_LIST_UNTRIMMED) @@ -439,9 +465,9 @@ public void buildMaximal() throws Exception { .withFunding(FUNDING_LIST) .withRelatedIdentifiers(RELATED_ID_LIST) .build(); - assertCreditMetadataFields(cm, entry.getValue(), RESOURCE_TYPE, + assertCreditMetadataFields(cm, entry.getValue(), ORG_1, RESOURCE_TYPE, CONTRIBUTOR_LIST, TITLE_LIST, - opt(LICENSE_STRING), opt(VERSION_STRING), + opt(DESC_STRING), opt(LICENSE_STRING), opt(VERSION_STRING), COMMENTS_LIST, DATE_LIST, FUNDING_LIST, RELATED_ID_LIST); } @@ -451,16 +477,18 @@ public void buildMaximal() throws Exception { public void buildMinimalOverwriteNullEmptyString() throws Exception { for (final String nullOrWs : WHITESPACE_STRINGS_WITH_NULL) { final CreditMetadata cm = CreditMetadata - .getBuilder(IDENTIFIER_STRING, RESOURCE_TYPE_STRING, + .getBuilder(IDENTIFIER_STRING, ORG_1, RESOURCE_TYPE_STRING, CONTRIBUTOR_LIST, TITLE_LIST) + .withDescription(DESC_STRING_UNTRIMMED) + .withDescription(nullOrWs) .withLicense(LICENSE_STRING_UNTRIMMED) .withLicense(nullOrWs) .withVersion(VERSION_STRING_UNTRIMMED) .withVersion(nullOrWs) .withDates(DATE_LIST) .build(); - assertCreditMetadataFields(cm, IDENTIFIER_STRING, RESOURCE_TYPE, - CONTRIBUTOR_LIST, TITLE_LIST, ES, ES, + assertCreditMetadataFields(cm, IDENTIFIER_STRING, ORG_1, RESOURCE_TYPE, + CONTRIBUTOR_LIST, TITLE_LIST, ES, ES, ES, ELS, DATE_LIST, ELF, ELRI); } } @@ -468,7 +496,7 @@ public void buildMinimalOverwriteNullEmptyString() throws Exception { @Test public void buildMaximalOverwriteNullEmptyLists() throws Exception { final CreditMetadata cm = CreditMetadata - .getBuilder(IDENTIFIER_STRING, RESOURCE_TYPE_STRING, + .getBuilder(IDENTIFIER_STRING, ORG_1, RESOURCE_TYPE_STRING, CONTRIBUTOR_LIST, TITLE_LIST) .withDates(DATE_LIST) .withDates(Arrays.asList(null, null, null, null)) @@ -478,14 +506,15 @@ public void buildMaximalOverwriteNullEmptyLists() throws Exception { .withRelatedIdentifiers(ELRI) .withVersion(VERSION_STRING_UNTRIMMED) .build(); - assertCreditMetadataFields(cm, IDENTIFIER_STRING, RESOURCE_TYPE, - CONTRIBUTOR_LIST, TITLE_LIST, ES, opt(VERSION_STRING)); + assertCreditMetadataFields(cm, IDENTIFIER_STRING, ORG_1, RESOURCE_TYPE, + CONTRIBUTOR_LIST, TITLE_LIST, ES, ES, opt(VERSION_STRING)); } @Test public void buildMaximalDedupeLists() throws Exception { final CreditMetadata cm = CreditMetadata .getBuilder(IDENTIFIER_STRING, + ORG_1, RESOURCE_TYPE_STRING, CONTRIBUTOR_LIST_DUPES_NULLS, TITLE_LIST_DUPES_NULLS) @@ -494,8 +523,8 @@ public void buildMaximalDedupeLists() throws Exception { .withFunding(FUNDING_LIST_DUPES_NULLS) .withRelatedIdentifiers(RELATED_ID_LIST_DUPES_NULLS) .build(); - assertCreditMetadataFields(cm, IDENTIFIER_STRING, RESOURCE_TYPE, - CONTRIBUTOR_LIST, TITLE_LIST, ES, ES, + assertCreditMetadataFields(cm, IDENTIFIER_STRING, ORG_1, + RESOURCE_TYPE, CONTRIBUTOR_LIST, TITLE_LIST, ES, ES, ES, COMMENTS_LIST, DATE_LIST, FUNDING_LIST, RELATED_ID_LIST); } @@ -505,7 +534,7 @@ public void assertContributorsImmutable() throws Exception { // same as CONTRIBUTOR_LIST final List<Contributor> contributorList = new ArrayList<>(Arrays.asList(C1, C2)); final CreditMetadata cm = CreditMetadata - .getBuilder(IDENTIFIER_STRING, RESOURCE_TYPE_STRING, + .getBuilder(IDENTIFIER_STRING, ORG_1, RESOURCE_TYPE_STRING, contributorList, TITLE_LIST) .withDates(DATE_LIST) .build(); @@ -530,7 +559,7 @@ public void assertCommentsImmutable() throws Exception { "Prime codswallop" )); final CreditMetadata cm = CreditMetadata - .getBuilder(IDENTIFIER_STRING, RESOURCE_TYPE_STRING, + .getBuilder(IDENTIFIER_STRING, ORG_1, RESOURCE_TYPE_STRING, CONTRIBUTOR_LIST, TITLE_LIST) .withDates(DATE_LIST) .withComments(commentList) @@ -561,7 +590,7 @@ public void assertDatesImmutable() throws Exception { // same as DATE_LIST final List<EventDate> dateList = new ArrayList<>(Arrays.asList(ED1, ED2)); final CreditMetadata cm = CreditMetadata - .getBuilder(IDENTIFIER_STRING, RESOURCE_TYPE_STRING, + .getBuilder(IDENTIFIER_STRING, ORG_1, RESOURCE_TYPE_STRING, CONTRIBUTOR_LIST, TITLE_LIST) .withDates(dateList) .build(); @@ -584,7 +613,7 @@ public void assertFundingImmutable() throws Exception { // same as CONTRIBUTOR_LIST final List<FundingReference> fundingList = new ArrayList<>(Arrays.asList(F1)); final CreditMetadata cm = CreditMetadata - .getBuilder(IDENTIFIER_STRING, RESOURCE_TYPE_STRING, + .getBuilder(IDENTIFIER_STRING, ORG_1, RESOURCE_TYPE_STRING, CONTRIBUTOR_LIST, TITLE_LIST) .withDates(DATE_LIST) .withFunding(fundingList) @@ -608,7 +637,7 @@ public void assertRelatedIdentifiersImmutable() throws Exception { // same as RELATED_ID_LIST final List<PermanentID> pidList = new ArrayList<>(Arrays.asList(PID1, PID2)); final CreditMetadata cm = CreditMetadata - .getBuilder(IDENTIFIER_STRING, RESOURCE_TYPE_STRING, + .getBuilder(IDENTIFIER_STRING, ORG_1, RESOURCE_TYPE_STRING, CONTRIBUTOR_LIST, TITLE_LIST) .withDates(DATE_LIST) .withRelatedIdentifiers(pidList) @@ -631,7 +660,7 @@ public void assertTitlesImmutable() throws Exception { // same as TITLE_LIST final List<Title> titleList = new ArrayList<>(Arrays.asList(T1, T2)); final CreditMetadata cm = CreditMetadata - .getBuilder(IDENTIFIER_STRING, RESOURCE_TYPE_STRING, + .getBuilder(IDENTIFIER_STRING, ORG_1, RESOURCE_TYPE_STRING, CONTRIBUTOR_LIST, titleList) .withDates(DATE_LIST) .build(); @@ -673,6 +702,7 @@ public void buildFailInvalidPID() throws Exception { buildCreditMetadataFailWithError( CreditMetadata.getBuilder( nullOrWs, + ORG_1, RESOURCE_TYPE_STRING, CONTRIBUTOR_LIST, TITLE_LIST) @@ -684,23 +714,36 @@ public void buildFailInvalidPID() throws Exception { buildCreditMetadataFailWithError( CreditMetadata.getBuilder( invalidPid, + ORG_1, RESOURCE_TYPE_STRING, CONTRIBUTOR_LIST, TITLE_LIST) .withVersion(VERSION_STRING), - "Illegal format for identifier: \"" + invalidPid - + "\"\n" + - "It should match the pattern " - + "\"^([a-zA-Z0-9][a-zA-Z0-9\\.]+)\\s*:\\s*(\\S.+)$\""); + ILLEGAL_ID_BEFORE + invalidPid + + ILLEGAL_ID_AFTER); } } + @Test + public void buildFailInvalidRepository() throws Exception { + buildCreditMetadataFailWithError( + CreditMetadata.getBuilder( + IDENTIFIER_STRING, + null, + RESOURCE_TYPE_STRING, + CONTRIBUTOR_LIST, + TITLE_LIST) + .withVersion(VERSION_STRING), + REPO_NON_NULL); + } + @Test public void buildFailInvalidResourceType() throws Exception { for (final String rt : INVALID_RESOURCE_TYPE_STRINGS) { buildCreditMetadataFailWithError( CreditMetadata.getBuilder( IDENTIFIER_STRING, + ORG_1, rt, CONTRIBUTOR_LIST, TITLE_LIST) @@ -712,6 +755,7 @@ public void buildFailInvalidResourceType() throws Exception { buildCreditMetadataFailWithError( CreditMetadata.getBuilder( IDENTIFIER_STRING, + ORG_1, wsOrNull, CONTRIBUTOR_LIST, TITLE_LIST) @@ -722,6 +766,7 @@ public void buildFailInvalidResourceType() throws Exception { buildCreditMetadataFailWithError( CreditMetadata.getBuilder( IDENTIFIER_STRING, + ORG_1, (ResourceType) null, CONTRIBUTOR_LIST, TITLE_LIST) @@ -736,6 +781,7 @@ public void buildFailInvalidLicenseURLs() throws Exception { buildCreditMetadataFailWithError( CreditMetadata.getBuilder( IDENTIFIER_STRING, + ORG_1, RESOURCE_TYPE_STRING, CONTRIBUTOR_LIST, TITLE_LIST) @@ -751,6 +797,7 @@ public void buildFailInvalidLicenseURLs() throws Exception { buildCreditMetadataFailWithError( CreditMetadata.getBuilder( IDENTIFIER_STRING, + ORG_1, RESOURCE_TYPE_STRING, CONTRIBUTOR_LIST, TITLE_LIST) @@ -764,6 +811,7 @@ public void buildFailInvalidLicenseURLs() throws Exception { buildCreditMetadataFailWithError( CreditMetadata.getBuilder( IDENTIFIER_STRING, + ORG_1, RESOURCE_TYPE_STRING, CONTRIBUTOR_LIST, TITLE_LIST) @@ -780,6 +828,7 @@ public void buildFailMissingVersionOrDates() throws Exception { buildCreditMetadataFailWithError( CreditMetadata.getBuilder( IDENTIFIER_STRING, + ORG_1, RESOURCE_TYPE_STRING, CONTRIBUTOR_LIST, TITLE_LIST), @@ -790,6 +839,7 @@ public void buildFailMissingVersionOrDates() throws Exception { buildCreditMetadataFailWithError( CreditMetadata.getBuilder( IDENTIFIER_STRING, + ORG_1, RESOURCE_TYPE_STRING, CONTRIBUTOR_LIST, TITLE_LIST) @@ -800,6 +850,7 @@ public void buildFailMissingVersionOrDates() throws Exception { buildCreditMetadataFailWithError( CreditMetadata.getBuilder( IDENTIFIER_STRING, + ORG_1, RESOURCE_TYPE_STRING, CONTRIBUTOR_LIST, TITLE_LIST) @@ -812,6 +863,7 @@ public void buildFailMissingVersionOrDates() throws Exception { buildCreditMetadataFailWithError( CreditMetadata.getBuilder( IDENTIFIER_STRING, + ORG_1, RESOURCE_TYPE_STRING, CONTRIBUTOR_LIST, TITLE_LIST) @@ -822,6 +874,7 @@ public void buildFailMissingVersionOrDates() throws Exception { buildCreditMetadataFailWithError( CreditMetadata.getBuilder( IDENTIFIER_STRING, + ORG_1, RESOURCE_TYPE_STRING, CONTRIBUTOR_LIST, TITLE_LIST) @@ -831,6 +884,7 @@ public void buildFailMissingVersionOrDates() throws Exception { buildCreditMetadataFailWithError( CreditMetadata.getBuilder( IDENTIFIER_STRING, + ORG_1, RESOURCE_TYPE_STRING, CONTRIBUTOR_LIST, TITLE_LIST) @@ -842,6 +896,7 @@ public void buildFailMissingVersionOrDates() throws Exception { buildCreditMetadataFailWithError( CreditMetadata.getBuilder( IDENTIFIER_STRING, + ORG_1, RESOURCE_TYPE_STRING, CONTRIBUTOR_LIST, TITLE_LIST) @@ -853,6 +908,7 @@ public void buildFailMissingVersionOrDates() throws Exception { buildCreditMetadataFailWithError( CreditMetadata.getBuilder( IDENTIFIER_STRING, + ORG_1, RESOURCE_TYPE_STRING, CONTRIBUTOR_LIST, TITLE_LIST) @@ -863,6 +919,7 @@ public void buildFailMissingVersionOrDates() throws Exception { buildCreditMetadataFailWithError( CreditMetadata.getBuilder( IDENTIFIER_STRING, + ORG_1, RESOURCE_TYPE_STRING, CONTRIBUTOR_LIST, TITLE_LIST) @@ -877,6 +934,7 @@ public void buildFailNullOrEmptyContributorList() throws Exception { buildCreditMetadataFailWithError( CreditMetadata.getBuilder( IDENTIFIER_STRING, + ORG_1, RESOURCE_TYPE_STRING, null, TITLE_LIST) @@ -887,6 +945,7 @@ public void buildFailNullOrEmptyContributorList() throws Exception { buildCreditMetadataFailWithError( CreditMetadata.getBuilder( IDENTIFIER_STRING, + ORG_1, RESOURCE_TYPE_STRING, ELC, TITLE_LIST) @@ -896,6 +955,7 @@ public void buildFailNullOrEmptyContributorList() throws Exception { buildCreditMetadataFailWithError( CreditMetadata.getBuilder( IDENTIFIER_STRING, + ORG_1, RESOURCE_TYPE_STRING, Arrays.asList(null, null, null, null), TITLE_LIST) @@ -909,6 +969,7 @@ public void buildFailNullOrEmptyTitleList() throws Exception { buildCreditMetadataFailWithError( CreditMetadata.getBuilder( IDENTIFIER_STRING, + ORG_1, RESOURCE_TYPE_STRING, CONTRIBUTOR_LIST, null) .withVersion(VERSION_STRING), @@ -918,6 +979,7 @@ public void buildFailNullOrEmptyTitleList() throws Exception { buildCreditMetadataFailWithError( CreditMetadata.getBuilder( IDENTIFIER_STRING, + ORG_1, RESOURCE_TYPE_STRING, CONTRIBUTOR_LIST, ELT) .withVersion(VERSION_STRING), @@ -926,6 +988,7 @@ public void buildFailNullOrEmptyTitleList() throws Exception { buildCreditMetadataFailWithError( CreditMetadata.getBuilder( IDENTIFIER_STRING, + ORG_1, RESOURCE_TYPE_STRING, CONTRIBUTOR_LIST, Arrays.asList(null, null, null, null)) @@ -937,6 +1000,7 @@ public void buildFailNullOrEmptyTitleList() throws Exception { public void buildMinimalFailAllFields() throws Exception { final String[] errs = { RESOURCE_TYPE_NON_WS_NULL, + REPO_NON_NULL, IDENTIFIER_NON_NULL_WS, CONTRIBUTOR_AT_LEAST_ONE, TITLE_AT_LEAST_ONE, @@ -947,18 +1011,19 @@ public void buildMinimalFailAllFields() throws Exception { for (String nullOrWs : WHITESPACE_STRINGS_WITH_NULL) { // null contributor and title lists buildCreditMetadataFailWithError( - CreditMetadata.getBuilder(nullOrWs, nullOrWs, null, null), + CreditMetadata.getBuilder(nullOrWs, null, nullOrWs, null, null), errorString); // empty contributor and title lists buildCreditMetadataFailWithError( - CreditMetadata.getBuilder(nullOrWs, nullOrWs, ELC, ELT), + CreditMetadata.getBuilder(nullOrWs, null, nullOrWs, ELC, ELT), errorString); // list of nulls buildCreditMetadataFailWithError( CreditMetadata.getBuilder( nullOrWs, + null, nullOrWs, Arrays.asList(null, null, null, null), Arrays.asList(null, null, null, null)), @@ -968,9 +1033,8 @@ public void buildMinimalFailAllFields() throws Exception { for (String invalidPid : INVALID_PID_LIST) { final String[] errs2 = { RESOURCE_TYPE_NON_WS_NULL, - "Illegal format for identifier: \"" + invalidPid + "\"\n" + - "It should match the pattern " - + "\"^([a-zA-Z0-9][a-zA-Z0-9\\.]+)\\s*:\\s*(\\S.+)$\"", + REPO_NON_NULL, + ILLEGAL_ID_BEFORE + invalidPid + ILLEGAL_ID_AFTER, CONTRIBUTOR_AT_LEAST_ONE, TITLE_AT_LEAST_ONE, VERSIONING_DATES_REQUIRED @@ -981,18 +1045,20 @@ public void buildMinimalFailAllFields() throws Exception { // null lists buildCreditMetadataFailWithError( CreditMetadata.getBuilder( - invalidPid, wsOrNull, null, null), + invalidPid, null, wsOrNull, null, null), errorStringWithRegex); // empty lists buildCreditMetadataFailWithError( - CreditMetadata.getBuilder(invalidPid, wsOrNull, ELC, ELT), + CreditMetadata.getBuilder(invalidPid, + null, wsOrNull, ELC, ELT), errorStringWithRegex); // list of nulls buildCreditMetadataFailWithError( CreditMetadata.getBuilder( invalidPid, + null, wsOrNull, Arrays.asList(null, null, null), Arrays.asList(null, null, null)), @@ -1005,15 +1071,15 @@ public void buildMinimalFailAllFields() throws Exception { public void buildFailManyFields() throws Exception { for (String invalidPid : INVALID_PID_LIST) { - final String invalidPidError = "Illegal format for identifier: \"" + invalidPid + "\"\n" + - "It should match the pattern " - + "\"^([a-zA-Z0-9][a-zA-Z0-9\\.]+)\\s*:\\s*(\\S.+)$\""; + final String invalidPidError = ILLEGAL_ID_BEFORE + invalidPid + + ILLEGAL_ID_AFTER; for (Map.Entry<String, String> entry : INVALID_URL_MAP.entrySet()) { final String invalidLicenseUrlError = LICENSE_URL_ILLEGAL + entry.getKey() + "': " + entry.getValue(); final String[] errs = { RESOURCE_TYPE_NON_WS_NULL, + REPO_NON_NULL, invalidPidError, CONTRIBUTOR_AT_LEAST_ONE, TITLE_AT_LEAST_ONE, @@ -1025,19 +1091,19 @@ public void buildFailManyFields() throws Exception { for (String wsOrNull : WHITESPACE_STRINGS_WITH_NULL) { // null lists buildCreditMetadataFailWithError( - CreditMetadata.getBuilder(invalidPid, wsOrNull, null, null) + CreditMetadata.getBuilder(invalidPid, null, wsOrNull, null, null) .withLicense(entry.getKey()), errorStringWithRegex); // empty lists buildCreditMetadataFailWithError( - CreditMetadata.getBuilder(invalidPid, wsOrNull, ELC, ELT) + CreditMetadata.getBuilder(invalidPid, null, wsOrNull, ELC, ELT) .withLicense(entry.getKey()), errorStringWithRegex); // list of nulls buildCreditMetadataFailWithError( - CreditMetadata.getBuilder(invalidPid, wsOrNull, + CreditMetadata.getBuilder(invalidPid, null, wsOrNull, Arrays.asList(null, null, null), Arrays.asList(null, null, null)) .withLicense(entry.getKey()), From 7e0cfafe496633a4ae40d9004198663da058dbdb Mon Sep 17 00:00:00 2001 From: ialarmedalien <ialarmedalien@gmail.com> Date: Fri, 14 Apr 2023 11:56:12 -0700 Subject: [PATCH 2/2] fixing some annoying indentation issues and a copy-pasta error --- .../provenance/CreditMetadataTest.java | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/us/kbase/workspace/test/database/provenance/CreditMetadataTest.java b/src/us/kbase/workspace/test/database/provenance/CreditMetadataTest.java index 71c02010..17354695 100644 --- a/src/us/kbase/workspace/test/database/provenance/CreditMetadataTest.java +++ b/src/us/kbase/workspace/test/database/provenance/CreditMetadataTest.java @@ -281,7 +281,6 @@ private void assertCreditMetadataFields(final CreditMetadata cm, assertThat(INCORRECT_ID, cm.getIdentifier(), is(identifier)); assertThat(INCORRECT_REPO, cm.getRepository(), is(repository)); - assertThat(INCORRECT_ID, cm.getDescription(), is(description)); assertThat(INCORRECT_TYPE, cm.getResourceType(), is(rt)); assertThat(INCORRECT_COMMENTS, cm.getComments(), is(comments)); @@ -719,8 +718,7 @@ public void buildFailInvalidPID() throws Exception { CONTRIBUTOR_LIST, TITLE_LIST) .withVersion(VERSION_STRING), - ILLEGAL_ID_BEFORE + invalidPid - + ILLEGAL_ID_AFTER); + ILLEGAL_ID_BEFORE + invalidPid + ILLEGAL_ID_AFTER); } } @@ -1045,13 +1043,21 @@ public void buildMinimalFailAllFields() throws Exception { // null lists buildCreditMetadataFailWithError( CreditMetadata.getBuilder( - invalidPid, null, wsOrNull, null, null), + invalidPid, + null, + wsOrNull, + null, + null), errorStringWithRegex); // empty lists buildCreditMetadataFailWithError( - CreditMetadata.getBuilder(invalidPid, - null, wsOrNull, ELC, ELT), + CreditMetadata.getBuilder( + invalidPid, + null, + wsOrNull, + ELC, + ELT), errorStringWithRegex); // list of nulls