diff --git a/src/main/java/org/genesys/catalog/api/v0/DatasetController.java b/src/main/java/org/genesys/catalog/api/v0/DatasetController.java index 7dc648efb0fde1d89fff28af2bc20d5e7431c53a..56ba0e29982327ded21a694d589fd7014551140b 100644 --- a/src/main/java/org/genesys/catalog/api/v0/DatasetController.java +++ b/src/main/java/org/genesys/catalog/api/v0/DatasetController.java @@ -146,9 +146,9 @@ public class DatasetController { */ @PostMapping(value = "/list/{filterCode}") public FilteredPage datasetListShort(@RequestParam(name = "p", required = false, defaultValue = "0") final int page, - @RequestParam(name = "l", required = false, defaultValue = "50") final int pageSize, - @RequestParam(name = "d", required = false, defaultValue = "ASC") final Sort.Direction direction, - @RequestParam(name = "s", required = false, defaultValue = "id") final String[] sort, @PathVariable("filterCode") final String filterCode) throws IOException { + @RequestParam(name = "l", required = false, defaultValue = "50") final int pageSize, + @RequestParam(name = "d", required = false, defaultValue = "ASC") final Sort.Direction direction, + @RequestParam(name = "s", required = false, defaultValue = "id") final String[] sort, @PathVariable("filterCode") final String filterCode) throws IOException { final DatasetFilter filter = shortFilterService.filterByCode(filterCode, DatasetFilter.class); return new FilteredPage<>(filterCode, filter, datasetService.listDatasets(filter, new PageRequest(page, Integer.min(pageSize, 100), direction, sort))); @@ -204,22 +204,22 @@ public class DatasetController { */ @PostMapping(value = "/upsertaccessions/{UUID},{version}") public Dataset upsertAccessions(@PathVariable("UUID") final UUID uuid, @PathVariable("version") final int version, - @RequestBody final Set accessionIdentifiers) throws NotFoundElement { + @RequestBody final Set accessionIdentifiers) throws NotFoundElement { final Dataset dataset = datasetService.loadDataset(uuid, version); return datasetService.upsertAccessions(dataset, accessionIdentifiers); } /** - * Loads dataset by uuid and version and tries to publish it. + * Loads dataset by uuid and version and sets new publish state * * @param uuid dataset UUID * @param version record version - * @param published (admin-only) set's the published flag to specified value + * @param published sends to the review step or unpublish * @return published Dataset */ @RequestMapping(value = "/publish", method = RequestMethod.POST) public Dataset publishDataset(@RequestParam(value = "uuid", required = true) final UUID uuid, @RequestParam(value = "version", required = true) final int version, - @RequestParam(name = "published", required = false, defaultValue = "true") final boolean published) { + @RequestParam(name = "published", required = false, defaultValue = "true") final boolean published) { final Dataset dataset = datasetService.loadDataset(uuid, version); @@ -230,6 +230,19 @@ public class DatasetController { } } + /** + * Loads dataset by uuid and version and tries to publish it. + * + * @param uuid dataset UUID + * @param version record version + * @return published Dataset (admin-only) + */ + @RequestMapping(value = "/approve", method = RequestMethod.POST) + public Dataset approveDataset(@RequestParam(value = "uuid", required = true) final UUID uuid, @RequestParam(value = "version", required = true) final int version) { + final Dataset dataset = datasetService.loadDataset(uuid, version); + return datasetService.approveDataset(dataset); + } + /** * Adds the descriptors. * diff --git a/src/main/java/org/genesys/catalog/api/v0/DescriptorController.java b/src/main/java/org/genesys/catalog/api/v0/DescriptorController.java index c465092536a0155927d552e23cda2f6633cbb19c..33a196540ba05d92bd006c5b6b950263c755b2d1 100644 --- a/src/main/java/org/genesys/catalog/api/v0/DescriptorController.java +++ b/src/main/java/org/genesys/catalog/api/v0/DescriptorController.java @@ -117,11 +117,11 @@ public class DescriptorController { */ @PostMapping(value = "/list") public FilteredPage listDescriptors(@RequestParam(name = "p", required = false, defaultValue = "0") final int page, - @RequestParam(name = "l", required = false, defaultValue = "50") final int pageSize, - @RequestParam(name = "d", required = false, defaultValue = "ASC") final Sort.Direction direction, - @RequestParam(name = "s", required = false, defaultValue = "id") final String[] sort, - @RequestParam(name = "f", required = false) String filterCode, - @RequestBody(required = false) DescriptorFilter filter) throws IOException { + @RequestParam(name = "l", required = false, defaultValue = "50") final int pageSize, + @RequestParam(name = "d", required = false, defaultValue = "ASC") final Sort.Direction direction, + @RequestParam(name = "s", required = false, defaultValue = "id") final String[] sort, + @RequestParam(name = "f", required = false) String filterCode, + @RequestBody(required = false) DescriptorFilter filter) throws IOException { if (filterCode != null) { filter = shortFilterService.filterByCode(filterCode, DescriptorFilter.class); @@ -145,9 +145,9 @@ public class DescriptorController { */ @PostMapping(value = "/list/{filterCode}") public FilteredPage listDescriptorsByShort(@RequestParam(name = "p", required = false, defaultValue = "0") final int page, - @RequestParam(name = "l", required = false, defaultValue = "50") final int pageSize, - @RequestParam(name = "d", required = false, defaultValue = "ASC") final Sort.Direction direction, - @RequestParam(name = "s", required = false, defaultValue = "id") final String[] sort, @PathVariable("filterCode") final String filterCode) throws IOException { + @RequestParam(name = "l", required = false, defaultValue = "50") final int pageSize, + @RequestParam(name = "d", required = false, defaultValue = "ASC") final Sort.Direction direction, + @RequestParam(name = "s", required = false, defaultValue = "id") final String[] sort, @PathVariable("filterCode") final String filterCode) throws IOException { final DescriptorFilter filter = shortFilterService.filterByCode(filterCode, DescriptorFilter.class); return new FilteredPage<>(filterCode, filter, descriptorService.listDescriptors(filter, new PageRequest(page, Integer.min(pageSize, 100), direction, sort))); @@ -244,16 +244,16 @@ public class DescriptorController { } /** - * Loads descriptor by uuid and version and tries to publish it. + * Loads descriptor by uuid and version and sets new publish state * * @param uuid descriptor UUID * @param version record version - * @param published (admin-only) set's the published flag to specified value + * @param published sends to the review step or unpublish * @return published Descriptor */ @RequestMapping(value = "/publish", method = RequestMethod.POST) public Descriptor publishDescriptor(@RequestParam(value = "uuid", required = true) final UUID uuid, @RequestParam(value = "version", required = true) final int version, - @RequestParam(name = "published", required = false, defaultValue = "true") final boolean published) { + @RequestParam(name = "published", required = false, defaultValue = "true") final boolean published) { final Descriptor descriptor = descriptorService.getDescriptor(uuid, version); @@ -264,4 +264,17 @@ public class DescriptorController { } } + /** + * Loads descriptor by uuid and version and tries to publish it. + * + * @param uuid descriptor UUID + * @param version record version + * @return published Descriptor (admin-only) + */ + @RequestMapping(value = "/approve", method = RequestMethod.POST) + public Descriptor approveDataset(@RequestParam(value = "uuid", required = true) final UUID uuid, @RequestParam(value = "version", required = true) final int version) { + final Descriptor descriptor = descriptorService.getDescriptor(uuid, version); + return descriptorService.approveDescriptor(descriptor); + } + } diff --git a/src/main/java/org/genesys/catalog/api/v0/DescriptorListController.java b/src/main/java/org/genesys/catalog/api/v0/DescriptorListController.java index 8df1799d112d9f6a8cb08cf3ecb2e904161f4d5a..59c2e9725b3147c64ce7c8e4f1999e84f98391be 100644 --- a/src/main/java/org/genesys/catalog/api/v0/DescriptorListController.java +++ b/src/main/java/org/genesys/catalog/api/v0/DescriptorListController.java @@ -25,6 +25,7 @@ import javax.servlet.http.HttpServletResponse; import org.genesys.blocks.model.JsonViews; import org.genesys.catalog.api.FilteredPage; +import org.genesys.catalog.model.dataset.Dataset; import org.genesys.catalog.model.filters.DescriptorListFilter; import org.genesys.catalog.model.traits.Descriptor; import org.genesys.catalog.model.traits.DescriptorList; @@ -117,16 +118,16 @@ public class DescriptorListController { } /** - * Loads descriptor by uuid and version and tries to publish it. + * Loads descriptorList by uuid and version and sets new publish state * - * @param uuid descriptor UUID + * @param uuid descriptorList UUID * @param version record version - * @param published (admin-only) set's the published flag to specified value - * @return published Descriptor + * @param published sends to the review step or unpublish + * @return published DescriptorList */ @RequestMapping(value = "/publish", method = RequestMethod.POST) public DescriptorList publishDescriptorList(@RequestParam(value = "uuid", required = true) final UUID uuid, @RequestParam(value = "version", required = true) final int version, - @RequestParam(name = "published", required = false, defaultValue = "true") final boolean published) { + @RequestParam(name = "published", required = false, defaultValue = "true") final boolean published) { final DescriptorList descriptorList = descriptorListService.getDescriptorList(uuid, version); @@ -137,6 +138,19 @@ public class DescriptorListController { } } + /** + * Loads DescriptorList by uuid and version and tries to publish it. + * + * @param uuid descriptorList UUID + * @param version record version + * @return published DescriptorList (admin-only) + */ + @RequestMapping(value = "/approve", method = RequestMethod.POST) + public DescriptorList approveDescriptorList(@RequestParam(value = "uuid", required = true) final UUID uuid, @RequestParam(value = "version", required = true) final int version) { + final DescriptorList descriptorList = descriptorListService.getDescriptorList(uuid, version); + return descriptorListService.approveDescriptorList(descriptorList); + } + /** * Delete descriptor list. * @@ -241,9 +255,9 @@ public class DescriptorListController { */ @PostMapping(value = "/list/{filterCode}") public FilteredPage listDescriptorListsByCode(@RequestParam(name = "p", required = false, defaultValue = "0") final int page, - @RequestParam(name = "l", required = false, defaultValue = "50") final int pageSize, - @RequestParam(name = "d", required = false, defaultValue = "ASC") final Sort.Direction direction, - @RequestParam(name = "s", required = false, defaultValue = "id") final String[] sort, @PathVariable("filterCode") final String filterCode) throws IOException { + @RequestParam(name = "l", required = false, defaultValue = "50") final int pageSize, + @RequestParam(name = "d", required = false, defaultValue = "ASC") final Sort.Direction direction, + @RequestParam(name = "s", required = false, defaultValue = "id") final String[] sort, @PathVariable("filterCode") final String filterCode) throws IOException { final DescriptorListFilter filter = shortFilterService.filterByCode(filterCode, DescriptorListFilter.class); return new FilteredPage<>(filterCode, filter, descriptorListService.listDescriptorLists(filter, new PageRequest(page, Integer.min(pageSize, 100), direction, sort))); diff --git a/src/main/java/org/genesys/catalog/model/dataset/Dataset.java b/src/main/java/org/genesys/catalog/model/dataset/Dataset.java index 9cee720f77d0219eca6ccdd7a77617aa888666b1..e869790ab7927041870d2b4c985526a1aa120931 100644 --- a/src/main/java/org/genesys/catalog/model/dataset/Dataset.java +++ b/src/main/java/org/genesys/catalog/model/dataset/Dataset.java @@ -28,6 +28,7 @@ import org.genesys.catalog.model.Partner; import org.genesys.catalog.model.traits.Descriptor; import org.genesys.catalog.service.PublishValidationInterface; import org.genesys.filerepository.model.RepositoryFile; +import org.genesys2.server.model.PublishState; import org.genesys2.util.MCPDUtil; import org.springframework.data.elasticsearch.annotations.Document; import org.springframework.data.elasticsearch.annotations.Field; @@ -176,8 +177,9 @@ public class Dataset extends UuidModel implements Publishable, SelfCleaning, Pub @Column(nullable = true, length = 200) private String created; - /** The published. */ - private boolean published = false; + /** The publish state. */ + @Enumerated(EnumType.ORDINAL) + private PublishState state = PublishState.DRAFT; /** * Preupdate. @@ -464,22 +466,31 @@ public class Dataset extends UuidModel implements Publishable, SelfCleaning, Pub this.created = created; } - /* - * (non-Javadoc) - * @see org.genesys.blocks.model.Publishable#isPublished() + /** + * Gets the state. + * + * @return the state */ - @Override - public boolean isPublished() { - return this.published; + public PublishState getState() { + return state; } /** - * Sets the published. + * Sets the publish state. * - * @param published the published to set + * @param state the new publish state */ - public void setPublished(final boolean published) { - this.published = published; + public void setState(final PublishState state) { + this.state = state; + } + + /* + * (non-Javadoc) + * @see org.genesys.blocks.model.Publishable#isPublished() + */ + @Override + public boolean isPublished() { + return this.state == PublishState.PUBLISHED; } /** diff --git a/src/main/java/org/genesys/catalog/model/filters/DatasetFilter.java b/src/main/java/org/genesys/catalog/model/filters/DatasetFilter.java index 189b8386545c6cc315586d5898bcdedd91ef04a5..9cee19b4e8d89e05f318e40ec39a376525300f69 100644 --- a/src/main/java/org/genesys/catalog/model/filters/DatasetFilter.java +++ b/src/main/java/org/genesys/catalog/model/filters/DatasetFilter.java @@ -27,6 +27,7 @@ import org.genesys.blocks.model.filters.UuidModelFilter; import com.querydsl.core.BooleanBuilder; import com.querydsl.core.types.Predicate; +import org.genesys2.server.model.PublishState; /** * The Class DatasetFilter. @@ -56,8 +57,8 @@ public class DatasetFilter extends UuidModelFilter { /** The language. */ public Set language; - /** The published. */ - public Boolean published; + /** The publish state. */ + public Set state; /** The crop. */ public Set crop; @@ -71,8 +72,8 @@ public class DatasetFilter extends UuidModelFilter { final BooleanBuilder and = new BooleanBuilder(); super.buildQuery(dataset._super, and); - if (published != null) { - and.and(dataset.published.eq(published)); + if (state != null && !state.isEmpty()) { + and.and(dataset.state.in(state)); } if (title != null) { and.and(title.buildQuery(dataset.title)); diff --git a/src/main/java/org/genesys/catalog/model/filters/DescriptorFilter.java b/src/main/java/org/genesys/catalog/model/filters/DescriptorFilter.java index af2838a5c6d258fa8410619aa583e69c1ae33402..e655352cf16d0e6891d22fd63cd3cd78d4c8edef 100644 --- a/src/main/java/org/genesys/catalog/model/filters/DescriptorFilter.java +++ b/src/main/java/org/genesys/catalog/model/filters/DescriptorFilter.java @@ -32,6 +32,7 @@ import org.genesys.catalog.model.traits.QDescriptorList; import com.querydsl.core.BooleanBuilder; import com.querydsl.core.types.Predicate; import com.querydsl.jpa.JPAExpressions; +import org.genesys2.server.model.PublishState; /** * The Class DescriptorFilter. @@ -74,8 +75,8 @@ public class DescriptorFilter extends UuidModelFilter { /** The publisher. */ public Set publisher; - /** The published. */ - public Boolean published; + /** The publish state. */ + public Set state; /** The integer only. */ public Boolean integerOnly; @@ -114,8 +115,8 @@ public class DescriptorFilter extends UuidModelFilter { if (publisher != null && !publisher.isEmpty()) { and.and(descriptorPath.publisher.in(publisher)); } - if (published != null) { - and.and(descriptorPath.published.eq(published)); + if (state != null && !state.isEmpty()) { + and.and(descriptorPath.state.in(state)); } if (integerOnly != null) { and.and(descriptorPath.integerOnly.eq(integerOnly)); diff --git a/src/main/java/org/genesys/catalog/model/filters/DescriptorListFilter.java b/src/main/java/org/genesys/catalog/model/filters/DescriptorListFilter.java index 8c8678dd0e6e3863490129d17822e7e3c31788df..768db36d1b3caec47f89ae26257cef699834c7d9 100644 --- a/src/main/java/org/genesys/catalog/model/filters/DescriptorListFilter.java +++ b/src/main/java/org/genesys/catalog/model/filters/DescriptorListFilter.java @@ -26,6 +26,7 @@ import org.genesys.blocks.model.filters.UuidModelFilter; import com.querydsl.core.BooleanBuilder; import com.querydsl.core.types.Predicate; +import org.genesys2.server.model.PublishState; /** * The Class DescriptorListFilter. @@ -53,8 +54,8 @@ public class DescriptorListFilter extends UuidModelFilter { /** The crop. */ public Set crop; - /** The published. */ - public Boolean published; + /** The publish state. */ + public Set state; /** The publisher. */ public Set publisher; @@ -71,8 +72,8 @@ public class DescriptorListFilter extends UuidModelFilter { if (crop != null && !crop.isEmpty()) { and.and(descriptorList.crop.in(crop)); } - if (published != null) { - and.and(descriptorList.published.eq(published)); + if (state != null && !state.isEmpty()) { + and.and(descriptorList.state.in(state)); } if (publisher != null && !publisher.isEmpty()) { and.and(descriptorList.publisher.in(publisher)); diff --git a/src/main/java/org/genesys/catalog/model/traits/Descriptor.java b/src/main/java/org/genesys/catalog/model/traits/Descriptor.java index 0590d1532e2ad390e37ab3e08d1f4f71c1f51076..0fb28f25d89e2031638abe58b17497e238585757 100644 --- a/src/main/java/org/genesys/catalog/model/traits/Descriptor.java +++ b/src/main/java/org/genesys/catalog/model/traits/Descriptor.java @@ -23,6 +23,7 @@ import org.genesys.catalog.model.Partner; import org.genesys.catalog.model.dataset.Dataset; import org.genesys.catalog.model.vocab.ControlledVocabulary; import org.genesys.catalog.model.vocab.VocabularyTerm; +import org.genesys2.server.model.PublishState; import org.springframework.dao.DataIntegrityViolationException; import org.springframework.data.elasticsearch.annotations.Document; import org.springframework.data.elasticsearch.annotations.Field; @@ -130,7 +131,8 @@ public class Descriptor extends UuidModel implements SelfCleaning, Publishable, private String publisher; /** Not published by default. */ - private boolean published = false; + @Enumerated(EnumType.ORDINAL) + private PublishState state = PublishState.DRAFT; /** Allow only integers, no decimal numbers. */ private Boolean integerOnly; @@ -235,7 +237,7 @@ public class Descriptor extends UuidModel implements SelfCleaning, Publishable, * @param descriptor the descriptor */ public Descriptor(final Descriptor descriptor) { - this(descriptor.getVersionTag(), descriptor.getTitle(), descriptor.description, descriptor.getDataType(), descriptor.isPublished(), descriptor.isKey(), descriptor + this(descriptor.getVersionTag(), descriptor.getTitle(), descriptor.description, descriptor.getDataType(), descriptor.getState(), descriptor.isKey(), descriptor .getIntegerOnly(), descriptor.getMinValue(), descriptor.getMaxValue(), descriptor.getColumnName(), descriptor.getUom(), descriptor.getVocabulary(), descriptor .getOwner(), descriptor.getDescriptorLists()); } @@ -247,7 +249,7 @@ public class Descriptor extends UuidModel implements SelfCleaning, Publishable, * @param title the title * @param description the description * @param dataType the data type - * @param published the published + * @param state the publish state * @param key the key * @param integerOnly the integer only * @param minValue the min value @@ -258,14 +260,14 @@ public class Descriptor extends UuidModel implements SelfCleaning, Publishable, * @param owner the owner * @param descriptorLists the descriptor lists */ - public Descriptor(final String versionTag, final String title, final String description, final DataType dataType, final boolean published, final boolean key, + public Descriptor(final String versionTag, final String title, final String description, final DataType dataType, final PublishState state, final boolean key, final Boolean integerOnly, final Double minValue, final Double maxValue, final String columnName, final String uom, final ControlledVocabulary vocabulary, final Partner owner, final List descriptorLists) { this.versionTag = versionTag; this.title = title; this.description = description; this.dataType = dataType; - this.published = published; + this.state = state; this.key = key; this.integerOnly = integerOnly; this.minValue = minValue; @@ -566,16 +568,25 @@ public class Descriptor extends UuidModel implements SelfCleaning, Publishable, */ @Override public boolean isPublished() { - return published; + return this.state == PublishState.PUBLISHED; } /** - * Sets the published. + * Gets the state. * - * @param published the published to set + * @return the state */ - public void setPublished(final boolean published) { - this.published = published; + public PublishState getState() { + return state; + } + + /** + * Sets the publish state. + * + * @param state the new publish state + */ + public void setState(final PublishState state) { + this.state = state; } /** diff --git a/src/main/java/org/genesys/catalog/model/traits/DescriptorList.java b/src/main/java/org/genesys/catalog/model/traits/DescriptorList.java index f87e2c9871374c35b55c01085d4993665fb9569b..05f544eb7e59758e2ba4e619f4cb78aa5729c278 100644 --- a/src/main/java/org/genesys/catalog/model/traits/DescriptorList.java +++ b/src/main/java/org/genesys/catalog/model/traits/DescriptorList.java @@ -26,6 +26,7 @@ import org.genesys.blocks.model.SelfCleaning; import org.genesys.blocks.model.UuidModel; import org.genesys.blocks.security.model.AclAwareModel; import org.genesys.catalog.model.Partner; +import org.genesys2.server.model.PublishState; import org.springframework.data.elasticsearch.annotations.Document; import org.springframework.data.elasticsearch.annotations.Field; import org.springframework.data.elasticsearch.annotations.FieldType; @@ -70,7 +71,8 @@ public class DescriptorList extends UuidModel implements Publishable, SelfCleani private String description; /** Not published by default. */ - private boolean published = false; + @Enumerated(EnumType.ORDINAL) + private PublishState state = PublishState.DRAFT; /** Trait URL. */ private String url; @@ -268,16 +270,25 @@ public class DescriptorList extends UuidModel implements Publishable, SelfCleani */ @Override public boolean isPublished() { - return this.published; + return this.state == PublishState.PUBLISHED; } /** - * Sets the published. + * Gets the state. * - * @param published the new published + * @return the state */ - public void setPublished(final boolean published) { - this.published = published; + public PublishState getState() { + return state; + } + + /** + * Sets the publish state. + * + * @param state the new publish state + */ + public void setState(final PublishState state) { + this.state = state; } /** diff --git a/src/main/java/org/genesys/catalog/persistence/dataset/DatasetRepository.java b/src/main/java/org/genesys/catalog/persistence/dataset/DatasetRepository.java index 0ccfe87217540d8f322cb6825d9b3e8ccd1366e0..6a5a78f4776478e865ddb8c80b3a0d73fd08e01e 100644 --- a/src/main/java/org/genesys/catalog/persistence/dataset/DatasetRepository.java +++ b/src/main/java/org/genesys/catalog/persistence/dataset/DatasetRepository.java @@ -73,6 +73,6 @@ public interface DatasetRepository extends JpaRepository, QueryDs * * @return the data about last published datasets */ - @Query("select year(d.lastModifiedDate), month(d.lastModifiedDate), day(d.lastModifiedDate), d.title, d.uuid, d.owner.shortName from Dataset d where d.published = true order by year(d.lastModifiedDate) desc, month(d.lastModifiedDate) desc, day(d.lastModifiedDate) desc") + @Query("select year(d.lastModifiedDate), month(d.lastModifiedDate), day(d.lastModifiedDate), d.title, d.uuid, d.owner.shortName from Dataset d where d.state = 1 order by year(d.lastModifiedDate) desc, month(d.lastModifiedDate) desc, day(d.lastModifiedDate) desc") List lastPublished(); } diff --git a/src/main/java/org/genesys/catalog/service/DatasetService.java b/src/main/java/org/genesys/catalog/service/DatasetService.java index eef4902428e451457a711443b5da485afe19dd04..5d16b89babdf54afa9d49e80ad8082fb4889e246 100644 --- a/src/main/java/org/genesys/catalog/service/DatasetService.java +++ b/src/main/java/org/genesys/catalog/service/DatasetService.java @@ -200,13 +200,21 @@ public interface DatasetService { Dataset upsertAccessions(Dataset dataset, Set accessionIdentifiers) throws NotFoundElement; /** - * Validates and publishes an unpublished dataset. + * Puts the dataset into the Review state to be reviewed by admin. Admin and the user with MANAGE permission - only. * * @param dataset the dataset - * @return published dataset + * @return dataset in REVIEWING state */ Dataset publishDataset(Dataset dataset); + /** + * Validates and publishes an unpublished dataset. Admin - only. + * + * @param dataset the dataset + * @return published dataset + */ + Dataset approveDataset(Dataset dataset); + /** * Un-publishes a dataset. Admin and the user with MANAGE permission - only. * diff --git a/src/main/java/org/genesys/catalog/service/DescriptorListService.java b/src/main/java/org/genesys/catalog/service/DescriptorListService.java index cd76933a89c53b1a4688ce2e26f7e55564b5ca0b..27eddf9d520003d100953514b62eb363fd032385 100644 --- a/src/main/java/org/genesys/catalog/service/DescriptorListService.java +++ b/src/main/java/org/genesys/catalog/service/DescriptorListService.java @@ -134,14 +134,22 @@ public interface DescriptorListService { DescriptorList deleteDescriptorList(DescriptorList descriptorList); /** - * Publish an unpublished descriptor list. The method validates the data and - * sets the {@link DescriptorList#isPublished()} flag to true. + * Puts the descriptorList into the Review state to be reviewed by admin. + * Admin and the user with MANAGE permission - only. * - * @param descriptorList an unpublished descriptor list - * @return published descriptor list + * @param descriptorList the descriptor + * @return descriptor in REVIEWING state */ DescriptorList publishDescriptorList(DescriptorList descriptorList); + /** + * Validates and publishes an unpublished descriptorList. Admin - only. + * + * @param descriptorList the descriptorList + * @return published descriptorList + */ + DescriptorList approveDescriptorList(DescriptorList descriptorList); + /** * Un-publish a published descriptor list. Admin and the user with MANAGE permission - only. * diff --git a/src/main/java/org/genesys/catalog/service/DescriptorService.java b/src/main/java/org/genesys/catalog/service/DescriptorService.java index 15854534b6415d8fe6f0825794a08e7a5397a6b4..6819940099381b9b0aaed71b46db7717684b7242 100644 --- a/src/main/java/org/genesys/catalog/service/DescriptorService.java +++ b/src/main/java/org/genesys/catalog/service/DescriptorService.java @@ -111,14 +111,22 @@ public interface DescriptorService { List upsertDescriptors(List source); /** - * Publish an unpublished descriptor. The method validates the data and sets the - * {@link Descriptor#isPublished()} flag to true. + * Puts the descriptor into the Review state to be reviewed by admin. + * Admin and the user with MANAGE permission - only. * - * @param descriptor an unpublished descriptor - * @return published descriptor + * @param descriptor the descriptor + * @return descriptor in REVIEWING state */ Descriptor publishDescriptor(Descriptor descriptor); + /** + * Validates and publishes an unpublished descriptor. Admin - only. + * + * @param descriptor the descriptor + * @return published descriptor + */ + Descriptor approveDescriptor(Descriptor descriptor); + /** * Un-publish a published descriptor. Admin and the user with MANAGE permission - only. * diff --git a/src/main/java/org/genesys/catalog/service/impl/DatasetServiceImpl.java b/src/main/java/org/genesys/catalog/service/impl/DatasetServiceImpl.java index 896368b2211643110431e719731265c956c7c94f..cec2dea018dd16771bce299dd4ce0a208611c15b 100644 --- a/src/main/java/org/genesys/catalog/service/impl/DatasetServiceImpl.java +++ b/src/main/java/org/genesys/catalog/service/impl/DatasetServiceImpl.java @@ -46,6 +46,7 @@ import org.genesys.filerepository.InvalidRepositoryPathException; import org.genesys.filerepository.NoSuchRepositoryFileException; import org.genesys.filerepository.model.RepositoryFile; import org.genesys.filerepository.service.RepositoryService; +import org.genesys2.server.model.PublishState; import org.genesys2.server.model.UserRole; import org.genesys2.server.model.genesys.Accession; import org.genesys2.server.security.SecurityUtils; @@ -155,6 +156,7 @@ public class DatasetServiceImpl implements DatasetService { } copyValues(dataset, input); + dataset.setState(PublishState.DRAFT); return lazyLoad(datasetRepository.save(dataset)); } @@ -191,6 +193,8 @@ public class DatasetServiceImpl implements DatasetService { } else { dataset.getDescriptors().add(inputDescriptor); descriptorUuids.add(inputDescriptor.getUuid()); + // We will change its PublishState only if we add at least one new Descriptor + dataset.setState(PublishState.DRAFT); } } @@ -212,6 +216,7 @@ public class DatasetServiceImpl implements DatasetService { // Keep descriptors that are not in the list dataset.setDescriptors(dataset.getDescriptors().stream().filter(descriptor -> !descriptorUuids.contains(descriptor.getUuid())).collect(Collectors.toList())); + dataset.setState(PublishState.DRAFT); return lazyLoad(datasetRepository.save(dataset)); } @@ -236,7 +241,7 @@ public class DatasetServiceImpl implements DatasetService { * {@inheritDoc} */ @Override - @PostAuthorize("hasRole('ADMINISTRATOR') || returnObject==null || returnObject.published || hasPermission(returnObject, 'read')") + @PostAuthorize("hasRole('ADMINISTRATOR') || returnObject==null || returnObject.isPublished() || hasPermission(returnObject, 'read')") public Dataset loadDataset(final Dataset input) { LOG.debug("Load Dataset. Input data {}", input); final Dataset dataset = datasetRepository.findOne(input.getId()); @@ -257,7 +262,7 @@ public class DatasetServiceImpl implements DatasetService { */ @Override public Page listDatasets(final DatasetFilter filter, final Pageable page) { - return datasetRepository.findAll(new BooleanBuilder().and(filter.buildQuery()).and(QDataset.dataset.published.eq(true)), page); + return datasetRepository.findAll(new BooleanBuilder().and(filter.buildQuery()).and(QDataset.dataset.state.in(PublishState.PUBLISHED)), page); } /** @@ -285,7 +290,7 @@ public class DatasetServiceImpl implements DatasetService { * {@inheritDoc} */ @Override - @PostAuthorize("hasRole('ADMINISTRATOR') || returnObject==null || returnObject.published || hasPermission(returnObject, 'read')") + @PostAuthorize("hasRole('ADMINISTRATOR') || returnObject==null || returnObject.isPublished() || hasPermission(returnObject, 'read')") public Dataset loadDataset(final UUID uuid) { final Dataset dataset = datasetRepository.findByUuid(uuid); return lazyLoad(dataset); @@ -295,7 +300,7 @@ public class DatasetServiceImpl implements DatasetService { * {@inheritDoc} */ @Override - @PostAuthorize("hasRole('ADMINISTRATOR') || returnObject==null || returnObject.published || hasPermission(returnObject, 'read')") + @PostAuthorize("hasRole('ADMINISTRATOR') || returnObject==null || returnObject.isPublished() || hasPermission(returnObject, 'read')") public Dataset loadDataset(final UUID uuid, final int version) { final Dataset dataset = datasetRepository.findByUuidAndVersion(uuid, version); return lazyLoad(dataset); @@ -352,7 +357,7 @@ public class DatasetServiceImpl implements DatasetService { * {@inheritDoc} */ @Override - @PreAuthorize("#dataset.published || hasRole('ADMINISTRATOR') || hasPermission(#dataset, 'read')") + @PreAuthorize("#dataset.isPublished() || hasRole('ADMINISTRATOR') || hasPermission(#dataset, 'read')") public List listDatasetFiles(final Dataset dataset) throws NotFoundElement { return dataset.getRepositoryFiles(); } @@ -415,6 +420,7 @@ public class DatasetServiceImpl implements DatasetService { if (loadedDataset == null) { throw new NotFoundElement("Dataset doesn't exist"); } + loadedDataset.setState(PublishState.DRAFT); loadedDataset.setAccessionIdentifiers(lookupMatchingAccessions(new HashSet<>(accessionIdentifiers))); return lazyLoad(datasetRepository.save(loadedDataset)); } @@ -433,13 +439,39 @@ public class DatasetServiceImpl implements DatasetService { if (loaded.isPublished()) { throw new InvalidApiUsageException("Dataset is already published"); } + if (loaded.getState() == PublishState.REVIEWING) { + throw new InvalidApiUsageException("The dataset is already under approval"); + } + + loaded.setState(PublishState.REVIEWING); + + return lazyLoad(datasetRepository.save(loaded)); + } + + /** + * {@inheritDoc} + */ + @Override + @Transactional + @PreAuthorize("hasRole('ADMINISTRATOR')") + public Dataset approveDataset(final Dataset dataset) { + final Dataset loaded = datasetRepository.findByUuidAndVersion(dataset.getUuid(), dataset.getVersion()); + if (loaded == null) { + throw new NotFoundElement("No dataset with specified uuid and version"); + } + if (loaded.isPublished()) { + throw new InvalidApiUsageException("Dataset is already published"); + } + if (loaded.getState() == PublishState.DRAFT) { + throw new InvalidApiUsageException("Dataset should be sent for review before publication"); + } // Map errorMap = loaded.validation(); // // if (!errorMap.isEmpty()) // throw new PublishValidationException(errorMap); - loaded.setPublished(true); + loaded.setState(PublishState.PUBLISHED); { // Relax permissions on dataset files: allow USERS and ANONYMOUS to read the @@ -471,7 +503,7 @@ public class DatasetServiceImpl implements DatasetService { } } - loaded.setPublished(false); + loaded.setState(PublishState.DRAFT); { // Tighten permissions on dataset files @@ -488,7 +520,7 @@ public class DatasetServiceImpl implements DatasetService { */ @Override public long countPublished() { - return datasetRepository.count(dataset.published.eq(true)); + return datasetRepository.count(dataset.state.in(PublishState.PUBLISHED)); } /** @@ -507,7 +539,7 @@ public class DatasetServiceImpl implements DatasetService { */ private void copyValues(final Dataset target, final Dataset source) { target.setTitle(source.getTitle()); - target.setPublished(source.isPublished()); + target.setState(source.getState()); target.setDescription(source.getDescription()); target.setFormat(source.getFormat()); target.setLanguage(source.getLanguage()); diff --git a/src/main/java/org/genesys/catalog/service/impl/DescriptorListServiceImpl.java b/src/main/java/org/genesys/catalog/service/impl/DescriptorListServiceImpl.java index c56416332d84bd0a46971390e0efb93100d838d0..274850b0a654dd9e9550b1dd0296dc185fa00aec 100644 --- a/src/main/java/org/genesys/catalog/service/impl/DescriptorListServiceImpl.java +++ b/src/main/java/org/genesys/catalog/service/impl/DescriptorListServiceImpl.java @@ -37,6 +37,7 @@ import org.genesys.catalog.model.traits.DescriptorList; import org.genesys.catalog.persistence.traits.DescriptorListRepository; import org.genesys.catalog.service.DescriptorListService; import org.genesys.catalog.service.DescriptorService; +import org.genesys2.server.model.PublishState; import org.genesys2.server.model.UserRole; import org.genesys2.server.security.SecurityUtils; import org.slf4j.Logger; @@ -94,6 +95,9 @@ public class DescriptorListServiceImpl implements DescriptorListService { copyValues(descriptorList, input); descriptorList.setOwner(input.getOwner()); + // can not be published when creating + descriptorList.setState(PublishState.DRAFT); + return descriptorListRepository.save(descriptorList); } @@ -233,19 +237,19 @@ public class DescriptorListServiceImpl implements DescriptorListService { } @Override - @PostAuthorize("hasRole('ADMINISTRATOR') || returnObject==null || returnObject.published || hasPermission(returnObject, 'write')") + @PostAuthorize("hasRole('ADMINISTRATOR') || returnObject==null || returnObject.isPublished() || hasPermission(returnObject, 'write')") public DescriptorList getDescriptorList(final Long id) { return lazyLoad(descriptorListRepository.findOne(id)); } @Override - @PostAuthorize("hasRole('ADMINISTRATOR') || returnObject==null || returnObject.published || hasPermission(returnObject, 'write')") + @PostAuthorize("hasRole('ADMINISTRATOR') || returnObject==null || returnObject.isPublished() || hasPermission(returnObject, 'write')") public DescriptorList getDescriptorList(final UUID uuid) { return lazyLoad(descriptorListRepository.findByUuid(uuid)); } @Override - @PostAuthorize("hasRole('ADMINISTRATOR') || returnObject==null || returnObject.published || hasPermission(returnObject, 'write')") + @PostAuthorize("hasRole('ADMINISTRATOR') || returnObject==null || returnObject.isPublished() || hasPermission(returnObject, 'write')") public DescriptorList getDescriptorList(final UUID uuid, final int version) { return lazyLoad(descriptorListRepository.findByUuidAndVersion(uuid, version)); } @@ -257,7 +261,7 @@ public class DescriptorListServiceImpl implements DescriptorListService { // do not copy source#owner target.setCrop(source.getCrop()); target.setDescription(source.getDescription()); - target.setPublished(source.isPublished()); + target.setState(source.getState()); target.setTitle(source.getTitle()); target.setUrl(source.getUrl()); target.setVersionTag(source.getVersionTag()); @@ -278,7 +282,7 @@ public class DescriptorListServiceImpl implements DescriptorListService { } @Override - @PostAuthorize("hasRole('ADMINISTRATOR') || returnObject==null || returnObject.published || hasPermission(returnObject, 'write')") + @PostAuthorize("hasRole('ADMINISTRATOR') || returnObject==null || returnObject.isPublished() || hasPermission(returnObject, 'write')") public DescriptorList loadDescriptorList(final DescriptorList input) { return loadDescriptorList(input.getUuid(), input.getVersion()); } @@ -302,7 +306,7 @@ public class DescriptorListServiceImpl implements DescriptorListService { @Override public Page listDescriptorLists(final DescriptorListFilter filters, final Pageable page) { - return descriptorListRepository.findAll(new BooleanBuilder().and(filters.buildQuery()).and(descriptorList.published.eq(true)), page); + return descriptorListRepository.findAll(new BooleanBuilder().and(filters.buildQuery()).and(descriptorList.state.in(PublishState.PUBLISHED)), page); } @Override @@ -335,15 +339,47 @@ public class DescriptorListServiceImpl implements DescriptorListService { if (loaded.isPublished()) { throw new InvalidApiUsageException("Descriptor List is already published"); } + if (loaded.getState() == PublishState.REVIEWING) { + throw new InvalidApiUsageException("The Descriptor List is already under approval"); + } for (final Descriptor descriptor : loaded.getDescriptors()) { - if (!descriptor.isPublished()) { - LOG.info("Publishing descriptor {}", descriptor); + if (descriptor.getState() == PublishState.DRAFT) { + LOG.info("Send to review descriptor {}", descriptor); descriptorService.publishDescriptor(descriptor); } } - loaded.setPublished(true); + loaded.setState(PublishState.REVIEWING); + return lazyLoad(descriptorListRepository.save(loaded)); + } + + /** + * {@inheritDoc} + */ + @Override + @Transactional + @PreAuthorize("hasRole('ADMINISTRATOR')") + public DescriptorList approveDescriptorList(final DescriptorList descriptorList) { + final DescriptorList loaded = descriptorListRepository.findByUuidAndVersion(descriptorList.getUuid(), descriptorList.getVersion()); + if (loaded == null) { + throw new NotFoundElement("No DescriptorList with specified uuid and version"); + } + if (loaded.isPublished()) { + throw new InvalidApiUsageException("Descriptor List is already published"); + } + if (loaded.getState() == PublishState.DRAFT) { + throw new InvalidApiUsageException("Descriptor List should be sent for review before publication"); + } + + for (final Descriptor descriptor : loaded.getDescriptors()) { + if (descriptor.getState() == PublishState.REVIEWING) { + LOG.info("Approving descriptor {}", descriptor); + descriptorService.approveDescriptor(descriptor); + } + } + + loaded.setState(PublishState.PUBLISHED); return lazyLoad(descriptorListRepository.save(loaded)); } @@ -366,7 +402,7 @@ public class DescriptorListServiceImpl implements DescriptorListService { } } - loaded.setPublished(false); + loaded.setState(PublishState.DRAFT); return lazyLoad(descriptorListRepository.save(loaded)); } @@ -376,10 +412,10 @@ public class DescriptorListServiceImpl implements DescriptorListService { @Override public List autocompleteDescriptorLists(final String text) { if (StringUtils.isBlank(text)) { - final Predicate predicate = descriptorList.published.eq(true); + final Predicate predicate = descriptorList.state.in(PublishState.PUBLISHED); return descriptorListRepository.findAll(predicate, new PageRequest(0, 15, new Sort("title"))).getContent(); } else { - final Predicate predicate = descriptorList.published.eq(true).and(descriptorList.title.containsIgnoreCase(text)); + final Predicate predicate = descriptorList.state.in(PublishState.PUBLISHED).and(descriptorList.title.containsIgnoreCase(text)); return descriptorListRepository.findAll(predicate, new PageRequest(0, 15, new Sort("title"))).getContent(); } } diff --git a/src/main/java/org/genesys/catalog/service/impl/DescriptorServiceImpl.java b/src/main/java/org/genesys/catalog/service/impl/DescriptorServiceImpl.java index 0fba67958a971768e1180faff25bedc6a8d9e9b2..7f67b885840df10cbea86e942f809928879a3bbf 100644 --- a/src/main/java/org/genesys/catalog/service/impl/DescriptorServiceImpl.java +++ b/src/main/java/org/genesys/catalog/service/impl/DescriptorServiceImpl.java @@ -37,6 +37,7 @@ import org.genesys.catalog.persistence.traits.DescriptorRepository; import org.genesys.catalog.persistence.vocab.VocabularyTermRepository; import org.genesys.catalog.service.DescriptorService; import org.genesys.catalog.service.VersionManager; +import org.genesys2.server.model.PublishState; import org.genesys2.server.model.UserRole; import org.genesys2.server.security.SecurityUtils; import org.slf4j.Logger; @@ -99,6 +100,9 @@ public class DescriptorServiceImpl implements DescriptorService { descriptor.setUuid(input.getUuid()); descriptor.setVersionTag(input.getVersionTag()); + // can not be published when creating + descriptor.setState(PublishState.DRAFT); + return lazyLoad(descriptorRepository.save(descriptor)); } @@ -141,6 +145,7 @@ public class DescriptorServiceImpl implements DescriptorService { loaded.apply(descriptor); // Keep owner loaded.setOwner(owner); + loaded.setState(PublishState.DRAFT); return lazyLoad(descriptorRepository.save(loaded)); } @@ -177,7 +182,7 @@ public class DescriptorServiceImpl implements DescriptorService { * {@inheritDoc} */ @Override - @PostAuthorize("hasRole('ADMINISTRATOR') || returnObject==null || returnObject.published || hasPermission(returnObject, 'write')") + @PostAuthorize("hasRole('ADMINISTRATOR') || returnObject==null || returnObject.isPublished() || hasPermission(returnObject, 'write')") public Descriptor getDescriptor(final UUID uuid) { return lazyLoad(descriptorRepository.findByUuid(uuid)); } @@ -189,7 +194,7 @@ public class DescriptorServiceImpl implements DescriptorService { * int) */ @Override - @PostAuthorize("hasRole('ADMINISTRATOR') || returnObject==null || returnObject.published || hasPermission(returnObject, 'read')") + @PostAuthorize("hasRole('ADMINISTRATOR') || returnObject==null || returnObject.isPublished() || hasPermission(returnObject, 'read')") public Descriptor getDescriptor(final UUID uuid, final int version) { return lazyLoad(descriptorRepository.findByUuidAndVersion(uuid, version)); } @@ -213,7 +218,7 @@ public class DescriptorServiceImpl implements DescriptorService { */ @Override public Page listDescriptors(final DescriptorFilter descriptorFilter, final Pageable page) { - return descriptorRepository.findAll(new BooleanBuilder().and(descriptorFilter.buildQuery()).and(QDescriptor.descriptor.published.eq(true)), page); + return descriptorRepository.findAll(new BooleanBuilder().and(descriptorFilter.buildQuery()).and(QDescriptor.descriptor.state.in(PublishState.PUBLISHED)), page); } /** @@ -314,8 +319,37 @@ public class DescriptorServiceImpl implements DescriptorService { if (loaded.isPublished()) { throw new InvalidApiUsageException("Descriptor is already published"); } + if (loaded.getState() == PublishState.REVIEWING) { + throw new InvalidApiUsageException("The Descriptor is already under approval"); + } + + loaded.setState(PublishState.REVIEWING); + return lazyLoad(descriptorRepository.save(loaded)); + } + + + /* + * (non-Javadoc) + * @see + * org.genesys.catalog.service.DescriptorService#approveDescriptor(org.genesys. + * catalog.model.traits.Descriptor) + */ + @Override + @Transactional + @PreAuthorize("hasRole('ADMINISTRATOR')") + public Descriptor approveDescriptor(final Descriptor descriptor) { + final Descriptor loaded = descriptorRepository.findByUuidAndVersion(descriptor.getUuid(), descriptor.getVersion()); + if (loaded == null) { + throw new NotFoundElement("No Descriptor with specified uuid and version"); + } + if (loaded.isPublished()) { + throw new InvalidApiUsageException("Descriptor is already published"); + } + if (loaded.getState() == PublishState.DRAFT) { + throw new InvalidApiUsageException("Descriptor should be sent for review before publication"); + } - loaded.setPublished(true); + loaded.setState(PublishState.PUBLISHED); return lazyLoad(descriptorRepository.save(loaded)); } @@ -341,7 +375,7 @@ public class DescriptorServiceImpl implements DescriptorService { } } - loaded.setPublished(false); + loaded.setState(PublishState.DRAFT); return lazyLoad(descriptorRepository.save(loaded)); } @@ -352,8 +386,8 @@ public class DescriptorServiceImpl implements DescriptorService { * catalog.model.traits.Descriptor) */ @Override - @PreAuthorize("#descriptor.published || hasRole('ADMINISTRATOR') || hasPermission(#descriptor, 'read')") - @PostFilter("hasRole('ADMINISTRATOR') || filterObject==null || filterObject.published || hasPermission(filterObject, 'write')") + @PreAuthorize("#descriptor.isPublished() || hasRole('ADMINISTRATOR') || hasPermission(#descriptor, 'read')") + @PostFilter("hasRole('ADMINISTRATOR') || filterObject==null || filterObject.isPublished() || hasPermission(filterObject, 'write')") public List getDescriptorLists(final Descriptor descriptor) { final List list = descriptorRepository.listDescriptorLists(descriptor); list.forEach(d -> entityManager.detach(d)); @@ -367,8 +401,8 @@ public class DescriptorServiceImpl implements DescriptorService { * catalog.model.traits.Descriptor) */ @Override - @PreAuthorize("#descriptor.published || hasPermission(#descriptor, 'read')") - @PostFilter("hasRole('ADMINISTRATOR') || filterObject==null || filterObject.published || hasPermission(filterObject, 'write')") + @PreAuthorize("#descriptor.isPublished() || hasPermission(#descriptor, 'read')") + @PostFilter("hasRole('ADMINISTRATOR') || filterObject==null || filterObject.isPublished() || hasPermission(filterObject, 'write')") public List getDatasets(final Descriptor descriptor) { final List list = descriptorRepository.listDatasets(descriptor); list.forEach(d -> entityManager.detach(d)); @@ -377,14 +411,14 @@ public class DescriptorServiceImpl implements DescriptorService { @Override @Transactional - @PreAuthorize("#descriptor.published || hasRole('ADMINISTRATOR') || hasPermission(#descriptor, 'read')") + @PreAuthorize("#descriptor.isPublished() || hasRole('ADMINISTRATOR') || hasPermission(#descriptor, 'read')") public Descriptor nextVersion(final Descriptor descriptor, final boolean major) { final Descriptor source = reloadDescriptor(descriptor); LOG.info("Creating new version for descriptor uuid={} id={}", descriptor.getUuid(), descriptor.getId()); final Descriptor copy = new Descriptor(); copy.apply(source); copy.setUuid(null); - copy.setPublished(false); + copy.setState(PublishState.DRAFT); copy.setVersionTag(versionManager.next(descriptor.getVersionTag(), major)); copy.setOwner(descriptor.getOwner()); return lazyLoad(descriptorRepository.save(copy)); diff --git a/src/main/java/org/genesys2/server/model/PublishState.java b/src/main/java/org/genesys2/server/model/PublishState.java new file mode 100644 index 0000000000000000000000000000000000000000..3dd54e86920f32cd913742e13274eb9eb40e0b50 --- /dev/null +++ b/src/main/java/org/genesys2/server/model/PublishState.java @@ -0,0 +1,32 @@ +/* + * Copyright 2018 Global Crop Diversity Trust + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.genesys2.server.model; + +public enum PublishState { + DRAFT(0), PUBLISHED(1), REVIEWING(2); + + private final int state; + + PublishState(final int state) { + this.state = state; + } + + public int getState() { + return state; + } + +} diff --git a/src/main/resources/liquibase/liquibase-changeLog.yml b/src/main/resources/liquibase/liquibase-changeLog.yml index 9f80a6c6c7b95e3ffe374656e0274a4b59ee96d8..eb55381609f445c34873e8ad3502e00be2c29782 100644 --- a/src/main/resources/liquibase/liquibase-changeLog.yml +++ b/src/main/resources/liquibase/liquibase-changeLog.yml @@ -3626,3 +3626,87 @@ databaseChangeLog: name: accessionId indexName: FK_ekss0g19xg9h2tsp1zl8g9h2t tableName: dataset_accessions + +- changeSet: + id: 1532610825317-1 + author: mborodenko + comment: Add column `state` to descriptor table + changes: + - addColumn: + columns: + - column: + defaultValueNumeric: 0 + constraints: + nullable: false + name: state + type: INT + tableName: descriptor + +- changeSet: + id: 1532610825317-2 + author: mborodenko + comment: Add column `state` to descriptorlist table + changes: + - addColumn: + columns: + - column: + defaultValueNumeric: 0 + constraints: + nullable: false + name: state + type: INT + tableName: descriptorlist + +- changeSet: + id: 1532610825317-3 + author: mborodenko + comment: Add column `state` to dataset table + changes: + - addColumn: + columns: + - column: + defaultValueNumeric: 0 + constraints: + nullable: false + name: state + type: INT + tableName: dataset + +- changeSet: + id: 1532610825317-4 + author: mborodenko + comment: Migrate data to new column + changes: + - sql: + sql: >- + UPDATE descriptor SET state = 0 WHERE published = 0; + UPDATE descriptor SET state = 1 WHERE published = 1; + - dropColumn: + tableName: descriptor + columnName: published + +- changeSet: + id: 1532610825317-5 + author: mborodenko + comment: Migrate data to new column + changes: + - sql: + sql: >- + UPDATE descriptorlist SET state = 0 WHERE published = 0; + UPDATE descriptorlist SET state = 1 WHERE published = 1; + - dropColumn: + tableName: descriptorlist + columnName: published + +- changeSet: + id: 1532610825317-6 + author: mborodenko + comment: Migrate data to new column + changes: + - sql: + sql: >- + UPDATE dataset SET state = 0 WHERE published = 0; + UPDATE dataset SET state = 1 WHERE published = 1; + - dropColumn: + tableName: dataset + columnName: published diff --git a/src/test/java/org/genesys/test/base/AbstractApiTest.java b/src/test/java/org/genesys/test/base/AbstractApiTest.java index f6c177cd1324dba5726d99cfe907292ba4a812ba..3aa7aa1bc58aa4d1cf493ede5722116a0d0432b2 100644 --- a/src/test/java/org/genesys/test/base/AbstractApiTest.java +++ b/src/test/java/org/genesys/test/base/AbstractApiTest.java @@ -29,6 +29,7 @@ import org.genesys.catalog.persistence.traits.DescriptorRepository; import org.genesys.catalog.service.DatasetService; import org.genesys.catalog.service.ShortFilterService; import org.genesys.test.config.ApplicationConfig; +import org.genesys2.server.model.PublishState; import org.junit.After; import org.junit.Before; import org.junit.Rule; @@ -94,17 +95,17 @@ public abstract class AbstractApiTest extends AbstractTest { super.cleanup(); } - protected Dataset setUpDataset(final boolean published) { - return setupDataset("Test Dataset Title", "Test Dataset Description", setUpPartner("Partner", true, "PartnerShortName", UUID.randomUUID()), published); + protected Dataset setUpDataset(final PublishState state) { + return setupDataset("Test Dataset Title", "Test Dataset Description", setUpPartner("Partner", true, "PartnerShortName", UUID.randomUUID()), state); } - protected Dataset setupDataset(final String title, final String description, final Partner owner, final boolean published) { + protected Dataset setupDataset(final String title, final String description, final Partner owner, final PublishState state) { final Dataset input = new Dataset(); input.setTitle(title); input.setDescription(description); input.setOwner(owner); // input.setAccessionIdentifiers(accessions); - input.setPublished(published); + input.setState(state); return input; } @@ -132,7 +133,7 @@ public abstract class AbstractApiTest extends AbstractTest { descriptor.setVersionTag("1.0"); descriptor.setOwner(setUpPartner("NewPartner", true, "ShortName", UUID.randomUUID())); descriptor.setCrop("banana"); - descriptor.setPublished(true); + descriptor.setState(PublishState.PUBLISHED); return descriptor; } diff --git a/src/test/java/org/genesys/test/catalog/api/v0/DatasetControllerTest.java b/src/test/java/org/genesys/test/catalog/api/v0/DatasetControllerTest.java index bb6064f3f8923487bdd9fb6fdd6f353311dc4bea..e42c5926a316200c5d87753743eb75d2db30bfdd 100644 --- a/src/test/java/org/genesys/test/catalog/api/v0/DatasetControllerTest.java +++ b/src/test/java/org/genesys/test/catalog/api/v0/DatasetControllerTest.java @@ -33,6 +33,7 @@ import org.genesys.catalog.model.filters.DatasetFilter; import org.genesys.catalog.model.filters.PartnerFilter; import org.genesys.catalog.model.traits.Descriptor; import org.genesys.test.base.AbstractApiTest; +import org.genesys2.server.model.PublishState; import org.junit.Ignore; import org.junit.Test; import org.springframework.http.MediaType; @@ -49,7 +50,7 @@ public class DatasetControllerTest extends AbstractApiTest { @Test @WithMockUser(username = "user", password = "user", roles = "ADMINISTRATOR") public void getDataset() throws Exception { - Dataset dataset = setUpDataset(false); + Dataset dataset = setUpDataset(PublishState.PUBLISHED); dataset = datasetService.createDataset(dataset); /*@formatter:off*/ @@ -67,7 +68,7 @@ public class DatasetControllerTest extends AbstractApiTest { @Test @WithMockUser(username = "user", password = "user", roles = "ADMINISTRATOR") public void publishDataset() throws Exception { - Dataset dataset = setUpDataset(false); + Dataset dataset = setUpDataset(PublishState.DRAFT); dataset = datasetService.createDataset(dataset); /*@formatter:off*/ @@ -80,16 +81,36 @@ public class DatasetControllerTest extends AbstractApiTest { .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8)) .andExpect(jsonPath("$", not(nullValue()))) .andExpect(jsonPath("$.uuid", is(dataset.getUuid().toString()))) - .andExpect(jsonPath("$.published", is(true))) + .andExpect(jsonPath("$.state", is(PublishState.REVIEWING.name()))) // .andExpect(jsonPath("$.version", is(dataset.getVersion() + 1))) .andDo(document("dataset-publish")); /*@formatter:on*/ } + @Test + @WithMockUser(username = "user", password = "user", roles = "ADMINISTRATOR") + public void approveDataset() throws Exception { + Dataset dataset = setUpDataset(PublishState.DRAFT); + dataset = datasetService.createDataset(dataset); + dataset = datasetService.publishDataset(dataset); + + /*@formatter:off*/ + mockMvc + .perform(post(DatasetController.CONTROLLER_URL.concat("/approve")) + .param("uuid", dataset.getUuid().toString()) + .param("version", dataset.getVersion().toString())) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8)) + .andExpect(jsonPath("$", not(nullValue()))) + .andExpect(jsonPath("$.uuid", is(dataset.getUuid().toString()))) + .andExpect(jsonPath("$.state", is(PublishState.PUBLISHED.name()))); + /*@formatter:on*/ + } + @Test @WithMockUser(username = "user", password = "user", roles = "ADMINISTRATOR") public void unpublishDataset() throws Exception { - Dataset dataset = setUpDataset(false); + Dataset dataset = setUpDataset(PublishState.DRAFT); dataset = datasetService.createDataset(dataset); /*@formatter:off*/ @@ -99,8 +120,7 @@ public class DatasetControllerTest extends AbstractApiTest { .param("version", dataset.getVersion().toString())) // .andDo(MockMvcResultHandlers.print()) .andExpect(status().isOk()) - .andExpect(jsonPath("$.published", is(true))) - // .andExpect(jsonPath("$.version", is(dataset.getVersion() + 1))) + .andExpect(jsonPath("$.state", is(PublishState.REVIEWING.name()))) ; mockMvc @@ -110,7 +130,7 @@ public class DatasetControllerTest extends AbstractApiTest { .param("published", "false")) // .andDo(MockMvcResultHandlers.print()) .andExpect(status().isOk()) - .andExpect(jsonPath("$.published", is(false))); + .andExpect(jsonPath("$.state", is(PublishState.DRAFT.name()))); /*@formatter:on*/ } @@ -137,9 +157,9 @@ public class DatasetControllerTest extends AbstractApiTest { partnerFilter.shortName.add("PartnerShortNameTwo"); datasetFilter.owner = partnerFilter; - datasetService.createDataset(setUpDataset(false)); + datasetService.createDataset(setUpDataset(PublishState.DRAFT)); final Dataset dataset2 = datasetService.createDataset(setupDataset("Test Dataset Title Two", "Test Dataset Description Two", setUpPartner("PartnerTwo", true, - "PartnerShortNameTwo", UUID.randomUUID()), true)); + "PartnerShortNameTwo", UUID.randomUUID()), PublishState.PUBLISHED)); /*@formatter:off*/ mockMvc @@ -161,8 +181,8 @@ public class DatasetControllerTest extends AbstractApiTest { public void listDatasetsByFilterCodeTest() throws Exception { final Dataset dataset = datasetService.createDataset(setupDataset("Test Dataset Title Two", "Test Dataset Description Two", setUpPartner("PartnerTwo", true, - "PartnerShortNameTwo", UUID.randomUUID()), true)); - datasetService.createDataset(setUpDataset(true)); + "PartnerShortNameTwo", UUID.randomUUID()), PublishState.PUBLISHED)); + datasetService.createDataset(setUpDataset(PublishState.PUBLISHED)); assertThat(datasetRepository.count(), is(2L)); // datasetRepository.findAll().forEach(ds -> { // LOG.info(ds + " publ=" + ds.isPublished() + " title=" + @@ -197,7 +217,7 @@ public class DatasetControllerTest extends AbstractApiTest { @Test @WithMockUser(username = "user", password = "user", roles = "ADMINISTRATOR") public void createDataset() throws Exception { - final Dataset dataset = setUpDataset(false); + final Dataset dataset = setUpDataset(PublishState.DRAFT); final String s = verboseMapper.writeValueAsString(dataset); @@ -218,7 +238,7 @@ public class DatasetControllerTest extends AbstractApiTest { @WithMockUser(username = "user", password = "user", roles = "ADMINISTRATOR") public void updateDataset() throws Exception { - final Dataset dataset = datasetService.createDataset(setUpDataset(false)); + final Dataset dataset = datasetService.createDataset(setUpDataset(PublishState.DRAFT)); dataset.setTitle("Title 2"); final String s = verboseMapper.writeValueAsString(dataset); @@ -241,7 +261,7 @@ public class DatasetControllerTest extends AbstractApiTest { @WithMockUser(username = "user", password = "user", roles = "ADMINISTRATOR") public void updateDatasetCrops() throws Exception { - final Dataset dataset = datasetService.createDataset(setUpDataset(false)); + final Dataset dataset = datasetService.createDataset(setUpDataset(PublishState.DRAFT)); dataset.setTitle("Title 2"); dataset.setCrops(Sets.newHashSet("yam", "cassava")); final String s = verboseMapper.writeValueAsString(dataset); @@ -266,7 +286,7 @@ public class DatasetControllerTest extends AbstractApiTest { @Test @WithMockUser(username = "user", password = "user", roles = "ADMINISTRATOR") public void upsertAccessions() throws Exception { - final Dataset dataset = datasetService.createDataset(setUpDataset(false)); + final Dataset dataset = datasetService.createDataset(setUpDataset(PublishState.DRAFT)); final Set accessionIdentifiers = new HashSet() { /** @@ -304,7 +324,7 @@ public class DatasetControllerTest extends AbstractApiTest { @Test @WithMockUser(username = "user", password = "user", roles = "ADMINISTRATOR") public void addDescriptorTest() throws Exception { - final Dataset dataset = datasetService.createDataset(setUpDataset(false)); + final Dataset dataset = datasetService.createDataset(setUpDataset(PublishState.DRAFT)); final Descriptor descriptor = descriptorRepository.save(setUpDescriptor()); @@ -330,7 +350,7 @@ public class DatasetControllerTest extends AbstractApiTest { @WithMockUser(username = "user", password = "user", roles = "ADMINISTRATOR") public void removeDescriptorTest() throws Exception { final Descriptor descriptor = descriptorRepository.save(setUpDescriptor()); - Dataset dataset = datasetService.createDataset(setUpDataset(false)); + Dataset dataset = datasetService.createDataset(setUpDataset(PublishState.DRAFT)); dataset = datasetService.addDescriptors(dataset, descriptor); final String s = verboseMapper.writeValueAsString(new UUID[] { descriptor.getUuid() }); diff --git a/src/test/java/org/genesys/test/catalog/api/v0/DatasetCreatorControllerTest.java b/src/test/java/org/genesys/test/catalog/api/v0/DatasetCreatorControllerTest.java index 18cb41319b094c1161ca0aa992d66b8552e5b848..eea3afda1236750489215f08b6d4e5fc345231c8 100644 --- a/src/test/java/org/genesys/test/catalog/api/v0/DatasetCreatorControllerTest.java +++ b/src/test/java/org/genesys/test/catalog/api/v0/DatasetCreatorControllerTest.java @@ -24,6 +24,7 @@ import org.genesys.catalog.model.dataset.DatasetCreator; import org.genesys.catalog.service.DatasetCreatorService; import org.genesys.test.base.AbstractApiTest; import org.genesys.test.base.WithMockOAuth2Authentication; +import org.genesys2.server.model.PublishState; import org.junit.After; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -49,7 +50,7 @@ public class DatasetCreatorControllerTest extends AbstractApiTest { @Test @WithMockOAuth2Authentication(roles = { "ADMINISTRATOR" }, scopes = { "write" }) public void listDatasetCreators() throws Exception { - final Dataset dataset = datasetService.createDataset(setUpDataset(false)); + final Dataset dataset = datasetService.createDataset(setUpDataset(PublishState.DRAFT)); final DatasetCreator datasetCreator = buildDatasetCreator("TestFullName", "TestEmailName", "0673579007", dataset); final DatasetCreator creator = datasetCreatorService.createDatasetCreator(dataset, datasetCreator); @@ -66,7 +67,7 @@ public class DatasetCreatorControllerTest extends AbstractApiTest { @Test @WithMockOAuth2Authentication(roles = { "ADMINISTRATOR" }, scopes = { "write" }) public void loadByUuid() throws Exception { - final Dataset dataset = datasetService.createDataset(setUpDataset(true)); + final Dataset dataset = datasetService.createDataset(setUpDataset(PublishState.PUBLISHED)); final DatasetCreator datasetCreator = buildDatasetCreator("TestFullName", "TestEmailName", "0673579007", dataset); final DatasetCreator creator = datasetCreatorService.createDatasetCreator(dataset, datasetCreator); @@ -84,7 +85,7 @@ public class DatasetCreatorControllerTest extends AbstractApiTest { @Test @WithMockOAuth2Authentication(roles = { "ADMINISTRATOR" }, scopes = { "write" }) public void createDatasetCreator() throws Exception { - final Dataset dataset = datasetService.createDataset(setUpDataset(false)); + final Dataset dataset = datasetService.createDataset(setUpDataset(PublishState.DRAFT)); final DatasetCreator datasetCreator = buildDatasetCreator("TestFullName", "TestEmailName", "0673579007", dataset); final String s = verboseMapper.writeValueAsString(datasetCreator); @@ -105,7 +106,7 @@ public class DatasetCreatorControllerTest extends AbstractApiTest { @Test @WithMockOAuth2Authentication(roles = { "ADMINISTRATOR" }, scopes = { "write" }) public void deleteDatasetCreator() throws Exception { - final Dataset dataset = datasetService.createDataset(setUpDataset(false)); + final Dataset dataset = datasetService.createDataset(setUpDataset(PublishState.DRAFT)); final DatasetCreator datasetCreator = buildDatasetCreator("TestFullName", "TestEmailName", "0673579007", dataset); final DatasetCreator creator = datasetCreatorService.createDatasetCreator(dataset, datasetCreator); final String s = verboseMapper.writeValueAsString(creator); diff --git a/src/test/java/org/genesys/test/catalog/api/v0/DescriptorControllerTest.java b/src/test/java/org/genesys/test/catalog/api/v0/DescriptorControllerTest.java index 61be409f82d3cbf8ba295b5837acde3c38dc8478..7101f1a3fbb0d93c3883f6af72d69495eb165314 100644 --- a/src/test/java/org/genesys/test/catalog/api/v0/DescriptorControllerTest.java +++ b/src/test/java/org/genesys/test/catalog/api/v0/DescriptorControllerTest.java @@ -18,7 +18,9 @@ package org.genesys.test.catalog.api.v0; import static org.hamcrest.Matchers.*; import static org.junit.Assert.assertThat; +import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.document; import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.documentationConfiguration; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; import java.util.UUID; @@ -36,6 +38,7 @@ import org.genesys.catalog.persistence.PartnerRepository; import org.genesys.catalog.persistence.traits.DescriptorRepository; import org.genesys.test.base.AbstractApiTest; import org.genesys.test.base.WithMockOAuth2Authentication; +import org.genesys2.server.model.PublishState; import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -124,7 +127,7 @@ public class DescriptorControllerTest extends AbstractApiTest { @Test @WithMockOAuth2Authentication(roles = { "ADMINISTRATOR" }, scopes = { "write" }) public void listDescriptorsTest() throws Exception { - createDescriptorTest(); + descriptorRepository.save(setUpDescriptor(PublishState.PUBLISHED)); final DescriptorFilter descriptorFilter = new DescriptorFilter(); final PartnerFilter partnerFilter = new PartnerFilter(); @@ -151,7 +154,7 @@ public class DescriptorControllerTest extends AbstractApiTest { @Test @WithMockOAuth2Authentication(roles = { "ADMINISTRATOR" }, scopes = { "write" }) public void listDescriptorsByFilterCodeTest() throws Exception { - final Descriptor descriptor = descriptorRepository.save(setUpDescriptor(true)); + final Descriptor descriptor = descriptorRepository.save(setUpDescriptor(PublishState.PUBLISHED)); assertThat(descriptorRepository.count(), is(1L)); final DescriptorFilter filter = new DescriptorFilter(); @@ -181,7 +184,7 @@ public class DescriptorControllerTest extends AbstractApiTest { @Test @WithMockOAuth2Authentication(roles = { "USER" }, scopes = { "write" }) public void getDescriptorTest() throws Exception { - final Descriptor descriptor = descriptorRepository.save(setUpDescriptor(true)); + final Descriptor descriptor = descriptorRepository.save(setUpDescriptor(PublishState.PUBLISHED)); /*@formatter:off*/ mockMvc @@ -196,7 +199,7 @@ public class DescriptorControllerTest extends AbstractApiTest { @Test @WithMockOAuth2Authentication(roles = { "ADMINISTRATOR" }, scopes = { "write" }) public void updateDescriptorTest() throws Exception { - final Descriptor descriptor = descriptorRepository.save(setUpDescriptor(false)); + final Descriptor descriptor = descriptorRepository.save(setUpDescriptor(PublishState.DRAFT)); final Descriptor newDescriptor = new Descriptor(); newDescriptor.apply(descriptor); newDescriptor.setTitle("Test title 2"); @@ -225,7 +228,7 @@ public class DescriptorControllerTest extends AbstractApiTest { @WithMockOAuth2Authentication(roles = { "ADMINISTRATOR" }, scopes = { "write" }) public void createDescriptorTest() throws Exception { - final String s = verboseMapper.writeValueAsString(setUpDescriptor(true)); + final String s = verboseMapper.writeValueAsString(setUpDescriptor(PublishState.DRAFT)); /*@formatter:off*/ mockMvc @@ -243,7 +246,7 @@ public class DescriptorControllerTest extends AbstractApiTest { @Test @WithMockOAuth2Authentication(roles = { "ADMINISTRATOR" }, scopes = { "write" }) public void createCodedDescriptorTest() throws Exception { - final Descriptor input = setUpDescriptor(true); + final Descriptor input = setUpDescriptor(PublishState.DRAFT); input.setDataType(DataType.CODED); input.setTerms(Lists.newArrayList(VocabularyTerm.fromData(TERM_CODE_1, TERM_TITLE_1), VocabularyTerm.fromData(TERM_CODE_2, TERM_TITLE_2))); @@ -264,7 +267,47 @@ public class DescriptorControllerTest extends AbstractApiTest { /*@formatter:on*/ } - private Descriptor setUpDescriptor(final boolean published) { + @Test + @WithMockOAuth2Authentication(roles = { "ADMINISTRATOR" }, scopes = { "write" }) + public void publishDescriptorTest() throws Exception { + Descriptor descriptor = setUpDescriptor(PublishState.DRAFT); + descriptor = descriptorRepository.save(descriptor); + + /*@formatter:off*/ + mockMvc + .perform(post(DescriptorController.CONTROLLER_URL.concat("/publish")) + .param("uuid", descriptor.getUuid().toString()) + .param("version", descriptor.getVersion().toString())) +// .andDo(MockMvcResultHandlers.print()) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8)) + .andExpect(jsonPath("$", not(nullValue()))) + .andExpect(jsonPath("$.uuid", is(descriptor.getUuid().toString()))) + .andExpect(jsonPath("$.state", is(PublishState.REVIEWING.name()))) + .andDo(document("descriptor-publish")); + /*@formatter:on*/ + } + + @Test + @WithMockOAuth2Authentication(roles = { "ADMINISTRATOR" }, scopes = { "write" }) + public void approveDescriptorTest() throws Exception { + Descriptor descriptor = setUpDescriptor(PublishState.REVIEWING); + descriptor = descriptorRepository.save(descriptor); + + /*@formatter:off*/ + mockMvc + .perform(post(DescriptorController.CONTROLLER_URL.concat("/approve")) + .param("uuid", descriptor.getUuid().toString()) + .param("version", descriptor.getVersion().toString())) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8)) + .andExpect(jsonPath("$", not(nullValue()))) + .andExpect(jsonPath("$.uuid", is(descriptor.getUuid().toString()))) + .andExpect(jsonPath("$.state", is(PublishState.PUBLISHED.name()))); + /*@formatter:on*/ + } + + private Descriptor setUpDescriptor(final PublishState state) { final Descriptor descriptor = new Descriptor(); descriptor.setOwner(partner); descriptor.setUuid(UUID.randomUUID()); @@ -276,7 +319,7 @@ public class DescriptorControllerTest extends AbstractApiTest { descriptor.setMaxValue(null); descriptor.setVersionTag("1.0"); descriptor.setCrop(CROPNAME); - descriptor.setPublished(published); + descriptor.setState(state); return descriptor; } diff --git a/src/test/java/org/genesys/test/catalog/api/v0/DescriptorListControllerTest.java b/src/test/java/org/genesys/test/catalog/api/v0/DescriptorListControllerTest.java index 3fa4d32f67f2b3ffdbcde660fd56c47a6ec2037b..e4534492fb8e74c58ec564f38b412be93f2c23cb 100644 --- a/src/test/java/org/genesys/test/catalog/api/v0/DescriptorListControllerTest.java +++ b/src/test/java/org/genesys/test/catalog/api/v0/DescriptorListControllerTest.java @@ -19,6 +19,7 @@ package org.genesys.test.catalog.api.v0; import static org.hamcrest.Matchers.*; import static org.junit.Assert.assertThat; import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; import java.util.UUID; @@ -33,6 +34,7 @@ import org.genesys.catalog.persistence.traits.DescriptorListRepository; import org.genesys.catalog.persistence.traits.DescriptorRepository; import org.genesys.test.base.AbstractApiTest; import org.genesys.test.base.WithMockOAuth2Authentication; +import org.genesys2.server.model.PublishState; import org.junit.After; import org.junit.Before; import org.junit.Ignore; @@ -105,7 +107,7 @@ public class DescriptorListControllerTest extends AbstractApiTest { @Test @WithMockUser(username = "user", password = "user", roles = "USER") public void createDescriptorListTest() throws Exception { - final String s = verboseMapper.writeValueAsString(setUpDescriptorList(true, UUID.randomUUID(), "Des 1", "Title 1", "Vt 1")); + final String s = verboseMapper.writeValueAsString(setUpDescriptorList(PublishState.PUBLISHED, UUID.randomUUID(), "Des 1", "Title 1", "Vt 1")); /*@formatter:off*/ mockMvc @@ -124,7 +126,7 @@ public class DescriptorListControllerTest extends AbstractApiTest { @Test @WithMockUser(username = "user", password = "user", roles = "ADMINISTRATOR") public void updateDescriptorListTest() throws Exception { - DescriptorList descriptorList = setUpDescriptorList(false, UUID.randomUUID(), "Des 2", "Title 2", "Vt 2"); + DescriptorList descriptorList = setUpDescriptorList(PublishState.DRAFT, UUID.randomUUID(), "Des 2", "Title 2", "Vt 2"); descriptorList = descriptorListRepository.save(descriptorList); descriptorList.setTitle("Title 1"); @@ -154,7 +156,7 @@ public class DescriptorListControllerTest extends AbstractApiTest { @WithMockUser(username = "user", password = "user", roles = "ADMINISTRATOR") @Ignore public void failUpdatePublishedDescriptorListTest() throws Exception { - DescriptorList descriptorList = setUpDescriptorList(true, UUID.randomUUID(), "Des 2", "Title 2", "Vt 2"); + DescriptorList descriptorList = setUpDescriptorList(PublishState.PUBLISHED, UUID.randomUUID(), "Des 2", "Title 2", "Vt 2"); descriptorList = descriptorListRepository.save(descriptorList); descriptorList.setTitle("Updated title"); @@ -177,10 +179,10 @@ public class DescriptorListControllerTest extends AbstractApiTest { @Test @WithMockUser(username = "user", password = "user", roles = "ADMINISTRATOR") public void listPublishedDescriptorListsTest() throws Exception { - DescriptorList descriptorList = setUpDescriptorList(true, UUID.randomUUID(), "Des 2", "Title 2", "Vt 2"); + DescriptorList descriptorList = setUpDescriptorList(PublishState.PUBLISHED, UUID.randomUUID(), "Des 2", "Title 2", "Vt 2"); descriptorList = descriptorListRepository.save(descriptorList); - descriptorListRepository.save(setUpDescriptorList(false, null, "Description 2", "Title 1", "Vt 1")); + descriptorListRepository.save(setUpDescriptorList(PublishState.DRAFT, null, "Description 2", "Title 1", "Vt 1")); assertThat(descriptorListRepository.count(), is(2l)); /*@formatter:off*/ @@ -201,10 +203,10 @@ public class DescriptorListControllerTest extends AbstractApiTest { @Test @WithMockUser(username = "user", password = "user", roles = "ADMINISTRATOR") public void autocompleteTest() throws Exception { - DescriptorList descriptorList = setUpDescriptorList(true, UUID.randomUUID(), "Des 2", "First Title", "Vt 2"); + DescriptorList descriptorList = setUpDescriptorList(PublishState.PUBLISHED, UUID.randomUUID(), "Des 2", "First Title", "Vt 2"); descriptorList = descriptorListRepository.save(descriptorList); - descriptorListRepository.save(setUpDescriptorList(false, null, "Description 2", "Second Title", "Vt 1")); + descriptorListRepository.save(setUpDescriptorList(PublishState.DRAFT, null, "Description 2", "Second Title", "Vt 1")); assertThat(descriptorListRepository.count(), is(2l)); /*@formatter:off*/ @@ -224,7 +226,7 @@ public class DescriptorListControllerTest extends AbstractApiTest { @Test @WithMockUser(username = "user", password = "user", roles = "ADMINISTRATOR") public void listDescriptorListsByFilterCodeTest() throws Exception { - DescriptorList descriptorList = setUpDescriptorList(true, UUID.randomUUID(), "Test description", "Test title", "Vt 2"); + DescriptorList descriptorList = setUpDescriptorList(PublishState.PUBLISHED, UUID.randomUUID(), "Test description", "Test title", "Vt 2"); descriptorList = descriptorListRepository.save(descriptorList); assertThat(descriptorListRepository.count(), is(1L)); @@ -254,7 +256,7 @@ public class DescriptorListControllerTest extends AbstractApiTest { @Test @WithMockOAuth2Authentication(roles = { "ADMINISTRATOR" }, scopes = { "write" }) public void getDescriptorListTest() throws Exception { - final DescriptorList descriptorList = setUpDescriptorList(true, UUID.randomUUID(), "Des 2", "Title 2", "Vt 2"); + final DescriptorList descriptorList = setUpDescriptorList(PublishState.PUBLISHED, UUID.randomUUID(), "Des 2", "Title 2", "Vt 2"); descriptorListRepository.save(descriptorList); final String s = verboseMapper.writeValueAsString(descriptorList); @@ -276,7 +278,7 @@ public class DescriptorListControllerTest extends AbstractApiTest { @WithMockUser(username = "user", password = "user", roles = "ADMINISTRATOR") @Ignore public void failRemovePublishedDescriptorList() throws Exception { - final DescriptorList descriptorList = setUpDescriptorList(true, UUID.randomUUID(), "Des 2", "Title 2", "Vt 2"); + final DescriptorList descriptorList = setUpDescriptorList(PublishState.PUBLISHED, UUID.randomUUID(), "Des 2", "Title 2", "Vt 2"); descriptorListRepository.save(descriptorList); /*@formatter:off*/ @@ -291,7 +293,7 @@ public class DescriptorListControllerTest extends AbstractApiTest { @Test @WithMockUser(username = "user", password = "user", roles = "ADMINISTRATOR") public void removeDescriptorList() throws Exception { - final DescriptorList descriptorList = setUpDescriptorList(false, UUID.randomUUID(), "Des 2", "Title 2", "Vt 2"); + final DescriptorList descriptorList = setUpDescriptorList(PublishState.DRAFT, UUID.randomUUID(), "Des 2", "Title 2", "Vt 2"); descriptorListRepository.save(descriptorList); /*@formatter:off*/ @@ -303,13 +305,52 @@ public class DescriptorListControllerTest extends AbstractApiTest { /*@formatter:on*/ } - private DescriptorList setUpDescriptorList(final boolean published, final UUID uuid, final String description, final String title, final String versionTag) + @Test + @WithMockUser(username = "user", password = "user", roles = "ADMINISTRATOR") + public void publishDescriptorListTest() throws Exception { + DescriptorList descriptorList = setUpDescriptorList(PublishState.DRAFT, UUID.randomUUID(), "Des 2", "Title 2", "Vt 2"); + descriptorList = descriptorListRepository.save(descriptorList); + + /*@formatter:off*/ + mockMvc + .perform(post(DescriptorListController.CONTROLLER_URL.concat("/publish")) + .param("uuid", descriptorList.getUuid().toString()) + .param("version", descriptorList.getVersion().toString())) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8)) + .andExpect(jsonPath("$", not(nullValue()))) + .andExpect(jsonPath("$.uuid", is(descriptorList.getUuid().toString()))) + .andExpect(jsonPath("$.state", is(PublishState.REVIEWING.name()))) + .andDo(document("descriptorList-publish")); + /*@formatter:on*/ + } + + @Test + @WithMockUser(username = "user", password = "user", roles = "ADMINISTRATOR") + public void approveDescriptorListTest() throws Exception { + DescriptorList descriptorList = setUpDescriptorList(PublishState.REVIEWING, UUID.randomUUID(), "Des 2", "Title 2", "Vt 2"); + descriptorList = descriptorListRepository.save(descriptorList); + + /*@formatter:off*/ + mockMvc + .perform(post(DescriptorListController.CONTROLLER_URL.concat("/approve")) + .param("uuid", descriptorList.getUuid().toString()) + .param("version", descriptorList.getVersion().toString())) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8)) + .andExpect(jsonPath("$", not(nullValue()))) + .andExpect(jsonPath("$.uuid", is(descriptorList.getUuid().toString()))) + .andExpect(jsonPath("$.state", is(PublishState.PUBLISHED.name()))); + /*@formatter:on*/ + } + + private DescriptorList setUpDescriptorList(final PublishState state, final UUID uuid, final String description, final String title, final String versionTag) throws JsonProcessingException { final DescriptorList o = new DescriptorList(); o.setOwner(partner); o.setDescription(description); o.setCrop(CROPNAME); - o.setPublished(published); + o.setState(state); o.setTitle(title); o.setUrl(URL); o.setVersionTag(versionTag); diff --git a/src/test/java/org/genesys/test/catalog/services/AbstractDatasetServiceTest.java b/src/test/java/org/genesys/test/catalog/services/AbstractDatasetServiceTest.java index d80a72a7bddce0987dc42c6cc52828ce7dac9329..9b17acfe37483c9a41dde35ea605fe736a0cedb4 100644 --- a/src/test/java/org/genesys/test/catalog/services/AbstractDatasetServiceTest.java +++ b/src/test/java/org/genesys/test/catalog/services/AbstractDatasetServiceTest.java @@ -38,6 +38,7 @@ import org.genesys2.server.persistence.AccessionRepository; import org.genesys2.server.persistence.FaoInstituteRepository; import org.genesys2.server.service.InstituteService; import org.genesys2.server.service.TaxonomyService; +import org.genesys2.server.model.PublishState; import org.junit.After; import org.junit.Before; import org.springframework.beans.factory.annotation.Autowired; @@ -93,7 +94,7 @@ public abstract class AbstractDatasetServiceTest extends CatalogServiceTest { super.cleanup(); } - protected Dataset buildAndSaveDataset(final String datasetTitle, final String datasetDescription, final Partner partner, final boolean published) { + protected Dataset buildAndSaveDataset(final String datasetTitle, final String datasetDescription, final Partner partner, final PublishState state) { final Set accessionIdentifiers = new HashSet() { /** @@ -110,17 +111,16 @@ public abstract class AbstractDatasetServiceTest extends CatalogServiceTest { } }; - return datasetService.createDataset(buildDataset(datasetTitle, datasetDescription, partner, accessionIdentifiers, published)); + return datasetService.createDataset(buildDataset(datasetTitle, datasetDescription, partner, accessionIdentifiers, state)); } - protected Dataset buildDataset(final String datasetTitle, final String datasetDescription, final Partner partner, final Set accessionIdentifiers, - final boolean published) { + protected Dataset buildDataset(final String datasetTitle, final String datasetDescription, final Partner partner, final Set accessionIdentifiers, final PublishState state) { final Dataset input = new Dataset(); input.setTitle(datasetTitle); input.setAccessionIdentifiers(accessionIdentifiers); input.setDescription(datasetDescription); input.setOwner(partner); - input.setPublished(published); + input.setState(state); return input; } diff --git a/src/test/java/org/genesys/test/catalog/services/DatasetPublishingTest.java b/src/test/java/org/genesys/test/catalog/services/DatasetPublishingTest.java index b91a2a67dc2246decdb857ccf8fb11cc34223940..8877d85dd0516de59e3d74996c0c162dcd67aee2 100644 --- a/src/test/java/org/genesys/test/catalog/services/DatasetPublishingTest.java +++ b/src/test/java/org/genesys/test/catalog/services/DatasetPublishingTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2017 Global Crop Diversity Trust + * Copyright 2018 Global Crop Diversity Trust * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -22,18 +22,19 @@ import org.genesys.catalog.annotations.PublishValidationException; import org.genesys.catalog.exceptions.InvalidApiUsageException; import org.genesys.catalog.exceptions.NotFoundElement; import org.genesys.catalog.model.dataset.Dataset; +import org.genesys2.server.model.PublishState; import org.junit.Before; import org.junit.Test; import org.springframework.transaction.annotation.Transactional; public class DatasetPublishingTest extends AbstractDatasetServiceTest { - private Dataset published; + private Dataset savedDataset; @Override @Transactional public void cleanup() throws Exception { - published = null; + savedDataset = null; descriptorRepository.deleteAll(); datasetRepository.deleteAll(); super.cleanup(); @@ -43,49 +44,104 @@ public class DatasetPublishingTest extends AbstractDatasetServiceTest { @Override public void beforeTest() throws Exception { super.beforeTest(); - final Dataset input = buildAndSaveDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, false); - assertThat(input.getVersion(), is(1)); - assertThat(input.getOwner(), not(nullValue())); - published = datasetService.publishDataset(input); - assertThat(published.getVersion(), is(2)); + savedDataset = buildAndSaveDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, PublishState.DRAFT); + assertThat(savedDataset.getVersion(), is(1)); + assertThat(savedDataset.getOwner(), not(nullValue())); } @Test - public void testPublishedDataset() throws NotFoundElement, PublishValidationException { - assertThat(published.isPublished(), is(true)); - assertThat(published.isPersisted(), is(true)); - assertThat(published.getId(), greaterThan(0l)); - assertThat(published.getVersion(), is(2)); + public void testSavedDataset() throws NotFoundElement, PublishValidationException { + assertThat(savedDataset.isPublished(), is(false)); + assertThat(savedDataset.isPersisted(), is(true)); + assertThat(savedDataset.getId(), greaterThan(0l)); - Dataset loaded = datasetService.loadDataset(published.getUuid()); + Dataset loaded = datasetService.loadDataset(savedDataset.getUuid()); assertThat(loaded, not(nullValue())); - loaded = datasetService.loadDataset(published.getUuid(), published.getVersion()); + loaded = datasetService.loadDataset(savedDataset.getUuid(), savedDataset.getVersion()); assertThat(loaded, not(nullValue())); } + @Test + public void testPublishDataset() { + assertThat(savedDataset.isPublished(), is(false)); + assertThat(savedDataset.getState(), is(PublishState.DRAFT)); + final Dataset loaded = datasetRepository.findByUuid(savedDataset.getUuid()); + assertThat(loaded, not(nullValue())); + final Dataset dataset = datasetService.publishDataset(savedDataset); + assertThat(dataset.isPublished(), is(false)); + assertThat(dataset.getState(), is(PublishState.REVIEWING)); + } + + @Test(expected = InvalidApiUsageException.class) + public void testPublishDatasetFailIfReviewing() { + assertThat(savedDataset.getState(), is(PublishState.DRAFT)); + final Dataset loaded = datasetRepository.findByUuid(savedDataset.getUuid()); + assertThat(loaded, not(nullValue())); + final Dataset reviewingDataset = datasetService.publishDataset(savedDataset); + assertThat(reviewingDataset.getState(), is(PublishState.REVIEWING)); + + // it should fail + datasetService.publishDataset(reviewingDataset); + } + + @Test(expected = InvalidApiUsageException.class) + public void testPublishDatasetFailIfPublished() { + assertThat(savedDataset.getState(), is(PublishState.DRAFT)); + final Dataset loaded = datasetRepository.findByUuid(savedDataset.getUuid()); + assertThat(loaded, not(nullValue())); + final Dataset reviewingDataset = datasetService.publishDataset(savedDataset); + assertThat(reviewingDataset.getState(), is(PublishState.REVIEWING)); + final Dataset publishedDataset = datasetService.approveDataset(reviewingDataset); + assertThat(publishedDataset.isPublished(), is(true)); + + // it should fail + datasetService.publishDataset(publishedDataset); + } + @Test public void testLoadDataset() throws NotFoundElement, PublishValidationException { - Dataset loaded = datasetRepository.findByUuid(published.getUuid()); + Dataset loaded = datasetRepository.findByUuid(savedDataset.getUuid()); assertThat(loaded, not(nullValue())); - loaded = datasetRepository.findByUuidAndVersion(published.getUuid(), published.getVersion()); + loaded = datasetRepository.findByUuidAndVersion(savedDataset.getUuid(), savedDataset.getVersion()); assertThat(loaded, not(nullValue())); } @Test(expected = InvalidApiUsageException.class) - public void testPublishDatasetFailWhenPublished() throws NotFoundElement, PublishValidationException { - assertThat(published.isPublished(), is(true)); - final Dataset loaded = datasetRepository.findByUuid(published.getUuid()); + public void testApproveDatasetFailIfDrafted() { + assertThat(savedDataset.getState(), is(PublishState.DRAFT)); + final Dataset loaded = datasetRepository.findByUuid(savedDataset.getUuid()); assertThat(loaded, not(nullValue())); - datasetService.publishDataset(published); + + // it should fail + datasetService.approveDataset(loaded); + } + + @Test(expected = InvalidApiUsageException.class) + public void testApproveDatasetFailWhenPublished() { + assertThat(savedDataset.getState(), is(PublishState.DRAFT)); + final Dataset loaded = datasetRepository.findByUuid(savedDataset.getUuid()); + assertThat(loaded, not(nullValue())); + final Dataset reviewingDataset = datasetService.publishDataset(savedDataset); + assertThat(reviewingDataset.getState(), is(PublishState.REVIEWING)); + final Dataset publishedDataset = datasetService.approveDataset(reviewingDataset); + assertThat(publishedDataset.isPublished(), is(true)); + + // it should fail + datasetService.approveDataset(publishedDataset); } @Test public void testUnpublishDataset() { - assertThat(published.isPublished(), is(true)); - final Dataset loaded = datasetRepository.findByUuid(published.getUuid()); + assertThat(savedDataset.getState(), is(PublishState.DRAFT)); + final Dataset loaded = datasetRepository.findByUuid(savedDataset.getUuid()); assertThat(loaded, not(nullValue())); - final Dataset dataset = datasetService.unpublishDataset(published); + final Dataset reviewingDataset = datasetService.publishDataset(savedDataset); + assertThat(reviewingDataset.getState(), is(PublishState.REVIEWING)); + final Dataset publishedDataset = datasetService.approveDataset(reviewingDataset); + assertThat(publishedDataset.isPublished(), is(true)); + + final Dataset dataset = datasetService.unpublishDataset(publishedDataset); assertThat(dataset.isPublished(), is(false)); } } diff --git a/src/test/java/org/genesys/test/catalog/services/DatasetServiceTest.java b/src/test/java/org/genesys/test/catalog/services/DatasetServiceTest.java index 295aaf6acc7c742d3821027c4ce58c755c3597e9..41b22389f65126015cc45b3cdd160ad817ae28d5 100644 --- a/src/test/java/org/genesys/test/catalog/services/DatasetServiceTest.java +++ b/src/test/java/org/genesys/test/catalog/services/DatasetServiceTest.java @@ -44,6 +44,7 @@ import org.genesys.filerepository.InvalidRepositoryFileDataException; import org.genesys.filerepository.InvalidRepositoryPathException; import org.genesys.filerepository.NoSuchRepositoryFileException; import org.genesys.filerepository.model.RepositoryFile; +import org.genesys2.server.model.PublishState; import org.genesys2.server.model.genesys.Accession; import org.genesys2.server.model.genesys.AccessionId; import org.junit.Test; @@ -63,7 +64,7 @@ public class DatasetServiceTest extends AbstractDatasetServiceTest { @Test public void testCreateDataset() { - final Dataset input = buildAndSaveDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, false); + final Dataset input = buildAndSaveDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, PublishState.DRAFT); assertThat(input, not(nullValue())); assertThat(input.getId(), not(nullValue())); assertThat(input.getAccessionIdentifiers().size(), is(1)); @@ -73,7 +74,7 @@ public class DatasetServiceTest extends AbstractDatasetServiceTest { @Test public void testCreateDatasetSelfCleaning() { - Dataset input = buildAndSaveDataset(DATASET_TITLE_1 + " ", " " + DATASET_DESCRIPTION_1, partner, false); + Dataset input = buildAndSaveDataset(DATASET_TITLE_1 + " ", " " + DATASET_DESCRIPTION_1, partner, PublishState.DRAFT); assertThat(input, not(nullValue())); assertThat(input.getTitle(), is(DATASET_TITLE_1)); assertThat(input.getDescription(), is(DATASET_DESCRIPTION_1)); @@ -87,7 +88,7 @@ public class DatasetServiceTest extends AbstractDatasetServiceTest { @Test public void testCreateDatasetWithCrops() { - Dataset input = buildDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, null, true); + Dataset input = buildDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, null, PublishState.PUBLISHED); input.setCrops(Sets.newHashSet("maize", "wheat")); input = datasetService.createDataset(input); assertThat(input, not(nullValue())); @@ -101,13 +102,13 @@ public class DatasetServiceTest extends AbstractDatasetServiceTest { @Test public void testCreateDatasetIsUnpublished() { - final Dataset input = buildAndSaveDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, false); + final Dataset input = buildAndSaveDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, PublishState.DRAFT); assertThat(input.isPublished(), not(is(true))); } @Test(expected = NotFoundElement.class) public void testRemoveDataset() { - final Dataset input = buildAndSaveDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, false); + final Dataset input = buildAndSaveDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, PublishState.DRAFT); final Dataset removed = datasetService.removeDataset(input); assertThat(removed, not(nullValue())); assertThat(removed, equalTo(input)); @@ -118,7 +119,7 @@ public class DatasetServiceTest extends AbstractDatasetServiceTest { public void testCreateDatasetForCopyDescriptors() { final Descriptor savedDescriptor = descriptorService.createDescriptor(createDescriptor(partner, "D1", "1.0", DataType.NUMERIC)); - final Dataset input2 = buildDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, null, false); + final Dataset input2 = buildDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, null, PublishState.DRAFT); input2.setDescriptors(new ArrayList() { /** * @@ -135,7 +136,7 @@ public class DatasetServiceTest extends AbstractDatasetServiceTest { @Test public void testUpdateAccessionIdentifiersInDataset() { - Dataset input = buildDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, null, false); + Dataset input = buildDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, null, PublishState.DRAFT); input = datasetService.createDataset(input); final Set accessionIdentifiers = new HashSet() { @@ -194,9 +195,9 @@ public class DatasetServiceTest extends AbstractDatasetServiceTest { */ @Test(expected = DataIntegrityViolationException.class) public void testFailUpdatePublishedDataset() { - Dataset input = buildAndSaveDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, false); - input.setPublished(Boolean.TRUE); - input = datasetService.updateDataset(input); + Dataset input = buildAndSaveDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, PublishState.DRAFT); + input = datasetService.publishDataset(input); + input = datasetService.approveDataset(input); input.setTitle(DATASET_TITLE_2); datasetService.updateDataset(input); } @@ -206,7 +207,7 @@ public class DatasetServiceTest extends AbstractDatasetServiceTest { */ @Test(expected = InvalidDataAccessApiUsageException.class) public void testFailUpdateWithoutIdentifiers() { - final Dataset input = buildAndSaveDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, false); + final Dataset input = buildAndSaveDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, PublishState.DRAFT); input.setId(null); datasetService.updateDataset(input); } @@ -216,21 +217,21 @@ public class DatasetServiceTest extends AbstractDatasetServiceTest { */ @Test(expected = NotFoundElement.class) public void testFailUpdateNonExistent() { - final Dataset input = buildAndSaveDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, false); + final Dataset input = buildAndSaveDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, PublishState.DRAFT); input.setId(-1l); datasetService.updateDataset(input); } @Test(expected = ConcurrencyFailureException.class) public void testFailUpdateErrorVersion() { - final Dataset input = buildAndSaveDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, false); + final Dataset input = buildAndSaveDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, PublishState.DRAFT); input.setVersion(4); datasetService.updateDataset(input); } @Test public void testUpdateDataset() { - final Dataset result = buildAndSaveDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, false); + final Dataset result = buildAndSaveDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, PublishState.DRAFT); final Set accessionIdentifiers = new HashSet() { /** @@ -243,7 +244,7 @@ public class DatasetServiceTest extends AbstractDatasetServiceTest { } }; - final Dataset result2 = datasetService.createDataset(buildDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, accessionIdentifiers, false)); + final Dataset result2 = datasetService.createDataset(buildDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, accessionIdentifiers, PublishState.DRAFT)); assertThat(result.isPublished(), is(false)); @@ -266,7 +267,7 @@ public class DatasetServiceTest extends AbstractDatasetServiceTest { @Test public void testUpdateDatasetCrops() { - Dataset result = buildAndSaveDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, false); + Dataset result = buildAndSaveDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, PublishState.DRAFT); assertThat(result.isPublished(), is(false)); result.setCrops(Sets.newHashSet("cassava", "yam")); @@ -285,7 +286,7 @@ public class DatasetServiceTest extends AbstractDatasetServiceTest { Descriptor savedDescriptor = createDescriptor(partner, "D1", "1.0", DataType.NUMERIC); savedDescriptor = descriptorService.createDescriptor(savedDescriptor); - Dataset savedDataset = buildAndSaveDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, false); + Dataset savedDataset = buildAndSaveDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, PublishState.DRAFT); assertThat(savedDataset.getDescriptors(), hasSize(0)); savedDataset = datasetService.addDescriptors(savedDataset, savedDescriptor); @@ -294,7 +295,8 @@ public class DatasetServiceTest extends AbstractDatasetServiceTest { assertThat(savedDataset.getDescriptors().contains(savedDescriptor), is(true)); // for {@link #testCannotDeleteDescriptor()} - savedDataset = datasetService.publishDataset(savedDataset); + Dataset reviewingDataset = datasetService.publishDataset(savedDataset); + datasetService.approveDataset(reviewingDataset); } @Test @@ -305,7 +307,7 @@ public class DatasetServiceTest extends AbstractDatasetServiceTest { Descriptor descriptor2 = createDescriptor(partner, "D2", "1.0", DataType.NUMERIC); descriptor2 = descriptorService.createDescriptor(descriptor2); - Dataset savedDataset = buildAndSaveDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, false); + Dataset savedDataset = buildAndSaveDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, PublishState.DRAFT); savedDataset = datasetService.addDescriptors(savedDataset, descriptor1); savedDataset = datasetService.addDescriptors(savedDataset, descriptor2); @@ -346,7 +348,7 @@ public class DatasetServiceTest extends AbstractDatasetServiceTest { Descriptor descriptor3 = createDescriptor(partner, "D3", "1.1", DataType.TEXT); descriptor3 = descriptorService.createDescriptor(descriptor3); - Dataset savedDataset = buildAndSaveDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, false); + Dataset savedDataset = buildAndSaveDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, PublishState.DRAFT); savedDataset = datasetService.addDescriptors(savedDataset, descriptor1); savedDataset = datasetService.addDescriptors(savedDataset, descriptor2); @@ -370,7 +372,7 @@ public class DatasetServiceTest extends AbstractDatasetServiceTest { Descriptor descriptor3 = createDescriptor(partner, "D3", "1.1", DataType.TEXT); descriptor3 = descriptorService.createDescriptor(descriptor3); - Dataset savedDataset = buildAndSaveDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, false); + Dataset savedDataset = buildAndSaveDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, PublishState.DRAFT); savedDataset = datasetService.updateDescriptors(savedDataset, Lists.newArrayList(descriptor3, descriptor1, descriptor2, descriptor3)); @@ -382,7 +384,7 @@ public class DatasetServiceTest extends AbstractDatasetServiceTest { Descriptor descriptor1 = createDescriptor(partner, "D1", "1.0", DataType.NUMERIC); descriptor1 = descriptorService.createDescriptor(descriptor1); - final Dataset dataset = buildAndSaveDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, false); + final Dataset dataset = buildAndSaveDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, PublishState.DRAFT); dataset.setDescriptors(Lists.newArrayList(descriptor1)); Dataset savedDataset = datasetService.createDataset(dataset); @@ -394,7 +396,7 @@ public class DatasetServiceTest extends AbstractDatasetServiceTest { @Test public void testNoFailOnEmptyDescriptorUpdate() { - final Dataset dataset = buildAndSaveDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, false); + final Dataset dataset = buildAndSaveDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, PublishState.DRAFT); assertThat(dataset.getDescriptors(), hasSize(0)); datasetService.addDescriptors(dataset, new Descriptor[] {}); } @@ -402,9 +404,9 @@ public class DatasetServiceTest extends AbstractDatasetServiceTest { @Test public void testLoadList() { // not listed - buildAndSaveDataset("Not published " + DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, false); + buildAndSaveDataset("Not published " + DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, PublishState.DRAFT); // listed - final Dataset input = buildAndSaveDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, true); + final Dataset input = buildAndSaveDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, PublishState.PUBLISHED); final String[] strs = new String[] { "title" }; final Pageable pageable = new PageRequest(0, Integer.min(50, 100), Sort.Direction.ASC, strs); @@ -415,7 +417,7 @@ public class DatasetServiceTest extends AbstractDatasetServiceTest { @Test public void testLoadCurrentVersionList() { - final Dataset result = buildAndSaveDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, false); + final Dataset result = buildAndSaveDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, PublishState.DRAFT); final String[] strs = new String[] { "title" }; final Pageable pageable = new PageRequest(0, Integer.min(50, 100), Sort.Direction.ASC, strs); @@ -433,7 +435,7 @@ public class DatasetServiceTest extends AbstractDatasetServiceTest { @Test public void testLoadDataset() { - final Dataset input = buildAndSaveDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, false); + final Dataset input = buildAndSaveDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, PublishState.DRAFT); final Dataset result = datasetService.loadDataset(input.getUuid()); assertThat(result, not(nullValue())); assertThat(result.getUuid().toString(), is(input.getUuid().toString())); @@ -441,7 +443,7 @@ public class DatasetServiceTest extends AbstractDatasetServiceTest { @Test(expected = NotFoundElement.class) public void testFailedLoadDataset() { - buildAndSaveDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, false); + buildAndSaveDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, PublishState.DRAFT); datasetService.loadDataset(UUID.randomUUID()); } @@ -452,7 +454,7 @@ public class DatasetServiceTest extends AbstractDatasetServiceTest { final FileInputStream fileInputStream = new FileInputStream(file); final MockMultipartFile mockMultipartFile = new MockMultipartFile("file", file.getName(), "multipart/form-data", fileInputStream); - final Dataset created = buildAndSaveDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, false); + final Dataset created = buildAndSaveDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, PublishState.DRAFT); Dataset dataset = datasetService.addDatasetFile(created, mockMultipartFile); final FileInputStream fileInputStream2 = new FileInputStream(file); @@ -469,7 +471,7 @@ public class DatasetServiceTest extends AbstractDatasetServiceTest { final FileInputStream fileInputStream = new FileInputStream(file); final MockMultipartFile mockMultipartFile = new MockMultipartFile("file", file.getName(), "multipart/form-data", fileInputStream); - Dataset input = buildAndSaveDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, false); + Dataset input = buildAndSaveDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, PublishState.DRAFT); input = datasetService.addDatasetFile(input, mockMultipartFile); final RepositoryFile df = input.getRepositoryFiles().get(0); @@ -488,7 +490,7 @@ public class DatasetServiceTest extends AbstractDatasetServiceTest { final FileInputStream fileInputStream = new FileInputStream(file); final MockMultipartFile mockMultipartFile = new MockMultipartFile("file", file.getName(), "multipart/form-data", fileInputStream); - Dataset input = buildAndSaveDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, false); + Dataset input = buildAndSaveDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, PublishState.DRAFT); input = datasetService.addDatasetFile(input, mockMultipartFile); @@ -500,14 +502,14 @@ public class DatasetServiceTest extends AbstractDatasetServiceTest { @Test public void testErrorPublish() { - final Dataset result = buildAndSaveDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, false); + final Dataset result = buildAndSaveDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, PublishState.DRAFT); final Map errorMap = result.validation(); assertThat(errorMap.size(), not(is(0))); } @Test public void upsertAccessions() { - Dataset result = datasetService.createDataset(buildDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, null, false)); + Dataset result = datasetService.createDataset(buildDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, null, PublishState.DRAFT)); assertThat(result.getAccessionCount(), nullValue()); final Set accessionIdentifiers = new HashSet() { @@ -536,14 +538,14 @@ public class DatasetServiceTest extends AbstractDatasetServiceTest { ids1.add(makeAccessionIdentifier(TEST_INSTCODE, "A1", "Musa", null)); ids1.add(makeAccessionIdentifier(TEST_INSTCODE, "A2", "Musa", null)); ids1.add(makeAccessionIdentifier(TEST_INSTCODE, "A8", "Musa", null)); - final Dataset dataset1 = datasetService.createDataset(buildDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, ids1, true)); + final Dataset dataset1 = datasetService.createDataset(buildDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, ids1, PublishState.PUBLISHED)); assertThat(dataset1.getAccessionCount(), is(3)); final Set ids2 = new HashSet<>(); ids2.add(makeAccessionIdentifier(TEST_INSTCODE, "A1", "Musa", null)); ids2.add(makeAccessionIdentifier(TEST_INSTCODE, "A2", "Musa", null)); ids2.add(makeAccessionIdentifier(TEST_INSTCODE, "A3", "Manihot", null)); - final Dataset dataset2 = datasetService.createDataset(buildDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, ids2, true)); + final Dataset dataset2 = datasetService.createDataset(buildDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, ids2, PublishState.PUBLISHED)); assertThat(dataset2.getAccessionCount(), is(3)); final DatasetFilter filter = new DatasetFilter(); @@ -598,7 +600,7 @@ public class DatasetServiceTest extends AbstractDatasetServiceTest { @Test(expected = InvalidApiUsageException.class) public void failUpdateDatasetOwner() throws Exception { - Dataset input = buildAndSaveDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, false); + Dataset input = buildAndSaveDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, PublishState.DRAFT); input.setOwner(partner2); input = datasetService.updateDataset(input); assertThat(input.getOwner(), not(partner2)); @@ -607,7 +609,7 @@ public class DatasetServiceTest extends AbstractDatasetServiceTest { @Test public void testAddLocationToDataset(){ DatasetLocation savedLocation = createDatasetLocation("testCountry", "testMapCountry", "testStateProvince", "testVerbatimLocality", 10.0, 20.0, "20000101", "20010101"); - Dataset savedDataset = buildAndSaveDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, false); + Dataset savedDataset = buildAndSaveDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, PublishState.DRAFT); savedLocation = locationService.createLocation(savedDataset, savedLocation); @@ -622,7 +624,7 @@ public class DatasetServiceTest extends AbstractDatasetServiceTest { DatasetLocation savedLocation1 = createDatasetLocation("testCountry1", "testMapCountry1", "testStateProvince1", "testVerbatimLocality1", 10.0, 20.0, "20010101", "20110101"); DatasetLocation savedLocation2 = createDatasetLocation("testCountry2", "testMapCountry2", "testStateProvince2", "testVerbatimLocality2", 11.0, 21.0, "20020202", "20120202"); DatasetLocation savedLocation3 = createDatasetLocation("testCountry3", "testMapCountry3", "testStateProvince3", "testVerbatimLocality3", 12.0, 22.0, "20030303", "20130303"); - Dataset savedDataset = buildAndSaveDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, false); + Dataset savedDataset = buildAndSaveDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, PublishState.DRAFT); savedLocation1 = locationService.createLocation(savedDataset, savedLocation1); savedDataset = datasetService.loadDataset(savedDataset.getUuid()); @@ -644,7 +646,7 @@ public class DatasetServiceTest extends AbstractDatasetServiceTest { @Test public void testUpdateLocation(){ DatasetLocation savedLocation = createDatasetLocation("testCountry", "testMapCountry", "testStateProvince", "testVerbatimLocality", 10.0, 20.0, "20000101", "20010101"); - Dataset savedDataset = buildAndSaveDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, false); + Dataset savedDataset = buildAndSaveDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, PublishState.DRAFT); savedLocation = locationService.createLocation(savedDataset, savedLocation); Dataset loadedDataset = datasetService.loadDataset(savedDataset.getUuid()); @@ -678,7 +680,7 @@ public class DatasetServiceTest extends AbstractDatasetServiceTest { public void testRemoveLocationFromDataset(){ DatasetLocation savedLocation1 = createDatasetLocation("testCountry1", "testMapCountry1", "testStateProvince1", "testVerbatimLocality1", 10.0, 20.0, "20010101", "20110101"); DatasetLocation savedLocation2 = createDatasetLocation("testCountry2", "testMapCountry2", "testStateProvince2", "testVerbatimLocality2", 11.0, 21.0, "20020202", "20120202"); - Dataset savedDataset = buildAndSaveDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, false); + Dataset savedDataset = buildAndSaveDataset(DATASET_TITLE_1, DATASET_DESCRIPTION_1, partner, PublishState.DRAFT); savedLocation1 = locationService.createLocation(savedDataset, savedLocation1); savedDataset = datasetService.loadDataset(savedDataset.getUuid()); diff --git a/src/test/java/org/genesys/test/catalog/services/DescriptorListServiceTest.java b/src/test/java/org/genesys/test/catalog/services/DescriptorListServiceTest.java index df6c564f3e25b4aed7e7a89866625a013b3e0753..b772f78612324734f1e9b27fc396e51040a5c41e 100644 --- a/src/test/java/org/genesys/test/catalog/services/DescriptorListServiceTest.java +++ b/src/test/java/org/genesys/test/catalog/services/DescriptorListServiceTest.java @@ -37,6 +37,7 @@ import org.genesys.catalog.model.traits.DescriptorList; import org.genesys.catalog.persistence.vocab.ControlledVocabularyRepository; import org.genesys.catalog.service.DescriptorListService; import org.genesys.catalog.service.impl.DescriptorListServiceImpl; +import org.genesys2.server.model.PublishState; import org.junit.Ignore; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -375,6 +376,7 @@ public class DescriptorListServiceTest extends CatalogServiceTest { assertThat(result.isPublished(), is(false)); result = descriptorListService.publishDescriptorList(result); + result = descriptorListService.approveDescriptorList(result); assertThat(result.isPublished(), is(true)); for (final Descriptor d : result.getDescriptors()) { @@ -382,78 +384,6 @@ public class DescriptorListServiceTest extends CatalogServiceTest { } } - @Test - public void uploadDescriptorListOfCSV() throws IOException { - - final List descriptors = new ArrayList<>(); - - try (CSVReader reader = new CSVReader(new FileReader("src/test/resources/mcpd20177.csv"))) { - - String[] row; - int i = 0; - while ((row = reader.readNext()) != null) { - if (row != null && i != 0) { - // LOG.debug(Arrays.toString(row)); - - final Descriptor descriptor = new Descriptor(); - descriptor.setTitle(row[0]); - - try { - descriptor.setDataType(Descriptor.DataType.valueOf(row[1].toUpperCase())); - } catch (final IllegalArgumentException e) { - // LOG.error("Parse column for Descriptor.DataType has error.", e); - // throw new NullPointerException("Parse column for Descriptor.DataType has - // error."); - continue; - } - - descriptor.setDescription(row[2]); - descriptor.setIntegerOnly(Boolean.valueOf(row[3])); - - try { - if (StringUtils.isNotBlank(row[4])) { - descriptor.setMaxValue(Double.valueOf(row[4])); - } - } catch (final NumberFormatException e) { - LOG.error("Parsing column for MaxValue has error", e); - } - - try { - if (StringUtils.isNotBlank(row[5])) { - descriptor.setMinValue(Double.valueOf(row[5])); - } - } catch (final NumberFormatException e) { - LOG.error("Parsing column for MinValue has error", e); - } - - descriptor.setPublished(Boolean.valueOf(row[6])); - descriptor.setVersionTag(row[7]); - try { - if (StringUtils.isNotBlank(row[8])) { - descriptor.setVocabulary(controlledVocabularyRepository.findOne(Long.valueOf(row[8]))); - } - } catch (final NumberFormatException e) { - LOG.error("Parsing column for Vocabulary has error"); - } - descriptor.setColumnName(row[9]); - try { - descriptor.setUom(row[10]); - } catch (final ArrayIndexOutOfBoundsException e) { - descriptor.setUom(""); - } - descriptors.add(descriptor); - } - i++; - } - - assertThat(descriptors, hasSize(not(nullValue()))); - assertThat(descriptors, hasSize(18)); - assertThat(descriptors.get(0).getTitle(), equalTo(DESCRIPTOR_TITLE_OF_CSV)); - assertThat(descriptors.get(0).getDataType(), equalTo(DESCRIPTOR_DATATYPE_OF_CSV)); - assertThat(descriptors.get(0).getVocabulary(), nullValue()); - } - } - @Override public DescriptorList setupDescriptorList(final String title, final String version, final String description) { final DescriptorList descriptorList = new DescriptorList(); diff --git a/src/test/java/org/genesys/test/catalog/services/DescriptorServiceTest.java b/src/test/java/org/genesys/test/catalog/services/DescriptorServiceTest.java index b73e46f0b3fa9c1af9b7655e2315790305f58fdd..5bb09c037943d74930ce4d7c2be19e8c72bd3e30 100644 --- a/src/test/java/org/genesys/test/catalog/services/DescriptorServiceTest.java +++ b/src/test/java/org/genesys/test/catalog/services/DescriptorServiceTest.java @@ -32,6 +32,7 @@ import org.genesys.catalog.model.traits.Descriptor.DataType; import org.genesys.catalog.model.traits.DescriptorList; import org.genesys.catalog.model.vocab.ControlledVocabulary; import org.genesys.catalog.model.vocab.VocabularyTerm; +import org.genesys2.server.model.PublishState; import org.junit.Test; import org.springframework.dao.ConcurrencyFailureException; import org.springframework.dao.DataIntegrityViolationException; @@ -64,7 +65,7 @@ public class DescriptorServiceTest extends CatalogServiceTest { descriptorService.getDescriptor(UUID.randomUUID()); } - private Descriptor setupDescriptor(final UUID uuid, final String title, final Category category, final DataType type, final String versionTag, final boolean published) { + private Descriptor setupDescriptor(final UUID uuid, final String title, final Category category, final DataType type, final String versionTag, final PublishState state) { final Descriptor input = new Descriptor(); input.setOwner(partner); @@ -73,13 +74,13 @@ public class DescriptorServiceTest extends CatalogServiceTest { input.setVersionTag(versionTag); input.setDataType(type); input.setCategory(category); - input.setPublished(published); + input.setState(state); return input; } @Test public void testCreateDescriptor() { - final Descriptor input = setupDescriptor(null, DESCRIPTOR_TITLE_1, Category.PASSPORT, DataType.NUMERIC, VERSION_1_0, false); + final Descriptor input = setupDescriptor(null, DESCRIPTOR_TITLE_1, Category.PASSPORT, DataType.NUMERIC, VERSION_1_0, PublishState.DRAFT); Descriptor result = descriptorService.createDescriptor(input); assertThat(result, not(nullValue())); @@ -92,13 +93,13 @@ public class DescriptorServiceTest extends CatalogServiceTest { @Test(expected = DataIntegrityViolationException.class) public void testCreateDescriptorWithoutTerms() { - final Descriptor input = setupDescriptor(null, DESCRIPTOR_TITLE_1, Category.PASSPORT, DataType.CODED, VERSION_1_0, false); + final Descriptor input = setupDescriptor(null, DESCRIPTOR_TITLE_1, Category.PASSPORT, DataType.CODED, VERSION_1_0, PublishState.DRAFT); descriptorService.createDescriptor(input); } @Test public void testCreateDescriptorWithTerms() { - final Descriptor input = setupDescriptor(null, DESCRIPTOR_TITLE_1, Category.PASSPORT, DataType.CODED, VERSION_1_0, false); + final Descriptor input = setupDescriptor(null, DESCRIPTOR_TITLE_1, Category.PASSPORT, DataType.CODED, VERSION_1_0, PublishState.DRAFT); input.setTerms(Lists.newArrayList(VocabularyTerm.fromData(TERM_CODE_1, TERM_TITLE_1), VocabularyTerm.fromData(TERM_CODE_2, TERM_TITLE_2))); final Descriptor result = descriptorService.createDescriptor(input); @@ -110,7 +111,7 @@ public class DescriptorServiceTest extends CatalogServiceTest { @Test(expected = NotFoundElement.class) public void testRemoveDescriptor() { final UUID uuid = UUID.randomUUID(); - final Descriptor input = setupDescriptor(uuid, DESCRIPTOR_TITLE_1, Category.PASSPORT, DataType.NUMERIC, VERSION_1_0, false); + final Descriptor input = setupDescriptor(uuid, DESCRIPTOR_TITLE_1, Category.PASSPORT, DataType.NUMERIC, VERSION_1_0, PublishState.DRAFT); input.setMinValue(10D); input.setMaxValue(10D); @@ -128,7 +129,7 @@ public class DescriptorServiceTest extends CatalogServiceTest { vocab1.setOwner(partner); final ControlledVocabulary vocabularyResult = vocabularyService.createVocabulary(vocab1); - final Descriptor input = setupDescriptor(uuid, DESCRIPTOR_TITLE_1, Category.PASSPORT, DataType.TEXT, VERSION_1_0, false); + final Descriptor input = setupDescriptor(uuid, DESCRIPTOR_TITLE_1, Category.PASSPORT, DataType.TEXT, VERSION_1_0, PublishState.DRAFT); input.setVocabulary(vocabularyResult); Descriptor result = descriptorService.createDescriptor(input); @@ -143,7 +144,7 @@ public class DescriptorServiceTest extends CatalogServiceTest { vocab.setOwner(partner); vocab = vocabularyService.createVocabulary(vocab); - final Descriptor input = setupDescriptor(null, DESCRIPTOR_TITLE_1, Category.PASSPORT, DataType.SCALE, VERSION_1_0, false); + final Descriptor input = setupDescriptor(null, DESCRIPTOR_TITLE_1, Category.PASSPORT, DataType.SCALE, VERSION_1_0, PublishState.DRAFT); input.setVocabulary(vocab); input.setMinValue(0d); input.setMaxValue(10d); @@ -153,7 +154,7 @@ public class DescriptorServiceTest extends CatalogServiceTest { @Test(expected = DataIntegrityViolationException.class) public void testCreateScaleDescriptorWithoutMaxAndMinValues() { - final Descriptor input = setupDescriptor(null, DESCRIPTOR_TITLE_1, Category.PASSPORT, DataType.SCALE, VERSION_1_0, false); + final Descriptor input = setupDescriptor(null, DESCRIPTOR_TITLE_1, Category.PASSPORT, DataType.SCALE, VERSION_1_0, PublishState.DRAFT); input.setTerms(Lists.newArrayList(VocabularyTerm.fromData(TERM_CODE_1, TERM_TITLE_1), VocabularyTerm.fromData(TERM_CODE_2, TERM_TITLE_2))); descriptorService.createDescriptor(input); @@ -161,7 +162,7 @@ public class DescriptorServiceTest extends CatalogServiceTest { @Test(expected = DataIntegrityViolationException.class) public void testCreateScaleDescriptorWithoutMinvalue() { - final Descriptor input = setupDescriptor(null, DESCRIPTOR_TITLE_1, Category.PASSPORT, DataType.SCALE, VERSION_1_0, false); + final Descriptor input = setupDescriptor(null, DESCRIPTOR_TITLE_1, Category.PASSPORT, DataType.SCALE, VERSION_1_0, PublishState.DRAFT); input.setTerms(Lists.newArrayList(VocabularyTerm.fromData(TERM_CODE_1, TERM_TITLE_1), VocabularyTerm.fromData(TERM_CODE_2, TERM_TITLE_2))); input.setMaxValue(10D); @@ -170,7 +171,7 @@ public class DescriptorServiceTest extends CatalogServiceTest { @Test(expected = DataIntegrityViolationException.class) public void testCreateScaleDescriptorWithoutMaxvalue() { - final Descriptor input = setupDescriptor(null, DESCRIPTOR_TITLE_1, Category.PASSPORT, DataType.SCALE, VERSION_1_0, false); + final Descriptor input = setupDescriptor(null, DESCRIPTOR_TITLE_1, Category.PASSPORT, DataType.SCALE, VERSION_1_0, PublishState.DRAFT); input.setTerms(Lists.newArrayList(VocabularyTerm.fromData(TERM_CODE_1, TERM_TITLE_1), VocabularyTerm.fromData(TERM_CODE_2, TERM_TITLE_2))); input.setMinValue(10D); @@ -180,7 +181,7 @@ public class DescriptorServiceTest extends CatalogServiceTest { @Test public void testCreateScaleDescriptor() { final UUID uuid = UUID.randomUUID(); - final Descriptor input = setupDescriptor(uuid, DESCRIPTOR_TITLE_1, Category.EVALUATION, DataType.SCALE, VERSION_1_0, false); + final Descriptor input = setupDescriptor(uuid, DESCRIPTOR_TITLE_1, Category.EVALUATION, DataType.SCALE, VERSION_1_0, PublishState.DRAFT); input.setMinValue(0d); input.setMaxValue(10d); input.setTerms(Lists.newArrayList(VocabularyTerm.fromData(TERM_CODE_1, TERM_TITLE_1), VocabularyTerm.fromData(TERM_CODE_2, TERM_TITLE_2))); @@ -196,7 +197,7 @@ public class DescriptorServiceTest extends CatalogServiceTest { @Test public void testCreateDescriptorWithUuid() { final UUID uuid = UUID.randomUUID(); - final Descriptor input = setupDescriptor(uuid, DESCRIPTOR_TITLE_1, Category.CHARACTERIZATION, DataType.TEXT, VERSION_1_0, false); + final Descriptor input = setupDescriptor(uuid, DESCRIPTOR_TITLE_1, Category.CHARACTERIZATION, DataType.TEXT, VERSION_1_0, PublishState.DRAFT); final Descriptor result = descriptorService.createDescriptor(input); assertThat(result.getUuid(), is(uuid)); assertThat(result.isPublished(), is(false)); @@ -206,7 +207,7 @@ public class DescriptorServiceTest extends CatalogServiceTest { @Test public void testGetDescriptorByUuid() { final UUID uuid = UUID.randomUUID(); - final Descriptor input = setupDescriptor(uuid, DESCRIPTOR_TITLE_1, Category.CHARACTERIZATION, DataType.NUMERIC, VERSION_1_0, false); + final Descriptor input = setupDescriptor(uuid, DESCRIPTOR_TITLE_1, Category.CHARACTERIZATION, DataType.NUMERIC, VERSION_1_0, PublishState.DRAFT); Descriptor result = descriptorService.createDescriptor(input); result = descriptorService.getDescriptor(uuid); @@ -218,7 +219,7 @@ public class DescriptorServiceTest extends CatalogServiceTest { @Test public void testUpdateDescriptorByUuidAndVersion() { final UUID uuid = UUID.randomUUID(); - final Descriptor input = setupDescriptor(uuid, DESCRIPTOR_TITLE_1, Category.PASSPORT, DataType.NUMERIC, VERSION_1_0, false); + final Descriptor input = setupDescriptor(uuid, DESCRIPTOR_TITLE_1, Category.PASSPORT, DataType.NUMERIC, VERSION_1_0, PublishState.DRAFT); Descriptor result = descriptorService.createDescriptor(input); assertThat(result, not(nullValue())); @@ -242,7 +243,7 @@ public class DescriptorServiceTest extends CatalogServiceTest { @Test public void testUpdateDescriptor() { - final Descriptor input = setupDescriptor(null, DESCRIPTOR_TITLE_1, Category.PASSPORT, DataType.NUMERIC, VERSION_1_0, false); + final Descriptor input = setupDescriptor(null, DESCRIPTOR_TITLE_1, Category.PASSPORT, DataType.NUMERIC, VERSION_1_0, PublishState.DRAFT); Descriptor result = descriptorService.createDescriptor(input); assertThat(result, not(nullValue())); assertThat(result.getId(), not(nullValue())); @@ -289,7 +290,7 @@ public class DescriptorServiceTest extends CatalogServiceTest { add(descriptorList); } }; - final Descriptor input = setupDescriptor(null, DESCRIPTOR_TITLE_1, Category.EVALUATION, DataType.NUMERIC, VERSION_1_0, false); + final Descriptor input = setupDescriptor(null, DESCRIPTOR_TITLE_1, Category.EVALUATION, DataType.NUMERIC, VERSION_1_0, PublishState.DRAFT); input.setDescriptorLists(descriptorLists); final Descriptor result = descriptorRepository.save(input); assertThat(result, not(nullValue())); @@ -303,20 +304,20 @@ public class DescriptorServiceTest extends CatalogServiceTest { */ @Test(expected = DataIntegrityViolationException.class) public void testFailOnUpdateDescriptorWithPublished() { - final Descriptor input = setupDescriptor(null, DESCRIPTOR_TITLE_1, Category.EVALUATION, DataType.NUMERIC, VERSION_1_0, false); - input.setPublished(Boolean.TRUE); - final Descriptor result = descriptorService.createDescriptor(input); - - result.setUuid(result.getUuid()); - result.setTitle(DESCRIPTOR_TITLE_2); - result.setDescription(DESCRIPTION_1); - descriptorService.updateDescriptor(result); + final Descriptor input = descriptorService.createDescriptor(setupDescriptor(null, DESCRIPTOR_TITLE_1, Category.EVALUATION, DataType.NUMERIC, VERSION_1_0, PublishState.DRAFT)); + final Descriptor reviewingDescriptor = descriptorService.publishDescriptor(input); + final Descriptor publishedDescriptor = descriptorService.approveDescriptor(reviewingDescriptor); + + publishedDescriptor.setUuid(publishedDescriptor.getUuid()); + publishedDescriptor.setTitle(DESCRIPTOR_TITLE_2); + publishedDescriptor.setDescription(DESCRIPTION_1); + descriptorService.updateDescriptor(publishedDescriptor); } @Test(expected = InvalidDataAccessApiUsageException.class) public void testFailUpdateWithoutIdentifiers() { - final Descriptor input = setupDescriptor(null, DESCRIPTOR_TITLE_1, Category.EVALUATION, DataType.NUMERIC, VERSION_1_0, false); - input.setPublished(Boolean.TRUE); + final Descriptor input = setupDescriptor(null, DESCRIPTOR_TITLE_1, Category.EVALUATION, DataType.NUMERIC, VERSION_1_0, PublishState.DRAFT); + input.setState(PublishState.PUBLISHED); final Descriptor result = descriptorService.createDescriptor(input); result.setUuid(null); @@ -327,8 +328,8 @@ public class DescriptorServiceTest extends CatalogServiceTest { @Test(expected = ConcurrencyFailureException.class) public void testFailConcurrentUpdate() { - final Descriptor input = setupDescriptor(null, DESCRIPTOR_TITLE_1, Category.PASSPORT, DataType.NUMERIC, VERSION_1_0, false); - input.setPublished(Boolean.TRUE); + final Descriptor input = setupDescriptor(null, DESCRIPTOR_TITLE_1, Category.PASSPORT, DataType.NUMERIC, VERSION_1_0, PublishState.DRAFT); + input.setState(PublishState.PUBLISHED); final Descriptor result = descriptorService.createDescriptor(input); result.setVersion(result.getVersion() + 1); @@ -338,8 +339,8 @@ public class DescriptorServiceTest extends CatalogServiceTest { @Test(expected = DataRetrievalFailureException.class) public void testFailUpdateNonExistent() { - final Descriptor input = setupDescriptor(null, DESCRIPTOR_TITLE_1, Category.PASSPORT, DataType.NUMERIC, VERSION_1_0, false); - input.setPublished(Boolean.TRUE); + final Descriptor input = setupDescriptor(null, DESCRIPTOR_TITLE_1, Category.PASSPORT, DataType.NUMERIC, VERSION_1_0, PublishState.DRAFT); + input.setState(PublishState.PUBLISHED); final Descriptor result = descriptorService.createDescriptor(input); result.setId(null); @@ -350,7 +351,7 @@ public class DescriptorServiceTest extends CatalogServiceTest { @Test public void testNeverUpdateDescriptorVersion() { - final Descriptor input = setupDescriptor(null, DESCRIPTOR_TITLE_1, Category.PASSPORT, DataType.NUMERIC, VERSION_1_0, false); + final Descriptor input = setupDescriptor(null, DESCRIPTOR_TITLE_1, Category.PASSPORT, DataType.NUMERIC, VERSION_1_0, PublishState.DRAFT); Descriptor result = descriptorService.createDescriptor(input); assertThat(result, not(nullValue())); assertThat(result.getVersionTag(), is(VERSION_1_0)); @@ -364,11 +365,11 @@ public class DescriptorServiceTest extends CatalogServiceTest { @Test public void listDescriptorsTest() { // unpublished descriptor - descriptorService.createDescriptor(setupDescriptor(null, "Not published " + DESCRIPTOR_TITLE_1, Category.PASSPORT, DataType.NUMERIC, VERSION_1_0, false)); + descriptorService.createDescriptor(setupDescriptor(null, "Not published " + DESCRIPTOR_TITLE_1, Category.PASSPORT, DataType.NUMERIC, VERSION_1_0, PublishState.DRAFT)); // published descriptor to be listed - final Descriptor input = setupDescriptor(null, DESCRIPTOR_TITLE_1, Category.PASSPORT, DataType.NUMERIC, VERSION_1_0, true); - final Descriptor result = descriptorService.createDescriptor(input); + final Descriptor input = setupDescriptor(null, DESCRIPTOR_TITLE_1, Category.PASSPORT, DataType.NUMERIC, VERSION_1_0, PublishState.PUBLISHED); + final Descriptor result = descriptorRepository.save(input); final String[] strs = new String[] { "title" }; final Pageable pageable = new PageRequest(0, Integer.min(50, 100), Sort.Direction.ASC, strs); @@ -380,7 +381,7 @@ public class DescriptorServiceTest extends CatalogServiceTest { @Test public void updateDescriptorForDataType() { - final Descriptor input = setupDescriptor(null, DESCRIPTOR_TITLE_1, Category.PASSPORT, DataType.BOOLEAN, VERSION_1_0, false); + final Descriptor input = setupDescriptor(null, DESCRIPTOR_TITLE_1, Category.PASSPORT, DataType.BOOLEAN, VERSION_1_0, PublishState.DRAFT); final Descriptor result = descriptorService.createDescriptor(input); assertThat(result.getVocabulary(), nullValue()); assertThat(result.getMinValue(), nullValue()); @@ -393,7 +394,7 @@ public class DescriptorServiceTest extends CatalogServiceTest { final long timestamp = System.currentTimeMillis(); final String description = RandomStringUtils.randomAlphabetic(50, 100); for (int i = 0; i < 5; i++) { - final Descriptor input = setupDescriptor(null, DESCRIPTOR_TITLE_1 + timestamp + "-" + i, Category.PASSPORT, DataType.TEXT, VERSION_1_0, false); + final Descriptor input = setupDescriptor(null, DESCRIPTOR_TITLE_1 + timestamp + "-" + i, Category.PASSPORT, DataType.TEXT, VERSION_1_0, PublishState.DRAFT); input.setDescription(description + "-" + i); descriptors.add(input); } @@ -415,7 +416,7 @@ public class DescriptorServiceTest extends CatalogServiceTest { } // Add some for (int i = 0; i < 5; i++) { - final Descriptor d = setupDescriptor(null, DESCRIPTOR_TITLE_1 + timestamp + "-" + i, Category.EVALUATION, DataType.TEXT, VERSION_2_0, false); + final Descriptor d = setupDescriptor(null, DESCRIPTOR_TITLE_1 + timestamp + "-" + i, Category.EVALUATION, DataType.TEXT, VERSION_2_0, PublishState.DRAFT); d.setDescription(description + "-" + i); descriptors2.add(d); } @@ -441,7 +442,7 @@ public class DescriptorServiceTest extends CatalogServiceTest { @Test(expected = InvalidApiUsageException.class) public void failUpdateDescriptorOwner() { - final Descriptor input = setupDescriptor(null, DESCRIPTOR_TITLE_1, Category.PASSPORT, DataType.BOOLEAN, VERSION_1_0, false); + final Descriptor input = setupDescriptor(null, DESCRIPTOR_TITLE_1, Category.PASSPORT, DataType.BOOLEAN, VERSION_1_0, PublishState.DRAFT); Descriptor result = descriptorService.createDescriptor(input); result.setOwner(partner2); result = descriptorService.updateDescriptor(result); @@ -450,8 +451,8 @@ public class DescriptorServiceTest extends CatalogServiceTest { @Test public void testKeywordSearch() { - descriptorService.createDescriptor(setupDescriptor(null, "AAA CCDD", Category.PASSPORT, DataType.BOOLEAN, VERSION_1_0, true)); - descriptorService.createDescriptor(setupDescriptor(null, "AAA BBEE1", Category.PASSPORT, DataType.BOOLEAN, VERSION_1_0, true)); + descriptorRepository.save(setupDescriptor(null, "AAA CCDD", Category.PASSPORT, DataType.BOOLEAN, VERSION_1_0, PublishState.PUBLISHED)); + descriptorRepository.save(setupDescriptor(null, "AAA BBEE1", Category.PASSPORT, DataType.BOOLEAN, VERSION_1_0, PublishState.PUBLISHED)); final Pageable page = new PageRequest(0, 10); final DescriptorFilter descriptorFilter = new DescriptorFilter(); @@ -497,7 +498,7 @@ public class DescriptorServiceTest extends CatalogServiceTest { @Test public void newDescriptorVersion() { - final Descriptor input = setupDescriptor(null, DESCRIPTOR_TITLE_1, Category.PASSPORT, DataType.BOOLEAN, VERSION_1_0, false); + final Descriptor input = setupDescriptor(null, DESCRIPTOR_TITLE_1, Category.PASSPORT, DataType.BOOLEAN, VERSION_1_0, PublishState.DRAFT); final Descriptor result = descriptorService.createDescriptor(input); assertThat(result.getVersionTag(), is(VERSION_1_0)); Descriptor newVersion = descriptorService.nextVersion(result, false);