Search in sources :

Example 11 with CourseEditorTreeNode

use of org.olat.course.tree.CourseEditorTreeNode in project OpenOLAT by OpenOLAT.

the class CourseEditorEnvImpl method existsNode.

/**
 * @see org.olat.course.editor.CourseEditorEnv#existsNode(java.lang.String)
 */
public boolean existsNode(String nodeId) {
    CourseEditorTreeNode cen = cetm.getCourseEditorNodeById(nodeId);
    boolean retVal = cen != null && !cen.isDeleted();
    return retVal;
}
Also used : CourseEditorTreeNode(org.olat.course.tree.CourseEditorTreeNode)

Example 12 with CourseEditorTreeNode

use of org.olat.course.tree.CourseEditorTreeNode in project OpenOLAT by OpenOLAT.

the class CourseEditorEnvImpl method checkFolderNodes.

private List<StatusDescription> checkFolderNodes(INode rootNode, ICourse course, List<StatusDescription> descriptions) {
    List<StatusDescription> descriptionsI = descriptions;
    Visitor visitor = new Visitor() {

        @Override
        public void visit(INode node) {
            CourseEditorTreeNode courseNode = (CourseEditorTreeNode) course.getEditorTreeModel().getNodeById(node.getIdent());
            if (!courseNode.isDeleted() && courseNode.getCourseNode() instanceof BCCourseNode) {
                BCCourseNode bcNode = (BCCourseNode) courseNode.getCourseNode();
                if (bcNode.isSharedFolder()) {
                    String translPackage = Util.getPackageName(BCCourseNodeEditController.class);
                    StatusDescription status = new StatusDescription(StatusDescription.ERROR, "warning.no.sharedfolder", "warning.no.sharedfolder", null, translPackage);
                    status.setDescriptionForUnit(bcNode.getIdent());
                    // set which pane is affected by error
                    status.setActivateableViewIdentifier(BCCourseNodeEditController.PANE_TAB_FOLDER);
                    descriptionsI.add(status);
                }
            }
        }
    };
    TreeVisitor v = new TreeVisitor(visitor, rootNode, false);
    v.visitAll();
    return descriptionsI;
}
Also used : TreeVisitor(org.olat.core.util.tree.TreeVisitor) INode(org.olat.core.util.nodes.INode) BCCourseNode(org.olat.course.nodes.BCCourseNode) TreeVisitor(org.olat.core.util.tree.TreeVisitor) Visitor(org.olat.core.util.tree.Visitor) CourseEditorTreeNode(org.olat.course.tree.CourseEditorTreeNode)

Example 13 with CourseEditorTreeNode

use of org.olat.course.tree.CourseEditorTreeNode in project OpenOLAT by OpenOLAT.

the class CoursesElementsTest method testCreateCoursePut.

