source: OAIProvider/trunk/src/main/java/eu/clarin/oai/provider/impl/VerbListSets.java @ 1911

Last change on this file since 1911 was 1911, checked in by oschonef, 12 years ago
  • first round of major refactoring to simply the provider
    • result sets converted to iterator/cursor-mode (better streaming support)
    • delegate serializing of records to Result and ResultList?
    • prepare getting rid of over-engineered and complicated MetadataFormats? classes (not done, yet)

HEADS UP: breaks existing API

  • Property svn:eol-style set to native
File size: 2.9 KB
Line 
1package eu.clarin.oai.provider.impl;
2
3import java.io.IOException;
4import java.util.Arrays;
5import java.util.List;
6import java.util.Set;
7
8import javax.xml.stream.XMLStreamException;
9
10import eu.clarin.oai.provider.OAIException;
11import eu.clarin.oai.provider.SetSpecDesc;
12import eu.clarin.oai.provider.ext.Argument;
13import eu.clarin.oai.provider.ext.OAIErrorCode;
14import eu.clarin.oai.provider.ext.OAIOutputStream;
15import eu.clarin.oai.provider.ext.RepositoryAdapter;
16import eu.clarin.oai.provider.ext.Verb;
17import eu.clarin.oai.provider.ext.VerbContext;
18import eu.clarin.oai.provider.ext.OAIOutputStream.NamespaceDecl;
19
20final class VerbListSets extends Verb {
21    private static final Argument[] ARGUMENTS = {
22        DefaultArguments.RESUMPTIONTOKEN
23    };
24    private static final List<NamespaceDecl> NS_DECLS_DC = Arrays.asList(
25            new NamespaceDecl(MetadataConstants.NS_OAI_DC, "oai_dc",
26                              MetadataConstants.NS_OAI_DC_SCHEMA_LOCATION),
27            new NamespaceDecl(MetadataConstants.NS_DC, null));
28
29    @Override
30    public String getName() {
31        return "ListSets";
32    }
33
34    @Override
35    public Argument[] getArguments() {
36        return ARGUMENTS;
37    }
38
39    @Override
40    public void process(VerbContext ctx) throws IOException,
41            XMLStreamException, OAIException {
42        logger.debug("process LIST-SETS");
43
44        RepositoryAdapter repository = ctx.getRepository();
45        Set<SetSpecDesc> setDescs = repository.getSetSpecs();
46        if (repository.isUsingSets()) {
47            OAIOutputStream out = ctx.getOutputStream();
48            out.writeStartElement("ListSets");
49            for (SetSpecDesc setSpec : setDescs) {
50                out.writeStartElement("set");
51                out.writeStartElement("setSpec");
52                out.writeCharacters(setSpec.getId());
53                out.writeEndElement(); // setSpec element
54                out.writeStartElement("setName");
55                out.writeCharacters(setSpec.getName());
56                out.writeEndElement(); // setName element
57                if (setSpec.getDescription() != null) {
58                    out.writeStartElement("setDescription");
59                    out.writeStartElement(MetadataConstants.NS_OAI_DC, "dc",
60                            NS_DECLS_DC);
61                    out.writeStartElement(MetadataConstants.NS_OAI_DC,
62                            "description");
63                    out.writeCharacters(setSpec.getDescription());
64                    out.writeEndElement(); // description element
65                    out.writeEndElement(); // dc element
66                    out.writeEndElement(); // setDescription element
67                }
68                out.writeEndElement(); // set element
69            }
70            out.writeEndElement(); // ListSets element
71            out.close();
72        } else {
73            ctx.addError(OAIErrorCode.NO_SET_HIERARCHY,
74                    "This repository does not support sets");
75        }
76    }
77
78} // class VerbListSets
Note: See TracBrowser for help on using the repository browser.