// Path: hangout-filters/hangout-filters-urldecode/src/main/java/com/ctrip/ops/sysdev/filters/URLDecode.java
// @Log4j2
// public class URLDecode extends BaseFilter {
// 
// 
//     @SuppressWarnings("rawtypes")
//     public URLDecode(Map config) {
//         super(config);
//     }
// 
//     private ArrayList<Tuple2> fields;
//     private String enc;
// 
//     @SuppressWarnings("unchecked")
//     protected void prepare() {
//         this.fields = new ArrayList<>();
//         for (String field : (ArrayList<String>) config.get("fields")) {
//             TemplateRender templateRender = null;
//             try {
//                 templateRender = TemplateRender.getRender(field, false);
//             } catch (IOException e) {
//                 log.fatal("could NOT build template render from " + field);
//                 System.exit(1);
//             }
//             this.fields.add(new Tuple2(FieldSetter.getFieldSetter(field), templateRender));
//         }
// 
//         if (config.containsKey("enc")) {
//             this.enc = (String) config.get("enc");
//         } else {
//             this.enc = "UTF-8";
//         }
// 
//         if (this.config.containsKey("tag_on_failure")) {
//             this.tagOnFailure = (String) this.config.get("tag_on_failure");
//         } else {
//             this.tagOnFailure = "URLDecodefail";
//         }
//     }
// 
//     @Override
//     protected Map filter(final Map event) {
//         boolean success = true;
//         for (Tuple2 f2 : this.fields) {
//             TemplateRender templateRender = (TemplateRender) f2._2();
//             Object value = templateRender.render(event);
//             if (value != null && String.class.isAssignableFrom(value.getClass())) {
//                 try {
//                     ((FieldSetter) f2._1()).setField(event, URLDecoder.decode((String) value, this.enc));
//                 } catch (Exception e) {
//                     log.debug("URLDecode failed", e);
//                     success = false;
//                 }
//             }
//         }
// 
//         this.postProcess(event, success);
// 
//         return event;
//     }
// }


import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import com.ctrip.ops.sysdev.filters.URLDecode;
import org.apache.commons.collections4.map.HashedMap;
import org.testng.Assert;
import org.testng.annotations.Test;
import org.yaml.snakeyaml.Yaml;
package com.ctrip.ops.sysdev.test;



public class TestURLDecode {
    @Test
    @SuppressWarnings({"rawtypes", "unchecked"})
    public void testURLDecode() {
        String c = String.format("%s\n%s\n%s",
                "fields:",
                "    - query1",
                "    - '[extra][value2]'"
        );
        Yaml yaml = new Yaml();
        Map config = (Map) yaml.load(c);
        Assert.assertNotNull(config);

// Path: hangout-filters/hangout-filters-urldecode/src/main/java/com/ctrip/ops/sysdev/filters/URLDecode.java
// @Log4j2
// public class URLDecode extends BaseFilter {
// 
// 
//     @SuppressWarnings("rawtypes")
//     public URLDecode(Map config) {
//         super(config);
//     }
// 
//     private ArrayList<Tuple2> fields;
//     private String enc;
// 
//     @SuppressWarnings("unchecked")
//     protected void prepare() {
//         this.fields = new ArrayList<>();
//         for (String field : (ArrayList<String>) config.get("fields")) {
//             TemplateRender templateRender = null;
//             try {
//                 templateRender = TemplateRender.getRender(field, false);
//             } catch (IOException e) {
//                 log.fatal("could NOT build template render from " + field);
//                 System.exit(1);
//             }
//             this.fields.add(new Tuple2(FieldSetter.getFieldSetter(field), templateRender));
//         }
// 
//         if (config.containsKey("enc")) {
//             this.enc = (String) config.get("enc");
//         } else {
//             this.enc = "UTF-8";
//         }
// 
//         if (this.config.containsKey("tag_on_failure")) {
//             this.tagOnFailure = (String) this.config.get("tag_on_failure");
//         } else {
//             this.tagOnFailure = "URLDecodefail";
//         }
//     }
// 
//     @Override
//     protected Map filter(final Map event) {
//         boolean success = true;
//         for (Tuple2 f2 : this.fields) {
//             TemplateRender templateRender = (TemplateRender) f2._2();
//             Object value = templateRender.render(event);
//             if (value != null && String.class.isAssignableFrom(value.getClass())) {
//                 try {
//                     ((FieldSetter) f2._1()).setField(event, URLDecoder.decode((String) value, this.enc));
//                 } catch (Exception e) {
//                     log.debug("URLDecode failed", e);
//                     success = false;
//                 }
//             }
//         }
// 
//         this.postProcess(event, success);
// 
//         return event;
//     }
// }


// Path: hangout-filters/hangout-filters-urldecode/src/test/java/com/ctrip/ops/sysdev/test/TestURLDecode.java
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import com.ctrip.ops.sysdev.filters.URLDecode;
import org.apache.commons.collections4.map.HashedMap;
import org.testng.Assert;
import org.testng.annotations.Test;
import org.yaml.snakeyaml.Yaml;

package com.ctrip.ops.sysdev.test;



public class TestURLDecode {
    @Test
    @SuppressWarnings({"rawtypes", "unchecked"})
    public void testURLDecode() {
        String c = String.format("%s\n%s\n%s",
                "fields:",
                "    - query1",
                "    - '[extra][value2]'"
        );
        Yaml yaml = new Yaml();
        Map config = (Map) yaml.load(c);
        Assert.assertNotNull(config);

        URLDecode URLDecodefilter = new URLDecode(config);