001package org.kuali.common.util.xml.jaxb.adapter;
002
003import java.util.Collections;
004import java.util.Map;
005
006import javax.xml.bind.annotation.adapters.XmlAdapter;
007
008import org.kuali.common.util.xml.jaxb.wrapper.MapWrapper;
009
010public class ImmutableMapAdapter<K, V> extends XmlAdapter<MapWrapper<K, V>, Map<K, V>> {
011
012        private final Map<K, V> EMPTY_MAP = Collections.emptyMap();
013        private final MapWrapper<K, V> EMPTY_WRAPPER = new MapWrapper<K, V>(EMPTY_MAP);
014
015        @Override
016        public MapWrapper<K, V> marshal(Map<K, V> map) {
017                if (isEmpty(map)) {
018                        return EMPTY_WRAPPER;
019                } else {
020                        return new MapWrapper<K, V>(map);
021                }
022        }
023
024        @Override
025        public Map<K, V> unmarshal(MapWrapper<K, V> wrapper) {
026                if (isEmpty(wrapper.getMap())) {
027                        return EMPTY_MAP;
028                } else {
029                        return Collections.unmodifiableMap(wrapper.getMap());
030                }
031        }
032
033        protected static boolean isEmpty(Map<?, ?> map) {
034                return map == null || map.size() == 0;
035        }
036
037}