Search in sources :

Example 36 with Media

use of org.olat.modules.portfolio.Media in project OpenOLAT by OpenOLAT.

the class MediaDAOTest method searchByAuthor.

@Test
public void searchByAuthor() {
    Identity author = JunitTestHelper.createAndPersistIdentityAsRndUser("pf-media-2");
    Media media1 = mediaDao.createMedia("Media 1", "The media theory", "Media theory is very important subject", "Forum", "[Media:0]", null, 10, author);
    Media media2 = mediaDao.createMedia("Media 2", "Java", "One of the most widespread programming language", "Forum", "[Media:0]", null, 10, author);
    Media media3 = mediaDao.createMedia("Media 3", "Europe", "Un continent", "Forum", "[Media:0]", null, 10, author);
    dbInstance.commit();
    // not owned
    Identity someoneElse = JunitTestHelper.createAndPersistIdentityAsRndUser("pf-media-2");
    Media mediaAlt = mediaDao.createMedia("Media 3", "Europe", "Un continent", "Forum", "[Media:0]", null, 10, someoneElse);
    dbInstance.commit();
    // search owned medias
    List<MediaLight> ownedMedias = mediaDao.searchByAuthor(author, null, null);
    Assert.assertNotNull(ownedMedias);
    Assert.assertEquals(3, ownedMedias.size());
    Assert.assertTrue(ownedMedias.contains(media1));
    Assert.assertTrue(ownedMedias.contains(media2));
    Assert.assertTrue(ownedMedias.contains(media3));
    Assert.assertFalse(ownedMedias.contains(mediaAlt));
    // search medias
    List<MediaLight> searchMedias = mediaDao.searchByAuthor(author, "Europe", null);
    Assert.assertNotNull(searchMedias);
    Assert.assertEquals(1, searchMedias.size());
    Assert.assertFalse(searchMedias.contains(media1));
    Assert.assertFalse(searchMedias.contains(media2));
    Assert.assertTrue(searchMedias.contains(media3));
    Assert.assertFalse(searchMedias.contains(mediaAlt));
}
Also used : MediaLight(org.olat.modules.portfolio.MediaLight) Media(org.olat.modules.portfolio.Media) Identity(org.olat.core.id.Identity) Test(org.junit.Test)

Example 37 with Media

use of org.olat.modules.portfolio.Media in project OpenOLAT by OpenOLAT.

the class MediaCenterController method initForm.

