source: VirtualCollectionRegistry/tags/VirtualCollectionRegistry-0.4.0-alpha2/VirtualCollectionRegistry/src/main/java/eu/clarin/cmdi/virtualcollectionregistry/service/impl/VirtualCollectionValidatorImpl.java @ 5557

Last change on this file since 5557 was 5557, checked in by Twan Goosen, 10 years ago

tag for VCR alpha 2

  • Property svn:eol-style set to native
File size: 5.4 KB
Line 
1package eu.clarin.cmdi.virtualcollectionregistry.service.impl;
2
3import eu.clarin.cmdi.virtualcollectionregistry.service.VirtualCollectionValidator;
4import eu.clarin.cmdi.virtualcollectionregistry.VirtualCollectionRegistryUsageException;
5import eu.clarin.cmdi.virtualcollectionregistry.model.Creator;
6import eu.clarin.cmdi.virtualcollectionregistry.model.GeneratedBy;
7import eu.clarin.cmdi.virtualcollectionregistry.model.GeneratedByQuery;
8import eu.clarin.cmdi.virtualcollectionregistry.model.Resource;
9import eu.clarin.cmdi.virtualcollectionregistry.model.VirtualCollection;
10import java.util.ArrayList;
11import java.util.HashSet;
12import java.util.List;
13import java.util.Set;
14import org.springframework.beans.factory.annotation.Qualifier;
15import org.springframework.stereotype.Service;
16
17/**
18 * A virtual collection validator. Reusable and thread safe.
19 *
20 * @author twagoo
21 */
22@Service
23@Qualifier("creation")
24public class VirtualCollectionValidatorImpl implements VirtualCollectionValidator {
25
26    @Override
27    public void validate(VirtualCollection vc)
28            throws VirtualCollectionRegistryUsageException {
29        if (vc == null) {
30            throw new NullPointerException("vc == null");
31        }
32
33        final Set<Creator> uniqueCreators = new HashSet<Creator>(16);
34        final Set<String> uniqueResourceRefs = new HashSet<String>(512);
35
36        // proceed to validate ...
37        if ((vc.getName() == null) || vc.getName().trim().isEmpty()) {
38            throw new VirtualCollectionRegistryUsageException(
39                    "collection has an empty name");
40        }
41
42        for (Creator creator : vc.getCreators()) {
43            if (uniqueCreators.contains(creator)) {
44                throw new VirtualCollectionRegistryUsageException(
45                        "collection contains non unique creators");
46            }
47            uniqueCreators.add(creator);
48        }
49
50        switch (vc.getType()) {
51            case EXTENSIONAL:
52                if (vc.getResources().isEmpty()) {
53                    throw new VirtualCollectionRegistryUsageException(
54                            "extensional collection must contain on or "
55                            + "more resources");
56                }
57                if (vc.getGeneratedBy() != null) {
58                    throw new VirtualCollectionRegistryUsageException(
59                            "extensional collection must not contain GeneratedBy");
60                }
61                final List<String> invalidRefs = getInvalidReferences(vc);
62                if (!invalidRefs.isEmpty()) {
63                    throw new VirtualCollectionRegistryUsageException(
64                            String.format(
65                                    "one or more references are not valid: %s",
66                                    invalidRefs));
67                }
68                break;
69            case INTENSIONAL:
70                final GeneratedBy generatedBy = vc.getGeneratedBy();
71                if (generatedBy == null) {
72                    throw new VirtualCollectionRegistryUsageException(
73                            "intensional collections needs GeneratedBy");
74                }
75                if (generatedBy.getDescription() == null) {
76                    throw new VirtualCollectionRegistryUsageException(
77                            "GeneratedBy has empty description");
78                }
79                final GeneratedByQuery query = generatedBy.getQuery();
80                if (query != null) {
81                    if (query.getProfile() == null) {
82                        throw new VirtualCollectionRegistryUsageException(
83                                "profile of GeneratedBy.Query is empty");
84                    }
85                    if (query.getValue() == null) {
86                        throw new VirtualCollectionRegistryUsageException(
87                                "query of GeneratedBy.Query is empty");
88                    }
89                }
90        }
91
92        if ((vc.getReproducibilityNotice() != null)
93                && (vc.getReproducibility() == null)) {
94            throw new VirtualCollectionRegistryUsageException(
95                    "reproducibility notice without reproducubility");
96        }
97
98        for (String keyword : vc.getKeywords()) {
99            if ((keyword == null) || (keyword.trim().isEmpty())) {
100                throw new VirtualCollectionRegistryUsageException(
101                        "keyword is empty");
102            }
103        }
104
105        for (Resource resource : vc.getResources()) {
106            String ref = resource.getRef();
107            if (ref == null) {
108                throw new VirtualCollectionRegistryUsageException(
109                        "collection contains resource with empty ResourceRef");
110            }
111            if (uniqueResourceRefs.contains(ref)) {
112                throw new VirtualCollectionRegistryUsageException(
113                        "collection contains non-unique ResourceRefs");
114            }
115            uniqueResourceRefs.add(ref);
116        }
117    }
118
119    private List<String> getInvalidReferences(VirtualCollection vc) {
120        final ReferenceValidator referenceValidator = new ReferenceValidator();
121        final List<String> invalidRefs = new ArrayList<>();
122        for (Resource resource : vc.getResources()) {
123            if (!referenceValidator.validate(resource.getRef())) {
124                invalidRefs.add(resource.getRef());
125            }
126        }
127        return invalidRefs;
128    }
129
130} // class VirtualCollectionValidator
Note: See TracBrowser for help on using the repository browser.