View Javadoc
1   /*
2    * Licensed to The Apereo Foundation under one or more contributor license
3    * agreements. See the NOTICE file distributed with this work for additional
4    * information regarding copyright ownership.
5    *
6    *
7    * The Apereo Foundation licenses this file to you under the Educational
8    * Community License, Version 2.0 (the "License"); you may not use this file
9    * except in compliance with the License. You may obtain a copy of the License
10   * at:
11   *
12   *   http://opensource.org/licenses/ecl2.txt
13   *
14   * Unless required by applicable law or agreed to in writing, software
15   * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
16   * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
17   * License for the specific language governing permissions and limitations under
18   * the License.
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 }