package org.jabref.logic.protectedterms; import java.io.BufferedWriter; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.StandardOpenOption; import java.util.List; import java.util.Objects; import org.jabref.logic.util.OS; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; public class ProtectedTermsList implements Comparable<ProtectedTermsList> { private static final Log LOGGER = LogFactory.getLog(ProtectedTermsList.class); private String description; private final List<String> termsList; private final String location; private final boolean internalList; private boolean enabled; public ProtectedTermsList(String description, List<String> termList, String location, boolean internalList) { this.description = Objects.requireNonNull(description); this.termsList = Objects.requireNonNull(termList); this.location = Objects.requireNonNull(location); this.internalList = internalList; } public ProtectedTermsList(String description, List<String> termList, String location) { this(description, termList, location, false); } public String getDescription() { return description; } public List<String> getTermList() { return termsList; } public String getLocation() { return location; } public String getTermListing() { return String.join("\n", termsList); } @Override public int compareTo(ProtectedTermsList otherList) { return this.getDescription().compareTo(otherList.getDescription()); } public boolean isInternalList() { return internalList; } public void setEnabled(boolean enabled) { this.enabled = enabled; } public boolean isEnabled() { return enabled; } public boolean createAndWriteHeading(String newDescription) { description = newDescription; return addProtectedTerm("# " + newDescription, true); } public boolean addProtectedTerm(String term) { return addProtectedTerm(term, false); } public boolean addProtectedTerm(String term, boolean create) { Objects.requireNonNull(term); // Cannot add to internal lists if (internalList) { return false; } Path p = Paths.get(location); String s = OS.NEWLINE + term; try (BufferedWriter writer = Files.newBufferedWriter(p, StandardCharsets.UTF_8, create ? StandardOpenOption.CREATE : StandardOpenOption.APPEND)) { writer.write(s); termsList.add(term); } catch (IOException ioe) { LOGGER.warn("Problem adding protected term to list", ioe); return false; } return true; } @Override public boolean equals(Object o) { if (!(o instanceof ProtectedTermsList)) { return false; } ProtectedTermsList otherList = (ProtectedTermsList) o; return (this.location.equals(otherList.location)) && (this.description.equals(otherList.description)); } @Override public int hashCode() { return Objects.hash(location, description); } }