source: SRUCQIBridge/src/main/java/eu/clarin/sru/cqibridge/ResourceInfo.java @ 2477

Last change on this file since 2477 was 2477, checked in by akislev, 11 years ago

integrated recent changes needed for the scan operation to work

File size: 4.8 KB
Line 
1package eu.clarin.sru.cqibridge;
2
3import java.util.HashMap;
4import java.util.List;
5import java.util.Map;
6import javax.xml.XMLConstants;
7import javax.xml.stream.XMLStreamException;
8import javax.xml.stream.XMLStreamWriter;
9
10/**
11 *
12 * @author akislev
13 */
14public class ResourceInfo {
15
16    private static final String FCS_RESOURCE_INFO_NS = "http://clarin.eu/fcs/1.0/resource-info";
17    private final String corpusId;
18    private final int resourceCount;
19    private final boolean hasSubResources;
20    private final Map<String, String> title;
21    private final Map<String, String> description;
22    private final List<String> languages;
23    private final Map<String, String> indexes;
24
25    public ResourceInfo(String corpusId, int resourceCount,
26            boolean hasSubResources, List<String> title,
27            List<String> description, List<String> languages,
28            List<String> indexes) {
29        this.corpusId = corpusId;
30        this.resourceCount = (resourceCount > 0) ? resourceCount : -1;
31        this.hasSubResources = hasSubResources;
32        this.title = listToMap(title, true);
33        this.description = listToMap(description, false);
34        this.languages = languages;
35        this.indexes = listToMap(indexes, false);
36    }
37
38    public String getCorpusId() {
39        return corpusId;
40    }
41
42    public int getResourceCount() {
43        return resourceCount;
44    }
45
46    public void writeResourceInfo(XMLStreamWriter writer, String prefix)
47            throws XMLStreamException {
48        final boolean defaultNS = (prefix == null || prefix.isEmpty());
49        if (defaultNS) {
50            writer.setDefaultNamespace(FCS_RESOURCE_INFO_NS);
51        } else {
52            writer.setPrefix(prefix, FCS_RESOURCE_INFO_NS);
53        }
54        writer.writeStartElement(FCS_RESOURCE_INFO_NS, "resource-info");
55        if (defaultNS) {
56            writer.writeDefaultNamespace(FCS_RESOURCE_INFO_NS);
57        } else {
58            writer.writeNamespace(prefix, FCS_RESOURCE_INFO_NS);
59        }
60        if (hasSubResources) {
61            writer.writeAttribute("has-sub-resources", "true");
62        }
63        for (Map.Entry<String, String> i : title.entrySet()) {
64            writer.writeStartElement(FCS_RESOURCE_INFO_NS, "title");
65            writer.writeAttribute(XMLConstants.XML_NS_URI,
66                    "lang", i.getKey());
67            writer.writeCharacters(i.getValue());
68            writer.writeEndElement(); // "title" element
69        }
70
71        if (description != null) {
72            for (Map.Entry<String, String> i : description.entrySet()) {
73                writer.writeStartElement(FCS_RESOURCE_INFO_NS,
74                        "description");
75                writer.writeAttribute(XMLConstants.XML_NS_URI, "lang",
76                        i.getKey());
77                writer.writeCharacters(i.getValue());
78                writer.writeEndElement(); // "description" element
79            }
80        }
81
82        writer.writeStartElement(FCS_RESOURCE_INFO_NS, "languages");
83        for (String i : languages) {
84            writer.writeStartElement(FCS_RESOURCE_INFO_NS, "language");
85            writer.writeCharacters(i);
86            writer.writeEndElement(); // "language" element
87
88        }
89        writer.writeEndElement(); // "languages" element
90
91        if (indexes != null) {
92            writer.writeStartElement(FCS_RESOURCE_INFO_NS, "indexes");
93            for (Map.Entry<String, String> i : indexes.entrySet()) {
94                writer.writeStartElement(FCS_RESOURCE_INFO_NS,
95                        "index");
96                writer.writeAttribute("category", i.getKey());
97                writer.writeCharacters(i.getValue());
98                writer.writeEndElement(); // "index" element
99            }
100            writer.writeEndElement(); // "indexes" element
101        }
102        writer.writeEndElement(); // "resource-info" element
103    }
104
105    private static Map<String, String> listToMap(List<String> list,
106            boolean mandatory) {
107        if (list != null) {
108            if (list.isEmpty() || ((list.size() % 2) != 0)) {
109                throw new IllegalArgumentException(
110                        "list must contain an even number of elements and must not be empty");
111            }
112            Map<String, String> result = new HashMap<String, String>();
113            for (int i = 0; i < list.size(); i += 2) {
114                String key = list.get(i);
115                String val = list.get(i + 1);
116                if ((key == null) || (val == null)) {
117                    throw new NullPointerException(
118                            "key == null || val == null");
119                }
120                result.put(list.get(i), list.get(i + 1));
121            }
122            return result;
123        } else {
124            if (mandatory) {
125                throw new NullPointerException("list == null");
126            }
127            return null;
128        }
129    }
130}
Note: See TracBrowser for help on using the repository browser.