@Override
protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
    if (select) {
        newMediaCallout = uifactory.addFormLink("new.medias", formLayout, Link.BUTTON);
        newMediaCallout.setIconRightCSS("o_icon o_icon_caret o_icon-fw");
    }
    FlexiTableColumnModel columnsModel = FlexiTableDataModelFactory.createFlexiTableColumnModel();
    columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(false, MediaCols.key, "select"));
    Map<String, MediaHandler> handlersMap = portfolioService.getMediaHandlers().stream().collect(Collectors.toMap(h -> h.getType(), h -> h));
    columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(MediaCols.type, new MediaTypeCellRenderer(handlersMap)));
    columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(MediaCols.title, "select"));
    columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(MediaCols.collectionDate, "select"));
    columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(MediaCols.categories, new CategoriesCellRenderer()));
    columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel("select", translate("select"), "select"));
    model = new MediaDataModel(columnsModel, getLocale());
    tableEl = uifactory.addTableElement(getWindowControl(), "table", model, 20, false, getTranslator(), formLayout);
    tableEl.setAvailableRendererTypes(FlexiTableRendererType.custom, FlexiTableRendererType.classic);
    tableEl.setRendererType(FlexiTableRendererType.custom);
    tableEl.setSearchEnabled(true);
    tableEl.setCustomizeColumns(true);
    tableEl.setEmtpyTableMessageKey("table.sEmptyTable");
    tableEl.setPageSize(24);
    VelocityContainer row = createVelocityContainer("media_row");
    // sets its own DOM id in velocity container
    row.setDomReplacementWrapperRequired(false);
    tableEl.setRowRenderer(row, this);
    tableEl.setCssDelegate(new MediaCssDelegate());
    tableEl.setAndLoadPersistedPreferences(ureq, "media-list");
    initSorters(tableEl);
    initFilters(tableEl);
    mapperThumbnailUrl = registerCacheableMapper(ureq, "media-thumbnail", new ThumbnailMapper(model));
    row.contextPut("mapperThumbnailUrl", mapperThumbnailUrl);
}
Also used : FlexiTableElement(org.olat.core.gui.components.form.flexible.elements.FlexiTableElement) EPArtefactListChoosenEvent(org.olat.portfolio.ui.artefacts.view.EPArtefactListChoosenEvent) Activateable2(org.olat.core.gui.control.generic.dtabs.Activateable2) DefaultFlexiColumnModel(org.olat.core.gui.components.form.flexible.impl.elements.table.DefaultFlexiColumnModel) Autowired(org.springframework.beans.factory.annotation.Autowired) MediaResource(org.olat.core.gui.media.MediaResource) OLATResourceable(org.olat.core.id.OLATResourceable) Size(org.olat.core.commons.services.image.Size) Media(org.olat.modules.portfolio.Media) FlexiTableFilter(org.olat.core.gui.components.form.flexible.elements.FlexiTableFilter) OresHelper(org.olat.core.util.resource.OresHelper) MediaRow(org.olat.modules.portfolio.ui.model.MediaRow) Map(java.util.Map) SortKey(org.olat.core.commons.persistence.SortKey) VelocityContainer(org.olat.core.gui.components.velocity.VelocityContainer) CalloutSettings(org.olat.core.gui.control.generic.closablewrapper.CalloutSettings) MediaCols(org.olat.modules.portfolio.ui.MediaDataModel.MediaCols) MediaHandler(org.olat.modules.portfolio.MediaHandler) AbstractArtefact(org.olat.portfolio.model.artefacts.AbstractArtefact) FlexiTableColumnModel(org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableColumnModel) CloseableModalController(org.olat.core.gui.control.generic.closablewrapper.CloseableModalController) VFSLeaf(org.olat.core.util.vfs.VFSLeaf) FlexiTableSort(org.olat.core.gui.components.form.flexible.elements.FlexiTableSort) WindowControl(org.olat.core.gui.control.WindowControl) FlexiTableRendererType(org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableRendererType) PortfolioModule(org.olat.portfolio.PortfolioModule) Set(java.util.Set) MediaEvent(org.olat.modules.portfolio.ui.event.MediaEvent) Component(org.olat.core.gui.components.Component) LinkFactory(org.olat.core.gui.components.link.LinkFactory) Collectors(java.util.stream.Collectors) Mapper(org.olat.core.dispatcher.mapper.Mapper) DefaultFlexiTableCssDelegate(org.olat.core.gui.components.form.flexible.impl.elements.table.DefaultFlexiTableCssDelegate) SelectionEvent(org.olat.core.gui.components.form.flexible.impl.elements.table.SelectionEvent) BasicController(org.olat.core.gui.control.controller.BasicController) List(java.util.List) FormLink(org.olat.core.gui.components.form.flexible.elements.FormLink) Align(org.olat.core.gui.components.stack.TooledStackedPanel.Align) TooledController(org.olat.core.gui.components.stack.TooledController) CloseableCalloutWindowController(org.olat.core.gui.control.generic.closablewrapper.CloseableCalloutWindowController) TooledStackedPanel(org.olat.core.gui.components.stack.TooledStackedPanel) CategoryLight(org.olat.modules.portfolio.model.CategoryLight) CategoriesCellRenderer(org.olat.modules.portfolio.ui.component.CategoriesCellRenderer) FormEvent(org.olat.core.gui.components.form.flexible.impl.FormEvent) CollectCitationMediaController(org.olat.modules.portfolio.ui.media.CollectCitationMediaController) EPArtefactChoosenEvent(org.olat.portfolio.ui.artefacts.view.EPArtefactChoosenEvent) FormItem(org.olat.core.gui.components.form.flexible.FormItem) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) Event(org.olat.core.gui.control.Event) FormBasicController(org.olat.core.gui.components.form.flexible.impl.FormBasicController) HttpServletRequest(javax.servlet.http.HttpServletRequest) FormItemContainer(org.olat.core.gui.components.form.flexible.FormItemContainer) ContextEntry(org.olat.core.id.context.ContextEntry) EPArtefactPoolRunController(org.olat.portfolio.ui.EPArtefactPoolRunController) StringHelper(org.olat.core.util.StringHelper) StateEntry(org.olat.core.id.context.StateEntry) FlexiTableDataModelFactory(org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableDataModelFactory) PortfolioService(org.olat.modules.portfolio.PortfolioService) OrderBy(org.olat.repository.model.SearchMyRepositoryEntryViewParams.OrderBy) Link(org.olat.core.gui.components.link.Link) FlexiTableComponentDelegate(org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableComponentDelegate) CollectTextMediaController(org.olat.modules.portfolio.ui.media.CollectTextMediaController) FlexiTableSearchEvent(org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableSearchEvent) MediaSelectionEvent(org.olat.modules.portfolio.ui.event.MediaSelectionEvent) Controller(org.olat.core.gui.control.Controller) MediaLight(org.olat.modules.portfolio.MediaLight) EPFrontendManager(org.olat.portfolio.manager.EPFrontendManager) FlexiTableSortOptions(org.olat.core.gui.components.form.flexible.elements.FlexiTableSortOptions) VFSMediaResource(org.olat.core.util.vfs.VFSMediaResource) MediaTypeCellRenderer(org.olat.modules.portfolio.ui.renderer.MediaTypeCellRenderer) UserRequest(org.olat.core.gui.UserRequest) MediaTypeCellRenderer(org.olat.modules.portfolio.ui.renderer.MediaTypeCellRenderer) MediaHandler(org.olat.modules.portfolio.MediaHandler) FlexiTableColumnModel(org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableColumnModel) CategoriesCellRenderer(org.olat.modules.portfolio.ui.component.CategoriesCellRenderer) DefaultFlexiColumnModel(org.olat.core.gui.components.form.flexible.impl.elements.table.DefaultFlexiColumnModel) VelocityContainer(org.olat.core.gui.components.velocity.VelocityContainer)

