package jfxtras.icalendarfx.parameters; import java.util.HashMap; import java.util.Map; import jfxtras.icalendarfx.parameters.Encoding; import jfxtras.icalendarfx.parameters.VParameterBase; import jfxtras.icalendarfx.parameters.Encoding.EncodingType; import jfxtras.icalendarfx.properties.component.descriptive.Attachment; import jfxtras.icalendarfx.utilities.StringConverter; /** * ENCODING * Inline Encoding * RFC 5545, 3.2.7, page 18 * * To specify an alternate inline encoding for the property value. * * Example: * ATTACH;FMTTYPE=text/plain;ENCODING=BASE64;VALUE=BINARY:TG9yZW * 0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2ljaW * 5nIGVsaXQsIHNlZCBkbyBlaXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IG * xhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXVhLiBVdCBlbmltIGFkIG1pbm * ltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaXRhdGlvbiB1bGxhbWNvIG * xhYm9yaXMgbmlzaSB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdW * F0LiBEdWlzIGF1dGUgaXJ1cmUgZG9sb3IgaW4gcmVwcmVoZW5kZXJpdCBpbi * B2b2x1cHRhdGUgdmVsaXQgZXNzZSBjaWxsdW0gZG9sb3JlIGV1IGZ1Z2lhdC * BudWxsYSBwYXJpYXR1ci4gRXhjZXB0ZXVyIHNpbnQgb2NjYWVjYXQgY3VwaW * RhdGF0IG5vbiBwcm9pZGVudCwgc3VudCBpbiBjdWxwYSBxdWkgb2ZmaWNpYS * BkZXNlcnVudCBtb2xsaXQgYW5pbSBpZCBlc3QgbGFib3J1bS4= * * @author David Bal * @see Attachment */ public class Encoding extends VParameterBase<Encoding, EncodingType> { private static final StringConverter<EncodingType> CONVERTER = new StringConverter<EncodingType>() { @Override public String toString(EncodingType object) { return object.toString(); } @Override public EncodingType fromString(String string) { return EncodingType.enumFromName(string.toUpperCase()); } }; public Encoding() { super(EncodingType.EIGHT_BIT, CONVERTER); } public Encoding(EncodingType value) { super(value, CONVERTER); } public Encoding(Encoding source) { super(source, CONVERTER); } public enum EncodingType { EIGHT_BIT ("8BIT"), BASE64 ("BASE64"); private static Map<String, EncodingType> enumFromNameMap = makeEnumFromNameMap(); private static Map<String, EncodingType> makeEnumFromNameMap() { Map<String, EncodingType> map = new HashMap<>(); EncodingType[] values = EncodingType.values(); for (int i=0; i<values.length; i++) { map.put(values[i].toString(), values[i]); } return map; } /** get enum from name */ public static EncodingType enumFromName(String propertyName) { return enumFromNameMap.get(propertyName.toUpperCase()); } private String name; @Override public String toString() { return name; } EncodingType(String name) { this.name = name; } } public static Encoding parse(String content) { return Encoding.parse(new Encoding(), content); } }