package call; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.commons.lang3.StringUtils; public abstract class AudioDeviceSerializer<A extends AudioDevice> extends AbstractId implements IdObjectSerializer<A>, IdMapSerializer<A, Collection<PcmFormat>> { public abstract List<A> getAudioDevices(); @Override public String serialize(A deserialized) { String serialized = (StringUtils.remove(deserialized.getMixerinfo().toString(), ",") + ", " + StringUtils .remove(deserialized.getLineinfo().toString(), ",")).toLowerCase().trim(); serialized = StringUtils.remove(serialized, ";"); serialized = StringUtils.remove(serialized, "|"); serialized = StringUtils.remove(serialized, ":"); return serialized; } @Override public A deserialize(String serialized) throws UnknownDefaultValueException { serialized = StringUtils.split(serialized, ":", 2)[0]; Collection<A> devicelist = getAudioDevices(); for (A device : devicelist) { final String deviceSerialized = StringUtils.split(serialize(device), ":", 2)[0]; if (deviceSerialized.equals(serialized)) { return device; } } return this.getDefaultValue(); } @Override public String serializeMap(Map<? extends A, ? extends Collection<PcmFormat>> value) { List<String> serialized = new ArrayList<>(); for (A elem : value.keySet()) { String str = serialize(elem); final List<PcmFormat> formats = elem.getFormats(); str += ":" + new PcmFormat.Serializer().serializeAll(formats); serialized.add(str); } return Util.join(serialized, "|"); } @Override public Map<A, Collection<PcmFormat>> deserializeMap(String serialized) { String[] serializedAll = StringUtils.split(serialized, "|"); Map<A, Collection<PcmFormat>> deserialized = new HashMap<>(); for (String elem : serializedAll) { String[] parts = StringUtils.split(elem, ":", 2); if (parts.length == 2) try { deserialized.put(deserialize(parts[0]), new PcmFormat.Serializer().deserializeAll(parts[1])); } catch (UnknownDefaultValueException e) { e.printStackTrace(); } } return deserialized; } }