⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 biopolymer.java

📁 化学图形处理软件
💻 JAVA
字号:
/* $RCSfile$ * $Author: egonw $     * $Date: 2007-04-22 22:49:31 +0200 (Sun, 22 Apr 2007) $     * $Revision: 8242 $ *  * Copyright (C) 1997-2007  Edgar Luttmann <edgar@uni-paderborn.de> *  *  Contact: cdk-devel@lists.sourceforge.net *  * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License * as published by the Free Software Foundation; either version 2.1 * of the License, or (at your option) any later version. * All we ask is that proper credit is given for our work, which includes * - but is not limited to - adding the above copyright notice to the beginning * of your source code files, and to any copyright notice that you may distribute * with programs based on this work. *  * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU Lesser General Public License for more details. *  * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. *  */package org.openscience.cdk;import java.util.Collection;import java.util.Enumeration;import java.util.Hashtable;import java.util.Iterator;import java.util.Map;import org.openscience.cdk.interfaces.IAtom;import org.openscience.cdk.interfaces.IBioPolymer;import org.openscience.cdk.interfaces.IMonomer;import org.openscience.cdk.interfaces.IStrand;/** * A BioPolymer is a subclass of a Polymer which is supposed to store * additional informations about the Polymer which are connected to BioPolymers. * * @cdk.module  data * * @author      Edgar Luttmann <edgar@uni-paderborn.de> * @author      Martin Eklund * @cdk.created 2001-08-06  * * @cdk.keyword polymer * @cdk.keyword biopolymer */public class BioPolymer extends Polymer implements java.io.Serializable, IBioPolymer{	/**     * Determines if a de-serialized object is compatible with this class.     *     * This value must only be changed if and only if the new version     * of this class is imcompatible with the old version. See Sun docs     * for <a href=http://java.sun.com/products/jdk/1.1/docs/guide     * /serialization/spec/version.doc.html>details</a>.	 */	private static final long serialVersionUID = -5001873073769634393L;	private Hashtable strands;	// the list of all the contained Strands.		/**	 * Contructs a new Polymer to store the Strands.	 */		public BioPolymer() {		super();		// Strand stuff		strands = new Hashtable();	}		/**	 * Adds the atom oAtom to a specified Strand, whereas the Monomer is unspecified. Hence	 * the atom will be added to a Monomer of type UNKNOWN in the specified Strand.	 *	 * @param oAtom   The atom to add	 * @param oStrand The strand the atom belongs to	 */	public void addAtom(IAtom oAtom, IStrand oStrand) {				int atomCount = super.getAtomCount();				// Add atom to AtomContainer		super.addAtom(oAtom);		if (atomCount != super.getAtomCount() && 		    oStrand != null) {	// Maybe better to throw nullpointer exception here, so user realises that								// Strand == null and Atom only gets added to this BioPolymer, but not to a Strand.			oStrand.addAtom(oAtom);				if (!strands.containsKey(oStrand.getStrandName())) {				strands.put(oStrand.getStrandName(), oStrand);			}		}		/* notifyChanged() is called by addAtom in		 AtomContainer */	}		/**	 * Adds the atom to a specified Strand and a specified Monomer.	 * 	 * @param oAtom	 * @param oMonomer	 * @param oStrand	 */	public void addAtom(IAtom oAtom, IMonomer oMonomer, IStrand oStrand)	{				int atomCount = super.getAtomCount();				// Add atom to AtomContainer		super.addAtom(oAtom);		if(atomCount != super.getAtomCount() && // ok, super did not yet contain the atom			   // Add atom to Strand (also adds the atom to the monomer).		       oStrand != null)	{			oStrand.addAtom(oAtom, oMonomer);	// Same problem as above: better to throw nullpointer exception?			if (!strands.containsKey(oStrand.getStrandName())) {				strands.put(oStrand.getStrandName(), oStrand);			}		}		/* The reasoning above is: 		 * All Monomers have to belong to a Strand and all atoms belonging to strands have to belong to a Monomer =>		 * ? oMonomer != null and oStrand != null, oAtom is added to BioPolymer and to oMonomer in oStrand		 * ? oMonomer == null and oStrand != null, oAtom is added to BioPolymer and default Monomer in oStrand		 * ? oMonomer != null and oStrand == null, oAtom is added to BioPolymer, but not to a Monomer or Strand (especially good to maybe throw exception in this case)		 * ? oMonomer == null and oStrand == null, oAtom is added to BioPolymer, but not to a Monomer or Strand		 * */	}		/**	 * Return the number of monomers present in BioPolymer.	 *	 * @return number of monomers	 *	 */	public int getMonomerCount() {		Enumeration keys = strands.keys();		int number = 0;				while(keys.hasMoreElements())	{			Strand tmp = (Strand)strands.get(keys.nextElement());	// Cast exception?!			number += (tmp.getMonomers()).size() - 1;		}		return number;	}		/**	 * Retrieve a Monomer object by specifying its name. [You have to specify the strand to enable	 * monomers with the same name in different strands. There is at least one such case: every	 * strand contains a monomer called "".]	 *	 * @param monName  The name of the monomer to look for	 * @return The Monomer object which was asked for	 *	 */	public IMonomer getMonomer(String monName, String strandName) {	    Strand strand = (Strand)strands.get(strandName); 	    	    if(strand != null)	{	        return (Monomer)strand.getMonomer(monName);	    }	    else	{	        return null;	    } 	}		/*	Could look like this if you ensured individual name giving for ALL monomers:	 * 		 public Monomer getMonomer(String cName) {	 Enumeration keys = strands.keys();	 Monomer oMonomer = null;	 	 while(keys.hasMoreElements())	{	 	 if(((Strand)strands.get(keys.nextElement())).getMonomers().containsKey(cName))	{	 Strand oStrand = (Strand)strands.get(keys.nextElement());	 oMonomer = oStrand.getMonomer(cName);	 break;	 }	 }	 return oMonomer;	 }	 */			/**	 * Returns a collection of the names of all <code>Monomer</code>s in this	 * BioPolymer.	 *	 * @return a <code>Collection</code> of all the monomer names.	 */	public Collection getMonomerNames() {		Enumeration keys = strands.keys();		Hashtable monomers = new Hashtable();				while(keys.hasMoreElements())	{			Strand oStrand = (Strand)strands.get(keys.nextElement());			monomers.putAll(oStrand.getMonomers());		}				return monomers.keySet();	}		/**	 *	 * Return the number of strands present in the BioPolymer.	 *	 * @return number of strands	 *	 */	public int getStrandCount() {		return strands.size();	}		/**	 *	 * Retrieve a Monomer object by specifying its name.	 *	 * @param cName  The name of the monomer to look for	 * @return The Monomer object which was asked for	 *	 */	public IStrand getStrand(String cName) {		return (Strand)strands.get(cName);	}		/**	 * Returns a collection of the names of all <code>Strand</code>s in this	 * BioPolymer.	 *	 * @return a <code>Collection</code> of all the strand names.	 */	public Collection getStrandNames() {		return strands.keySet();	}		/**	 * Removes a particular strand, specified by its name.	 * 	 * @param name name of the strand to remove	 */	public void removeStrand(String name)	{		if (strands.containsKey(name))	{			Strand strand = (Strand)strands.get(name);			this.remove(strand);			strands.remove(name);		}	}		/**	 * @return hashtable containing the monomers in the strand.	 */	public Map getStrands()	{		return strands;	}		public String toString() {        StringBuffer stringContent = new StringBuffer();        stringContent.append("BioPolymer(");        stringContent.append(this.hashCode()).append(", ");        stringContent.append(super.toString());        stringContent.append(')');        return stringContent.toString();    }    public Object clone() throws CloneNotSupportedException {    	BioPolymer clone = (BioPolymer)super.clone();        clone.strands.clear();        for (Iterator strands = clone.getStrandNames().iterator(); strands.hasNext();) {            Strand strand = (Strand)clone.getStrand(strands.next().toString()).clone();            for (Iterator iter = strand.getMonomerNames().iterator(); iter.hasNext();) {            	IMonomer monomer = strand.getMonomer(iter.next().toString());            	java.util.Iterator atoms = monomer.atoms();            	while (atoms.hasNext()) {                    clone.addAtom((IAtom)atoms.next(), monomer, strand);                }             }        }        return clone;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -