Skip to content
Snippets Groups Projects
Commit ae4ba08c authored by uhensler's avatar uhensler
Browse files

OO-4481: Overview of course element configuration of regular attributes

parent 85c9be58
No related branches found
No related tags found
No related merge requests found
...@@ -92,6 +92,7 @@ import org.olat.course.CourseFactory; ...@@ -92,6 +92,7 @@ import org.olat.course.CourseFactory;
import org.olat.course.DisposedCourseRestartController; import org.olat.course.DisposedCourseRestartController;
import org.olat.course.ICourse; import org.olat.course.ICourse;
import org.olat.course.assessment.AssessmentModeManager; import org.olat.course.assessment.AssessmentModeManager;
import org.olat.course.editor.overview.OverviewController;
import org.olat.course.folder.CourseContainerOptions; import org.olat.course.folder.CourseContainerOptions;
import org.olat.course.groupsandrights.CourseGroupManager; import org.olat.course.groupsandrights.CourseGroupManager;
import org.olat.course.nodes.CourseNode; import org.olat.course.nodes.CourseNode;
...@@ -130,11 +131,13 @@ public class EditorMainController extends MainLayoutBasicController implements G ...@@ -130,11 +131,13 @@ public class EditorMainController extends MainLayoutBasicController implements G
private static final String CMD_MOVENODE = "moven"; private static final String CMD_MOVENODE = "moven";
private static final String CMD_DELNODE = "deln"; private static final String CMD_DELNODE = "deln";
private static final String CMD_PUBLISH = "pbl"; private static final String CMD_PUBLISH = "pbl";
private static final String CMD_OVERVIEW = "overview";
private static final String CMD_COURSEPREVIEW = "cprev"; private static final String CMD_COURSEPREVIEW = "cprev";
protected static final String CMD_MULTI_SP = "cmp.multi.sp"; protected static final String CMD_MULTI_SP = "cmp.multi.sp";
protected static final String CMD_MULTI_CHECKLIST = "cmp.multi.checklist"; protected static final String CMD_MULTI_CHECKLIST = "cmp.multi.checklist";
// NLS support // NLS support
private static final String NLS_OVERVIEW = "command.overview";
private static final String NLS_COMMAND_COURSEPREVIEW = "command.coursepreview"; private static final String NLS_COMMAND_COURSEPREVIEW = "command.coursepreview";
private static final String NLS_COMMAND_PUBLISH = "command.publish"; private static final String NLS_COMMAND_PUBLISH = "command.publish";
private static final String NLS_HEADER_INSERTNODES = "header.insertnodes"; private static final String NLS_HEADER_INSERTNODES = "header.insertnodes";
...@@ -161,6 +164,7 @@ public class EditorMainController extends MainLayoutBasicController implements G ...@@ -161,6 +164,7 @@ public class EditorMainController extends MainLayoutBasicController implements G
private TabbableController nodeEditCntrllr; private TabbableController nodeEditCntrllr;
private StepsMainRunController publishStepsController; private StepsMainRunController publishStepsController;
private StepsMainRunController checklistWizard; private StepsMainRunController checklistWizard;
private OverviewController overviewCtrl;
private PreviewConfigController previewController; private PreviewConfigController previewController;
private MoveCopySubtreeController moveCopyController; private MoveCopySubtreeController moveCopyController;
private DialogBoxController deleteDialogController; private DialogBoxController deleteDialogController;
...@@ -177,6 +181,7 @@ public class EditorMainController extends MainLayoutBasicController implements G ...@@ -177,6 +181,7 @@ public class EditorMainController extends MainLayoutBasicController implements G
private Dropdown nodeTools; private Dropdown nodeTools;
private Link undelButton, alternativeLink, statusLink; private Link undelButton, alternativeLink, statusLink;
private Link previewLink, publishLink, closeLink; private Link previewLink, publishLink, closeLink;
private Link overviewLink;
private Link createNodeLink, deleteNodeLink, moveNodeLink, copyNodeLink; private Link createNodeLink, deleteNodeLink, moveNodeLink, copyNodeLink;
private CloseableModalController cmc; private CloseableModalController cmc;
...@@ -302,6 +307,8 @@ public class EditorMainController extends MainLayoutBasicController implements G ...@@ -302,6 +307,8 @@ public class EditorMainController extends MainLayoutBasicController implements G
copyNodeLink = LinkFactory.createToolLink(CMD_COPYNODE, translate(NLS_COMMAND_COPYNODE), this, "o_icon_copy"); copyNodeLink = LinkFactory.createToolLink(CMD_COPYNODE, translate(NLS_COMMAND_COPYNODE), this, "o_icon_copy");
nodeTools.addComponent(copyNodeLink); nodeTools.addComponent(copyNodeLink);
overviewLink = LinkFactory.createToolLink(CMD_OVERVIEW, translate(NLS_OVERVIEW), this,
"o_icon_description");
previewLink = LinkFactory.createToolLink(CMD_COURSEPREVIEW, translate(NLS_COMMAND_COURSEPREVIEW), this, "o_icon_preview"); previewLink = LinkFactory.createToolLink(CMD_COURSEPREVIEW, translate(NLS_COMMAND_COURSEPREVIEW), this, "o_icon_preview");
publishLink = LinkFactory.createToolLink(CMD_PUBLISH, translate(NLS_COMMAND_PUBLISH), this, "o_icon_publish"); publishLink = LinkFactory.createToolLink(CMD_PUBLISH, translate(NLS_COMMAND_PUBLISH), this, "o_icon_publish");
publishLink.setElementCssClass("o_sel_course_editor_publish"); publishLink.setElementCssClass("o_sel_course_editor_publish");
...@@ -337,6 +344,7 @@ public class EditorMainController extends MainLayoutBasicController implements G ...@@ -337,6 +344,7 @@ public class EditorMainController extends MainLayoutBasicController implements G
stackPanel.addTool(createNodeLink, Align.left); stackPanel.addTool(createNodeLink, Align.left);
stackPanel.addTool(nodeTools, Align.left); stackPanel.addTool(nodeTools, Align.left);
stackPanel.addTool(statusLink, Align.right); stackPanel.addTool(statusLink, Align.right);
stackPanel.addTool(overviewLink, Align.right);
stackPanel.addTool(previewLink, Align.right); stackPanel.addTool(previewLink, Align.right);
stackPanel.addTool(publishLink, Align.right); stackPanel.addTool(publishLink, Align.right);
} }
...@@ -384,6 +392,8 @@ public class EditorMainController extends MainLayoutBasicController implements G ...@@ -384,6 +392,8 @@ public class EditorMainController extends MainLayoutBasicController implements G
} else if(source == alternativeLink) { } else if(source == alternativeLink) {
CourseNode chosenNode = (CourseNode)alternativeLink.getUserObject(); CourseNode chosenNode = (CourseNode)alternativeLink.getUserObject();
askForAlternative(ureq, chosenNode); askForAlternative(ureq, chosenNode);
} else if(overviewLink == source) {
doOverview(ureq, course);
} else if(previewLink == source) { } else if(previewLink == source) {
launchPreview(ureq, course); launchPreview(ureq, course);
} else if(publishLink == source) { } else if(publishLink == source) {
...@@ -1137,7 +1147,17 @@ public class EditorMainController extends MainLayoutBasicController implements G ...@@ -1137,7 +1147,17 @@ public class EditorMainController extends MainLayoutBasicController implements G
getWindowControl().pushAsModalDialog(publishStepsController.getInitialComponent()); getWindowControl().pushAsModalDialog(publishStepsController.getInitialComponent());
} }
private void doOverview(UserRequest ureq, ICourse course) {
overviewCtrl = new OverviewController(ureq, getWindowControl(), course);
listenTo(overviewCtrl);
stackPanel.pushController(translate("command.overview"), overviewCtrl);
}
private void launchPreview(UserRequest ureq, ICourse course) { private void launchPreview(UserRequest ureq, ICourse course) {
removeAsListenerAndDispose(previewController);
//TODO uh do it like in preview
previewController = new PreviewConfigController(ureq, getWindowControl(), course); previewController = new PreviewConfigController(ureq, getWindowControl(), course);
listenTo(previewController); listenTo(previewController);
stackPanel.pushController(translate("command.coursepreview"), previewController); stackPanel.pushController(translate("command.coursepreview"), previewController);
......
...@@ -347,6 +347,7 @@ command.deletenode.header=Kursbaustein \u00E4ndern ...@@ -347,6 +347,7 @@ command.deletenode.header=Kursbaustein \u00E4ndern
command.movenode=Verschieben command.movenode=Verschieben
command.multi.checklist=Mehrere Checklisten command.multi.checklist=Mehrere Checklisten
command.multi.sps=Mehrere Einzelseiten command.multi.sps=Mehrere Einzelseiten
command.overview=\u00DCbersicht Konfiguration
command.publish=Publizieren command.publish=Publizieren
condition.noAccessExplanation.title=Information wenn sichtbar und kein Zugang condition.noAccessExplanation.title=Information wenn sichtbar und kein Zugang
condition.visibility.title=Sichtbarkeit condition.visibility.title=Sichtbarkeit
...@@ -473,6 +474,12 @@ publish.wizard.title=Publizieren ...@@ -473,6 +474,12 @@ publish.wizard.title=Publizieren
published.latest=Der Kurs wurde zuletzt am {0} publiziert. published.latest=Der Kurs wurde zuletzt am {0} publiziert.
published.never.yet=Der Kurs wurde noch nie publiziert published.never.yet=Der Kurs wurde noch nie publiziert
status=Status status=Status
table.empty=In diesem Kurs gibt es keine Kursbausteine.
table.header.display=$\:nodeConfigForm.display_options
table.header.learning.objectives=$\:nodeConfigForm.learningobjectives
table.header.long.title=$\:nodeConfigForm.displaytitle
table.header.node=Kursbaustein
table.header.short.title=$\:nodeConfigForm.menutitle
target.node.child=Untergeordnet target.node.child=Untergeordnet
target.node.first.node=Anfang target.node.first.node=Anfang
target.node.last.node=Ende target.node.last.node=Ende
......
...@@ -347,6 +347,7 @@ command.deletenode.header=Modify course element ...@@ -347,6 +347,7 @@ command.deletenode.header=Modify course element
command.movenode=Move command.movenode=Move
command.multi.checklist=Multiple checklists command.multi.checklist=Multiple checklists
command.multi.sps=Multiple single pages command.multi.sps=Multiple single pages
command.overview=Configuration overview
command.publish=Publish command.publish=Publish
condition.noAccessExplanation.title=Information if visible and no access condition.noAccessExplanation.title=Information if visible and no access
condition.visibility.title=Visibility condition.visibility.title=Visibility
...@@ -472,6 +473,12 @@ publish.wizard.title=Publishing ...@@ -472,6 +473,12 @@ publish.wizard.title=Publishing
published.latest=This course was last published on {0}. published.latest=This course was last published on {0}.
published.never.yet=This course has never been published. published.never.yet=This course has never been published.
status=Status status=Status
table.empty=That course does not contain any course element.
table.header.display=$\:nodeConfigForm.display_options
table.header.learning.objectives=$\:nodeConfigForm.learningobjectives
table.header.long.title=$\:nodeConfigForm.displaytitle
table.header.node=Kursbaustein
table.header.short.title=$\:nodeConfigForm.menutitle
target.node.child=Subordinate target.node.child=Subordinate
target.node.first.node=Beginning target.node.first.node=Beginning
target.node.last.node=End target.node.last.node=End
......
/**
* <a href="http://www.openolat.org">
* OpenOLAT - Online Learning and Training</a><br>
* <p>
* Licensed under the Apache License, Version 2.0 (the "License"); <br>
* you may not use this file except in compliance with the License.<br>
* You may obtain a copy of the License at the
* <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
* <p>
* Unless required by applicable law or agreed to in writing,<br>
* software distributed under the License is distributed on an "AS IS" BASIS, <br>
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
* See the License for the specific language governing permissions and <br>
* limitations under the License.
* <p>
* Initial code contributed and copyrighted by<br>
* frentix GmbH, http://www.frentix.com
* <p>
*/
package org.olat.course.editor.overview;
import org.olat.core.gui.UserRequest;
import org.olat.core.gui.components.Component;
import org.olat.core.gui.components.panel.SimpleStackedPanel;
import org.olat.core.gui.components.panel.StackedPanel;
import org.olat.core.gui.control.Event;
import org.olat.core.gui.control.WindowControl;
import org.olat.core.gui.control.controller.BasicController;
import org.olat.course.ICourse;
/**
*
* Initial date: 17 Jan 2020<br>
* @author uhensler, urs.hensler@frentix.com, http://www.frentix.com
*
*/
public class OverviewController extends BasicController {
private OverviewListController overviewListCtrl;
public OverviewController(UserRequest ureq, WindowControl wControl, ICourse course) {
super(ureq, wControl);
overviewListCtrl = new OverviewListController(ureq, getWindowControl(), course);
listenTo(overviewListCtrl);
StackedPanel initialPanel = putInitialPanel(new SimpleStackedPanel("overviewPanel", "o_edit_mode"));
initialPanel.setContent(overviewListCtrl.getInitialComponent());
}
@Override
protected void event(UserRequest ureq, Component source, Event event) {
//
}
@Override
protected void doDispose() {
//
}
}
/**
* <a href="http://www.openolat.org">
* OpenOLAT - Online Learning and Training</a><br>
* <p>
* Licensed under the Apache License, Version 2.0 (the "License"); <br>
* you may not use this file except in compliance with the License.<br>
* You may obtain a copy of the License at the
* <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
* <p>
* Unless required by applicable law or agreed to in writing,<br>
* software distributed under the License is distributed on an "AS IS" BASIS, <br>
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
* See the License for the specific language governing permissions and <br>
* limitations under the License.
* <p>
* Initial code contributed and copyrighted by<br>
* frentix GmbH, http://www.frentix.com
* <p>
*/
package org.olat.course.editor.overview;
import java.util.List;
import org.olat.core.gui.components.form.flexible.elements.FlexiTableFilter;
import org.olat.core.gui.components.form.flexible.impl.elements.table.DefaultFlexiTableDataModel;
import org.olat.core.gui.components.form.flexible.impl.elements.table.DefaultFlexiTreeTableDataModel;
import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiColumnDef;
import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableColumnModel;
/**
*
* Initial date: 16 Jan 2020<br>
* @author uhensler, urs.hensler@frentix.com, http://www.frentix.com
*
*/
public class OverviewDataModel extends DefaultFlexiTreeTableDataModel<OverviewRow> {
public OverviewDataModel(FlexiTableColumnModel columnsModel) {
super(columnsModel);
}
@Override
public void filter(String searchString, List<FlexiTableFilter> filters) {
//
}
@Override
public boolean hasChildren(int row) {
OverviewRow viewRow = getObject(row);
return viewRow.hasChildren();
}
@Override
public Object getValueAt(int row, int col) {
OverviewRow reason = getObject(row);
return getValueAt(reason, col);
}
public Object getValueAt(OverviewRow row, int col) {
switch(OverviewCols.values()[col]) {
case node: return row;
case shortTitle: return row.getCourseNode().getShortTitle();
case longTitle: return row.getCourseNode().getLongTitle();
case learningObjectives: return row.getCourseNode().getLearningObjectives();
case display: return row.getTranslatedDisplayOption();
default: return null;
}
}
@Override
public DefaultFlexiTableDataModel<OverviewRow> createCopyWithEmptyList() {
return new OverviewDataModel(getTableColumnModel());
}
public enum OverviewCols implements FlexiColumnDef {
node("table.header.node"),
shortTitle("table.header.short.title"),
longTitle("table.header.long.title"),
learningObjectives("table.header.learning.objectives"),
display("table.header.display");
private final String i18nKey;
private OverviewCols(String i18nKey) {
this.i18nKey = i18nKey;
}
@Override
public String i18nHeaderKey() {
return i18nKey;
}
}
}
/**
* <a href="http://www.openolat.org">
* OpenOLAT - Online Learning and Training</a><br>
* <p>
* Licensed under the Apache License, Version 2.0 (the "License"); <br>
* you may not use this file except in compliance with the License.<br>
* You may obtain a copy of the License at the
* <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
* <p>
* Unless required by applicable law or agreed to in writing,<br>
* software distributed under the License is distributed on an "AS IS" BASIS, <br>
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
* See the License for the specific language governing permissions and <br>
* limitations under the License.
* <p>
* Initial code contributed and copyrighted by<br>
* frentix GmbH, http://www.frentix.com
* <p>
*/
package org.olat.course.editor.overview;
import java.util.ArrayList;
import java.util.List;
import org.olat.core.gui.UserRequest;
import org.olat.core.gui.components.EscapeMode;
import org.olat.core.gui.components.form.flexible.FormItemContainer;
import org.olat.core.gui.components.form.flexible.elements.FlexiTableElement;
import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
import org.olat.core.gui.components.form.flexible.impl.elements.table.DefaultFlexiColumnModel;
import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiCellRenderer;
import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableColumnModel;
import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableDataModelFactory;
import org.olat.core.gui.components.form.flexible.impl.elements.table.TextFlexiCellRenderer;
import org.olat.core.gui.components.form.flexible.impl.elements.table.TreeNodeFlexiCellRenderer;
import org.olat.core.gui.components.tree.TreeNode;
import org.olat.core.gui.control.Controller;
import org.olat.core.gui.control.WindowControl;
import org.olat.core.util.Util;
import org.olat.core.util.nodes.INode;
import org.olat.course.ICourse;
import org.olat.course.assessment.IndentedNodeRenderer;
import org.olat.course.editor.EditorMainController;
import org.olat.course.editor.overview.OverviewDataModel.OverviewCols;
import org.olat.course.nodes.CourseNode;
import org.olat.course.tree.CourseEditorTreeNode;
/**
*
* Initial date: 16 Jan 2020<br>
* @author uhensler, urs.hensler@frentix.com, http://www.frentix.com
*
*/
public class OverviewListController extends FormBasicController {
private FlexiTableElement tableEl;
private OverviewDataModel dataModel;
private final ICourse course;
public OverviewListController(UserRequest ureq, WindowControl wControl, ICourse course) {
super(ureq, wControl, LAYOUT_BAREBONE);
setTranslator(Util.createPackageTranslator(EditorMainController.class, getLocale(), getTranslator()));
this.course = course;
initForm(ureq);
}
@Override
protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
initTable(ureq, formLayout);
}
private void initTable(UserRequest ureq, FormItemContainer formLayout) {
FlexiTableColumnModel columnsModel = FlexiTableDataModelFactory.createFlexiTableColumnModel();
IndentedNodeRenderer intendedNodeRenderer = new IndentedNodeRenderer();
intendedNodeRenderer.setIndentationEnabled(false);
FlexiCellRenderer nodeRenderer = new TreeNodeFlexiCellRenderer(intendedNodeRenderer);
columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(OverviewCols.node, nodeRenderer));
columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(OverviewCols.shortTitle));
columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(OverviewCols.longTitle));
DefaultFlexiColumnModel learningObjectivesModel = new DefaultFlexiColumnModel(OverviewCols.learningObjectives);
learningObjectivesModel.setCellRenderer(new TextFlexiCellRenderer(EscapeMode.none));
learningObjectivesModel.setDefaultVisible(false);
columnsModel.addFlexiColumnModel(learningObjectivesModel);
columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(OverviewCols.display));
dataModel = new OverviewDataModel(columnsModel);
tableEl = uifactory.addTableElement(getWindowControl(), "table", dataModel, 250, false, getTranslator(), formLayout);
tableEl.setAndLoadPersistedPreferences(ureq, "course-editor-overview");
tableEl.setEmtpyTableMessageKey("table.empty");
tableEl.setBordered(true);
loadModel();
}
private void loadModel() {
TreeNode rootNode = course.getEditorTreeModel().getRootNode();
List<OverviewRow> rows = new ArrayList<>();
forgeRows(rows, rootNode, 0, null);
dataModel.setObjects(rows);
tableEl.reset(true, true, true);
}
private void forgeRows(List<OverviewRow> rows, INode node, int recursionLevel, OverviewRow parent) {
if (node instanceof CourseEditorTreeNode) {
CourseEditorTreeNode editorNode = (CourseEditorTreeNode)node;
OverviewRow row = forgeRow(editorNode, recursionLevel, parent);
rows.add(row);
int childCount = editorNode.getChildCount();
for (int i = 0; i < childCount; i++) {
INode child = editorNode.getChildAt(i);
forgeRows(rows, child, ++recursionLevel, row);
}
}
}
private OverviewRow forgeRow(CourseEditorTreeNode editorNode, int recursionLevel, OverviewRow parent) {
CourseNode courseNode = editorNode.getCourseNode();
OverviewRow row = new OverviewRow(courseNode, recursionLevel);
row.setTranslatedDisplayOption(getTranslatedDisplayOption(courseNode));
row.setParent(parent);
return row;
}
private String getTranslatedDisplayOption(CourseNode courseNode) {
String displayOption = courseNode.getDisplayOption();
if (displayOption == null) return null;
switch(displayOption) {
case CourseNode.DISPLAY_OPTS_SHORT_TITLE_DESCRIPTION_CONTENT: return translate("nodeConfigForm.short_title_desc_content");
case CourseNode.DISPLAY_OPTS_TITLE_DESCRIPTION_CONTENT: return translate("nodeConfigForm.title_desc_content");
case CourseNode.DISPLAY_OPTS_SHORT_TITLE_CONTENT: return translate("nodeConfigForm.short_title_content");
case CourseNode.DISPLAY_OPTS_TITLE_CONTENT: return translate("nodeConfigForm.title_content");
case CourseNode.DISPLAY_OPTS_CONTENT: return translate("nodeConfigForm.content_only");
default:
// nothing
}
return null;
}
@Override
protected void formOK(UserRequest ureq) {
//
}
@Override
protected void doDispose() {
//
}
}
/**
* <a href="http://www.openolat.org">
* OpenOLAT - Online Learning and Training</a><br>
* <p>
* Licensed under the Apache License, Version 2.0 (the "License"); <br>
* you may not use this file except in compliance with the License.<br>
* You may obtain a copy of the License at the
* <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
* <p>
* Unless required by applicable law or agreed to in writing,<br>
* software distributed under the License is distributed on an "AS IS" BASIS, <br>
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
* See the License for the specific language governing permissions and <br>
* limitations under the License.
* <p>
* Initial code contributed and copyrighted by<br>
* frentix GmbH, http://www.frentix.com
* <p>
*/
package org.olat.course.editor.overview;
import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTreeTableNode;
import org.olat.course.assessment.IndentedNodeRenderer.IndentedCourseNode;
import org.olat.course.nodes.CourseNode;
/**
*
* Initial date: 16 Jan 2020<br>
* @author uhensler, urs.hensler@frentix.com, http://www.frentix.com
*
*/
public class OverviewRow implements FlexiTreeTableNode, IndentedCourseNode {
private final CourseNode courseNode;
private final int recursionLevel;
private String translatedDisplayOption;
private OverviewRow parent;
private boolean hasChildren;
public OverviewRow(CourseNode courseNode, int recursionLevel) {
this.courseNode = courseNode;
this.recursionLevel = recursionLevel;
}
@Override
public int getRecursionLevel() {
return recursionLevel;
}
@Override
public String getType() {
return courseNode.getType();
}
@Override
public String getShortTitle() {
return courseNode.getShortName();
}
@Override
public String getLongTitle() {
return courseNode.getLongTitle();
}
public CourseNode getCourseNode() {
return courseNode;
}
public String getTranslatedDisplayOption() {
return translatedDisplayOption;
}
public void setTranslatedDisplayOption(String translatedDisplayOption) {
this.translatedDisplayOption = translatedDisplayOption;
}
@Override
public String getCrump() {
return null;
}
public void setParent(OverviewRow parent) {
this.parent = parent;
if (parent != null) {
parent.hasChildren = true;
}
}
@Override
public FlexiTreeTableNode getParent() {
return parent;
}
public boolean hasChildren() {
return hasChildren;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment