11package edu .harvard .iq .dataverse .harvest .server .web .servlet ;
22
3- import com .lyncode .xml .exceptions .XmlWriteException ;
4- import edu .harvard .iq .dataverse .DatasetDao ;
5- import edu .harvard .iq .dataverse .DataverseDao ;
6- import edu .harvard .iq .dataverse .export .ExportService ;
7- import edu .harvard .iq .dataverse .export .ExporterType ;
8- import edu .harvard .iq .dataverse .export .spi .Exporter ;
9- import edu .harvard .iq .dataverse .harvest .server .OAIRecordServiceBean ;
10- import edu .harvard .iq .dataverse .harvest .server .OAISetServiceBean ;
11- import edu .harvard .iq .dataverse .harvest .server .xoai .XdataProvider ;
12- import edu .harvard .iq .dataverse .harvest .server .xoai .XgetRecord ;
13- import edu .harvard .iq .dataverse .harvest .server .xoai .XitemRepository ;
14- import edu .harvard .iq .dataverse .harvest .server .xoai .XlistRecords ;
15- import edu .harvard .iq .dataverse .harvest .server .xoai .XsetRepository ;
16- import edu .harvard .iq .dataverse .settings .SettingsServiceBean ;
17- import edu .harvard .iq .dataverse .util .SystemConfig ;
18- import org .apache .commons .lang .StringUtils ;
3+ import static edu .harvard .iq .dataverse .settings .SettingsServiceBean .Key .OAIServerEnabled ;
4+ import static edu .harvard .iq .dataverse .settings .SettingsServiceBean .Key .SystemEmail ;
5+ import static javax .servlet .http .HttpServletResponse .SC_SERVICE_UNAVAILABLE ;
6+ import static org .apache .commons .lang .StringUtils .isEmpty ;
7+ import static org .dspace .xoai .dataprovider .model .MetadataFormat .metadataFormat ;
8+ import static org .dspace .xoai .model .oaipmh .OAIPMH .NAMESPACE_URI ;
9+ import static org .dspace .xoai .model .oaipmh .OAIPMH .SCHEMA_LOCATION ;
10+ import static org .dspace .xoai .model .oaipmh .Verb .Type .GetRecord ;
11+ import static org .dspace .xoai .model .oaipmh .Verb .Type .ListRecords ;
12+ import static org .dspace .xoai .xml .XmlWriter .defaultContext ;
13+
14+ import java .io .ByteArrayOutputStream ;
15+ import java .io .IOException ;
16+ import java .io .OutputStream ;
17+ import java .util .Date ;
18+ import java .util .logging .Logger ;
19+
20+ import javax .inject .Inject ;
21+ import javax .servlet .ServletConfig ;
22+ import javax .servlet .ServletException ;
23+ import javax .servlet .http .HttpServlet ;
24+ import javax .servlet .http .HttpServletRequest ;
25+ import javax .servlet .http .HttpServletResponse ;
26+ import javax .xml .stream .XMLStreamException ;
27+
1928import org .dspace .xoai .dataprovider .builder .OAIRequestParametersBuilder ;
2029import org .dspace .xoai .dataprovider .exceptions .OAIException ;
2130import org .dspace .xoai .dataprovider .model .Context ;
3241import org .dspace .xoai .xml .XSISchema ;
3342import org .dspace .xoai .xml .XmlWriter ;
3443
35- import javax .inject .Inject ;
36- import javax .servlet .ServletConfig ;
37- import javax .servlet .ServletException ;
38- import javax .servlet .http .HttpServlet ;
39- import javax .servlet .http .HttpServletRequest ;
40- import javax .servlet .http .HttpServletResponse ;
41- import javax .xml .stream .XMLStreamException ;
42- import java .io .ByteArrayOutputStream ;
43- import java .io .IOException ;
44- import java .io .OutputStream ;
45- import java .util .Date ;
46- import java .util .Map ;
47- import java .util .logging .Logger ;
44+ import com .lyncode .xml .exceptions .XmlWriteException ;
4845
49- import static org .dspace .xoai .model .oaipmh .OAIPMH .NAMESPACE_URI ;
50- import static org .dspace .xoai .model .oaipmh .OAIPMH .SCHEMA_LOCATION ;
51- import static org .dspace .xoai .xml .XmlWriter .defaultContext ;
46+ import edu .harvard .iq .dataverse .DatasetDao ;
47+ import edu .harvard .iq .dataverse .DataverseDao ;
48+ import edu .harvard .iq .dataverse .export .ExportService ;
49+ import edu .harvard .iq .dataverse .export .spi .Exporter ;
50+ import edu .harvard .iq .dataverse .harvest .server .OAIRecordServiceBean ;
51+ import edu .harvard .iq .dataverse .harvest .server .OAISetServiceBean ;
52+ import edu .harvard .iq .dataverse .harvest .server .xoai .XdataProvider ;
53+ import edu .harvard .iq .dataverse .harvest .server .xoai .XgetRecord ;
54+ import edu .harvard .iq .dataverse .harvest .server .xoai .XitemRepository ;
55+ import edu .harvard .iq .dataverse .harvest .server .xoai .XlistRecords ;
56+ import edu .harvard .iq .dataverse .harvest .server .xoai .XsetRepository ;
57+ import edu .harvard .iq .dataverse .settings .SettingsServiceBean ;
58+ import edu .harvard .iq .dataverse .util .SystemConfig ;
5259
5360/**
5461 * @author Leonid Andreev
@@ -129,7 +136,7 @@ public void init(ServletConfig config) throws ServletException {
129136 }
130137
131138 setRepository = new XsetRepository (setService );
132- itemRepository = new XitemRepository (recordService , datasetDao );
139+ itemRepository = new XitemRepository (recordService , datasetDao , systemConfig );
133140
134141 repositoryConfiguration = createRepositoryConfiguration ();
135142
@@ -175,7 +182,7 @@ protected OAIRequestParametersBuilder newXoaiRequest() {
175182 }
176183
177184 public boolean isHarvestingServerEnabled () {
178- return settingsService .isTrueForKey (SettingsServiceBean . Key . OAIServerEnabled );
185+ return settingsService .isTrueForKey (OAIServerEnabled );
179186 }
180187
181188 // -------------------- PRIVATE --------------------
@@ -191,8 +198,9 @@ private void addSupportedMetadataFormats(Context context) {
191198 if (!exporter .isXMLFormat () || !exporter .isHarvestable ()) {
192199 continue ;
193200 }
194- MetadataFormat metadataFormat = MetadataFormat .metadataFormat (exporter .getProviderName ());
195- if (exporter .getXMLNameSpace ().isEmpty () && exporter .getXMLSchemaLocation ().isEmpty ()) {
201+ MetadataFormat metadataFormat = metadataFormat (exporter .getProviderName ());
202+ if (exporter .getXMLNameSpace ().isEmpty ()
203+ && exporter .getXMLSchemaLocation ().isEmpty ()) {
196204 continue ;
197205 }
198206 metadataFormat .withNamespace (exporter .getXMLNameSpace ());
@@ -219,32 +227,49 @@ private RepositoryConfiguration createRepositoryConfiguration() {
219227 // need to be configurable!
220228
221229 String dataverseName = dataverseDao .findRootDataverse ().getName ();
222- String repositoryName = StringUtils .isEmpty (dataverseName ) || "Root" .equals (dataverseName ) ? "Test Dataverse OAI Archive" : dataverseName + " Dataverse OAI Archive" ;
230+ String repositoryName = isEmpty (dataverseName ) || "Root" .equals (dataverseName )
231+ ? "Test Dataverse OAI Archive"
232+ : dataverseName + " Dataverse OAI Archive" ;
223233 Date earliestDate = recordService .findEarliestDate ();
224234
225235 RepositoryConfiguration repositoryConfiguration = new RepositoryConfiguration ()
226236 .withRepositoryName (repositoryName )
227237 .withBaseUrl (systemConfig .getDataverseSiteUrl () + "/oai" )
228238 .withCompression ("gzip" ) // ?
229239 .withCompression ("deflate" ) // ?
230- .withAdminEmail (settingsService .getValueForKey (SettingsServiceBean . Key . SystemEmail ))
240+ .withAdminEmail (settingsService .getValueForKey (SystemEmail ))
231241 .withDeleteMethod (DeletedRecord .TRANSIENT )
232242 .withGranularity (Granularity .Second )
233243 .withMaxListIdentifiers (100 )
234244 .withMaxListRecords (100 )
235245 .withMaxListSets (100 )
236- .withEarliestDate (earliestDate != null ? earliestDate : new Date ());
246+ .withEarliestDate (earliestDate != null ? earliestDate : new Date ())
247+ .withDescription (createDescription ());
237248
238249 return repositoryConfiguration ;
239250 }
251+
252+ private String createDescription () {
253+ return "<description>"
254+ + "<oai-identifier xmlns=\" http://www.openarchives.org/OAI/2.0/oai-identifier\" >"
255+ + "<scheme>oai</scheme>"
256+ + "<repositoryIdentifier>"
257+ + this .systemConfig .getDataverseServer ()
258+ + "</repositoryIdentifier>"
259+ + "<delimiter>:</delimiter>"
260+ + "<sampleIdentifier>oai:"
261+ + this .systemConfig .getDataverseServer ()
262+ +":doi%3A10.18150%2FAB1CD2</sampleIdentifier>"
263+ + "</oai-identifier>"
264+ + "</description>" ;
265+ }
240266
241267 private void processRequest (HttpServletRequest request , HttpServletResponse response )
242268 throws ServletException , IOException {
243269
244270 try {
245271 if (!isHarvestingServerEnabled ()) {
246- response .sendError (
247- HttpServletResponse .SC_SERVICE_UNAVAILABLE ,
272+ response .sendError (SC_SERVICE_UNAVAILABLE ,
248273 "Sorry. OAI Service is disabled on this Dataverse node." );
249274 return ;
250275 }
@@ -300,14 +325,15 @@ private void writeListRecords(HttpServletResponse response, OAIPMH handle)
300325 throw new IOException ("An error or a valid response must be set" );
301326 }
302327
303- if (!verb .getType ().equals (Verb . Type . ListRecords )) {
328+ if (!verb .getType ().equals (ListRecords )) {
304329 throw new IOException ("writeListRecords() called on a non-ListRecords verb" );
305330 }
306331
307332 outputStream .write (("<" + verb .getType ().displayName () + ">" ).getBytes ());
308333 outputStream .flush ();
309334
310- ((XlistRecords ) verb ).writeToStream (outputStream , exportService , systemConfig .getDataverseSiteUrl ());
335+ ((XlistRecords ) verb ).writeToStream (outputStream , exportService ,
336+ systemConfig .getDataverseSiteUrl ());
311337
312338 outputStream .write (("</" + verb .getType ().displayName () + ">" ).getBytes ());
313339 outputStream .write (("</" + OAI_PMH + ">\n " ).getBytes ());
@@ -326,14 +352,15 @@ private void writeGetRecord(HttpServletResponse response, OAIPMH handle)
326352 throw new IOException ("An error or a valid response must be set" );
327353 }
328354
329- if (!verb .getType ().equals (Verb . Type . GetRecord )) {
355+ if (!verb .getType ().equals (GetRecord )) {
330356 throw new IOException ("writeListRecords() called on a non-GetRecord verb" );
331357 }
332358
333359 outputStream .write (("<" + verb .getType ().displayName () + ">" ).getBytes ());
334360 outputStream .flush ();
335361
336- ((XgetRecord ) verb ).writeToStream (outputStream , exportService , systemConfig .getDataverseSiteUrl ());
362+ ((XgetRecord ) verb ).writeToStream (outputStream , exportService ,
363+ systemConfig .getDataverseSiteUrl ());
337364
338365 outputStream .write (("</" + verb .getType ().displayName () + ">" ).getBytes ());
339366 outputStream .write (("</" + OAI_PMH + ">\n " ).getBytes ());
0 commit comments