Package org.springside.examples.showcase.xml

Source Code of org.springside.examples.showcase.xml.HouseMapAdapter$HouseMap$HouseEntry

package org.springside.examples.showcase.xml;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.XmlValue;
import javax.xml.bind.annotation.adapters.XmlAdapter;

import org.springside.examples.showcase.xml.HouseMapAdapter.HouseMap.HouseEntry;

import com.google.common.collect.Maps;

/**
* 为使Map<String,String> houses转化为有业务意义的xml的巨大努力,
* 分别定义了一个Adapter--HouseMapAdapter, 一个List<HouseEntry> Wrapper类--HouseMap, 一个MapEntry表达类--HouseEntry.
* 最后的劳动成果是:
* <houses>
*     <house key="bj">house1</item>
*     <hosue key="gz">house2</item>
* </houses>
*
* @author calvin
*/
public class HouseMapAdapter extends XmlAdapter<HouseMapAdapter.HouseMap, Map<String, String>> {

  @Override
  public HouseMap marshal(Map<String, String> map) throws Exception {
    HouseMap houseMap = new HouseMap();
    for (Map.Entry<String, String> e : map.entrySet()) {
      houseMap.entries.add(new HouseEntry(e));
    }
    return houseMap;
  }

  @Override
  public Map<String, String> unmarshal(HouseMap houseMap) throws Exception {
    Map<String, String> map = Maps.newLinkedHashMap();
    for (HouseEntry e : houseMap.entries) {
      map.put(e.key, e.value);
    }
    return map;
  }

  /**
   * List<HouseEntry>的Adapter类.
   * @author calvin
   */
  @XmlType(name = "houses")
  public static class HouseMap {
    @XmlElement(name = "house")
    List<HouseEntry> entries = new ArrayList<HouseEntry>();

    /**
     * HouseMap中的Entry类.
     */
    static class HouseEntry {
      @XmlAttribute
      String key;

      @XmlValue
      String value;

      public HouseEntry() {
      }

      public HouseEntry(Map.Entry<String, String> e) {
        key = e.getKey();
        value = e.getValue();
      }
    }
  }
}
TOP

Related Classes of org.springside.examples.showcase.xml.HouseMapAdapter$HouseMap$HouseEntry

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.