import edu.mit.ai.psg.jexa.*;
import edu.mit.ai.psg.ui.outliner.*;
import java.util.*;

/** SimpleMapRenderer2: Displays key:value entries of {@link java.util.Map}
    as children, displayed in order returned by entrySet iterator.
    Differs from psg/ui/outliner/examples/SimpleMapRenderer in that it
    inherits text formatting from ObjectRenderer. <p>

    @see java.util.Map

    @author CarlManning, caroma@ai.mit.edu<br>
    Copyright (c) 1999 Massachusetts Institute of Technology
    **/

public class SimpleMapRenderer2 extends ObjectRenderer {
  // ---- constructor ----
  public SimpleMapRenderer2(OutlineMaker outlineMaker) { super(outlineMaker); }
  // --- override Object Outline ---
  /** Generate children for each key:value pair in Map **/
  public List makeChildOutlineNodes(OutlineNode outlineNode) {
    Map map = (Map) outlineNode.getObject();
    List childNodes = new Vector(); 
    childNodes.add(myOutlineMaker.makeOutlineNode("Map size",
						  new Integer(map.size())));
    for (Iterator entryIter = map.entrySet().iterator(); entryIter.hasNext();){
      Map.Entry entry = (Map.Entry) entryIter.next();
      childNodes.add(myOutlineMaker.makeOutlineNode(entry.getKey(),
						    entry.getValue()));
    }
    return childNodes;
  }
  /** Call initialize to install outlineRenderer in OutlineMaker
      for objects with interface java.util.Map **/
  public static void initialize (OutlineMaker outlineMaker) {
    outlineMaker.addRenderer(Map.class, new SimpleMapRenderer2(outlineMaker));
  }
  /** Example use **/
  public static void main(String[] ignore) {
    // initialize Outliner.outlineMaker and renderers
    Jexa.ensureInitialized();
    // replace MapRenderer of Jexa
    SimpleMapRenderer2.initialize(Outliner.outlineMaker); 
    Jexa.examine(System.getProperties());
  }
}
