From 3c716e38e85d47df1be45587f3991c9cd6d81c3a Mon Sep 17 00:00:00 2001 From: Albert Tregnaghi Date: Tue, 18 Dec 2018 23:58:09 +0100 Subject: [PATCH] Handling multiple base dirs, closes #114 - not very cool solved, but when files are not in current base dir for project they will be rendered just as done formerly. Means of course that maybe images are not correctly shown, but at least content is there. Also users got the possiblity to close all editors open file and do refresh - this will reset the base directory --- .../asciidoctoreditor/AsciiDoctorWrapper.java | 4 +- .../asciidoctoreditor/AsciiDocFileUtils.java | 44 +++++++++++++------ 2 files changed, 32 insertions(+), 16 deletions(-) diff --git a/asciidoctor-editor-plugin/src/main/java-eclipse/de/jcup/asciidoctoreditor/AsciiDoctorWrapper.java b/asciidoctor-editor-plugin/src/main/java-eclipse/de/jcup/asciidoctoreditor/AsciiDoctorWrapper.java index 2b672f2e..3d2be244 100644 --- a/asciidoctor-editor-plugin/src/main/java-eclipse/de/jcup/asciidoctoreditor/AsciiDoctorWrapper.java +++ b/asciidoctor-editor-plugin/src/main/java-eclipse/de/jcup/asciidoctoreditor/AsciiDoctorWrapper.java @@ -16,11 +16,9 @@ package de.jcup.asciidoctoreditor; import java.io.File; -import java.io.IOException; import java.nio.file.Path; import java.util.Map; -import org.apache.commons.io.FileUtils; import org.apache.commons.io.FilenameUtils; import org.asciidoctor.Asciidoctor; import org.eclipse.core.resources.IProject; @@ -63,7 +61,7 @@ public void convertToHTML(File asciiDocFile, long editorId, boolean useHiddenFil context.setAsciidocFile(asciiDocFile); if (useHiddenFile){ - context.setFileToRender(AsciiDocFileUtils.createHiddenEditorFile(asciiDocFile,editorId,context.getBaseDir(), getTempFolder())); + context.setFileToRender(AsciiDocFileUtils.createHiddenEditorFile(logAdapter, asciiDocFile,editorId,context.getBaseDir(), getTempFolder())); }else{ context.setFileToRender(asciiDocFile); } diff --git a/asciidoctor-editor-plugin/src/main/java/de/jcup/asciidoctoreditor/AsciiDocFileUtils.java b/asciidoctor-editor-plugin/src/main/java/de/jcup/asciidoctoreditor/AsciiDocFileUtils.java index ebe9c664..aaf12800 100644 --- a/asciidoctor-editor-plugin/src/main/java/de/jcup/asciidoctoreditor/AsciiDocFileUtils.java +++ b/asciidoctor-editor-plugin/src/main/java/de/jcup/asciidoctoreditor/AsciiDocFileUtils.java @@ -73,20 +73,27 @@ protected static File createSelfDeletingTempSubFolder(String tempId, String pare return newTempSubFolder; } - public static File createHiddenEditorFile(File asciidoctorFile, long editorId, File baseDir, Path tempFolder) throws IOException { + public static File createHiddenEditorFile(LogAdapter logAdapter, File asciidoctorFile, long editorId, File baseDir, Path tempFolder) throws IOException { File hiddenEditorFile = new File(tempFolder.toFile(), editorId + "_hidden-editorfile_" + asciidoctorFile.getName()); - - String relativePath= calculatePathToFileFromBase(asciidoctorFile,baseDir); - - StringBuilder sb= new StringBuilder(); - sb.append("// origin :").append(asciidoctorFile.getAbsolutePath()).append("\n"); - sb.append("// editor :").append(editorId).append("\n"); - sb.append("// basedir:").append(baseDir.getAbsolutePath()).append("\n"); - - sb.append("include::").append(relativePath).append("[]\n"); + try{ + String relativePath= calculatePathToFileFromBase(asciidoctorFile,baseDir); + StringBuilder sb= new StringBuilder(); + sb.append("// origin :").append(asciidoctorFile.getAbsolutePath()).append("\n"); + sb.append("// editor :").append(editorId).append("\n"); + sb.append("// basedir:").append(baseDir.getAbsolutePath()).append("\n"); + + sb.append("include::").append(relativePath).append("[]\n"); + + FileUtils.writeStringToFile(hiddenEditorFile, sb.toString(), "UTF-8",false); + hiddenEditorFile.deleteOnExit(); + }catch(NotInsideCurrentBaseDirException e){ + /* fallback to orign file - maybe something does not work but at least + * content will be shown! + */ + logAdapter.logWarn("File not in current base dir so copied origin as hidden file:"+asciidoctorFile.getAbsolutePath()); + FileUtils.copyFile(asciidoctorFile, hiddenEditorFile); + } - FileUtils.writeStringToFile(hiddenEditorFile, sb.toString(), "UTF-8",false); - hiddenEditorFile.deleteOnExit(); return hiddenEditorFile; } @@ -98,7 +105,18 @@ static String calculatePathToFileFromBase(File asciidoctorFile, File baseDir) { return unixAsciiDocFilePath.substring(unixBasePath.length()); } - return "pathProblems:"+unixAsciiDocFilePath+" not in "+unixBasePath; + throw new NotInsideCurrentBaseDirException("pathProblems:"+unixAsciiDocFilePath+" not in "+unixBasePath); } + + public static class NotInsideCurrentBaseDirException extends RuntimeException{ + + private static final long serialVersionUID = 1L; + + public NotInsideCurrentBaseDirException(String string) { + super(string); + } + + + } }