From 670722d2cbc189c16c1b5bead0b374e2e0d586e6 Mon Sep 17 00:00:00 2001 From: uhensler <urs.hensler@frentix.com> Date: Mon, 8 Apr 2019 11:01:01 +0200 Subject: [PATCH] OO-3929: Refactoring to encaplusate a document editor service --- .../commons/editor/fileeditor/FileEditor.java | 10 +- .../fileeditor/FileEditorController.java | 10 +- .../editor/htmleditor/HTMLEditorConfig.java | 4 +- .../modules/bc/commands/CmdCreateFile.java | 33 +++--- .../modules/bc/commands/CmdOpenContent.java | 28 ++--- .../modules/bc/components/ListRenderer.java | 11 +- .../services/_spring/servicesCorecontext.xml | 19 +++ .../ContentProvider.java | 2 +- .../ContentProviderFactory.java | 2 +- .../DocEditor.java} | 6 +- .../DocEditorConfigs.java} | 14 +-- .../DocEditorSecurityCallback.java} | 6 +- .../DocEditorSecurityCallbackBuilder.java} | 24 ++-- .../DocTemplate.java} | 10 +- .../DocTemplates.java} | 67 ++++++----- .../doceditor/DocumentEditorService.java | 75 ++++++++++++ .../doceditor}/collabora/CollaboraEditor.java | 14 +-- .../doceditor}/collabora/CollaboraModule.java | 2 +- .../CollaboraRefreshDiscoveryEvent.java | 2 +- .../collabora/CollaboraService.java | 12 +- .../manager/CollaboraServiceImpl.java | 24 ++-- .../collabora/restapi/CheckFileInfoVO.java | 2 +- .../collabora/restapi/FilesWebService.java | 12 +- .../collabora/restapi/PutFileVO.java | 2 +- .../ui/CollaboraAdminController.java | 14 +-- .../ui/CollaboraEditorController.java | 18 +-- .../ui/CollaboraEditorUrlBuilder.java | 4 +- .../collabora/ui/CollaboraUIFactory.java | 2 +- .../collabora/ui/_content/collabora.html | 0 .../ui/_i18n/LocalStrings_de.properties | 0 .../ui/_i18n/LocalStrings_en.properties | 0 .../{filetemplate => doceditor}/empty.pptx | Bin .../manager/DocumentEditorServiceImpl.java | 88 ++++++++++++++ .../ui/CreateDocumentController.java} | 108 +++++++++--------- .../ui/DocEditorConfigController.java} | 46 ++++---- .../ui/DocEditorController.java} | 34 +++--- .../ui/DocEditorFullscreenController.java} | 22 ++-- .../ui/DocEditorSelectionEvent.java} | 12 +- .../ui/_content/create_document.html} | 2 +- .../doceditor/ui/_content/editor_config.html | 18 +++ .../doceditor/ui/_content/editor_main.html | 10 ++ .../ui/_i18n/LocalStrings_de.properties | 12 ++ .../ui/_i18n/LocalStrings_en.properties | 12 ++ .../services/doceditor}/wopi/Access.java | 2 +- .../services/doceditor}/wopi/Action.java | 2 +- .../commons/services/doceditor}/wopi/App.java | 2 +- .../services/doceditor}/wopi/Discovery.java | 2 +- .../services/doceditor}/wopi/NetZone.java | 2 +- .../services/doceditor}/wopi/ProofKey.java | 2 +- .../doceditor}/wopi/WopiDiscoveryClient.java | 2 +- .../doceditor}/wopi/WopiRestHelper.java | 2 +- .../services/doceditor}/wopi/WopiService.java | 6 +- .../wopi/manager/WopiDiscoveryClientImpl.java | 8 +- .../wopi/manager/WopiServiceImpl.java | 22 ++-- .../doceditor}/wopi/manager/WopiXStream.java | 12 +- .../doceditor}/wopi/model/AccessImpl.java | 4 +- .../doceditor}/wopi/model/ActionImpl.java | 4 +- .../doceditor}/wopi/model/AppImpl.java | 6 +- .../doceditor}/wopi/model/DiscoveryImpl.java | 8 +- .../doceditor}/wopi/model/NetZoneImpl.java | 6 +- .../doceditor}/wopi/model/ProofKeyImpl.java | 4 +- .../ui/_i18n/LocalStrings_de.properties | 11 -- .../ui/_i18n/LocalStrings_en.properties | 11 -- .../services/vfs/VFSRepositoryService.java | 42 ------- .../vfs/manager/VFSRepositoryServiceImpl.java | 47 -------- .../ui/AbstractAssignmentEditController.java | 43 +++---- .../ui/GTASampleSolutionsEditController.java | 41 +++---- .../course/nodes/gta/ui/GTAUIFactory.java | 41 ++++--- .../nodes/gta/ui/NewDocumentController.java | 52 ++++----- .../nodes/gta/ui/NewSolutionController.java | 56 ++++----- .../nodes/gta/ui/NewTaskController.java | 56 ++++----- .../olat/course/nodes/gta/ui/SolutionRow.java | 2 +- .../gta/ui/SubmitDocumentsController.java | 46 +++----- .../nodes/gta/ui/TaskDefinitionRow.java | 2 +- .../gta/ui/component/ModeCellRenderer.java | 2 +- .../olat/modules/_spring/modulesContext.xml | 20 ---- .../portfolio/handler/CreateFileHandler.java | 22 ++-- .../portfolio/ui/MediaCenterController.java | 8 +- .../portfolio/ui/PageRunController.java | 14 +-- .../ui/_i18n/LocalStrings_de.properties | 6 +- .../ui/_i18n/LocalStrings_en.properties | 6 +- .../ui/media/CreateFileMediaController.java | 30 ++--- .../ui/media/FileMediaController.java | 37 +++--- ...egate.java => DocumentEditorDelegate.java} | 26 ++--- ...e.java => DocumentEditorDelegateType.java} | 2 +- .../handlers/ExcelVFSEditorDelegateType.java | 4 +- .../PowerPointVFSEditorDelegateType.java | 4 +- .../handlers/RepositoryHandlerFactory.java | 6 +- .../handlers/WordVFSEditorDelegateType.java | 4 +- .../ui/WebDocumentRunController.java | 20 ++-- .../wopi/manager/WopiServiceImplTest.java | 17 +-- .../wopi/manager/WopiXStreamTest.java | 13 ++- .../wopi/manager/discovery_collabora.xml | 0 .../wopi/manager/discovery_microsoft.xml | 0 .../java/org/olat/test/AllTestsJunit4.java | 4 +- 95 files changed, 840 insertions(+), 744 deletions(-) rename src/main/java/org/olat/core/commons/services/{filetemplate => doceditor}/ContentProvider.java (95%) rename src/main/java/org/olat/core/commons/services/{filetemplate => doceditor}/ContentProviderFactory.java (98%) rename src/main/java/org/olat/core/commons/services/{vfs/VFSLeafEditor.java => doceditor/DocEditor.java} (92%) rename src/main/java/org/olat/core/commons/services/{vfs/VFSLeafEditorConfigs.java => doceditor/DocEditorConfigs.java} (81%) rename src/main/java/org/olat/core/commons/services/{vfs/VFSLeafEditorSecurityCallback.java => doceditor/DocEditorSecurityCallback.java} (86%) rename src/main/java/org/olat/core/commons/services/{vfs/VFSLeafEditorSecurityCallbackBuilder.java => doceditor/DocEditorSecurityCallbackBuilder.java} (76%) rename src/main/java/org/olat/core/commons/services/{filetemplate/FileType.java => doceditor/DocTemplate.java} (80%) rename src/main/java/org/olat/core/commons/services/{filetemplate/FileTypes.java => doceditor/DocTemplates.java} (50%) create mode 100644 src/main/java/org/olat/core/commons/services/doceditor/DocumentEditorService.java rename src/main/java/org/olat/{modules/wopi => core/commons/services/doceditor}/collabora/CollaboraEditor.java (83%) rename src/main/java/org/olat/{modules/wopi => core/commons/services/doceditor}/collabora/CollaboraModule.java (97%) rename src/main/java/org/olat/{modules/wopi => core/commons/services/doceditor}/collabora/CollaboraRefreshDiscoveryEvent.java (95%) rename src/main/java/org/olat/{modules/wopi => core/commons/services/doceditor}/collabora/CollaboraService.java (85%) rename src/main/java/org/olat/{modules/wopi => core/commons/services/doceditor}/collabora/manager/CollaboraServiceImpl.java (88%) rename src/main/java/org/olat/{modules/wopi => core/commons/services/doceditor}/collabora/restapi/CheckFileInfoVO.java (99%) rename src/main/java/org/olat/{modules/wopi => core/commons/services/doceditor}/collabora/restapi/FilesWebService.java (94%) rename src/main/java/org/olat/{modules/wopi => core/commons/services/doceditor}/collabora/restapi/PutFileVO.java (96%) rename src/main/java/org/olat/{modules/wopi => core/commons/services/doceditor}/collabora/ui/CollaboraAdminController.java (89%) rename src/main/java/org/olat/{modules/wopi => core/commons/services/doceditor}/collabora/ui/CollaboraEditorController.java (83%) rename src/main/java/org/olat/{modules/wopi => core/commons/services/doceditor}/collabora/ui/CollaboraEditorUrlBuilder.java (95%) rename src/main/java/org/olat/{modules/wopi => core/commons/services/doceditor}/collabora/ui/CollaboraUIFactory.java (95%) rename src/main/java/org/olat/{modules/wopi => core/commons/services/doceditor}/collabora/ui/_content/collabora.html (100%) rename src/main/java/org/olat/{modules/wopi => core/commons/services/doceditor}/collabora/ui/_i18n/LocalStrings_de.properties (100%) rename src/main/java/org/olat/{modules/wopi => core/commons/services/doceditor}/collabora/ui/_i18n/LocalStrings_en.properties (100%) rename src/main/java/org/olat/core/commons/services/{filetemplate => doceditor}/empty.pptx (100%) create mode 100644 src/main/java/org/olat/core/commons/services/doceditor/manager/DocumentEditorServiceImpl.java rename src/main/java/org/olat/core/commons/services/{filetemplate/ui/CreateFileController.java => doceditor/ui/CreateDocumentController.java} (59%) rename src/main/java/org/olat/core/commons/services/{vfs/ui/editor/VFSLeafConfigController.java => doceditor/ui/DocEditorConfigController.java} (72%) rename src/main/java/org/olat/core/commons/services/{vfs/ui/editor/VFSLeafEditorController.java => doceditor/ui/DocEditorController.java} (70%) rename src/main/java/org/olat/core/commons/services/{vfs/ui/editor/VFSLeafEditorFullscreenController.java => doceditor/ui/DocEditorFullscreenController.java} (75%) rename src/main/java/org/olat/core/commons/services/{vfs/ui/editor/VFSEditorSelectionEvent.java => doceditor/ui/DocEditorSelectionEvent.java} (79%) rename src/main/java/org/olat/core/commons/services/{filetemplate/ui/_content/create_file.html => doceditor/ui/_content/create_document.html} (82%) create mode 100644 src/main/java/org/olat/core/commons/services/doceditor/ui/_content/editor_config.html create mode 100644 src/main/java/org/olat/core/commons/services/doceditor/ui/_content/editor_main.html create mode 100644 src/main/java/org/olat/core/commons/services/doceditor/ui/_i18n/LocalStrings_de.properties create mode 100644 src/main/java/org/olat/core/commons/services/doceditor/ui/_i18n/LocalStrings_en.properties rename src/main/java/org/olat/{modules => core/commons/services/doceditor}/wopi/Access.java (95%) rename src/main/java/org/olat/{modules => core/commons/services/doceditor}/wopi/Action.java (95%) rename src/main/java/org/olat/{modules => core/commons/services/doceditor}/wopi/App.java (95%) rename src/main/java/org/olat/{modules => core/commons/services/doceditor}/wopi/Discovery.java (95%) rename src/main/java/org/olat/{modules => core/commons/services/doceditor}/wopi/NetZone.java (94%) rename src/main/java/org/olat/{modules => core/commons/services/doceditor}/wopi/ProofKey.java (95%) rename src/main/java/org/olat/{modules => core/commons/services/doceditor}/wopi/WopiDiscoveryClient.java (95%) rename src/main/java/org/olat/{modules => core/commons/services/doceditor}/wopi/WopiRestHelper.java (96%) rename src/main/java/org/olat/{modules => core/commons/services/doceditor}/wopi/WopiService.java (90%) rename src/main/java/org/olat/{modules => core/commons/services/doceditor}/wopi/manager/WopiDiscoveryClientImpl.java (90%) rename src/main/java/org/olat/{modules => core/commons/services/doceditor}/wopi/manager/WopiServiceImpl.java (86%) rename src/main/java/org/olat/{modules => core/commons/services/doceditor}/wopi/manager/WopiXStream.java (88%) rename src/main/java/org/olat/{modules => core/commons/services/doceditor}/wopi/model/AccessImpl.java (94%) rename src/main/java/org/olat/{modules => core/commons/services/doceditor}/wopi/model/ActionImpl.java (93%) rename src/main/java/org/olat/{modules => core/commons/services/doceditor}/wopi/model/AppImpl.java (90%) rename src/main/java/org/olat/{modules => core/commons/services/doceditor}/wopi/model/DiscoveryImpl.java (84%) rename src/main/java/org/olat/{modules => core/commons/services/doceditor}/wopi/model/NetZoneImpl.java (87%) rename src/main/java/org/olat/{modules => core/commons/services/doceditor}/wopi/model/ProofKeyImpl.java (94%) delete mode 100644 src/main/java/org/olat/core/commons/services/filetemplate/ui/_i18n/LocalStrings_de.properties delete mode 100644 src/main/java/org/olat/core/commons/services/filetemplate/ui/_i18n/LocalStrings_en.properties rename src/main/java/org/olat/repository/handlers/{VFSEditorDelegate.java => DocumentEditorDelegate.java} (79%) rename src/main/java/org/olat/repository/handlers/{VFSEditorDelegateType.java => DocumentEditorDelegateType.java} (96%) rename src/test/java/org/olat/{modules => core/commons/services/doceditor}/wopi/manager/WopiServiceImplTest.java (78%) rename src/test/java/org/olat/{modules => core/commons/services/doceditor}/wopi/manager/WopiXStreamTest.java (90%) rename src/test/java/org/olat/{modules => core/commons/services/doceditor}/wopi/manager/discovery_collabora.xml (100%) rename src/test/java/org/olat/{modules => core/commons/services/doceditor}/wopi/manager/discovery_microsoft.xml (100%) diff --git a/src/main/java/org/olat/core/commons/editor/fileeditor/FileEditor.java b/src/main/java/org/olat/core/commons/editor/fileeditor/FileEditor.java index 3bec91a5c74..74b696fb196 100644 --- a/src/main/java/org/olat/core/commons/editor/fileeditor/FileEditor.java +++ b/src/main/java/org/olat/core/commons/editor/fileeditor/FileEditor.java @@ -23,9 +23,9 @@ import java.util.Arrays; import java.util.List; import java.util.Locale; -import org.olat.core.commons.services.vfs.VFSLeafEditor; -import org.olat.core.commons.services.vfs.VFSLeafEditorConfigs; -import org.olat.core.commons.services.vfs.VFSLeafEditorSecurityCallback; +import org.olat.core.commons.services.doceditor.DocEditor; +import org.olat.core.commons.services.doceditor.DocEditorConfigs; +import org.olat.core.commons.services.doceditor.DocEditorSecurityCallback; import org.olat.core.gui.UserRequest; import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.WindowControl; @@ -45,7 +45,7 @@ import org.springframework.stereotype.Service; * */ @Service -public class FileEditor implements VFSLeafEditor { +public class FileEditor implements DocEditor { private static final List<String> HTML_EDITOR_SUFFIX = Arrays.asList("html", "htm"); private static final List<String> TEXT_EDITOR_SUFFIX = Arrays.asList("txt", "css", "csv"); @@ -85,7 +85,7 @@ public class FileEditor implements VFSLeafEditor { @Override public Controller getRunController(UserRequest ureq, WindowControl wControl, Identity identity, VFSLeaf vfsLeaf, - VFSLeafEditorSecurityCallback secCallback, VFSLeafEditorConfigs configs) { + DocEditorSecurityCallback secCallback, DocEditorConfigs configs) { return new FileEditorController(ureq, wControl, vfsLeaf, secCallback, configs); } diff --git a/src/main/java/org/olat/core/commons/editor/fileeditor/FileEditorController.java b/src/main/java/org/olat/core/commons/editor/fileeditor/FileEditorController.java index bcdaea568f0..3e3c91feebc 100644 --- a/src/main/java/org/olat/core/commons/editor/fileeditor/FileEditorController.java +++ b/src/main/java/org/olat/core/commons/editor/fileeditor/FileEditorController.java @@ -32,10 +32,10 @@ import org.olat.core.commons.editor.htmleditor.HTMLEditorController; import org.olat.core.commons.editor.htmleditor.HTMLReadOnlyController; import org.olat.core.commons.editor.htmleditor.WysiwygFactory; import org.olat.core.commons.editor.plaintexteditor.TextEditorController; -import org.olat.core.commons.services.vfs.VFSLeafEditor.Mode; -import org.olat.core.commons.services.vfs.VFSLeafEditorConfigs; -import org.olat.core.commons.services.vfs.VFSLeafEditorConfigs.Config; -import org.olat.core.commons.services.vfs.VFSLeafEditorSecurityCallback; +import org.olat.core.commons.services.doceditor.DocEditorConfigs; +import org.olat.core.commons.services.doceditor.DocEditorSecurityCallback; +import org.olat.core.commons.services.doceditor.DocEditor.Mode; +import org.olat.core.commons.services.doceditor.DocEditorConfigs.Config; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.Component; import org.olat.core.gui.components.velocity.VelocityContainer; @@ -64,7 +64,7 @@ public class FileEditorController extends BasicController { private VFSLockManager vfsLockManager; protected FileEditorController(UserRequest ureq, WindowControl wControl, VFSLeaf vfsLeaf, - VFSLeafEditorSecurityCallback secCallback, VFSLeafEditorConfigs configs) { + DocEditorSecurityCallback secCallback, DocEditorConfigs configs) { super(ureq, wControl); this.vfsLeaf = vfsLeaf; diff --git a/src/main/java/org/olat/core/commons/editor/htmleditor/HTMLEditorConfig.java b/src/main/java/org/olat/core/commons/editor/htmleditor/HTMLEditorConfig.java index d531932b36c..3663af3cd2a 100644 --- a/src/main/java/org/olat/core/commons/editor/htmleditor/HTMLEditorConfig.java +++ b/src/main/java/org/olat/core/commons/editor/htmleditor/HTMLEditorConfig.java @@ -20,7 +20,7 @@ package org.olat.core.commons.editor.htmleditor; import org.olat.core.commons.controllers.linkchooser.CustomLinkTreeModel; -import org.olat.core.commons.services.vfs.VFSLeafEditorConfigs; +import org.olat.core.commons.services.doceditor.DocEditorConfigs; import org.olat.core.util.vfs.VFSContainer; import org.olat.modules.edusharing.VFSEdusharingProvider; @@ -30,7 +30,7 @@ import org.olat.modules.edusharing.VFSEdusharingProvider; * @author uhensler, urs.hensler@frentix.com, http://www.frentix.com * */ -public class HTMLEditorConfig implements VFSLeafEditorConfigs.Config { +public class HTMLEditorConfig implements DocEditorConfigs.Config { public static final String TYPE = "oo-html-editor"; diff --git a/src/main/java/org/olat/core/commons/modules/bc/commands/CmdCreateFile.java b/src/main/java/org/olat/core/commons/modules/bc/commands/CmdCreateFile.java index 231b5055275..65bdd8ede22 100644 --- a/src/main/java/org/olat/core/commons/modules/bc/commands/CmdCreateFile.java +++ b/src/main/java/org/olat/core/commons/modules/bc/commands/CmdCreateFile.java @@ -31,21 +31,22 @@ import org.olat.core.commons.editor.htmleditor.HTMLEditorConfig; import org.olat.core.commons.modules.bc.FolderEvent; import org.olat.core.commons.modules.bc.FolderLicenseHandler; import org.olat.core.commons.modules.bc.components.FolderComponent; -import org.olat.core.commons.services.filetemplate.FileTypes; -import org.olat.core.commons.services.filetemplate.ui.CreateFileController; +import org.olat.core.commons.services.doceditor.DocTemplates; +import org.olat.core.commons.services.doceditor.DocEditor; +import org.olat.core.commons.services.doceditor.DocEditorConfigs; +import org.olat.core.commons.services.doceditor.DocEditorSecurityCallback; +import org.olat.core.commons.services.doceditor.DocEditorSecurityCallbackBuilder; +import org.olat.core.commons.services.doceditor.DocumentEditorService; +import org.olat.core.commons.services.doceditor.ui.CreateDocumentController; +import org.olat.core.commons.services.doceditor.ui.DocEditorFullscreenController; import org.olat.core.commons.services.license.License; import org.olat.core.commons.services.license.LicenseModule; import org.olat.core.commons.services.license.LicenseService; import org.olat.core.commons.services.license.ui.LicenseUIFactory; import org.olat.core.commons.services.notifications.NotificationsManager; import org.olat.core.commons.services.notifications.SubscriptionContext; -import org.olat.core.commons.services.vfs.VFSLeafEditor; -import org.olat.core.commons.services.vfs.VFSLeafEditorConfigs; -import org.olat.core.commons.services.vfs.VFSLeafEditorSecurityCallback; -import org.olat.core.commons.services.vfs.VFSLeafEditorSecurityCallbackBuilder; import org.olat.core.commons.services.vfs.VFSMetadata; import org.olat.core.commons.services.vfs.VFSRepositoryService; -import org.olat.core.commons.services.vfs.ui.editor.VFSLeafEditorFullscreenController; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.Component; import org.olat.core.gui.control.Controller; @@ -77,7 +78,7 @@ public class CmdCreateFile extends BasicController implements FolderCommand { private String fileName; private CloseableModalController cmc; - private CreateFileController createCtrl; + private CreateDocumentController createCtrl; private Controller editorCtr; private FolderComponent folderComponent; @@ -91,6 +92,8 @@ public class CmdCreateFile extends BasicController implements FolderCommand { private FolderLicenseHandler licenseHandler; @Autowired private VFSRepositoryService vfsRepositoryService; + @Autowired + private DocumentEditorService docEditorService; protected CmdCreateFile(UserRequest ureq, WindowControl wControl) { super(ureq, wControl); @@ -113,8 +116,8 @@ public class CmdCreateFile extends BasicController implements FolderCommand { return null; } - FileTypes fileTypes = FileTypes.editables(getLocale()).build(); - createCtrl = new CreateFileController(ureq, wControl, folderComponent.getCurrentContainer(), fileTypes); + DocTemplates docTemplates = DocTemplates.editables(getLocale()).build(); + createCtrl = new CreateDocumentController(ureq, wControl, folderComponent.getCurrentContainer(), docTemplates); listenTo(createCtrl); cmc = new CloseableModalController(getWindowControl(), translate("close"), createCtrl.getInitialComponent(), @@ -181,7 +184,7 @@ public class CmdCreateFile extends BasicController implements FolderCommand { private void doEdit(UserRequest ureq) { String suffix = FileUtils.getFileSuffix(vfsLeaf.getName()); - List<VFSLeafEditor> editors = vfsRepositoryService.getEditors(suffix, VFSLeafEditor.Mode.EDIT); + List<DocEditor> editors = docEditorService.getEditors(suffix, DocEditor.Mode.EDIT); // Not able to decide which editor to use -> show the folder list if (editors.size() != 1) { fireEvent(ureq, new FolderEvent(FolderEvent.NEW_FILE_EVENT, fileName)); @@ -189,15 +192,15 @@ public class CmdCreateFile extends BasicController implements FolderCommand { return; } - VFSLeafEditorSecurityCallback secCallback = VFSLeafEditorSecurityCallbackBuilder.builder() - .withMode(VFSLeafEditor.Mode.EDIT) + DocEditorSecurityCallback secCallback = DocEditorSecurityCallbackBuilder.builder() + .withMode(DocEditor.Mode.EDIT) .withVersionControlled(true) .build(); HTMLEditorConfig htmlEditorConfig = getHtmlEditorConfig(); - VFSLeafEditorConfigs configs = VFSLeafEditorConfigs.builder() + DocEditorConfigs configs = DocEditorConfigs.builder() .addConfig(htmlEditorConfig) .build(); - editorCtr = new VFSLeafEditorFullscreenController(ureq, getWindowControl(), vfsLeaf, secCallback, configs); + editorCtr = new DocEditorFullscreenController(ureq, getWindowControl(), vfsLeaf, secCallback, configs); listenTo(editorCtr); } diff --git a/src/main/java/org/olat/core/commons/modules/bc/commands/CmdOpenContent.java b/src/main/java/org/olat/core/commons/modules/bc/commands/CmdOpenContent.java index 86ce31a7045..95f798b810d 100644 --- a/src/main/java/org/olat/core/commons/modules/bc/commands/CmdOpenContent.java +++ b/src/main/java/org/olat/core/commons/modules/bc/commands/CmdOpenContent.java @@ -22,14 +22,14 @@ package org.olat.core.commons.modules.bc.commands; import org.olat.core.commons.editor.htmleditor.HTMLEditorConfig; import org.olat.core.commons.modules.bc.components.FolderComponent; import org.olat.core.commons.modules.bc.components.ListRenderer; +import org.olat.core.commons.services.doceditor.DocEditor; +import org.olat.core.commons.services.doceditor.DocEditorConfigs; +import org.olat.core.commons.services.doceditor.DocEditorSecurityCallback; +import org.olat.core.commons.services.doceditor.DocEditorSecurityCallbackBuilder; +import org.olat.core.commons.services.doceditor.DocumentEditorService; +import org.olat.core.commons.services.doceditor.ui.DocEditorFullscreenController; import org.olat.core.commons.services.notifications.NotificationsManager; import org.olat.core.commons.services.notifications.SubscriptionContext; -import org.olat.core.commons.services.vfs.VFSLeafEditor; -import org.olat.core.commons.services.vfs.VFSLeafEditorConfigs; -import org.olat.core.commons.services.vfs.VFSLeafEditorSecurityCallback; -import org.olat.core.commons.services.vfs.VFSLeafEditorSecurityCallbackBuilder; -import org.olat.core.commons.services.vfs.VFSRepositoryService; -import org.olat.core.commons.services.vfs.ui.editor.VFSLeafEditorFullscreenController; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.Component; import org.olat.core.gui.control.Controller; @@ -61,7 +61,7 @@ public class CmdOpenContent extends BasicController implements FolderCommand { private Controller editCtrl; @Autowired - private VFSRepositoryService vfsService; + private DocumentEditorService docEditorService; protected CmdOpenContent(UserRequest ureq, WindowControl wControl) { super(ureq, wControl); @@ -105,25 +105,25 @@ public class CmdOpenContent extends BasicController implements FolderCommand { VFSLeaf vfsLeaf = (VFSLeaf) currentItem; VFSContainer container = VFSManager.findInheritingSecurityCallbackContainer(folderComponent.getCurrentContainer()); VFSSecurityCallback containerSecCallback = container.getLocalSecurityCallback(); - VFSLeafEditorSecurityCallback secCallback = VFSLeafEditorSecurityCallbackBuilder.builder() + DocEditorSecurityCallback secCallback = DocEditorSecurityCallbackBuilder.builder() .withMode(getMode(vfsLeaf, containerSecCallback.canWrite())) .withVersionControlled(true) .build(); HTMLEditorConfig htmlEditorConfig = getHtmlEditorConfig(vfsLeaf); - VFSLeafEditorConfigs configs = VFSLeafEditorConfigs.builder() + DocEditorConfigs configs = DocEditorConfigs.builder() .addConfig(htmlEditorConfig) .build(); - editCtrl = new VFSLeafEditorFullscreenController(ureq, getWindowControl(), vfsLeaf, secCallback, configs); + editCtrl = new DocEditorFullscreenController(ureq, getWindowControl(), vfsLeaf, secCallback, configs); listenTo(editCtrl); return this; } - private VFSLeafEditor.Mode getMode(VFSLeaf vfsLeaf, boolean canWrite) { - if (canWrite && vfsService.hasEditor(vfsLeaf, VFSLeafEditor.Mode.EDIT, getIdentity())) { - return VFSLeafEditor.Mode.EDIT; + private DocEditor.Mode getMode(VFSLeaf vfsLeaf, boolean canWrite) { + if (canWrite && docEditorService.hasEditor(vfsLeaf, DocEditor.Mode.EDIT, getIdentity())) { + return DocEditor.Mode.EDIT; } - return VFSLeafEditor.Mode.VIEW; + return DocEditor.Mode.VIEW; } private HTMLEditorConfig getHtmlEditorConfig(VFSLeaf vfsLeaf) { diff --git a/src/main/java/org/olat/core/commons/modules/bc/components/ListRenderer.java b/src/main/java/org/olat/core/commons/modules/bc/components/ListRenderer.java index ef2009f6ea4..fd7e28d4a7d 100644 --- a/src/main/java/org/olat/core/commons/modules/bc/components/ListRenderer.java +++ b/src/main/java/org/olat/core/commons/modules/bc/components/ListRenderer.java @@ -37,11 +37,12 @@ import org.olat.core.CoreSpringFactory; import org.olat.core.commons.modules.bc.FileSelection; import org.olat.core.commons.modules.bc.FolderLicenseHandler; import org.olat.core.commons.modules.bc.FolderManager; +import org.olat.core.commons.services.doceditor.DocEditor.Mode; +import org.olat.core.commons.services.doceditor.DocumentEditorService; import org.olat.core.commons.services.license.License; import org.olat.core.commons.services.license.LicenseHandler; import org.olat.core.commons.services.license.LicenseModule; import org.olat.core.commons.services.license.ui.LicenseRenderer; -import org.olat.core.commons.services.vfs.VFSLeafEditor.Mode; import org.olat.core.commons.services.vfs.VFSMetadata; import org.olat.core.commons.services.vfs.VFSRepositoryService; import org.olat.core.commons.services.vfs.VFSVersionModule; @@ -96,6 +97,7 @@ public class ListRenderer { private VFSRepositoryService vfsRepositoryService; private VFSVersionModule vfsVersionModule; private VFSLockManager lockManager; + private DocumentEditorService docEditorService; private UserManager userManager; boolean licensesEnabled ; @@ -129,6 +131,9 @@ public class ListRenderer { if(vfsVersionModule == null) { vfsVersionModule = CoreSpringFactory.getImpl(VFSVersionModule.class); } + if (docEditorService == null) { + docEditorService = CoreSpringFactory.getImpl(DocumentEditorService.class); + } LicenseModule licenseModule = CoreSpringFactory.getImpl(LicenseModule.class); LicenseHandler licenseHandler = CoreSpringFactory.getImpl(FolderLicenseHandler.class); @@ -508,9 +513,9 @@ public class ListRenderer { private String getOpenIconCss(VFSItem child, boolean canWrite, Identity identity) { if (child instanceof VFSLeaf) { VFSLeaf vfsLeaf = (VFSLeaf) child; - if (canWrite && vfsRepositoryService.hasEditor(vfsLeaf, Mode.EDIT, identity)) { + if (canWrite && docEditorService.hasEditor(vfsLeaf, Mode.EDIT, identity)) { return "o_icon_edit"; - } else if (vfsRepositoryService.hasEditor(vfsLeaf, Mode.VIEW, identity)) { + } else if (docEditorService.hasEditor(vfsLeaf, Mode.VIEW, identity)) { return "o_icon_preview"; } } diff --git a/src/main/java/org/olat/core/commons/services/_spring/servicesCorecontext.xml b/src/main/java/org/olat/core/commons/services/_spring/servicesCorecontext.xml index 60ec9aecc3c..ed281a1287f 100644 --- a/src/main/java/org/olat/core/commons/services/_spring/servicesCorecontext.xml +++ b/src/main/java/org/olat/core/commons/services/_spring/servicesCorecontext.xml @@ -118,6 +118,25 @@ </property> </bean> + <!-- Collabora admin. panel --> + <bean class="org.olat.core.extensions.action.GenericActionExtension" init-method="initExtensionPoints"> + <property name="order" value="8256" /> + <property name="actionController"> + <bean class="org.olat.core.gui.control.creator.AutoCreator" scope="prototype"> + <property name="className" value="org.olat.core.commons.services.doceditor.collabora.ui.CollaboraAdminController"/> + </bean> + </property> + <property name="navigationKey" value="collabora" /> + <property name="i18nActionKey" value="admin.menu.title"/> + <property name="i18nDescriptionKey" value="admin.menu.title.alt"/> + <property name="translationPackage" value="org.olat.core.commons.services.doceditor.collabora.ui"/> + <property name="parentTreeNodeIdentifier" value="externalToolsParent" /> + <property name="extensionPoints"> + <list> + <value>org.olat.admin.SystemAdminMainController</value> + </list> + </property> + </bean> <!-- Cleaning job for CSP reports --> <bean id="cspCleanupJob" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> diff --git a/src/main/java/org/olat/core/commons/services/filetemplate/ContentProvider.java b/src/main/java/org/olat/core/commons/services/doceditor/ContentProvider.java similarity index 95% rename from src/main/java/org/olat/core/commons/services/filetemplate/ContentProvider.java rename to src/main/java/org/olat/core/commons/services/doceditor/ContentProvider.java index 98ad7ccf3ed..75b720c0a51 100644 --- a/src/main/java/org/olat/core/commons/services/filetemplate/ContentProvider.java +++ b/src/main/java/org/olat/core/commons/services/doceditor/ContentProvider.java @@ -17,7 +17,7 @@ * frentix GmbH, http://www.frentix.com * <p> */ -package org.olat.core.commons.services.filetemplate; +package org.olat.core.commons.services.doceditor; import java.io.InputStream; diff --git a/src/main/java/org/olat/core/commons/services/filetemplate/ContentProviderFactory.java b/src/main/java/org/olat/core/commons/services/doceditor/ContentProviderFactory.java similarity index 98% rename from src/main/java/org/olat/core/commons/services/filetemplate/ContentProviderFactory.java rename to src/main/java/org/olat/core/commons/services/doceditor/ContentProviderFactory.java index f1aacdba2c9..5439478bd8f 100644 --- a/src/main/java/org/olat/core/commons/services/filetemplate/ContentProviderFactory.java +++ b/src/main/java/org/olat/core/commons/services/doceditor/ContentProviderFactory.java @@ -17,7 +17,7 @@ * frentix GmbH, http://www.frentix.com * <p> */ -package org.olat.core.commons.services.filetemplate; +package org.olat.core.commons.services.doceditor; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; diff --git a/src/main/java/org/olat/core/commons/services/vfs/VFSLeafEditor.java b/src/main/java/org/olat/core/commons/services/doceditor/DocEditor.java similarity index 92% rename from src/main/java/org/olat/core/commons/services/vfs/VFSLeafEditor.java rename to src/main/java/org/olat/core/commons/services/doceditor/DocEditor.java index 0f8ed28d40e..3720ab016f3 100644 --- a/src/main/java/org/olat/core/commons/services/vfs/VFSLeafEditor.java +++ b/src/main/java/org/olat/core/commons/services/doceditor/DocEditor.java @@ -17,7 +17,7 @@ * frentix GmbH, http://www.frentix.com * <p> */ -package org.olat.core.commons.services.vfs; +package org.olat.core.commons.services.doceditor; import java.util.Locale; @@ -33,7 +33,7 @@ import org.olat.core.util.vfs.VFSLeaf; * @author uhensler, urs.hensler@frentix.com, http://www.frentix.com * */ -public interface VFSLeafEditor { +public interface DocEditor { public enum Mode {EDIT, VIEW}; @@ -63,7 +63,7 @@ public interface VFSLeafEditor { boolean isLockedForMe(VFSLeaf vfsLeaf, Mode mode, Identity identity); Controller getRunController(UserRequest ureq, WindowControl wControl, Identity identity, VFSLeaf vfsLeaf, - VFSLeafEditorSecurityCallback securityCallback, VFSLeafEditorConfigs configs); + DocEditorSecurityCallback securityCallback, DocEditorConfigs configs); } diff --git a/src/main/java/org/olat/core/commons/services/vfs/VFSLeafEditorConfigs.java b/src/main/java/org/olat/core/commons/services/doceditor/DocEditorConfigs.java similarity index 81% rename from src/main/java/org/olat/core/commons/services/vfs/VFSLeafEditorConfigs.java rename to src/main/java/org/olat/core/commons/services/doceditor/DocEditorConfigs.java index 99402ac35bb..15bcce94099 100644 --- a/src/main/java/org/olat/core/commons/services/vfs/VFSLeafEditorConfigs.java +++ b/src/main/java/org/olat/core/commons/services/doceditor/DocEditorConfigs.java @@ -17,7 +17,7 @@ * frentix GmbH, http://www.frentix.com * <p> */ -package org.olat.core.commons.services.vfs; +package org.olat.core.commons.services.doceditor; import java.util.HashMap; import java.util.Map; @@ -28,17 +28,17 @@ import java.util.Map; * @author uhensler, urs.hensler@frentix.com, http://www.frentix.com * */ -public class VFSLeafEditorConfigs { +public class DocEditorConfigs { public static interface Config { public String getType(); } - private static final VFSLeafEditorConfigs NONE = VFSLeafEditorConfigs.builder().build(); + private static final DocEditorConfigs NONE = DocEditorConfigs.builder().build(); private Map<String, Config> configs; - private VFSLeafEditorConfigs(Builder builder) { + private DocEditorConfigs(Builder builder) { this.configs = new HashMap<>(builder.configs); } @@ -46,7 +46,7 @@ public class VFSLeafEditorConfigs { return this.configs.get(type); } - public static VFSLeafEditorConfigs none() { + public static DocEditorConfigs none() { return NONE; } @@ -65,8 +65,8 @@ public class VFSLeafEditorConfigs { return this; } - public VFSLeafEditorConfigs build() { - return new VFSLeafEditorConfigs(this); + public DocEditorConfigs build() { + return new DocEditorConfigs(this); } } diff --git a/src/main/java/org/olat/core/commons/services/vfs/VFSLeafEditorSecurityCallback.java b/src/main/java/org/olat/core/commons/services/doceditor/DocEditorSecurityCallback.java similarity index 86% rename from src/main/java/org/olat/core/commons/services/vfs/VFSLeafEditorSecurityCallback.java rename to src/main/java/org/olat/core/commons/services/doceditor/DocEditorSecurityCallback.java index 07afb865274..b100e62146d 100644 --- a/src/main/java/org/olat/core/commons/services/vfs/VFSLeafEditorSecurityCallback.java +++ b/src/main/java/org/olat/core/commons/services/doceditor/DocEditorSecurityCallback.java @@ -17,9 +17,9 @@ * frentix GmbH, http://www.frentix.com * <p> */ -package org.olat.core.commons.services.vfs; +package org.olat.core.commons.services.doceditor; -import org.olat.core.commons.services.vfs.VFSLeafEditor.Mode; +import org.olat.core.commons.services.doceditor.DocEditor.Mode; /** * @@ -27,7 +27,7 @@ import org.olat.core.commons.services.vfs.VFSLeafEditor.Mode; * @author uhensler, urs.hensler@frentix.com, http://www.frentix.com * */ -public interface VFSLeafEditorSecurityCallback { +public interface DocEditorSecurityCallback { Mode getMode(); diff --git a/src/main/java/org/olat/core/commons/services/vfs/VFSLeafEditorSecurityCallbackBuilder.java b/src/main/java/org/olat/core/commons/services/doceditor/DocEditorSecurityCallbackBuilder.java similarity index 76% rename from src/main/java/org/olat/core/commons/services/vfs/VFSLeafEditorSecurityCallbackBuilder.java rename to src/main/java/org/olat/core/commons/services/doceditor/DocEditorSecurityCallbackBuilder.java index 1c1bad29867..a82c7db4013 100644 --- a/src/main/java/org/olat/core/commons/services/vfs/VFSLeafEditorSecurityCallbackBuilder.java +++ b/src/main/java/org/olat/core/commons/services/doceditor/DocEditorSecurityCallbackBuilder.java @@ -17,9 +17,9 @@ * frentix GmbH, http://www.frentix.com * <p> */ -package org.olat.core.commons.services.vfs; +package org.olat.core.commons.services.doceditor; -import org.olat.core.commons.services.vfs.VFSLeafEditor.Mode; +import org.olat.core.commons.services.doceditor.DocEditor.Mode; /** * @@ -27,7 +27,7 @@ import org.olat.core.commons.services.vfs.VFSLeafEditor.Mode; * @author uhensler, urs.hensler@frentix.com, http://www.frentix.com * */ -public class VFSLeafEditorSecurityCallbackBuilder { +public class DocEditorSecurityCallbackBuilder { private Mode mode = Mode.VIEW; private boolean versionControlled = false; @@ -39,7 +39,7 @@ public class VFSLeafEditorSecurityCallbackBuilder { * @param mode * @return */ - public VFSLeafEditorSecurityCallbackBuilder withMode(Mode mode) { + public DocEditorSecurityCallbackBuilder withMode(Mode mode) { this.mode = mode; return this; } @@ -50,7 +50,7 @@ public class VFSLeafEditorSecurityCallbackBuilder { * @param versionControlled * @return */ - public VFSLeafEditorSecurityCallbackBuilder withVersionControlled(boolean versionControlled) { + public DocEditorSecurityCallbackBuilder withVersionControlled(boolean versionControlled) { this.versionControlled = versionControlled; return this; } @@ -61,12 +61,12 @@ public class VFSLeafEditorSecurityCallbackBuilder { * @param canClose * @return */ - public VFSLeafEditorSecurityCallbackBuilder canClose(boolean canClose) { + public DocEditorSecurityCallbackBuilder canClose(boolean canClose) { this.canClose = canClose; return this; } - public VFSLeafEditorSecurityCallback build() { + public DocEditorSecurityCallback build() { VFSLeafEditorSecurityCallbackImpl secCallback = new VFSLeafEditorSecurityCallbackImpl(); secCallback.setMode(this.mode); secCallback.setVersionControlled(this.versionControlled); @@ -74,21 +74,21 @@ public class VFSLeafEditorSecurityCallbackBuilder { return secCallback; } - public static VFSLeafEditorSecurityCallbackBuilder builder() { - return new VFSLeafEditorSecurityCallbackBuilder(); + public static DocEditorSecurityCallbackBuilder builder() { + return new DocEditorSecurityCallbackBuilder(); } - public static VFSLeafEditorSecurityCallbackBuilder clone(VFSLeafEditorSecurityCallback secCallback) { + public static DocEditorSecurityCallbackBuilder clone(DocEditorSecurityCallback secCallback) { return builder() .withMode(secCallback.getMode()) .withVersionControlled(secCallback.isVersionControlled()) .canClose(secCallback.canClose()); } - private VFSLeafEditorSecurityCallbackBuilder() { + private DocEditorSecurityCallbackBuilder() { } - private static class VFSLeafEditorSecurityCallbackImpl implements VFSLeafEditorSecurityCallback { + private static class VFSLeafEditorSecurityCallbackImpl implements DocEditorSecurityCallback { private Mode mode; private boolean versionControlled; diff --git a/src/main/java/org/olat/core/commons/services/filetemplate/FileType.java b/src/main/java/org/olat/core/commons/services/doceditor/DocTemplate.java similarity index 80% rename from src/main/java/org/olat/core/commons/services/filetemplate/FileType.java rename to src/main/java/org/olat/core/commons/services/doceditor/DocTemplate.java index e0e055e5683..0f15108c1da 100644 --- a/src/main/java/org/olat/core/commons/services/filetemplate/FileType.java +++ b/src/main/java/org/olat/core/commons/services/doceditor/DocTemplate.java @@ -17,7 +17,7 @@ * frentix GmbH, http://www.frentix.com * <p> */ -package org.olat.core.commons.services.filetemplate; +package org.olat.core.commons.services.doceditor; /** * @@ -25,17 +25,17 @@ package org.olat.core.commons.services.filetemplate; * @author uhensler, urs.hensler@frentix.com, http://www.frentix.com * */ -public class FileType { +public class DocTemplate { private final String suffix; private final String name; private final ContentProvider contentProvider; - public static FileType of(String suffix, String name, ContentProvider contentProvider) { - return new FileType(suffix, name, contentProvider); + public static DocTemplate of(String suffix, String name, ContentProvider contentProvider) { + return new DocTemplate(suffix, name, contentProvider); } - private FileType(String suffix, String name, ContentProvider contentProvider) { + private DocTemplate(String suffix, String name, ContentProvider contentProvider) { this.suffix = suffix; this.name = name; this.contentProvider = contentProvider; diff --git a/src/main/java/org/olat/core/commons/services/filetemplate/FileTypes.java b/src/main/java/org/olat/core/commons/services/doceditor/DocTemplates.java similarity index 50% rename from src/main/java/org/olat/core/commons/services/filetemplate/FileTypes.java rename to src/main/java/org/olat/core/commons/services/doceditor/DocTemplates.java index 66c564b2125..b03bbc79e51 100644 --- a/src/main/java/org/olat/core/commons/services/filetemplate/FileTypes.java +++ b/src/main/java/org/olat/core/commons/services/doceditor/DocTemplates.java @@ -17,21 +17,20 @@ * frentix GmbH, http://www.frentix.com * <p> */ -package org.olat.core.commons.services.filetemplate; +package org.olat.core.commons.services.doceditor; -import static org.olat.core.commons.services.filetemplate.ContentProviderFactory.empty; -import static org.olat.core.commons.services.filetemplate.ContentProviderFactory.emptyDocx; -import static org.olat.core.commons.services.filetemplate.ContentProviderFactory.emptyPptx; -import static org.olat.core.commons.services.filetemplate.ContentProviderFactory.emptyXlsx; -import static org.olat.core.commons.services.vfs.VFSLeafEditor.Mode.EDIT; +import static org.olat.core.commons.services.doceditor.ContentProviderFactory.empty; +import static org.olat.core.commons.services.doceditor.ContentProviderFactory.emptyDocx; +import static org.olat.core.commons.services.doceditor.ContentProviderFactory.emptyPptx; +import static org.olat.core.commons.services.doceditor.ContentProviderFactory.emptyXlsx; +import static org.olat.core.commons.services.doceditor.DocEditor.Mode.EDIT; import java.util.ArrayList; import java.util.List; import java.util.Locale; import org.olat.core.CoreSpringFactory; -import org.olat.core.commons.services.filetemplate.ui.CreateFileController; -import org.olat.core.commons.services.vfs.VFSRepositoryService; +import org.olat.core.commons.services.doceditor.ui.CreateDocumentController; import org.olat.core.gui.translator.Translator; import org.olat.core.util.Util; @@ -41,43 +40,43 @@ import org.olat.core.util.Util; * @author uhensler, urs.hensler@frentix.com, http://www.frentix.com * */ -public class FileTypes { +public class DocTemplates { - private final List<FileType> fileTypes; + private final List<DocTemplate> docTemplates; - private FileTypes(List<FileType> fileTypes) { - this.fileTypes = fileTypes; + private DocTemplates(List<DocTemplate> docTemplates) { + this.docTemplates = docTemplates; } - public List<FileType> getFileTypes() { - return fileTypes; + public List<DocTemplate> getTemplates() { + return docTemplates; } public boolean isEmpty() { - return fileTypes.isEmpty(); + return docTemplates.isEmpty(); } public static Builder editables(Locale locale) { Builder builder = new Builder(locale); - VFSRepositoryService vfsService = CoreSpringFactory.getImpl(VFSRepositoryService.class); + DocumentEditorService docEditorService = CoreSpringFactory.getImpl(DocumentEditorService.class); - if (vfsService.hasEditor("txt", EDIT)) { + if (docEditorService.hasEditor("txt", EDIT)) { builder.addTxt(); } - if (vfsService.hasEditor("html", EDIT)) { + if (docEditorService.hasEditor("html", EDIT)) { builder.addHtml(); } - if (vfsService.hasEditor("css", EDIT)) { + if (docEditorService.hasEditor("css", EDIT)) { builder.addCss(); } - if (vfsService.hasEditor("docx", EDIT)) { + if (docEditorService.hasEditor("docx", EDIT)) { builder.addDocx(); } - if (vfsService.hasEditor("xlsx", EDIT)) { + if (docEditorService.hasEditor("xlsx", EDIT)) { builder.addXlsx(); } - if (vfsService.hasEditor("pptx", EDIT)) { + if (docEditorService.hasEditor("pptx", EDIT)) { builder.addPptx(); } @@ -90,44 +89,44 @@ public class FileTypes { public static final class Builder { private final Translator translator; - private List<FileType> fileTypes = new ArrayList<>(); + private List<DocTemplate> docTemplates = new ArrayList<>(); private Builder(Locale locale) { - this.translator = Util.createPackageTranslator(CreateFileController.class, locale); + this.translator = Util.createPackageTranslator(CreateDocumentController.class, locale); } public Builder addCss() { - fileTypes.add(FileType.of("css", translate("file.type.css"), empty())); + docTemplates.add(DocTemplate.of("css", translate("doc.type.css"), empty())); return this; } public Builder addDocx() { - fileTypes.add(FileType.of("docx", translate("file.type.docx"), emptyDocx())); + docTemplates.add(DocTemplate.of("docx", translate("doc.type.docx"), emptyDocx())); return this; } public Builder addHtml() { - fileTypes.add(FileType.of("html", translate("file.type.html"), empty())); + docTemplates.add(DocTemplate.of("html", translate("doc.type.html"), empty())); return this; } public Builder addTxt() { - fileTypes.add(FileType.of("txt", translate("file.type.txt"), empty())); + docTemplates.add(DocTemplate.of("txt", translate("doc.type.txt"), empty())); return this; } public Builder addXlsx() { - fileTypes.add(FileType.of("xlsx", translate("file.type.xlsx"), emptyXlsx())); + docTemplates.add(DocTemplate.of("xlsx", translate("doc.type.xlsx"), emptyXlsx())); return this; } public Builder addPptx() { - fileTypes.add(FileType.of("pptx", translate("file.type.pptx"), emptyPptx())); + docTemplates.add(DocTemplate.of("pptx", translate("doc.type.pptx"), emptyPptx())); return this; } - public Builder addFileType(FileType fileType) { - this.fileTypes.add(fileType); + public Builder addFileType(DocTemplate docTemplate) { + this.docTemplates.add(docTemplate); return this; } @@ -135,8 +134,8 @@ public class FileTypes { return translator.translate(i18nKey); } - public FileTypes build() { - return new FileTypes(new ArrayList<>(fileTypes)); + public DocTemplates build() { + return new DocTemplates(new ArrayList<>(docTemplates)); } } diff --git a/src/main/java/org/olat/core/commons/services/doceditor/DocumentEditorService.java b/src/main/java/org/olat/core/commons/services/doceditor/DocumentEditorService.java new file mode 100644 index 00000000000..0b79e2d75fa --- /dev/null +++ b/src/main/java/org/olat/core/commons/services/doceditor/DocumentEditorService.java @@ -0,0 +1,75 @@ +/** + * <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.core.commons.services.doceditor; + +import java.util.List; +import java.util.Optional; + +import org.olat.core.commons.services.doceditor.DocEditor.Mode; +import org.olat.core.id.Identity; +import org.olat.core.util.vfs.VFSLeaf; + +/** + * + * Initial date: 8 Apr 2019<br> + * @author uhensler, urs.hensler@frentix.com, http://www.frentix.com + * + */ +public interface DocumentEditorService { + + /** + * Check if file with a specific suffix is supported by any enabled editor. + * + * @param suffix + * @param mode + * @return + */ + public boolean hasEditor(String suffix, Mode mode); + + /** + * Get all enabled editors which support a file with a specific suffix. Support means usually edit or read. + * + * @param suffix + * @param mode + * @return + */ + public List<DocEditor> getEditors(String suffix, Mode mode); + + /** + * Get the editor of a specific type. + * + * @param editorType + * @return + */ + public Optional<DocEditor> getEditor(String editorType); + + /** + * Checks whether a vfsLeaf can be opened in any editor by a user and in a + * specific mode. This method checks not only if a file format is supported but + * also if the vfsLeaf is not locked by an other editor or user. + * + * @param vfsLeaf + * @param mode + * @param identity + * @return + */ + public boolean hasEditor(VFSLeaf vfsLeaf, Mode mode, Identity identity); + +} diff --git a/src/main/java/org/olat/modules/wopi/collabora/CollaboraEditor.java b/src/main/java/org/olat/core/commons/services/doceditor/collabora/CollaboraEditor.java similarity index 83% rename from src/main/java/org/olat/modules/wopi/collabora/CollaboraEditor.java rename to src/main/java/org/olat/core/commons/services/doceditor/collabora/CollaboraEditor.java index ca61c7d560f..ee71e6b32a8 100644 --- a/src/main/java/org/olat/modules/wopi/collabora/CollaboraEditor.java +++ b/src/main/java/org/olat/core/commons/services/doceditor/collabora/CollaboraEditor.java @@ -17,13 +17,14 @@ * frentix GmbH, http://www.frentix.com * <p> */ -package org.olat.modules.wopi.collabora; +package org.olat.core.commons.services.doceditor.collabora; import java.util.Locale; -import org.olat.core.commons.services.vfs.VFSLeafEditor; -import org.olat.core.commons.services.vfs.VFSLeafEditorConfigs; -import org.olat.core.commons.services.vfs.VFSLeafEditorSecurityCallback; +import org.olat.core.commons.services.doceditor.DocEditor; +import org.olat.core.commons.services.doceditor.DocEditorConfigs; +import org.olat.core.commons.services.doceditor.DocEditorSecurityCallback; +import org.olat.core.commons.services.doceditor.collabora.ui.CollaboraEditorController; import org.olat.core.gui.UserRequest; import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.WindowControl; @@ -31,7 +32,6 @@ import org.olat.core.gui.translator.Translator; import org.olat.core.id.Identity; import org.olat.core.util.Util; import org.olat.core.util.vfs.VFSLeaf; -import org.olat.modules.wopi.collabora.ui.CollaboraEditorController; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -42,7 +42,7 @@ import org.springframework.stereotype.Service; * */ @Service -public class CollaboraEditor implements VFSLeafEditor { +public class CollaboraEditor implements DocEditor { @Autowired private CollaboraModule collaboraModule; @@ -80,7 +80,7 @@ public class CollaboraEditor implements VFSLeafEditor { @Override public Controller getRunController(UserRequest ureq, WindowControl wControl, Identity identity, VFSLeaf vfsLeaf, - VFSLeafEditorSecurityCallback securityCallback, VFSLeafEditorConfigs configs) { + DocEditorSecurityCallback securityCallback, DocEditorConfigs configs) { return new CollaboraEditorController(ureq, wControl, vfsLeaf, securityCallback); } diff --git a/src/main/java/org/olat/modules/wopi/collabora/CollaboraModule.java b/src/main/java/org/olat/core/commons/services/doceditor/collabora/CollaboraModule.java similarity index 97% rename from src/main/java/org/olat/modules/wopi/collabora/CollaboraModule.java rename to src/main/java/org/olat/core/commons/services/doceditor/collabora/CollaboraModule.java index f70ebc16393..95f295f410c 100644 --- a/src/main/java/org/olat/modules/wopi/collabora/CollaboraModule.java +++ b/src/main/java/org/olat/core/commons/services/doceditor/collabora/CollaboraModule.java @@ -17,7 +17,7 @@ * frentix GmbH, http://www.frentix.com * <p> */ -package org.olat.modules.wopi.collabora; +package org.olat.core.commons.services.doceditor.collabora; import org.olat.core.configuration.AbstractSpringModule; import org.olat.core.configuration.ConfigOnOff; diff --git a/src/main/java/org/olat/modules/wopi/collabora/CollaboraRefreshDiscoveryEvent.java b/src/main/java/org/olat/core/commons/services/doceditor/collabora/CollaboraRefreshDiscoveryEvent.java similarity index 95% rename from src/main/java/org/olat/modules/wopi/collabora/CollaboraRefreshDiscoveryEvent.java rename to src/main/java/org/olat/core/commons/services/doceditor/collabora/CollaboraRefreshDiscoveryEvent.java index 62c9738f451..b2e11756330 100644 --- a/src/main/java/org/olat/modules/wopi/collabora/CollaboraRefreshDiscoveryEvent.java +++ b/src/main/java/org/olat/core/commons/services/doceditor/collabora/CollaboraRefreshDiscoveryEvent.java @@ -17,7 +17,7 @@ * frentix GmbH, http://www.frentix.com * <p> */ -package org.olat.modules.wopi.collabora; +package org.olat.core.commons.services.doceditor.collabora; import org.olat.core.util.event.MultiUserEvent; diff --git a/src/main/java/org/olat/modules/wopi/collabora/CollaboraService.java b/src/main/java/org/olat/core/commons/services/doceditor/collabora/CollaboraService.java similarity index 85% rename from src/main/java/org/olat/modules/wopi/collabora/CollaboraService.java rename to src/main/java/org/olat/core/commons/services/doceditor/collabora/CollaboraService.java index 8ed1b8c022b..c07d350cf39 100644 --- a/src/main/java/org/olat/modules/wopi/collabora/CollaboraService.java +++ b/src/main/java/org/olat/core/commons/services/doceditor/collabora/CollaboraService.java @@ -17,21 +17,21 @@ * frentix GmbH, http://www.frentix.com * <p> */ -package org.olat.modules.wopi.collabora; +package org.olat.core.commons.services.doceditor.collabora; import java.io.File; import java.io.InputStream; -import org.olat.core.commons.services.vfs.VFSLeafEditor.Mode; -import org.olat.core.commons.services.vfs.VFSLeafEditorSecurityCallback; +import org.olat.core.commons.services.doceditor.DocEditorSecurityCallback; +import org.olat.core.commons.services.doceditor.DocEditor.Mode; +import org.olat.core.commons.services.doceditor.wopi.Access; +import org.olat.core.commons.services.doceditor.wopi.Discovery; import org.olat.core.commons.services.vfs.VFSMetadata; import org.olat.core.id.Identity; import org.olat.core.id.OLATResourceable; import org.olat.core.util.resource.OresHelper; import org.olat.core.util.vfs.VFSLeaf; import org.olat.core.util.vfs.lock.LockResult; -import org.olat.modules.wopi.Access; -import org.olat.modules.wopi.Discovery; /** * @@ -50,7 +50,7 @@ public interface CollaboraService { VFSMetadata getMetadata(String fileId); - Access createAccess(VFSMetadata vfsMetadata, Identity identity, VFSLeafEditorSecurityCallback secCallback); + Access createAccess(VFSMetadata vfsMetadata, Identity identity, DocEditorSecurityCallback secCallback); Access getAccess(String accessToken); diff --git a/src/main/java/org/olat/modules/wopi/collabora/manager/CollaboraServiceImpl.java b/src/main/java/org/olat/core/commons/services/doceditor/collabora/manager/CollaboraServiceImpl.java similarity index 88% rename from src/main/java/org/olat/modules/wopi/collabora/manager/CollaboraServiceImpl.java rename to src/main/java/org/olat/core/commons/services/doceditor/collabora/manager/CollaboraServiceImpl.java index bc3aaeda382..8bfa862b04e 100644 --- a/src/main/java/org/olat/modules/wopi/collabora/manager/CollaboraServiceImpl.java +++ b/src/main/java/org/olat/core/commons/services/doceditor/collabora/manager/CollaboraServiceImpl.java @@ -17,15 +17,23 @@ * frentix GmbH, http://www.frentix.com * <p> */ -package org.olat.modules.wopi.collabora.manager; +package org.olat.core.commons.services.doceditor.collabora.manager; import java.io.File; import java.io.InputStream; import javax.annotation.PostConstruct; -import org.olat.core.commons.services.vfs.VFSLeafEditor.Mode; -import org.olat.core.commons.services.vfs.VFSLeafEditorSecurityCallback; +import org.olat.core.commons.services.doceditor.DocEditorSecurityCallback; +import org.olat.core.commons.services.doceditor.DocEditor.Mode; +import org.olat.core.commons.services.doceditor.collabora.CollaboraModule; +import org.olat.core.commons.services.doceditor.collabora.CollaboraRefreshDiscoveryEvent; +import org.olat.core.commons.services.doceditor.collabora.CollaboraService; +import org.olat.core.commons.services.doceditor.wopi.Access; +import org.olat.core.commons.services.doceditor.wopi.Action; +import org.olat.core.commons.services.doceditor.wopi.Discovery; +import org.olat.core.commons.services.doceditor.wopi.WopiDiscoveryClient; +import org.olat.core.commons.services.doceditor.wopi.WopiService; import org.olat.core.commons.services.vfs.VFSMetadata; import org.olat.core.commons.services.vfs.VFSRepositoryService; import org.olat.core.gui.control.Event; @@ -42,14 +50,6 @@ import org.olat.core.util.vfs.VFSLockManager; import org.olat.core.util.vfs.VFSManager; import org.olat.core.util.vfs.lock.LockInfo; import org.olat.core.util.vfs.lock.LockResult; -import org.olat.modules.wopi.Access; -import org.olat.modules.wopi.Action; -import org.olat.modules.wopi.Discovery; -import org.olat.modules.wopi.WopiDiscoveryClient; -import org.olat.modules.wopi.WopiService; -import org.olat.modules.wopi.collabora.CollaboraModule; -import org.olat.modules.wopi.collabora.CollaboraRefreshDiscoveryEvent; -import org.olat.modules.wopi.collabora.CollaboraService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -98,7 +98,7 @@ public class CollaboraServiceImpl implements CollaboraService, GenericEventListe } @Override - public Access createAccess(VFSMetadata vfsMetadata, Identity identity, VFSLeafEditorSecurityCallback secCallback) { + public Access createAccess(VFSMetadata vfsMetadata, Identity identity, DocEditorSecurityCallback secCallback) { return wopiService.createAccess(vfsMetadata, identity, secCallback); } diff --git a/src/main/java/org/olat/modules/wopi/collabora/restapi/CheckFileInfoVO.java b/src/main/java/org/olat/core/commons/services/doceditor/collabora/restapi/CheckFileInfoVO.java similarity index 99% rename from src/main/java/org/olat/modules/wopi/collabora/restapi/CheckFileInfoVO.java rename to src/main/java/org/olat/core/commons/services/doceditor/collabora/restapi/CheckFileInfoVO.java index accc9647c2e..328ace5429c 100644 --- a/src/main/java/org/olat/modules/wopi/collabora/restapi/CheckFileInfoVO.java +++ b/src/main/java/org/olat/core/commons/services/doceditor/collabora/restapi/CheckFileInfoVO.java @@ -17,7 +17,7 @@ * frentix GmbH, http://www.frentix.com * <p> */ -package org.olat.modules.wopi.collabora.restapi; +package org.olat.core.commons.services.doceditor.collabora.restapi; import javax.annotation.Generated; diff --git a/src/main/java/org/olat/modules/wopi/collabora/restapi/FilesWebService.java b/src/main/java/org/olat/core/commons/services/doceditor/collabora/restapi/FilesWebService.java similarity index 94% rename from src/main/java/org/olat/modules/wopi/collabora/restapi/FilesWebService.java rename to src/main/java/org/olat/core/commons/services/doceditor/collabora/restapi/FilesWebService.java index 7eac1742f8e..5c9d6938d7d 100644 --- a/src/main/java/org/olat/modules/wopi/collabora/restapi/FilesWebService.java +++ b/src/main/java/org/olat/core/commons/services/doceditor/collabora/restapi/FilesWebService.java @@ -17,10 +17,10 @@ * frentix GmbH, http://www.frentix.com * <p> */ -package org.olat.modules.wopi.collabora.restapi; +package org.olat.core.commons.services.doceditor.collabora.restapi; -import static org.olat.modules.wopi.WopiRestHelper.getAsIso6801; -import static org.olat.modules.wopi.WopiRestHelper.getFirstRequestHeader; +import static org.olat.core.commons.services.doceditor.wopi.WopiRestHelper.getAsIso6801; +import static org.olat.core.commons.services.doceditor.wopi.WopiRestHelper.getFirstRequestHeader; import java.io.File; import java.io.InputStream; @@ -42,12 +42,12 @@ import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.Status; +import org.olat.core.commons.services.doceditor.collabora.CollaboraModule; +import org.olat.core.commons.services.doceditor.collabora.CollaboraService; +import org.olat.core.commons.services.doceditor.wopi.Access; import org.olat.core.commons.services.vfs.VFSMetadata; import org.olat.core.logging.OLog; import org.olat.core.logging.Tracing; -import org.olat.modules.wopi.Access; -import org.olat.modules.wopi.collabora.CollaboraModule; -import org.olat.modules.wopi.collabora.CollaboraService; import org.olat.user.UserManager; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; diff --git a/src/main/java/org/olat/modules/wopi/collabora/restapi/PutFileVO.java b/src/main/java/org/olat/core/commons/services/doceditor/collabora/restapi/PutFileVO.java similarity index 96% rename from src/main/java/org/olat/modules/wopi/collabora/restapi/PutFileVO.java rename to src/main/java/org/olat/core/commons/services/doceditor/collabora/restapi/PutFileVO.java index 464942cb37a..19effea8980 100644 --- a/src/main/java/org/olat/modules/wopi/collabora/restapi/PutFileVO.java +++ b/src/main/java/org/olat/core/commons/services/doceditor/collabora/restapi/PutFileVO.java @@ -17,7 +17,7 @@ * frentix GmbH, http://www.frentix.com * <p> */ -package org.olat.modules.wopi.collabora.restapi; +package org.olat.core.commons.services.doceditor.collabora.restapi; import javax.annotation.Generated; diff --git a/src/main/java/org/olat/modules/wopi/collabora/ui/CollaboraAdminController.java b/src/main/java/org/olat/core/commons/services/doceditor/collabora/ui/CollaboraAdminController.java similarity index 89% rename from src/main/java/org/olat/modules/wopi/collabora/ui/CollaboraAdminController.java rename to src/main/java/org/olat/core/commons/services/doceditor/collabora/ui/CollaboraAdminController.java index e384f8fc0a2..e1b9cd3d9e5 100644 --- a/src/main/java/org/olat/modules/wopi/collabora/ui/CollaboraAdminController.java +++ b/src/main/java/org/olat/core/commons/services/doceditor/collabora/ui/CollaboraAdminController.java @@ -17,12 +17,16 @@ * frentix GmbH, http://www.frentix.com * <p> */ -package org.olat.modules.wopi.collabora.ui; +package org.olat.core.commons.services.doceditor.collabora.ui; +import static org.olat.core.commons.services.doceditor.collabora.CollaboraService.REFRESH_EVENT_ORES; +import static org.olat.core.commons.services.doceditor.collabora.ui.CollaboraUIFactory.validateIsMandatory; import static org.olat.core.gui.translator.TranslatorHelper.translateAll; -import static org.olat.modules.wopi.collabora.CollaboraService.REFRESH_EVENT_ORES; -import static org.olat.modules.wopi.collabora.ui.CollaboraUIFactory.validateIsMandatory; +import org.olat.core.commons.services.doceditor.collabora.CollaboraModule; +import org.olat.core.commons.services.doceditor.collabora.CollaboraRefreshDiscoveryEvent; +import org.olat.core.commons.services.doceditor.collabora.CollaboraService; +import org.olat.core.commons.services.doceditor.wopi.Discovery; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.form.flexible.FormItem; import org.olat.core.gui.components.form.flexible.FormItemContainer; @@ -39,10 +43,6 @@ import org.olat.core.helpers.Settings; import org.olat.core.logging.OLog; import org.olat.core.logging.Tracing; import org.olat.core.util.coordinate.CoordinatorManager; -import org.olat.modules.wopi.Discovery; -import org.olat.modules.wopi.collabora.CollaboraModule; -import org.olat.modules.wopi.collabora.CollaboraRefreshDiscoveryEvent; -import org.olat.modules.wopi.collabora.CollaboraService; import org.springframework.beans.factory.annotation.Autowired; /** diff --git a/src/main/java/org/olat/modules/wopi/collabora/ui/CollaboraEditorController.java b/src/main/java/org/olat/core/commons/services/doceditor/collabora/ui/CollaboraEditorController.java similarity index 83% rename from src/main/java/org/olat/modules/wopi/collabora/ui/CollaboraEditorController.java rename to src/main/java/org/olat/core/commons/services/doceditor/collabora/ui/CollaboraEditorController.java index 2d88c87ee99..f46bbe79da8 100644 --- a/src/main/java/org/olat/modules/wopi/collabora/ui/CollaboraEditorController.java +++ b/src/main/java/org/olat/core/commons/services/doceditor/collabora/ui/CollaboraEditorController.java @@ -17,11 +17,13 @@ * frentix GmbH, http://www.frentix.com * <p> */ -package org.olat.modules.wopi.collabora.ui; +package org.olat.core.commons.services.doceditor.collabora.ui; -import org.olat.core.commons.services.vfs.VFSLeafEditor.Mode; -import org.olat.core.commons.services.vfs.VFSLeafEditorSecurityCallback; -import org.olat.core.commons.services.vfs.VFSLeafEditorSecurityCallbackBuilder; +import org.olat.core.commons.services.doceditor.DocEditorSecurityCallback; +import org.olat.core.commons.services.doceditor.DocEditorSecurityCallbackBuilder; +import org.olat.core.commons.services.doceditor.DocEditor.Mode; +import org.olat.core.commons.services.doceditor.collabora.CollaboraService; +import org.olat.core.commons.services.doceditor.wopi.Access; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.Component; import org.olat.core.gui.components.velocity.VelocityContainer; @@ -31,8 +33,6 @@ import org.olat.core.gui.control.controller.BasicController; import org.olat.core.util.CodeHelper; import org.olat.core.util.vfs.VFSLeaf; import org.olat.core.util.vfs.lock.LockResult; -import org.olat.modules.wopi.Access; -import org.olat.modules.wopi.collabora.CollaboraService; import org.springframework.beans.factory.annotation.Autowired; /** @@ -44,7 +44,7 @@ import org.springframework.beans.factory.annotation.Autowired; public class CollaboraEditorController extends BasicController { private final VFSLeaf vfsLeaf; - private VFSLeafEditorSecurityCallback secCallback; + private DocEditorSecurityCallback secCallback; private LockResult lock; private Access access; @@ -52,14 +52,14 @@ public class CollaboraEditorController extends BasicController { private CollaboraService collaboraService; public CollaboraEditorController(UserRequest ureq, WindowControl wControl, VFSLeaf vfsLeaf, - final VFSLeafEditorSecurityCallback securityCallback) { + final DocEditorSecurityCallback securityCallback) { super(ureq, wControl); this.vfsLeaf = vfsLeaf; this.secCallback = securityCallback; if (collaboraService.isLockNeeded(securityCallback.getMode())) { if (collaboraService.isLockedForMe(vfsLeaf, getIdentity())) { - this.secCallback = VFSLeafEditorSecurityCallbackBuilder.clone(securityCallback) + this.secCallback = DocEditorSecurityCallbackBuilder.clone(securityCallback) .withMode(Mode.VIEW) .build(); showWarning("editor.warning.locked"); diff --git a/src/main/java/org/olat/modules/wopi/collabora/ui/CollaboraEditorUrlBuilder.java b/src/main/java/org/olat/core/commons/services/doceditor/collabora/ui/CollaboraEditorUrlBuilder.java similarity index 95% rename from src/main/java/org/olat/modules/wopi/collabora/ui/CollaboraEditorUrlBuilder.java rename to src/main/java/org/olat/core/commons/services/doceditor/collabora/ui/CollaboraEditorUrlBuilder.java index bd11a6a45ee..3297c650567 100644 --- a/src/main/java/org/olat/modules/wopi/collabora/ui/CollaboraEditorUrlBuilder.java +++ b/src/main/java/org/olat/core/commons/services/doceditor/collabora/ui/CollaboraEditorUrlBuilder.java @@ -17,14 +17,14 @@ * frentix GmbH, http://www.frentix.com * <p> */ -package org.olat.modules.wopi.collabora.ui; +package org.olat.core.commons.services.doceditor.collabora.ui; import java.io.File; import org.olat.core.CoreSpringFactory; +import org.olat.core.commons.services.doceditor.collabora.CollaboraService; import org.olat.core.helpers.Settings; import org.olat.core.util.StringHelper; -import org.olat.modules.wopi.collabora.CollaboraService; import org.olat.restapi.security.RestSecurityHelper; import org.springframework.beans.factory.annotation.Autowired; diff --git a/src/main/java/org/olat/modules/wopi/collabora/ui/CollaboraUIFactory.java b/src/main/java/org/olat/core/commons/services/doceditor/collabora/ui/CollaboraUIFactory.java similarity index 95% rename from src/main/java/org/olat/modules/wopi/collabora/ui/CollaboraUIFactory.java rename to src/main/java/org/olat/core/commons/services/doceditor/collabora/ui/CollaboraUIFactory.java index 3bc586b35e7..a115a2cdfa5 100644 --- a/src/main/java/org/olat/modules/wopi/collabora/ui/CollaboraUIFactory.java +++ b/src/main/java/org/olat/core/commons/services/doceditor/collabora/ui/CollaboraUIFactory.java @@ -17,7 +17,7 @@ * frentix GmbH, http://www.frentix.com * <p> */ -package org.olat.modules.wopi.collabora.ui; +package org.olat.core.commons.services.doceditor.collabora.ui; import org.olat.core.gui.components.form.flexible.elements.TextElement; import org.olat.core.util.StringHelper; diff --git a/src/main/java/org/olat/modules/wopi/collabora/ui/_content/collabora.html b/src/main/java/org/olat/core/commons/services/doceditor/collabora/ui/_content/collabora.html similarity index 100% rename from src/main/java/org/olat/modules/wopi/collabora/ui/_content/collabora.html rename to src/main/java/org/olat/core/commons/services/doceditor/collabora/ui/_content/collabora.html diff --git a/src/main/java/org/olat/modules/wopi/collabora/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/core/commons/services/doceditor/collabora/ui/_i18n/LocalStrings_de.properties similarity index 100% rename from src/main/java/org/olat/modules/wopi/collabora/ui/_i18n/LocalStrings_de.properties rename to src/main/java/org/olat/core/commons/services/doceditor/collabora/ui/_i18n/LocalStrings_de.properties diff --git a/src/main/java/org/olat/modules/wopi/collabora/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/core/commons/services/doceditor/collabora/ui/_i18n/LocalStrings_en.properties similarity index 100% rename from src/main/java/org/olat/modules/wopi/collabora/ui/_i18n/LocalStrings_en.properties rename to src/main/java/org/olat/core/commons/services/doceditor/collabora/ui/_i18n/LocalStrings_en.properties diff --git a/src/main/java/org/olat/core/commons/services/filetemplate/empty.pptx b/src/main/java/org/olat/core/commons/services/doceditor/empty.pptx similarity index 100% rename from src/main/java/org/olat/core/commons/services/filetemplate/empty.pptx rename to src/main/java/org/olat/core/commons/services/doceditor/empty.pptx diff --git a/src/main/java/org/olat/core/commons/services/doceditor/manager/DocumentEditorServiceImpl.java b/src/main/java/org/olat/core/commons/services/doceditor/manager/DocumentEditorServiceImpl.java new file mode 100644 index 00000000000..e94be29f558 --- /dev/null +++ b/src/main/java/org/olat/core/commons/services/doceditor/manager/DocumentEditorServiceImpl.java @@ -0,0 +1,88 @@ +/** + * <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.core.commons.services.doceditor.manager; + +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +import org.olat.core.commons.services.doceditor.DocEditor; +import org.olat.core.commons.services.doceditor.DocumentEditorService; +import org.olat.core.commons.services.doceditor.DocEditor.Mode; +import org.olat.core.id.Identity; +import org.olat.core.util.FileUtils; +import org.olat.core.util.vfs.VFSLeaf; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * + * Initial date: 8 Apr 2019<br> + * @author uhensler, urs.hensler@frentix.com, http://www.frentix.com + * + */ +@Service +public class DocumentEditorServiceImpl implements DocumentEditorService { + + @Autowired + private List<DocEditor> editors; + + @Override + public boolean hasEditor(String suffix, Mode mode) { + if (mode == null) return false; + + return editors.stream() + .filter(DocEditor::isEnable) + .filter(editor -> editor.isSupportingFormat(suffix, mode)) + .findFirst() + .isPresent(); + } + + @Override + public List<DocEditor> getEditors(String suffix, Mode mode) { + return editors.stream() + .filter(DocEditor::isEnable) + .filter(editor -> editor.isSupportingFormat(suffix, mode)) + .collect(Collectors.toList()); + } + + @Override + public Optional<DocEditor> getEditor(String editorType) { + return editors.stream() + .filter(DocEditor::isEnable) + .filter(editor -> editor.getType().equals(editorType)) + .findFirst(); + } + + @Override + public boolean hasEditor(VFSLeaf vfsLeaf, Mode mode, Identity identity) { + if (mode == null) return false; + + String suffix = FileUtils.getFileSuffix(vfsLeaf.getName()); + return editors.stream() + .filter(DocEditor::isEnable) + .filter(editor -> editor.isSupportingFormat(suffix, mode)) + .filter(editor -> !editor.isLockedForMe(vfsLeaf, mode, identity)) + .findFirst() + .isPresent(); + + } + +} diff --git a/src/main/java/org/olat/core/commons/services/filetemplate/ui/CreateFileController.java b/src/main/java/org/olat/core/commons/services/doceditor/ui/CreateDocumentController.java similarity index 59% rename from src/main/java/org/olat/core/commons/services/filetemplate/ui/CreateFileController.java rename to src/main/java/org/olat/core/commons/services/doceditor/ui/CreateDocumentController.java index 12ee6bec201..312f9fcf70a 100644 --- a/src/main/java/org/olat/core/commons/services/filetemplate/ui/CreateFileController.java +++ b/src/main/java/org/olat/core/commons/services/doceditor/ui/CreateDocumentController.java @@ -3,7 +3,7 @@ * 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 not use this doc 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> @@ -17,15 +17,15 @@ * frentix GmbH, http://www.frentix.com * <p> */ -package org.olat.core.commons.services.filetemplate.ui; +package org.olat.core.commons.services.doceditor.ui; import static org.olat.core.gui.components.util.KeyValues.entry; import java.util.List; import org.olat.core.commons.modules.bc.meta.MetaInfoFormController; -import org.olat.core.commons.services.filetemplate.FileType; -import org.olat.core.commons.services.filetemplate.FileTypes; +import org.olat.core.commons.services.doceditor.DocTemplate; +import org.olat.core.commons.services.doceditor.DocTemplates; import org.olat.core.commons.services.vfs.VFSMetadata; import org.olat.core.commons.services.vfs.VFSRepositoryService; import org.olat.core.gui.UserRequest; @@ -52,24 +52,24 @@ import org.springframework.beans.factory.annotation.Autowired; * @author uhensler, urs.hensler@frentix.com, http://www.frentix.com * */ -public class CreateFileController extends FormBasicController { +public class CreateDocumentController extends FormBasicController { - private SingleSelection fileTypeEl; - private TextElement fileNameEl; + private SingleSelection docTypeEl; + private TextElement docNameEl; private MetaInfoFormController metadataCtrl; private final VFSContainer vfsContainer; - private final List<FileType> fileTypes; + private final List<DocTemplate> templates; private VFSLeaf vfsLeaf; @Autowired private VFSRepositoryService vfsService; - public CreateFileController(UserRequest ureq, WindowControl wControl, VFSContainer vfsContainer, FileTypes fileTypes) { - super(ureq, wControl, "create_file"); + public CreateDocumentController(UserRequest ureq, WindowControl wControl, VFSContainer vfsContainer, DocTemplates templates) { + super(ureq, wControl, "create_document"); this.vfsContainer = vfsContainer; - this.fileTypes = fileTypes.getFileTypes(); + this.templates = templates.getTemplates(); initForm(ureq); } @@ -79,23 +79,23 @@ public class CreateFileController extends FormBasicController { @Override protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) { - FormLayoutContainer fileCont = FormLayoutContainer.createDefaultFormLayout("file", getTranslator()); - formLayout.add(fileCont); + FormLayoutContainer docCont = FormLayoutContainer.createDefaultFormLayout("doc", getTranslator()); + formLayout.add(docCont); - KeyValues fileTypeKV = new KeyValues(); - for (int i = 0; i < fileTypes.size(); i++) { - FileType fileType = fileTypes.get(i); - String name = fileType.getName() + " (." + fileType.getSuffix() + ")"; - fileTypeKV.add(entry(String.valueOf(i), name)); + KeyValues docTypeKV = new KeyValues(); + for (int i = 0; i < templates.size(); i++) { + DocTemplate docTemplate = templates.get(i); + String name = docTemplate.getName() + " (." + docTemplate.getSuffix() + ")"; + docTypeKV.add(entry(String.valueOf(i), name)); } - fileTypeEl = uifactory.addDropdownSingleselect("create.file.type", fileCont, fileTypeKV.keys(), fileTypeKV.values()); - fileTypeEl.setElementCssClass("o_sel_folder_new_file_type"); - fileTypeEl.setMandatory(true); + docTypeEl = uifactory.addDropdownSingleselect("create.doc.type", docCont, docTypeKV.keys(), docTypeKV.values()); + docTypeEl.setElementCssClass("o_sel_folder_new_doc_type"); + docTypeEl.setMandatory(true); - fileNameEl = uifactory.addTextElement("create.file.name", -1, "", fileCont); - fileNameEl.setElementCssClass("o_sel_folder_new_file_name"); - fileNameEl.setDisplaySize(100); - fileNameEl.setMandatory(true); + docNameEl = uifactory.addTextElement("create.doc.name", -1, "", docCont); + docNameEl.setElementCssClass("o_sel_folder_new_doc_name"); + docNameEl.setDisplaySize(100); + docNameEl.setMandatory(true); // metadata metadataCtrl = new MetaInfoFormController(ureq, getWindowControl(), mainForm, false); @@ -106,7 +106,7 @@ public class CreateFileController extends FormBasicController { formLayout.add(butonsCont); FormLayoutContainer formButtons = FormLayoutContainer.createButtonLayout("formButtons", getTranslator()); butonsCont.add(formButtons); - uifactory.addFormSubmitButton("submit", "create.file.button", formButtons); + uifactory.addFormSubmitButton("submit", "create.doc.button", formButtons); uifactory.addFormCancelButton("cancel", formButtons, ureq, getWindowControl()); } @@ -114,19 +114,19 @@ public class CreateFileController extends FormBasicController { protected boolean validateFormLogic(UserRequest ureq) { boolean allOk = true; - String fileName = fileNameEl.getValue(); - fileNameEl.clearError(); - if (!StringHelper.containsNonWhitespace(fileName)) { - fileNameEl.setErrorKey("form.mandatory.hover", null); + String docName = docNameEl.getValue(); + docNameEl.clearError(); + if (!StringHelper.containsNonWhitespace(docName)) { + docNameEl.setErrorKey("form.mandatory.hover", null); allOk = false; } else { // update in GUI so user sees how we optimized - fileNameEl.setValue(fileName); - if (invalidFilenName(fileName)) { - fileNameEl.setErrorKey("create.file.name.notvalid", null); + docNameEl.setValue(docName); + if (invalidFilenName(docName)) { + docNameEl.setErrorKey("create.doc.name.notvalid", null); allOk = false; - } else if (fileExists()){ - fileNameEl.setErrorKey("create.file.already.exists", new String[] { getFileName() }); + } else if (docExists()){ + docNameEl.setErrorKey("create.doc.already.exists", new String[] { getFileName() }); allOk = false; } } @@ -134,26 +134,26 @@ public class CreateFileController extends FormBasicController { return allOk; } - private boolean invalidFilenName(String fileName) { - return !FileUtils.validateFilename(fileName); + private boolean invalidFilenName(String docName) { + return !FileUtils.validateFilename(docName); } - private boolean fileExists() { + private boolean docExists() { return vfsContainer.resolve(getFileName()) != null? true: false; } private String getFileName() { - String fileName = fileNameEl.getValue(); - FileType fileType = getSelectedFileType(); - String suffix = fileType != null? fileType.getSuffix(): ""; - return fileName.endsWith("." + suffix) - ? fileName - : fileName + "." + suffix; + String docName = docNameEl.getValue(); + DocTemplate docTemplate = getSelectedTemplate(); + String suffix = docTemplate != null? docTemplate.getSuffix(): ""; + return docName.endsWith("." + suffix) + ? docName + : docName + "." + suffix; } - private FileType getSelectedFileType() { - int index = fileTypeEl.getSelected(); - return index > -1? fileTypes.get(index): null; + private DocTemplate getSelectedTemplate() { + int index = docTypeEl.getSelected(); + return index > -1? templates.get(index): null; } @Override @@ -163,23 +163,23 @@ public class CreateFileController extends FormBasicController { @Override protected void formOK(UserRequest ureq) { - String fileName = getFileName(); - createFile(fileName); + String docName = getFileName(); + createFile(docName); createContent(); createMetadata(); fireEvent(ureq, Event.DONE_EVENT); } - private void createFile(String fileName) { - vfsLeaf = vfsContainer.createChildLeaf(fileName); + private void createFile(String docName) { + vfsLeaf = vfsContainer.createChildLeaf(docName); } private void createContent() { if (vfsLeaf != null) { - FileType fileType = getSelectedFileType(); - if (fileType != null) { - VFSManager.copyContent(fileType.getContentProvider().getContent(), vfsLeaf); + DocTemplate docTemplate = getSelectedTemplate(); + if (docTemplate != null) { + VFSManager.copyContent(docTemplate.getContentProvider().getContent(), vfsLeaf); } } } diff --git a/src/main/java/org/olat/core/commons/services/vfs/ui/editor/VFSLeafConfigController.java b/src/main/java/org/olat/core/commons/services/doceditor/ui/DocEditorConfigController.java similarity index 72% rename from src/main/java/org/olat/core/commons/services/vfs/ui/editor/VFSLeafConfigController.java rename to src/main/java/org/olat/core/commons/services/doceditor/ui/DocEditorConfigController.java index 18cfd9edb63..7ba262e4cdf 100644 --- a/src/main/java/org/olat/core/commons/services/vfs/ui/editor/VFSLeafConfigController.java +++ b/src/main/java/org/olat/core/commons/services/doceditor/ui/DocEditorConfigController.java @@ -17,14 +17,14 @@ * frentix GmbH, http://www.frentix.com * <p> */ -package org.olat.core.commons.services.vfs.ui.editor; +package org.olat.core.commons.services.doceditor.ui; import java.util.List; import java.util.Optional; -import org.olat.core.commons.services.vfs.VFSLeafEditor; -import org.olat.core.commons.services.vfs.VFSLeafEditorSecurityCallback; -import org.olat.core.commons.services.vfs.VFSRepositoryService; +import org.olat.core.commons.services.doceditor.DocEditor; +import org.olat.core.commons.services.doceditor.DocEditorSecurityCallback; +import org.olat.core.commons.services.doceditor.DocumentEditorService; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.Component; import org.olat.core.gui.components.dropdown.Dropdown; @@ -48,7 +48,7 @@ import org.springframework.beans.factory.annotation.Autowired; * @author uhensler, urs.hensler@frentix.com, http://www.frentix.com * */ -public class VFSLeafConfigController extends BasicController implements Activateable2 { +public class DocEditorConfigController extends BasicController implements Activateable2 { private static final String GUIPREF_SEPARATOR = "::"; private static final String GUIPREF_KEY_EDITOR = "editor"; @@ -57,17 +57,17 @@ public class VFSLeafConfigController extends BasicController implements Activate private Link backButton; private final String guiEditorKey; - private final List<VFSLeafEditor> editors; + private final List<DocEditor> editors; @Autowired - private VFSRepositoryService vfsService; + private DocumentEditorService editorService; - public VFSLeafConfigController(UserRequest ureq, WindowControl wControl, VFSLeaf vfsLeaf, - VFSLeafEditorSecurityCallback secCallback) { + public DocEditorConfigController(UserRequest ureq, WindowControl wControl, VFSLeaf vfsLeaf, + DocEditorSecurityCallback secCallback) { super(ureq, wControl); this.guiEditorKey = getGuiPrefixKey(vfsLeaf); String suffix = FileUtils.getFileSuffix(vfsLeaf.getName()); - editors = vfsService.getEditors(suffix, secCallback.getMode()); + editors = editorService.getEditors(suffix, secCallback.getMode()); VelocityContainer mainVC = createVelocityContainer("editor_config"); @@ -79,7 +79,7 @@ public class VFSLeafConfigController extends BasicController implements Activate editorDropdown = new Dropdown("editor.selection", null, false, getTranslator()); editorDropdown.setTranslatedLabel(editors.get(0).getDisplayName(getLocale())); editorDropdown.setButton(true); - for (VFSLeafEditor editor : editors) { + for (DocEditor editor : editors) { Link editorLink = LinkFactory.createToolLink(editor.getType(), "select", editor.getDisplayName(getLocale()), this); editorLink.setUserObject(editor); editorDropdown.addComponent(editorLink); @@ -93,16 +93,16 @@ public class VFSLeafConfigController extends BasicController implements Activate @Override public void activate(UserRequest ureq, List<ContextEntry> entries, StateEntry state) { if (editors.size() >= 1) { - Optional<VFSLeafEditor> prefsEditor = getEditorFromGuiPrefs(ureq); - VFSLeafEditor initialEditor = prefsEditor.isPresent() && editorsContains(prefsEditor.get()) + Optional<DocEditor> prefsEditor = getEditorFromGuiPrefs(ureq); + DocEditor initialEditor = prefsEditor.isPresent() && editorsContains(prefsEditor.get()) ? prefsEditor.get() : editors.get(0); doSelectEditor(ureq, initialEditor); } } - private boolean editorsContains(VFSLeafEditor editor) { - for (VFSLeafEditor vfsLeafEditor : editors) { + private boolean editorsContains(DocEditor editor) { + for (DocEditor vfsLeafEditor : editors) { if (vfsLeafEditor.getType().equals(editor.getType()) ) { return true; } @@ -116,23 +116,23 @@ public class VFSLeafConfigController extends BasicController implements Activate fireEvent(ureq, Event.DONE_EVENT); } else if (source instanceof Link) { Link link = (Link)source; - VFSLeafEditor editor = (VFSLeafEditor) link.getUserObject(); + DocEditor editor = (DocEditor) link.getUserObject(); doSelectEditor(ureq, editor); } } - private void doSelectEditor(UserRequest ureq, VFSLeafEditor editor) { + private void doSelectEditor(UserRequest ureq, DocEditor editor) { if (editorDropdown != null) { editorDropdown.setTranslatedLabel(editor.getDisplayName(getLocale())); } saveEditorPrefs(ureq, editor); - fireEvent(ureq, new VFSEditorSelectionEvent(editor)); + fireEvent(ureq, new DocEditorSelectionEvent(editor)); } - private void saveEditorPrefs(UserRequest ureq, VFSLeafEditor editor) { + private void saveEditorPrefs(UserRequest ureq, DocEditor editor) { Preferences guiPrefs = ureq.getUserSession().getGuiPreferences(); if (guiPrefs != null) { - guiPrefs.putAndSave(VFSLeafConfigController.class, guiEditorKey, editor.getType()); + guiPrefs.putAndSave(DocEditorConfigController.class, guiEditorKey, editor.getType()); } } @@ -141,10 +141,10 @@ public class VFSLeafConfigController extends BasicController implements Activate return GUIPREF_KEY_EDITOR + GUIPREF_SEPARATOR + suffix; } - private Optional<VFSLeafEditor> getEditorFromGuiPrefs(UserRequest ureq) { + private Optional<DocEditor> getEditorFromGuiPrefs(UserRequest ureq) { Preferences guiPrefs = ureq.getUserSession().getGuiPreferences(); - String editorType = (String) guiPrefs.get(VFSLeafConfigController.class, guiEditorKey); - return vfsService.getEditor(editorType); + String editorType = (String) guiPrefs.get(DocEditorConfigController.class, guiEditorKey); + return editorService.getEditor(editorType); } @Override diff --git a/src/main/java/org/olat/core/commons/services/vfs/ui/editor/VFSLeafEditorController.java b/src/main/java/org/olat/core/commons/services/doceditor/ui/DocEditorController.java similarity index 70% rename from src/main/java/org/olat/core/commons/services/vfs/ui/editor/VFSLeafEditorController.java rename to src/main/java/org/olat/core/commons/services/doceditor/ui/DocEditorController.java index 7e2f4c7fb44..46e3d1cf603 100644 --- a/src/main/java/org/olat/core/commons/services/vfs/ui/editor/VFSLeafEditorController.java +++ b/src/main/java/org/olat/core/commons/services/doceditor/ui/DocEditorController.java @@ -17,11 +17,11 @@ * frentix GmbH, http://www.frentix.com * <p> */ -package org.olat.core.commons.services.vfs.ui.editor; +package org.olat.core.commons.services.doceditor.ui; -import org.olat.core.commons.services.vfs.VFSLeafEditor; -import org.olat.core.commons.services.vfs.VFSLeafEditorConfigs; -import org.olat.core.commons.services.vfs.VFSLeafEditorSecurityCallback; +import org.olat.core.commons.services.doceditor.DocEditor; +import org.olat.core.commons.services.doceditor.DocEditorConfigs; +import org.olat.core.commons.services.doceditor.DocEditorSecurityCallback; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.Component; import org.olat.core.gui.components.velocity.VelocityContainer; @@ -37,23 +37,23 @@ import org.olat.core.util.vfs.VFSLeaf; * @author uhensler, urs.hensler@frentix.com, http://www.frentix.com * */ -public class VFSLeafEditorController extends BasicController { +public class DocEditorController extends BasicController { private VelocityContainer mainVC; - private VFSLeafConfigController configCtrl; + private DocEditorConfigController configCtrl; private Controller editorCtrl; private final VFSLeaf vfsLeaf; - private final VFSLeafEditorSecurityCallback secCallback; - private final VFSLeafEditorConfigs configs; + private final DocEditorSecurityCallback secCallback; + private final DocEditorConfigs configs; - public VFSLeafEditorController(UserRequest ureq, WindowControl wControl, VFSLeaf vfsLeaf, - VFSLeafEditorSecurityCallback secCallback, VFSLeafEditorConfigs configs) { + public DocEditorController(UserRequest ureq, WindowControl wControl, VFSLeaf vfsLeaf, + DocEditorSecurityCallback secCallback, DocEditorConfigs configs) { this(ureq, wControl, vfsLeaf, secCallback, configs, null); } - public VFSLeafEditorController(UserRequest ureq, WindowControl wControl, VFSLeaf vfsLeaf, - VFSLeafEditorSecurityCallback secCallback, VFSLeafEditorConfigs configs, String cssClass) { + public DocEditorController(UserRequest ureq, WindowControl wControl, VFSLeaf vfsLeaf, + DocEditorSecurityCallback secCallback, DocEditorConfigs configs, String cssClass) { super(ureq, wControl); this.vfsLeaf = vfsLeaf; this.secCallback = secCallback; @@ -62,7 +62,7 @@ public class VFSLeafEditorController extends BasicController { mainVC = createVelocityContainer("editor_main"); mainVC.contextPut("cssClass", cssClass); - configCtrl = new VFSLeafConfigController(ureq, wControl, vfsLeaf, secCallback); + configCtrl = new DocEditorConfigController(ureq, wControl, vfsLeaf, secCallback); listenTo(configCtrl); mainVC.put("config", configCtrl.getInitialComponent()); configCtrl.activate(ureq, null, null); @@ -77,9 +77,9 @@ public class VFSLeafEditorController extends BasicController { @Override protected void event(UserRequest ureq, Controller source, Event event) { if (source == configCtrl) { - if (event instanceof VFSEditorSelectionEvent) { - VFSEditorSelectionEvent esEvent = (VFSEditorSelectionEvent) event; - VFSLeafEditor editor = esEvent.getEditor(); + if (event instanceof DocEditorSelectionEvent) { + DocEditorSelectionEvent esEvent = (DocEditorSelectionEvent) event; + DocEditor editor = esEvent.getEditor(); doOpenEditor(ureq, editor); } else if (event == Event.DONE_EVENT) { fireEvent(ureq, event); @@ -90,7 +90,7 @@ public class VFSLeafEditorController extends BasicController { super.event(ureq, source, event); } - private void doOpenEditor(UserRequest ureq, VFSLeafEditor editor) { + private void doOpenEditor(UserRequest ureq, DocEditor editor) { removeAsListenerAndDispose(editorCtrl); if (editorCtrl != null) mainVC.remove("editor"); diff --git a/src/main/java/org/olat/core/commons/services/vfs/ui/editor/VFSLeafEditorFullscreenController.java b/src/main/java/org/olat/core/commons/services/doceditor/ui/DocEditorFullscreenController.java similarity index 75% rename from src/main/java/org/olat/core/commons/services/vfs/ui/editor/VFSLeafEditorFullscreenController.java rename to src/main/java/org/olat/core/commons/services/doceditor/ui/DocEditorFullscreenController.java index 1dac849bf6c..2b4e1e42f41 100644 --- a/src/main/java/org/olat/core/commons/services/vfs/ui/editor/VFSLeafEditorFullscreenController.java +++ b/src/main/java/org/olat/core/commons/services/doceditor/ui/DocEditorFullscreenController.java @@ -17,10 +17,10 @@ * frentix GmbH, http://www.frentix.com * <p> */ -package org.olat.core.commons.services.vfs.ui.editor; +package org.olat.core.commons.services.doceditor.ui; -import org.olat.core.commons.services.vfs.VFSLeafEditorConfigs; -import org.olat.core.commons.services.vfs.VFSLeafEditorSecurityCallback; +import org.olat.core.commons.services.doceditor.DocEditorConfigs; +import org.olat.core.commons.services.doceditor.DocEditorSecurityCallback; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.Component; import org.olat.core.gui.control.ChiefController; @@ -37,28 +37,28 @@ import org.olat.core.util.vfs.VFSLeaf; * @author uhensler, urs.hensler@frentix.com, http://www.frentix.com * */ -public class VFSLeafEditorFullscreenController extends BasicController { +public class DocEditorFullscreenController extends BasicController { - private VFSLeafEditorController editorCtrl; + private DocEditorController editorCtrl; private final VFSLeaf vfsLeaf; - public VFSLeafEditorFullscreenController(UserRequest ureq, WindowControl wControl, VFSLeaf vfsLeaf, - VFSLeafEditorSecurityCallback secCallback, VFSLeafEditorConfigs configs) { + public DocEditorFullscreenController(UserRequest ureq, WindowControl wControl, VFSLeaf vfsLeaf, + DocEditorSecurityCallback secCallback, DocEditorConfigs configs) { super(ureq, wControl); this.vfsLeaf = vfsLeaf; - editorCtrl = new VFSLeafEditorController(ureq, wControl, vfsLeaf, secCallback, configs); + editorCtrl = new DocEditorController(ureq, wControl, vfsLeaf, secCallback, configs); listenTo(editorCtrl); doOpenEditor(); } - public VFSLeafEditorFullscreenController(UserRequest ureq, WindowControl wControl, VFSLeaf vfsLeaf, - VFSLeafEditorSecurityCallback secCallback, VFSLeafEditorConfigs configs, String cssClass) { + public DocEditorFullscreenController(UserRequest ureq, WindowControl wControl, VFSLeaf vfsLeaf, + DocEditorSecurityCallback secCallback, DocEditorConfigs configs, String cssClass) { super(ureq, wControl); this.vfsLeaf = vfsLeaf; - editorCtrl = new VFSLeafEditorController(ureq, wControl, vfsLeaf, secCallback, configs, cssClass); + editorCtrl = new DocEditorController(ureq, wControl, vfsLeaf, secCallback, configs, cssClass); listenTo(editorCtrl); doOpenEditor(); } diff --git a/src/main/java/org/olat/core/commons/services/vfs/ui/editor/VFSEditorSelectionEvent.java b/src/main/java/org/olat/core/commons/services/doceditor/ui/DocEditorSelectionEvent.java similarity index 79% rename from src/main/java/org/olat/core/commons/services/vfs/ui/editor/VFSEditorSelectionEvent.java rename to src/main/java/org/olat/core/commons/services/doceditor/ui/DocEditorSelectionEvent.java index ae1812ac460..f2805917343 100644 --- a/src/main/java/org/olat/core/commons/services/vfs/ui/editor/VFSEditorSelectionEvent.java +++ b/src/main/java/org/olat/core/commons/services/doceditor/ui/DocEditorSelectionEvent.java @@ -17,9 +17,9 @@ * frentix GmbH, http://www.frentix.com * <p> */ -package org.olat.core.commons.services.vfs.ui.editor; +package org.olat.core.commons.services.doceditor.ui; -import org.olat.core.commons.services.vfs.VFSLeafEditor; +import org.olat.core.commons.services.doceditor.DocEditor; import org.olat.core.gui.control.Event; /** @@ -28,18 +28,18 @@ import org.olat.core.gui.control.Event; * @author uhensler, urs.hensler@frentix.com, http://www.frentix.com * */ -public class VFSEditorSelectionEvent extends Event { +public class DocEditorSelectionEvent extends Event { private static final long serialVersionUID = 5012841554626419194L; - private final VFSLeafEditor editor; + private final DocEditor editor; - public VFSEditorSelectionEvent(VFSLeafEditor editor) { + public DocEditorSelectionEvent(DocEditor editor) { super("editor-selected"); this.editor = editor; } - public VFSLeafEditor getEditor() { + public DocEditor getEditor() { return editor; } diff --git a/src/main/java/org/olat/core/commons/services/filetemplate/ui/_content/create_file.html b/src/main/java/org/olat/core/commons/services/doceditor/ui/_content/create_document.html similarity index 82% rename from src/main/java/org/olat/core/commons/services/filetemplate/ui/_content/create_file.html rename to src/main/java/org/olat/core/commons/services/doceditor/ui/_content/create_document.html index 12fe391784d..eecc30d83e3 100644 --- a/src/main/java/org/olat/core/commons/services/filetemplate/ui/_content/create_file.html +++ b/src/main/java/org/olat/core/commons/services/doceditor/ui/_content/create_document.html @@ -1,5 +1,5 @@ <div class="o_sel_folder_new_file"> -$r.render("file") +$r.render("doc") $r.render("metadata") $r.render("buttons") </div> \ No newline at end of file diff --git a/src/main/java/org/olat/core/commons/services/doceditor/ui/_content/editor_config.html b/src/main/java/org/olat/core/commons/services/doceditor/ui/_content/editor_config.html new file mode 100644 index 00000000000..912fdfc9d6b --- /dev/null +++ b/src/main/java/org/olat/core/commons/services/doceditor/ui/_content/editor_config.html @@ -0,0 +1,18 @@ +<div class="o_vfseditor_config"> + <div class="navbar-collapse"> + #if($r.available("backLink")) + <ul class="nav navbar-nav navbar-left"> + <li> + $r.render("backLink") + </li> + </ul> + #end + #if($r.available("editor.selection")) + <ul class="nav navbar-nav navbar-right"> + <li> + $r.render("editor.selection") + </li> + </ul> + #end + </div> +</div> \ No newline at end of file diff --git a/src/main/java/org/olat/core/commons/services/doceditor/ui/_content/editor_main.html b/src/main/java/org/olat/core/commons/services/doceditor/ui/_content/editor_main.html new file mode 100644 index 00000000000..b67c3b2dda4 --- /dev/null +++ b/src/main/java/org/olat/core/commons/services/doceditor/ui/_content/editor_main.html @@ -0,0 +1,10 @@ +<div class="o_vfseditor $!cssClass"> + $r.render("config") + #if($r.available("editor")) + $r.render("editor") + #else + <div class="o_warning"> + $r.translate("error.no.editor") + </div> + #end +</div> \ No newline at end of file diff --git a/src/main/java/org/olat/core/commons/services/doceditor/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/core/commons/services/doceditor/ui/_i18n/LocalStrings_de.properties new file mode 100644 index 00000000000..ddaf26b4ee7 --- /dev/null +++ b/src/main/java/org/olat/core/commons/services/doceditor/ui/_i18n/LocalStrings_de.properties @@ -0,0 +1,12 @@ +create.doc.already.exists=$org.olat.core.commons.modules.bc\:cdoc.already.exists +create.doc.button=Dokument erstellen +create.doc.name.notvalid=$org.olat.core.commons.modules.bc\:cdoc.name.notvalid +create.doc.name=Dateiname +create.doc.type=Dateityp +doc.type.css=Cascading Style Sheet +doc.type.docx=Word +doc.type.html=HTML-Dokument +doc.type.pptx=PowerPoint +doc.type.txt=Text +doc.type.xlsx=Excel +error.no.editor=Die Datei kann nicht angezeigt werden. diff --git a/src/main/java/org/olat/core/commons/services/doceditor/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/core/commons/services/doceditor/ui/_i18n/LocalStrings_en.properties new file mode 100644 index 00000000000..9a46c8358aa --- /dev/null +++ b/src/main/java/org/olat/core/commons/services/doceditor/ui/_i18n/LocalStrings_en.properties @@ -0,0 +1,12 @@ +create.doc.already.exists=$org.olat.core.commons.modules.bc\:cdoc.already.exists +create.doc.button=Create document +create.doc.name.notvalid=$org.olat.core.commons.modules.bc\:cdoc.name.notvalid +create.doc.name=File name +create.doc.type=Type +doc.type.css=Cascading Style Sheet +doc.type.docx=Word +doc.type.html=HTML Document +doc.type.pptx=PowerPoint +doc.type.txt=Text +doc.type.xlsx=Excel +error.no.editor=The content of the document cannot be displayed. diff --git a/src/main/java/org/olat/modules/wopi/Access.java b/src/main/java/org/olat/core/commons/services/doceditor/wopi/Access.java similarity index 95% rename from src/main/java/org/olat/modules/wopi/Access.java rename to src/main/java/org/olat/core/commons/services/doceditor/wopi/Access.java index ca2964f1927..b3914490172 100644 --- a/src/main/java/org/olat/modules/wopi/Access.java +++ b/src/main/java/org/olat/core/commons/services/doceditor/wopi/Access.java @@ -17,7 +17,7 @@ * frentix GmbH, http://www.frentix.com * <p> */ -package org.olat.modules.wopi; +package org.olat.core.commons.services.doceditor.wopi; import org.olat.core.commons.services.vfs.VFSMetadata; import org.olat.core.id.Identity; diff --git a/src/main/java/org/olat/modules/wopi/Action.java b/src/main/java/org/olat/core/commons/services/doceditor/wopi/Action.java similarity index 95% rename from src/main/java/org/olat/modules/wopi/Action.java rename to src/main/java/org/olat/core/commons/services/doceditor/wopi/Action.java index e173ebfeb78..c353bf01c23 100644 --- a/src/main/java/org/olat/modules/wopi/Action.java +++ b/src/main/java/org/olat/core/commons/services/doceditor/wopi/Action.java @@ -17,7 +17,7 @@ * frentix GmbH, http://www.frentix.com * <p> */ -package org.olat.modules.wopi; +package org.olat.core.commons.services.doceditor.wopi; /** * diff --git a/src/main/java/org/olat/modules/wopi/App.java b/src/main/java/org/olat/core/commons/services/doceditor/wopi/App.java similarity index 95% rename from src/main/java/org/olat/modules/wopi/App.java rename to src/main/java/org/olat/core/commons/services/doceditor/wopi/App.java index 59bfe83d31a..4d9c8e11f76 100644 --- a/src/main/java/org/olat/modules/wopi/App.java +++ b/src/main/java/org/olat/core/commons/services/doceditor/wopi/App.java @@ -17,7 +17,7 @@ * frentix GmbH, http://www.frentix.com * <p> */ -package org.olat.modules.wopi; +package org.olat.core.commons.services.doceditor.wopi; import java.util.List; diff --git a/src/main/java/org/olat/modules/wopi/Discovery.java b/src/main/java/org/olat/core/commons/services/doceditor/wopi/Discovery.java similarity index 95% rename from src/main/java/org/olat/modules/wopi/Discovery.java rename to src/main/java/org/olat/core/commons/services/doceditor/wopi/Discovery.java index 41d60563196..af3882eb318 100644 --- a/src/main/java/org/olat/modules/wopi/Discovery.java +++ b/src/main/java/org/olat/core/commons/services/doceditor/wopi/Discovery.java @@ -17,7 +17,7 @@ * frentix GmbH, http://www.frentix.com * <p> */ -package org.olat.modules.wopi; +package org.olat.core.commons.services.doceditor.wopi; import java.util.List; diff --git a/src/main/java/org/olat/modules/wopi/NetZone.java b/src/main/java/org/olat/core/commons/services/doceditor/wopi/NetZone.java similarity index 94% rename from src/main/java/org/olat/modules/wopi/NetZone.java rename to src/main/java/org/olat/core/commons/services/doceditor/wopi/NetZone.java index 34c58062e00..51c4e0f763d 100644 --- a/src/main/java/org/olat/modules/wopi/NetZone.java +++ b/src/main/java/org/olat/core/commons/services/doceditor/wopi/NetZone.java @@ -17,7 +17,7 @@ * frentix GmbH, http://www.frentix.com * <p> */ -package org.olat.modules.wopi; +package org.olat.core.commons.services.doceditor.wopi; import java.util.List; diff --git a/src/main/java/org/olat/modules/wopi/ProofKey.java b/src/main/java/org/olat/core/commons/services/doceditor/wopi/ProofKey.java similarity index 95% rename from src/main/java/org/olat/modules/wopi/ProofKey.java rename to src/main/java/org/olat/core/commons/services/doceditor/wopi/ProofKey.java index 9ef70322f0f..f8bd8e8762a 100644 --- a/src/main/java/org/olat/modules/wopi/ProofKey.java +++ b/src/main/java/org/olat/core/commons/services/doceditor/wopi/ProofKey.java @@ -17,7 +17,7 @@ * frentix GmbH, http://www.frentix.com * <p> */ -package org.olat.modules.wopi; +package org.olat.core.commons.services.doceditor.wopi; /** * diff --git a/src/main/java/org/olat/modules/wopi/WopiDiscoveryClient.java b/src/main/java/org/olat/core/commons/services/doceditor/wopi/WopiDiscoveryClient.java similarity index 95% rename from src/main/java/org/olat/modules/wopi/WopiDiscoveryClient.java rename to src/main/java/org/olat/core/commons/services/doceditor/wopi/WopiDiscoveryClient.java index ba2507c8ad2..df803da162c 100644 --- a/src/main/java/org/olat/modules/wopi/WopiDiscoveryClient.java +++ b/src/main/java/org/olat/core/commons/services/doceditor/wopi/WopiDiscoveryClient.java @@ -17,7 +17,7 @@ * frentix GmbH, http://www.frentix.com * <p> */ -package org.olat.modules.wopi; +package org.olat.core.commons.services.doceditor.wopi; /** * diff --git a/src/main/java/org/olat/modules/wopi/WopiRestHelper.java b/src/main/java/org/olat/core/commons/services/doceditor/wopi/WopiRestHelper.java similarity index 96% rename from src/main/java/org/olat/modules/wopi/WopiRestHelper.java rename to src/main/java/org/olat/core/commons/services/doceditor/wopi/WopiRestHelper.java index e5324940d86..3419a8f19a0 100644 --- a/src/main/java/org/olat/modules/wopi/WopiRestHelper.java +++ b/src/main/java/org/olat/core/commons/services/doceditor/wopi/WopiRestHelper.java @@ -17,7 +17,7 @@ * frentix GmbH, http://www.frentix.com * <p> */ -package org.olat.modules.wopi; +package org.olat.core.commons.services.doceditor.wopi; import java.io.File; import java.time.Instant; diff --git a/src/main/java/org/olat/modules/wopi/WopiService.java b/src/main/java/org/olat/core/commons/services/doceditor/wopi/WopiService.java similarity index 90% rename from src/main/java/org/olat/modules/wopi/WopiService.java rename to src/main/java/org/olat/core/commons/services/doceditor/wopi/WopiService.java index adb144c397d..a17d2fe4399 100644 --- a/src/main/java/org/olat/modules/wopi/WopiService.java +++ b/src/main/java/org/olat/core/commons/services/doceditor/wopi/WopiService.java @@ -17,11 +17,11 @@ * frentix GmbH, http://www.frentix.com * <p> */ -package org.olat.modules.wopi; +package org.olat.core.commons.services.doceditor.wopi; import java.io.File; -import org.olat.core.commons.services.vfs.VFSLeafEditorSecurityCallback; +import org.olat.core.commons.services.doceditor.DocEditorSecurityCallback; import org.olat.core.commons.services.vfs.VFSMetadata; import org.olat.core.id.Identity; import org.olat.core.util.vfs.VFSLeaf; @@ -42,7 +42,7 @@ public interface WopiService { VFSMetadata getMetadata(String fileId); - Access createAccess(VFSMetadata vfsMetadata, Identity identity, VFSLeafEditorSecurityCallback secCallback); + Access createAccess(VFSMetadata vfsMetadata, Identity identity, DocEditorSecurityCallback secCallback); Access getAccess(String accessToken); diff --git a/src/main/java/org/olat/modules/wopi/manager/WopiDiscoveryClientImpl.java b/src/main/java/org/olat/core/commons/services/doceditor/wopi/manager/WopiDiscoveryClientImpl.java similarity index 90% rename from src/main/java/org/olat/modules/wopi/manager/WopiDiscoveryClientImpl.java rename to src/main/java/org/olat/core/commons/services/doceditor/wopi/manager/WopiDiscoveryClientImpl.java index c4cef1b4cfa..377f7e5a774 100644 --- a/src/main/java/org/olat/modules/wopi/manager/WopiDiscoveryClientImpl.java +++ b/src/main/java/org/olat/core/commons/services/doceditor/wopi/manager/WopiDiscoveryClientImpl.java @@ -17,7 +17,7 @@ * frentix GmbH, http://www.frentix.com * <p> */ -package org.olat.modules.wopi.manager; +package org.olat.core.commons.services.doceditor.wopi.manager; import org.apache.http.HttpEntity; import org.apache.http.client.config.RequestConfig; @@ -26,11 +26,11 @@ import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; +import org.olat.core.commons.services.doceditor.wopi.Discovery; +import org.olat.core.commons.services.doceditor.wopi.WopiDiscoveryClient; +import org.olat.core.commons.services.doceditor.wopi.model.DiscoveryImpl; import org.olat.core.logging.OLog; import org.olat.core.logging.Tracing; -import org.olat.modules.wopi.Discovery; -import org.olat.modules.wopi.WopiDiscoveryClient; -import org.olat.modules.wopi.model.DiscoveryImpl; import org.springframework.stereotype.Service; /** diff --git a/src/main/java/org/olat/modules/wopi/manager/WopiServiceImpl.java b/src/main/java/org/olat/core/commons/services/doceditor/wopi/manager/WopiServiceImpl.java similarity index 86% rename from src/main/java/org/olat/modules/wopi/manager/WopiServiceImpl.java rename to src/main/java/org/olat/core/commons/services/doceditor/wopi/manager/WopiServiceImpl.java index 583ff0f4ffc..3dc229fb649 100644 --- a/src/main/java/org/olat/modules/wopi/manager/WopiServiceImpl.java +++ b/src/main/java/org/olat/core/commons/services/doceditor/wopi/manager/WopiServiceImpl.java @@ -17,7 +17,7 @@ * frentix GmbH, http://www.frentix.com * <p> */ -package org.olat.modules.wopi.manager; +package org.olat.core.commons.services.doceditor.wopi.manager; import java.io.File; import java.net.URL; @@ -27,8 +27,15 @@ import java.util.UUID; import javax.annotation.PostConstruct; -import org.olat.core.commons.services.vfs.VFSLeafEditor.Mode; -import org.olat.core.commons.services.vfs.VFSLeafEditorSecurityCallback; +import org.olat.core.commons.services.doceditor.DocEditorSecurityCallback; +import org.olat.core.commons.services.doceditor.DocEditor.Mode; +import org.olat.core.commons.services.doceditor.wopi.Access; +import org.olat.core.commons.services.doceditor.wopi.Action; +import org.olat.core.commons.services.doceditor.wopi.App; +import org.olat.core.commons.services.doceditor.wopi.Discovery; +import org.olat.core.commons.services.doceditor.wopi.NetZone; +import org.olat.core.commons.services.doceditor.wopi.WopiService; +import org.olat.core.commons.services.doceditor.wopi.model.AccessImpl; import org.olat.core.commons.services.vfs.VFSMetadata; import org.olat.core.commons.services.vfs.VFSRepositoryService; import org.olat.core.id.Identity; @@ -38,13 +45,6 @@ import org.olat.core.util.cache.CacheWrapper; import org.olat.core.util.coordinate.CoordinatorManager; import org.olat.core.util.vfs.VFSItem; import org.olat.core.util.vfs.VFSLeaf; -import org.olat.modules.wopi.Access; -import org.olat.modules.wopi.Action; -import org.olat.modules.wopi.App; -import org.olat.modules.wopi.Discovery; -import org.olat.modules.wopi.NetZone; -import org.olat.modules.wopi.WopiService; -import org.olat.modules.wopi.model.AccessImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -106,7 +106,7 @@ public class WopiServiceImpl implements WopiService { } @Override - public Access createAccess(VFSMetadata vfsMetadata, Identity identity, VFSLeafEditorSecurityCallback secCallback) { + public Access createAccess(VFSMetadata vfsMetadata, Identity identity, DocEditorSecurityCallback secCallback) { String token = UUID.randomUUID().toString().replaceAll("-", ""); String fileId = vfsMetadata.getUuid(); diff --git a/src/main/java/org/olat/modules/wopi/manager/WopiXStream.java b/src/main/java/org/olat/core/commons/services/doceditor/wopi/manager/WopiXStream.java similarity index 88% rename from src/main/java/org/olat/modules/wopi/manager/WopiXStream.java rename to src/main/java/org/olat/core/commons/services/doceditor/wopi/manager/WopiXStream.java index 47b5908c550..63ad5d6c4fe 100644 --- a/src/main/java/org/olat/modules/wopi/manager/WopiXStream.java +++ b/src/main/java/org/olat/core/commons/services/doceditor/wopi/manager/WopiXStream.java @@ -17,14 +17,14 @@ * frentix GmbH, http://www.frentix.com * <p> */ -package org.olat.modules.wopi.manager; +package org.olat.core.commons.services.doceditor.wopi.manager; +import org.olat.core.commons.services.doceditor.wopi.model.ActionImpl; +import org.olat.core.commons.services.doceditor.wopi.model.AppImpl; +import org.olat.core.commons.services.doceditor.wopi.model.DiscoveryImpl; +import org.olat.core.commons.services.doceditor.wopi.model.NetZoneImpl; +import org.olat.core.commons.services.doceditor.wopi.model.ProofKeyImpl; import org.olat.core.util.xml.XStreamHelper; -import org.olat.modules.wopi.model.ActionImpl; -import org.olat.modules.wopi.model.AppImpl; -import org.olat.modules.wopi.model.DiscoveryImpl; -import org.olat.modules.wopi.model.NetZoneImpl; -import org.olat.modules.wopi.model.ProofKeyImpl; import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.security.ExplicitTypePermission; diff --git a/src/main/java/org/olat/modules/wopi/model/AccessImpl.java b/src/main/java/org/olat/core/commons/services/doceditor/wopi/model/AccessImpl.java similarity index 94% rename from src/main/java/org/olat/modules/wopi/model/AccessImpl.java rename to src/main/java/org/olat/core/commons/services/doceditor/wopi/model/AccessImpl.java index feb021715f5..8b0b8b2e553 100644 --- a/src/main/java/org/olat/modules/wopi/model/AccessImpl.java +++ b/src/main/java/org/olat/core/commons/services/doceditor/wopi/model/AccessImpl.java @@ -17,11 +17,11 @@ * frentix GmbH, http://www.frentix.com * <p> */ -package org.olat.modules.wopi.model; +package org.olat.core.commons.services.doceditor.wopi.model; +import org.olat.core.commons.services.doceditor.wopi.Access; import org.olat.core.commons.services.vfs.VFSMetadata; import org.olat.core.id.Identity; -import org.olat.modules.wopi.Access; /** * diff --git a/src/main/java/org/olat/modules/wopi/model/ActionImpl.java b/src/main/java/org/olat/core/commons/services/doceditor/wopi/model/ActionImpl.java similarity index 93% rename from src/main/java/org/olat/modules/wopi/model/ActionImpl.java rename to src/main/java/org/olat/core/commons/services/doceditor/wopi/model/ActionImpl.java index 8db08b66f0d..c7c736e0e28 100644 --- a/src/main/java/org/olat/modules/wopi/model/ActionImpl.java +++ b/src/main/java/org/olat/core/commons/services/doceditor/wopi/model/ActionImpl.java @@ -17,9 +17,9 @@ * frentix GmbH, http://www.frentix.com * <p> */ -package org.olat.modules.wopi.model; +package org.olat.core.commons.services.doceditor.wopi.model; -import org.olat.modules.wopi.Action; +import org.olat.core.commons.services.doceditor.wopi.Action; /** * diff --git a/src/main/java/org/olat/modules/wopi/model/AppImpl.java b/src/main/java/org/olat/core/commons/services/doceditor/wopi/model/AppImpl.java similarity index 90% rename from src/main/java/org/olat/modules/wopi/model/AppImpl.java rename to src/main/java/org/olat/core/commons/services/doceditor/wopi/model/AppImpl.java index f105a4bbc1e..8b6d082b43e 100644 --- a/src/main/java/org/olat/modules/wopi/model/AppImpl.java +++ b/src/main/java/org/olat/core/commons/services/doceditor/wopi/model/AppImpl.java @@ -17,12 +17,12 @@ * frentix GmbH, http://www.frentix.com * <p> */ -package org.olat.modules.wopi.model; +package org.olat.core.commons.services.doceditor.wopi.model; import java.util.List; -import org.olat.modules.wopi.Action; -import org.olat.modules.wopi.App; +import org.olat.core.commons.services.doceditor.wopi.Action; +import org.olat.core.commons.services.doceditor.wopi.App; /** * diff --git a/src/main/java/org/olat/modules/wopi/model/DiscoveryImpl.java b/src/main/java/org/olat/core/commons/services/doceditor/wopi/model/DiscoveryImpl.java similarity index 84% rename from src/main/java/org/olat/modules/wopi/model/DiscoveryImpl.java rename to src/main/java/org/olat/core/commons/services/doceditor/wopi/model/DiscoveryImpl.java index d81e9dfa465..5c8d4c52fdf 100644 --- a/src/main/java/org/olat/modules/wopi/model/DiscoveryImpl.java +++ b/src/main/java/org/olat/core/commons/services/doceditor/wopi/model/DiscoveryImpl.java @@ -17,13 +17,13 @@ * frentix GmbH, http://www.frentix.com * <p> */ -package org.olat.modules.wopi.model; +package org.olat.core.commons.services.doceditor.wopi.model; import java.util.List; -import org.olat.modules.wopi.Discovery; -import org.olat.modules.wopi.NetZone; -import org.olat.modules.wopi.ProofKey; +import org.olat.core.commons.services.doceditor.wopi.Discovery; +import org.olat.core.commons.services.doceditor.wopi.NetZone; +import org.olat.core.commons.services.doceditor.wopi.ProofKey; /** * diff --git a/src/main/java/org/olat/modules/wopi/model/NetZoneImpl.java b/src/main/java/org/olat/core/commons/services/doceditor/wopi/model/NetZoneImpl.java similarity index 87% rename from src/main/java/org/olat/modules/wopi/model/NetZoneImpl.java rename to src/main/java/org/olat/core/commons/services/doceditor/wopi/model/NetZoneImpl.java index 9f57b9cd109..d1111bc14e8 100644 --- a/src/main/java/org/olat/modules/wopi/model/NetZoneImpl.java +++ b/src/main/java/org/olat/core/commons/services/doceditor/wopi/model/NetZoneImpl.java @@ -17,12 +17,12 @@ * frentix GmbH, http://www.frentix.com * <p> */ -package org.olat.modules.wopi.model; +package org.olat.core.commons.services.doceditor.wopi.model; import java.util.List; -import org.olat.modules.wopi.App; -import org.olat.modules.wopi.NetZone; +import org.olat.core.commons.services.doceditor.wopi.App; +import org.olat.core.commons.services.doceditor.wopi.NetZone; /** * diff --git a/src/main/java/org/olat/modules/wopi/model/ProofKeyImpl.java b/src/main/java/org/olat/core/commons/services/doceditor/wopi/model/ProofKeyImpl.java similarity index 94% rename from src/main/java/org/olat/modules/wopi/model/ProofKeyImpl.java rename to src/main/java/org/olat/core/commons/services/doceditor/wopi/model/ProofKeyImpl.java index 54e94477e33..2fa68611390 100644 --- a/src/main/java/org/olat/modules/wopi/model/ProofKeyImpl.java +++ b/src/main/java/org/olat/core/commons/services/doceditor/wopi/model/ProofKeyImpl.java @@ -17,9 +17,9 @@ * frentix GmbH, http://www.frentix.com * <p> */ -package org.olat.modules.wopi.model; +package org.olat.core.commons.services.doceditor.wopi.model; -import org.olat.modules.wopi.ProofKey; +import org.olat.core.commons.services.doceditor.wopi.ProofKey; /** * diff --git a/src/main/java/org/olat/core/commons/services/filetemplate/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/core/commons/services/filetemplate/ui/_i18n/LocalStrings_de.properties deleted file mode 100644 index b16cb8ff318..00000000000 --- a/src/main/java/org/olat/core/commons/services/filetemplate/ui/_i18n/LocalStrings_de.properties +++ /dev/null @@ -1,11 +0,0 @@ -create.file.already.exists=$org.olat.core.commons.modules.bc\:cfile.already.exists -create.file.button=Dokument erstellen -create.file.name=Dateiname -create.file.name.notvalid=$org.olat.core.commons.modules.bc\:cfile.name.notvalid -create.file.type=Dateityp -file.type.css=Cascading Style Sheet -file.type.docx=Word -file.type.html=HTML-Dokument -file.type.pptx=PowerPoint -file.type.txt=Text -file.type.xlsx=Excel diff --git a/src/main/java/org/olat/core/commons/services/filetemplate/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/core/commons/services/filetemplate/ui/_i18n/LocalStrings_en.properties deleted file mode 100644 index b39cfd71285..00000000000 --- a/src/main/java/org/olat/core/commons/services/filetemplate/ui/_i18n/LocalStrings_en.properties +++ /dev/null @@ -1,11 +0,0 @@ -create.file.already.exists=$org.olat.core.commons.modules.bc\:cfile.already.exists -create.file.button=Create document -create.file.name=File name -create.file.name.notvalid=$org.olat.core.commons.modules.bc\:cfile.name.notvalid -create.file.type=Type -file.type.css=Cascading Style Sheet -file.type.docx=Word -file.type.html=HTML Document -file.type.pptx=PowerPoint -file.type.txt=Text -file.type.xlsx=Excel diff --git a/src/main/java/org/olat/core/commons/services/vfs/VFSRepositoryService.java b/src/main/java/org/olat/core/commons/services/vfs/VFSRepositoryService.java index 1a5248e61c5..2a1a076cf24 100644 --- a/src/main/java/org/olat/core/commons/services/vfs/VFSRepositoryService.java +++ b/src/main/java/org/olat/core/commons/services/vfs/VFSRepositoryService.java @@ -22,10 +22,8 @@ package org.olat.core.commons.services.vfs; import java.io.File; import java.io.InputStream; import java.util.List; -import java.util.Optional; import org.olat.core.commons.services.license.License; -import org.olat.core.commons.services.vfs.VFSLeafEditor.Mode; import org.olat.core.id.Identity; import org.olat.core.util.vfs.VFSContainer; import org.olat.core.util.vfs.VFSItem; @@ -257,45 +255,5 @@ public interface VFSRepositoryService { public License getLicense(VFSMetadata meta); public License getOrCreateLicense(VFSMetadata meta, Identity itentity); - - - /** - * Check if file with a specific suffix is supported by any enabled editor. - * - * @param suffix - * @param mode - * @return - */ - public boolean hasEditor(String suffix, Mode mode); - - /** - * Get all enabled editors which support a file with a specific suffix. Support means usually edit or read. - * - * @param suffix - * @param mode - * @return - */ - public List<VFSLeafEditor> getEditors(String suffix, Mode mode); - - /** - * Get the editor of a specific type. - * - * @param editorType - * @return - */ - public Optional<VFSLeafEditor> getEditor(String editorType); - - /** - * Checks whether a vfsLeaf can be opened in any editor by a user and in a - * specific mode. This method checks not only if a file format is supported but - * also if the vfsLeaf is not locked by an other editor or user. - * - * @param vfsLeaf - * @param mode - * @param identity - * @return - */ - public boolean hasEditor(VFSLeaf vfsLeaf, Mode mode, Identity identity); - } diff --git a/src/main/java/org/olat/core/commons/services/vfs/manager/VFSRepositoryServiceImpl.java b/src/main/java/org/olat/core/commons/services/vfs/manager/VFSRepositoryServiceImpl.java index 289683fc957..fdf806c9006 100644 --- a/src/main/java/org/olat/core/commons/services/vfs/manager/VFSRepositoryServiceImpl.java +++ b/src/main/java/org/olat/core/commons/services/vfs/manager/VFSRepositoryServiceImpl.java @@ -42,10 +42,8 @@ import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map; -import java.util.Optional; import java.util.UUID; import java.util.concurrent.atomic.AtomicInteger; -import java.util.stream.Collectors; import java.util.zip.Adler32; import java.util.zip.Checksum; @@ -62,8 +60,6 @@ import org.olat.core.commons.services.license.LicenseType; import org.olat.core.commons.services.thumbnail.CannotGenerateThumbnailException; import org.olat.core.commons.services.thumbnail.FinalSize; import org.olat.core.commons.services.thumbnail.ThumbnailService; -import org.olat.core.commons.services.vfs.VFSLeafEditor; -import org.olat.core.commons.services.vfs.VFSLeafEditor.Mode; import org.olat.core.commons.services.vfs.VFSMetadata; import org.olat.core.commons.services.vfs.VFSMetadataRef; import org.olat.core.commons.services.vfs.VFSRepositoryModule; @@ -138,8 +134,6 @@ public class VFSRepositoryServiceImpl implements VFSRepositoryService, GenericEv private CoordinatorManager coordinatorManager; @Autowired private BaseSecurity securityManager; - @Autowired - private List<VFSLeafEditor> vfsLeafEditors; @Override public void afterPropertiesSet() throws Exception { @@ -1330,45 +1324,4 @@ public class VFSRepositoryServiceImpl implements VFSRepositoryService, GenericEv return fVersion.exists() ? fVersion : null; } - @Override - public boolean hasEditor(String suffix, Mode mode) { - if (mode == null) return false; - - return vfsLeafEditors.stream() - .filter(VFSLeafEditor::isEnable) - .filter(editor -> editor.isSupportingFormat(suffix, mode)) - .findFirst() - .isPresent(); - } - - @Override - public List<VFSLeafEditor> getEditors(String suffix, Mode mode) { - return vfsLeafEditors.stream() - .filter(VFSLeafEditor::isEnable) - .filter(editor -> editor.isSupportingFormat(suffix, mode)) - .collect(Collectors.toList()); - } - - @Override - public Optional<VFSLeafEditor> getEditor(String editorType) { - return vfsLeafEditors.stream() - .filter(VFSLeafEditor::isEnable) - .filter(editor -> editor.getType().equals(editorType)) - .findFirst(); - } - - @Override - public boolean hasEditor(VFSLeaf vfsLeaf, Mode mode, Identity identity) { - if (mode == null) return false; - - String suffix = FileUtils.getFileSuffix(vfsLeaf.getName()); - return vfsLeafEditors.stream() - .filter(VFSLeafEditor::isEnable) - .filter(editor -> editor.isSupportingFormat(suffix, mode)) - .filter(editor -> !editor.isLockedForMe(vfsLeaf, mode, identity)) - .findFirst() - .isPresent(); - - } - } diff --git a/src/main/java/org/olat/course/nodes/gta/ui/AbstractAssignmentEditController.java b/src/main/java/org/olat/course/nodes/gta/ui/AbstractAssignmentEditController.java index abe48edf642..1aac1f09580 100644 --- a/src/main/java/org/olat/course/nodes/gta/ui/AbstractAssignmentEditController.java +++ b/src/main/java/org/olat/course/nodes/gta/ui/AbstractAssignmentEditController.java @@ -19,20 +19,20 @@ */ package org.olat.course.nodes.gta.ui; -import static org.olat.core.commons.services.vfs.VFSLeafEditor.Mode.EDIT; +import static org.olat.core.commons.services.doceditor.DocEditor.Mode.EDIT; +import static org.olat.course.nodes.gta.ui.GTAUIFactory.getOpenMode; import static org.olat.course.nodes.gta.ui.GTAUIFactory.htmlOffice; import java.io.File; import java.util.ArrayList; import java.util.List; +import org.olat.core.commons.services.doceditor.DocEditor.Mode; +import org.olat.core.commons.services.doceditor.DocEditorConfigs; +import org.olat.core.commons.services.doceditor.DocEditorSecurityCallback; +import org.olat.core.commons.services.doceditor.DocEditorSecurityCallbackBuilder; +import org.olat.core.commons.services.doceditor.ui.DocEditorFullscreenController; import org.olat.core.commons.services.notifications.NotificationsManager; -import org.olat.core.commons.services.vfs.VFSLeafEditor.Mode; -import org.olat.core.commons.services.vfs.VFSLeafEditorConfigs; -import org.olat.core.commons.services.vfs.VFSLeafEditorSecurityCallback; -import org.olat.core.commons.services.vfs.VFSLeafEditorSecurityCallbackBuilder; -import org.olat.core.commons.services.vfs.VFSRepositoryService; -import org.olat.core.commons.services.vfs.ui.editor.VFSLeafEditorFullscreenController; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.form.flexible.FormItem; import org.olat.core.gui.components.form.flexible.FormItemContainer; @@ -90,7 +90,7 @@ abstract class AbstractAssignmentEditController extends FormBasicController { private NewTaskController newTaskCtrl; private DialogBoxController confirmDeleteCtrl; private EditTaskController addTaskCtrl, editTaskCtrl; - private VFSLeafEditorFullscreenController vfsLeafEditorCtrl; + private DocEditorFullscreenController docEditorCtrl; private final File tasksFolder; protected final boolean readOnly; @@ -106,8 +106,6 @@ abstract class AbstractAssignmentEditController extends FormBasicController { protected GTAManager gtaManager; @Autowired protected NotificationsManager notificationsManager; - @Autowired - protected VFSRepositoryService vfsService; public AbstractAssignmentEditController(UserRequest ureq, WindowControl wControl, GTACourseNode gtaNode, ModuleConfiguration config, CourseEnvironment courseEnv, boolean readOnly) { @@ -169,7 +167,7 @@ abstract class AbstractAssignmentEditController extends FormBasicController { VFSLeaf vfsLeaf = (VFSLeaf)item; downloadLink = uifactory .addDownloadLink("file_" + (++linkCounter), def.getFilename(), null, vfsLeaf, taskDefTableEl); - mode = getOpenMode(vfsLeaf); + mode = getOpenMode(vfsLeaf, getIdentity(), readOnly); } TaskDefinitionRow row = new TaskDefinitionRow(def, downloadLink, mode); @@ -179,15 +177,6 @@ abstract class AbstractAssignmentEditController extends FormBasicController { taskDefTableEl.reset(); } - private Mode getOpenMode(VFSLeaf vfsLeaf) { - if (!readOnly && vfsService.hasEditor(vfsLeaf, Mode.EDIT, getIdentity())) { - return Mode.EDIT; - } else if (vfsService.hasEditor(vfsLeaf, Mode.VIEW, getIdentity())) { - return Mode.VIEW; - } - return null; - } - @Override protected void doDispose() { // @@ -225,7 +214,7 @@ abstract class AbstractAssignmentEditController extends FormBasicController { doOpen(ureq, newTask, EDIT); updateModel(); } - } else if (source == vfsLeafEditorCtrl) { + } else if (source == docEditorCtrl) { if(event == Event.DONE_EVENT) { gtaManager.markNews(courseEnv, gtaNode); updateModel(); @@ -245,12 +234,12 @@ abstract class AbstractAssignmentEditController extends FormBasicController { private void cleanUp() { removeAsListenerAndDispose(confirmDeleteCtrl); - removeAsListenerAndDispose(vfsLeafEditorCtrl); + removeAsListenerAndDispose(docEditorCtrl); removeAsListenerAndDispose(editTaskCtrl); removeAsListenerAndDispose(addTaskCtrl); removeAsListenerAndDispose(cmc); confirmDeleteCtrl = null; - vfsLeafEditorCtrl = null; + docEditorCtrl = null; editTaskCtrl = null; addTaskCtrl = null; cmc = null; @@ -327,12 +316,12 @@ abstract class AbstractAssignmentEditController extends FormBasicController { if(vfsItem == null || !(vfsItem instanceof VFSLeaf)) { showError("error.missing.file"); } else { - VFSLeafEditorSecurityCallback secCallback = VFSLeafEditorSecurityCallbackBuilder.builder() + DocEditorSecurityCallback secCallback = DocEditorSecurityCallbackBuilder.builder() .withMode(mode) .build(); - VFSLeafEditorConfigs configs = GTAUIFactory.getEditorConfig(tasksContainer, taskDef.getFilename(), courseRepoKey); - vfsLeafEditorCtrl = new VFSLeafEditorFullscreenController(ureq, getWindowControl(), (VFSLeaf)vfsItem, secCallback, configs); - listenTo(vfsLeafEditorCtrl); + DocEditorConfigs configs = GTAUIFactory.getEditorConfig(tasksContainer, taskDef.getFilename(), courseRepoKey); + docEditorCtrl = new DocEditorFullscreenController(ureq, getWindowControl(), (VFSLeaf)vfsItem, secCallback, configs); + listenTo(docEditorCtrl); } } diff --git a/src/main/java/org/olat/course/nodes/gta/ui/GTASampleSolutionsEditController.java b/src/main/java/org/olat/course/nodes/gta/ui/GTASampleSolutionsEditController.java index e4db45044d3..6131d7d75d5 100644 --- a/src/main/java/org/olat/course/nodes/gta/ui/GTASampleSolutionsEditController.java +++ b/src/main/java/org/olat/course/nodes/gta/ui/GTASampleSolutionsEditController.java @@ -19,19 +19,19 @@ */ package org.olat.course.nodes.gta.ui; +import static org.olat.course.nodes.gta.ui.GTAUIFactory.getOpenMode; import static org.olat.course.nodes.gta.ui.GTAUIFactory.htmlOffice; import java.io.File; import java.util.ArrayList; import java.util.List; -import org.olat.core.commons.services.vfs.VFSLeafEditor.Mode; -import org.olat.core.commons.services.vfs.VFSLeafEditorConfigs; -import org.olat.core.commons.services.vfs.VFSLeafEditorSecurityCallback; -import org.olat.core.commons.services.vfs.VFSLeafEditorSecurityCallbackBuilder; +import org.olat.core.commons.services.doceditor.DocEditor.Mode; +import org.olat.core.commons.services.doceditor.DocEditorConfigs; +import org.olat.core.commons.services.doceditor.DocEditorSecurityCallback; +import org.olat.core.commons.services.doceditor.DocEditorSecurityCallbackBuilder; +import org.olat.core.commons.services.doceditor.ui.DocEditorFullscreenController; import org.olat.core.commons.services.vfs.VFSMetadata; -import org.olat.core.commons.services.vfs.VFSRepositoryService; -import org.olat.core.commons.services.vfs.ui.editor.VFSLeafEditorFullscreenController; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.form.flexible.FormItem; import org.olat.core.gui.components.form.flexible.FormItemContainer; @@ -79,7 +79,7 @@ public class GTASampleSolutionsEditController extends FormBasicController { private EditSolutionController addSolutionCtrl; private EditSolutionController editSolutionCtrl; private NewSolutionController newSolutionCtrl; - private VFSLeafEditorFullscreenController vfsLeafEditorCtrl; + private DocEditorFullscreenController docEditorCtrl; private final File solutionDir; private final boolean readOnly; @@ -94,8 +94,6 @@ public class GTASampleSolutionsEditController extends FormBasicController { private UserManager userManager; @Autowired private GTAManager gtaManager; - @Autowired - private VFSRepositoryService vfsService; public GTASampleSolutionsEditController(UserRequest ureq, WindowControl wControl, GTACourseNode gtaNode, CourseEnvironment courseEnv, boolean readOnly) { @@ -160,7 +158,7 @@ public class GTASampleSolutionsEditController extends FormBasicController { VFSLeaf vfsLeaf = (VFSLeaf)item; downloadLink = uifactory .addDownloadLink("file_" + (++linkCounter), filename, null, vfsLeaf, solutionTable); - openMode = getOpenMode(vfsLeaf); + openMode = getOpenMode(vfsLeaf, getIdentity(), readOnly); } rows.add(new SolutionRow(solution, author, downloadLink, openMode)); @@ -169,15 +167,6 @@ public class GTASampleSolutionsEditController extends FormBasicController { solutionTable.reset(); } - private Mode getOpenMode(VFSLeaf vfsLeaf) { - if (!readOnly && vfsService.hasEditor(vfsLeaf, Mode.EDIT, getIdentity())) { - return Mode.EDIT; - } else if (vfsService.hasEditor(vfsLeaf, Mode.VIEW, getIdentity())) { - return Mode.VIEW; - } - return null; - } - @Override protected void doDispose() { // @@ -215,7 +204,7 @@ public class GTASampleSolutionsEditController extends FormBasicController { updateModel(); gtaManager.markNews(courseEnv, gtaNode); } - } else if (source == vfsLeafEditorCtrl) { + } else if (source == docEditorCtrl) { if(event == Event.DONE_EVENT) { gtaManager.markNews(courseEnv, gtaNode); updateModel(); @@ -228,11 +217,11 @@ public class GTASampleSolutionsEditController extends FormBasicController { } private void cleanUp() { - removeAsListenerAndDispose(vfsLeafEditorCtrl); + removeAsListenerAndDispose(docEditorCtrl); removeAsListenerAndDispose(editSolutionCtrl); removeAsListenerAndDispose(addSolutionCtrl); removeAsListenerAndDispose(cmc); - vfsLeafEditorCtrl = null; + docEditorCtrl = null; editSolutionCtrl = null; addSolutionCtrl = null; cmc = null; @@ -270,12 +259,12 @@ public class GTASampleSolutionsEditController extends FormBasicController { if(vfsItem == null || !(vfsItem instanceof VFSLeaf)) { showError("error.missing.file"); } else { - VFSLeafEditorSecurityCallback secCallback = VFSLeafEditorSecurityCallbackBuilder.builder() + DocEditorSecurityCallback secCallback = DocEditorSecurityCallbackBuilder.builder() .withMode(mode) .build(); - VFSLeafEditorConfigs configs = GTAUIFactory.getEditorConfig(solutionContainer, solution.getFilename(), courseRepoKey); - vfsLeafEditorCtrl = new VFSLeafEditorFullscreenController(ureq, getWindowControl(), (VFSLeaf)vfsItem, secCallback, configs); - listenTo(vfsLeafEditorCtrl); + DocEditorConfigs configs = GTAUIFactory.getEditorConfig(solutionContainer, solution.getFilename(), courseRepoKey); + docEditorCtrl = new DocEditorFullscreenController(ureq, getWindowControl(), (VFSLeaf)vfsItem, secCallback, configs); + listenTo(docEditorCtrl); } } diff --git a/src/main/java/org/olat/course/nodes/gta/ui/GTAUIFactory.java b/src/main/java/org/olat/course/nodes/gta/ui/GTAUIFactory.java index dc05bc66ebf..ba3c345b977 100644 --- a/src/main/java/org/olat/course/nodes/gta/ui/GTAUIFactory.java +++ b/src/main/java/org/olat/course/nodes/gta/ui/GTAUIFactory.java @@ -19,17 +19,20 @@ */ package org.olat.course.nodes.gta.ui; -import static org.olat.core.commons.services.vfs.VFSLeafEditor.Mode.EDIT; +import static org.olat.core.commons.services.doceditor.DocEditor.Mode.EDIT; import java.util.Locale; import org.olat.core.CoreSpringFactory; import org.olat.core.commons.editor.htmleditor.HTMLEditorConfig; -import org.olat.core.commons.services.filetemplate.FileTypes; -import org.olat.core.commons.services.filetemplate.FileTypes.Builder; -import org.olat.core.commons.services.vfs.VFSLeafEditorConfigs; -import org.olat.core.commons.services.vfs.VFSRepositoryService; +import org.olat.core.commons.services.doceditor.DocEditor.Mode; +import org.olat.core.commons.services.doceditor.DocTemplates; +import org.olat.core.commons.services.doceditor.DocEditorConfigs; +import org.olat.core.commons.services.doceditor.DocumentEditorService; +import org.olat.core.commons.services.doceditor.DocTemplates.Builder; +import org.olat.core.id.Identity; import org.olat.core.util.vfs.VFSContainer; +import org.olat.core.util.vfs.VFSLeaf; import org.olat.modules.edusharing.VFSEdusharingProvider; import org.olat.repository.ui.settings.LazyRepositoryEdusharingProvider; @@ -41,7 +44,17 @@ import org.olat.repository.ui.settings.LazyRepositoryEdusharingProvider; */ class GTAUIFactory { - static VFSLeafEditorConfigs getEditorConfig(VFSContainer vfsContainer, String filePath, Long courseRepoKey) { + static Mode getOpenMode(VFSLeaf vfsLeaf, Identity identity, boolean readOnly) { + DocumentEditorService docEditorService = CoreSpringFactory.getImpl(DocumentEditorService.class); + if (!readOnly && docEditorService.hasEditor(vfsLeaf, Mode.EDIT, identity)) { + return Mode.EDIT; + } else if (docEditorService.hasEditor(vfsLeaf, Mode.VIEW, identity)) { + return Mode.VIEW; + } + return null; + } + + static DocEditorConfigs getEditorConfig(VFSContainer vfsContainer, String filePath, Long courseRepoKey) { VFSEdusharingProvider edusharingProvider = courseRepoKey != null ? new LazyRepositoryEdusharingProvider(courseRepoKey) : null; @@ -51,24 +64,24 @@ class GTAUIFactory { .withDisableMedia(true) .withEdusharingProvider(edusharingProvider) .build(); - return VFSLeafEditorConfigs.builder() + return DocEditorConfigs.builder() .addConfig(htmlEditorConfig) .build(); } - static FileTypes htmlOffice(Locale locale) { - VFSRepositoryService vfsService = CoreSpringFactory.getImpl(VFSRepositoryService.class); - Builder builder = FileTypes.builder(locale); - if (vfsService.hasEditor("html", EDIT)) { + static DocTemplates htmlOffice(Locale locale) { + DocumentEditorService docEditorService = CoreSpringFactory.getImpl(DocumentEditorService.class); + Builder builder = DocTemplates.builder(locale); + if (docEditorService.hasEditor("html", EDIT)) { builder.addHtml(); } - if (vfsService.hasEditor("docx", EDIT)) { + if (docEditorService.hasEditor("docx", EDIT)) { builder.addDocx(); } - if (vfsService.hasEditor("xlsx", EDIT)) { + if (docEditorService.hasEditor("xlsx", EDIT)) { builder.addXlsx(); } - if (vfsService.hasEditor("pptx", EDIT)) { + if (docEditorService.hasEditor("pptx", EDIT)) { builder.addPptx(); } return builder.build(); diff --git a/src/main/java/org/olat/course/nodes/gta/ui/NewDocumentController.java b/src/main/java/org/olat/course/nodes/gta/ui/NewDocumentController.java index e7d287d8d37..0ebaeaff964 100644 --- a/src/main/java/org/olat/course/nodes/gta/ui/NewDocumentController.java +++ b/src/main/java/org/olat/course/nodes/gta/ui/NewDocumentController.java @@ -21,8 +21,8 @@ package org.olat.course.nodes.gta.ui; import java.util.List; -import org.olat.core.commons.services.filetemplate.FileType; -import org.olat.core.commons.services.filetemplate.FileTypes; +import org.olat.core.commons.services.doceditor.DocTemplate; +import org.olat.core.commons.services.doceditor.DocTemplates; import org.olat.core.commons.services.vfs.VFSMetadata; import org.olat.core.commons.services.vfs.VFSRepositoryService; import org.olat.core.gui.UserRequest; @@ -52,18 +52,18 @@ import org.springframework.beans.factory.annotation.Autowired; public class NewDocumentController extends FormBasicController { private TextElement filenameEl; - private SingleSelection fileTypeEl; + private SingleSelection docTypeEl; private final VFSContainer documentContainer; - private final List<FileType> fileTypes; + private final List<DocTemplate> templates; @Autowired private VFSRepositoryService vfsService; public NewDocumentController(UserRequest ureq, WindowControl wControl, VFSContainer documentContainer, - FileTypes fileTypes) { + DocTemplates templates) { super(ureq, wControl); this.documentContainer = documentContainer; - this.fileTypes = fileTypes.getFileTypes(); + this.templates = templates.getTemplates(); initForm(ureq); } @@ -71,21 +71,21 @@ public class NewDocumentController extends FormBasicController { protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) { formLayout.setElementCssClass("o_sel_course_gta_new_doc_form"); - String[] fileTypeKeys = new String[fileTypes.size()]; - String[] fileTypeValues = new String[fileTypes.size()]; - String[] fileTypeSuffix = new String[fileTypes.size()]; - for (int i = 0; i < fileTypes.size(); i++) { - FileType fileType = fileTypes.get(i); - String name = fileType.getName() + " (." + fileType.getSuffix() + ")"; + String[] fileTypeKeys = new String[templates.size()]; + String[] fileTypeValues = new String[templates.size()]; + String[] fileTypeSuffix = new String[templates.size()]; + for (int i = 0; i < templates.size(); i++) { + DocTemplate docTemplate = templates.get(i); + String name = docTemplate.getName() + " (." + docTemplate.getSuffix() + ")"; fileTypeKeys[i] = String.valueOf(i); fileTypeValues[i] = name; - fileTypeSuffix[i] = fileType.getSuffix(); + fileTypeSuffix[i] = docTemplate.getSuffix(); } - fileTypeEl = uifactory.addDropdownSingleselect("file.type", formLayout, fileTypeKeys, fileTypeValues, fileTypeSuffix); - fileTypeEl.setElementCssClass("o_sel_course_gta_doc_filetype"); - fileTypeEl.setMandatory(true); - if (fileTypes.size() == 1) { - fileTypeEl.setVisible(false); + docTypeEl = uifactory.addDropdownSingleselect("file.type", formLayout, fileTypeKeys, fileTypeValues, fileTypeSuffix); + docTypeEl.setElementCssClass("o_sel_course_gta_doc_filetype"); + docTypeEl.setMandatory(true); + if (templates.size() == 1) { + docTypeEl.setVisible(false); } filenameEl = uifactory.addTextElement("fileName", "file.name", -1, "", formLayout); @@ -107,16 +107,16 @@ public class NewDocumentController extends FormBasicController { public String getFilename() { String fileName = filenameEl.getValue().toLowerCase(); - FileType fileType = getSelectedFileType(); - String suffix = fileType != null? fileType.getSuffix(): ""; + DocTemplate docTemplate = getSelectedTemplate(); + String suffix = docTemplate != null? docTemplate.getSuffix(): ""; return fileName.endsWith("." + suffix) ? fileName : fileName + "." + suffix; } - private FileType getSelectedFileType() { - int index = fileTypeEl.getSelected(); - return index >= 0? fileTypes.get(index): fileTypes.get(0); + private DocTemplate getSelectedTemplate() { + int index = docTypeEl.getSelected(); + return index >= 0? templates.get(index): templates.get(0); } @Override @@ -153,9 +153,9 @@ public class NewDocumentController extends FormBasicController { documentName = VFSManager.rename(documentContainer, documentName); vfsLeaf = documentContainer.createChildLeaf(documentName); } - FileType fileType = getSelectedFileType(); - if (fileType != null) { - VFSManager.copyContent(fileType.getContentProvider().getContent(), vfsLeaf); + DocTemplate docTemplate = getSelectedTemplate(); + if (docTemplate != null) { + VFSManager.copyContent(docTemplate.getContentProvider().getContent(), vfsLeaf); } if(vfsLeaf.canMeta() == VFSConstants.YES) { VFSMetadata metaInfo = vfsLeaf.getMetaInfo(); diff --git a/src/main/java/org/olat/course/nodes/gta/ui/NewSolutionController.java b/src/main/java/org/olat/course/nodes/gta/ui/NewSolutionController.java index b846564d53f..ae3761ae148 100644 --- a/src/main/java/org/olat/course/nodes/gta/ui/NewSolutionController.java +++ b/src/main/java/org/olat/course/nodes/gta/ui/NewSolutionController.java @@ -21,8 +21,8 @@ package org.olat.course.nodes.gta.ui; import java.util.List; -import org.olat.core.commons.services.filetemplate.FileType; -import org.olat.core.commons.services.filetemplate.FileTypes; +import org.olat.core.commons.services.doceditor.DocTemplate; +import org.olat.core.commons.services.doceditor.DocTemplates; import org.olat.core.commons.services.vfs.VFSMetadata; import org.olat.core.commons.services.vfs.VFSRepositoryService; import org.olat.core.gui.UserRequest; @@ -53,17 +53,17 @@ import org.springframework.beans.factory.annotation.Autowired; public class NewSolutionController extends FormBasicController { private TextElement filenameEl, titleEl; - private SingleSelection fileTypeEl; + private SingleSelection docTypeEl; private final VFSContainer documentContainer; - private final List<FileType> fileTypes; + private final List<DocTemplate> templates; @Autowired private VFSRepositoryService vfsService; - public NewSolutionController(UserRequest ureq, WindowControl wControl, VFSContainer documentContainer, FileTypes fileTypes) { + public NewSolutionController(UserRequest ureq, WindowControl wControl, VFSContainer documentContainer, DocTemplates docTemplates) { super(ureq, wControl); this.documentContainer = documentContainer; - this.fileTypes = fileTypes.getFileTypes(); + this.templates = docTemplates.getTemplates(); initForm(ureq); } @@ -75,21 +75,21 @@ public class NewSolutionController extends FormBasicController { titleEl.setElementCssClass("o_sel_course_gta_upload_task_title"); titleEl.setMandatory(true); - String[] fileTypeKeys = new String[fileTypes.size()]; - String[] fileTypeValues = new String[fileTypes.size()]; - String[] fileTypeSuffix = new String[fileTypes.size()]; - for (int i = 0; i < fileTypes.size(); i++) { - FileType fileType = fileTypes.get(i); - String name = fileType.getName() + " (." + fileType.getSuffix() + ")"; + String[] fileTypeKeys = new String[templates.size()]; + String[] fileTypeValues = new String[templates.size()]; + String[] fileTypeSuffix = new String[templates.size()]; + for (int i = 0; i < templates.size(); i++) { + DocTemplate docTemplate = templates.get(i); + String name = docTemplate.getName() + " (." + docTemplate.getSuffix() + ")"; fileTypeKeys[i] = String.valueOf(i); fileTypeValues[i] = name; - fileTypeSuffix[i] = fileType.getSuffix(); + fileTypeSuffix[i] = docTemplate.getSuffix(); } - fileTypeEl = uifactory.addDropdownSingleselect("file.type", formLayout, fileTypeKeys, fileTypeValues, fileTypeSuffix); - fileTypeEl.setElementCssClass("o_sel_course_gta_doc_filetype"); - fileTypeEl.setMandatory(true); - if (fileTypes.size() == 1) { - fileTypeEl.setVisible(false); + docTypeEl = uifactory.addDropdownSingleselect("file.type", formLayout, fileTypeKeys, fileTypeValues, fileTypeSuffix); + docTypeEl.setElementCssClass("o_sel_course_gta_doc_filetype"); + docTypeEl.setMandatory(true); + if (templates.size() == 1) { + docTypeEl.setVisible(false); } filenameEl = uifactory.addTextElement("fileName", "file.name", -1, "", formLayout); @@ -106,8 +106,8 @@ public class NewSolutionController extends FormBasicController { String jsPage = velocity_root + "/new_task_js.html"; FormLayoutContainer jsCont = FormLayoutContainer.createCustomFormLayout("js", getTranslator(), jsPage); jsCont.contextPut("titleId", titleEl.getFormDispatchId()); - jsCont.contextPut("filetypeId", fileTypeEl.getFormDispatchId()); - jsCont.contextPut("filetypeDefaultSuffix", fileTypes.get(0).getSuffix()); + jsCont.contextPut("filetypeId", docTypeEl.getFormDispatchId()); + jsCont.contextPut("filetypeDefaultSuffix", templates.get(0).getSuffix()); jsCont.contextPut("filenameId", filenameEl.getFormDispatchId()); formLayout.add(jsCont); } @@ -119,16 +119,16 @@ public class NewSolutionController extends FormBasicController { private String getFilename() { String fileName = filenameEl.getValue().toLowerCase(); - FileType fileType = getSelectedFileType(); - String suffix = fileType != null? fileType.getSuffix(): ""; + DocTemplate docTemplate = getSelectedTemplate(); + String suffix = docTemplate != null? docTemplate.getSuffix(): ""; return fileName.endsWith("." + suffix) ? fileName : fileName + "." + suffix; } - private FileType getSelectedFileType() { - int index = fileTypeEl.getSelected(); - return index >= 0? fileTypes.get(index): fileTypes.get(0); + private DocTemplate getSelectedTemplate() { + int index = docTypeEl.getSelected(); + return index >= 0? templates.get(index): templates.get(0); } public Solution getSolution() { @@ -178,9 +178,9 @@ public class NewSolutionController extends FormBasicController { documentName = VFSManager.rename(documentContainer, documentName); vfsLeaf = documentContainer.createChildLeaf(documentName); } - FileType fileType = getSelectedFileType(); - if (fileType != null) { - VFSManager.copyContent(fileType.getContentProvider().getContent(), vfsLeaf); + DocTemplate docTemplate = getSelectedTemplate(); + if (docTemplate != null) { + VFSManager.copyContent(docTemplate.getContentProvider().getContent(), vfsLeaf); } if(vfsLeaf.canMeta() == VFSConstants.YES) { VFSMetadata metaInfo = vfsLeaf.getMetaInfo(); diff --git a/src/main/java/org/olat/course/nodes/gta/ui/NewTaskController.java b/src/main/java/org/olat/course/nodes/gta/ui/NewTaskController.java index e92693db558..cde3c166abd 100644 --- a/src/main/java/org/olat/course/nodes/gta/ui/NewTaskController.java +++ b/src/main/java/org/olat/course/nodes/gta/ui/NewTaskController.java @@ -21,8 +21,8 @@ package org.olat.course.nodes.gta.ui; import java.util.List; -import org.olat.core.commons.services.filetemplate.FileType; -import org.olat.core.commons.services.filetemplate.FileTypes; +import org.olat.core.commons.services.doceditor.DocTemplate; +import org.olat.core.commons.services.doceditor.DocTemplates; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.form.flexible.FormItemContainer; import org.olat.core.gui.components.form.flexible.elements.SingleSelection; @@ -49,15 +49,15 @@ import org.olat.course.nodes.gta.model.TaskDefinition; public class NewTaskController extends FormBasicController { private TextElement filenameEl, titleEl, descriptionEl; - private SingleSelection fileTypeEl; + private SingleSelection docTypeEl; private final VFSContainer documentContainer; - private final List<FileType> fileTypes; + private final List<DocTemplate> templates; public NewTaskController(UserRequest ureq, WindowControl wControl, VFSContainer documentContainer, - FileTypes fileTypes) { + DocTemplates docTemplates) { super(ureq, wControl); this.documentContainer = documentContainer; - this.fileTypes = fileTypes.getFileTypes(); + this.templates = docTemplates.getTemplates(); initForm(ureq); } @@ -71,21 +71,21 @@ public class NewTaskController extends FormBasicController { descriptionEl = uifactory.addTextAreaElement("descr", "task.description", 2048, 10, -1, true, false, "", formLayout); - String[] fileTypeKeys = new String[fileTypes.size()]; - String[] fileTypeValues = new String[fileTypes.size()]; - String[] fileTypeSuffix = new String[fileTypes.size()]; - for (int i = 0; i < fileTypes.size(); i++) { - FileType fileType = fileTypes.get(i); - String name = fileType.getName() + " (." + fileType.getSuffix() + ")"; + String[] fileTypeKeys = new String[templates.size()]; + String[] fileTypeValues = new String[templates.size()]; + String[] fileTypeSuffix = new String[templates.size()]; + for (int i = 0; i < templates.size(); i++) { + DocTemplate docTemplate = templates.get(i); + String name = docTemplate.getName() + " (." + docTemplate.getSuffix() + ")"; fileTypeKeys[i] = String.valueOf(i); fileTypeValues[i] = name; - fileTypeSuffix[i] = fileType.getSuffix(); + fileTypeSuffix[i] = docTemplate.getSuffix(); } - fileTypeEl = uifactory.addDropdownSingleselect("file.type", formLayout, fileTypeKeys, fileTypeValues, fileTypeSuffix); - fileTypeEl.setElementCssClass("o_sel_course_gta_doc_filetype"); - fileTypeEl.setMandatory(true); - if (fileTypes.size() == 1) { - fileTypeEl.setVisible(false); + docTypeEl = uifactory.addDropdownSingleselect("file.type", formLayout, fileTypeKeys, fileTypeValues, fileTypeSuffix); + docTypeEl.setElementCssClass("o_sel_course_gta_doc_filetype"); + docTypeEl.setMandatory(true); + if (templates.size() == 1) { + docTypeEl.setVisible(false); } filenameEl = uifactory.addTextElement("fileName", "file.name", -1, "", formLayout); @@ -102,8 +102,8 @@ public class NewTaskController extends FormBasicController { String jsPage = velocity_root + "/new_task_js.html"; FormLayoutContainer jsCont = FormLayoutContainer.createCustomFormLayout("js", getTranslator(), jsPage); jsCont.contextPut("titleId", titleEl.getFormDispatchId()); - jsCont.contextPut("filetypeId", fileTypeEl.getFormDispatchId()); - jsCont.contextPut("filetypeDefaultSuffix", fileTypes.get(0).getSuffix()); + jsCont.contextPut("filetypeId", docTypeEl.getFormDispatchId()); + jsCont.contextPut("filetypeDefaultSuffix", templates.get(0).getSuffix()); jsCont.contextPut("filenameId", filenameEl.getFormDispatchId()); formLayout.add(jsCont); } @@ -115,16 +115,16 @@ public class NewTaskController extends FormBasicController { private String getFilename() { String fileName = filenameEl.getValue().toLowerCase(); - FileType fileType = getSelectedFileType(); - String suffix = fileType != null? fileType.getSuffix(): ""; + DocTemplate docTemplate = getSelectedTemplate(); + String suffix = docTemplate != null? docTemplate.getSuffix(): ""; return fileName.endsWith("." + suffix) ? fileName : fileName + "." + suffix; } - private FileType getSelectedFileType() { - int index = fileTypeEl.getSelected(); - return index >= 0? fileTypes.get(index): fileTypes.get(0); + private DocTemplate getSelectedTemplate() { + int index = docTypeEl.getSelected(); + return index >= 0? templates.get(index): templates.get(0); } public TaskDefinition getTaskDefinition() { @@ -175,9 +175,9 @@ public class NewTaskController extends FormBasicController { documentName = VFSManager.rename(documentContainer, documentName); vfsLeaf = documentContainer.createChildLeaf(documentName); } - FileType fileType = getSelectedFileType(); - if (fileType != null) { - VFSManager.copyContent(fileType.getContentProvider().getContent(), vfsLeaf); + DocTemplate docTemplate = getSelectedTemplate(); + if (docTemplate != null) { + VFSManager.copyContent(docTemplate.getContentProvider().getContent(), vfsLeaf); } fireEvent(ureq, Event.DONE_EVENT); } diff --git a/src/main/java/org/olat/course/nodes/gta/ui/SolutionRow.java b/src/main/java/org/olat/course/nodes/gta/ui/SolutionRow.java index 068aacdb9cb..abceb9e441f 100644 --- a/src/main/java/org/olat/course/nodes/gta/ui/SolutionRow.java +++ b/src/main/java/org/olat/course/nodes/gta/ui/SolutionRow.java @@ -19,7 +19,7 @@ */ package org.olat.course.nodes.gta.ui; -import org.olat.core.commons.services.vfs.VFSLeafEditor.Mode; +import org.olat.core.commons.services.doceditor.DocEditor.Mode; import org.olat.core.gui.components.form.flexible.elements.DownloadLink; import org.olat.course.nodes.gta.model.Solution; diff --git a/src/main/java/org/olat/course/nodes/gta/ui/SubmitDocumentsController.java b/src/main/java/org/olat/course/nodes/gta/ui/SubmitDocumentsController.java index 116aec060cc..be6fa0afc10 100644 --- a/src/main/java/org/olat/course/nodes/gta/ui/SubmitDocumentsController.java +++ b/src/main/java/org/olat/course/nodes/gta/ui/SubmitDocumentsController.java @@ -19,7 +19,8 @@ */ package org.olat.course.nodes.gta.ui; -import static org.olat.core.commons.services.vfs.VFSLeafEditor.Mode.EDIT; +import static org.olat.core.commons.services.doceditor.DocEditor.Mode.EDIT; +import static org.olat.course.nodes.gta.ui.GTAUIFactory.getOpenMode; import static org.olat.course.nodes.gta.ui.GTAUIFactory.htmlOffice; import java.io.File; @@ -33,13 +34,13 @@ import java.util.Date; import java.util.List; import org.olat.core.commons.modules.singlepage.SinglePageController; -import org.olat.core.commons.services.vfs.VFSLeafEditor.Mode; -import org.olat.core.commons.services.vfs.VFSLeafEditorConfigs; -import org.olat.core.commons.services.vfs.VFSLeafEditorSecurityCallback; -import org.olat.core.commons.services.vfs.VFSLeafEditorSecurityCallbackBuilder; +import org.olat.core.commons.services.doceditor.DocEditor.Mode; +import org.olat.core.commons.services.doceditor.DocEditorConfigs; +import org.olat.core.commons.services.doceditor.DocEditorSecurityCallback; +import org.olat.core.commons.services.doceditor.DocEditorSecurityCallbackBuilder; +import org.olat.core.commons.services.doceditor.ui.DocEditorFullscreenController; import org.olat.core.commons.services.vfs.VFSMetadata; import org.olat.core.commons.services.vfs.VFSRepositoryService; -import org.olat.core.commons.services.vfs.ui.editor.VFSLeafEditorFullscreenController; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.form.flexible.FormItem; import org.olat.core.gui.components.form.flexible.FormItemContainer; @@ -92,7 +93,7 @@ class SubmitDocumentsController extends FormBasicController { private DocumentUploadController uploadCtrl, replaceCtrl; private DialogBoxController confirmDeleteCtrl; private SinglePageController viewDocCtrl; - private VFSLeafEditorFullscreenController vfsLeafEditorCtrl; + private DocEditorFullscreenController docEditorCtrl; private final int maxDocs; private final String docI18nKey; @@ -112,7 +113,7 @@ class SubmitDocumentsController extends FormBasicController { @Autowired private UserManager userManager; @Autowired - private VFSRepositoryService vfsService; + private VFSRepositoryService vfsRepositoryService; public SubmitDocumentsController(UserRequest ureq, WindowControl wControl, Task assignedTask, File documentsDir, VFSContainer documentsContainer, int maxDocs, GTACourseNode cNode, @@ -210,7 +211,7 @@ class SubmitDocumentsController extends FormBasicController { if(item instanceof VFSLeaf) { VFSLeaf vfsLeaf = (VFSLeaf)item; - openMode = getOpenMode(vfsLeaf); + openMode = getOpenMode(vfsLeaf, getIdentity(), readOnly); } docList.add(new SubmittedSolution(document, uploadedBy, download, openMode)); } @@ -239,15 +240,6 @@ class SubmitDocumentsController extends FormBasicController { flc.contextPut("hasDocuments", Boolean.valueOf(hasUploadDocuments())); } - private Mode getOpenMode(VFSLeaf vfsLeaf) { - if (!readOnly && vfsService.hasEditor(vfsLeaf, Mode.EDIT, getIdentity())) { - return Mode.EDIT; - } else if (vfsService.hasEditor(vfsLeaf, Mode.VIEW, getIdentity())) { - return Mode.VIEW; - } - return null; - } - @Override protected void doDispose() { // @@ -298,9 +290,9 @@ class SubmitDocumentsController extends FormBasicController { updateModel(); } checkDeadline(ureq); - } else if (source == vfsLeafEditorCtrl) { + } else if (source == docEditorCtrl) { if(event == Event.DONE_EVENT) { - fireEvent(ureq, new SubmitEvent(SubmitEvent.UPDATE, vfsLeafEditorCtrl.getVfsLeaf().getName())); + fireEvent(ureq, new SubmitEvent(SubmitEvent.UPDATE, docEditorCtrl.getVfsLeaf().getName())); gtaManager.markNews(courseEnv, gtaNode); } updateModel(); @@ -314,13 +306,13 @@ class SubmitDocumentsController extends FormBasicController { private void cleanUp() { removeAsListenerAndDispose(confirmDeleteCtrl); - removeAsListenerAndDispose(vfsLeafEditorCtrl); + removeAsListenerAndDispose(docEditorCtrl); removeAsListenerAndDispose(viewDocCtrl); removeAsListenerAndDispose(uploadCtrl); removeAsListenerAndDispose(newDocCtrl); removeAsListenerAndDispose(cmc); confirmDeleteCtrl = null; - vfsLeafEditorCtrl = null; + docEditorCtrl = null; viewDocCtrl = null; uploadCtrl = null; newDocCtrl = null; @@ -410,12 +402,12 @@ class SubmitDocumentsController extends FormBasicController { if(vfsItem == null || !(vfsItem instanceof VFSLeaf)) { showError("error.missing.file"); } else { - VFSLeafEditorSecurityCallback secCallback = VFSLeafEditorSecurityCallbackBuilder.builder() + DocEditorSecurityCallback secCallback = DocEditorSecurityCallbackBuilder.builder() .withMode(mode) .build(); - VFSLeafEditorConfigs configs = GTAUIFactory.getEditorConfig(documentsContainer, filename, null); - vfsLeafEditorCtrl = new VFSLeafEditorFullscreenController(ureq, getWindowControl(), (VFSLeaf)vfsItem, secCallback, configs); - listenTo(vfsLeafEditorCtrl); + DocEditorConfigs configs = GTAUIFactory.getEditorConfig(documentsContainer, filename, null); + docEditorCtrl = new DocEditorFullscreenController(ureq, getWindowControl(), (VFSLeaf)vfsItem, secCallback, configs); + listenTo(docEditorCtrl); } } @@ -446,7 +438,7 @@ class SubmitDocumentsController extends FormBasicController { if(downloadedFile != null && downloadedFile.canMeta() == VFSConstants.YES) { VFSMetadata metadata = downloadedFile.getMetaInfo(); metadata.setAuthor(ureq.getIdentity()); - vfsService.updateMetadata(metadata); + vfsRepositoryService.updateMetadata(metadata); } } catch (IOException e) { logError("", e); diff --git a/src/main/java/org/olat/course/nodes/gta/ui/TaskDefinitionRow.java b/src/main/java/org/olat/course/nodes/gta/ui/TaskDefinitionRow.java index 77322e729a2..98bf1a4c7cf 100644 --- a/src/main/java/org/olat/course/nodes/gta/ui/TaskDefinitionRow.java +++ b/src/main/java/org/olat/course/nodes/gta/ui/TaskDefinitionRow.java @@ -19,7 +19,7 @@ */ package org.olat.course.nodes.gta.ui; -import org.olat.core.commons.services.vfs.VFSLeafEditor.Mode; +import org.olat.core.commons.services.doceditor.DocEditor.Mode; import org.olat.core.gui.components.form.flexible.elements.DownloadLink; import org.olat.course.nodes.gta.model.TaskDefinition; diff --git a/src/main/java/org/olat/course/nodes/gta/ui/component/ModeCellRenderer.java b/src/main/java/org/olat/course/nodes/gta/ui/component/ModeCellRenderer.java index cef42b462e4..d61dfa2e85f 100644 --- a/src/main/java/org/olat/course/nodes/gta/ui/component/ModeCellRenderer.java +++ b/src/main/java/org/olat/course/nodes/gta/ui/component/ModeCellRenderer.java @@ -19,7 +19,7 @@ */ package org.olat.course.nodes.gta.ui.component; -import org.olat.core.commons.services.vfs.VFSLeafEditor.Mode; +import org.olat.core.commons.services.doceditor.DocEditor.Mode; import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableComponent; import org.olat.core.gui.components.form.flexible.impl.elements.table.StaticFlexiCellRenderer; import org.olat.core.gui.render.Renderer; diff --git a/src/main/java/org/olat/modules/_spring/modulesContext.xml b/src/main/java/org/olat/modules/_spring/modulesContext.xml index e1683dd5770..52bf9496038 100644 --- a/src/main/java/org/olat/modules/_spring/modulesContext.xml +++ b/src/main/java/org/olat/modules/_spring/modulesContext.xml @@ -102,26 +102,6 @@ </property> </bean> - <!-- Collabora admin. panel --> - <bean class="org.olat.core.extensions.action.GenericActionExtension" init-method="initExtensionPoints"> - <property name="order" value="8256" /> - <property name="actionController"> - <bean class="org.olat.core.gui.control.creator.AutoCreator" scope="prototype"> - <property name="className" value="org.olat.modules.wopi.collabora.ui.CollaboraAdminController"/> - </bean> - </property> - <property name="navigationKey" value="collabora" /> - <property name="i18nActionKey" value="admin.menu.title"/> - <property name="i18nDescriptionKey" value="admin.menu.title.alt"/> - <property name="translationPackage" value="org.olat.modules.wopi.collabora.ui"/> - <property name="parentTreeNodeIdentifier" value="externalToolsParent" /> - <property name="extensionPoints"> - <list> - <value>org.olat.admin.SystemAdminMainController</value> - </list> - </property> - </bean> - <!-- Goto admin. panel --> <bean class="org.olat.core.extensions.action.GenericActionExtension" init-method="initExtensionPoints"> <property name="order" value="8218" /> diff --git a/src/main/java/org/olat/modules/portfolio/handler/CreateFileHandler.java b/src/main/java/org/olat/modules/portfolio/handler/CreateFileHandler.java index b4e151a4138..4053153fe37 100644 --- a/src/main/java/org/olat/modules/portfolio/handler/CreateFileHandler.java +++ b/src/main/java/org/olat/modules/portfolio/handler/CreateFileHandler.java @@ -19,14 +19,14 @@ */ package org.olat.modules.portfolio.handler; -import static org.olat.core.commons.services.vfs.VFSLeafEditor.Mode.EDIT; +import static org.olat.core.commons.services.doceditor.DocEditor.Mode.EDIT; import java.util.Locale; import org.olat.core.CoreSpringFactory; -import org.olat.core.commons.services.filetemplate.FileTypes; -import org.olat.core.commons.services.filetemplate.FileTypes.Builder; -import org.olat.core.commons.services.vfs.VFSRepositoryService; +import org.olat.core.commons.services.doceditor.DocTemplates; +import org.olat.core.commons.services.doceditor.DocumentEditorService; +import org.olat.core.commons.services.doceditor.DocTemplates.Builder; import org.olat.core.gui.UserRequest; import org.olat.core.gui.control.WindowControl; import org.olat.modules.ceditor.PageElementAddController; @@ -40,16 +40,16 @@ import org.olat.modules.portfolio.ui.media.CreateFileMediaController; */ public class CreateFileHandler extends FileHandler { - public static FileTypes getEditableFileTypes(Locale locale) { - VFSRepositoryService vfsService = CoreSpringFactory.getImpl(VFSRepositoryService.class); - Builder builder = FileTypes.builder(locale); - if (vfsService.hasEditor("docx", EDIT)) { + public static DocTemplates getEditableTemplates(Locale locale) { + DocumentEditorService docEditorService = CoreSpringFactory.getImpl(DocumentEditorService.class); + Builder builder = DocTemplates.builder(locale); + if (docEditorService.hasEditor("docx", EDIT)) { builder.addDocx(); } - if (vfsService.hasEditor("xlsx", EDIT)) { + if (docEditorService.hasEditor("xlsx", EDIT)) { builder.addXlsx(); } - if (vfsService.hasEditor("pptx", EDIT)) { + if (docEditorService.hasEditor("pptx", EDIT)) { builder.addPptx(); } return builder.build(); @@ -62,7 +62,7 @@ public class CreateFileHandler extends FileHandler { @Override public PageElementAddController getAddPageElementController(UserRequest ureq, WindowControl wControl) { - return new CreateFileMediaController(ureq, wControl, getEditableFileTypes(ureq.getLocale())); + return new CreateFileMediaController(ureq, wControl, getEditableTemplates(ureq.getLocale())); } } diff --git a/src/main/java/org/olat/modules/portfolio/ui/MediaCenterController.java b/src/main/java/org/olat/modules/portfolio/ui/MediaCenterController.java index fec26f774bb..fbdf57e61ac 100644 --- a/src/main/java/org/olat/modules/portfolio/ui/MediaCenterController.java +++ b/src/main/java/org/olat/modules/portfolio/ui/MediaCenterController.java @@ -29,7 +29,7 @@ import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; import org.olat.core.commons.persistence.SortKey; -import org.olat.core.commons.services.filetemplate.FileTypes; +import org.olat.core.commons.services.doceditor.DocTemplates; import org.olat.core.commons.services.image.Size; import org.olat.core.dispatcher.mapper.Mapper; import org.olat.core.gui.UserRequest; @@ -117,7 +117,7 @@ public class MediaCenterController extends FormBasicController private int counter = 0; private final boolean select; - private final FileTypes editableFileTypes; + private final DocTemplates editableFileTypes; private List<FormLink> tagLinks; private final TooledStackedPanel stackPanel; @@ -144,7 +144,7 @@ public class MediaCenterController extends FormBasicController super(ureq, wControl, "medias"); this.stackPanel = null; this.select = true; - this.editableFileTypes = CreateFileHandler.getEditableFileTypes(getLocale()); + this.editableFileTypes = CreateFileHandler.getEditableTemplates(getLocale()); initForm(ureq); loadModel(); @@ -154,7 +154,7 @@ public class MediaCenterController extends FormBasicController super(ureq, wControl, "medias"); this.stackPanel = stackPanel; this.select = false; - this.editableFileTypes = CreateFileHandler.getEditableFileTypes(getLocale()); + this.editableFileTypes = CreateFileHandler.getEditableTemplates(getLocale()); initForm(ureq); loadModel(); diff --git a/src/main/java/org/olat/modules/portfolio/ui/PageRunController.java b/src/main/java/org/olat/modules/portfolio/ui/PageRunController.java index cb943ed8384..39325491296 100644 --- a/src/main/java/org/olat/modules/portfolio/ui/PageRunController.java +++ b/src/main/java/org/olat/modules/portfolio/ui/PageRunController.java @@ -27,10 +27,10 @@ import org.olat.core.commons.fullWebApp.popup.BaseFullWebappPopupLayoutFactory; import org.olat.core.commons.services.commentAndRating.CommentAndRatingDefaultSecurityCallback; import org.olat.core.commons.services.commentAndRating.CommentAndRatingSecurityCallback; import org.olat.core.commons.services.commentAndRating.ui.UserCommentsAndRatingsController; -import org.olat.core.commons.services.filetemplate.FileType; +import org.olat.core.commons.services.doceditor.DocEditor.Mode; +import org.olat.core.commons.services.doceditor.DocTemplate; +import org.olat.core.commons.services.doceditor.DocumentEditorService; import org.olat.core.commons.services.pdf.PdfModule; -import org.olat.core.commons.services.vfs.VFSLeafEditor.Mode; -import org.olat.core.commons.services.vfs.VFSRepositoryService; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.Component; import org.olat.core.gui.components.dropdown.Dropdown; @@ -158,7 +158,7 @@ public class PageRunController extends BasicController implements TooledControll @Autowired private PortfolioService portfolioService; @Autowired - private VFSRepositoryService vfsRepositoryService; + private DocumentEditorService vfsRepositoryService; public PageRunController(UserRequest ureq, WindowControl wControl, TooledStackedPanel stackPanel, BinderSecurityCallback secCallback, Page page, boolean openEditMode) { @@ -804,9 +804,9 @@ public class PageRunController extends BasicController implements TooledControll } private boolean isCreateFilePossible() { - List<FileType> editableFileTypes = CreateFileHandler.getEditableFileTypes(getLocale()).getFileTypes(); - for (FileType fileType: editableFileTypes) { - if (vfsRepositoryService.hasEditor(fileType.getSuffix(), Mode.EDIT)) { + List<DocTemplate> editableTemplates = CreateFileHandler.getEditableTemplates(getLocale()).getTemplates(); + for (DocTemplate docTemplate: editableTemplates) { + if (vfsRepositoryService.hasEditor(docTemplate.getSuffix(), Mode.EDIT)) { return true; } } diff --git a/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_de.properties index 6d05d98a23c..f47caa704c9 100644 --- a/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_de.properties @@ -118,10 +118,10 @@ create.empty.binder=Leere Mappe erstellen create.empty.binder.from.course=Mappe f\u00FCr Portfolioaufgabe aus Kurs erstellen create.empty.binder.from.template=Mappe basierend auf Vorlage erstellen create.file=Erstellen -create.file.name=$org.olat.core.commons.services.filetemplate.ui\:create.file.name -create.file.name.notvalid=$org.olat.core.commons.services.filetemplate.ui\:create.file.name.notvalid +create.file.name=$org.olat.core.commons.services.doceditor.ui\:create.doc.name +create.file.name.notvalid=$org.olat.core.commons.services.doceditor.ui\:create.file.doc.notvalid create.file.title=Dokument erstellen -create.file.type=$org.olat.core.commons.services.filetemplate.ui\:create.file.type +create.file.type=$org.olat.core.commons.services.doceditor.ui\:create.doc.type create.new.assignment=Neue Aufgabe create.new.assignment.descr=Neue Aufgabe erlaubt ... create.new.assignment.title=Neue Aufgabe erstellen diff --git a/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_en.properties index 27f73e5358d..505fbf5aefc 100644 --- a/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_en.properties @@ -118,10 +118,10 @@ create.empty.binder=New empty binder create.empty.binder.from.course=New binder from course portfolio task create.empty.binder.from.template=New binder from template create.file=Create -create.file.name=$org.olat.core.commons.services.filetemplate.ui\:create.file.name -create.file.name.notvalid=$org.olat.core.commons.services.filetemplate.ui\:create.file.name.notvalid +create.file.name=$org.olat.core.commons.services.doceditor.ui\:create.doc.name +create.file.name.notvalid=$org.olat.core.commons.services.doceditor.ui\:create.doc.name.notvalid create.file.title=Create document -create.file.type=$org.olat.core.commons.services.filetemplate.ui\:create.file.type +create.file.type=$org.olat.core.commons.services.doceditor.ui\:create.doc.type create.new.assignment=New assignment create.new.assignment.descr=Create a new assignment to assign something to someone create.new.assignment.title=Create a new assignment diff --git a/src/main/java/org/olat/modules/portfolio/ui/media/CreateFileMediaController.java b/src/main/java/org/olat/modules/portfolio/ui/media/CreateFileMediaController.java index 7dcb9cb28d9..ee008bac7b9 100644 --- a/src/main/java/org/olat/modules/portfolio/ui/media/CreateFileMediaController.java +++ b/src/main/java/org/olat/modules/portfolio/ui/media/CreateFileMediaController.java @@ -28,8 +28,8 @@ import java.util.List; import java.util.Map; import java.util.UUID; -import org.olat.core.commons.services.filetemplate.FileType; -import org.olat.core.commons.services.filetemplate.FileTypes; +import org.olat.core.commons.services.doceditor.DocTemplate; +import org.olat.core.commons.services.doceditor.DocTemplates; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.form.flexible.FormItemContainer; import org.olat.core.gui.components.form.flexible.elements.RichTextElement; @@ -78,7 +78,7 @@ public class CreateFileMediaController extends FormBasicController implements Pa private Media mediaReference; private Map<String,String> categories = new HashMap<>(); - private final List<FileType> fileTypes; + private final List<DocTemplate> docTemplates; private final String businessPath; private AddElementInfos userObject; @@ -87,9 +87,9 @@ public class CreateFileMediaController extends FormBasicController implements Pa @Autowired private PortfolioService portfolioService; - public CreateFileMediaController(UserRequest ureq, WindowControl wControl, FileTypes fileTypes) { + public CreateFileMediaController(UserRequest ureq, WindowControl wControl, DocTemplates docTemplates) { super(ureq, wControl); - this.fileTypes = fileTypes.getFileTypes(); + this.docTemplates = docTemplates.getTemplates(); setTranslator(Util.createPackageTranslator(PortfolioHomeController.class, getLocale(), getTranslator())); businessPath = "[HomeSite:" + getIdentity().getKey() + "][PortfolioV2:0][MediaCenter:0]"; initForm(ureq); @@ -129,9 +129,9 @@ public class CreateFileMediaController extends FormBasicController implements Pa descriptionEl.getEditorConfiguration().setPathInStatusBar(false); KeyValues fileTypeKV = new KeyValues(); - for (int i = 0; i < fileTypes.size(); i++) { - FileType fileType = fileTypes.get(i); - String name = fileType.getName() + " (." + fileType.getSuffix() + ")"; + for (int i = 0; i < docTemplates.size(); i++) { + DocTemplate docTemplate = docTemplates.get(i); + String name = docTemplate.getName() + " (." + docTemplate.getSuffix() + ")"; fileTypeKV.add(entry(String.valueOf(i), name)); } fileTypeEl = uifactory.addDropdownSingleselect("create.file.type", formLayout, fileTypeKV.keys(), fileTypeKV.values()); @@ -199,16 +199,16 @@ public class CreateFileMediaController extends FormBasicController implements Pa private String getFileName() { String fileName = fileNameEl.getValue(); - FileType fileType = getSelectedFileType(); - String suffix = fileType != null? fileType.getSuffix(): ""; + DocTemplate docTemplate = getSelectedFileType(); + String suffix = docTemplate != null? docTemplate.getSuffix(): ""; return fileName.endsWith("." + suffix) ? fileName : fileName + "." + suffix; } - private FileType getSelectedFileType() { + private DocTemplate getSelectedFileType() { int index = fileTypeEl.getSelected(); - return index > -1? fileTypes.get(index): null; + return index > -1? docTemplates.get(index): null; } @Override @@ -235,9 +235,9 @@ public class CreateFileMediaController extends FormBasicController implements Pa private void createContent(File file) { VFSLeaf vfsLeaf = new LocalFileImpl(file); - FileType fileType = getSelectedFileType(); - if (fileType != null) { - VFSManager.copyContent(fileType.getContentProvider().getContent(), vfsLeaf); + DocTemplate docTemplate = getSelectedFileType(); + if (docTemplate != null) { + VFSManager.copyContent(docTemplate.getContentProvider().getContent(), vfsLeaf); } } diff --git a/src/main/java/org/olat/modules/portfolio/ui/media/FileMediaController.java b/src/main/java/org/olat/modules/portfolio/ui/media/FileMediaController.java index 06183c6e498..fb492c9f32a 100644 --- a/src/main/java/org/olat/modules/portfolio/ui/media/FileMediaController.java +++ b/src/main/java/org/olat/modules/portfolio/ui/media/FileMediaController.java @@ -22,12 +22,12 @@ package org.olat.modules.portfolio.ui.media; import java.util.Arrays; import java.util.List; -import org.olat.core.commons.services.vfs.VFSLeafEditor.Mode; -import org.olat.core.commons.services.vfs.VFSLeafEditorConfigs; -import org.olat.core.commons.services.vfs.VFSLeafEditorSecurityCallback; -import org.olat.core.commons.services.vfs.VFSLeafEditorSecurityCallbackBuilder; -import org.olat.core.commons.services.vfs.VFSRepositoryService; -import org.olat.core.commons.services.vfs.ui.editor.VFSLeafEditorFullscreenController; +import org.olat.core.commons.services.doceditor.DocEditor.Mode; +import org.olat.core.commons.services.doceditor.DocEditorConfigs; +import org.olat.core.commons.services.doceditor.DocEditorSecurityCallback; +import org.olat.core.commons.services.doceditor.DocEditorSecurityCallbackBuilder; +import org.olat.core.commons.services.doceditor.DocumentEditorService; +import org.olat.core.commons.services.doceditor.ui.DocEditorFullscreenController; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.Component; import org.olat.core.gui.components.link.Link; @@ -70,7 +70,7 @@ public class FileMediaController extends BasicController implements PageElementE private VelocityContainer mainVC; private Link editLink; - private VFSLeafEditorFullscreenController vfsLeafEditorCtrl; + private DocEditorFullscreenController docEditorCtrl; private final Media media; private final MediaRenderingHints hints; @@ -83,7 +83,8 @@ public class FileMediaController extends BasicController implements PageElementE @Autowired private UserManager userManager; @Autowired - private VFSRepositoryService vfsService; + private DocumentEditorService docEditorService; + public FileMediaController(UserRequest ureq, WindowControl wControl, Media media, MediaRenderingHints hints) { super(ureq, wControl); this.media = media; @@ -140,7 +141,7 @@ public class FileMediaController extends BasicController implements PageElementE if (vfsLeaf != null && !hints.isToPdf()) { Mode mode = getOpenMode(); - if (vfsService.hasEditor(vfsLeaf, mode, getIdentity())) { + if (docEditorService.hasEditor(vfsLeaf, mode, getIdentity())) { editLink = LinkFactory.createCustomLink("edit", "edit", "", Link.NONTRANSLATED | Link.LINK, mainVC, this); String editIcon = Mode.EDIT.equals(mode)? "o_icon_edit": "o_icon_preview"; @@ -164,9 +165,9 @@ public class FileMediaController extends BasicController implements PageElementE private Mode getOpenMode() { if (isEditingExcluded()) { return null; - } else if (editMode && vfsService.hasEditor(vfsLeaf, Mode.EDIT, getIdentity())) { + } else if (editMode && docEditorService.hasEditor(vfsLeaf, Mode.EDIT, getIdentity())) { return Mode.EDIT; - } else if (vfsService.hasEditor(vfsLeaf, Mode.VIEW, getIdentity())) { + } else if (docEditorService.hasEditor(vfsLeaf, Mode.VIEW, getIdentity())) { return Mode.VIEW; } return null; @@ -187,7 +188,7 @@ public class FileMediaController extends BasicController implements PageElementE @Override protected void event(UserRequest ureq, Controller source, Event event) { - if (source == vfsLeafEditorCtrl) { + if (source == docEditorCtrl) { if(event == Event.DONE_EVENT) { cleanUp(); } @@ -196,8 +197,8 @@ public class FileMediaController extends BasicController implements PageElementE } private void cleanUp() { - removeAsListenerAndDispose(vfsLeafEditorCtrl); - vfsLeafEditorCtrl = null; + removeAsListenerAndDispose(docEditorCtrl); + docEditorCtrl = null; } private void doOpen(UserRequest ureq, Mode mode) { @@ -206,12 +207,12 @@ public class FileMediaController extends BasicController implements PageElementE if(vfsItem == null || !(vfsItem instanceof VFSLeaf)) { showError("error.missing.file"); } else { - VFSLeafEditorSecurityCallback secCallback = VFSLeafEditorSecurityCallbackBuilder.builder() + DocEditorSecurityCallback secCallback = DocEditorSecurityCallbackBuilder.builder() .withMode(mode) .build(); - VFSLeafEditorConfigs configs = VFSLeafEditorConfigs.builder().build(); - vfsLeafEditorCtrl = new VFSLeafEditorFullscreenController(ureq, getWindowControl(), (VFSLeaf)vfsItem, secCallback, configs); - listenTo(vfsLeafEditorCtrl); + DocEditorConfigs configs = DocEditorConfigs.builder().build(); + docEditorCtrl = new DocEditorFullscreenController(ureq, getWindowControl(), (VFSLeaf)vfsItem, secCallback, configs); + listenTo(docEditorCtrl); } } diff --git a/src/main/java/org/olat/repository/handlers/VFSEditorDelegate.java b/src/main/java/org/olat/repository/handlers/DocumentEditorDelegate.java similarity index 79% rename from src/main/java/org/olat/repository/handlers/VFSEditorDelegate.java rename to src/main/java/org/olat/repository/handlers/DocumentEditorDelegate.java index f5bf258ef30..fb0553ae964 100644 --- a/src/main/java/org/olat/repository/handlers/VFSEditorDelegate.java +++ b/src/main/java/org/olat/repository/handlers/DocumentEditorDelegate.java @@ -19,18 +19,18 @@ */ package org.olat.repository.handlers; -import static org.olat.core.commons.services.vfs.VFSLeafEditorConfigs.none; +import static org.olat.core.commons.services.doceditor.DocEditorConfigs.none; import java.io.File; import java.util.Locale; import org.olat.core.CoreSpringFactory; import org.olat.core.commons.persistence.DBFactory; -import org.olat.core.commons.services.vfs.VFSLeafEditor.Mode; -import org.olat.core.commons.services.vfs.VFSLeafEditorSecurityCallback; -import org.olat.core.commons.services.vfs.VFSLeafEditorSecurityCallbackBuilder; -import org.olat.core.commons.services.vfs.VFSRepositoryService; -import org.olat.core.commons.services.vfs.ui.editor.VFSLeafEditorController; +import org.olat.core.commons.services.doceditor.DocEditor.Mode; +import org.olat.core.commons.services.doceditor.DocEditorSecurityCallback; +import org.olat.core.commons.services.doceditor.DocEditorSecurityCallbackBuilder; +import org.olat.core.commons.services.doceditor.DocumentEditorService; +import org.olat.core.commons.services.doceditor.ui.DocEditorController; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.stack.TooledStackedPanel; import org.olat.core.gui.control.Controller; @@ -59,11 +59,11 @@ import org.olat.resource.OLATResourceManager; * @author uhensler, urs.hensler@frentix.com, http://www.frentix.com * */ -public class VFSEditorDelegate implements WebDocumentCreateDelegate, WebDocumentEditDelegate { +public class DocumentEditorDelegate implements WebDocumentCreateDelegate, WebDocumentEditDelegate { - private VFSEditorDelegateType type; + private DocumentEditorDelegateType type; - public VFSEditorDelegate(VFSEditorDelegateType type) { + public DocumentEditorDelegate(DocumentEditorDelegateType type) { this.type = type; } @@ -78,8 +78,8 @@ public class VFSEditorDelegate implements WebDocumentCreateDelegate, WebDocument } private boolean canEdit() { - VFSRepositoryService vfsService = CoreSpringFactory.getImpl(VFSRepositoryService.class); - return vfsService.hasEditor(type.getSuffix(), Mode.EDIT); + DocumentEditorService docEditorService = CoreSpringFactory.getImpl(DocumentEditorService.class); + return docEditorService.hasEditor(type.getSuffix(), Mode.EDIT); } @Override @@ -121,11 +121,11 @@ public class VFSEditorDelegate implements WebDocumentCreateDelegate, WebDocument throw new AssertException("Web document not found! " + re); } - VFSLeafEditorSecurityCallback secCallback = VFSLeafEditorSecurityCallbackBuilder.builder() + DocEditorSecurityCallback secCallback = DocEditorSecurityCallbackBuilder.builder() .withMode(Mode.EDIT) .canClose(false) .build(); - return new VFSLeafEditorController(ureq, wControl, document, secCallback, none(), "o_web_document_edit"); + return new DocEditorController(ureq, wControl, document, secCallback, none(), "o_web_document_edit"); } } diff --git a/src/main/java/org/olat/repository/handlers/VFSEditorDelegateType.java b/src/main/java/org/olat/repository/handlers/DocumentEditorDelegateType.java similarity index 96% rename from src/main/java/org/olat/repository/handlers/VFSEditorDelegateType.java rename to src/main/java/org/olat/repository/handlers/DocumentEditorDelegateType.java index 24909dee681..42551cf1f1e 100644 --- a/src/main/java/org/olat/repository/handlers/VFSEditorDelegateType.java +++ b/src/main/java/org/olat/repository/handlers/DocumentEditorDelegateType.java @@ -29,7 +29,7 @@ import org.olat.core.id.OLATResourceable; * @author uhensler, urs.hensler@frentix.com, http://www.frentix.com * */ -public interface VFSEditorDelegateType { +public interface DocumentEditorDelegateType { public String getCreateLabelI18nKey(); diff --git a/src/main/java/org/olat/repository/handlers/ExcelVFSEditorDelegateType.java b/src/main/java/org/olat/repository/handlers/ExcelVFSEditorDelegateType.java index c4ea37bcca4..a6018327fed 100644 --- a/src/main/java/org/olat/repository/handlers/ExcelVFSEditorDelegateType.java +++ b/src/main/java/org/olat/repository/handlers/ExcelVFSEditorDelegateType.java @@ -21,7 +21,7 @@ package org.olat.repository.handlers; import java.io.InputStream; -import org.olat.core.commons.services.filetemplate.ContentProviderFactory; +import org.olat.core.commons.services.doceditor.ContentProviderFactory; import org.olat.core.id.OLATResourceable; import org.olat.fileresource.types.XlsFileResource; @@ -31,7 +31,7 @@ import org.olat.fileresource.types.XlsFileResource; * @author uhensler, urs.hensler@frentix.com, http://www.frentix.com * */ -public class ExcelVFSEditorDelegateType implements VFSEditorDelegateType { +public class ExcelVFSEditorDelegateType implements DocumentEditorDelegateType { @Override public OLATResourceable getOLATResourceable() { diff --git a/src/main/java/org/olat/repository/handlers/PowerPointVFSEditorDelegateType.java b/src/main/java/org/olat/repository/handlers/PowerPointVFSEditorDelegateType.java index 2eaf6a1ff1c..6571f871183 100644 --- a/src/main/java/org/olat/repository/handlers/PowerPointVFSEditorDelegateType.java +++ b/src/main/java/org/olat/repository/handlers/PowerPointVFSEditorDelegateType.java @@ -21,7 +21,7 @@ package org.olat.repository.handlers; import java.io.InputStream; -import org.olat.core.commons.services.filetemplate.ContentProviderFactory; +import org.olat.core.commons.services.doceditor.ContentProviderFactory; import org.olat.core.id.OLATResourceable; import org.olat.fileresource.types.XlsFileResource; @@ -31,7 +31,7 @@ import org.olat.fileresource.types.XlsFileResource; * @author uhensler, urs.hensler@frentix.com, http://www.frentix.com * */ -public class PowerPointVFSEditorDelegateType implements VFSEditorDelegateType { +public class PowerPointVFSEditorDelegateType implements DocumentEditorDelegateType { @Override public OLATResourceable getOLATResourceable() { diff --git a/src/main/java/org/olat/repository/handlers/RepositoryHandlerFactory.java b/src/main/java/org/olat/repository/handlers/RepositoryHandlerFactory.java index c9f4d9b237c..65f6d291dd1 100644 --- a/src/main/java/org/olat/repository/handlers/RepositoryHandlerFactory.java +++ b/src/main/java/org/olat/repository/handlers/RepositoryHandlerFactory.java @@ -80,11 +80,11 @@ public class RepositoryHandlerFactory { registerHandler(new PortfolioHandler(), 42); - VFSEditorDelegate wordDelegate = new VFSEditorDelegate(new WordVFSEditorDelegateType()); + DocumentEditorDelegate wordDelegate = new DocumentEditorDelegate(new WordVFSEditorDelegateType()); registerHandler(new WebDocumentHandler(DocFileResource.TYPE_NAME, wordDelegate, wordDelegate), 10001); - VFSEditorDelegate excelDelegate = new VFSEditorDelegate(new ExcelVFSEditorDelegateType()); + DocumentEditorDelegate excelDelegate = new DocumentEditorDelegate(new ExcelVFSEditorDelegateType()); registerHandler(new WebDocumentHandler(XlsFileResource.TYPE_NAME, excelDelegate, excelDelegate), 10002); - VFSEditorDelegate powerPointDelegate = new VFSEditorDelegate(new PowerPointVFSEditorDelegateType()); + DocumentEditorDelegate powerPointDelegate = new DocumentEditorDelegate(new PowerPointVFSEditorDelegateType()); registerHandler(new WebDocumentHandler(PowerpointFileResource.TYPE_NAME, powerPointDelegate, powerPointDelegate), 10003); registerHandler(new WebDocumentHandler(PdfFileResource.TYPE_NAME), 10010); registerHandler(new WebDocumentHandler(ImageFileResource.TYPE_NAME), 10011); diff --git a/src/main/java/org/olat/repository/handlers/WordVFSEditorDelegateType.java b/src/main/java/org/olat/repository/handlers/WordVFSEditorDelegateType.java index 2cf2b056711..7943298273d 100644 --- a/src/main/java/org/olat/repository/handlers/WordVFSEditorDelegateType.java +++ b/src/main/java/org/olat/repository/handlers/WordVFSEditorDelegateType.java @@ -21,7 +21,7 @@ package org.olat.repository.handlers; import java.io.InputStream; -import org.olat.core.commons.services.filetemplate.ContentProviderFactory; +import org.olat.core.commons.services.doceditor.ContentProviderFactory; import org.olat.core.id.OLATResourceable; import org.olat.fileresource.types.DocFileResource; @@ -31,7 +31,7 @@ import org.olat.fileresource.types.DocFileResource; * @author uhensler, urs.hensler@frentix.com, http://www.frentix.com * */ -public class WordVFSEditorDelegateType implements VFSEditorDelegateType { +public class WordVFSEditorDelegateType implements DocumentEditorDelegateType { @Override public String getCreateLabelI18nKey() { diff --git a/src/main/java/org/olat/repository/ui/WebDocumentRunController.java b/src/main/java/org/olat/repository/ui/WebDocumentRunController.java index b7e18a7d392..37e147a97bb 100644 --- a/src/main/java/org/olat/repository/ui/WebDocumentRunController.java +++ b/src/main/java/org/olat/repository/ui/WebDocumentRunController.java @@ -19,16 +19,16 @@ */ package org.olat.repository.ui; -import static org.olat.core.commons.services.vfs.VFSLeafEditorConfigs.none; +import static org.olat.core.commons.services.doceditor.DocEditorConfigs.none; import javax.servlet.http.HttpServletRequest; +import org.olat.core.commons.services.doceditor.DocEditor.Mode; +import org.olat.core.commons.services.doceditor.DocEditorSecurityCallback; +import org.olat.core.commons.services.doceditor.DocEditorSecurityCallbackBuilder; +import org.olat.core.commons.services.doceditor.DocumentEditorService; +import org.olat.core.commons.services.doceditor.ui.DocEditorController; import org.olat.core.commons.services.image.Size; -import org.olat.core.commons.services.vfs.VFSLeafEditor.Mode; -import org.olat.core.commons.services.vfs.VFSLeafEditorSecurityCallback; -import org.olat.core.commons.services.vfs.VFSLeafEditorSecurityCallbackBuilder; -import org.olat.core.commons.services.vfs.VFSRepositoryService; -import org.olat.core.commons.services.vfs.ui.editor.VFSLeafEditorController; import org.olat.core.commons.services.video.MovieService; import org.olat.core.dispatcher.mapper.Mapper; import org.olat.core.gui.UserRequest; @@ -65,7 +65,7 @@ import org.springframework.beans.factory.annotation.Autowired; public class WebDocumentRunController extends BasicController { @Autowired - private VFSRepositoryService vfsService; + private DocumentEditorService docEditorService; @Autowired private MovieService movieService; @@ -102,12 +102,12 @@ public class WebDocumentRunController extends BasicController { mainVC.contextPut("height", 480); mainVC.contextPut("width", 640); } - } else if (vfsService.hasEditor(extension, Mode.VIEW)) { - VFSLeafEditorSecurityCallback secCallback = VFSLeafEditorSecurityCallbackBuilder.builder() + } else if (docEditorService.hasEditor(extension, Mode.VIEW)) { + DocEditorSecurityCallback secCallback = DocEditorSecurityCallbackBuilder.builder() .withMode(Mode.VIEW) .canClose(false) .build(); - Controller editCtrl = new VFSLeafEditorController(ureq, wControl, document, secCallback, none(), "o_web_document"); + Controller editCtrl = new DocEditorController(ureq, wControl, document, secCallback, none(), "o_web_document"); listenTo(editCtrl); mainVC.put("content", editCtrl.getInitialComponent()); } else { diff --git a/src/test/java/org/olat/modules/wopi/manager/WopiServiceImplTest.java b/src/test/java/org/olat/core/commons/services/doceditor/wopi/manager/WopiServiceImplTest.java similarity index 78% rename from src/test/java/org/olat/modules/wopi/manager/WopiServiceImplTest.java rename to src/test/java/org/olat/core/commons/services/doceditor/wopi/manager/WopiServiceImplTest.java index 83faccfe2a5..78cb0906912 100644 --- a/src/test/java/org/olat/modules/wopi/manager/WopiServiceImplTest.java +++ b/src/test/java/org/olat/core/commons/services/doceditor/wopi/manager/WopiServiceImplTest.java @@ -17,7 +17,7 @@ * frentix GmbH, http://www.frentix.com * <p> */ -package org.olat.modules.wopi.manager; +package org.olat.core.commons.services.doceditor.wopi.manager; import static org.assertj.core.api.Assertions.assertThat; @@ -25,13 +25,14 @@ import java.util.Arrays; import java.util.List; import org.junit.Test; -import org.olat.modules.wopi.Action; -import org.olat.modules.wopi.App; -import org.olat.modules.wopi.NetZone; -import org.olat.modules.wopi.model.ActionImpl; -import org.olat.modules.wopi.model.AppImpl; -import org.olat.modules.wopi.model.DiscoveryImpl; -import org.olat.modules.wopi.model.NetZoneImpl; +import org.olat.core.commons.services.doceditor.wopi.Action; +import org.olat.core.commons.services.doceditor.wopi.App; +import org.olat.core.commons.services.doceditor.wopi.NetZone; +import org.olat.core.commons.services.doceditor.wopi.manager.WopiServiceImpl; +import org.olat.core.commons.services.doceditor.wopi.model.ActionImpl; +import org.olat.core.commons.services.doceditor.wopi.model.AppImpl; +import org.olat.core.commons.services.doceditor.wopi.model.DiscoveryImpl; +import org.olat.core.commons.services.doceditor.wopi.model.NetZoneImpl; /** diff --git a/src/test/java/org/olat/modules/wopi/manager/WopiXStreamTest.java b/src/test/java/org/olat/core/commons/services/doceditor/wopi/manager/WopiXStreamTest.java similarity index 90% rename from src/test/java/org/olat/modules/wopi/manager/WopiXStreamTest.java rename to src/test/java/org/olat/core/commons/services/doceditor/wopi/manager/WopiXStreamTest.java index 94c58b4a950..039469ab03a 100644 --- a/src/test/java/org/olat/modules/wopi/manager/WopiXStreamTest.java +++ b/src/test/java/org/olat/core/commons/services/doceditor/wopi/manager/WopiXStreamTest.java @@ -17,7 +17,7 @@ * frentix GmbH, http://www.frentix.com * <p> */ -package org.olat.modules.wopi.manager; +package org.olat.core.commons.services.doceditor.wopi.manager; import java.net.URL; import java.nio.file.Files; @@ -26,11 +26,12 @@ import java.nio.file.Paths; import org.assertj.core.api.SoftAssertions; import org.junit.Test; -import org.olat.modules.wopi.Action; -import org.olat.modules.wopi.App; -import org.olat.modules.wopi.Discovery; -import org.olat.modules.wopi.NetZone; -import org.olat.modules.wopi.ProofKey; +import org.olat.core.commons.services.doceditor.wopi.Action; +import org.olat.core.commons.services.doceditor.wopi.App; +import org.olat.core.commons.services.doceditor.wopi.Discovery; +import org.olat.core.commons.services.doceditor.wopi.NetZone; +import org.olat.core.commons.services.doceditor.wopi.ProofKey; +import org.olat.core.commons.services.doceditor.wopi.manager.WopiXStream; /** * diff --git a/src/test/java/org/olat/modules/wopi/manager/discovery_collabora.xml b/src/test/java/org/olat/core/commons/services/doceditor/wopi/manager/discovery_collabora.xml similarity index 100% rename from src/test/java/org/olat/modules/wopi/manager/discovery_collabora.xml rename to src/test/java/org/olat/core/commons/services/doceditor/wopi/manager/discovery_collabora.xml diff --git a/src/test/java/org/olat/modules/wopi/manager/discovery_microsoft.xml b/src/test/java/org/olat/core/commons/services/doceditor/wopi/manager/discovery_microsoft.xml similarity index 100% rename from src/test/java/org/olat/modules/wopi/manager/discovery_microsoft.xml rename to src/test/java/org/olat/core/commons/services/doceditor/wopi/manager/discovery_microsoft.xml diff --git a/src/test/java/org/olat/test/AllTestsJunit4.java b/src/test/java/org/olat/test/AllTestsJunit4.java index 81068bb5fe3..2f3807fea8a 100644 --- a/src/test/java/org/olat/test/AllTestsJunit4.java +++ b/src/test/java/org/olat/test/AllTestsJunit4.java @@ -429,6 +429,8 @@ import org.junit.runners.Suite; /** * Pure JUnit test without need of framework */ + org.olat.core.commons.services.doceditor.wopi.manager.WopiServiceImplTest.class, + org.olat.core.commons.services.doceditor.wopi.manager.WopiXStreamTest.class, org.olat.core.commons.services.commentAndRating.manager.CommentAndRatingServiceTest.class, org.olat.core.commons.services.license.ui.LicenseSelectionConfigTest.class, org.olat.core.gui.components.form.flexible.impl.elements.richText.TextModeTest.class, @@ -455,8 +457,6 @@ import org.junit.runners.Suite; org.olat.modules.quality.manager.QualityServiceImplTest.class, org.olat.modules.webFeed.manager.FeedManagerImplTest.class, org.olat.modules.webFeed.manager.RomeFeedFetcherTest.class, - org.olat.modules.wopi.manager.WopiServiceImplTest.class, - org.olat.modules.wopi.manager.WopiXStreamTest.class, org.olat.resource.accesscontrol.provider.auto.manager.AutoAccessManagerImplTest.class, org.olat.resource.accesscontrol.provider.auto.manager.ExternalIdHandlerTest.class, org.olat.resource.accesscontrol.provider.auto.manager.ExternalRefHandlerTest.class, -- GitLab