/* Copyright (C) 2003-2011 JabRef contributors. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ package net.sf.jabref.imports; import java.io.File; import net.sf.jabref.BibtexEntryType; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import net.sf.jabref.BibtexDatabase; import net.sf.jabref.BibtexEntry; import net.sf.jabref.MetaData; public class ParserResult { public static ParserResult INVALID_FORMAT = new ParserResult(null, null, null); public static ParserResult FILE_LOCKED = new ParserResult(null, null, null); private BibtexDatabase base; private MetaData metaData; private HashMap<String, BibtexEntryType> entryTypes; private File file = null; private ArrayList<String> warnings = new ArrayList<String>(); private ArrayList<String> duplicateKeys = new ArrayList<String>(); private String errorMessage = null; private String encoding = null; // Which encoding was used? private boolean postponedAutosaveFound = false; private boolean invalid = false; private String jabrefVersion = null; // Which JabRef version wrote the file, if any? private int jabrefMajorVersion = 0; private int jabrefMinorVersion = 0; private int jabrefMinor2Version = 0; // Numeric version representation private boolean toOpenTab = false; public ParserResult(Collection<BibtexEntry> entries){ this(ImportFormatReader.createDatabase(entries), null, new HashMap<String, BibtexEntryType>()); } public ParserResult(BibtexDatabase base, MetaData metaData, HashMap<String, BibtexEntryType> entryTypes) { this.base = base; this.metaData = metaData; this.entryTypes = entryTypes; } /** * Check if this base is marked to be added to the currently open tab. Default is false. * @return */ public boolean toOpenTab() { return toOpenTab; } public void setToOpenTab(boolean toOpenTab) { this.toOpenTab = toOpenTab; } /** * Find which version of JabRef, if any, produced this bib file. * @return The version number string, or null if no JabRef signature could be read. */ public String getJabrefVersion() { return jabrefVersion; } /** * Set the JabRef version number string for this parser result. * @param jabrefVersion The version number string. */ public void setJabrefVersion(String jabrefVersion) { this.jabrefVersion = jabrefVersion; } public int getJabrefMajorVersion() { return jabrefMajorVersion; } public void setJabrefMajorVersion(int jabrefMajorVersion) { this.jabrefMajorVersion = jabrefMajorVersion; } public int getJabrefMinorVersion() { return jabrefMinorVersion; } public void setJabrefMinorVersion(int jabrefMinorVersion) { this.jabrefMinorVersion = jabrefMinorVersion; } public int getJabrefMinor2Version() { return jabrefMinor2Version; } public void setJabrefMinor2Version(int jabrefMinor2Version) { this.jabrefMinor2Version = jabrefMinor2Version; } public BibtexDatabase getDatabase() { return base; } public MetaData getMetaData() { return metaData; } public void setMetaData(MetaData md) { this.metaData = md; } public HashMap<String, BibtexEntryType> getEntryTypes() { return entryTypes; } public File getFile() { return file; } public void setFile(File f) { file = f; } /** * Sets the variable indicating which encoding was used during parsing. * * @param enc String the name of the encoding. */ public void setEncoding(String enc) { encoding = enc; } /** * Returns the name of the encoding used during parsing, or null if not specified * (indicates that prefs.get("defaultEncoding") was used). */ public String getEncoding() { return encoding; } /** * Add a parser warning. * * @param s String Warning text. Must be pretranslated. Only added if there isn't already a dupe. */ public void addWarning(String s) { if (!warnings.contains(s)) warnings.add(s); } public boolean hasWarnings() { return (warnings.size() > 0); } public String[] warnings() { String[] s = new String[warnings.size()]; for (int i=0; i<warnings.size(); i++) s[i] = warnings.get(i); return s; } /** * Add a key to the list of duplicated BibTeX keys found in the database. * @param key The duplicated key */ public void addDuplicateKey(String key) { if (!duplicateKeys.contains(key)) duplicateKeys.add(key); } /** * Query whether any duplicated BibTeX keys have been found in the database. * @return true if there is at least one duplicate key. */ public boolean hasDuplicateKeys() { return duplicateKeys.size() > 0; } /** * Get all duplicated keys found in the database. * @return An array containing the duplicated keys. */ public String[] getDuplicateKeys() { return duplicateKeys.toArray(new String[duplicateKeys.size()]); } public boolean isPostponedAutosaveFound() { return postponedAutosaveFound; } public void setPostponedAutosaveFound(boolean postponedAutosaveFound) { this.postponedAutosaveFound = postponedAutosaveFound; } public boolean isInvalid() { return invalid; } public void setInvalid(boolean invalid) { this.invalid = invalid; } public String getErrorMessage() { return errorMessage; } public void setErrorMessage(String errorMessage) { this.errorMessage = errorMessage; } }