/********************************************************************************** * $URL: https://source.sakaiproject.org/svn/sam/trunk/samigo-app/src/test/org/sakaiproject/tool/assessment/business/entity/helper/AuthoringHelperTest.java $ * $Id: AuthoringHelperTest.java 106463 2012-04-02 12:20:09Z david.horwitz@uct.ac.za $ *********************************************************************************** * * Copyright (c) 2004-2005, 2005, 2006, 2008 The Sakai Foundation * * Licensed under the Educational Community License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.opensource.org/licenses/ECL-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * **********************************************************************************/ package org.sakaiproject.tool.assessment.business.entity.helper; import java.io.File; import java.util.List; import java.util.Map; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.w3c.dom.Document; import org.sakaiproject.tool.assessment.data.ifc.assessment.ItemDataIfc; import org.sakaiproject.tool.assessment.data.ifc.shared.TypeIfc; import org.sakaiproject.tool.assessment.facade.AssessmentFacade; import org.sakaiproject.tool.assessment.facade.ItemFacade; import org.sakaiproject.tool.assessment.facade.SectionFacade; import org.sakaiproject.tool.assessment.qti.asi.Assessment; import org.sakaiproject.tool.assessment.qti.asi.Item; import org.sakaiproject.tool.assessment.qti.asi.Section; import org.sakaiproject.tool.assessment.qti.constants.QTIVersion; import org.sakaiproject.tool.assessment.qti.helper.ExtractionHelper; import org.sakaiproject.tool.assessment.qti.util.XmlUtil; /** * <p> Test program</p> * <p> </p> * <p> </p> * @author Ed Smiley esmiley@stanford.edu * @version $Id: AuthoringHelperTest.java 106463 2012-04-02 12:20:09Z david.horwitz@uct.ac.za $ */ public class AuthoringHelperTest { private static Log log = LogFactory.getLog(AuthoringHelperTest.class); private final static String xslPath = "C:\\Documents and Settings\\Ed Smiley\\jbproject\\sam\\webapp.war\\xml\\xsl\\dataTransform\\import\\v1p2"; private final static String myPath = "c:\\Documents and Settings\\Ed Smiley\\My Documents\\xml\\output"; public AuthoringHelperTest() { } public static void main(String args[]) { String items[] = { "i1080.xml", "i1089.xml", "i1090.xml", "i1091.xml", "i1092.xml", "i1093.xml", "i1094.xml", "i1096.xml", }; testItems(myPath, items); String assessments[] = { "..\\respondus\\respondus_IMS_QTI.xml", "a1083.xml", "a1117.xml", "a24.xml", "a25.xml", "a26.xml", }; testAssessments(myPath, assessments); } public static void testAssessments(String myPath, String[] myDocs) { AuthoringHelperTest ah = new AuthoringHelperTest(); //String sep = "\\"; for (int i = 0; i < myDocs.length; i++) { String path = myPath + File.separator + myDocs[i]; log.info("Testing XML file:" + path); Document document = XmlUtil.readDocument(myPath + File.separator + myDocs[i]); log.info("Created doc."); AssessmentFacade a = ah.createImportedAssessment(document); log.info("Created assessment title: " + a.getTitle()); log.info("Created assessment comments: " + a.getComments()); log.info("Created assessment desc: " + a.getDescription()); log.info("Created assessment mod: " + a.getLastModifiedBy()); log.info("Created assessment date: " + a.getLastModifiedDate()); } } public static void testItems(String myPath, String[] myDocs) { AuthoringHelperTest ah = new AuthoringHelperTest(); //String sep = "\\"; for (int i = 0; i < myDocs.length; i++) { String path = myPath + File.separator + myDocs[i]; log.info("Testing XML file:" + path); Document document = XmlUtil.readDocument(myPath + File.separator + myDocs[i]); if (document == null) log.info("DOCUMENT IS NULL"); if (document != null) log.info("DOCUMENT EXISTS."); log.info("Created doc."); ItemFacade it = ah.createImportedItem(document); log.info("Created item: " + it.getItemTextArray()); } } /** * copy of method in AuthoringHelper with persistence turned off. * Import an XML document in QTI format, extract and persist the data. * @param document the document * @return a persisted assessment */ public AssessmentFacade createImportedAssessment(Document document) { // if(log.isDebugEnabled()) // { log.info( // log.debug( document==null? "DOCUMENT IS NULL IN createPublishedAssessment( Document)": "createPublishedAssessment(Document)"); // } // AssessmentFacade assessment = null; AssessmentFacade assessment = new AssessmentFacade(); try { // create the assessment, later we'll add tests of 2.0 ExtractionHelper exHelper = new ExtractionHelper(QTIVersion.VERSION_1_2); exHelper.setOverridePath(xslPath); // we need to know who we are String me = "admin";//AgentFacade.getAgentString(); // AssessmentService assessmentService = new AssessmentService(); // ItemService itemService = new ItemService(); Assessment assessmentXml = new Assessment(document); Map assessmentMap = exHelper.mapAssessment(assessmentXml); assessment = new AssessmentFacade();//exHelper.createAssessment(assessmentMap); // update the remaining assessment properties exHelper.updateAssessment(assessment, assessmentMap); // make sure required fields are set assessment.setCreatedBy(me); assessment.setCreatedDate(assessment.getCreatedDate()); assessment.setLastModifiedBy(me); assessment.setLastModifiedDate(assessment.getCreatedDate()); assessment.setTypeId(TypeIfc.QUIZ); assessment.setStatus(Integer.valueOf(1)); // process each section and each item within each section List sectionList = exHelper.getSectionXmlList(assessmentXml); // log.debug("found: " + sectionList.size() + "sections"); log.debug("sections=" + sectionList.size()); for (int sec = 0; sec < sectionList.size(); sec++)// for each section... { Section sectionXml =(Section) sectionList.get(sec); Map sectionMap = exHelper.mapSection(sectionXml); log.debug("SECTION MAP=" + sectionMap); // create the assessment section SectionFacade section = new SectionFacade(); // assessmentService.addSection("" + assessment.getAssessmentId()); exHelper.updateSection(section, sectionMap); // make sure we are the creator log.debug("section " + section.getTitle() + "created by '" + me+ "'."); section.setCreatedBy(me); section.setCreatedDate(assessment.getCreatedDate()); section.setLastModifiedBy(me); section.setLastModifiedDate(assessment.getCreatedDate()); section.setTypeId(TypeIfc.DEFAULT_SECTION); section.setStatus(Integer.valueOf(1)); // set the sequence section.setSequence(Integer.valueOf(sec + 1)); // // add the section to the assessment // section.setAssessmentId(assessment.getAssessmentId());//many to one // section.setAssessment(assessment); // assessment.getSectionArray().add(section);// one to many List itemList = exHelper.getItemXmlList(sectionXml); for (int itm = 0; itm < itemList.size(); itm++)// for each item { log.debug("items=" + itemList.size()); Item itemXml = (Item) itemList.get(itm); Map itemMap = exHelper.mapItem(itemXml); log.debug("ITEM MAP=" + itemMap); ItemFacade item = new ItemFacade(); exHelper.updateItem(item, itemMap); // make sure required fields are set item.setCreatedBy(me); item.setCreatedDate(assessment.getCreatedDate()); item.setLastModifiedBy(me); item.setLastModifiedDate(assessment.getCreatedDate()); log.debug("ITEM TYPE IS: " +item.getTypeId()); item.setStatus(ItemDataIfc.ACTIVE_STATUS); // assign the next sequence number item.setSequence(Integer.valueOf(itm + 1)); // add item to section item.setSection(section);// one to many section.addItem(item);// many to one // itemService.saveItem(item); // debugging // Set metaSet = item.getItemMetaDataSet(); // Iterator iter = metaSet.iterator(); // if (log.isDebugEnabled()) // { // while (iter.hasNext()) // { // ItemMetaData meta = (ItemMetaData) iter.next(); // log.debug("ITEM DEBUG meta " + meta.getLabel() + // "=" + meta.getEntry()); // } // } log.debug("ITEM: ans key" + item.getAnswerKey() ); log.debug("ITEM: correct feed" + item.getCorrectItemFeedback() ); log.debug("ITEM: incorrect feed " + item.getInCorrectItemFeedback() ); log.debug("ITEM: by " + item.getCreatedBy() ); log.debug("ITEM: date" + item.getCreatedDate() ); log.debug("ITEM: desc " + item.getDescription() ); log.debug("ITEM: duration" + item.getDuration() ); log.debug("ITEM: general feed " + item.getGeneralItemFeedback() ); log.debug("ITEM: incorrect " + item.getInCorrectItemFeedback() ); log.debug("ITEM: is true " + item.getIsTrue() ); log.debug("ITEM DEBUG item text" + item.getText() ); log.debug("ITEM: item text" + item.getText() ); }// ... end for each item }// ... end for each section log.debug("assessment created by '" + assessment.getCreatedBy() + "'."); // assessmentService.update(assessment); // debugging log.debug("ASSESSMENT: meta " + assessment.getAssessmentMetaDataMap()); log.debug("ASSESSMENT: feed " + assessment.getAssessmentFeedback()); log.debug("ASSESSMENT: comments " + assessment.getComments()); log.debug("ASSESSMENT: by " + assessment.getCreatedBy()); log.debug("ASSESSMENT: by date " + assessment.getCreatedDate()); log.debug("ASSESSMENT: desc" + assessment.getDescription()); log.debug("ASSESSMENT: disp " + assessment.getDisplayName()); log.debug("ASSESSMENT: last by " + assessment.getLastModifiedBy()); log.debug("ASSESSMENT: last date" + assessment.getLastModifiedDate()); log.debug("ASSESSMENT: mult " + assessment.getMultipartAllowed()); log.debug("ASSESSMENT: title " + assessment.getTitle()); log.debug("ASSESSMENT DEBUG title " + assessment.getTitle()); // assessmentService.saveAssessment(assessment); } catch(RuntimeException e) { log.error(e.getMessage(), e); throw new RuntimeException(e); } return assessment; } /** * Version of method in AuthoringHelper, but with persistence disabled. * Import an item XML document in QTI format, extract & persist the data. * @param document the item XML document in QTI format * @return a persisted assessment */ public ItemFacade createImportedItem(Document document) { log.debug( document==null? "DOCUMENT IS NULL IN createImportedItem(Document)": "createImportedItem(Document)"); ItemFacade item = new ItemFacade(); try { // create the item ExtractionHelper exHelper = new ExtractionHelper(QTIVersion.VERSION_1_2); exHelper.setOverridePath(xslPath); log.info("XSLT Path: " + exHelper.getTransformPath()); Item itemXml = new Item(document, QTIVersion.VERSION_1_2); Map itemMap = exHelper.mapItem(itemXml); // log.debug("ITEM MAP=" + itemMap); exHelper.updateItem(item, itemMap); //ItemService itemService = new ItemService(); log.info("updating item"); // itemService.saveItem(item); } catch(Exception e) { // log.error(e.getMessage(), e); e.printStackTrace(); } return item; } }