From 7cae60482542e43177145bc93dd258ad6302a0de Mon Sep 17 00:00:00 2001 From: Siedlerchr Date: Fri, 27 Oct 2017 18:07:06 +0200 Subject: [PATCH 1/4] Replace LinkedFiles backslashes with forward slashes Ensures cross platform compatibility --- .../org/jabref/logic/util/io/FileUtil.java | 12 +++++++++++- .../org/jabref/model/entry/LinkedFile.java | 18 +++++++++++++++--- .../model/entry/FileFieldWriterTest.java | 2 +- 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/jabref/logic/util/io/FileUtil.java b/src/main/java/org/jabref/logic/util/io/FileUtil.java index 3386aebdcc5..97c4c6bc381 100644 --- a/src/main/java/org/jabref/logic/util/io/FileUtil.java +++ b/src/main/java/org/jabref/logic/util/io/FileUtil.java @@ -31,6 +31,7 @@ import org.apache.commons.logging.LogFactory; public class FileUtil { + public static final boolean IS_POSIX_COMPILANT = FileSystems.getDefault().supportedFileAttributeViews().contains("posix"); public static final int MAXIMUM_FILE_NAME_LENGTH = 255; private static final Log LOGGER = LogFactory.getLog(FileUtil.class); @@ -91,6 +92,15 @@ public static String getValidFileName(String fileName) { return fileName; } + /** + * Checks if the given String is an online link + * @param toCheck The String to check + * @return True if it starts with http://, https:// or contains www; false otherwise + */ + public static boolean isOnlineLink(String toCheck) { + return toCheck.startsWith("http://") || toCheck.startsWith("https://") || toCheck.contains("www."); + } + /** * Adds an extension to the given file name. The original extension is not replaced. That means, "demo.bib", ".sav" * gets "demo.bib.sav" and not "demo.sav" @@ -260,7 +270,7 @@ public static List getListOfLinkedFiles(List bes, List fil */ @Deprecated public static String createFileNameFromPattern(BibDatabase database, BibEntry entry, String fileNamePattern, - LayoutFormatterPreferences prefs) { + LayoutFormatterPreferences prefs) { String targetName = null; StringReader sr = new StringReader(fileNamePattern); diff --git a/src/main/java/org/jabref/model/entry/LinkedFile.java b/src/main/java/org/jabref/model/entry/LinkedFile.java index 82d8321c53d..25be85ef0c5 100644 --- a/src/main/java/org/jabref/model/entry/LinkedFile.java +++ b/src/main/java/org/jabref/model/entry/LinkedFile.java @@ -15,6 +15,7 @@ import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.StringProperty; +import org.jabref.logic.util.io.FileUtil; import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.metadata.FileDirectoryPreferences; import org.jabref.model.util.FileHelper; @@ -33,7 +34,14 @@ public class LinkedFile implements Serializable { public LinkedFile(String description, String link, String fileType) { this.description.setValue(Objects.requireNonNull(description)); - this.link.setValue(Objects.requireNonNull(link)); + + String fileLink = Objects.requireNonNull(link); + if (!FileUtil.isOnlineLink(fileLink)) { + this.link.setValue(fileLink.replace("\\", "/")); + } else { + this.link.setValue(fileLink); + } + this.fileType.setValue(Objects.requireNonNull(fileType)); } @@ -62,7 +70,11 @@ public String getLink() { } public void setLink(String link) { - this.link.setValue(link); + if (!FileUtil.isOnlineLink(link)) { + this.link.setValue(link.replace("\\", "/")); + } else { + this.link.setValue(link); + } } public Observable[] getObservables() { @@ -125,7 +137,7 @@ public boolean isEmpty() { } public boolean isOnlineLink() { - return link.get().startsWith("http://") || link.get().startsWith("https://") || link.get().contains("www."); + return FileUtil.isOnlineLink(link.get()); } public Optional findIn(BibDatabaseContext databaseContext, FileDirectoryPreferences fileDirectoryPreferences) { diff --git a/src/test/java/org/jabref/model/entry/FileFieldWriterTest.java b/src/test/java/org/jabref/model/entry/FileFieldWriterTest.java index bce6908323c..5929dd664a3 100644 --- a/src/test/java/org/jabref/model/entry/FileFieldWriterTest.java +++ b/src/test/java/org/jabref/model/entry/FileFieldWriterTest.java @@ -112,7 +112,7 @@ public void testEncodeStringArray() { @Test public void testFileFieldWriterGetStringRepresentation() { LinkedFile file = new LinkedFile("test", "X:\\Users\\abc.pdf", "PDF"); - assertEquals("test:X\\:\\\\Users\\\\abc.pdf:PDF", FileFieldWriter.getStringRepresentation(file)); + assertEquals("test:X\\:/Users/abc.pdf:PDF", FileFieldWriter.getStringRepresentation(file)); } From d03c71ff092bb7dce2f0a960c7e17ce96b650167 Mon Sep 17 00:00:00 2001 From: Siedlerchr Date: Fri, 27 Oct 2017 18:26:56 +0200 Subject: [PATCH 2/4] Move isOnlineFile to model add changelog --- CHANGELOG.md | 4 +++- src/main/java/org/jabref/logic/util/io/FileUtil.java | 9 --------- src/main/java/org/jabref/model/entry/LinkedFile.java | 7 +++---- src/main/java/org/jabref/model/util/FileHelper.java | 9 +++++++++ 4 files changed, 15 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5e43533d6ef..9b8182f24ce 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -36,7 +36,9 @@ We refer to [GitHub issues](https://github.com/JabRef/jabref/issues) by using `# - We fixed an issue where JabRef would freeze when trying to replace the original entry after a merge with new information from identifiers like DOI/ISBN etc. [3294](https://github.com/JabRef/jabref/issues/3294) - We fixed an issue where JabRef would not show the translated content at some points, although there existed a translation - We fixed an issue where editing in the source tab would override content of other entries [#3352](https://github.com/JabRef/jabref/issues/3352#issue-268580818) -### Removed + - We fixed an issue where file links created under windows could not be opened on Linux/OSX [#3311](https://github.com/JabRef/jabref/issues/3311) + + ### Removed diff --git a/src/main/java/org/jabref/logic/util/io/FileUtil.java b/src/main/java/org/jabref/logic/util/io/FileUtil.java index 97c4c6bc381..5a734fd47ff 100644 --- a/src/main/java/org/jabref/logic/util/io/FileUtil.java +++ b/src/main/java/org/jabref/logic/util/io/FileUtil.java @@ -92,15 +92,6 @@ public static String getValidFileName(String fileName) { return fileName; } - /** - * Checks if the given String is an online link - * @param toCheck The String to check - * @return True if it starts with http://, https:// or contains www; false otherwise - */ - public static boolean isOnlineLink(String toCheck) { - return toCheck.startsWith("http://") || toCheck.startsWith("https://") || toCheck.contains("www."); - } - /** * Adds an extension to the given file name. The original extension is not replaced. That means, "demo.bib", ".sav" * gets "demo.bib.sav" and not "demo.sav" diff --git a/src/main/java/org/jabref/model/entry/LinkedFile.java b/src/main/java/org/jabref/model/entry/LinkedFile.java index 25be85ef0c5..5214576a684 100644 --- a/src/main/java/org/jabref/model/entry/LinkedFile.java +++ b/src/main/java/org/jabref/model/entry/LinkedFile.java @@ -15,7 +15,6 @@ import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.StringProperty; -import org.jabref.logic.util.io.FileUtil; import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.metadata.FileDirectoryPreferences; import org.jabref.model.util.FileHelper; @@ -36,7 +35,7 @@ public LinkedFile(String description, String link, String fileType) { this.description.setValue(Objects.requireNonNull(description)); String fileLink = Objects.requireNonNull(link); - if (!FileUtil.isOnlineLink(fileLink)) { + if (!FileHelper.isOnlineLink(fileLink)) { this.link.setValue(fileLink.replace("\\", "/")); } else { this.link.setValue(fileLink); @@ -70,7 +69,7 @@ public String getLink() { } public void setLink(String link) { - if (!FileUtil.isOnlineLink(link)) { + if (!FileHelper.isOnlineLink(link)) { this.link.setValue(link.replace("\\", "/")); } else { this.link.setValue(link); @@ -137,7 +136,7 @@ public boolean isEmpty() { } public boolean isOnlineLink() { - return FileUtil.isOnlineLink(link.get()); + return FileHelper.isOnlineLink(link.get()); } public Optional findIn(BibDatabaseContext databaseContext, FileDirectoryPreferences fileDirectoryPreferences) { diff --git a/src/main/java/org/jabref/model/util/FileHelper.java b/src/main/java/org/jabref/model/util/FileHelper.java index bd75c54ca95..3b0f3e11421 100644 --- a/src/main/java/org/jabref/model/util/FileHelper.java +++ b/src/main/java/org/jabref/model/util/FileHelper.java @@ -14,6 +14,15 @@ public class FileHelper { + /** + * Checks if the given String is an online link + * @param toCheck The String to check + * @return True if it starts with http://, https:// or contains www; false otherwise + */ + public static boolean isOnlineLink(String toCheck) { + return toCheck.startsWith("http://") || toCheck.startsWith("https://") || toCheck.contains("www."); + } + /** * Returns the extension of a file or Optional.empty() if the file does not have one (no . in name). * From 4ffdabf5c99583430f568f98f4ac30e305465b5b Mon Sep 17 00:00:00 2001 From: Siedlerchr Date: Sat, 4 Nov 2017 12:45:02 +0100 Subject: [PATCH 3/4] Move isOnlineLink back to linked file --- .../java/org/jabref/model/entry/LinkedFile.java | 16 +++++++++++++--- .../java/org/jabref/model/util/FileHelper.java | 9 --------- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/src/main/java/org/jabref/model/entry/LinkedFile.java b/src/main/java/org/jabref/model/entry/LinkedFile.java index 5214576a684..d644aca1a13 100644 --- a/src/main/java/org/jabref/model/entry/LinkedFile.java +++ b/src/main/java/org/jabref/model/entry/LinkedFile.java @@ -35,7 +35,7 @@ public LinkedFile(String description, String link, String fileType) { this.description.setValue(Objects.requireNonNull(description)); String fileLink = Objects.requireNonNull(link); - if (!FileHelper.isOnlineLink(fileLink)) { + if (!isOnlineLink(fileLink)) { this.link.setValue(fileLink.replace("\\", "/")); } else { this.link.setValue(fileLink); @@ -69,7 +69,7 @@ public String getLink() { } public void setLink(String link) { - if (!FileHelper.isOnlineLink(link)) { + if (!isOnlineLink(link)) { this.link.setValue(link.replace("\\", "/")); } else { this.link.setValue(link); @@ -117,6 +117,15 @@ private void readObject(ObjectInputStream in) throws IOException { description = new SimpleStringProperty(in.readUTF()); } + /** + * Checks if the given String is an online link + * @param toCheck The String to check + * @return True if it starts with http://, https:// or contains www; false otherwise + */ + private boolean isOnlineLink(String toCheck) { + return toCheck.startsWith("http://") || toCheck.startsWith("https://") || toCheck.contains("www."); + } + @Override public int hashCode() { return Objects.hash(description.get(), link.get(), fileType.get()); @@ -136,7 +145,7 @@ public boolean isEmpty() { } public boolean isOnlineLink() { - return FileHelper.isOnlineLink(link.get()); + return isOnlineLink(link.get()); } public Optional findIn(BibDatabaseContext databaseContext, FileDirectoryPreferences fileDirectoryPreferences) { @@ -152,4 +161,5 @@ public Optional findIn(List directories) { return FileHelper.expandFilenameAsPath(link.get(), directories); } } + } diff --git a/src/main/java/org/jabref/model/util/FileHelper.java b/src/main/java/org/jabref/model/util/FileHelper.java index 3b0f3e11421..bd75c54ca95 100644 --- a/src/main/java/org/jabref/model/util/FileHelper.java +++ b/src/main/java/org/jabref/model/util/FileHelper.java @@ -14,15 +14,6 @@ public class FileHelper { - /** - * Checks if the given String is an online link - * @param toCheck The String to check - * @return True if it starts with http://, https:// or contains www; false otherwise - */ - public static boolean isOnlineLink(String toCheck) { - return toCheck.startsWith("http://") || toCheck.startsWith("https://") || toCheck.contains("www."); - } - /** * Returns the extension of a file or Optional.empty() if the file does not have one (no . in name). * From bacf1d07f69de940b586f62a54141d9eadffe41f Mon Sep 17 00:00:00 2001 From: Siedlerchr Date: Sat, 18 Nov 2017 11:25:51 +0100 Subject: [PATCH 4/4] Remove duplicate code --- src/main/java/org/jabref/model/entry/LinkedFile.java | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/src/main/java/org/jabref/model/entry/LinkedFile.java b/src/main/java/org/jabref/model/entry/LinkedFile.java index d644aca1a13..b5532b024a0 100644 --- a/src/main/java/org/jabref/model/entry/LinkedFile.java +++ b/src/main/java/org/jabref/model/entry/LinkedFile.java @@ -33,15 +33,8 @@ public class LinkedFile implements Serializable { public LinkedFile(String description, String link, String fileType) { this.description.setValue(Objects.requireNonNull(description)); - - String fileLink = Objects.requireNonNull(link); - if (!isOnlineLink(fileLink)) { - this.link.setValue(fileLink.replace("\\", "/")); - } else { - this.link.setValue(fileLink); - } - this.fileType.setValue(Objects.requireNonNull(fileType)); + setLink(Objects.requireNonNull(link)); } public LinkedFile(String description, URL link, String fileType) {