Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package net.sf.juffrou.xml.serializer;
  
  import java.util.HashMap;
  import java.util.Map;
  
 
 public class HashMapSerializer implements Serializer {
 	
 	
 	public HashMapSerializer(JuffrouBeanMetadata xmlBeanMetadata) {
 		this. = xmlBeanMetadata;
 	}
 
 	public void serialize(JuffrouWriter writerBeanWrapper valueOwnerString valuePropertyName) {
 		boolean isSimpleKey = false;
 		boolean isSimpleValue = false;
 		Map<?,?> map = (Map<?,?>) valueOwner.getValue(valuePropertyName);
 		if(map.isEmpty())
 			return;
 		// analyze the entry types
 		Entry<?, ?> firstEntry = map.entrySet().iterator().next();
 		Serializer keySerializer = .getSerializerForClass(firstEntry.getKey().getClass());
 		BeanWrapper keyWrapper;
 		BeanClassBinding keyClassBinding = null;
 		if(keySerializer != null) {
 			isSimpleKey = true;
 			keyWrapper = new BeanWrapper();
 		}
 		else {
 
 			keyWrapper = new BeanWrapper(keyClassBinding);
 		}
 		Serializer valueSerializer = .getSerializerForClass(firstEntry.getValue().getClass());
 		BeanWrapper valueWrapper;
 		BeanClassBinding valueClassBinding = null;
 		if(valueSerializer != null) {
 			isSimpleValue = true;
 			valueWrapper = new BeanWrapper();
 		}
 		else {
 			valueClassBinding = .getBeanClassBindingFromClass(firstEntry.getValue().getClass());
 			valueWrapper = new BeanWrapper(valueClassBinding);
 		}
 		// write everything
 		for(Entry<?,?> entry : map.entrySet()) {
 			writer.startNode("entry");
 			// write the key
 			if(isSimpleKey) {
 				keyWrapper.setValue("value"entry.getKey());
 				writer.startNode(firstEntry.getKey().getClass().getSimpleName().toLowerCase());
 				keySerializer.serialize(writerkeyWrapper"value");
 				writer.endNode();
 			}
 			else {
 				keyWrapper.setBean(entry.getKey());
 				writer.startNode(keyClassBinding.getXmlElementName());
 				writer.endNode();
 			}
 			// write the value
 			if(isSimpleValue) {
 				valueWrapper.setValue("value"entry.getValue());
 				writer.startNode(firstEntry.getValue().getClass().getSimpleName().toLowerCase());
 				valueSerializer.serialize(writervalueWrapper"value");
 				writer.endNode();
 			}
 			else {
 				valueWrapper.setBean(entry.getValue());
 				writer.startNode(valueClassBinding.getXmlElementName());
 				writer.endNode();
 			}
 			writer.endNode();
 		}
 	}
 	
 
 	@SuppressWarnings({ "rawtypes""unchecked" })
 	public void deserialize(JuffrouReader readerBeanWrapper valueOwnerString valuePropertyName) {
 		Map map = new HashMap();
 		boolean isSimpleKey = false;
 		boolean isSimpleValue = false;
 		String[] mapXmlElementNames = getMapXmlElementNames(reader);
 		
		// analyze the key and value types
		Type[] collectionElementTypes = valueOwner.getTypeArguments(valuePropertyName);
		if(collectionElementTypes == null || collectionElementTypes.length < 0)
			throw new NonParameterizedGenericType("Cannot deserialize Map because its element types are undetermined.");
		Class keyType = (ClasscollectionElementTypes[0];
		Class valueType = (ClasscollectionElementTypes[1];
		BeanWrapper keyWrapper = null;
		BeanClassBinding keyClassBinding = null;
		if(keySerializer != null) {
			isSimpleKey = true;
		}
		else {
			keyClassBinding = .getBeanClassBindingFromXmlElement(mapXmlElementNames[0]);
		}
		Serializer valueSerializer = .getSerializerForClass(valueType);
		BeanWrapper valueWrapper = null;
		BeanClassBinding valueClassBinding = null;
		if(valueSerializer != null) {
			isSimpleValue = true;
			valueWrapper = new BeanWrapper();
		}
		else {
			valueClassBinding = .getBeanClassBindingFromXmlElement(mapXmlElementNames[1]);
		}
		String nodeName = reader.enterNode(); // entry
		while(nodeName != null) {
			reader.enterNode();	// key
			Object key;
			if(isSimpleKey) {
				keySerializer.deserialize(readerkeyWrapper"value");
				key = keyWrapper.getValue("value");
			}
			else {
				keyWrapper = new BeanWrapper(keyClassBinding);
				key = keyWrapper.getBean();
			}
			reader.next();	// value
			Object value;
			if(isSimpleValue) {
				valueSerializer.deserialize(readervalueWrapper"value");
				value = valueWrapper.getValue("value");
			}
			else {
				valueWrapper = new BeanWrapper(valueClassBinding);
				value = valueWrapper.getBean();
			}
			map.put(keyvalue);
			reader.exitNode();	// entry
			nodeName = reader.next();	// next entry
		}
		reader.exitNode();
		valueOwner.setValue(valuePropertyNamemap);
	}
		String[] xmlElementNames = new String[2];
		reader.enterNode(); // entry
		xmlElementNames[0] = reader.enterNode(); // key
		xmlElementNames[1] = reader.next();	// value
		reader.exitNode();	// entry
		reader.exitNode();	// top
		return xmlElementNames;
	}
New to GrepCode? Check out our FAQ X