Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  
  package org.easycluster.easycluster.serialization.kv.codec;
  
  import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 

Author(s):
archie
 
 public class DefaultKVCodec implements KVCodec {
 
 	private static final Logger								logger				= LoggerFactory.getLogger(DefaultKVCodec.class);
 
 
 
 	public Object decode(DecContext ctx) {
 		String string = ctx.getDecString();
 		Class<?> clazz = ctx.getDecClass();
 
 		Object target = null;
 
 		try {
 			target = clazz.newInstance();
 
 			Field[] fields = KVUtils.getKVFieldsOf(target.getClass());
 			if (fields == null) {
 				if (.isWarnEnabled()) {
 					.warn("No KV fields defined in class {}."target.getClass().getName());
 				}
 				return target;
 			}
 
 			Map<StringList<String>> from = .transform(string);
 
 			for (Field field : fields) {
 
 				if (null == param) {
 					// not KVAttribute
 					continue;
 				}
 
 				String key = "".equals(param.key()) ? field.getName() : param.key();
 				List<Stringvalues = from.get(key);
 
 				if (null != values && !values.isEmpty()) {
 
 					if (.isTraceEnabled()) {
 						.trace("found field[" + field + "]");
 					}
 
 					try {
 						Class<?> fieldType = field.getType();
 						Class<?> kvType = fieldType;
 						if (fieldType.isArray()) {
 							kvType = fieldType.getComponentType();
 						}
 
 						StringConverter converter = ctx.getConverterOf(kvType);
 						if (null != converter) {
 							Object v = null;
 							if (!fieldType.isArray()) {
 								v = converter.transform(values.get(0));
 							} else {
 								v = Array.newInstance(kvTypevalues.size());
 								int idx = 0;
 								for (String e : values) {
 									Array.set(vidx++, converter.transform(e));
 								}
 							}
 							// if (logger.isDebugEnabled()) {
 							// logger.debug(",and set value[" + v + "]");
 							// }
 
 							field.setAccessible(true);
							field.set(targetv);
						}
catch (Exception e) {
						.error("convert"e);
					}
				}
			}
catch (InstantiationException e) {
			.error("KVCodec:"e);
catch (IllegalAccessException e) {
			.error("KVCodec:"e);
		}
		return target;
	}
	public String encode(EncContext ctx) {
		Object bean = ctx.getEncObject();
		if (null == bean) {
			return "";
		}
		Field[] fields = KVUtils.getKVFieldsOf(bean.getClass());
		Map<StringList<String>> from = new HashMap<StringList<String>>();
		for (Field field : fields) {
			if (null == param) {
				// not KVAttribute
				continue;
			}
			Class<?> fieldType = field.getType();
			field.setAccessible(true);
			Object fieldValue = null;
			try {
				fieldValue = field.get(bean);
				List<Stringvalue = null;
				if (!fieldType.isArray()) {
					value = new ArrayList<String>(1);
					value.add(String.valueOf(fieldValue));
else {
					value = new ArrayList<String>();
					for (int idx = 0; idx < Array.getLength(fieldValue); idx++) {
						Object e = Array.get(fieldValueidx);
						value.add(String.valueOf(e));
					}
				}
				String key = "".equals(param.key()) ? field.getName() : param.key();
				from.put(keyvalue);
catch (IllegalArgumentException e) {
				.error("KVCodec:"e);
catch (IllegalAccessException e) {
				.error("KVCodec:"e);
			}
		}
		return .transform(from);
	}
	}
	public void setUrlDecoded2KV(Transformer<StringMap<StringList<String>>> urlDecoded2KV) {
		this. = urlDecoded2KV;
	}
	}
	public void setKvEncoded2Url(Transformer<Map<StringList<String>>, StringkvEncoded2Url) {
		this. = kvEncoded2Url;
	}
		return this.;
	}
	public void setDecContextFactory(DecContextFactory decContextFactory) {
		this. = decContextFactory;
	}
	}
	public void setEncContextFactory(EncContextFactory encContextFactory) {
		this. = encContextFactory;
	}
New to GrepCode? Check out our FAQ X