// Path: hangout-filters/hangout-filters-convert/src/main/java/com/ctrip/ops/sysdev/filters/Convert.java
// @Log4j2
// public class Convert extends BaseFilter {
//     private Map<FieldSetter, Tuple4> f;
// 
//     public Convert(Map config) {
//         super(config);
//     }
// 
//     protected void prepare() {
// 
//         if (config.containsKey("tag_on_failure")) {
//             this.tagOnFailure = (String) config.get("tag_on_failure");
//         } else {
//             this.tagOnFailure = "convertfail";
//         }
// 
//         f = new HashMap();
//         Map<String, Map> fields = (Map<String, Map>) config.get("fields");
//         Iterator<Entry<String, Map>> it = fields.entrySet().iterator();
//         while (it.hasNext()) {
//             Map.Entry<String, Map> entry = it.next();
//             String field = entry.getKey();
//             Map value = entry.getValue();
//             ConverterI converter = null;
//             Boolean remove_if_fail = false;
//             Object setto_if_fail = null;
//             if (((String) value.get("to")).equalsIgnoreCase("long")) {
//                 converter = new LongConverter();
//             } else if (((String) value.get("to")).equalsIgnoreCase("integer")) {
//                 converter = new IntegerConverter();
//             } else if (((String) value.get("to")).equalsIgnoreCase("double")) {
//                 converter = new DoubleConverter(value);
//             } else if (((String) value.get("to")).equalsIgnoreCase("float")) {
//                 converter = new FloatConverter(value);
//             } else if (((String) value.get("to")).equalsIgnoreCase("string")) {
//                 converter = new StringConverter();
//             } else if (((String) value.get("to")).equalsIgnoreCase("boolean")) {
//                 converter = new BooleanConverter();
//             }
// 
//             if (value.containsKey("remove_if_fail")) {
//                 remove_if_fail = (Boolean) value.get("remove_if_fail");
//             }
// 
//             if (value.containsKey("setto_if_fail")) {
//                 setto_if_fail = value.get("setto_if_fail");
//             }
// 
//             try {
//                 f.put(FieldSetter.getFieldSetter(field), new Tuple4(converter, TemplateRender.getRender(field, false), remove_if_fail, setto_if_fail));
//             } catch (Exception e) {
//                 log.error("could not create filed render for '" + field + "'");
//                 System.exit(1);
//             }
//         }
//     }
// 
//     @SuppressWarnings({"unchecked", "rawtypes"})
//     @Override
//     protected Map filter(final Map event) {
//         Iterator<Entry<FieldSetter, Tuple4>> it = f.entrySet().iterator();
//         boolean success = true;
//         while (it.hasNext()) {
//             boolean flag = true;
//             Map.Entry<FieldSetter, Tuple4> entry = it.next();
//             FieldSetter fieldSetter = entry.getKey();
//             Tuple4 t4 = entry.getValue();
//             Object d = null;
//             try {
//                 TemplateRender tr = (TemplateRender) t4._2();
//                 d = ((ConverterI) t4._1()).convert(tr.render(event));
//             } catch (Exception e) {
//                 flag = false;
//                 success = false;
//             }
// 
//             if (!flag || d == null) {
//                 if ((Boolean) t4._3()) {
//                     fieldSetter.setField(event, null);
//                 } else {
//                     if (t4._4() != null) {
//                         fieldSetter.setField(event, t4._4());
//                     }
//                 }
//             } else {
//                 fieldSetter.setField(event, d);
//             }
//         }
// 
//         this.postProcess(event, success);
// 
//         return event;
//     }
// }


import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import com.ctrip.ops.sysdev.filters.Convert;
import org.testng.Assert;
import org.testng.annotations.Test;
import org.yaml.snakeyaml.Yaml;
package com.ctrip.ops.sysdev.test;



