/**
   * Add the given catalog to the catalog list if it is not already there. If a separate catalog
   * with the same name is in the list, the user is asked if it should be removed.
   */
  public void addCatalog(int index, Catalog cat) {
    // check for duplicates
    int i = _catalogs.indexOf(cat);
    if (i != -1) {
      return;
    }

    // check if it is a catalog with the same name (maybe from a different config file)
    String name = cat.getName();
    Catalog oldCat = getCatalog(name);
    int size = _catalogs.size();
    if (oldCat != null) {
      int ans = DialogUtil.confirm(name + " already exists. Do you want to replace it?");
      if (ans != JOptionPane.YES_OPTION) return;
      removeCatalog(oldCat);
      size--;
    }

    if (index < 0 || index >= size) _catalogs.add(cat);
    else _catalogs.add(index, cat);

    cat.setParent(this);
    CatalogFactory.registerCatalog(cat, isLocal());
    _fireTreeNodesInserted(_getTreeModelEvent(cat));
  }
  /** Remove the given catalog from the catalog list. */
  public void removeCatalog(Catalog cat) {
    // event needs state before removing from tree
    TreeModelEvent tme = _getTreeModelEvent(cat);

    _catalogs.remove(cat);
    _fireTreeNodesRemoved(tme);
    cat.setParent(null);
    CatalogFactory.unregisterCatalog(cat);
  }
 /** Set the list of catalogs in this catalog directory. */
 public void setCatalogs(List catalogs) {
   _catalogs = catalogs;
   int n = _catalogs.size();
   for (int i = 0; i < n; i++) {
     Catalog cat = (Catalog) _catalogs.get(i);
     cat.setParent(this);
     CatalogFactory.registerCatalog(cat, isLocal());
   }
   _fireTreeStructureChanged(_getTreeModelEvent(this));
 }
 /**
  * Return a list of name servers (Catalogs with serv_type equal to "namesvr") to use to resolve
  * astronomical object names.
  */
 public List getNameServers() {
   return CatalogFactory.getCatalogsByType(Catalog.NAME_SERVER);
 }