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

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