Changeset 5545


Ignore:
Timestamp:
08/08/14 14:35:42 (10 years ago)
Author:
Twan Goosen
Message:

Completed the pre-publication validator. Created tests. Tweaked the confirmation dialogue in case of warnings.
Fixes #607

Location:
VirtualCollectionRegistry/trunk/VirtualCollectionRegistry/src
Files:
1 added
6 edited

Legend:

Unmodified
Added
Removed
  • VirtualCollectionRegistry/trunk/VirtualCollectionRegistry/src/main/java/eu/clarin/cmdi/virtualcollectionregistry/gui/Application.properties

    r5544 r5545  
    2626  change!
    2727collections.publishwarningsconfirm: WARNING: The collection "${name}" does not \
    28   meet all recommended criteria. The following warnings apply:\n {0}\n\
    29   Would you still like to publish the collection?
    30 
     28  meet all recommended criteria for published collection!\n\n\
     29  The following warning(s) apply:\n{0}\n\
     30  Publication of the collection in its current state is not recommended. Would \
     31  you still like to publish the collection?
  • VirtualCollectionRegistry/trunk/VirtualCollectionRegistry/src/main/java/eu/clarin/cmdi/virtualcollectionregistry/gui/dialog/ConfirmationDialog.java

    r930 r5545  
    9090
    9191    @Override
    92     protected Content createContent(String id) {
     92    protected Panel createContent(String id) {
    9393        Content content = new Content(id);
    94         content.add(new AttributeAppender("class",
    95                 new Model<String>("confirmationDialog"), " "));
     94        content.add(new AttributeAppender("class", getCssClass(), " "));
    9695        return content;
     96    }
     97
     98    protected Model<String> getCssClass() {
     99        return Model.of("confirmationDialog");
    97100    }
    98101
  • VirtualCollectionRegistry/trunk/VirtualCollectionRegistry/src/main/java/eu/clarin/cmdi/virtualcollectionregistry/gui/pages/BrowseEditableCollectionsPanel.java

    r5544 r5545  
    224224        public void showDialogue(AjaxRequestTarget target, IModel<VirtualCollection> vc, List<String> warnings) {
    225225            this.vcId = vc.getObject().getId();
     226            StringBuilder sb = new StringBuilder();
     227            for (String warning : warnings) {
     228                sb.append(" -").append(warning).append("\n");
     229            }
    226230            super.show(target,
    227                     new StringResourceModel("collections.publishwarningsconfirm", vc, new Object[]{warnings}));
     231                    new StringResourceModel("collections.publishwarningsconfirm", vc, new Object[]{sb}));
     232        }
     233
     234        @Override
     235        protected Model<String> getCssClass() {
     236            return Model.of("longConfirmationDialog");
    228237        }
    229238
     
    319328        editPublishedDialog = new EditPublishedCollectionDialog("editPublishedCollectionDialog", table);
    320329        add(editPublishedDialog);
    321        
     330
    322331        confirmPublishCollectionDialog = new ConfirmPublishCollectionDialog("confirmPublishCollectionDialog", table);
    323332        add(confirmPublishCollectionDialog);
  • VirtualCollectionRegistry/trunk/VirtualCollectionRegistry/src/main/java/eu/clarin/cmdi/virtualcollectionregistry/service/impl/ReferenceValidator.java

    r5536 r5545  
    5454        return validatable.isValid();
    5555    }
     56   
     57    public static boolean isPid(CharSequence uri) {
     58        return HANDLE_PATTERN.matcher(uri).matches();
     59    }
    5660
    5761}
  • VirtualCollectionRegistry/trunk/VirtualCollectionRegistry/src/main/java/eu/clarin/cmdi/virtualcollectionregistry/service/impl/VirtualCollectionPrePublicationValidator.java

    r5544 r5545  
    1818
    1919import eu.clarin.cmdi.virtualcollectionregistry.VirtualCollectionRegistryUsageException;
     20import eu.clarin.cmdi.virtualcollectionregistry.model.Resource;
    2021import eu.clarin.cmdi.virtualcollectionregistry.model.VirtualCollection;
    2122import eu.clarin.cmdi.virtualcollectionregistry.service.VirtualCollectionValidator;
     23import java.util.ArrayList;
     24import java.util.List;
     25import org.apache.wicket.util.string.Strings;
    2226import org.springframework.beans.factory.annotation.Qualifier;
    2327import org.springframework.stereotype.Service;
     
    2529/**
    2630 * A virtual collection validator performing "soft" validation that should occur
    27  * before publication.
     31 * before publication. Validated collections are <em>assumed</em> to be valid
     32 * according to the 'minimal' validator applied on creation and update of the
     33 * collection.
    2834 *
    2935 * @author twagoo
     
    3238@Qualifier("publication-soft")
    3339public class VirtualCollectionPrePublicationValidator implements VirtualCollectionValidator {
    34    
     40
    3541    @Override
    3642    public void validate(VirtualCollection vc) throws VirtualCollectionRegistryUsageException {
    37 //        throw new VirtualCollectionRegistryUsageException("Test", Arrays.asList("First warning", "Second warning", "Third warning"));
     43        final List<String> warnings = new ArrayList<>();
     44
     45        switch (vc.getType()) {
     46            case EXTENSIONAL:
     47                validateResources(vc, warnings);
     48                break;
     49            case INTENSIONAL:
     50                validateGeneratedBy(vc, warnings);
     51                break;
     52        }
     53
     54        if (Strings.isEmpty(vc.getDescription())) {
     55            warnings.add("The collection has no description");
     56        }
     57
     58        if (vc.getPurpose() == null) {
     59            warnings.add("The purpose has not been specified");
     60        }
     61
     62        if (vc.getPurpose() == VirtualCollection.Purpose.FUTURE_USE) {
     63            warnings.add("The reproducibility of the collection has been marked 'future use'");
     64        }
     65
     66        if (vc.getReproducibility() == null) {
     67            warnings.add("The degree of reproducibility has not been specified");
     68        }
     69
     70        if (vc.getCreators().isEmpty()) {
     71            warnings.add("No creators have been specified for the collection");
     72        }
     73
     74        if (!warnings.isEmpty()) {
     75            throw new VirtualCollectionRegistryUsageException("Collection is not fit for publication", warnings);
     76        }
    3877    }
    39    
     78
     79    private void validateResources(VirtualCollection vc, List<String> warnings) {
     80        int nonPidCount = 0;
     81        for (Resource resource : vc.getResources()) {
     82            if (!ReferenceValidator.isPid(resource.getRef())) {
     83                nonPidCount++;
     84            }
     85        }
     86        if (nonPidCount == 0) {
     87            return;
     88        }
     89
     90        if (nonPidCount == 1) {
     91            warnings.add(String.format("One resource is not referenced through a persistent identifier", nonPidCount));
     92        } else {
     93            warnings.add(String.format("%d resources are not referenced through a persistent identifier", nonPidCount));
     94        }
     95    }
     96
     97    private void validateGeneratedBy(VirtualCollection vc, List<String> warnings) {
     98        final String queryUri = vc.getGeneratedBy().getURI();
     99        if (!ReferenceValidator.isPid(queryUri)) {
     100            warnings.add("The query URI is not a persistent identifer");
     101        }
     102    }
     103
    40104}
  • VirtualCollectionRegistry/trunk/VirtualCollectionRegistry/src/main/webapp/css/vcr.css

    r5532 r5545  
    550550}
    551551
     552div.modalDialog div.modalDialogContent p {
     553    margin: 1em;
     554}
     555
    552556div.modalDialog div.modalDialogButtons {
    553557    border-top: 1px solid #BBBBBB;
     
    559563div.confirmationDialog {
    560564    text-align: center;
     565}
     566
     567div.longConfirmationDialog {
     568    text-align: left;
    561569}
    562570
Note: See TracChangeset for help on using the changeset viewer.