public void fillAsWeightMerge() {

    ConnectivityMatrixList<ConnectivityMatrix> cms =
        new ConnectivityMatrixList<ConnectivityMatrix>();
    Iterator<LWMap> i = getMapList().iterator();
    Iterator<Boolean> ci = null;
    if (getActiveFileList() != null) ci = getActiveFileList().iterator();
    while (i.hasNext()) {
      LWMap m = i.next();
      if (DEBUG_LOCAL) {
        System.out.println("LWMergeMap, computing matrix array next map is: " + m.getLabel());
      }
      Boolean b = Boolean.TRUE;
      if (ci != null && ci.hasNext()) {
        b = ci.next();
      }
      if (b.booleanValue()) // || (m==getBaseMap()))
      {
        if (DEBUG_LOCAL) {
          System.out.println("LWMergeMap, computing matrix array actually adding: " + m.getLabel());
        }
        cms.add(new ConnectivityMatrix(m));
      } else {
        if (DEBUG_LOCAL) {
          System.out.println(
              "LWMergeMap, computing matrix array not adding due to check box or base map (already added):"
                  + " (label, m == getBaseMap()) ("
                  + m.getLabel()
                  + ","
                  + (m == getBaseMap())
                  + ")");
        }
      }
    }

    ArrayList<Style> nodeStyles = new ArrayList<Style>();
    ArrayList<Style> linkStyles = new ArrayList<Style>();

    for (int si = 0; si < 5; si++) {
      nodeStyles.add(StyleMap.getStyle("node.w" + (si + 1)));
    }

    for (int lsi = 0; lsi < 5; lsi++) {
      linkStyles.add(StyleMap.getStyle("link.w" + (lsi + 1)));
    }

    WeightAggregate weightAggregate = new WeightAggregate(cms);

    if (!excludeNodesFromBaseMap && baseMapIsActive()) {
      addMergeNodesForMap(getBaseMap(), weightAggregate, nodeStyles);
    }

    if (!getFilterOnBaseMap()) {
      Iterator<LWMap> maps = getMapList().iterator();
      ci = null;
      if (getActiveFileList() != null) ci = getActiveFileList().iterator();
      while (maps.hasNext()) {
        LWMap m = maps.next();
        if (DEBUG_LOCAL) {
          System.out.println("LWMergeMap: next map - " + m.getLabel());
        }
        Boolean b = Boolean.TRUE;
        if (ci != null && ci.hasNext()) {
          b = ci.next();
        }
        if (m != baseMap && b.booleanValue()) {
          if (DEBUG_LOCAL) {
            System.out.println("LWMergeMap: actually adding - " + m.getLabel());
          }
          addMergeNodesForMap(m, weightAggregate, nodeStyles);
        } else {
          if (DEBUG_LOCAL) {
            System.out.println("LWMergeMap: not adding - " + m.getLabel());
          }
        }
      }
    }

    // todo: use applyCSS(style) -- need to plug in formatting panel
    Iterator children = getAllDescendents(LWComponent.ChildKind.PROPER).iterator();

    while (children.hasNext()) {
      LWComponent comp = (LWComponent) children.next();
      if (DEBUG_LOCAL) {
        System.out.println("LWMergeMap, computing colors, next component - " + comp.getLabel());
      }
      if (comp instanceof LWNode) {
        LWNode node = (LWNode) comp;
        double score =
            100
                * weightAggregate.getNodeCount(Util.getMergeProperty(node))
                / weightAggregate.getCount();
        if (score > 100) {
          score = 100;
        }
        if (score < 0) {
          score = 0;
        }
        Style currStyle = nodeStyles.get(getNodeInterval(score) - 1);
        // todo: applyCss here instead.
        node.setFillColor(Style.hexToColor(currStyle.getAttribute("background")));

        java.awt.Color strokeColor = null;
        if (currStyle.getAttribute("font-color") != null) {
          strokeColor = Style.hexToColor(currStyle.getAttribute("font-color"));
        }
        if (strokeColor != null) {
          node.setTextColor(strokeColor);
        }
      }
    }

    // compute and create links in Merge Map
    Iterator<LWComponent> children1 = getAllDescendents(LWComponent.ChildKind.PROPER).iterator();
    while (children1.hasNext()) {
      LWComponent comp1 = children1.next();
      // if(comp1 instanceof LWImage)
      //    continue;
      // LWNode node1 = (LWNode)comp1;
      LWComponent node1 = comp1;
      Iterator<LWComponent> children2 =
          getAllDescendents(LWComponent.ChildKind.PROPER).iterator(); // getNodeIterator();
      LWComponent node2 = null;
      while (children2.hasNext()) {
        /*LWComponent*/ node2 = /*(LWNode)*/ children2.next();
        if (!((node2 instanceof LWNode) || (node2 instanceof LWImage))) {
          continue;
        }
        if (node2 != node1) {
          int c =
              weightAggregate.getConnection(
                  Util.getMergeProperty(node1), Util.getMergeProperty(node2));
          int c2 =
              weightAggregate.getConnection(
                  Util.getMergeProperty(node2), Util.getMergeProperty(node1));
          if (c > 0) {
            double score = 100 * c / weightAggregate.getCount();

            // are either of these ever happenning? If so, why?
            if (score > 100) {
              score = 100;
            }
            if (score < 0) {
              score = 0;
            }

            Style currLinkStyle = linkStyles.get(getLinkInterval(score) - 1);
            LWLink link = new LWLink(node1, node2);
            if (c2 > 0 && !getFilterOnBaseMap()) {
              link.setArrowState(LWLink.ARROW_BOTH);
              weightAggregate.setConnection(
                  Util.getMergeProperty(node2), Util.getMergeProperty(node1), 0);
            }
            // todo: applyCSS here
            link.setStrokeColor(Style.hexToColor(currLinkStyle.getAttribute("background")));
            addLink(link);

            cms.addLinkSourceMapMetadata(
                Util.getMergeProperty(node1), Util.getMergeProperty(node2), link);

            // edu.tufts.vue.metadata.VueMetadataElement vme = new
            // edu.tufts.vue.metadata.VueMetadataElement();
            // vme.setType(edu.tufts.vue.metadata.VueMetadataElement.OTHER);
            // vme.setObject("source: " + comp.getMap().getLabel() + "," + sourceLabel);
            // link.getMetadataList().getMetadata().add(vme);
          }
        }
      }
    }
  }
  public void fillAsVoteMerge() {

    HashMap<String, LWNode> nodes = new HashMap<String, LWNode>();

    ConnectivityMatrixList<ConnectivityMatrix> cms =
        new ConnectivityMatrixList<ConnectivityMatrix>();

    Iterator<LWMap> i = getMapList().iterator();
    Iterator<Boolean> ci = null;
    if (getActiveFileList() != null) ci = getActiveFileList().iterator();
    while (i.hasNext()) {
      Boolean b = Boolean.TRUE;

      LWMap next = i.next();

      if (ci != null && ci.hasNext()) {
        b = ci.next();
      }
      if (b.booleanValue() /*&& (next != getBaseMap())*/) cms.add(new ConnectivityMatrix(next));
    }
    VoteAggregate voteAggregate = new VoteAggregate(cms);

    voteAggregate.setNodeThreshold((double) getNodeThresholdSliderValue() / 100.0);
    voteAggregate.setLinkThreshold((double) getLinkThresholdSliderValue() / 100.0);

    // compute and create nodes in Merge Map

    if (!excludeNodesFromBaseMap && baseMapIsActive()) {
      addMergeNodesFromSourceMap(baseMap, voteAggregate, nodes);
    }

    if (!getFilterOnBaseMap()) {
      Iterator<LWMap> maps = getMapList().iterator();
      ci = null;
      if (getActiveFileList() != null) ci = getActiveFileList().iterator();
      while (maps.hasNext()) {
        LWMap m = maps.next();
        Boolean b = Boolean.TRUE;
        if (ci != null && ci.hasNext()) {
          b = ci.next();
        }
        if (m != baseMap && b.booleanValue()) {
          addMergeNodesFromSourceMap(m, voteAggregate, nodes);
        }
      }
    }

    // compute and create links in Merge Map
    Iterator<LWComponent> children1 =
        getAllDescendents(LWComponent.ChildKind.PROPER).iterator(); // getNodeIterator();
    while (children1.hasNext()) {
      /*LWNode*/ LWComponent node1 = /*(LWNode)*/ children1.next();
      Iterator<LWComponent> children2 =
          getAllDescendents(LWComponent.ChildKind.PROPER).iterator(); // getNodeIterator();
      while (children2.hasNext()) {

        /*LWNode*/ LWComponent node2 = /*(LWNode)*/ children2.next();

        if (!((node1 instanceof LWNode || node1 instanceof LWImage)
            && (node2 instanceof LWNode || node2 instanceof LWImage))) {
          continue;
        }

        if (node2 != node1) {
          boolean addLink =
              voteAggregate.isLinkVoteAboveThreshold(
                  Util.getMergeProperty(node1), Util.getMergeProperty(node2));
          if (addLink) {
            LWLink link = new LWLink(node1, node2);
            addLink(link);
            cms.addLinkSourceMapMetadata(
                Util.getMergeProperty(node1), Util.getMergeProperty(node2), link);
          }
        }
      }
    }
  }