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/user/QuizData.java,v 1.6 2004/07/01 05:50:21 tj_willis Exp $
019 */
020 package net.sourceforge.pavlov.user;
021
022 import java.util.Date;
023 import org.apache.log4j.*;
024
025
026 /**
027 * Data describing a single quiz on a single chapter.
028 *
029 * @author <a href="mailto:tj_willis@users.sourceforge.net"> T.J. Willis </a>
030 * @version 1.0
031 */
032 public class QuizData {
033 private int right;
034 private int wrong;
035 private int total;
036 private Date start;
037
038 /**
039 * Creates a new <code>QuizData</code> instance with no
040 * answers and quiz starting right now.
041 *
042 */
043 public QuizData() {
044 right = 0;
045 wrong = 0;
046 total = 0;
047 start = new Date();
048 }
049
050
051 /**
052 * Describe <code>setRight</code> method here.
053 *
054 * @param r an <code>int</code> value
055 */
056 public void setRight(final int r) {
057 right = r;
058 }
059
060 /**
061 * Describe <code>setWrong</code> method here.
062 *
063 * @param r an <code>int</code> value
064 */
065 public void setWrong(final int r) {
066 wrong = r;
067 }
068
069 /**
070 * Describe <code>setTotal</code> method here.
071 *
072 * @param r an <code>int</code> value
073 */
074 public void setTotal(final int r) {
075 total = r;
076 }
077
078 /**
079 * Describe <code>setStart</code> method here.
080 *
081 * @param when a <code>long</code> value
082 */
083 public void setStart(final long when) {
084 start = new Date(when);
085 }
086
087 /**
088 * Describe <code>addRight</code> method here.
089 *
090 */
091 public void addRight() {
092 right++;
093 total = right + wrong; // just in case
094 }
095
096 /**
097 * Describe <code>addWrong</code> method here.
098 *
099 */
100 public void addWrong() {
101 wrong++;
102 total = right + wrong; // just in case
103 }
104
105 /**
106 * Describe <code>getPercentage</code> method here.
107 *
108 * @return a <code>double</code> value
109 */
110 public double getPercentage() {
111 return ((1.0 * right) / (1.0 * total) * 100.0);
112 }
113
114 /**
115 * Describe <code>getRight</code> method here.
116 *
117 * @return an <code>int</code> value
118 */
119 public int getRight() {
120 return right;
121 }
122
123 /**
124 * Describe <code>getTotal</code> method here.
125 *
126 * @return an <code>int</code> value
127 */
128 public int getTotal() {
129 return total;
130 }
131
132 /**
133 * Describe <code>getWrong</code> method here.
134 *
135 * @return an <code>int</code> value
136 */
137 public int getWrong() {
138 return wrong;
139 }
140
141 /**
142 * Describe <code>getStart</code> method here.
143 *
144 * @return a <code>Date</code> value
145 */
146 public Date getStart() {
147 return start;
148 }
149
150
151 /**
152 * From start of quiz to now, only makes sense for quiz in progress.
153 * @return a <code>String</code> value
154 */
155 public String getElapsedTimeString() {
156 Date x = new Date();
157 long elapsed = x.getTime() - start.getTime();
158 long secs = elapsed / 1000;
159
160 int hours = (int) (secs / (60 * 60));
161
162 secs -= hours * (secs / (60 * 60));
163
164 int mins = (int) (secs / (60));
165
166 secs -= mins * (secs / (60));
167
168 if (hours > 0){
169 return hours + ":" + mins + ":" + secs;//^
170 }
171 return mins + ":" + secs;//^
172 }
173
174 /**
175 * Describe <code>toXML</code> method here.
176 *
177 * @param writer a <code>java.io.Writer</code> value
178 * @exception java.io.IOException if an error occurs
179 */
180 public void toXML(java.io.Writer writer)
181 throws java.io.IOException {
182 if (total == 0) return;
183 writer.write("\t\t<QUIZ DATE=\"" + start.getTime() + "\" RIGHT=\"" + right + "\" WRONG=\"" + wrong + "\" TOTAL=\"" + total + "\"></QUIZ>\n");
184 }
185
186 }
187