package com.cmos.msgframe.admin.common;

import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.Predicate;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.cmos.msgframe.admin.service.Impl.TopicServiceImpl;

public class ListUtils {
	static final Logger logger = LoggerFactory
			.getLogger(TopicServiceImpl.class);

	@SuppressWarnings("unchecked")
	public static List<Map<String, String>> listFilerMap(List<Map<String, String>> list,
			final String condition, final boolean isKey) {
		if (null == list || list.size() == 0) {
			return list;
		}
		list = (List<Map<String, String>>) CollectionUtils.select(list, new Predicate() {
			@Override
			public boolean evaluate(Object arg0) {
				Iterator<Entry<String, String>> entries = ((Map<String, String>) arg0)
						.entrySet().iterator();
				while (entries.hasNext()) {
					Map.Entry entry = (Map.Entry) entries.next();
					if (isKey) {
						if(StringUtils.contains(entry.getKey().toString(),
								condition)){
							return true;
						}
					} else {
						if(StringUtils.contains(entry.getValue().toString(), condition)){
							return true;
						}
					}

				}
				return false;
			}

		});
		return list;
	}

	public static List<?> listFilerString(List<String> list,
			final String condition) {
		if (null == list || list.size() == 0) {
			return list;
		}
		list = (List) CollectionUtils.select(list, new Predicate() {

			@Override
			public boolean evaluate(Object arg0) {
				return StringUtils.contains((String) arg0, condition);
			}

		});
		return list;
	}
	public static Map<String, Object> mapFilterString(Map<String, String> map,String condition ,boolean isKey) {
		Map<String, Object> resultMap = new HashMap<String, Object>();
		Iterator<Entry<String, String>> entries = ((Map<String, String>) map)
				.entrySet().iterator();
		while (entries.hasNext()) {
			Map.Entry<String,String> entry = (Map.Entry<String,String>) entries.next();
			if(isKey){
				if(StringUtils.contains(entry.getKey().toString(), condition)){
					resultMap.put(entry.getKey(), entry.getValue());
				}
			}else{
				 if(StringUtils.contains(entry.getValue().toString(), condition)){
					 resultMap.put(entry.getKey(), entry.getValue());
				 }
			}
		}
		return resultMap;
	}
}
