1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.opencastproject.oaipmh.persistence.impl;
22
23 import org.opencastproject.mediapackage.MediaPackage;
24 import org.opencastproject.mediapackage.MediaPackageException;
25 import org.opencastproject.mediapackage.MediaPackageParser;
26 import org.opencastproject.metadata.dublincore.DublinCoreCatalog;
27 import org.opencastproject.oaipmh.persistence.OaiPmhDatabaseException;
28 import org.opencastproject.oaipmh.persistence.OaiPmhElementEntity;
29 import org.opencastproject.oaipmh.persistence.OaiPmhEntity;
30 import org.opencastproject.oaipmh.persistence.SearchResultElementItem;
31 import org.opencastproject.oaipmh.persistence.SearchResultItem;
32
33 import java.util.ArrayList;
34 import java.util.Date;
35 import java.util.List;
36
37 public class SearchResultItemImpl implements SearchResultItem {
38
39 private final String mediaPackageId;
40 private final MediaPackage mediaPackage;
41 private final String mediaPackageXml;
42 private final String organization;
43 private final String repoId;
44 private final Date modificationDate;
45 private final boolean isDeleted;
46 private final List<SearchResultElementItem> mediaPackageElements;
47 private List<String> setSpecs;
48
49 public SearchResultItemImpl(final OaiPmhEntity entity) throws MediaPackageException {
50 this.mediaPackageId = entity.getMediaPackageId();
51 this.mediaPackageXml = entity.getMediaPackageXML();
52 this.organization = entity.getOrganization();
53 this.repoId = entity.getRepositoryId();
54 this.modificationDate = entity.getModificationDate();
55 this.isDeleted = entity.isDeleted();
56 this.mediaPackage = MediaPackageParser.getFromXml(mediaPackageXml);
57 this.mediaPackageElements = new ArrayList<>();
58 this.setSpecs = new ArrayList<>();
59 for (OaiPmhElementEntity elementEntity : entity.getMediaPackageElements()) {
60 SearchResultElementItemImpl searchResultElementItem = new SearchResultElementItemImpl(elementEntity);
61 mediaPackageElements.add(searchResultElementItem);
62 }
63 }
64
65 public SearchResultItemImpl(final String mediaPackageId, final String mediaPackageXml,
66 final String organization, final String repoId, final Date modificationDate,
67 final Boolean isDeleted, final MediaPackage mediaPackage,
68 final List<SearchResultElementItem> mediaPackageElements,
69 final List<String> setSpecs) {
70 this.mediaPackageId = mediaPackageId;
71 this.mediaPackageXml = mediaPackageXml;
72 this.organization = organization;
73 this.repoId = repoId;
74 this.modificationDate = modificationDate;
75 this.isDeleted = isDeleted;
76 this.mediaPackage = mediaPackage;
77 this.mediaPackageElements = new ArrayList<>();
78 this.mediaPackageElements.addAll(mediaPackageElements);
79 this.setSpecs = new ArrayList<>();
80 this.setSpecs.addAll(setSpecs);
81 }
82
83 @Override
84 public String getId() {
85 return mediaPackageId;
86 }
87
88 @Override
89 public MediaPackage getMediaPackage() {
90 return mediaPackage;
91 }
92
93 @Override
94 public String getMediaPackageXml() {
95 return mediaPackageXml;
96 }
97
98 @Override
99 public String getOrganization() {
100 return organization;
101 }
102
103 @Override
104 public String getRepository() {
105 return repoId;
106 }
107
108 @Override
109 public Date getModificationDate() {
110 return modificationDate;
111 }
112
113 @Override
114 public boolean isDeleted() {
115 return isDeleted;
116 }
117
118 @Override
119 public List<SearchResultElementItem> getElements() {
120 return mediaPackageElements;
121 }
122
123 @Override
124 public DublinCoreCatalog getEpisodeDublinCore() throws OaiPmhDatabaseException {
125 for (SearchResultElementItem element : getElements()) {
126 if (element.isEpisodeDublinCore()) {
127 return element.asDublinCore();
128 }
129 }
130 throw new OaiPmhDatabaseException("Episode dublincore not found");
131 }
132
133 @Override
134 public DublinCoreCatalog getSeriesDublinCore() throws OaiPmhDatabaseException {
135 for (SearchResultElementItem element : getElements()) {
136 if (element.isSeriesDublinCore()) {
137 return element.asDublinCore();
138 }
139 }
140 throw new OaiPmhDatabaseException("Series dublincore catalog not found");
141 }
142
143 @Override
144 public List<String> getSetSpecs() {
145 return setSpecs;
146 }
147
148 @Override
149 public void addSetSpec(String setSpec) {
150 setSpecs.add(setSpec);
151 }
152 }