/** * LICENCIA LGPL: * * Esta librería es Software Libre; Usted puede redistribuirlo y/o modificarlo * bajo los términos de la GNU Lesser General Public License (LGPL) * tal y como ha sido publicada por la Free Software Foundation; o * bien la versión 2.1 de la Licencia, o (a su elección) cualquier versión posterior. * * Esta librería se distribuye con la esperanza de que sea útil, pero SIN NINGUNA * GARANTÍA; tampoco las implícitas garantías de MERCANTILIDAD o ADECUACIÓN A UN * PROPÓSITO PARTICULAR. Consulte la GNU Lesser General Public License (LGPL) para más * detalles * * Usted debe recibir una copia de la GNU Lesser General Public License (LGPL) * junto con esta librería; si no es así, escriba a la Free Software Foundation Inc. * 51 Franklin Street, 5º Piso, Boston, MA 02110-1301, USA o consulte * <http://www.gnu.org/licenses/>. * * Copyright 2008 Ministerio de Industria, Turismo y Comercio * */ package es.mityc.firmaJava.libreria.utilidades; import java.util.ArrayList; import java.util.Iterator; /** * Clase para enlazar objetos del tipo (0..n) -> (0..1) * * @author Ministerio de Industria, Turismo y Comercio * @version 0.9 beta */ public class NTo1Link<E> implements Iterable<NTo1Link<E>> { private ArrayList<NTo1Link<E>> prevs; private NTo1Link<E> next; private E data; public NTo1Link(E obj) { data = obj; } @Override public boolean equals(Object obj) { Object comp = obj; if (obj instanceof NTo1Link) { comp = ((NTo1Link)obj).getData(); } if ((comp != null) && (comp.equals(data))) { return true; } return false; } /** * Establece el dato * @param obj dato que se enlaza, <code>null</code> si no hay ninguno */ public void setData(E obj) { data = obj; } /** * Devuelve el dato que se enlaza * @return */ public E getData() { return data; } /** * Añade un nuevo enlace hacia este objeto * @param node */ public void addPrev(NTo1Link<E> node) { if (prevs == null) prevs = new ArrayList<NTo1Link<E>>(); prevs.add(node); } /** * Devuelve un <code>Iterator</code> a los elementos que enlazan a este elemento. * @return iterator a elementos que enlazan a este elemento, <code>null</code> si no hay ninguno */ public Iterator<NTo1Link<E>> getPrevs() { if (prevs != null) return prevs.iterator(); return null; } /** * Devuelve el número de elementos que enlazan a este elemento * @return */ public int getNumPrevs() { if (prevs != null) return prevs.size(); return 0; } /** * Establece el enlace hacia el siguiente elemento. * @param node Siguiente elemento, <code>null</code> si no se quiere enlazar ningún elemento */ public void setNext(NTo1Link<E> node) { next = node; } /** * Devuelve el siguiente elemento * @return */ public NTo1Link<E> getNext() { return next; } public Iterator<NTo1Link<E>> iterator() { return new NTo1LinkIterator<E>(this); } }