Example 38 with Media

use of org.olat.modules.portfolio.Media in project OpenOLAT by OpenOLAT.

the class MediaCenterController method event.

@Override
public void event(UserRequest ureq, Controller source, Event event) {
    if (mediaUploadCtrl == source || textUploadCtrl == source || citationUploadCtrl == source) {
        if (event == Event.DONE_EVENT) {
            loadModel();
            tableEl.reloadData();
        }
        cmc.deactivate();
        cleanUp();
        if (select || event == Event.DONE_EVENT) {
            if (mediaUploadCtrl == source) {
                doSelect(ureq, mediaUploadCtrl.getMediaReference().getKey());
            } else if (textUploadCtrl == source) {
                doSelect(ureq, textUploadCtrl.getMediaReference().getKey());
            } else if (citationUploadCtrl == source) {
                doSelect(ureq, citationUploadCtrl.getMediaReference().getKey());
            }
        }
    } else if (importArtefactv1Ctrl == source) {
        Media media = null;
        if (event instanceof EPArtefactChoosenEvent) {
            EPArtefactChoosenEvent cEvent = (EPArtefactChoosenEvent) event;
            media = doImportArtefactV1(cEvent.getArtefact());
            loadModel();
            tableEl.reloadData();
        } else if (event instanceof EPArtefactListChoosenEvent) {
            EPArtefactListChoosenEvent cmEvent = (EPArtefactListChoosenEvent) event;
            for (AbstractArtefact artefact : cmEvent.getArtefacts()) {
                media = doImportArtefactV1(artefact);
            }
            if (cmEvent.getArtefacts().size() > 1) {
                // only auto select a single media
                media = null;
            }
            loadModel();
            tableEl.reloadData();
            showInfo("message.imported.successfully", new String[] { Integer.toString(cmEvent.getArtefacts().size()) });
        }
        cmc.deactivate();
        cleanUp();
        if (select && media != null) {
            doSelect(ureq, media.getKey());
        }
    } else if (newMediasCtrl == source) {
        newMediasCalloutCtrl.deactivate();
        if ("add.file".equals(event.getCommand())) {
            doAddMedia(ureq, "add.file");
        } else if ("add.media".equals(event.getCommand())) {
            doAddMedia(ureq, "add.media");
        } else if ("add.text".equals(event.getCommand())) {
            doAddTextMedia(ureq);
        } else if ("add.citation".equals(event.getCommand())) {
            doAddCitationMedia(ureq);
        } else if ("import.artefactV1".equals(event.getCommand())) {
            doChooseArtefactV1(ureq);
        }
    } else if (detailsCtrl == source) {
        if (event instanceof MediaEvent) {
            MediaEvent me = (MediaEvent) event;
            if (MediaEvent.DELETED.equals(me.getCommand())) {
                stackPanel.popUpToController(this);
                loadModel();
                tableEl.reset(false, true, true);
            }
        }
    } else if (cmc == source) {
        cleanUp();
    }
    super.event(ureq, source, event);
}
Also used : MediaEvent(org.olat.modules.portfolio.ui.event.MediaEvent) Media(org.olat.modules.portfolio.Media) AbstractArtefact(org.olat.portfolio.model.artefacts.AbstractArtefact) EPArtefactListChoosenEvent(org.olat.portfolio.ui.artefacts.view.EPArtefactListChoosenEvent) EPArtefactChoosenEvent(org.olat.portfolio.ui.artefacts.view.EPArtefactChoosenEvent)

