From 3ff141a7453b498d9d0efb55d2967d96fa71a680 Mon Sep 17 00:00:00 2001 From: uhensler <urs.hensler@frentix.com> Date: Wed, 26 Feb 2020 08:36:52 +0100 Subject: [PATCH] OO-4536: Edit XML files with the internal document editor --- .../commons/editor/fileeditor/FileEditor.java | 2 +- .../doceditor/ContentProviderFactory.java | 17 +++++++++++++ .../services/doceditor/DocTemplates.java | 25 +++++++++++++------ .../ui/_i18n/LocalStrings_de.properties | 1 + .../ui/_i18n/LocalStrings_en.properties | 1 + 5 files changed, 37 insertions(+), 9 deletions(-) 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 d6f631e49ea..813c7b6b51b 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 @@ -50,7 +50,7 @@ import org.springframework.stereotype.Service; 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"); + private static final List<String> TEXT_EDITOR_SUFFIX = Arrays.asList("txt", "css", "csv", "xml"); @Autowired private VFSLockManager lockManager; diff --git a/src/main/java/org/olat/core/commons/services/doceditor/ContentProviderFactory.java b/src/main/java/org/olat/core/commons/services/doceditor/ContentProviderFactory.java index cbb528405f9..64206967b4f 100644 --- a/src/main/java/org/olat/core/commons/services/doceditor/ContentProviderFactory.java +++ b/src/main/java/org/olat/core/commons/services/doceditor/ContentProviderFactory.java @@ -26,6 +26,7 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.net.URL; +import java.nio.charset.StandardCharsets; import java.util.Locale; import java.util.zip.ZipOutputStream; @@ -46,6 +47,7 @@ public class ContentProviderFactory { private static final Logger log = Tracing.createLoggerFor(ContentProviderFactory.class); private static final ContentProvider EMPTY = new EmptyContentProvider(); + private static final ContentProvider XML = new XmlContentProvider(); private static final ContentProvider DOCX = new DocxContentProvider(); private static final ContentProvider XLSX = new XlsxContentProvider(); private static final ContentProvider PPTX = new PptxContentProvider(); @@ -54,6 +56,11 @@ public class ContentProviderFactory { return EMPTY; } + public static ContentProvider emptyXml() { + return XML; + } + + public static ContentProvider emptyDocx() { return DOCX; } @@ -76,6 +83,16 @@ public class ContentProviderFactory { } } + private static final class XmlContentProvider implements ContentProvider { + + private static final String XML_CONTENT = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>"; + + @Override + public InputStream getContent(Locale locale) { + return new ByteArrayInputStream(XML_CONTENT.getBytes(StandardCharsets.UTF_8)); + } + } + private static final class DocxContentProvider implements ContentProvider { @Override diff --git a/src/main/java/org/olat/core/commons/services/doceditor/DocTemplates.java b/src/main/java/org/olat/core/commons/services/doceditor/DocTemplates.java index 72f953243ad..a362ee18e7a 100644 --- a/src/main/java/org/olat/core/commons/services/doceditor/DocTemplates.java +++ b/src/main/java/org/olat/core/commons/services/doceditor/DocTemplates.java @@ -23,6 +23,7 @@ import static org.olat.core.commons.services.doceditor.ContentProviderFactory.em 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.ContentProviderFactory.emptyXml; import static org.olat.core.commons.services.doceditor.DocEditor.Mode.EDIT; import java.util.ArrayList; @@ -72,6 +73,9 @@ public class DocTemplates { if (docEditorService.hasEditor(identity, roles, "css", EDIT, hasMeta)) { builder.addCss(); } + if (docEditorService.hasEditor(identity, roles, "xml", EDIT, hasMeta)) { + builder.addXml(); + } if (docEditorService.hasEditor(identity, roles, "docx", EDIT, hasMeta)) { builder.addDocx(); } @@ -97,23 +101,28 @@ public class DocTemplates { this.translator = Util.createPackageTranslator(CreateDocumentController.class, locale); } - public Builder addCss() { - docTemplates.add(DocTemplate.of("css", translate("doc.type.css"), empty())); + public Builder addTxt() { + docTemplates.add(DocTemplate.of("txt", translate("doc.type.txt"), empty())); return this; } - public Builder addDocx() { - docTemplates.add(DocTemplate.of("docx", translate("doc.type.docx"), emptyDocx())); + public Builder addHtml() { + docTemplates.add(DocTemplate.of("html", translate("doc.type.html"), empty())); return this; } - public Builder addHtml() { - docTemplates.add(DocTemplate.of("html", translate("doc.type.html"), empty())); + public Builder addCss() { + docTemplates.add(DocTemplate.of("css", translate("doc.type.css"), empty())); return this; } - public Builder addTxt() { - docTemplates.add(DocTemplate.of("txt", translate("doc.type.txt"), empty())); + public Builder addXml() { + docTemplates.add(DocTemplate.of("xml", translate("doc.type.xml"), emptyXml())); + return this; + } + + public Builder addDocx() { + docTemplates.add(DocTemplate.of("docx", translate("doc.type.docx"), emptyDocx())); return this; } 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 index 9a92ceadc8e..6266a1c4b6b 100644 --- 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 @@ -23,4 +23,5 @@ doc.type.html=HTML-Dokument doc.type.pptx=PowerPoint doc.type.txt=Text doc.type.xlsx=Excel +doc.type.xml=Extensible Markup Language 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 index e990e2515e4..b18ca53a4bf 100644 --- 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 @@ -23,4 +23,5 @@ doc.type.html=HTML Document doc.type.pptx=PowerPoint doc.type.txt=Text doc.type.xlsx=Excel +doc.type.xml=Extensible Markup Language error.no.editor=The content of the document cannot be displayed. -- GitLab