Index: lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/service/ScribeService.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/service/ScribeService.java,v diff -u -r1.5 -r1.6 --- lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/service/ScribeService.java 2 Oct 2006 04:54:12 -0000 1.5 +++ lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/service/ScribeService.java 4 Oct 2006 00:13:34 -0000 1.6 @@ -78,6 +78,8 @@ import org.lamsfoundation.lams.tool.service.ILamsToolService; import org.lamsfoundation.lams.usermanagement.dto.UserDTO; import org.lamsfoundation.lams.util.audit.IAuditService; +import org.lamsfoundation.lams.util.wddx.WDDXProcessor; +import org.lamsfoundation.lams.util.wddx.WDDXProcessorConversionException; /** * An implementation of the IScribeService interface. @@ -238,9 +240,11 @@ public void exportToolContent(Long toolContentId, String rootPath) throws DataMissingException, ToolException { Scribe scribe = scribeDAO.getByContentId(toolContentId); + if (scribe == null) { + scribe = getDefaultContent(); + } if (scribe == null) - throw new DataMissingException( - "Unable to find tool content by given id :" + toolContentId); + throw new DataMissingException("Unable to find default content for the scribe tool"); // set ResourceToolContentHandler as null to avoid copy file node in // repository again. @@ -595,7 +599,7 @@ scribe.setCreateBy(new Long(user.getUserID().longValue())); scribe.setCreateDate(now); scribe.setDefineLater(Boolean.FALSE); - scribe.setInstructions((String)importValues.get(ToolContentImport102Manager.CONTENT_BODY)); + scribe.setInstructions(null); scribe.setOfflineInstructions(null); scribe.setOnlineInstructions(null); scribe.setReflectInstructions(null); @@ -604,6 +608,30 @@ scribe.setTitle((String)importValues.get(ToolContentImport102Manager.CONTENT_TITLE)); scribe.setToolContentId(toolContentId); scribe.setUpdateDate(now); + scribe.setAutoSelectScribe(true); + + try { + Boolean isReusable = WDDXProcessor.convertToBoolean(importValues, ToolContentImport102Manager.CONTENT_REUSABLE); + scribe.setLockOnFinished(isReusable != null ? ! isReusable.booleanValue() : true); + } catch (WDDXProcessorConversionException e) { + logger.error("Unable to content for activity "+scribe.getTitle()+"properly due to a WDDXProcessorConversionException.",e); + throw new ToolException("Invalid import data format for activity "+scribe.getTitle()+"- WDDX caused an exception. Some data from the design will have been lost. See log for more details."); + } + + String headingList = (String)importValues.get(ToolContentImport102Manager.CONTENT_BODY); + if (headingList != null && headingList.length()>0) { + String[] headings = headingList.split("\\^"); + Set set = new HashSet(); + for (int i=0; i < headings.length ; i++) { + ScribeHeading sHeading = new ScribeHeading(); + sHeading.setDisplayOrder(i); + sHeading.setHeadingText(headings[i]); + sHeading.setScribe(scribe); + set.add(sHeading); + } + scribe.setScribeHeadings(set); + } + // leave as empty, no need to set them to anything. //setScribeAttachments(Set scribeAttachments); //setScribeSessions(Set scribeSessions); Index: lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/service/SurveyServiceImpl.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/service/SurveyServiceImpl.java,v diff -u -r1.10 -r1.11 --- lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/service/SurveyServiceImpl.java 28 Sep 2006 05:44:04 -0000 1.10 +++ lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/service/SurveyServiceImpl.java 4 Oct 2006 00:13:18 -0000 1.11 @@ -86,19 +86,15 @@ import org.lamsfoundation.lams.tool.survey.util.QuestionsComparator; import org.lamsfoundation.lams.tool.survey.util.SurveySessionComparator; import org.lamsfoundation.lams.tool.survey.util.SurveyToolContentHandler; -import org.lamsfoundation.lams.tool.survey.util.SurveyUserComparator; import org.lamsfoundation.lams.tool.survey.util.SurveyWebUtils; import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.usermanagement.dto.UserDTO; import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; import org.lamsfoundation.lams.util.MessageService; -import org.lamsfoundation.lams.util.WebUtil; import org.lamsfoundation.lams.util.audit.IAuditService; import org.lamsfoundation.lams.util.wddx.WDDXProcessor; import org.lamsfoundation.lams.util.wddx.WDDXProcessorConversionException; -import sun.reflect.generics.tree.Tree; - /** * * @author Dapeng.Ni @@ -614,8 +610,15 @@ public void exportToolContent(Long toolContentId, String rootPath) throws DataMissingException, ToolException { Survey toolContentObj = surveyDao.getByContentId(toolContentId); + if(toolContentObj == null) { + try { + toolContentObj = getDefaultSurvey(); + } catch (SurveyApplicationException e) { + throw new DataMissingException(e.getMessage()); + } + } if(toolContentObj == null) - throw new DataMissingException("Unable to find tool content by given id :" + toolContentId); + throw new DataMissingException("Unable to find default content for the survey tool"); //set SurveyToolContentHandler as null to avoid copy file node in repository again. toolContentObj = Survey.newInstance(toolContentObj,toolContentId,null); @@ -770,6 +773,73 @@ /* ===============Methods implemented from ToolContentImport102Manager =============== */ + /* Sample content for import: + * + content + 34.0 + + + 1.0 + + Sample Multiple choice - only one response allowed? + simpleChoice + + + + 1.0 + Option 1 + + + 2.0 + Option 2 + + + 3.0 + Option 3 + + + + + 2.0 + + Sample Multiple choice - multiple response allowed? + choiceMultiple + + + + 1.0 + Option 1 + + 2.0 + Option 2 + + 3.0 + Option 3 + + + + + 3.0 + + Sample Free text question? + textEntry + + + + + + Put instructions here. + + + Thank you for your participation! xxxxxxxxxx + Put Title Here + Survey Questions + surveycontent + + + 31.0 + */ + /** * Import the data for a 1.0.2 Noticeboard or HTMLNoticeboard */ @@ -790,7 +860,8 @@ toolContentObj.setRunOffline(Boolean.FALSE); toolContentObj.setUpdated(now); - toolContentObj.setLockWhenFinished(Boolean.FALSE); + Boolean isReusable = WDDXProcessor.convertToBoolean(importValues, ToolContentImport102Manager.CONTENT_REUSABLE); + toolContentObj.setLockWhenFinished(isReusable != null ? ! isReusable.booleanValue() : true); SurveyUser ruser = new SurveyUser(); ruser.setUserId(new Long(user.getUserID().longValue())); @@ -801,35 +872,64 @@ toolContentObj.setCreatedBy(ruser); //survey questions - Vector urls = (Vector) importValues.get(ToolContentImport102Manager.CONTENT_URL_URLS); - if ( urls != null ) { - Iterator iter = urls.iterator(); + toolContentObj.setQuestions(new HashSet()); + + Vector questions = (Vector) importValues.get(ToolContentImport102Manager.CONTENT_SURVEY_QUESTIONS); + if ( questions != null ) { + int dummySequenceNumber = questions.size(); // dummy number in case we can't convert question order + Iterator iter = questions.iterator(); while ( iter.hasNext() ) { - Hashtable urlMap = (Hashtable) iter.next(); + Hashtable questionMap = (Hashtable) iter.next(); SurveyQuestion item = new SurveyQuestion(); item.setCreateDate(now); item.setCreateBy(ruser); - - Vector instructions = (Vector) urlMap.get(ToolContentImport102Manager.CONTENT_URL_URL_INSTRUCTION_ARRAY); - if ( instructions != null && instructions.size() > 0 ) { + + // try to set the type from the map. if that doesn't work then assume it is a text entry + String surveyType = (String) questionMap.get(ToolContentImport102Manager.CONTENT_SURVEY_QUESTION_TYPE); + if ( ToolContentImport102Manager.CONTENT_SURVEY_TYPE_SINGLE.equals(surveyType)) { + item.setType((short)1); + item.setAllowMultipleAnswer(false); + } + else if ( ToolContentImport102Manager.CONTENT_SURVEY_TYPE_MULTIPLE.equals(surveyType)) { + item.setType((short)2); + item.setAllowMultipleAnswer(true); + } else { + item.setType((short)3); + item.setAllowMultipleAnswer(false); + } + + Integer order = WDDXProcessor.convertToInteger(questionMap, ToolContentImport102Manager.CONTENT_SURVEY_ORDER); + item.setSequenceId(order!=null?order.intValue():dummySequenceNumber++); + + item.setDescription((String)questionMap.get(ToolContentImport102Manager.CONTENT_SURVEY_QUESTION)); + + // completion message purposely not supported in 2.0, so value can be dropped. + + Boolean appendText = WDDXProcessor.convertToBoolean(questionMap, ToolContentImport102Manager.CONTENT_SURVEY_TEXTBOX_ENABLED); + item.setAppendText(appendText != null ? appendText.booleanValue() : false); + + Boolean isOptional = WDDXProcessor.convertToBoolean(questionMap, ToolContentImport102Manager.CONTENT_SURVEY_OPTIONAL); + item.setOptional(isOptional != null ? isOptional.booleanValue() : false); + + Vector candidates = (Vector) questionMap.get(ToolContentImport102Manager.CONTENT_SURVEY_CANDIDATES); + if ( candidates != null && candidates.size() > 0 ) { item.setOptions(new HashSet()); - Iterator insIter = instructions.iterator(); - while (insIter.hasNext()) { - Hashtable instructionEntry = (Hashtable) insIter.next(); - String instructionText = (String) instructionEntry.get(ToolContentImport102Manager.CONTENT_URL_INSTRUCTION); - Integer order = WDDXProcessor.convertToInteger(instructionEntry, ToolContentImport102Manager.CONTENT_URL_URL_VIEW_ORDER); - SurveyOption instruction = new SurveyOption(); - instruction.setDescription(instructionText); - instruction.setSequenceId(order); - item.getOptions().add(instruction); + int dummyCandidateOrder = candidates.size(); // dummy number in case we can't convert question order + Iterator candIter = candidates.iterator(); + while (candIter.hasNext()) { + Hashtable candidateEntry = (Hashtable) candIter.next(); + String candidateText = (String) candidateEntry.get(ToolContentImport102Manager.CONTENT_SURVEY_ANSWER); + Integer candidateOrder = WDDXProcessor.convertToInteger(candidateEntry, ToolContentImport102Manager.CONTENT_SURVEY_ORDER); + + SurveyOption option = new SurveyOption(); + option.setDescription(candidateText); + option.setSequenceId(candidateOrder != null ? candidateOrder.intValue() : dummyCandidateOrder++); + item.getOptions().add(option); } } - String surveyType = (String) urlMap.get(ToolContentImport102Manager.CONTENT_URL_URL_TYPE); - - // TODO add the order field - no support for it in forum at present. - // public static final String CONTENT_URL_URL_VIEW_ORDER = "order"; + toolContentObj.getQuestions().add(item); } }