Example 39 with Media

use of org.olat.modules.portfolio.Media in project OpenOLAT by OpenOLAT.

the class MediaCenterController method loadModel.

private void loadModel() {
    String searchString = tableEl.getQuickSearchString();
    List<String> tagNames = getSelectedTagNames();
    Map<Long, MediaRow> currentMap = model.getObjects().stream().collect(Collectors.toMap(r -> r.getKey(), r -> r));
    List<MediaLight> medias = portfolioService.searchOwnedMedias(getIdentity(), searchString, tagNames);
    List<MediaRow> rows = new ArrayList<>(medias.size());
    for (MediaLight media : medias) {
        if (currentMap.containsKey(media.getKey())) {
            rows.add(currentMap.get(media.getKey()));
        } else {
            MediaHandler handler = portfolioService.getMediaHandler(media.getType());
            VFSLeaf thumbnail = handler.getThumbnail(media, THUMBNAIL_SIZE);
            String mediaTitle = StringHelper.escapeHtml(media.getTitle());
            FormLink openLink = uifactory.addFormLink("select_" + (++counter), "select", mediaTitle, null, flc, Link.NONTRANSLATED);
            MediaRow row = new MediaRow(media, thumbnail, openLink, handler.getIconCssClass(media));
            openLink.setUserObject(row);
            rows.add(row);
        }
    }
    model.setObjects(rows);
    model.filter(tableEl.getSelectedFilters());
    Map<Long, MediaRow> rowMap = model.getObjects().stream().collect(Collectors.toMap(r -> r.getKey(), r -> r));
    Set<String> duplicateCategories = new HashSet<>();
    List<CategoryLight> categories = portfolioService.getMediaCategories(getIdentity());
    List<FormLink> newTagLinks = new ArrayList<>(categories.size());
    for (CategoryLight category : categories) {
        String name = category.getCategory();
        MediaRow mRow = rowMap.get(category.getMediaKey());
        if (mRow != null) {
            mRow.addCategory(name);
        }
        if (duplicateCategories.contains(name)) {
            continue;
        }
        duplicateCategories.add(name);
        FormLink tagLink = uifactory.addFormLink("tag_" + (++counter), "tag", name, null, null, Link.NONTRANSLATED);
        CategoryState state = new CategoryState(category, tagNames.contains(name));
        tagLink.setUserObject(state);
        if (state.isSelected()) {
            tagLink.setCustomEnabledLinkCSS("tag label label-info o_disabled");
        } else {
            tagLink.setCustomEnabledLinkCSS("tag label label-info");
        }
        flc.add(tagLink);
        newTagLinks.add(tagLink);
    }
    flc.contextPut("tagLinks", newTagLinks);
    tagLinks = newTagLinks;
}
Also used : FlexiTableElement(org.olat.core.gui.components.form.flexible.elements.FlexiTableElement) EPArtefactListChoosenEvent(org.olat.portfolio.ui.artefacts.view.EPArtefactListChoosenEvent) Activateable2(org.olat.core.gui.control.generic.dtabs.Activateable2) DefaultFlexiColumnModel(org.olat.core.gui.components.form.flexible.impl.elements.table.DefaultFlexiColumnModel) Autowired(org.springframework.beans.factory.annotation.Autowired) MediaResource(org.olat.core.gui.media.MediaResource) OLATResourceable(org.olat.core.id.OLATResourceable) Size(org.olat.core.commons.services.image.Size) Media(org.olat.modules.portfolio.Media) FlexiTableFilter(org.olat.core.gui.components.form.flexible.elements.FlexiTableFilter) OresHelper(org.olat.core.util.resource.OresHelper) MediaRow(org.olat.modules.portfolio.ui.model.MediaRow) Map(java.util.Map) SortKey(org.olat.core.commons.persistence.SortKey) VelocityContainer(org.olat.core.gui.components.velocity.VelocityContainer) CalloutSettings(org.olat.core.gui.control.generic.closablewrapper.CalloutSettings) MediaCols(org.olat.modules.portfolio.ui.MediaDataModel.MediaCols) MediaHandler(org.olat.modules.portfolio.MediaHandler) AbstractArtefact(org.olat.portfolio.model.artefacts.AbstractArtefact) FlexiTableColumnModel(org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableColumnModel) CloseableModalController(org.olat.core.gui.control.generic.closablewrapper.CloseableModalController) VFSLeaf(org.olat.core.util.vfs.VFSLeaf) FlexiTableSort(org.olat.core.gui.components.form.flexible.elements.FlexiTableSort) WindowControl(org.olat.core.gui.control.WindowControl) FlexiTableRendererType(org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableRendererType) PortfolioModule(org.olat.portfolio.PortfolioModule) Set(java.util.Set) MediaEvent(org.olat.modules.portfolio.ui.event.MediaEvent) Component(org.olat.core.gui.components.Component) LinkFactory(org.olat.core.gui.components.link.LinkFactory) Collectors(java.util.stream.Collectors) Mapper(org.olat.core.dispatcher.mapper.Mapper) DefaultFlexiTableCssDelegate(org.olat.core.gui.components.form.flexible.impl.elements.table.DefaultFlexiTableCssDelegate) SelectionEvent(org.olat.core.gui.components.form.flexible.impl.elements.table.SelectionEvent) BasicController(org.olat.core.gui.control.controller.BasicController) List(java.util.List) FormLink(org.olat.core.gui.components.form.flexible.elements.FormLink) Align(org.olat.core.gui.components.stack.TooledStackedPanel.Align) TooledController(org.olat.core.gui.components.stack.TooledController) CloseableCalloutWindowController(org.olat.core.gui.control.generic.closablewrapper.CloseableCalloutWindowController) TooledStackedPanel(org.olat.core.gui.components.stack.TooledStackedPanel) CategoryLight(org.olat.modules.portfolio.model.CategoryLight) CategoriesCellRenderer(org.olat.modules.portfolio.ui.component.CategoriesCellRenderer) FormEvent(org.olat.core.gui.components.form.flexible.impl.FormEvent) CollectCitationMediaController(org.olat.modules.portfolio.ui.media.CollectCitationMediaController) EPArtefactChoosenEvent(org.olat.portfolio.ui.artefacts.view.EPArtefactChoosenEvent) FormItem(org.olat.core.gui.components.form.flexible.FormItem) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) Event(org.olat.core.gui.control.Event) FormBasicController(org.olat.core.gui.components.form.flexible.impl.FormBasicController) HttpServletRequest(javax.servlet.http.HttpServletRequest) FormItemContainer(org.olat.core.gui.components.form.flexible.FormItemContainer) ContextEntry(org.olat.core.id.context.ContextEntry) EPArtefactPoolRunController(org.olat.portfolio.ui.EPArtefactPoolRunController) StringHelper(org.olat.core.util.StringHelper) StateEntry(org.olat.core.id.context.StateEntry) FlexiTableDataModelFactory(org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableDataModelFactory) PortfolioService(org.olat.modules.portfolio.PortfolioService) OrderBy(org.olat.repository.model.SearchMyRepositoryEntryViewParams.OrderBy) Link(org.olat.core.gui.components.link.Link) FlexiTableComponentDelegate(org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableComponentDelegate) CollectTextMediaController(org.olat.modules.portfolio.ui.media.CollectTextMediaController) FlexiTableSearchEvent(org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableSearchEvent) MediaSelectionEvent(org.olat.modules.portfolio.ui.event.MediaSelectionEvent) Controller(org.olat.core.gui.control.Controller) MediaLight(org.olat.modules.portfolio.MediaLight) EPFrontendManager(org.olat.portfolio.manager.EPFrontendManager) FlexiTableSortOptions(org.olat.core.gui.components.form.flexible.elements.FlexiTableSortOptions) VFSMediaResource(org.olat.core.util.vfs.VFSMediaResource) MediaTypeCellRenderer(org.olat.modules.portfolio.ui.renderer.MediaTypeCellRenderer) UserRequest(org.olat.core.gui.UserRequest) VFSLeaf(org.olat.core.util.vfs.VFSLeaf) MediaHandler(org.olat.modules.portfolio.MediaHandler) ArrayList(java.util.ArrayList) FormLink(org.olat.core.gui.components.form.flexible.elements.FormLink) MediaLight(org.olat.modules.portfolio.MediaLight) CategoryLight(org.olat.modules.portfolio.model.CategoryLight) MediaRow(org.olat.modules.portfolio.ui.model.MediaRow) HashSet(java.util.HashSet)

