001    /*
002     Copyright (c) 2012, Regents of the University of Colorado
003     All rights reserved.
004    
005     Redistribution and use in source and binary forms, with or without modification, 
006     are permitted provided that the following conditions are met:
007    
008     * Redistributions of source code must retain the above copyright notice, this 
009        list of conditions and the following disclaimer.
010       
011     * Redistributions in binary form must reproduce the above copyright notice, 
012        this list of conditions and the following disclaimer in the documentation 
013        and/or other materials provided with the distribution.
014       
015     * Neither the name of the University of Colorado nor the names of its 
016        contributors may be used to endorse or promote products derived from this 
017        software without specific prior written permission.
018    
019     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
020     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
021     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
022     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
023     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
024     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
025     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
026     ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
027     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 
028     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
029     */
030    package edu.ucdenver.ccp.medline.parser;
031    
032    import java.util.ArrayList;
033    import java.util.List;
034    
035    import edu.ucdenver.ccp.medline.parser.MedlineCitation.Abstract;
036    import edu.ucdenver.ccp.medline.parser.MedlineCitation.AbstractText;
037    import edu.ucdenver.ccp.medline.parser.MedlineCitation.PubMedId;
038    import edu.ucdenver.ccp.medline.parser.PubmedArticle.PubmedData;
039    
040    /**
041     * @author Center for Computational Pharmacology, UC Denver; ccpsupport@ucdenver.edu
042     * 
043     */
044    public abstract class PubmedArticleBase {
045    
046            public abstract PubmedData getPubmedData();
047    
048            public PubMedId getPubmedId() {
049                    if (this instanceof PubmedArticle) {
050                            return ((PubmedArticle) this).getMedlineCitation().getPmid();
051                    } else if (this instanceof PubmedBookArticle) {
052                            return ((PubmedBookArticle) this).getBookDocument().getPmid();
053                    } else
054                            throw new RuntimeException("Unhandled PubMedArticleBase class: " + this.getClass().getName());
055            }
056    
057            public String getArticleTitle() {
058                    if (this instanceof PubmedArticle) {
059                            return ((PubmedArticle) this).getMedlineCitation().getArticle().getArticleTitle();
060                    } else if (this instanceof PubmedBookArticle) {
061                            return ((PubmedBookArticle) this).getBookDocument().getArticleTitle();
062                    } else
063                            throw new RuntimeException("Unhandled PubMedArticleBase class: " + this.getClass().getName());
064            }
065    
066            public List<AbstractText> getArticleAbstractTexts() {
067                    Abstract theAbstract = null;
068                    if (this instanceof PubmedArticle) {
069                            theAbstract = ((PubmedArticle) this).getMedlineCitation().getArticle().getTheAbstract();
070                    } else if (this instanceof PubmedBookArticle) {
071                            theAbstract = ((PubmedBookArticle) this).getBookDocument().getTheAbstract();
072                    } else
073                            throw new RuntimeException("Unhandled PubMedArticleBase class: " + this.getClass().getName());
074                    return (theAbstract == null) ? new ArrayList<AbstractText>() : theAbstract.getAbstractTexts();
075            }
076    
077            public String getDate() {
078                    if (this instanceof PubmedArticle) {
079                            return ((PubmedArticle) this).getMedlineCitation().getArticle().getJournal().getJournalIssue().getPubDate()
080                                            .getDateStr();
081                    } else if (this instanceof PubmedBookArticle) {
082                            return ((PubmedBookArticle) this).getBookDocument().getBook().getPubDate().toString();
083                    } else
084                            throw new RuntimeException("Unhandled PubMedArticleBase class: " + this.getClass().getName());
085            }
086    
087    }