public AssessmentItem() { super(null, QTI_CLASS_NAME); // Item doesn't have any parent. getAttributes().add(new StringAttribute(this, IdentifiableNode.ATTR_IDENTIFIER_NAME, true)); getAttributes().add(new StringAttribute(this, ATTR_TITLE_NAME, true)); getAttributes().add(new StringAttribute(this, ATTR_LABEL_NAME, false)); getAttributes() .add(new StringAttribute(this, ATTR_LANG_NAME, XMLConstants.XML_NS_URI, null, false)); getAttributes().add(new BooleanAttribute(this, ATTR_ADAPTIVE_NAME, true)); getAttributes().add(new BooleanAttribute(this, ATTR_TIME_DEPENDENT_NAME, true)); getAttributes().add(new StringAttribute(this, ATTR_TOOL_NAME_NAME, false)); getAttributes().add(new StringAttribute(this, ATTR_TOOL_VERSION_NAME, false)); getNodeGroups().add(new ResponseDeclarationGroup(this)); getNodeGroups().add(new OutcomeDeclarationGroup(this)); getNodeGroups().add(new TemplateDeclarationGroup(this)); getNodeGroups().add(new TemplateProcessingGroup(this)); // templateProcessing [0..1] getNodeGroups().add(new StylesheetGroup(this)); // stylesheet [0..*] getNodeGroups().add(new ItemBodyGroup(this)); // itemBody [0..1] getNodeGroups().add(new ResponseProcessingGroup(this)); // responseProcessing [0..1] getNodeGroups().add(new ModalFeedbackGroup(this)); // modalFeedback [*] getNodeGroups().add(new ApipAccessibilityGroup(this, false)); /* create a special declaration for the internal completionStatus variable */ completionStatusOutcomeDeclaration = new OutcomeDeclaration(this); completionStatusOutcomeDeclaration.setIdentifier( QtiConstants.VARIABLE_COMPLETION_STATUS_IDENTIFIER); completionStatusOutcomeDeclaration.setCardinality(Cardinality.SINGLE); completionStatusOutcomeDeclaration.setBaseType(BaseType.IDENTIFIER); /* create a special declaration for the internal numAttempts variable */ numAttemptsResponseDeclaration = new ResponseDeclaration(this); numAttemptsResponseDeclaration.setIdentifier( QtiConstants.VARIABLE_NUMBER_OF_ATTEMPTS_IDENTIFIER); numAttemptsResponseDeclaration.setCardinality(Cardinality.SINGLE); numAttemptsResponseDeclaration.setBaseType(BaseType.INTEGER); /* create a special declaration for the internal duration variable */ durationResponseDeclaration = new ResponseDeclaration(this); durationResponseDeclaration.setIdentifier(QtiConstants.VARIABLE_DURATION_IDENTIFIER); durationResponseDeclaration.setCardinality(Cardinality.SINGLE); durationResponseDeclaration.setBaseType(BaseType.FLOAT); }