/** * Busca un nodo dentro del arbol * * @param raiz Nodo raíz de la consulta * @param codigo Código buscado * @param nivel Nivel de profundidad del árbol * @return Nodo encontrado, null si no lo encuentra */ private DefaultMutableTreeNode buscarNodo(DefaultMutableTreeNode raiz, String codigo, int nivel) { DefaultMutableTreeNode nodo = null; String auxCodigo = codigoBuscar(codigo, nivel); if (raiz != null) { if (auxCodigo.compareTo(((UnidadUserObject) raiz.getUserObject()).getUnidad().getCodigo()) == 0) { return raiz; } else { for (int i = 0; i < raiz.getChildCount(); i++) { Unidad comparacion = ((UnidadUserObject) ((DefaultMutableTreeNode) raiz.getChildAt(i)).getUserObject()) .getUnidad(); if (auxCodigo.compareTo(comparacion.getCodigo()) == 0) { nodo = (DefaultMutableTreeNode) raiz.getChildAt(i); break; } } if (nodo != null) { return buscarNodo(nodo, codigo, nivel + 1); } } } return nodo; }
/** * Interfaz que inicia la construcción del organigrama. * * @param auxUnidades Lista de unidades extraidan de la base de datos */ public void armarModelo(List<Unidad> auxUnidades) { if (auxUnidades != null && auxUnidades.size() != 0) { unidades = new ArrayList<Unidad>(); unidades.addAll(auxUnidades); Unidad universidad = new Unidad("0", "Universidad Nacional", "UNA"); universidad.setTipo(0); DefaultMutableTreeNode raiz = agregarNodo(null, universidad); separarUnidades(raiz, raiz); model = new DefaultTreeModel(raiz); } }
public int compare(Unidad und1, Unidad und2) { int resultado = -1; String[] codigosUnidad1 = und1.getCodigo().split("\\."); String[] codigosUnidad2 = und2.getCodigo().split("\\."); int parte1; int parte2; for (int i = 0; i < codigosUnidad1.length && i < codigosUnidad2.length; i++) { parte1 = Integer.valueOf(codigosUnidad1[i]); parte2 = Integer.valueOf(codigosUnidad2[i]); resultado = parte1 == parte2 ? 0 : parte1 < parte2 ? -1 : 1; if (resultado != 0) { return resultado; } } return resultado; }
/** * Agrega una nueva unidad al árbol, como hijo de un nodo padre * * @param padre Padre de la nueva unidad * @param nuevaUnidad Nueva unidad * @return El nodo con la unidad dentro, ya asignado al padre */ public DefaultMutableTreeNode agregarNodo(DefaultMutableTreeNode padre, Unidad nuevaUnidad) { DefaultMutableTreeNode node = new DefaultMutableTreeNode(); UnidadUserObject userObject = new UnidadUserObject(node); node.setUserObject(userObject); userObject.setUnidad(nuevaUnidad); node.setAllowsChildren(true); userObject.setText(nuevaUnidad.getNombre()); userObject.setLeaf(false); if (nuevaUnidad.getTipo() == 0) { userObject.setExpanded(true); } else { userObject.setExpanded(false); } if (padre != null) { padre.add(node); } return node; }
/** * Recolecta los datos para asignarlos a una unidad, que va a ser la que se ingresará a la base de * datos. * * @return Nueva unidad formada con los datos de los campos en la página. */ public Unidad crearUnidad() { String codigo = ""; if (((UnidadUserObject) unidadSeleccionada.getUserObject()) .getUnidad() .getCodigo() .compareTo("0") != 0) { codigo += ((UnidadUserObject) unidadSeleccionada.getUserObject()).getUnidad().getCodigo() + "."; } if (unidadSeleccionada.getChildCount() > 0) { UnidadUserObject nuevo = (UnidadUserObject) ((DefaultMutableTreeNode) unidadSeleccionada.getChildAt(unidadSeleccionada.getChildCount() - 1)) .getUserObject(); String cod = nuevo.getUnidad().getCodigo(); cod = getCodigoUltimaUnidad(); if (cod.length() > 1) { cod = cod.substring(cod.length() - 2, cod.length()); cod = cod.replace(".", ""); } codigo += Integer.toString(Integer.parseInt(cod) + 1); } else { codigo += "1"; } Unidad unidad = new Unidad(codigo, nuevaUnidad, nuevoAcron); unidad.setTipo( ((UnidadUserObject) unidadSeleccionada.getUserObject()).getUnidad().getTipo() + 1); return unidad; }