package org.atdl4j.ui.app.impl; import java.util.List; import java.util.Vector; import org.apache.log4j.Logger; import org.atdl4j.config.Atdl4jConfig; import org.atdl4j.config.Atdl4jOptions; import org.atdl4j.config.InputAndFilterData; import org.atdl4j.data.exception.Atdl4jClassLoadException; import org.atdl4j.data.exception.FIXatdlFormatException; import org.atdl4j.data.exception.ValidationException; import org.atdl4j.fixatdl.core.StrategyT; import org.atdl4j.ui.app.Atdl4jCompositePanel; import org.atdl4j.ui.app.Atdl4jCompositePanelListener; import org.atdl4j.ui.app.Atdl4jInputAndFilterDataPanelListener; import org.atdl4j.ui.app.Atdl4jInputAndFilterDataSelectionPanel; import org.atdl4j.ui.app.Atdl4jTesterPanel; import org.atdl4j.ui.app.Atdl4jTesterPanelListener; import org.atdl4j.ui.app.Atdl4jUserMessageHandler; import org.atdl4j.ui.app.FixMsgLoadPanel; import org.atdl4j.ui.app.FixMsgLoadPanelListener; import org.atdl4j.ui.app.FixatdlFileSelectionPanel; import org.atdl4j.ui.app.FixatdlFileSelectionPanelListener; import org.atdl4j.ui.app.StrategyEventListener; import org.atdl4j.ui.impl.SelectedStrategyDetails; /** * Represents the base, non-GUI system-specific "TesterApp" core GUI component (without a main() line). * * @see org.atdl4j.ui.app.Atdl4jCompositePanel for AbstractAtdl4jTesterApp->AbstractAtdl4jTesterPanel->AbstractAtdl4jCompositePanel layering structure. * * * @author Scott Atwell * @version 1.0, Feb 28, 2010 */ public abstract class AbstractAtdl4jTesterPanel implements Atdl4jTesterPanel, Atdl4jCompositePanelListener, FixMsgLoadPanelListener, Atdl4jInputAndFilterDataPanelListener, FixatdlFileSelectionPanelListener, StrategyEventListener { private final Logger logger = Logger.getLogger(AbstractAtdl4jTesterPanel.class); Atdl4jOptions atdl4jOptions; Object parentOrShell; // SWT: Shell, Swing: JFrame, JDialog, etc private Atdl4jInputAndFilterDataSelectionPanel atdl4jInputAndFilterDataSelectionPanel; private FixatdlFileSelectionPanel fixatdlFileSelectionPanel; private FixMsgLoadPanel fixMsgLoadPanel; abstract protected Object createValidateOutputSection(); abstract protected void setValidateOutputText(String aText); private Atdl4jCompositePanel atdl4jCompositePanel; abstract public void setVisibleValidateOutputSection( boolean aVisible ); abstract public void setVisibleFileSelectionSection( boolean aVisible ); abstract public void setVisibleTestingInputSection( boolean aVisible ); private List<Atdl4jTesterPanelListener> listenerList = new Vector<Atdl4jTesterPanelListener>(); protected void init( Object aParentOrShell, Atdl4jOptions aAtdl4jOptions ) { setAtdl4jOptions( aAtdl4jOptions ); setParentOrShell( aParentOrShell ); // -- Atdl4jInputAndFilterDataSelectionPanel (Input And Filter Data button/text field) - build() method called via concrete class -- setAtdl4jInputAndFilterDataSelectionPanel( getAtdl4jInputAndFilterDataSelectionPanel() ); getAtdl4jInputAndFilterDataSelectionPanel().addListener( this ); // -- FixMsgLoadPanel (Load Message button/text field) - build() method called via concrete class -- setFixMsgLoadPanel( getFixMsgLoadPanel() ); getFixMsgLoadPanel().addListener( this ); // -- FixatdlFileSelectionPanel (filename / file dialog) - build() method called via concrete class -- setFixatdlFileSelectionPanel( getFixatdlFileSelectionPanel() ); getFixatdlFileSelectionPanel().addListener( this ); // -- Init the Atdl4jCompositePanel -- setAtdl4jCompositePanel( getAtdl4jCompositePanel() ); getAtdl4jCompositePanel().addListener( this ); } /** * @return the atdl4jOptions */ public Atdl4jOptions getAtdl4jOptions() { return this.atdl4jOptions; } /** * @param aAtdl4jOptions the atdl4jOptions to set */ private void setAtdl4jOptions(Atdl4jOptions aAtdl4jOptions) { this.atdl4jOptions = aAtdl4jOptions; } /** * @return the parentOrShell */ public Object getParentOrShell() { return this.parentOrShell; } /** * @param aParentOrShell the parentOrShell to set */ private void setParentOrShell(Object aParentOrShell) { this.parentOrShell = aParentOrShell; } /** * @param aAtdl4jCompositePanel the atdl4jCompositePanel to set */ private void setAtdl4jCompositePanel(Atdl4jCompositePanel aAtdl4jCompositePanel) { this.atdl4jCompositePanel = aAtdl4jCompositePanel; } /** * @param atdl4jInputAndFilterDataSelectionPanel the atdl4jInputAndFilterDataSelectionPanel to set */ private void setAtdl4jInputAndFilterDataSelectionPanel(Atdl4jInputAndFilterDataSelectionPanel aAtdl4jInputAndFilterDataSelectionPanel) { this.atdl4jInputAndFilterDataSelectionPanel = aAtdl4jInputAndFilterDataSelectionPanel; } /* (non-Javadoc) * @see org.atdl4j.ui.app.FixMsgLoadPanelListener#fixMsgLoadSelected(java.lang.String) */ @Override public void fixMsgLoadSelected(String aFixMsg) { if ( getAtdl4jCompositePanel() != null ) { if ( ( aFixMsg == null ) || ( "".equals( aFixMsg ) ) ) { getAtdl4jCompositePanel().getAtdl4jUserMessageHandler().displayMessage( "Error", "No Fix Message provided to load."); return; } getAtdl4jCompositePanel().loadFixMessage( aFixMsg ); } } /* (non-Javadoc) * @see org.atdl4j.ui.app.Atdl4jInputAndFilterDataPanelListener#inputAndFilterDataSpecified(org.atdl4j.config.InputAndFilterData) */ @Override public void inputAndFilterDataSpecified(InputAndFilterData aInputAndFilterData) { try { setVisibleFileSelectionSection( Atdl4jConfig.getConfig().isShowFileSelectionSection() ); setVisibleValidateOutputSection( Atdl4jConfig.getConfig().isShowValidateOutputSection() ); getAtdl4jCompositePanel().setVisibleOkCancelButtonSection( Atdl4jConfig.getConfig().isShowCompositePanelOkCancelButtonSection() ); // -- Reloads the screen for the pre-loaded/cached FIXatdl file (if specified and cached) -- getAtdl4jCompositePanel().loadScreenWithFilteredStrategies(); } catch (FIXatdlFormatException ex) { logger.error( "FIXatdlFormatException occured while selecting inputAndFilterData"); getAtdl4jCompositePanel().getAtdl4jUserMessageHandler().displayException( "Error", "ERROR during loadScreenWithFilteredStrategies()", ex ); } } /* (non-Javadoc) * @see org.atdl4j.ui.app.Atdl4jCompositePanelListener#cancelButtonSelected() */ @Override public void cancelButtonSelected() { fireCancelButtonSelectedEvent(); } /* (non-Javadoc) * @see org.atdl4j.ui.app.Atdl4jCompositePanelListener#okButtonSelected() */ @Override public void okButtonSelected() { fireOkButtonSelectedEvent(); } /** * @param fixMsgLoadPanel the fixMsgLoadPanel to set */ private void setFixMsgLoadPanel(FixMsgLoadPanel fixMsgLoadPanel) { this.fixMsgLoadPanel = fixMsgLoadPanel; } /** * @return the Atdl4jInputAndFilterDataSelectionPanel * @throws Atdl4jClassLoadException */ public Atdl4jInputAndFilterDataSelectionPanel getAtdl4jInputAndFilterDataSelectionPanel() { if ( atdl4jInputAndFilterDataSelectionPanel == null ) { atdl4jInputAndFilterDataSelectionPanel = Atdl4jConfig.getConfig().createAtdl4jInputAndFilterDataSelectionPanel(); } return atdl4jInputAndFilterDataSelectionPanel; } public Atdl4jCompositePanel getAtdl4jCompositePanel() { if ( atdl4jCompositePanel == null ) { atdl4jCompositePanel = Atdl4jConfig.getConfig().createAtdl4jCompositePanel(); atdl4jCompositePanel.setStrategyEventListener( this ); // -- Default to hiding Composite's OK/Cancel buttons to avoid two sets (use Atdl4jTesterPanel's only) -- Atdl4jConfig.getConfig().setShowCompositePanelOkCancelButtonSection( false ); atdl4jCompositePanel.setVisibleOkCancelButtonSection( false ); } return atdl4jCompositePanel; } /** * @return the FixMsgLoadPanel * @throws Atdl4jClassLoadException */ public FixMsgLoadPanel getFixMsgLoadPanel() { if ( fixMsgLoadPanel == null ) { fixMsgLoadPanel = Atdl4jConfig.getConfig().createFixMsgLoadPanel(); } return fixMsgLoadPanel; } /** * @param fixatdlFileSelectionPanel the fixatdlFileSelectionPanel to set */ protected void setFixatdlFileSelectionPanel(FixatdlFileSelectionPanel fixatdlFileSelectionPanel) { this.fixatdlFileSelectionPanel = fixatdlFileSelectionPanel; } /* (non-Javadoc) * @see org.atdl4j.ui.app.FixatdlFileSelectionPanelListener#fixatdlFileSelected(java.lang.String) */ @Override public void fixatdlFileSelected(String aFilename) throws FIXatdlFormatException { if (Atdl4jConfig.getConfig().isCatchAllStrategyLoadExceptions()) { try { fixatdlFileSelectedNotCatchAllExceptions(aFilename); } catch (FIXatdlFormatException ex) { logger.warn( "Atdl4jClassLoadException while loading FIXatdl file", ex ); getAtdl4jUserMessageHandler().displayException( "FIXatdl file load exception", "", ex ); } } else { fixatdlFileSelectedNotCatchAllExceptions(aFilename); } } /* (non-Javadoc) * @see org.atdl4j.ui.app.FixatdlFileSelectionPanelListener#fixatdlFileSelected(java.lang.String) */ protected void fixatdlFileSelectedNotCatchAllExceptions(String aFilename) throws FIXatdlFormatException { getAtdl4jCompositePanel().parseFixatdlFile( aFilename ); getAtdl4jCompositePanel().loadScreenWithFilteredStrategies(); } /** * @return the FixatdlFileSelectionPanel * @throws Atdl4jClassLoadException */ public FixatdlFileSelectionPanel getFixatdlFileSelectionPanel() { if ( fixatdlFileSelectionPanel == null ) { fixatdlFileSelectionPanel = Atdl4jConfig.getConfig().createFixatdlFileSelectionPanel(); } return fixatdlFileSelectionPanel; } /** * @return the Atdl4jUserMessageHandler * @throws Atdl4jClassLoadException */ public Atdl4jUserMessageHandler getAtdl4jUserMessageHandler() { return getAtdl4jCompositePanel().getAtdl4jUserMessageHandler(); } /* (non-Javadoc) * @see org.atdl4j.ui.app.StrategyEventListener#strategyNotValidated(org.atdl4j.fixatdl.core.StrategyT, java.lang.String) */ @Override public void strategyNotValidated(StrategyT aStrategy, String aMessageText) { setValidateOutputText( aMessageText ); } /* (non-Javadoc) * @see org.atdl4j.ui.app.StrategyEventListener#strategySelected(org.atdl4j.fixatdl.core.StrategyT) */ @Override public void strategySelected(StrategyT aStrategy, boolean aSelectedViaLoadFixMsg) { if ( aSelectedViaLoadFixMsg ) { setValidateOutputText( "FIX string loaded successfully!" ); } else { setValidateOutputText( "" ); } } /* (non-Javadoc) * @see org.atdl4j.ui.app.StrategyEventListener#strategyValidated(org.atdl4j.fixatdl.core.StrategyT) */ @Override public void strategyValidated(StrategyT aStrategy, SelectedStrategyDetails aSelectedStrategyDetails) { setValidateOutputText( aSelectedStrategyDetails.getFixMsgFragment() ); } /* (non-Javadoc) * @see org.atdl4j.ui.app.StrategyEventListener#strategyValidationFailed(org.atdl4j.fixatdl.core.StrategyT, java.lang.Throwable) */ @Override public void strategyValidationFailed(StrategyT aStrategy, Throwable aException) { setValidateOutputText( AbstractAtdl4jUserMessageHandler.extractExceptionMessage( aException )); } public void addListener( Atdl4jTesterPanelListener aAtdl4jTesterPanelListener ) { listenerList.add( aAtdl4jTesterPanelListener ); } public void removeListener( Atdl4jTesterPanelListener aAtdl4jTesterPanelListener ) { listenerList.remove( aAtdl4jTesterPanelListener ); } protected void fireOkButtonSelectedEvent() { for ( Atdl4jTesterPanelListener tempListener : listenerList ) { tempListener.okButtonSelected(); } } protected void fireCancelButtonSelectedEvent() { for ( Atdl4jTesterPanelListener tempListener : listenerList ) { tempListener.cancelButtonSelected(); } } protected void validateButtonSelected() throws ValidationException { getAtdl4jCompositePanel().validateStrategy(); } }