package org.jabref.gui.worker;
import java.util.Objects;
import java.util.Optional;
import java.util.concurrent.ExecutionException;
import javax.swing.JEditorPane;
import javax.swing.SwingWorker;
import org.jabref.gui.BasePanel;
import org.jabref.gui.PreviewPanel;
import org.jabref.logic.citationstyle.CitationStyle;
import org.jabref.logic.l10n.Localization;
import org.jabref.model.entry.BibEntry;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* Generates a citation and updates the linked preview panel
*/
public class CitationStyleWorker extends SwingWorker<String, Void> {
private static final Log LOGGER = LogFactory.getLog(CitationStyleWorker.class);
private final PreviewPanel previewPanel;
public CitationStyleWorker(PreviewPanel previewPanel, JEditorPane previewPane) {
this.previewPanel = Objects.requireNonNull(previewPanel);
Objects.requireNonNull(previewPane);
Optional<BasePanel> basePanel = previewPanel.getBasePanel();
if (basePanel.isPresent()) {
CitationStyle citationStyle = basePanel.get().getCitationStyleCache().getCitationStyle();
previewPane.setText("<i>" + Localization.lang("Processing %0", Localization.lang("Citation Style")) +
": " + citationStyle.getTitle() + " ..." + "</i>");
}
previewPane.revalidate();
}
@Override
protected String doInBackground() throws Exception {
Optional<BasePanel> basePanel = previewPanel.getBasePanel();
BibEntry entry = previewPanel.getEntry();
String fieldText = "";
if ((entry != null) && basePanel.isPresent()) {
fieldText = basePanel.get().getCitationStyleCache().getCitationFor(entry);
}
return fieldText;
}
@Override
public void done() {
if (this.isCancelled()) {
return;
}
String text;
Boolean success = true;
try {
text = this.get();
} catch (InterruptedException | ExecutionException e) {
LOGGER.error("Error while generating citation style", e);
text = Localization.lang("Error while generating citation style");
success = false;
}
previewPanel.setPreviewLabel(text);
if (success) {
previewPanel.markHighlights();
}
}
}