Issue #1298 Changes for non-blocking WeatherElementGroupDialog.

Changes from reviewer comments.

Change-Id: Ib21a454575115f26da165704454caaa76d86b5ac

Former-commit-id: 4424131662 [formerly 5e805da0e1] [formerly 049ecefe1d] [formerly b32480ed08 [formerly 049ecefe1d [formerly d8b828e6bc0a47caa01165cdb22e87f301534e30]]]
Former-commit-id: b32480ed08
Former-commit-id: 488a54e8e90966466526378b7880051a98a03d8f [formerly af0ad0433b]
Former-commit-id: be24ca5ed6
This commit is contained in:
Roger Ferrel 2012-11-13 16:20:28 -06:00
parent 6a2f93a290
commit ffefe1fe90
2 changed files with 110 additions and 68 deletions

View file

@ -54,6 +54,7 @@ import com.raytheon.viz.core.mode.CAVEMode;
import com.raytheon.viz.gfe.core.DataManager;
import com.raytheon.viz.gfe.core.parm.Parm;
import com.raytheon.viz.ui.dialogs.CaveJFACEDialog;
import com.raytheon.viz.ui.dialogs.ICloseCallback;
import com.raytheon.viz.ui.widgets.ToggleSelectList;
/**
@ -73,6 +74,7 @@ import com.raytheon.viz.ui.widgets.ToggleSelectList;
* database list from ParmManager
* not EDEX.
* 10/30/2012 1298 rferrel Code clean up non-blocking dialog.
* Changes for non-blocking WeatherElementGroupDialog.
* </pre>
*
* @author ebabin
@ -198,33 +200,49 @@ public class WeatherElementBrowserDialog extends CaveJFACEDialog {
/**
* Show the save weather element dialog.
*/
private void showSaveWeatherElementGroup(Menu loadWeatherElementGroupMenu) {
WeatherElementGroupDialog dialog = new WeatherElementGroupDialog(
private void showSaveWeatherElementGroup(
final Menu loadWeatherElementGroupMenu) {
// The dialog being opened is modal to the parent dialog. This will
// prevent the launching of another dialog until the modal dialog is
// closed.
final WeatherElementGroupDialog dialog = new WeatherElementGroupDialog(
getShell(), dataManager, true);
dialog.setBlockOnOpen(true);
dialog.setBlockOnOpen(false);
dialog.setCloseCallback(new ICloseCallback() {
@Override
public void dialogClosed(Object returnValue) {
if (returnValue instanceof Integer) {
int returnCode = (Integer) returnValue;
if (returnCode == Window.OK) {
String groupName = dialog.getSelectedItem();
doSaveWeatherElementGroup(loadWeatherElementGroupMenu,
groupName);
}
}
}
});
dialog.open();
if (dialog.getReturnCode() == Window.OK) {
String groupName = dialog.getSelectedItem();
if (groupName != null) {
ParmID[] selectedParmIds = getSelectedParmIDS();
if ((selectedParmIds != null) && (selectedParmIds.length > 0)) {
ParmID[] availIds = selectedType.getPossibleParmIDs();
if ((availIds != null) && (availIds.length != 0)) {
dataManager.getWEGroupManager().save(groupName,
selectedParmIds, availIds);
boolean alreadyListed = false;
for (MenuItem item : loadWeatherElementGroupMenu
.getItems()) {
if (item.getText().equals(groupName)) {
alreadyListed = true;
}
}
if (!alreadyListed) {
addWEGroup(loadWeatherElementGroupMenu, groupName);
}
private void doSaveWeatherElementGroup(Menu loadWeatherElementGroupMenu,
String groupName) {
if (groupName != null) {
ParmID[] selectedParmIds = getSelectedParmIDS();
if ((selectedParmIds != null) && (selectedParmIds.length > 0)) {
ParmID[] availIds = selectedType.getPossibleParmIDs();
if ((availIds != null) && (availIds.length != 0)) {
dataManager.getWEGroupManager().save(groupName,
selectedParmIds, availIds);
boolean alreadyListed = false;
for (MenuItem item : loadWeatherElementGroupMenu.getItems()) {
if (item.getText().equals(groupName)) {
alreadyListed = true;
}
}
if (!alreadyListed) {
addWEGroup(loadWeatherElementGroupMenu, groupName);
}
}
}
}
@ -233,22 +251,36 @@ public class WeatherElementBrowserDialog extends CaveJFACEDialog {
/**
* Show delete weather element dialog.
*/
private void showDeleteWeatherElementGroup(Menu loadWeatherElementGroupMenu) {
private void showDeleteWeatherElementGroup(
final Menu loadWeatherElementGroupMenu) {
// The dialog being opened is modal to the parent dialog. This will
// prevent the launching of another dialog until the modal dialog is
// closed.
final WeatherElementGroupDialog dialog = new WeatherElementGroupDialog(
getShell(), this.dataManager, false);
dialog.setBlockOnOpen(true);
dialog.open();
if ((dialog.getReturnCode() == Window.OK)
&& (dialog.getSelectedItem() != null)) {
String groupName = dialog.getSelectedItem();
// we may have just overridden a site or base level group, need to
// verify menu item can be deleted
if (dataManager.getWEGroupManager().remove(groupName)
&& !dataManager.getWEGroupManager().getInventory()
.contains(groupName)) {
removeWEGroup(loadWeatherElementGroupMenu, groupName);
dialog.setBlockOnOpen(false);
dialog.setCloseCallback(new ICloseCallback() {
@Override
public void dialogClosed(Object returnValue) {
if (returnValue instanceof Integer) {
int returnCode = (Integer) returnValue;
if (returnCode == Window.OK
&& dialog.getSelectedItem() != null) {
String groupName = dialog.getSelectedItem();
// we may have just overridden a site or base level
// group, need to verify menu item can be deleted
if (dataManager.getWEGroupManager().remove(groupName)
&& !dataManager.getWEGroupManager()
.getInventory().contains(groupName)) {
removeWEGroup(loadWeatherElementGroupMenu,
groupName);
}
}
}
}
}
});
dialog.open();
}
/**

View file

@ -20,6 +20,7 @@
package com.raytheon.viz.gfe.dialogs;
import java.util.ArrayList;
import java.util.Arrays;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.swt.SWT;
@ -29,8 +30,10 @@ 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.List;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Shell;
@ -53,6 +56,7 @@ import com.raytheon.viz.ui.dialogs.CaveJFACEDialog;
* ------------ ---------- ----------- --------------------------
* 02/22/2008 Eric Babin Initial Creation
* 04/17/2009 #2282 rjpeter Added confirmation message on delete.
* 11/14/2012 #1298 rferrel Changes for non-blocking dialog.
* </pre>
*
* @author ebabin
@ -60,7 +64,7 @@ import com.raytheon.viz.ui.dialogs.CaveJFACEDialog;
*/
public class WeatherElementGroupDialog extends CaveJFACEDialog {
private static final transient IUFStatusHandler statusHandler = UFStatus
private final transient IUFStatusHandler statusHandler = UFStatus
.getHandler(WeatherElementGroupDialog.class);
private Composite top;
@ -75,6 +79,8 @@ public class WeatherElementGroupDialog extends CaveJFACEDialog {
private Text groupField;
private Button okButton;
private String selectedItem;
private DataManager dataManager;
@ -84,9 +90,11 @@ public class WeatherElementGroupDialog extends CaveJFACEDialog {
public WeatherElementGroupDialog(Shell parent, DataManager dataManager,
boolean saveType) {
super(parent);
setShellStyle(SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
this.dataManager = dataManager;
this.wegManager = this.dataManager.getWEGroupManager();
this.saveType = saveType;
this.selectedItem = "";
this.names = new ArrayList<String>();
this.protectedNames = new ArrayList<String>();
@ -119,6 +127,12 @@ public class WeatherElementGroupDialog extends CaveJFACEDialog {
private void initializeComponents() {
if (names.size() == 0 && !saveType) {
Label label = new Label(top, SWT.CENTER);
label.setText("No groups available for deletion.");
return;
}
GridData data = new GridData(GridData.FILL_BOTH);
groupList = new List(top, SWT.BORDER | SWT.SINGLE);
@ -135,16 +149,21 @@ public class WeatherElementGroupDialog extends CaveJFACEDialog {
}
}
});
groupList.setItems(names.toArray(new String[names.size()]));
String[] items = names.toArray(new String[names.size()]);
Arrays.sort(items);
groupList.setItems(items);
groupList.setSelection(0);
groupList.deselectAll();
groupList.setLayoutData(data);
groupField = new Text(top, SWT.BORDER);
data = new GridData(GridData.FILL_HORIZONTAL);
groupField.setLayoutData(data);
groupField.setEnabled(saveType);
groupField.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent arg0) {
selectedItem = groupField.getText();
selectedItem = groupField.getText().trim();
okButton.setEnabled(selectedItem.length() > 0);
}
});
@ -177,7 +196,8 @@ public class WeatherElementGroupDialog extends CaveJFACEDialog {
} else {
label = "Delete";
}
createButton(parent, IDialogConstants.OK_ID, label, true);
okButton = createButton(parent, IDialogConstants.OK_ID, label, true);
okButton.setEnabled(false);
createButton(parent, IDialogConstants.CANCEL_ID,
IDialogConstants.CANCEL_LABEL, false);
}
@ -193,37 +213,27 @@ public class WeatherElementGroupDialog extends CaveJFACEDialog {
@Override
protected void okPressed() {
boolean ok = true;
String groupName = getSelectedItem();
if (!saveType) {
String groupName = getSelectedItem();
if (!FileUtil.isValidFilename(groupName)) {
MessageBox mb = new MessageBox(super.getShell(), SWT.ICON_ERROR
| SWT.OK);
mb.setText("Invalid Group Name");
mb.setMessage("Group name may only contain the following characters: "
+ FileUtil.VALID_FILENAME_CHARS);
ok = false;
} else if (!protectedNames.contains(groupName)
&& names.contains(groupName)) {
MessageBox mb = new MessageBox(super.getShell(),
SWT.ICON_QUESTION | SWT.OK | SWT.CANCEL);
mb.setText("Item Delete");
mb.setMessage(getSelectedItem() + " will be Deleted.");
if (!FileUtil.isValidFilename(groupName)) {
MessageBox mb = new MessageBox(super.getShell(), SWT.ICON_ERROR
| SWT.OK);
mb.setText("Invalid Group Name");
mb.setMessage("Group name may only contain the following characters: "
+ FileUtil.VALID_FILENAME_CHARS);
mb.open();
ok = false;
} else if (protectedNames.contains(groupName)) {
statusHandler.handle(Priority.SIGNIFICANT, "Weather Element Group "
+ getSelectedItem() + " is protected or an invalid name.");
ok = false;
} else if (!saveType) {
MessageBox mb = new MessageBox(super.getShell(), SWT.ICON_QUESTION
| SWT.OK | SWT.CANCEL);
mb.setText("Item Delete");
mb.setMessage(getSelectedItem() + " will be Deleted.");
if (mb.open() == SWT.CANCEL) {
ok = false;
}
} else {
statusHandler.handle(Priority.SIGNIFICANT,
"Weather Element Group " + groupName
+ " is protected or an invalid name.");
ok = false;
}
} else {
if (protectedNames.contains(getSelectedItem())) {
statusHandler.handle(Priority.SIGNIFICANT,
"Weather Element Group " + getSelectedItem()
+ " is protected or an invalid name.");
if (mb.open() == SWT.CANCEL) {
ok = false;
}
}