001: package com.xoetrope.survey;
002:
003: import java.util.Date;
004: import java.util.Vector;
005:
006: /**
007: * <p>A holder for responses to an individual survey</p>
008: *
009: * <p> Copyright (c) Xoetrope Ltd., 2001-2006, This software is licensed under
010: * the GNU Public License (GPL), please see license.txt for more details. If
011: * you make commercial use of this software you must purchase a commercial
012: * license from Xoetrope.</p>
013: * <p> $Revision: 1.6 $</p>
014: */
015: public class XResponseSet {
016: private StringBuffer questions;
017: private String surveyName;
018: private SessionDataSet currentSession = new SessionDataSet();
019: private Vector sessionCache = new Vector();
020:
021: /**
022: * A separator for the individual responses when persisted
023: */
024: public static final String RESPONSE_SEPARATOR = ",";
025:
026: /**
027: * Create a new response set
028: * @param name the survey name
029: */
030: public XResponseSet(String name) {
031: surveyName = name;
032: start();
033: }
034:
035: /**
036: * Prepares the internal storage for accepting data
037: */
038: public void start() {
039: currentSession.startTime = new Date().getTime();
040: currentSession.responses = new StringBuffer();
041: questions = new StringBuffer();
042: }
043:
044: /**
045: * Adds another response
046: * @param value the response value
047: */
048: public void addResponse(String value) {
049: // Check that the session has started
050: if (currentSession.responses == null)
051: return;
052:
053: if (currentSession.responses.length() > 0)
054: currentSession.responses.append(RESPONSE_SEPARATOR);
055: currentSession.responses.append(value);
056: }
057:
058: /**
059: * Adds another question
060: * @param value the question response value
061: */
062: public void addQuestion(int value) {
063: if (questions.length() > 0)
064: questions.append(RESPONSE_SEPARATOR);
065: questions.append(Integer.toString(value));
066: }
067:
068: /**
069: * Gets the response so far
070: * @return the response
071: */
072: public String getResponse() {
073: return currentSession.responses.toString();
074: }
075:
076: /**
077: * Gets the questions so far
078: * @return the response
079: */
080: public String getQuestions() {
081: return questions.toString();
082: }
083:
084: /**
085: * Mark the session as closed.
086: */
087: public void closeSession() {
088: currentSession.endTime = new Date().getTime();
089: sessionCache.addElement(currentSession);
090: currentSession = new SessionDataSet();
091: }
092:
093: /**
094: * Get the survey session start time
095: * @return the time in milliseconds
096: */
097: public String getStartTime() {
098: return new Long(currentSession.startTime).toString();
099: }
100:
101: /**
102: * Get the survey session end time
103: * @return the time in milliseconds
104: */
105: public String getEndTime() {
106: return new Long(currentSession.endTime).toString();
107: }
108:
109: /**
110: * Get the number of cached survey sessions
111: * @return the number of cached sessions
112: */
113: public int getNumSessions() {
114: return sessionCache.size();
115: }
116:
117: /**
118: * Select the specified session.
119: * @param i The session index
120: */
121: public void selectSession(int i) {
122: currentSession = (SessionDataSet) sessionCache.elementAt(i);
123: }
124: }
125:
126: /**
127: * A store for the response set and information about the session used to capture
128: * those responses.
129: */
130: class SessionDataSet {
131: /**
132: * The response set start time
133: */
134: long startTime;
135: /**
136: * The response set end time
137: */
138: long endTime;
139: /**
140: * The collection of responses
141: */
142: StringBuffer responses;
143: }
|