001 package com.khubla.pragmatach.plugin.yaml; 002 003 import java.io.ByteArrayInputStream; 004 import java.io.ByteArrayOutputStream; 005 import java.io.InputStream; 006 import java.io.OutputStream; 007 import java.lang.reflect.Field; 008 import java.util.HashMap; 009 import java.util.Map; 010 011 import org.apache.commons.beanutils.BeanUtils; 012 import org.apache.commons.io.IOUtils; 013 import org.yaml.snakeyaml.Yaml; 014 015 import com.khubla.pragmatach.framework.api.PragmatachException; 016 017 /** 018 * @author tome 019 */ 020 public class PragmatachYAML { 021 /** 022 * convert object from YAML 023 */ 024 public static void fromYAML(Object object, InputStream inputStream) throws PragmatachException { 025 try { 026 final ByteArrayOutputStream baos = new ByteArrayOutputStream(); 027 IOUtils.copy(inputStream, baos); 028 fromYAML(object, baos.toString()); 029 } catch (final Exception e) { 030 throw new PragmatachException("Exception in fromYAML", e); 031 } 032 } 033 034 /** 035 * convert object from YAML 036 */ 037 public static void fromYAML(Object object, String YAML) throws PragmatachException { 038 try { 039 final Map<String, String> values = parseYAML(YAML); 040 if ((null != values) && (values.size() > 0)) { 041 for (final Field field : object.getClass().getDeclaredFields()) { 042 final String value = values.get(field.getName()); 043 BeanUtils.setProperty(object, field.getName(), value); 044 } 045 } 046 } catch (final Exception e) { 047 throw new PragmatachException("Exception in fromYAML", e); 048 } 049 } 050 051 /** 052 * parse YAML to map 053 */ 054 public static Map<String, String> parseYAML(InputStream inputStream) throws PragmatachException { 055 try { 056 final ByteArrayOutputStream baos = new ByteArrayOutputStream(); 057 IOUtils.copy(inputStream, baos); 058 return parseYAML(baos.toString()); 059 } catch (final Exception e) { 060 throw new PragmatachException("Exception in parseYAML", e); 061 } 062 } 063 064 /** 065 * parse YAML to map 066 */ 067 @SuppressWarnings("unchecked") 068 public static Map<String, String> parseYAML(String YAML) throws PragmatachException { 069 try { 070 final Yaml yaml = new Yaml(); 071 return (Map<String, String>) yaml.load(YAML); 072 } catch (final Exception e) { 073 throw new PragmatachException("Exception in parseYAML", e); 074 } 075 } 076 077 /** 078 * convert object to YAML 079 */ 080 public static String toYAML(Object object) throws PragmatachException { 081 try { 082 final Map<String, String> map = new HashMap<String, String>(); 083 for (final Field field : object.getClass().getDeclaredFields()) { 084 map.put(field.getName(), BeanUtils.getSimpleProperty(object, field.getName())); 085 } 086 final Yaml yaml = new Yaml(); 087 return yaml.dump(map); 088 } catch (final Exception e) { 089 throw new PragmatachException("Exception in toYAML", e); 090 } 091 } 092 093 /** 094 * convert object to YAML 095 */ 096 public static void toYAML(Object object, OutputStream outputStream) throws PragmatachException { 097 try { 098 final String YAML = toYAML(object); 099 final ByteArrayInputStream bais = new ByteArrayInputStream(YAML.getBytes()); 100 IOUtils.copy(bais, outputStream); 101 } catch (final Exception e) { 102 throw new PragmatachException("Exception in toYAML", e); 103 } 104 } 105 }