/** Acción realizada al pulsar el botón desasociar de la aplicación */
  private void jButtonDesasociarActionPerformed() {
    try {
      LayerOperations operaciones = new LayerOperations();

      // desasocia el dominio de la columna
      int iDeleted = operaciones.desasociarColumna(auxColumn);

      if (iDeleted > 0) {
        JOptionPane optionPane =
            new JOptionPane(
                I18N.get("GestorCapas", "general.mensaje.fin.operacion"),
                JOptionPane.INFORMATION_MESSAGE);
        JDialog dialog = optionPane.createDialog(this, "");
        dialog.show();
        Identificadores.put("DomainsModificados", true);
        jButtonAsociar.setEnabled(true);
        jButtonDesasociar.setEnabled(false);
      } else {
        JOptionPane optionPane =
            new JOptionPane(
                I18N.get("GestorCapas", "general.mensaje.error.operacion"),
                JOptionPane.ERROR_MESSAGE);
        JDialog dialog = optionPane.createDialog(this, "");
        dialog.show();
      }
      ;

      repaint();

    } catch (DataException de) {
      de.printStackTrace();
    }
  }
  /** Acción realizada al pulsar el botón de asociar de la aplicación */
  private void jButtonAsociarActionPerformed() {
    try {
      // Convierte com.geopista.protocol.administrador.dominios.Domain
      // en com.geopista.features.Domain

      int idDomain = Integer.parseInt(auxDomain.getIdDomain());
      String nombreDominio = auxDomain.getName();
      LayerOperations operaciones = new LayerOperations();
      Domain dominio = operaciones.obtenerDominioTipo(idDomain, nombreDominio);

      // asocia el dominio a la columna
      int iRes =
          operaciones.actualizarDominioColumna(
              auxColumn, dominio, Integer.parseInt(txtLevel.getText()));
      // auxColumn.setDomain(dominio);

      if (iRes > 0) {
        JOptionPane optionPane =
            new JOptionPane(
                I18N.get("GestorCapas", "general.mensaje.fin.operacion"),
                JOptionPane.INFORMATION_MESSAGE);
        JDialog dialog = optionPane.createDialog(this, "");
        dialog.show();

        Identificadores.put("DomainsModificados", true);
        jButtonDesasociar.setEnabled(true);
      } else {
        JOptionPane optionPane =
            new JOptionPane(
                I18N.get("GestorCapas", "general.mensaje.error.operacion"),
                JOptionPane.ERROR_MESSAGE);
        JDialog dialog = optionPane.createDialog(this, "");
        dialog.show();
      }

      repaint();

    } catch (DataException de) {
      de.printStackTrace();
    }
  }
  /**
   * Escucha los posibles cambios producidos en la selección de elementos del árbol de tables y
   * columns de GeoPISTA
   */
  public void valueChanged(TreeSelectionEvent e) {

    if (e == null || !(e.getSource() instanceof JTree)) return;
    JTree arbol = (JTree) e.getSource();
    DefaultMutableTreeNode node = (DefaultMutableTreeNode) arbol.getLastSelectedPathComponent();
    if (node == null) return;
    Object nodeInfo = node.getUserObject();

    if (arbol.getName().indexOf("Particular") >= 0) {
      levelActivado = false;
      idMunicipio =
          Integer.parseInt(AppContext.getApplicationContext().getString("geopista.DefaultCityId"));

      if (nodeInfo instanceof com.geopista.protocol.administrador.dominios.Domain) {
        nodoParticular = true;
      } else {
        nodoParticular = false;
      }
      nodoGeneral = false;
    } else if (arbol.getName().indexOf("General") >= 0) {
      levelActivado = false;
      idMunicipio = 0;

      if (nodeInfo instanceof com.geopista.protocol.administrador.dominios.Domain) {
        nodoGeneral = true;
      } else {
        nodoGeneral = false;
      }
      nodoParticular = false;
    } else if (arbol.getName().indexOf("Tablas") >= 0) {
      // comprobar q es una columna lo seleccionado
      if (nodeInfo instanceof Column) {
        nodoTablas = true;
      } else {
        nodoTablas = false;
      }
    }

    if (nodeInfo instanceof Column) {
      jButtonDesasociar.setEnabled(true);

      auxColumn = (Column) nodeInfo;

      if (auxColumn.getDomain() == null) jButtonDesasociar.setEnabled(false);
      else jButtonDesasociar.setEnabled(true);

      if (nodoParticular || nodoGeneral) {
        // System.out.println ("tengo dominio y detecto columna");
        jButtonAsociar.setEnabled(true);
        return;
      }
    }

    if (nodeInfo instanceof Table) {
      jButtonAsociar.setEnabled(false);
      jButtonDesasociar.setEnabled(false);
    }

    if (nodeInfo instanceof com.geopista.protocol.administrador.dominios.Domain) {
      levelActivado = false;
      auxDomain = (com.geopista.protocol.administrador.dominios.Domain) nodeInfo;
      if (nodoTablas) {
        // System.out.println ("tengo columna y detecto dominio");
        jButtonAsociar.setEnabled(true);
      }

      LayerOperations operaciones = new LayerOperations();

      try {
        if (operaciones.obtenerTipoDominio(auxDomain, idMunicipio) == Domain.TREE)
          levelActivado = true;
      } catch (DataException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
      }

      if (arbol.getName().indexOf("General") >= 0
          && auxDomain.getListaNodes().getFirst() != null
          && auxDomain.getListaNodes().getFirst().getType() == Domain.TREE) {
        levelActivado = true;

      } else if (arbol.getName().indexOf("Particular") >= 0) {
        levelActivado = true;
      }
    } else {
      jButtonAsociar.setEnabled(false);
    }

    if (levelActivado) {
      // Se activa la caja de edicion de level
      txtLevel.setEnabled(true);
      lblLevel.setBackground(Color.BLACK);
      txtLevel.setText("0");
    } else {
      txtLevel.setEnabled(false);
      txtLevel.setText("0");
      lblLevel.setBackground(Color.GRAY);
    }
  }