protected Map<Identifier, StringResponseData> extractStringResponseData(final HttpServletRequest httpServletRequest) { final Map<Identifier, StringResponseData> responseMap = new HashMap<Identifier, StringResponseData>(); @SuppressWarnings("unchecked") final Set<String> parameterNames = httpServletRequest.getParameterMap().keySet(); for (final String name : parameterNames) { if (name.startsWith("qtiworks_presented_")) { final String responseIdentifierString = name.substring("qtiworks_presented_".length()); final Identifier responseIdentifier; try { responseIdentifier = Identifier.parseString(responseIdentifierString); } catch (final QtiParseException e) { throw new BadResponseWebPayloadException("Bad response identifier encoded in parameter " + name, e); } final String[] responseValues = httpServletRequest.getParameterValues("qtiworks_response_" + responseIdentifierString); final StringResponseData stringResponseData = new StringResponseData(responseValues); responseMap.put(responseIdentifier, stringResponseData); } } return responseMap; }
/** * The parsing {@link ResponseData} for this interaction is slightly artificial in order to * make it easy to implement in a web form: * * - We accept {@link StringResponseData} only. * - An empty list is treated as false, anything else is treated as true. */ @Override protected Value parseResponse(final ResponseDeclaration responseDeclaration, final ResponseData responseData) throws ResponseBindingException { if (responseData.getType()!=ResponseDataType.STRING) { throw new ResponseBindingException(responseDeclaration, responseData, "ResponseData for endAttemptInteraction must be of string type"); } final List<String> stringResponseData = ((StringResponseData) responseData).getResponseData(); return BooleanValue.valueOf(!stringResponseData.isEmpty()); }
private static void appendResponseData(final Element element, final ResponseData responseData) { switch (responseData.getType()) { case STRING: final StringResponseData stringResponseData = (StringResponseData) responseData; for (final String responseDatum : stringResponseData.getResponseData()) { XmlMarshallerCore.maybeAppendTextElement(element, "string", responseDatum); } break; case FILE: final FileResponseData fileResponseData = (FileResponseData) responseData; final Element fileElement = XmlMarshallerCore.appendElement(element, "file"); fileElement.setAttribute("contentType", fileResponseData.getContentType()); fileElement.setAttribute("fileName", fileResponseData.getFileName()); fileElement.setAttribute("absoluteFilePath", fileResponseData.getFile().getAbsolutePath()); break; default: throw new QtiLogicException("Unexpected switch case " + responseData.getType()); } }
private static ItemSessionState createItemSessionState() { final ItemSessionState itemSessionState = new ItemSessionState(); final Map<Identifier, SingleValue> recordMap = new HashMap<Identifier, SingleValue>(); recordMap.put(Identifier.parseString("PMathML"), new StringValue("Hello")); recordMap.put(Identifier.parseString("Number"), new IntegerValue(5)); final Value rv = RecordValue.createRecordValue(recordMap); itemSessionState.setShuffledInteractionChoiceOrder(Identifier.parseString("dave"), Arrays.asList(Identifier.parseString("a"))); itemSessionState.setResponseValue(Identifier.parseString("RESPONSE"), MultipleValue.createMultipleValue(new StringValue("Bad"), new StringValue("Thing"))); itemSessionState.setTemplateValue(Identifier.parseString("TEMPLATE"), NullValue.INSTANCE); itemSessionState.setOutcomeValue(Identifier.parseString("RECORD"), rv); itemSessionState.setUnboundResponseIdentifiers(new HashSet<Identifier>(Arrays.asList(Identifier.assumedLegal("RESPONSE")))); itemSessionState.setRawResponseData(Identifier.assumedLegal("A"), new StringResponseData("1", "2")); return itemSessionState; }
throw new ResponseBindingException(responseDeclaration, responseData, "mathEntryInteraction must be bound to string response data"); final List<String> stringResponseData = ((StringResponseData) responseData).getResponseData(); if (stringResponseData.size() != 1) { throw new ResponseBindingException(responseDeclaration, responseData, "Expected one string value to be bound to this response.");
responseMap.put(Identifier.parseString("RESPONSE"), new StringResponseData("ChoiceA")); testSessionController.handleResponsesToCurrentItem(timestamp, responseMap);
throw new ResponseBindingException(responseDeclaration, responseData, "textInteraction must be bound to string response data"); final List<String> stringResponseData = ((StringResponseData) responseData).getResponseData(); if (stringResponseData.size() > 1) { throw new ResponseBindingException(responseDeclaration, responseData, "Response to textEntryInteraction should contain at most 1 element");
final Date timestamp3 = ObjectUtilities.addToTime(timestamp2, 1000L); final Map<Identifier, ResponseData> responseMap = new HashMap<Identifier, ResponseData>(); responseMap.put(Identifier.parseString("RESPONSE"), new StringResponseData("ChoiceA")); itemSessionController.bindResponses(timestamp3, responseMap); System.out.println("Unbound responses: " + itemSessionState.getUnboundResponseIdentifiers());
final List<String> stringResponseData = ((StringResponseData) responseData).getResponseData(); if (responseCardinality == Cardinality.SINGLE) { if (stringResponseData.isEmpty() || stringResponseData.get(0).trim().length() == 0) {
final Date timestamp3 = ObjectUtilities.addToTime(timestamp2, 1000L); final Map<Identifier, ResponseData> responseMap = new HashMap<Identifier, ResponseData>(); responseMap.put(Identifier.parseString("RESPONSE"), new StringResponseData("1+x")); itemSessionController.bindResponses(timestamp3, responseMap); System.out.println("Unbound responses: " + itemSessionState.getUnboundResponseIdentifiers());
throw new ResponseBindingException(responseDeclaration, responseData, "extendedTextInteraction must be bound to string response data"); final List<String> stringResponseData = ((StringResponseData) responseData).getResponseData(); final Cardinality responseCardinality = responseDeclaration.getCardinality(); final BaseType responseBaseType = responseDeclaration.getBaseType();
result.setRawResponseData(identifier, new StringResponseData(stringResponseBuilder));
candidateItemResponse.setStringResponseData(((StringResponseData) responseData).getResponseData()); break;
candidateResponse.setStringResponseData(((StringResponseData) responseData).getResponseData()); break;