001 /* PAVLOV -- Multiple Choice Study System
002 * Copyright (C) 2000 - 2004 T.J. Willis
003 *
004 * This program is free software; you can redistribute it and/or
005 * modify it under the terms of the GNU General Public License
006 * as published by the Free Software Foundation; either version 2
007 * of the License, or (at your option) any later version.
008 *
009 * This program is distributed in the hope that it will be useful,
010 * but WITHOUT ANY WARRANTY; without even the implied warranty of
011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
012 * GNU General Public License for more details.
013 *
014 * You should have received a copy of the GNU General Public License
015 * along with this program; if not, write to the Free Software
016 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
017 *
018 * $Header: /cvsroot/pavlov/net/sourceforge/pavlov/pluglets/feedback/SequencedImagePluglet.java,v 1.1 2004/05/10 15:29:16 tj_willis Exp $
019 */
020 package net.sourceforge.pavlov.pluglets.feedback;
021
022 import java.net.URL;
023 import java.io.File;
024 import net.sourceforge.pavlov.event.*;
025 import net.sourceforge.pavlov.randommedia.*;
026 import net.sourceforge.pavlov.zipUtilities.*;
027
028 /**
029 * A base class to facilitate writing pluglets that use sequenced images.
030 *
031 * @author <a href="mailto:"></a>
032 * @version 1.0
033 */
034 public abstract class SequencedImagePluglet
035 extends AbstractFeedbackPluglet
036 {
037 /**
038 * The directory containing the sequence of images.
039 *
040 */
041 protected SequencedMediaDirectory rights;
042
043 /**
044 * Returns the FileFilter to use to accept image files.
045 *
046 * @return a <code>ZipCapableFileFilter</code> value
047 */
048 public abstract ZipCapableFileFilter getFileFilter();
049 /**
050 * Returns the name of the directory containing the sequence of images.
051 *
052 * @return a <code>String</code> value
053 */
054 public abstract String getDirectory();
055 /**
056 * What to do with the URL of the current image in the sequence.
057 *
058 * @param url an <code>URL</code> value
059 */
060 public abstract void handleURL(URL url);
061
062 /**
063 * Describe <code>init</code> method here.
064 *
065 */
066 public void init(){
067 ZipCapableFileFilter filt = getFileFilter();
068 String p = getResourcePath(getDirectory());
069 if(p!=null)
070 {
071 File me = new File(p);
072 rights = new SequencedMediaDirectory(me,filt);
073 }
074 }
075
076 /**
077 * Describe <code>getResourcePath</code> method here.
078 *
079 * @param in a <code>String</code> value
080 * @return a <code>String</code> value
081 */
082 public abstract String getResourcePath(String in);
083
084 /**
085 * Updates the sequence cursor and calls handleURL to display the new
086 * image. Implemented to only increment the cursor if answer is correct.
087 *
088 * @param e an <code>AnswerEvent</code> value
089 */
090 public void answerEvent(AnswerEvent e)
091 {
092 if(!isVisible()) return;
093 URL next = null;
094 // FIXME: NPE if no files in directory
095 if(e.isCorrect()) {
096 next = rights.getCurrentURL();
097 handleURL(next);
098 }
099 }
100 }