Example 40 with Media

use of org.olat.modules.portfolio.Media in project OpenOLAT by OpenOLAT.

the class MediaCenterController method doOpenMedia.

private Activateable2 doOpenMedia(UserRequest ureq, Long mediaKey) {
    stackPanel.popUpToController(this);
    OLATResourceable bindersOres = OresHelper.createOLATResourceableInstance("Media", mediaKey);
    WindowControl swControl = addToHistory(ureq, bindersOres, null);
    Media media = portfolioService.getMediaByKey(mediaKey);
    detailsCtrl = new MediaDetailsController(ureq, swControl, stackPanel, media);
    listenTo(detailsCtrl);
    stackPanel.pushController(media.getTitle(), detailsCtrl);
    return detailsCtrl;
}
Also used : OLATResourceable(org.olat.core.id.OLATResourceable) Media(org.olat.modules.portfolio.Media) WindowControl(org.olat.core.gui.control.WindowControl)

Aggregations

Media (org.olat.modules.portfolio.Media)60 File (java.io.File)18 Test (org.junit.Test)10 WindowControl (org.olat.core.gui.control.WindowControl)10 Identity (org.olat.core.id.Identity)10 VFSContainer (org.olat.core.util.vfs.VFSContainer)10 MediaHandler (org.olat.modules.portfolio.MediaHandler)10 List (java.util.List)8 Collectors (java.util.stream.Collectors)8 UserRequest (org.olat.core.gui.UserRequest)8 Component (org.olat.core.gui.components.Component)8 OLATResourceable (org.olat.core.id.OLATResourceable)8 ArrayList (java.util.ArrayList)6 HashSet (java.util.HashSet)6 Map (java.util.Map)6 Set (java.util.Set)6 FormItem (org.olat.core.gui.components.form.flexible.FormItem)6 FormItemContainer (org.olat.core.gui.components.form.flexible.FormItemContainer)6 FormLink (org.olat.core.gui.components.form.flexible.elements.FormLink)6 FormBasicController (org.olat.core.gui.components.form.flexible.impl.FormBasicController)6