package org.objectstyle.wolips.wizards; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.ui.dialogs.WizardNewLinkPage; import org.objectstyle.wolips.wizards.WizardsPlugin.WO_VERSION; /* * Uses the WizardNewLinkPage for basic support plus easy to override */ /** * Configure WebObjects Direct To Web project configuration options * @author dlee */ public class D2WApplicationConfigurationPage extends WizardNewLinkPage { private Image _d2wbasicimage; private Image _d2wneuimage; private Image _d2wwolimage; private Image _d2wwonderimage; private D2WLook _currentLook; private WO_VERSION _currentWOVersion; //buttons Button basicButton = null; Button wolButton = null; Button neuButton = null; Button wonderButton = null; Button[] buttons = new Button[] {basicButton, wolButton, neuButton, wonderButton}; //WO version combo selector Combo woVersionList = null; //Button text strings /** * Set to message key D2WApplicationConfigurationPage.lnf.basic.message */ public static final String BASIC_BUTTON_STRING = Messages.getString("D2WApplicationConfigurationPage.lnf.basic.message"); /** * Set to message key D2WApplicationConfigurationPage.lnf.neu.message */ public static final String NEU_BUTTON_STRING = Messages.getString("D2WApplicationConfigurationPage.lnf.neu.message"); /** * Set to message key D2WApplicationConfigurationPage.lnf.wol.message */ public static final String WOL_BUTTON_STRING = Messages.getString("D2WApplicationConfigurationPage.lnf.wol.message"); /** * Set to message key D2WApplicationConfigurationPage.lnf.classic.message */ public static final String CLASSIC_BUTTON_STRING = Messages.getString("D2WApplicationConfigurationPage.lnf.classic.message"); /** * Set to message key D2WApplicationConfigurationPage.lnf.wonder.message */ public static final String PROJECT_WONDER_STRING = Messages.getString("D2WApplicationConfigurationPage.lnf.wonder.message"); /** * Listens for button events */ protected static D2WSelectionListener _d2wListener; //Types /** * Wraps bindings of d2w template version to template folder used by org.objectstyle.wolips.templateengine */ public enum D2WLook { /** * */ BASIC54("d2w_bas_application_54"), /** * */ WEBOBJECTS54("d2w_wol_application_54"), /** * */ NEUTRAL54("d2w_neu_application_54"), /** * */ WONDER("wonderd2wapplication"), /** * */ BASIC52("d2w_bas_application_52"), /** * */ WEBOBJECTS52("d2w_wol_application_52"), /** * */ NEUTRAL52("d2w_neu_application_52"); private String _templateName; D2WLook(String templatePath) { _templateName = templatePath; } /** * Template name is the directory in the templates folder of org.objectstyle.wolips.templateengine * @return template folder name * @see org.objectstyle.wolips.templateengine */ String getTemplatePath() { return _templateName; } } /** * Default constructor * @param pageName * @param type */ public D2WApplicationConfigurationPage(String pageName, int type) { super(pageName, type); _d2wbasicimage = WizardsPlugin.D2W_BASIC_ICON().createImage(); _d2wneuimage = WizardsPlugin.D2W_NEU_ICON().createImage(); _d2wwolimage = WizardsPlugin.D2W_WOL_ICON().createImage(); _d2wwonderimage = WizardsPlugin.D2W_WONDER_ICON().createImage(); _d2wListener = new D2WSelectionListener(); } /** * Current selected look. Basic is default. * @return */ public D2WLook currentLook () { return _currentLook; } /* (non-Javadoc) * Method declared on IDialogPage. */ @Override public void createControl(Composite parent) { Font font = parent.getFont(); initializeDialogUnits(parent); // top level group Composite topLevel = new Composite(parent, SWT.NONE); GridLayout layout = new GridLayout(); layout.numColumns = 1; topLevel.setLayout(layout); topLevel.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_FILL | GridData.HORIZONTAL_ALIGN_FILL)); topLevel.setFont(font); Group d2wWOVersionGroup = new Group(topLevel, SWT.SHADOW_IN); GridLayout versionLayout = new GridLayout(); d2wWOVersionGroup.setLayout(versionLayout); d2wWOVersionGroup.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL)); d2wWOVersionGroup.setText("WebObjects Version:"); d2wWOVersionGroup.setFont(topLevel.getFont()); woVersionList = new Combo(d2wWOVersionGroup, SWT.READ_ONLY); for (WizardsPlugin.WO_VERSION version : WizardsPlugin.WO_VERSION.values()) { woVersionList.add(version.getDisplayString()); } woVersionList.select(0); //assume first index should be most current wo version woVersionList.addSelectionListener(new D2WComboSelectionListener()); Group d2wButtonGroup = new Group(topLevel, SWT.SHADOW_IN); GridLayout clientlayout = new GridLayout(); d2wButtonGroup.setLayout(clientlayout); d2wButtonGroup.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL)); d2wButtonGroup.setText("Look And Feel"); d2wButtonGroup.setFont(topLevel.getFont()); basicButton = new Button(d2wButtonGroup, SWT.RADIO); basicButton.setText(BASIC_BUTTON_STRING); basicButton.setImage(_d2wbasicimage); basicButton.addSelectionListener(_d2wListener); basicButton.setSelection(true); wolButton = new Button(d2wButtonGroup, SWT.RADIO); wolButton.setText(WOL_BUTTON_STRING); wolButton.setImage(_d2wwolimage); wolButton.setSelection(false); wolButton.addSelectionListener(_d2wListener); neuButton = new Button(d2wButtonGroup, SWT.RADIO); neuButton.setText(NEU_BUTTON_STRING); neuButton.setImage(_d2wneuimage); neuButton.setSelection(false); neuButton.addSelectionListener(_d2wListener); wonderButton = new Button(d2wButtonGroup, SWT.RADIO); wonderButton.setText(PROJECT_WONDER_STRING); wonderButton.setImage(_d2wwonderimage); wonderButton.setSelection(false); wonderButton.addSelectionListener(_d2wListener); wonderButton.setEnabled(false); //FIXME: have not created wonder template support yet. Disable by default. _currentWOVersion = WO_VERSION.WO_54; _currentLook = D2WLook.BASIC54; setErrorMessage(null); setMessage(null); setControl(topLevel); } /** * Default to WO 5.4 if we can't match * @return */ WO_VERSION getCurrentVersionSelection() { for (WO_VERSION version : WO_VERSION.values()) { if (version.getDisplayString().equals(woVersionList.getText())) { return version; } } return WO_VERSION.WO_54; } /** * Return currently selected button */ Button getCurrentSelectedButton() { for (Button currButton : buttons) { if (currButton.isEnabled()) { return currButton; } } return null; } /** * Match the D2WLook with the button. * @param button * @return */ D2WLook lookForButton(Button button) { D2WLook look; if (button.equals(basicButton) && _currentWOVersion.equals(WO_VERSION.WO_54)) { look = D2WLook.BASIC54; } else if (button.equals(wolButton) && _currentWOVersion.equals(WO_VERSION.WO_54)){ look = D2WLook.WEBOBJECTS54; } else if (button.equals(neuButton) && _currentWOVersion.equals(WO_VERSION.WO_54)){ look = D2WLook.NEUTRAL54; } else if (button.equals(basicButton) && (_currentWOVersion.equals(WO_VERSION.WO_52) || _currentWOVersion.equals(WO_VERSION.WO_53))) { look = D2WLook.BASIC52; } else if (button.equals(wolButton) && (_currentWOVersion.equals(WO_VERSION.WO_52) || _currentWOVersion.equals(WO_VERSION.WO_53))) { look = D2WLook.WEBOBJECTS52; } else if (button.equals(neuButton) && (_currentWOVersion.equals(WO_VERSION.WO_52) || _currentWOVersion.equals(WO_VERSION.WO_53))) { look = D2WLook.NEUTRAL52; } else { System.out.println("Can't match selected look. Picking default "+D2WLook.BASIC54); look = D2WLook.BASIC54; } return look; } /** * Handle button events * @param e * @return */ //e.item is null so we can't compare against it //only non-null value is the button text public boolean handleUpdatedSelection(SelectionEvent e) { Object source = e.getSource(); if (source instanceof Button) { _currentWOVersion = getCurrentVersionSelection(); _currentLook = lookForButton((Button)source); } else if (source instanceof Combo) { _currentWOVersion = getCurrentVersionSelection(); _currentLook = lookForButton(getCurrentSelectedButton()); } return true; } class D2WComboSelectionListener implements SelectionListener { public void widgetDefaultSelected(SelectionEvent e) { handleUpdatedSelection(e); } public void widgetSelected(SelectionEvent e) { handleUpdatedSelection(e); } } class D2WSelectionListener extends SelectionAdapter { public void widgetSelected(SelectionEvent e) { handleUpdatedSelection(e); } public void widgetDefaultSelected(SelectionEvent e) { handleUpdatedSelection(e); } } }