| /******************************************************************************* |
| * Copyright (c) 2012 Alexej Strelzow. |
| * 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 |
| * |
| * Contributors: |
| * Alexej Strelzow - initial API and implementation |
| ******************************************************************************/ |
| package org.eclipse.babel.tapiji.tools.core.ui.dialogs; |
| |
| import org.eclipse.babel.tapiji.tools.core.ui.ResourceBundleManager; |
| import org.eclipse.babel.tapiji.tools.core.ui.utils.ResourceUtils; |
| import org.eclipse.jface.dialogs.TitleAreaDialog; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.events.ModifyEvent; |
| import org.eclipse.swt.events.ModifyListener; |
| 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.Composite; |
| import org.eclipse.swt.widgets.Control; |
| import org.eclipse.swt.widgets.Label; |
| import org.eclipse.swt.widgets.Shell; |
| import org.eclipse.swt.widgets.Text; |
| |
| /** |
| * The dialog between the user and the system. System wants to know what the new |
| * name of the selected key is. |
| * |
| * @author Alexej Strelzow |
| */ |
| public class KeyRefactoringDialog extends TitleAreaDialog { |
| |
| /*** Dialog Model ***/ |
| private DialogConfiguration config; |
| private String selectedKey = ""; |
| |
| public static final String ALL_LOCALES = "All available"; |
| |
| /** GUI */ |
| private Button okButton; |
| private Button cancelButton; |
| |
| private Label projectLabel; |
| private Label resourceBundleLabel; |
| private Label oldKeyLabel; |
| private Label newKeyLabel; |
| private Label languageLabel; |
| |
| private Text oldKeyText; |
| private Text newKeyText; |
| private Text projectText; |
| private Text resourceBundleText; |
| private Text languageText; |
| |
| /** |
| * Meta data for the dialog. |
| * |
| * @author Alexej Strelzow |
| */ |
| public class DialogConfiguration { |
| |
| String projectName; |
| String preselectedKey; |
| String preselectedBundle; |
| |
| String newKey; |
| String selectedLocale; |
| |
| public String getProjectName() { |
| return projectName; |
| } |
| |
| public void setProjectName(String projectName) { |
| this.projectName = projectName; |
| } |
| |
| public String getPreselectedKey() { |
| return preselectedKey; |
| } |
| |
| public void setPreselectedKey(String preselectedKey) { |
| this.preselectedKey = preselectedKey; |
| } |
| |
| public String getPreselectedBundle() { |
| return preselectedBundle; |
| } |
| |
| public void setPreselectedBundle(String preselectedBundle) { |
| this.preselectedBundle = preselectedBundle; |
| } |
| |
| public String getNewKey() { |
| return newKey; |
| } |
| |
| public void setNewKey(String newKey) { |
| this.newKey = newKey; |
| } |
| |
| public String getSelectedLocale() { |
| return selectedLocale; |
| } |
| |
| public void setSelectedLocale(String selectedLocale) { |
| this.selectedLocale = selectedLocale; |
| } |
| } |
| |
| /** |
| * Constructor. |
| * |
| * @param parentShell |
| * The parent's shell |
| */ |
| public KeyRefactoringDialog(Shell parentShell) { |
| super(parentShell); |
| } |
| |
| /** |
| * {@inheritDoc} |
| */ |
| @Override |
| protected Control createDialogArea(Composite parent) { |
| |
| Composite dialogArea = (Composite) super.createDialogArea(parent); |
| initLayout(dialogArea); |
| |
| return super.createDialogArea(parent); |
| } |
| |
| /** |
| * Initializes the layout |
| * |
| * @param parent |
| * The parent |
| */ |
| private void initLayout(Composite parent) { |
| final GridLayout layout = new GridLayout(1, true); |
| parent.setLayout(layout); |
| |
| GridLayout gl = new GridLayout(2, true); |
| GridData gd = new GridData(SWT.CENTER, SWT.CENTER, true, true); |
| |
| Composite master = new Composite(parent, SWT.NONE); |
| master.setLayout(gl); |
| master.setLayoutData(gd); |
| |
| projectLabel = new Label(master, SWT.NONE); |
| projectLabel.setText("Project:"); |
| |
| projectText = new Text(master, SWT.BORDER); |
| projectText.setLayoutData(new GridData(GridData.FILL, GridData.FILL, |
| true, true, 1, 1)); |
| projectText.setText(config.getProjectName()); |
| projectText.setEnabled(false); |
| |
| resourceBundleLabel = new Label(master, SWT.NONE); |
| resourceBundleLabel.setText("Resource-Bundle:"); |
| |
| resourceBundleText = new Text(master, SWT.BORDER); |
| resourceBundleText.setLayoutData(new GridData(GridData.FILL, |
| GridData.FILL, true, true, 1, 1)); |
| resourceBundleText.setText(config.getPreselectedBundle()); |
| resourceBundleText.setEnabled(false); |
| |
| languageLabel = new Label(master, SWT.NONE); |
| languageLabel.setText("Language (Country):"); |
| |
| languageText = new Text(master, SWT.BORDER); |
| languageText.setLayoutData(new GridData(GridData.FILL, GridData.FILL, |
| true, true, 1, 1)); |
| languageText.setText(ALL_LOCALES); |
| languageText.setEnabled(false); |
| |
| oldKeyLabel = new Label(master, SWT.NONE); |
| oldKeyLabel.setText("Old key name:"); |
| |
| oldKeyText = new Text(master, SWT.BORDER); |
| oldKeyText.setLayoutData(new GridData(GridData.FILL, GridData.FILL, |
| true, true, 1, 1)); |
| oldKeyText.setText(config.getPreselectedKey()); |
| oldKeyText.setEnabled(false); |
| |
| newKeyLabel = new Label(master, SWT.NONE); |
| newKeyLabel.setText("New key name:"); |
| |
| newKeyText = new Text(master, SWT.BORDER); |
| newKeyText.setText(config.getPreselectedKey()); |
| newKeyText.setSelection(0, newKeyText.getText().length()); |
| newKeyText.setLayoutData(new GridData(GridData.FILL, GridData.FILL, |
| true, true, 1, 1)); |
| |
| newKeyText.setFocus(); |
| |
| newKeyText.addModifyListener(new ModifyListener() { |
| |
| @Override |
| public void modifyText(ModifyEvent e) { |
| selectedKey = newKeyText.getText(); |
| validate(); |
| } |
| }); |
| } |
| |
| /** |
| * @param config |
| * Sets the config |
| */ |
| public void setDialogConfiguration(DialogConfiguration config) { |
| this.config = config; |
| } |
| |
| /** |
| * {@inheritDoc} |
| */ |
| @Override |
| protected void configureShell(Shell newShell) { |
| super.configureShell(newShell); |
| newShell.setText("Rename resource key"); |
| } |
| |
| /** |
| * {@inheritDoc} |
| */ |
| @Override |
| public void create() { |
| // TODO Auto-generated method stub |
| super.create(); |
| this.setTitle("Rename resource key"); |
| this.setMessage("Please, specify the name of the new key. \r\n" |
| + "The new value will automatically replace the old ones."); |
| } |
| |
| /** |
| * @return The config |
| */ |
| public DialogConfiguration getConfig() { |
| return this.config; |
| } |
| |
| /** |
| * Validates all inputs of the CreateResourceBundleEntryDialog |
| */ |
| protected void validate() { |
| // Check Resource-Bundle ids |
| boolean keyValid = false; |
| boolean keyValidChar = ResourceUtils.isValidResourceKey(selectedKey); |
| |
| String resourceBundle = config.getPreselectedBundle(); |
| |
| ResourceBundleManager manager = ResourceBundleManager.getManager(config |
| .getProjectName()); |
| |
| if (!manager.isResourceExisting(resourceBundle, selectedKey)) { |
| keyValid = true; |
| } |
| // print Validation summary |
| String errorMessage = null; |
| if (selectedKey.trim().length() == 0) { |
| errorMessage = "No resource key specified."; |
| } else if (!keyValidChar) { |
| errorMessage = "The specified resource key contains invalid characters."; |
| } else if (!keyValid) { |
| errorMessage = "The specified resource key is already existing."; |
| } else { |
| if (okButton != null) |
| okButton.setEnabled(true); |
| } |
| |
| setErrorMessage(errorMessage); |
| if (okButton != null && errorMessage != null) { |
| okButton.setEnabled(false); |
| } else { |
| this.config.setNewKey(selectedKey); |
| this.config.setSelectedLocale(ALL_LOCALES); |
| } |
| } |
| |
| /** |
| * {@inheritDoc} |
| */ |
| @Override |
| protected void createButtonsForButtonBar(Composite parent) { |
| okButton = createButton(parent, OK, "Ok", true); |
| okButton.addSelectionListener(new SelectionAdapter() { |
| @Override |
| public void widgetSelected(SelectionEvent e) { |
| // Set return code |
| setReturnCode(OK); |
| close(); |
| } |
| }); |
| |
| cancelButton = createButton(parent, CANCEL, "Cancel", false); |
| cancelButton.addSelectionListener(new SelectionAdapter() { |
| @Override |
| public void widgetSelected(SelectionEvent e) { |
| setReturnCode(CANCEL); |
| close(); |
| } |
| }); |
| |
| okButton.setEnabled(true); |
| cancelButton.setEnabled(true); |
| } |
| |
| } |