Index: lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/model/SurveyUser.java
===================================================================
RCS file: /usr/local/cvsroot/lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/model/SurveyUser.java,v
diff -u -r1.6 -r1.7
--- lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/model/SurveyUser.java	28 Oct 2014 23:23:27 -0000	1.6
+++ lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/model/SurveyUser.java	7 Jun 2015 06:57:59 -0000	1.7
@@ -73,7 +73,18 @@
 	this.survey = content;
 	this.responseFinalized = false;
     }
+    
+    public SurveyUser(Long userId, String firstName, String lastName, String login, Survey content) {
+	this.userId = userId;
+	this.firstName = firstName;
+	this.lastName = lastName;
+	this.loginName = login;
+	this.session = null;
+	this.survey = content;
+	this.responseFinalized = false;
+    }
 
+
     /**
      * Clone method from java.lang.Object
      */
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.40 -r1.41
--- lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/service/SurveyServiceImpl.java	14 Apr 2015 20:59:55 -0000	1.40
+++ lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/service/SurveyServiceImpl.java	7 Jun 2015 06:57:59 -0000	1.41
@@ -42,14 +42,20 @@
 
 import org.apache.commons.lang.StringUtils;
 import org.apache.log4j.Logger;
+import org.apache.tomcat.util.json.JSONArray;
+import org.apache.tomcat.util.json.JSONException;
+import org.apache.tomcat.util.json.JSONObject;
 import org.lamsfoundation.lams.events.IEventNotificationService;
 import org.lamsfoundation.lams.learning.service.ILearnerService;
+import org.lamsfoundation.lams.learningdesign.TextSearchConditionComparator;
 import org.lamsfoundation.lams.learningdesign.service.ExportToolContentException;
 import org.lamsfoundation.lams.learningdesign.service.IExportToolContentService;
 import org.lamsfoundation.lams.learningdesign.service.ImportToolContentException;
 import org.lamsfoundation.lams.notebook.model.NotebookEntry;
 import org.lamsfoundation.lams.notebook.service.CoreNotebookConstants;
 import org.lamsfoundation.lams.notebook.service.ICoreNotebookService;
+import org.lamsfoundation.lams.rest.RestTags;
+import org.lamsfoundation.lams.rest.ToolRestManager;
 import org.lamsfoundation.lams.tool.ToolContentImport102Manager;
 import org.lamsfoundation.lams.tool.ToolContentManager;
 import org.lamsfoundation.lams.tool.ToolOutput;
@@ -83,6 +89,7 @@
 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.JsonUtil;
 import org.lamsfoundation.lams.util.MessageService;
 import org.lamsfoundation.lams.util.WebUtil;
 import org.lamsfoundation.lams.util.wddx.WDDXProcessor;
@@ -92,7 +99,7 @@
  * @author Dapeng.Ni
  */
 public class SurveyServiceImpl implements ISurveyService, ToolContentManager, ToolSessionManager,
-	ToolContentImport102Manager {
+	ToolContentImport102Manager, ToolRestManager {
     private static Logger log = Logger.getLogger(SurveyServiceImpl.class.getName());
 
     // DAO
@@ -696,13 +703,8 @@
 	    SurveyUser user = surveyUserDao
 		    .getUserByUserIDAndContentID(new Long(newUserUid.longValue()), toolContentId);
 	    if (user == null) {
-		user = new SurveyUser();
 		UserDTO sysUser = ((User) userManagementService.findById(User.class, newUserUid)).getUserDTO();
-		user.setFirstName(sysUser.getFirstName());
-		user.setLastName(sysUser.getLastName());
-		user.setLoginName(sysUser.getLogin());
-		user.setUserId(new Long(newUserUid.longValue()));
-		user.setSurvey(toolContentObj);
+		user = new SurveyUser(sysUser, toolContentObj);
 	    }
 	    toolContentObj.setCreatedBy(user);
 
@@ -1124,4 +1126,81 @@
     public void setSurveyOutputFactory(SurveyOutputFactory surveyOutputFactory) {
 	this.surveyOutputFactory = surveyOutputFactory;
     }
+    
+    // ****************** REST methods *************************
+
+    /**
+     * Used by the Rest calls to create content.
+     * 
+     * Mandatory fields in toolContentJSON: title, instructions, questions. Optional fields are lockWhenFinished
+     * (default true), showOnePage (default true), notifyTeachersOnAnswerSumbit (default false), showOtherUsersAnswers
+     * (default false), reflectOnActivity, reflectInstructions, submissionDeadline
+     * 
+     * Questions must contain a JSONArray of JSONObject objects, which have the following mandatory fields:
+     * questionText, type (1=one answer,2=multiple answers,3=free text entry) and answers. Answers is a JSONArray of
+     * strings, which are the answer text. A question may also have the optional fields: allowOtherTextEntry (default
+     * false), required (default true)
+     * 
+     * There should be at least one question object in the Questions array and at least one option in the Options array.
+     */
+    @Override
+    public void createRestToolContent(Integer userID, Long toolContentID, JSONObject toolContentJSON)
+	    throws JSONException {
+
+	Survey survey = new Survey();
+	Date updateDate = new Date();
+	survey.setCreated(updateDate);
+	survey.setUpdated(updateDate);
+
+	survey.setContentId(toolContentID);
+	survey.setTitle(toolContentJSON.getString(RestTags.TITLE));
+	survey.setInstructions(toolContentJSON.getString(RestTags.INSTRUCTIONS));
+
+	survey.setContentInUse(false);
+	survey.setDefineLater(false);
+	survey.setLockWhenFinished(JsonUtil.opt(toolContentJSON, RestTags.LOCK_WHEN_FINISHED, Boolean.TRUE));
+	survey.setReflectInstructions((String) JsonUtil.opt(toolContentJSON, RestTags.REFLECT_INSTRUCTIONS, null));
+	survey.setReflectOnActivity(JsonUtil.opt(toolContentJSON, RestTags.REFLECT_ON_ACTIVITY, Boolean.FALSE));
+	survey.setSubmissionDeadline((Date) JsonUtil.opt(toolContentJSON, RestTags.SUBMISSION_DEADLINE, null));
+	survey.setNotifyTeachersOnAnswerSumbit(JsonUtil.opt(toolContentJSON, "notifyTeachersOnAnswerSumbit", Boolean.FALSE));
+	survey.setShowOnePage(JsonUtil.opt(toolContentJSON, "showOnePage", Boolean.TRUE));
+	survey.setShowOtherUsersAnswers(JsonUtil.opt(toolContentJSON, "showOtherUsersAnswers", Boolean.FALSE));
+
+	SurveyUser surveyUser = new SurveyUser(userID.longValue(), toolContentJSON.getString("firstName"),
+		toolContentJSON.getString("lastName"), toolContentJSON.getString("loginName"), survey);
+	survey.setCreatedBy(surveyUser);
+
+	// **************************** Handle Survey Questions *********************
+
+	JSONArray questions = toolContentJSON.getJSONArray(RestTags.QUESTIONS);
+	for (int i = 0; i < questions.length(); i++) {
+	    JSONObject questionData = (JSONObject) questions.get(i);
+	    SurveyQuestion newQuestion = new SurveyQuestion();
+	    newQuestion.setCreateBy(surveyUser);
+	    newQuestion.setCreateDate(updateDate);
+	    newQuestion.setDescription(questionData.getString(RestTags.QUESTION_TEXT));
+	    newQuestion.setType((short) questionData.getInt("type"));
+	    newQuestion.setAppendText(JsonUtil.opt(questionData, "allowOtherTextEntry", Boolean.FALSE));
+	    Boolean required = JsonUtil.opt(questionData, "required", Boolean.TRUE);
+	    newQuestion.setOptional(!required);
+	    newQuestion.setSequenceId(i + 1); // sequence number starts at 1
+
+	    Set newOptions = new HashSet();
+	    JSONArray options = questionData.getJSONArray(RestTags.ANSWERS);
+	    for (int j = 0; j < options.length(); j++) {
+		SurveyOption newOption = new SurveyOption();
+		newOption.setDescription(options.getString(j));
+		newOption.setSequenceId(j); // sequence number starts at 0
+		newOptions.add(newOption);
+	    }
+	    newQuestion.setOptions(newOptions);
+
+	    survey.getQuestions().add(newQuestion);
+	}
+
+	saveOrUpdateSurvey(survey);
+	// *******************************
+	// TODO - investigate conditions
+	// survey.setConditions(conditions);
+    }
 }
\ No newline at end of file