/* * Copyright 2008-2012 Amazon Technologies, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at: * * http://aws.amazon.com/apache2.0 * * This file 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.amazonaws.eclipse.core.ui.preferences; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; import com.amazonaws.eclipse.core.AwsToolkitCore; import com.amazonaws.eclipse.core.preferences.PreferenceConstants; import com.amazonaws.eclipse.core.regions.Region; import com.amazonaws.eclipse.core.regions.RegionUtils; import com.amazonaws.eclipse.core.ui.WebLinkListener; /** * Preference page for AWS region preferences. */ public class RegionsPreferencePage extends AwsToolkitPreferencePage implements IWorkbenchPreferencePage { /** Combo box allowing the user to override the default AWS region */ private Combo regionsCombo; /** * Constructs a RegionPreferencesPage and sets the title and description. */ public RegionsPreferencePage() { super("Region Preferences"); this.setPreferenceStore(AwsToolkitCore.getDefault().getPreferenceStore()); this.setDescription("Region Preferences"); } /* (non-Javadoc) * @see org.eclipse.jface.preference.PreferencePage#performOk() */ @Override public boolean performOk() { String regionId = (String)regionsCombo.getData(regionsCombo.getText()); getPreferenceStore().setValue(PreferenceConstants.P_DEFAULT_REGION, regionId); return super.performOk(); } /* (non-Javadoc) * @see org.eclipse.jface.preference.PreferencePage#createContents(org.eclipse.swt.widgets.Composite) */ @Override protected Control createContents(Composite parent) { Composite composite = new Composite(parent, SWT.LEFT); composite.setLayout(new GridLayout()); composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); WebLinkListener webLinkListener = new WebLinkListener(); createRegionSection(composite, webLinkListener); createSpacer(composite); return composite; } /* (non-Javadoc) * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench) */ public void init(IWorkbench workbench) {} /** * Creates the region section in this preference page. * * @param parent * The parent composite in which the region section should be * placed. * @param webLinkListener * The link listener to use for any Links. */ private void createRegionSection(Composite parent, WebLinkListener webLinkListener) { Group regionGroup = newGroup("Regions:", parent); String regionsHelpLinkText = "AWS regions allow you to position your AWS resources in different geographical areas, " + "enabling you to keep your application's data close to your customers, and add redundancy to your system, since " + "each region is isolated from each other.\n"; newLink(webLinkListener, regionsHelpLinkText, regionGroup); Label label = new Label(regionGroup, SWT.NONE); label.setText("Default Region:"); regionsCombo = new Combo(regionGroup, SWT.DROP_DOWN | SWT.READ_ONLY); regionsCombo.removeAll(); String currentDefaultRegionId = getPreferenceStore().getString(PreferenceConstants.P_DEFAULT_REGION); for (Region region : RegionUtils.getRegions()) { regionsCombo.add(region.getName()); regionsCombo.setData(region.getName(), region.getId()); if (currentDefaultRegionId.equals(region.getId())) { regionsCombo.setText(region.getName()); } } if (regionsCombo.getText() == null || regionsCombo.getText().length() == 0) { regionsCombo.select(0); } GridData gridData = new GridData(); gridData.horizontalSpan = 2; regionsCombo.setLayoutData(gridData); tweakLayout((GridLayout)regionGroup.getLayout()); } }