/* * Copyright (c) 2008-2013 EMC Corporation * All Rights Reserved */ package com.emc.storageos.model.adapters; import java.util.*; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.adapters.XmlAdapter; public class StringSetMapAdapter extends XmlAdapter<List<StringSetMapAdapter.Entry>, Map<String, ? extends Set<String>>> { public static class EntryList { public List<Entry> entryList = new ArrayList<StringSetMapAdapter.Entry>(); } public static class Entry { private String key; private String value; @XmlElement(name = "name") public String getKey() { return key; } public void setKey(String key) { this.key = key; } @XmlElement(name = "value") public String getValue() { return value; } public void setValue(String value) { this.value = value; } } @Override public List<Entry> marshal(Map<String, ? extends Set<String>> map) throws Exception { List<Entry> entryList = new ArrayList<StringSetMapAdapter.Entry>(); for (Map.Entry<String, ? extends Set<String>> mapEntry : map.entrySet()) { for (String value : mapEntry.getValue()) { Entry entry = new Entry(); entry.setKey(mapEntry.getKey()); entry.setValue(value); entryList.add(entry); } } return entryList; } @Override public Map<String, Set<String>> unmarshal(List<StringSetMapAdapter.Entry> entryList) throws Exception { Map<String, Set<String>> map = new HashMap<String, Set<String>>(); for (Entry entry : entryList) { if (map.containsKey(entry.getKey())) { map.get(entry.getKey()).add(entry.getValue()); } else { Set<String> valueSet = new HashSet<String>(); valueSet.add(entry.getValue()); map.put(entry.getKey(), valueSet); } } return map; } }