function addLink($nodeName1, $nodeName2, $linkName = "", $template = "DEFAULT")
 {
     if (!$this->isLoaded()) {
         throw new WMException("Map must be loaded before editing API called.");
     }
     $success = false;
     $log = "";
     $newLinkName = "";
     // XXX - do we care if node1==node2?
     if ($nodeName1 != $nodeName2 && $this->map->nodeExists($nodeName1) && $this->map->nodeExists($nodeName2)) {
         $newLinkName = $linkName != "" ? $linkName : "{$nodeName1}-{$nodeName2}";
         // make sure the link name is unique. We can have multiple links between
         // the same nodes, these days
         while (array_key_exists($newLinkName, $this->map->links)) {
             $newLinkName .= "a";
         }
         $newLink = new WeatherMapLink($newLinkName, $template, $this->map);
         $newLink->defined_in = $this->map->configfile;
         $newLink->setEndNodes($this->map->getNode($nodeName1), $this->map->getNode($nodeName2));
         $this->map->addLink($newLink);
         $success = true;
         $log = "created link {$newLinkName} between {$nodeName1} and {$nodeName2}";
     }
     return array($newLinkName, $success, $log);
 }