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/rightWrong/MediaDirectoryPluglet.java,v 1.4 2004/05/10 15:25:17 tj_willis Exp $
019 */
020 package net.sourceforge.pavlov.pluglets.feedback.rightWrong;
021
022 import java.net.URL;
023 import java.io.File;
024 import net.sourceforge.pavlov.event.*;
025 import net.sourceforge.pavlov.pluglets.feedback.*;
026 import net.sourceforge.pavlov.randommedia.*;
027 import net.sourceforge.pavlov.zipUtilities.*;
028
029 /**
030 * This class pulls media items from two directories, a "right" directory
031 * and a "wrong" directory. The items are pulled sequentially, with cursors
032 * maintained in both directories. Implement the handleURL() method to
033 * use the resulting URL's to respond to the user's response.
034 *
035 * @author <a href="mailto:"></a>
036 * @version 1.0
037 */
038 public abstract class MediaDirectoryPluglet
039 extends AbstractFeedbackPluglet
040 {
041 /**
042 * Directory containing sequenced media for correct responses.
043 *
044 */
045 protected SequencedMediaDirectory rights;
046 /**
047 * Directory containing sequenced media for incorrect responses.
048 *
049 */
050 protected SequencedMediaDirectory wrongs;
051
052 /**
053 * Describe <code>getFileFilter</code> method here.
054 *
055 * @return a <code>ZipCapableFileFilter</code> value
056 */
057 public abstract ZipCapableFileFilter getFileFilter();
058 /**
059 * Describe <code>getRightDirectory</code> method here.
060 *
061 * @return a <code>String</code> value
062 */
063 public abstract String getRightDirectory();
064 /**
065 * Describe <code>getWrongDirectory</code> method here.
066 *
067 * @return a <code>String</code> value
068 */
069 public abstract String getWrongDirectory();
070 /**
071 * Implement this method to present the media at the given URL to
072 * the user.
073 *
074 * @param url an <code>URL</code> value
075 */
076 public abstract void handleURL(URL url);
077
078 /**
079 * Describe <code>init</code> method here.
080 *
081 */
082 public void init(){
083
084 ZipCapableFileFilter filt = getFileFilter();
085 String p = getResourcePath(getRightDirectory());
086 if(p!=null)
087 {
088 File me = new File(p);
089 rights = new SequencedMediaDirectory(me,filt);
090 }
091 p = getResourcePath(getWrongDirectory());
092 if( p!=null)
093 {
094 File me2 = new File(p);
095 wrongs = new SequencedMediaDirectory(me2,filt);
096 }
097 }
098
099 /**
100 * Describe <code>getResourcePath</code> method here.
101 *
102 * @param in a <code>String</code> value
103 * @return a <code>String</code> value
104 */
105 public abstract String getResourcePath(String in);
106
107
108 /**
109 * User has answered a question, if correct, get the next URL from the
110 * rights directory, if incorrect, get URL from wrongs directory. Call
111 * handleURL on the resulting URL.
112 *
113 * @param e an <code>AnswerEvent</code> value
114 */
115 public void answerEvent(AnswerEvent e)
116 {
117 if(!isVisible()) return;
118 URL next = null;
119 // NPE if no files in directory
120 if(e.isCorrect()) next = rights.getCurrentURL();
121 else next = wrongs.getCurrentURL();
122 handleURL(next);
123 }
124
125
126 }