/******************************************************************************* * Copyright 2014 Google Inc. All Rights Reserved. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *******************************************************************************/ package com.google.gwt.eclipse.wtp.wizards; import java.util.List; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.ComboViewer; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.window.Window; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; 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.DirectoryDialog; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.dialogs.PreferencesUtil; import org.eclipse.wst.common.frameworks.datamodel.DataModelFactory; import org.eclipse.wst.common.frameworks.datamodel.IDataModel; import org.eclipse.wst.common.frameworks.internal.datamodel.ui.DataModelWizardPage; import org.eclipse.wst.common.project.facet.core.events.IFacetedProjectListener; import org.eclipse.wst.common.project.facet.ui.IFacetWizardPage; import org.eclipse.wst.common.project.facet.ui.IWizardContext; import com.google.gwt.eclipse.core.preferences.GWTPreferences; import com.google.gwt.eclipse.core.preferences.ui.GwtPreferencePage; import com.google.gwt.eclipse.core.runtime.GwtSdk; import com.google.gwt.eclipse.wtp.facet.data.GwtFacetInstallDataModelProvider; import com.google.gwt.eclipse.wtp.facet.data.IGwtFacetConstants; /** * Base class for GWT facets wizard pages. * * Deprecated: Make a project configurator in charge */ // TODO remove class later @Deprecated public class GwtFacetWizardPage extends DataModelWizardPage implements IFacetWizardPage, IGwtFacetConstants { private static final String WIZARD_NAME = IGwtFacetConstants.GWT_PLUGINS_FACET_ID + ".install.page"; private IFacetedProjectListener runtimeChangedListener; private ComboViewer comboViewer; private Button btnAddSdk; private Text textPath; private Button btnDirBrowser; private Combo comboViewerCombo; public GwtFacetWizardPage() { super(DataModelFactory.createDataModel(new GwtFacetInstallDataModelProvider()), WIZARD_NAME); setTitle("GWT Facet Configuration"); setDescription("Complete selections below to setup the GWT facet configuration."); } @Override public void setConfig(Object config) { model.removeListener(this); model = (IDataModel) config; model.addListener(this); synchHelper.dispose(); synchHelper = initializeSynchHelper(model); } @Override public void setWizardContext(IWizardContext context) { // do nothing here } @Override public void transferStateToConfig() { // do nothing here } @Override protected boolean showValidationErrorsOnEnter() { return true; } /** * Predefined path | [x] | Sdks Combo | | * * Custom path | [ ] | [ path to sdk ] | [browse] | */ @Override protected Composite createTopLevelComposite(Composite parent) { initializeDialogUnits(parent); Composite container = new Composite(parent, SWT.NONE); container.setLayout(new GridLayout()); Group sdkSelectionGroup = new Group(container, SWT.NONE); sdkSelectionGroup.setText("Select GWT SDK"); sdkSelectionGroup.setLayout(new GridLayout(3, false)); sdkSelectionGroup.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false)); Label lblSdks = new Label(sdkSelectionGroup, SWT.NONE); lblSdks.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1)); lblSdks.setText("Select from the defined SDKs"); new Label(sdkSelectionGroup, SWT.NONE); Button radioDefined = new Button(sdkSelectionGroup, SWT.RADIO); radioDefined.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { enablePaths(false); } }); radioDefined.setSelection(true); comboViewer = new ComboViewer(sdkSelectionGroup, SWT.NONE); comboViewer.setLabelProvider(new LabelProvider() { @Override @SuppressWarnings("unchecked") public String getText(Object element) { GwtSdk sdk = (GwtSdk) element; return sdk.getName(); } }); comboViewer.setContentProvider(new ArrayContentProvider()); comboViewerCombo = comboViewer.getCombo(); comboViewerCombo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); comboViewerCombo.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(final SelectionEvent e) { setSdkSelection(); } }); btnAddSdk = new Button(sdkSelectionGroup, SWT.NONE); btnAddSdk.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { openGwtPreferencesDialog(); } }); btnAddSdk.setText("Add SDK"); Label lblBlank = new Label(sdkSelectionGroup, SWT.NONE); new Label(sdkSelectionGroup, SWT.NONE); new Label(sdkSelectionGroup, SWT.NONE); Label lblCustomPath = new Label(sdkSelectionGroup, SWT.NONE); lblCustomPath.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1)); lblCustomPath.setText("Select a custom SDK location"); new Label(sdkSelectionGroup, SWT.NONE); Button radioPath = new Button(sdkSelectionGroup, SWT.RADIO); radioPath.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { enablePaths(true); } }); textPath = new Text(sdkSelectionGroup, SWT.BORDER); textPath.setEditable(false); textPath.setEnabled(false); textPath.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); btnDirBrowser = new Button(sdkSelectionGroup, SWT.NONE); btnDirBrowser.setEnabled(false); btnDirBrowser.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { showDirectoryDialog(); } }); btnDirBrowser.setText("Select SDK Directory"); addSdkOptionsToCombo(); Dialog.applyDialogFont(container); synchHelper.synchAllUIWithModel(); return container; } private void openGwtPreferencesDialog() { if (Window.OK == PreferencesUtil.createPreferenceDialogOn(getShell(), GwtPreferencePage.ID, new String[] {GwtPreferencePage.ID}, null).open()) { addSdkOptionsToCombo(); } } protected void setSdkSelection() { ISelection selection = comboViewer.getSelection(); if (!selection.isEmpty()) { IStructuredSelection structuredSelection = (IStructuredSelection) selection; // Get the selected SDK GwtSdk selectedGwtSdk = (GwtSdk) structuredSelection.getFirstElement(); // Set selection to model model.setProperty(GWT_SDK, selectedGwtSdk); } } /** * Setup the combo viewer combo with the list of predefined sdks. */ private void addSdkOptionsToCombo() { List<GwtSdk> sdks = GWTPreferences.getSdkManager().getSdksSortedList(); // List selections in combo comboViewer.setInput(sdks); // Update UI comboViewer.refresh(); // Select the first item if (comboViewerCombo.getSelectionIndex() < 0 && sdks.size() > 0) { GwtSdk defaultSdk = GWTPreferences.getDefaultRuntime(); model.setProperty(GWT_SDK, defaultSdk); ISelection selection = new StructuredSelection(defaultSdk); comboViewer.setSelection(selection, true); } } private void showDirectoryDialog() { DirectoryDialog directoryDialog = new DirectoryDialog(getShell(), SWT.OPEN); directoryDialog.setFilterPath("Choose SDK Directory"); directoryDialog.setMessage("Please select the root directory of your SDK installation."); String pathToDir = directoryDialog.open(); if (pathToDir != null) { textPath.setText(pathToDir); } } private void enablePaths(boolean enablePathEntry) { comboViewerCombo.setEnabled(!enablePathEntry); btnAddSdk.setEnabled(!enablePathEntry); textPath.setEnabled(enablePathEntry); btnDirBrowser.setEnabled(enablePathEntry); } @Override protected String[] getValidationPropertyNames() { return new String[] {GWT_SDK}; } }