/* * BioJava development code * * This code may be freely distributed and modified under the * terms of the GNU Lesser General Public Licence. This should * be distributed with the code. If you do not have a copy, * see: * * http://www.gnu.org/copyleft/lesser.html * * Copyright for this code is held jointly by the individual * authors. These should be listed in @author doc comments. * * For more information on the BioJava project and its aims, * or to join the biojava-l mailing list, visit the home page * at: * * http://www.biojava.org/ * */ package org.biojava.bio.taxa; import java.lang.ref.WeakReference; import java.util.Collections; import java.util.Set; /** *

An implementation of Taxon that keeps only weak references to * children, but full references to parents.

* *

This may be suitable for deriving memory-savy implementations * of TaxonFactory.

* *

To manipulate the children set, use the getChildrenRaw and * setChildrenRaw methods. These 'box' the actual weak reference, but * recognize null to mean that there are no children currently * known. A code-fragment may wish to do something like this:

* *

 * Set children = weakTaxon.getChildrenRaw();
 * if(children == null) {
 *   children = new HashSet();
 *   weakTaxon.setChildrenRaw(children);
 * }
 * // do stuff to update child set e.g. add children 
 * 
*

* * @author Matthew Pocock * @deprecated replaced by classes in {@link org.biojavax.bio.taxa org.biojavax.bio.taxa} */ public class WeakTaxon extends AbstractTaxon { protected Taxon parent; private WeakReference /*Set*/ children; public WeakTaxon() { super(); } public WeakTaxon(String scientificName, String commonName) { super(scientificName, commonName); } public Taxon getParent() { return parent; } void setParent(Taxon parent) { this.parent = parent; } public Set getChildren() { Set c = getChildrenRaw(); if(c != null) { return c; } else { return Collections.EMPTY_SET; } } public Set getChildrenRaw() { if(children != null) { Set c = (Set) children.get(); if(c != null) { return c; } } return null; } public void setChildrenRaw(Set children) { this.children = new WeakReference(children); } }