001    /*
002     * The contents of this file are subject to the Mozilla Public
003     * License Version 1.1 (the "License"); you may not use this file
004     * except in compliance with the License. You may obtain a copy of
005     * the License at http://www.mozilla.org/MPL/
006     *
007     * Software distributed under the License is distributed on an "AS
008     * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
009     * implied. See the License for the specific language governing
010     * rights and limitations under the License.
011     *
012     * The Original Code is Knowtator.
013     *
014     * The Initial Developer of the Original Code is University of Colorado.  
015     * Copyright (C) 2005 - 2008.  All Rights Reserved.
016     *
017     * Knowtator was developed by the Center for Computational Pharmacology
018     * (http://compbio.uchcs.edu) at the University of Colorado Health 
019     *  Sciences Center School of Medicine with support from the National 
020     *  Library of Medicine.  
021     *
022     * Current information about Knowtator can be obtained at 
023     * http://knowtator.sourceforge.net/
024     *
025     * Contributor(s):
026     *   Philip V. Ogren <philip@ogren.info> (Original Author)
027     */
028    
029    package edu.uchsc.ccp.knowtator.textsource;
030    
031    import java.awt.Component;
032    import java.util.ArrayList;
033    
034    import edu.stanford.smi.protege.model.Cls;
035    import edu.stanford.smi.protege.model.KnowledgeBase;
036    import edu.stanford.smi.protege.model.Project;
037    import edu.uchsc.ccp.knowtator.KnowtatorProjectUtil;
038    
039    /**
040     * Authors: Philip V. Ogren Created: October, 2004 Description:
041     * 
042     * Every extension of this class should have a corresponding extension of
043     * TextSource. Both extensions should be built together in parallel.
044     * 
045     */
046    
047    public abstract class TextSourceCollection {
048    
049            /**
050             * Corresponds to the Protege class name of the text sources that are
051             * retrieved by this collection.
052             */
053            public static String CLS_NAME = KnowtatorProjectUtil.TEXT_SOURCE_CLS_NAME;
054    
055            /**
056             * This is the name that is displayed when users are asked what type of text
057             * source collection they would like to access.
058             */
059            public static String DISPLAY_NAME;
060    
061            /**
062             * provides an easy way for a script to iterate through all TextSources in a
063             * collection.
064             */
065            public abstract TextSourceIterator iterator();
066    
067            /**
068             * @return The name of the text source collection. Might correspond to the
069             *         name of the directory, database or file that the text source
070             *         collection accesses to get text sources.
071             */
072            public abstract String getName();
073    
074            public abstract int size();
075    
076            public abstract TextSource get(int index) throws TextSourceAccessException;
077    
078            /**
079             * @return the text source that has the given name. A text source collection
080             *         should have no name collisions.
081             */
082            public abstract TextSource get(String textSourceName) throws TextSourceAccessException;
083    
084            /**
085             * @return -1 if text source does not exist.
086             */
087            public abstract int getIndex(TextSource textSource);
088    
089            /**
090             * @return a TextSource selected by a human user through a user interface.
091             *         Implementations of this method might provide a dialog with a list
092             *         of available text sources.
093             */
094            public abstract TextSource select(Component parent);
095    
096            /**
097             * @return a TextSource selected by a human user through a user interface.
098             *         Implementations of this method might provide a dialog with a text
099             *         field that requires the user to enter the name of a text source
100             *         or some text that s/he is looking for.
101             */
102            public abstract TextSource find(Component parent);
103    
104            /**
105             * This method saves information about this text source collection to the
106             * Protege project. The information saved should be sufficient to
107             * reinstantiate this text source collection the next time Protege is
108             * started.
109             * 
110             */
111            public abstract void save(Project project);
112    
113            /**
114             * This method should return the text source collection most recently opened
115             * by the provided project. This method is called when Knowtator is
116             * initiated. This method eliminates the need for the user to open the same
117             * text source collection every time s/he opens Knowtator.
118             * 
119             * @return null if recent text source collection cannot be opened.
120             * 
121             */
122    
123            public static TextSourceCollection open(Project project) {
124                    return null;
125            }
126    
127            /**
128             * @return a text source collection chosen by a human user through a user
129             *         interface. Implementations of this method might provide a
130             *         FileChooser, a dialog with database connection settings, etc.
131             */
132            public static TextSourceCollection open(Project project, Component parent) {
133                    return null;
134            }
135    
136            /**
137             * This method ensures that the Protege cls definition corresponding to the
138             * text sources in this collection does exist. If not, it creates the
139             * appropriate cls. Implementors of this class should first check the kb to
140             * make sure that the class does not already exist.
141             * 
142             */
143    
144            public static void createCls(KnowledgeBase kb) {
145                    if (kb.getCls(CLS_NAME) == null) {
146                            Cls textSourceParent = kb.getCls(KnowtatorProjectUtil.TEXT_SOURCE_CLS_NAME);
147                            ArrayList parents = new ArrayList();
148                            parents.add(textSourceParent);
149                            kb.createCls(CLS_NAME, parents);
150                    }
151                    return;
152            }
153    
154    }