public class TestConvertFilter {
    @Test
    @SuppressWarnings({"rawtypes", "unchecked", "serial"})
    public void testConvertFilter() throws UnsupportedEncodingException {
        String c = String.format("%s\n%s\n%s\n%s\n%s\n%s\n%s",
                "        fields:",
                "            cs_bytes: ",
                "                to: integer",
                "                remove_if_fail: true",
                "            time_taken: ",
                "                to: float",
                "                setto_if_fail: 0.0");
        Yaml yaml = new Yaml();
        Map config = (Map) yaml.load(c);
        Assert.assertNotNull(config);

// Path: hangout-filters/hangout-filters-convert/src/main/java/com/ctrip/ops/sysdev/filters/Convert.java
// @Log4j2
// public class Convert extends BaseFilter {
//     private Map<FieldSetter, Tuple4> f;
// 
//     public Convert(Map config) {
//         super(config);
//     }
// 
//     protected void prepare() {
// 
//         if (config.containsKey("tag_on_failure")) {
//             this.tagOnFailure = (String) config.get("tag_on_failure");
//         } else {
//             this.tagOnFailure = "convertfail";
//         }
// 
//         f = new HashMap();
//         Map<String, Map> fields = (Map<String, Map>) config.get("fields");
//         Iterator<Entry<String, Map>> it = fields.entrySet().iterator();
//         while (it.hasNext()) {
//             Map.Entry<String, Map> entry = it.next();
//             String field = entry.getKey();
//             Map value = entry.getValue();
//             ConverterI converter = null;
//             Boolean remove_if_fail = false;
//             Object setto_if_fail = null;
//             if (((String) value.get("to")).equalsIgnoreCase("long")) {
//                 converter = new LongConverter();
//             } else if (((String) value.get("to")).equalsIgnoreCase("integer")) {
//                 converter = new IntegerConverter();
//             } else if (((String) value.get("to")).equalsIgnoreCase("double")) {
//                 converter = new DoubleConverter(value);
//             } else if (((String) value.get("to")).equalsIgnoreCase("float")) {
//                 converter = new FloatConverter(value);
//             } else if (((String) value.get("to")).equalsIgnoreCase("string")) {
//                 converter = new StringConverter();
//             } else if (((String) value.get("to")).equalsIgnoreCase("boolean")) {
//                 converter = new BooleanConverter();
//             }
// 
//             if (value.containsKey("remove_if_fail")) {
//                 remove_if_fail = (Boolean) value.get("remove_if_fail");
//             }
// 
//             if (value.containsKey("setto_if_fail")) {
//                 setto_if_fail = value.get("setto_if_fail");
//             }
// 
//             try {
//                 f.put(FieldSetter.getFieldSetter(field), new Tuple4(converter, TemplateRender.getRender(field, false), remove_if_fail, setto_if_fail));
//             } catch (Exception e) {
//                 log.error("could not create filed render for '" + field + "'");
//                 System.exit(1);
//             }
//         }
//     }
// 
//     @SuppressWarnings({"unchecked", "rawtypes"})
//     @Override
//     protected Map filter(final Map event) {
//         Iterator<Entry<FieldSetter, Tuple4>> it = f.entrySet().iterator();
//         boolean success = true;
//         while (it.hasNext()) {
//             boolean flag = true;
//             Map.Entry<FieldSetter, Tuple4> entry = it.next();
//             FieldSetter fieldSetter = entry.getKey();
//             Tuple4 t4 = entry.getValue();
//             Object d = null;
//             try {
//                 TemplateRender tr = (TemplateRender) t4._2();
//                 d = ((ConverterI) t4._1()).convert(tr.render(event));
//             } catch (Exception e) {
//                 flag = false;
//                 success = false;
//             }
// 
//             if (!flag || d == null) {
//                 if ((Boolean) t4._3()) {
//                     fieldSetter.setField(event, null);
//                 } else {
//                     if (t4._4() != null) {
//                         fieldSetter.setField(event, t4._4());
//                     }
//                 }
//             } else {
//                 fieldSetter.setField(event, d);
//             }
//         }
// 
//         this.postProcess(event, success);
// 
//         return event;
//     }
// }


// Path: hangout-filters/hangout-filters-convert/src/test/java/com/ctrip/ops/sysdev/test/TestConvertFilter.java
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import com.ctrip.ops.sysdev.filters.Convert;
import org.testng.Assert;
import org.testng.annotations.Test;
import org.yaml.snakeyaml.Yaml;

package com.ctrip.ops.sysdev.test;



public class TestConvertFilter {
    @Test
    @SuppressWarnings({"rawtypes", "unchecked", "serial"})
    public void testConvertFilter() throws UnsupportedEncodingException {
        String c = String.format("%s\n%s\n%s\n%s\n%s\n%s\n%s",
                "        fields:",
                "            cs_bytes: ",
                "                to: integer",
                "                remove_if_fail: true",
                "            time_taken: ",
                "                to: float",
                "                setto_if_fail: 0.0");
        Yaml yaml = new Yaml();
        Map config = (Map) yaml.load(c);
        Assert.assertNotNull(config);

        Convert convertFilter = new Convert(config);