@Test
public void testCreateCoursePut() throws IOException, URISyntaxException {
    assertTrue(conn.login("administrator", "openolat"));
    // create an empty course
    URI uri = getCoursesUri().queryParam("shortTitle", "course3").queryParam("title", "course3 long name").build();
    HttpPut method = conn.createPut(uri, MediaType.APPLICATION_JSON, true);
    HttpResponse response = conn.execute(method);
    assertEquals(200, response.getStatusLine().getStatusCode());
    CourseVO course = conn.parse(response, CourseVO.class);
    assertNotNull(course);
    assertNotNull(course.getKey());
    assertNotNull(course.getEditorRootNodeId());
    try {
        ICourse savedCourse = CourseFactory.loadCourse(course.getKey());
        assertNotNull(savedCourse);
    } catch (Exception e) {
        assertTrue(false);
    }
    // create a learning group
    GroupVO groupVo = new GroupVO();
    groupVo.setName("hello");
    groupVo.setDescription("hello description");
    groupVo.setMinParticipants(new Integer(-1));
    groupVo.setMaxParticipants(new Integer(-1));
    URI newGroupUri = getCoursesUri().path(course.getKey().toString()).path("groups").build();
    HttpPut newGrpMethod = conn.createPut(newGroupUri, MediaType.APPLICATION_JSON, true);
    conn.addJsonEntity(newGrpMethod, groupVo);
    HttpResponse newGrpCode = conn.execute(newGrpMethod);
    assertEquals(200, newGrpCode.getStatusLine().getStatusCode());
    GroupVO group = conn.parse(newGrpCode, GroupVO.class);
    assertNotNull(group);
    assertNotNull(group.getKey());
    // create an structure node
    URI newStructureUri = getElementsUri(course).path("structure").queryParam("parentNodeId", course.getEditorRootNodeId()).queryParam("position", "0").queryParam("shortTitle", "Structure-0").queryParam("longTitle", "Structure-long-0").queryParam("objectives", "Structure-objectives-0").build();
    HttpPut newStructureMethod = conn.createPut(newStructureUri, MediaType.APPLICATION_JSON, true);
    HttpResponse newStructureCode = conn.execute(newStructureMethod);
    assertTrue(newStructureCode.getStatusLine().getStatusCode() == 200 || newStructureCode.getStatusLine().getStatusCode() == 201);
    CourseNodeVO structureNode = conn.parse(newStructureCode, CourseNodeVO.class);
    assertNotNull(structureNode);
    assertNotNull(structureNode.getId());
    assertEquals(structureNode.getShortTitle(), "Structure-0");
    assertEquals(structureNode.getLongTitle(), "Structure-long-0");
    assertEquals(structureNode.getLearningObjectives(), "Structure-objectives-0");
    assertEquals(structureNode.getParentId(), course.getEditorRootNodeId());
    // create single page
    URL pageUrl = CoursesElementsTest.class.getResource("singlepage.html");
    assertNotNull(pageUrl);
    File page = new File(pageUrl.toURI());
    URI newPageUri = getElementsUri(course).path("singlepage").build();
    HttpPut newPageMethod = conn.createPut(newPageUri, MediaType.APPLICATION_JSON, true);
    HttpEntity newPageEntity = MultipartEntityBuilder.create().setMode(HttpMultipartMode.BROWSER_COMPATIBLE).addBinaryBody("file", page, ContentType.APPLICATION_OCTET_STREAM, page.getName()).addTextBody("filename", page.getName()).addTextBody("parentNodeId", course.getEditorRootNodeId()).addTextBody("position", "1").addTextBody("shortTitle", "Single-Page-0").addTextBody("longTitle", "Single-Page-long-0").addTextBody("objectives", "Single-Page-objectives-0").build();
    newPageMethod.setEntity(newPageEntity);
    HttpResponse newPageCode = conn.execute(newPageMethod);
    assertTrue(newPageCode.getStatusLine().getStatusCode() == 200 || newPageCode.getStatusLine().getStatusCode() == 201);
    CourseNodeVO pageNode = conn.parse(newPageCode, CourseNodeVO.class);
    assertNotNull(pageNode);
    assertNotNull(pageNode.getId());
    assertEquals(pageNode.getShortTitle(), "Single-Page-0");
    assertEquals(pageNode.getLongTitle(), "Single-Page-long-0");
    assertEquals(pageNode.getLearningObjectives(), "Single-Page-objectives-0");
    assertEquals(structureNode.getParentId(), course.getEditorRootNodeId());
    // create a folder node
    URI newFolderUri = getElementsUri(course).path("folder").queryParam("parentNodeId", course.getEditorRootNodeId()).queryParam("position", "2").queryParam("shortTitle", "Folder-0").queryParam("longTitle", "Folder-long-0").queryParam("objectives", "Folder-objectives-0").build();
    HttpPut newFolderMethod = conn.createPut(newFolderUri, MediaType.APPLICATION_JSON, true);
    HttpResponse newFolderCode = conn.execute(newFolderMethod);
    assertTrue(newFolderCode.getStatusLine().getStatusCode() == 200 || newFolderCode.getStatusLine().getStatusCode() == 201);
    CourseNodeVO folderNode = conn.parse(newFolderCode, CourseNodeVO.class);
    assertNotNull(folderNode);
    assertNotNull(folderNode.getId());
    assertEquals(folderNode.getShortTitle(), "Folder-0");
    assertEquals(folderNode.getLongTitle(), "Folder-long-0");
    assertEquals(folderNode.getLearningObjectives(), "Folder-objectives-0");
    assertEquals(folderNode.getParentId(), course.getEditorRootNodeId());
    // create a forum node
    URI newForumUri = getElementsUri(course).path("forum").queryParam("parentNodeId", course.getEditorRootNodeId()).queryParam("position", "3").queryParam("shortTitle", "Forum-0").queryParam("longTitle", "Forum-long-0").queryParam("objectives", "Forum-objectives-0").build();
    HttpPut newForumMethod = conn.createPut(newForumUri, MediaType.APPLICATION_JSON, true);
    HttpResponse newForumCode = conn.execute(newForumMethod);
    assertTrue(newForumCode.getStatusLine().getStatusCode() == 200 || newForumCode.getStatusLine().getStatusCode() == 201);
    CourseNodeVO forumNode = conn.parse(newForumCode, CourseNodeVO.class);
    assertNotNull(forumNode);
    assertNotNull(forumNode.getId());
    assertEquals(forumNode.getShortTitle(), "Forum-0");
    assertEquals(forumNode.getLongTitle(), "Forum-long-0");
    assertEquals(forumNode.getLearningObjectives(), "Forum-objectives-0");
    assertEquals(forumNode.getParentId(), course.getEditorRootNodeId());
    // create a task node
    URI newTaskUri = getElementsUri(course).path("task").queryParam("parentNodeId", course.getEditorRootNodeId()).queryParam("position", "4").queryParam("shortTitle", "Task-0").queryParam("longTitle", "Task-long-0").queryParam("objectives", "Task-objectives-0").queryParam("points", "25").queryParam("text", "A very difficult test").build();
    HttpPut newTaskMethod = conn.createPut(newTaskUri, MediaType.APPLICATION_JSON, true);
    HttpResponse newTaskCode = conn.execute(newTaskMethod);
    assertTrue(newTaskCode.getStatusLine().getStatusCode() == 200 || newTaskCode.getStatusLine().getStatusCode() == 201);
    CourseNodeVO taskNode = conn.parse(newTaskCode, CourseNodeVO.class);
    assertNotNull(taskNode);
    assertNotNull(taskNode.getId());
    assertEquals(taskNode.getShortTitle(), "Task-0");
    assertEquals(taskNode.getLongTitle(), "Task-long-0");
    assertEquals(taskNode.getLearningObjectives(), "Task-objectives-0");
    assertEquals(taskNode.getParentId(), course.getEditorRootNodeId());
    // add task configuration
    URI taskConfigUri = getElementsUri(course).path("task/" + taskNode.getId() + "/configuration").queryParam("enableAssignment", Boolean.FALSE).queryParam("enableScoring", Boolean.TRUE).queryParam("grantScoring", Boolean.TRUE).queryParam("scoreMin", new Float(1.5)).queryParam("scoreMax", 10).build();
    HttpPut taskConfigMethod = conn.createPut(taskConfigUri, MediaType.APPLICATION_JSON, true);
    HttpResponse taskConfigCode = conn.execute(taskConfigMethod);
    assertTrue(taskConfigCode.getStatusLine().getStatusCode() == 200 || taskConfigCode.getStatusLine().getStatusCode() == 201);
    EntityUtils.consume(taskConfigCode.getEntity());
    HttpGet getTaskConfig = conn.createGet(taskConfigUri, MediaType.APPLICATION_JSON, true);
    taskConfigCode = conn.execute(getTaskConfig);
    assertTrue(taskConfigCode.getStatusLine().getStatusCode() == 200 || taskConfigCode.getStatusLine().getStatusCode() == 201);
    TaskConfigVO taskConfig = conn.parse(taskConfigCode, TaskConfigVO.class);
    assertNotNull(taskConfig);
    // default is true
    assertTrue(!taskConfig.getIsAssignmentEnabled());
    assertTrue(taskConfig.getIsScoringEnabled() & taskConfig.getIsScoringGranted());
    assertTrue(taskConfig.getMinScore().floatValue() == 1.5);
    assertTrue(taskConfig.getMaxScore().floatValue() == 10);
    // create an assessment node
    URI newAssessmentUri = getElementsUri(course).path("assessment").queryParam("parentNodeId", course.getEditorRootNodeId()).queryParam("position", "5").queryParam("shortTitle", "Assessment-0").queryParam("longTitle", "Assessment-long-0").queryParam("objectives", "Assessment-objectives-0").build();
    HttpPut newAssessmentMethod = conn.createPut(newAssessmentUri, MediaType.APPLICATION_JSON, true);
    HttpResponse newAssessmentCode = conn.execute(newAssessmentMethod);
    assertTrue(newAssessmentCode.getStatusLine().getStatusCode() == 200 || newAssessmentCode.getStatusLine().getStatusCode() == 201);
    CourseNodeVO assessmentNode = conn.parse(newAssessmentCode, CourseNodeVO.class);
    assertNotNull(assessmentNode);
    assertNotNull(assessmentNode.getId());
    assertEquals(assessmentNode.getShortTitle(), "Assessment-0");
    assertEquals(assessmentNode.getLongTitle(), "Assessment-long-0");
    assertEquals(assessmentNode.getLearningObjectives(), "Assessment-objectives-0");
    assertEquals(assessmentNode.getParentId(), course.getEditorRootNodeId());
    // create an contact node
    URI newContactUri = getElementsUri(course).path("contact").queryParam("parentNodeId", course.getEditorRootNodeId()).queryParam("position", "6").queryParam("shortTitle", "Contact-0").queryParam("longTitle", "Contact-long-0").queryParam("objectives", "Contact-objectives-0").build();
    HttpPut newContactMethod = conn.createPut(newContactUri, MediaType.APPLICATION_JSON, true);
    HttpResponse newContactCode = conn.execute(newContactMethod);
    assertEquals(200, newContactCode.getStatusLine().getStatusCode());
    CourseNodeVO contactNode = conn.parse(newContactCode, CourseNodeVO.class);
    assertNotNull(contactNode);
    assertNotNull(contactNode.getId());
    assertEquals(contactNode.getShortTitle(), "Contact-0");
    assertEquals(contactNode.getLongTitle(), "Contact-long-0");
    assertEquals(contactNode.getLearningObjectives(), "Contact-objectives-0");
    assertEquals(contactNode.getParentId(), course.getEditorRootNodeId());
    // try to create an invalid enrollment node
    URI newENUri = getElementsUri(course).path("enrollment").queryParam("parentNodeId", course.getEditorRootNodeId()).queryParam("position", "7").queryParam("shortTitle", "Enrollment-0").queryParam("longTitle", "Enrollment-long-0").queryParam("objectives", "Enrollment-objectives-0").build();
    HttpPut newENMethod = conn.createPut(newENUri, MediaType.APPLICATION_JSON, true);
    HttpResponse newENCode = conn.execute(newENMethod);
    assertEquals(406, newENCode.getStatusLine().getStatusCode());
    EntityUtils.consume(newENCode.getEntity());
    // create an enrollment node
    newENUri = getElementsUri(course).path("enrollment").queryParam("parentNodeId", course.getEditorRootNodeId()).queryParam("position", "7").queryParam("shortTitle", "Enrollment-0").queryParam("longTitle", "Enrollment-long-0").queryParam("objectives", "Enrollment-objectives-0").queryParam("groups", group.getKey().toString()).queryParam("cancelEnabled", "true").build();
    newENMethod = conn.createPut(newENUri, MediaType.APPLICATION_JSON, true);
    newENCode = conn.execute(newENMethod);
    assertEquals(200, newENCode.getStatusLine().getStatusCode());
    CourseNodeVO enNode = conn.parse(newENCode, CourseNodeVO.class);
    assertNotNull(enNode);
    assertNotNull(enNode.getId());
    assertEquals(enNode.getShortTitle(), "Enrollment-0");
    assertEquals(enNode.getLongTitle(), "Enrollment-long-0");
    assertEquals(enNode.getLearningObjectives(), "Enrollment-objectives-0");
    assertEquals(enNode.getParentId(), course.getEditorRootNodeId());
    // create a test node
    URL qtiDemoUrl = CoursesElementsTest.class.getResource("qti-demo.zip");
    assertNotNull(qtiDemoUrl);
    File qtiFile = new File(qtiDemoUrl.toURI());
    Assert.assertEquals(7518, qtiFile.length());
    URI repoEntriesUri = UriBuilder.fromUri(getContextURI()).path("repo/entries").build();
    HttpPut qtiRepoMethod = conn.createPut(repoEntriesUri, MediaType.APPLICATION_JSON, true);
    HttpEntity entity = MultipartEntityBuilder.create().setMode(HttpMultipartMode.BROWSER_COMPATIBLE).addBinaryBody("file", qtiFile, ContentType.APPLICATION_OCTET_STREAM, qtiFile.getName()).addTextBody("filename", "qti-demo.zip").addTextBody("resourcename", "QTI demo").addTextBody("displayname", "QTI demo").build();
    qtiRepoMethod.setEntity(entity);
    HttpResponse qtiRepoCode = conn.execute(qtiRepoMethod);
    int qtiHttpCode = qtiRepoCode.getStatusLine().getStatusCode();
    assertTrue(qtiHttpCode == 200 || qtiHttpCode == 201);
    RepositoryEntryVO newTestVO = conn.parse(qtiRepoCode, RepositoryEntryVO.class);
    assertNotNull(newTestVO);
    Long key = newTestVO.getKey();
    RepositoryEntry re = RepositoryManager.getInstance().lookupRepositoryEntry(key);
    assertNotNull(re);
    assertNotNull(re.getOlatResource());
    assertEquals("QTI demo", re.getDisplayname());
    URI newTestUri = getElementsUri(course).path("test").queryParam("parentNodeId", course.getEditorRootNodeId()).queryParam("position", "8").queryParam("shortTitle", "Test-0").queryParam("longTitle", "Test-long-0").queryParam("objectives", "Test-objectives-0").queryParam("testResourceableId", key).build();
    HttpPut newTestMethod = conn.createPut(newTestUri, MediaType.APPLICATION_JSON, true);
    HttpResponse newTestCode = conn.execute(newTestMethod);
    assertTrue(newTestCode.getStatusLine().getStatusCode() == 200 || newTestCode.getStatusLine().getStatusCode() == 201);
    CourseNodeVO testNode = conn.parse(newTestCode, CourseNodeVO.class);
    assertNotNull(testNode);
    assertNotNull(testNode.getId());
    assertEquals(testNode.getShortTitle(), "Test-0");
    assertEquals(testNode.getParentId(), course.getEditorRootNodeId());
    // configure test node
    URI testConfigUri = getElementsUri(course).path("test/" + testNode.getId() + "/configuration").queryParam("allowCancel", Boolean.TRUE).queryParam("allowNavigation", Boolean.TRUE).queryParam("allowSuspend", Boolean.TRUE).queryParam("numAttempts", 10).queryParam("sequencePresentation", AssessmentInstance.QMD_ENTRY_SEQUENCE_ITEM).queryParam("showNavigation", Boolean.TRUE).queryParam("showQuestionTitle", Boolean.TRUE).queryParam("showResultsAfterFinish", Boolean.TRUE).queryParam("showResultsDependendOnDate", Boolean.TRUE).queryParam("showResultsOnHomepage", key).queryParam("showScoreInfo", Boolean.TRUE).queryParam("showScoreProgress", Boolean.TRUE).queryParam("showSectionsOnly", Boolean.TRUE).queryParam("summaryPresentation", AssessmentInstance.QMD_ENTRY_SUMMARY_DETAILED).queryParam("startDate", // new Date(1280444400))
    new Long(1280444400)).queryParam("endDate", // new Date(1293667200))
    new Long(1293667200)).build();
    HttpPut testConfigMethod = conn.createPut(testConfigUri, MediaType.APPLICATION_JSON, true);
    HttpResponse testConfigCode = conn.execute(testConfigMethod);
    assertTrue(testConfigCode.getStatusLine().getStatusCode() == 200 || testConfigCode.getStatusLine().getStatusCode() == 201);
    EntityUtils.consume(testConfigCode.getEntity());
    HttpGet getTestConfig = conn.createGet(testConfigUri, MediaType.APPLICATION_JSON, true);
    testConfigCode = conn.execute(getTestConfig);
    assertTrue(testConfigCode.getStatusLine().getStatusCode() == 200 || testConfigCode.getStatusLine().getStatusCode() == 201);
    TestConfigVO testConfig = conn.parse(testConfigCode, TestConfigVO.class);
    assertTrue(testConfig.getNumAttempts() == 10);
    assertTrue(testConfig.getAllowCancel());
    assertTrue(testConfig.getSummeryPresentation().equals(AssessmentInstance.QMD_ENTRY_SUMMARY_DETAILED));
    // create a survey node
    URL newSurveyUrl = CoursesElementsTest.class.getResource("questionnaire-demo.zip");
    assertNotNull(newSurveyUrl);
    File surveyFile = new File(newSurveyUrl.toURI());
    URI repoEntriesUri2 = UriBuilder.fromUri(getContextURI()).path("repo").path("entries").build();
    HttpPut surveyRepoMethod = conn.createPut(repoEntriesUri2, MediaType.APPLICATION_JSON, true);
    HttpEntity surveyEntity = MultipartEntityBuilder.create().setMode(HttpMultipartMode.BROWSER_COMPATIBLE).addBinaryBody("file", surveyFile, ContentType.APPLICATION_OCTET_STREAM, surveyFile.getName()).addTextBody("filename", "questionnaire-demo.zip").addTextBody("resourcename", "Questionnaire demo").addTextBody("displayname", "Questionnaire demo").build();
    surveyRepoMethod.setEntity(surveyEntity);
    HttpResponse surveyRepoCode = conn.execute(surveyRepoMethod);
    assertTrue(surveyRepoCode.getStatusLine().getStatusCode() == 200 || surveyRepoCode.getStatusLine().getStatusCode() == 201);
    RepositoryEntryVO newSurveyVO = conn.parse(surveyRepoCode, RepositoryEntryVO.class);
    assertNotNull(newSurveyVO);
    Long surveyKey = newSurveyVO.getKey();
    RepositoryEntry surveyRE = RepositoryManager.getInstance().lookupRepositoryEntry(surveyKey);
    assertNotNull(surveyRE);
    assertNotNull(surveyRE.getOlatResource());
    assertEquals("Questionnaire demo", surveyRE.getDisplayname());
    URI newSurveyUri = getElementsUri(course).path("survey").queryParam("parentNodeId", course.getEditorRootNodeId()).queryParam("position", "9").queryParam("shortTitle", "Survey-0").queryParam("longTitle", "Survey-long-0").queryParam("objectives", "Survey-objectives-0").queryParam("surveyResourceableId", surveyKey).build();
    HttpPut newSurveyMethod = conn.createPut(newSurveyUri, MediaType.APPLICATION_JSON, true);
    HttpResponse newSurveyCode = conn.execute(newSurveyMethod);
    assertTrue(newSurveyCode.getStatusLine().getStatusCode() == 200 || newSurveyCode.getStatusLine().getStatusCode() == 201);
    CourseNodeVO surveyNode = conn.parse(newSurveyCode, CourseNodeVO.class);
    assertNotNull(surveyNode);
    assertNotNull(surveyNode.getId());
    assertEquals(surveyNode.getShortTitle(), "Survey-0");
    assertEquals(surveyNode.getParentId(), course.getEditorRootNodeId());
    // configure survey node
    URI surveykConfigUri = getElementsUri(course).path("survey/" + surveyNode.getId() + "/configuration").queryParam("allowCancel", Boolean.TRUE).queryParam("allowNavigation", Boolean.TRUE).queryParam("allowSuspend", Boolean.TRUE).queryParam("sequencePresentation", AssessmentInstance.QMD_ENTRY_SEQUENCE_ITEM).queryParam("showNavigation", Boolean.TRUE).queryParam("showQuestionTitle", Boolean.TRUE).queryParam("showSectionsOnly", Boolean.TRUE).build();
    HttpPut surveyConfigMethod = conn.createPut(surveykConfigUri, MediaType.APPLICATION_JSON, true);
    HttpResponse surveyConfigCode = conn.execute(surveyConfigMethod);
    assertTrue(surveyConfigCode.getStatusLine().getStatusCode() == 200 || surveyConfigCode.getStatusLine().getStatusCode() == 201);
    EntityUtils.consume(surveyConfigCode.getEntity());
    HttpGet getSurveyConfig = conn.createGet(surveykConfigUri, MediaType.APPLICATION_JSON, true);
    surveyConfigCode = conn.execute(getSurveyConfig);
    assertTrue(surveyConfigCode.getStatusLine().getStatusCode() == 200 || surveyConfigCode.getStatusLine().getStatusCode() == 201);
    SurveyConfigVO surveyConfig = conn.parse(surveyConfigCode, SurveyConfigVO.class);
    assertNotNull(surveyConfig);
    assertTrue(surveyConfig.getAllowCancel());
    // create an external page node
    URI newTUUri = getElementsUri(course).path("externalpage").queryParam("parentNodeId", course.getEditorRootNodeId()).queryParam("position", "10").queryParam("shortTitle", "ExternalPage-0").queryParam("longTitle", "ExternalPage-long-0").queryParam("objectives", "ExternalPage-objectives-0").queryParam("url", "http://www.olat.org").build();
    HttpPut newTUMethod = conn.createPut(newTUUri, MediaType.APPLICATION_JSON, true);
    HttpResponse newTUCode = conn.execute(newTUMethod);
    assertEquals(200, newTUCode.getStatusLine().getStatusCode());
    CourseNodeVO tuNode = conn.parse(newTUCode, CourseNodeVO.class);
    assertNotNull(tuNode);
    assertNotNull(tuNode.getId());
    assertEquals(tuNode.getShortTitle(), "ExternalPage-0");
    assertEquals(tuNode.getLongTitle(), "ExternalPage-long-0");
    assertEquals(tuNode.getLearningObjectives(), "ExternalPage-objectives-0");
    assertEquals(tuNode.getParentId(), course.getEditorRootNodeId());
    // summary check
    ICourse realCourse = CourseFactory.loadCourse(course.getKey());
    TreeNode realRoot = realCourse.getEditorTreeModel().getRootNode();
    assertEquals(11, realRoot.getChildCount());
    // structure
    CourseEditorTreeNode child = (CourseEditorTreeNode) realRoot.getChildAt(0);
    CourseNode childNode = child.getCourseNode();
    assertTrue(childNode instanceof STCourseNode);
    // single page
    child = (CourseEditorTreeNode) realRoot.getChildAt(1);
    childNode = child.getCourseNode();
    assertTrue(childNode instanceof SPCourseNode);
    // folder
    child = (CourseEditorTreeNode) realRoot.getChildAt(2);
    childNode = child.getCourseNode();
    assertTrue(childNode instanceof BCCourseNode);
    // forum
    child = (CourseEditorTreeNode) realRoot.getChildAt(3);
    childNode = child.getCourseNode();
    assertTrue(childNode instanceof FOCourseNode);
    // task
    child = (CourseEditorTreeNode) realRoot.getChildAt(4);
    childNode = child.getCourseNode();
    assertTrue(childNode instanceof TACourseNode);
    // assessment
    child = (CourseEditorTreeNode) realRoot.getChildAt(5);
    childNode = child.getCourseNode();
    assertTrue(childNode instanceof MSCourseNode);
    // contact
    child = (CourseEditorTreeNode) realRoot.getChildAt(6);
    childNode = child.getCourseNode();
    assertTrue(childNode instanceof COCourseNode);
    // enrollment
    child = (CourseEditorTreeNode) realRoot.getChildAt(7);
    childNode = child.getCourseNode();
    assertTrue(childNode instanceof ENCourseNode);
    // test
    child = (CourseEditorTreeNode) realRoot.getChildAt(8);
    childNode = child.getCourseNode();
    assertTrue(childNode instanceof IQTESTCourseNode);
    // survey
    child = (CourseEditorTreeNode) realRoot.getChildAt(9);
    childNode = child.getCourseNode();
    assertTrue(childNode instanceof IQSURVCourseNode);
    // external page
    child = (CourseEditorTreeNode) realRoot.getChildAt(10);
    childNode = child.getCourseNode();
    assertTrue(childNode instanceof TUCourseNode);
    // attach file to task
    child = (CourseEditorTreeNode) realRoot.getChildAt(4);
    childNode = child.getCourseNode();
    URI attachTaskFileUri = getElementsUri(course).path("task").path(childNode.getIdent()).path("file").queryParam("filename", "singlepage.html").build();
    HttpPut taskFileMethod = conn.createPut(attachTaskFileUri, MediaType.APPLICATION_JSON, true);
    conn.addMultipart(taskFileMethod, page.getName(), page);
    HttpResponse taskFileCode = conn.execute(taskFileMethod);
    assertEquals(200, taskFileCode.getStatusLine().getStatusCode());
    String taskFolderPath = TACourseNode.getTaskFolderPathRelToFolderRoot(realCourse, childNode);
    OlatRootFolderImpl taskFolder = new OlatRootFolderImpl(taskFolderPath, null);
    VFSLeaf singleFile = (VFSLeaf) taskFolder.resolve("/" + "singlepage.html");
    assertNotNull(singleFile);
}
Also used : HttpEntity(org.apache.http.HttpEntity) IQSURVCourseNode(org.olat.course.nodes.IQSURVCourseNode) CourseNodeVO(org.olat.restapi.support.vo.CourseNodeVO) TestConfigVO(org.olat.restapi.support.vo.elements.TestConfigVO) HttpGet(org.apache.http.client.methods.HttpGet) CourseEditorTreeNode(org.olat.course.tree.CourseEditorTreeNode) ICourse(org.olat.course.ICourse) FOCourseNode(org.olat.course.nodes.FOCourseNode) RepositoryEntry(org.olat.repository.RepositoryEntry) URI(java.net.URI) HttpPut(org.apache.http.client.methods.HttpPut) URL(java.net.URL) TaskConfigVO(org.olat.restapi.support.vo.elements.TaskConfigVO) ENCourseNode(org.olat.course.nodes.ENCourseNode) CourseVO(org.olat.restapi.support.vo.CourseVO) IQTESTCourseNode(org.olat.course.nodes.IQTESTCourseNode) OlatRootFolderImpl(org.olat.core.commons.modules.bc.vfs.OlatRootFolderImpl) TreeNode(org.olat.core.gui.components.tree.TreeNode) CourseEditorTreeNode(org.olat.course.tree.CourseEditorTreeNode) STCourseNode(org.olat.course.nodes.STCourseNode) IQTESTCourseNode(org.olat.course.nodes.IQTESTCourseNode) MSCourseNode(org.olat.course.nodes.MSCourseNode) FOCourseNode(org.olat.course.nodes.FOCourseNode) ENCourseNode(org.olat.course.nodes.ENCourseNode) CourseNode(org.olat.course.nodes.CourseNode) COCourseNode(org.olat.course.nodes.COCourseNode) TACourseNode(org.olat.course.nodes.TACourseNode) STCourseNode(org.olat.course.nodes.STCourseNode) MSCourseNode(org.olat.course.nodes.MSCourseNode) BCCourseNode(org.olat.course.nodes.BCCourseNode) SPCourseNode(org.olat.course.nodes.SPCourseNode) IQSURVCourseNode(org.olat.course.nodes.IQSURVCourseNode) TUCourseNode(org.olat.course.nodes.TUCourseNode) IQTESTCourseNode(org.olat.course.nodes.IQTESTCourseNode) COCourseNode(org.olat.course.nodes.COCourseNode) TUCourseNode(org.olat.course.nodes.TUCourseNode) VFSLeaf(org.olat.core.util.vfs.VFSLeaf) HttpResponse(org.apache.http.HttpResponse) TACourseNode(org.olat.course.nodes.TACourseNode) SPCourseNode(org.olat.course.nodes.SPCourseNode) GroupVO(org.olat.restapi.support.vo.GroupVO) URISyntaxException(java.net.URISyntaxException) IOException(java.io.IOException) RepositoryEntryVO(org.olat.restapi.support.vo.RepositoryEntryVO) BCCourseNode(org.olat.course.nodes.BCCourseNode) File(java.io.File) SurveyConfigVO(org.olat.restapi.support.vo.elements.SurveyConfigVO) Test(org.junit.Test)

