package org.autoplot.datasource; import java.util.List; import javax.swing.JPanel; import org.das2.util.monitor.ProgressMonitor; /** * Interface for discovering a GUI editor for an URL. * Note the correct order to use a GUI is: * * reject( String uri ) is the URI close enough that we can create an editor for it? Editors that never reject, "allow discovery" * setExpertMode( boolean ) if available, then expert mode is supported and the options should be restricted to reliable options. * prepare( String uri, Window parent, ProgressMonitor mon ) prepare the GUI, maybe by downloading resources, etc * setURI( String uri ) set the URI for editing. This is the oldest method and is a bit redundant. * getPanel() enter the GUI. * getURI() may be called at any time. Note this should return a valid URI. The intent here is that this could be called multiple times. * * Data Sources that support discovery will create a DataSourceEditorPanel with * no parameters, e.g. "vap+cdaweb:" * @author jbf */ public interface DataSourceEditorPanel { /** * reject the URI, perhaps because we aren't close enough to identify a resource. * For example, a CDF URI contains the name of the file but not the variable to plot, * so we need to enter the editor panel to complete the URI. * Leaving the editor should never result in a URI that would reject. * @param uri * @return true if the URI is not usable. * @throws java.lang.Exception */ public boolean reject( String uri ) throws Exception; /** * load any needed resources. Return false if cancel, true to proceed into the gui. * Throw a FileNotFoundException if needed resources is not found. * @param uri partially-completed URI * @param parent the parent GUI. * @param mon monitor to indicate slow process. * @return true to proceed, false if to cancel. */ public boolean prepare( String uri, java.awt.Window parent, ProgressMonitor mon) throws Exception; /** * initialize the editor to edit this URI. This may be incomplete, and the editor * should make it valid so getUri is valid. Note also that the URI will be * be the same as in prepare. If exceptions occur here, they must be re-thrown as * runtime exceptions, and they should be checked for in prepare(). * @param uri */ public void setURI( String uri ); /** * mark the problems identified by the data source. Note the reject method here doesn't provide the list, * but instead the DataSourceFactory.reject method. This is because often data providers intentionally provide a * partial URI for the user to complete via the editor. * @param problems */ public void markProblems( List problems ); /** * return the GUI to edit the URI. * @return */ public JPanel getPanel(); /** * return the URI configured by the editor. This should be the fully-qualified * URI, with the "vap+<ext>:" scheme. * * @return */ public String getURI(); }