package org.jboss.resteasy.test.providers.jaxb.resource;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAnyElement;
import javax.xml.bind.annotation.XmlAnyAttribute;
import javax.xml.bind.annotation.XmlTransient;
import javax.xml.namespace.QName;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@XmlAccessorType(XmlAccessType.FIELD)
public class MapJaxb {
@XmlAnyElement
List<JAXBElement<Entry>> value = new ArrayList<JAXBElement<Entry>>();
@XmlTransient
private String entryName;
@XmlTransient
private String keyAttributeName;
@XmlTransient
private String namespace;
public MapJaxb() {
}
public MapJaxb(final String entryName, final String keyAttributeName, final String namespace) {
this.entryName = entryName;
this.namespace = namespace;
this.keyAttributeName = keyAttributeName;
}
@XmlAccessorType(XmlAccessType.FIELD)
public static class Entry {
@XmlAnyElement
Object value;
@XmlAnyAttribute
Map<QName, Object> attribute = new HashMap<QName, Object>();
@XmlTransient
private String key;
@XmlTransient
private String keyAttributeName;
public Entry() {
}
public Entry(final String keyAttributeName, final String key, final Object value) {
this.value = value;
this.keyAttributeName = keyAttributeName;
setKey(key);
}
public Object getValue() {
return value;
}
public void setValue(Object value) {
this.value = value;
}
public String getKey() {
if (key != null) {
return key;
}
key = (String) attribute.values().iterator().next();
return key;
}
public void setKey(String keyValue) {
this.key = keyValue;
attribute.clear();
QName name = new QName(keyAttributeName);
attribute.put(name, keyValue);
}
}
public void addEntry(String key, Object val) {
Entry entry = new Entry(keyAttributeName, key, val);
JAXBElement<Entry> element = new JAXBElement<Entry>(new QName(namespace, entryName), Entry.class, entry);
value.add(element);
}
public List<JAXBElement<Entry>> getValue() {
return value;
}
}