Example 14 with CourseEditorTreeNode

use of org.olat.course.tree.CourseEditorTreeNode in project OpenOLAT by OpenOLAT.

the class CoursesElementsTest method testUpdateRootNodeCoursePost.

@Test
public // fxdiff FXOLAT-122: course management
void testUpdateRootNodeCoursePost() throws IOException, URISyntaxException {
    assertTrue(conn.login("administrator", "openolat"));
    // create an empty course
    URI uri = getCoursesUri().queryParam("shortTitle", "course4").queryParam("title", "course4 long name").build();
    HttpPut method = conn.createPut(uri, MediaType.APPLICATION_JSON, true);
    HttpResponse response = conn.execute(method);
    assertEquals(200, response.getStatusLine().getStatusCode());
    CourseVO course = conn.parse(response, CourseVO.class);
    assertNotNull(course);
    assertNotNull(course.getKey());
    assertNotNull(course.getEditorRootNodeId());
    // update the root node
    URI rootUri = getElementsUri(course).path("structure").path(course.getEditorRootNodeId()).build();
    HttpPost updateMethod = conn.createPost(rootUri, MediaType.APPLICATION_JSON);
    HttpEntity entity = MultipartEntityBuilder.create().setMode(HttpMultipartMode.BROWSER_COMPATIBLE).addTextBody("shortTitle", "Structure-0b").addTextBody("longTitle", "Structure-long-0b").addTextBody("objectives", "Structure-objectives-0b").build();
    updateMethod.setEntity(entity);
    HttpResponse newStructureResponse = conn.execute(updateMethod);
    int newStructureCode = newStructureResponse.getStatusLine().getStatusCode();
    assertTrue(newStructureCode == 200 || newStructureCode == 201);
    // check the response
    CourseNodeVO structureNode = conn.parse(newStructureResponse, CourseNodeVO.class);
    assertNotNull(structureNode);
    assertNotNull(structureNode.getId());
    assertEquals(structureNode.getShortTitle(), "Structure-0b");
    assertEquals(structureNode.getLongTitle(), "Structure-long-0b");
    assertEquals(structureNode.getLearningObjectives(), "Structure-objectives-0b");
    assertEquals(structureNode.getId(), course.getEditorRootNodeId());
    // check the real node
    ICourse realCourse = CourseFactory.loadCourse(course.getKey());
    CourseEditorTreeModel editorTreeModel = realCourse.getEditorTreeModel();
    CourseEditorTreeNode rootNode = (CourseEditorTreeNode) editorTreeModel.getRootNode();
    assertNotNull(rootNode);
    assertNotNull(rootNode.getIdent());
    assertNotNull(rootNode.getCourseNode());
    assertEquals(rootNode.getCourseNode().getShortTitle(), "Structure-0b");
    assertEquals(rootNode.getCourseNode().getLongTitle(), "Structure-long-0b");
    assertEquals(rootNode.getCourseNode().getLearningObjectives(), "Structure-objectives-0b");
}
Also used : CourseVO(org.olat.restapi.support.vo.CourseVO) HttpPost(org.apache.http.client.methods.HttpPost) CourseEditorTreeModel(org.olat.course.tree.CourseEditorTreeModel) HttpEntity(org.apache.http.HttpEntity) CourseNodeVO(org.olat.restapi.support.vo.CourseNodeVO) CourseEditorTreeNode(org.olat.course.tree.CourseEditorTreeNode) HttpResponse(org.apache.http.HttpResponse) ICourse(org.olat.course.ICourse) URI(java.net.URI) HttpPut(org.apache.http.client.methods.HttpPut) Test(org.junit.Test)

Example 15 with CourseEditorTreeNode

use of org.olat.course.tree.CourseEditorTreeNode in project OpenOLAT by OpenOLAT.

the class AbstractCourseNodeWebService method updateCourseNode.

// fxdiff FXOLAT-122: course management
private CourseNodeVO updateCourseNode(String nodeId, String shortTitle, String longTitle, String learningObjectives, String visibilityExpertRules, String accessExpertRules, CustomConfigDelegate delegateConfig, CourseEditSession editSession) {
    ICourse course = editSession.getCourse();
    TreeNode updateEditorNode = course.getEditorTreeModel().getNodeById(nodeId);
    CourseNode updatedNode = course.getEditorTreeModel().getCourseNode(nodeId);
    if (StringHelper.containsNonWhitespace(shortTitle)) {
        updatedNode.setShortTitle(shortTitle);
    }
    if (StringHelper.containsNonWhitespace(longTitle)) {
        updatedNode.setLongTitle(longTitle);
    }
    if (StringHelper.containsNonWhitespace(learningObjectives)) {
        updatedNode.setLearningObjectives(learningObjectives);
    }
    if (visibilityExpertRules != null) {
        Condition cond = createExpertCondition(CONDITION_ID_VISIBILITY, visibilityExpertRules);
        updatedNode.setPreConditionVisibility(cond);
    }
    if (StringHelper.containsNonWhitespace(accessExpertRules) && updatedNode instanceof AbstractAccessableCourseNode) {
        Condition cond = createExpertCondition(CONDITION_ID_ACCESS, accessExpertRules);
        ((AbstractAccessableCourseNode) updatedNode).setPreConditionAccess(cond);
    }
    if (delegateConfig != null) {
        ModuleConfiguration moduleConfig = updatedNode.getModuleConfiguration();
        delegateConfig.configure(course, updatedNode, moduleConfig);
    }
    course.getEditorTreeModel().nodeConfigChanged(updateEditorNode);
    CourseEditorTreeNode editorNode = course.getEditorTreeModel().getCourseEditorNodeContaining(updatedNode);
    CourseNodeVO vo = get(updatedNode);
    vo.setParentId(editorNode.getParent() == null ? null : editorNode.getParent().getIdent());
    return vo;
}
Also used : Condition(org.olat.course.condition.Condition) ModuleConfiguration(org.olat.modules.ModuleConfiguration) CourseNodeVO(org.olat.restapi.support.vo.CourseNodeVO) TreeNode(org.olat.core.gui.components.tree.TreeNode) CourseEditorTreeNode(org.olat.course.tree.CourseEditorTreeNode) CourseEditorTreeNode(org.olat.course.tree.CourseEditorTreeNode) ICourse(org.olat.course.ICourse) AbstractAccessableCourseNode(org.olat.course.nodes.AbstractAccessableCourseNode) CourseNode(org.olat.course.nodes.CourseNode) AbstractAccessableCourseNode(org.olat.course.nodes.AbstractAccessableCourseNode)

Aggregations

CourseEditorTreeNode (org.olat.course.tree.CourseEditorTreeNode)88 CourseNode (org.olat.course.nodes.CourseNode)54 ICourse (org.olat.course.ICourse)38 CourseEditorTreeModel (org.olat.course.tree.CourseEditorTreeModel)24 INode (org.olat.core.util.nodes.INode)22 Test (org.junit.Test)20 RepositoryEntry (org.olat.repository.RepositoryEntry)18 Identity (org.olat.core.id.Identity)14 TreeVisitor (org.olat.core.util.tree.TreeVisitor)14 Visitor (org.olat.core.util.tree.Visitor)14 CourseNodeVO (org.olat.restapi.support.vo.CourseNodeVO)12 TreeNode (org.olat.core.gui.components.tree.TreeNode)10 STCourseNode (org.olat.course.nodes.STCourseNode)10 ArrayList (java.util.ArrayList)9 File (java.io.File)8 URI (java.net.URI)8 HttpResponse (org.apache.http.HttpResponse)8 HttpPut (org.apache.http.client.methods.HttpPut)8 Structure (org.olat.course.Structure)8 BCCourseNode (org.olat.course.nodes.BCCourseNode)8