package org.jabref.gui.push;
import java.util.List;
import javax.swing.Icon;
import javax.swing.JPanel;
import org.jabref.gui.BasePanel;
import org.jabref.model.database.BibDatabase;
import org.jabref.model.entry.BibEntry;
import org.jabref.model.metadata.MetaData;
/**
* Class that defines interaction with an external application in the form of "pushing" selected entries to it.
*/
public interface PushToApplication {
String getName();
String getApplicationName();
String getTooltip();
Icon getIcon();
/**
* This method asks the implementing class to return a JPanel populated with the imlementation's options panel, if
* necessary. If the JPanel is shown to the user, and the user indicates that settings should be stored, the
* implementation's storeSettings() method will be called. This method must make sure all widgets in the panel are
* in the correct selection states.
*
* @return a JPanel containing options, or null if options are not needed.
*/
JPanel getSettingsPanel();
/**
* This method is called to indicate that the settings panel returned from the getSettingsPanel() method has been
* shown to the user and that the user has indicated that the settings should be stored. This method must store the
* state of the widgets in the settings panel to Globals.prefs.
*/
void storeSettings();
/**
* The actual operation. This method will not be called on the event dispatch thread, so it should not do GUI
* operations without utilizing invokeLater().
*
* @param database
* @param entries
* @param metaData
*/
void pushEntries(BibDatabase database, List<BibEntry> entries, String keyString, MetaData metaData);
/**
* Reporting etc., this method is called on the event dispatch thread after pushEntries() returns.
*/
void operationCompleted(BasePanel panel);
/**
* Check whether this operation requires BibTeX keys to be set for the entries. If true is returned an error message
* will be displayed if keys are missing.
*
* @return true if BibTeX keys are required for this operation.
*/
boolean requiresBibtexKeys();
}