blob: 81fb0f2d96cefdf17bc927e74944ab9a9e32227c [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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://www.apache.org/licenses/LICENSE-2.0
*
* 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 org.apache.uima.taeconfigurator.editors.ui;
import java.util.AbstractList;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.TreeSet;
import org.apache.uima.resource.metadata.ConfigurationGroup;
import org.apache.uima.resource.metadata.ConfigurationParameter;
import org.apache.uima.resource.metadata.ConfigurationParameterDeclarations;
import org.apache.uima.resource.metadata.ConfigurationParameterSettings;
import org.apache.uima.taeconfigurator.InternalErrorCDE;
import org.apache.uima.taeconfigurator.Messages;
import org.apache.uima.taeconfigurator.editors.MultiPageEditor;
import org.apache.uima.taeconfigurator.model.ConfigGroup;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeItem;
/**
*/
public abstract class AbstractSectionParm extends AbstractSection {
public final static String NOT_IN_ANY_GROUP = Messages
.getString("AbstractSectionParm.notInAnyGroup"); //$NON-NLS-1$
public final static String COMMON_GROUP = Messages.getString("AbstractSectionParm.common"); //$NON-NLS-1$
// maintainers note: names below have extra trailing blanks to get them to approximately line up
// where possible
protected final static String DELEGATE_HEADER = Messages
.getString("AbstractSectionParm.delegateKeyName"); //$NON-NLS-1$
protected final static String FLOWCTLR_HEADER = "Flow Controller Key Name: ";
protected final static String GROUP_HEADER = Messages
.getString("AbstractSectionParm.headerGroupNames"); //$NON-NLS-1$
protected final static String COMMON_GROUP_HEADER = Messages
.getString("AbstractSectionParm.headerCommon"); //$NON-NLS-1$
protected final static String NOT_IN_ANY_GROUP_HEADER = Messages
.getString("AbstractSectionParm.headerNotInAnyGroup"); //$NON-NLS-1$
protected final String OVERRIDE_HEADER = Messages.getString("AbstractSectionParm.overrides"); // nonstatic
// for
// easy
// ref
// in
// subclass
// //$NON-NLS-1$
protected final static String MULTI_VALUE_INDICATOR = "Multi "; //$NON-NLS-1$
protected final static String SINGLE_VALUE_INDICATOR = "Single "; //$NON-NLS-1$
protected final static String OPTIONAL_INDICATOR = "Opt "; //$NON-NLS-1$
protected final static String REQUIRED_INDICATOR = "Req "; //$NON-NLS-1$
protected final String nameHeader = " Name: "; //$NON-NLS-1$
protected final static Map typeNamesW = new HashMap(4);
static { // map extra spaces to get these to take the same
typeNamesW.put("Boolean", "Boolean"); //$NON-NLS-1$ //$NON-NLS-2$
typeNamesW.put("Float", "Float "); //$NON-NLS-1$ //$NON-NLS-2$
typeNamesW.put(Messages.getString("AbstractSectionParm.16"), "Integer "); //$NON-NLS-1$ //$NON-NLS-2$
typeNamesW.put("String", "String "); //$NON-NLS-1$ //$NON-NLS-2$
}
protected Tree tree;
protected Tree parameterSectionTree = null;
protected boolean showOverrides;
protected boolean splitGroupNames;
protected ConfigurationParameter[] commonParms;
protected Map groupParms;
protected ConfigurationParameterDeclarations cpd;
// settings set by other page when it is created
protected ParameterSettingsSection settings = null;
protected Tree settingsTree = null;
public void setSettings(ParameterSettingsSection v) {
settings = v;
settingsTree = v.getTree();
}
/**
* @param editor
* @param parent
* @param hasDescription
*/
public AbstractSectionParm(MultiPageEditor aEditor, Composite parent, String header,
String description) {
super(aEditor, parent, header, description);
}
/*
* (non-Javadoc)
*
* @see org.apache.uima.taeconfigurator.editors.ui.AbstractSection#enable()
*/
public void enable() {
}
/*
* (non-Javadoc)
*
* @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event)
*/
public abstract void handleEvent(Event event);
/*************************************************************************************************
* methods shared with multiple param pages ****************************************
*/
/**
* Two modes: settingsDisplayMode - if true, shows groups one name at a time, and puts all
* <common> parms in other groups
*/
protected void clearAndRefillTree(boolean usingGroups) {
cpd = getConfigurationParameterDeclarations();
tree.removeAll();
// when filling ParameterSection, it might or might not have
// settings tree set, depending on which panel is shown first
// Filling parmaterSection on initial refresh should not update, in any case, the
// the settings page; it has its own refresh.
// To prevent this, we turn off the settingsTree reference while filling
// and restore it at the end
Tree savedSettingsTree = settingsTree;
settingsTree = null;
groupParms = new TreeMap();
try {
// tree has 2 dummy groups
// first is the <Not in any group>, 2nd is the <Common>
if (null == cpd.getConfigurationParameters())
cpd.setConfigurationParameters(configurationParameterArray0);
fillGroup(cpd.getConfigurationParameters(), NOT_IN_ANY_GROUP, null);
if (null == cpd.getCommonParameters())
cpd.setCommonParameters(configurationParameterArray0);
if (usingGroups) {
fillGroup(cpd.getCommonParameters(), COMMON_GROUP, null);
}
ConfigurationGroup[] groups = cpd.getConfigurationGroups();
for (int i = 0; i < groups.length; i++) {
ConfigurationParameter[] cps = groups[i].getConfigurationParameters();
if (null == cps)
groups[i].setConfigurationParameters(cps = configurationParameterArray0);
fillGroup(groups[i].getConfigurationParameters(), groups[i].getNames(), groups[i]);
}
if (splitGroupNames)
fillGroupsFromGroupParms();
expandAllItems(tree.getItems()); // expand for overrides or groups
} finally {
settingsTree = savedSettingsTree;
groupParms = null;
}
}
private void expandAllItems(TreeItem[] items) {
TreeItem[] containedItems;
for (int i = 0; i < items.length; i++) {
items[i].setExpanded(true);
containedItems = items[i].getItems();
if (null != containedItems)
expandAllItems(containedItems);
}
}
/**
* Called by refresh; add a normal named group and a set of parmaters
*/
private void fillGroup(ConfigurationParameter[] parms, String[] names, ConfigurationGroup modelCG) {
fillGroup(parms, groupNameArrayToString(names), modelCG);
}
/**
* called by refresh() for <Common> and refresh() for named, via another path with names as array
* first converted to concatenated string.
*
* @param parms
* @param names
*/
private void fillGroup(ConfigurationParameter[] parms, String names, ConfigurationGroup modelCG) {
if (splitGroupNames) {
if (names.equals(COMMON_GROUP)) {
commonParms = parms;
} else {
String[] nameArray = groupNamesToArray(names);
if (nameArray.length == 1 && nameArray[0].equals(NOT_IN_ANY_GROUP)) {
TreeItem groupItem = addGroupToGUI(nameArray[0], modelCG);
fill(parms, groupItem);
} else
for (int i = 0; i < nameArray.length; i++) {
List g = (List) groupParms.get(nameArray[i]);
if (null == g) {
g = new ArrayList();
groupParms.put(nameArray[i], g);
}
g.add(new Object[] { modelCG, parms });
}
}
} else {
if (names.equals(COMMON_GROUP))
commonParms = parms;
TreeItem groupItem = addGroupToGUI(names, modelCG);
fill(parms, groupItem);
}
}
private void fillGroupsFromGroupParms() {
for (Iterator grpInfo = groupParms.entrySet().iterator(); grpInfo.hasNext();) {
Map.Entry entry = (Map.Entry) grpInfo.next();
String key = (String) entry.getKey();
List pairs = (List) entry.getValue();
TreeItem groupItem = addGroupToGUI(key, null); // modelCG not available, but not used
for (Iterator pi = pairs.iterator(); pi.hasNext();) {
Object[] v = (Object[]) pi.next();
ConfigurationParameter[] parms = (ConfigurationParameter[]) v[1];
fill(parms, groupItem);
}
fill(commonParms, groupItem);
}
}
/**
* called by refresh() when no groups, just plain parm sets, also for group case
*
* @param parms
* @param group
* <Not in any group> if not in a group, otherwise the group tree item
*/
protected void fill(ConfigurationParameter[] parms, TreeItem group) {
if (parms == null)
return;
for (int i = 0; i < parms.length; i++) {
addNewConfigurationParameterToGUI(parms[i], group);
}
}
public static String groupNameArrayToString(String[] strings) {
StringBuffer b = new StringBuffer();
for (int i = 0; i < strings.length; i++) {
if (i > 0)
b.append(" "); //$NON-NLS-1$
b.append(strings[i]);
}
return b.toString();
}
protected String[] groupNamesToArray(String names) {
if (names.equals(NOT_IN_ANY_GROUP))
return new String[] { names };
AbstractList items = new ArrayList();
int start = 0;
int end;
while (start < names.length() && (names.charAt(start) == ' '))
start++;
for (; start < names.length();) {
end = names.indexOf(' ', start);
if (end == -1) {
items.add(names.substring(start));
break;
}
items.add(names.substring(start, end));
start = end;
while (start < names.length() && names.charAt(start) == ' ')
start++;
}
return (String[]) items.toArray(stringArray0);
}
/**
* Takes an existing model parm and fills a pre-allocated treeItem. 3 callers:
* addNewConfigurationParameter, alterExistingConfigurationParamater (editing), fill (bulk update
* from refresh)
*
* @param item
* @param parm
*/
protected void fillParmItem(TreeItem item, ConfigurationParameter parm) {
item.setText(parmGuiString(parm));
// // set data if tree == parmsection tree
// if (item.getParent() == parameterSectionTree)
// back link used to find corresponding model parm decl from tree item
item.setData(parm);
}
protected String parmGuiString(ConfigurationParameter parm) {
return ((parm.isMultiValued()) ? MULTI_VALUE_INDICATOR : SINGLE_VALUE_INDICATOR)
+ ((parm.isMandatory()) ? REQUIRED_INDICATOR : OPTIONAL_INDICATOR)
+ typeNamesW.get(parm.getType()) + " " + nameHeader + //$NON-NLS-1$
(parm.getName());
}
protected void setGroupText(TreeItem groupItem, String names) {
if (names.equals(COMMON_GROUP))
groupItem.setText(COMMON_GROUP_HEADER);
else if (names.equals(NOT_IN_ANY_GROUP))
groupItem.setText(NOT_IN_ANY_GROUP_HEADER);
else
// next line formats the names with the right number of spaces and makes it
// possible to do future equal compares
groupItem.setText(GROUP_HEADER + groupNameArrayToString(groupNamesToArray(names)));
}
protected TreeItem addGroupToGUI(String names, ConfigurationGroup cg) {
TreeItem groupItem = new TreeItem(tree, SWT.NONE);
setGroupText(groupItem, names);
ConfigGroup mcg;
if (names.equals(COMMON_GROUP))
mcg = new ConfigGroup(cpd, ConfigGroup.COMMON);
else if (names.equals(NOT_IN_ANY_GROUP))
mcg = new ConfigGroup(cpd, ConfigGroup.NOT_IN_ANY_GROUP);
else
mcg = new ConfigGroup(cpd, cg);
groupItem.setData(mcg);
String[] nameArray = groupNamesToArray(names);
if (null != settingsTree) {
for (int i = 0; i < nameArray.length; i++) {
TreeItem[] settingsItems = settingsTree.getItems();
if (!containsGroup(nameArray[i], settingsItems)) {
TreeItem settingsItem = new TreeItem(settingsTree, SWT.NONE);
setGroupText(settingsItem, nameArray[i]);
settingsItem.setData(null);
fill(commonParms, settingsItem);
}
}
}
return groupItem;
}
private boolean containsGroup(String groupName, final TreeItem[] settingsItems) {
for (int i = 0; i < settingsItems.length; i++) {
if (groupName.equals(getName(settingsItems[i])))
return true;
}
return false;
}
/**
* This is called sometimes with Settings group
*
* @param newCP
* @param group -
* is never null. May be <Not in any group>, indicate no groups; may be the "<Common>"
* group; or may be a regular group with a set of group names
*/
protected void addNewConfigurationParameterToGUI(ConfigurationParameter newCP, TreeItem group) {
if (null == group)
throw new InternalErrorCDE("invalid state"); //$NON-NLS-1$
// is part of group but could be NOT_IN_ANY_GROUP
if (null != settingsTree) {
boolean isCommonOrNotInAnyGrp = COMMON_GROUP.equals(getName(group))
|| NOT_IN_ANY_GROUP.equals(getName(group));
TreeItem[] groups = getSettingsGroups(group);
for (int i = 0; i < groups.length; i++) {
// this next test tries to add parms so that common ones come at the end,
// and non-common ones come before the start of common ones.
TreeItem newParmGuiItem = (isCommonOrNotInAnyGrp) ? new TreeItem(groups[i], SWT.NONE)
: new TreeItem(groups[i], SWT.NONE, 0);
fillParmItem(newParmGuiItem, newCP);
}
}
// next only done for non-setting page
if (group.getParent() != settingsTree) {
TreeItem newItem;
fillParmItem(newItem = new TreeItem(group, SWT.NONE), newCP);
if (showOverrides) {
fillOverrides(newItem, newCP);
}
}
}
// this is overriden where needed
// here just make above fn compile OK
protected void fillOverrides(TreeItem parent, ConfigurationParameter modelCP) {
}
protected boolean isOverride(TreeItem item) {
return (item.getText().startsWith(OVERRIDE_HEADER));
}
protected boolean isParameter(TreeItem item) {
String s = item.getText();
return (!isGroup(item) && !s.startsWith(DELEGATE_HEADER) && !s.startsWith(FLOWCTLR_HEADER) && !item
.getText().startsWith(OVERRIDE_HEADER));
}
// Note: rest of code considers NOT_IN_ANY_GROUP to be a kind of group
protected boolean isGroup(TreeItem item) {
String s = item.getText();
return s.startsWith(GROUP_HEADER) || s.startsWith(COMMON_GROUP_HEADER)
|| s.startsWith(NOT_IN_ANY_GROUP_HEADER);
}
protected boolean isNOT_IN_ANY_GROUP(TreeItem item) {
return item.getText().startsWith(NOT_IN_ANY_GROUP_HEADER);
}
protected boolean isCommonGroup(TreeItem item) {
return item.getText().startsWith(COMMON_GROUP_HEADER);
}
protected boolean isDelegate(TreeItem item) {
return item.getText().startsWith(DELEGATE_HEADER) || item.getText().startsWith(FLOWCTLR_HEADER);
}
protected boolean isGroupSelection() {
return isGroup(tree.getSelection()[0]);
}
protected boolean isCommonGroupSelection() {
return isCommonGroup(tree.getSelection()[0]);
}
protected boolean isOverrideSelection() {
return isOverride(tree.getSelection()[0]);
}
protected boolean isParmSelection() {
return isParameter(tree.getSelection()[0]);
}
protected String getName(TreeItem item) {
return getName(item.getText());
}
protected String getName(String s) {
if (s.startsWith(NOT_IN_ANY_GROUP_HEADER))
return NOT_IN_ANY_GROUP;
if (s.startsWith(COMMON_GROUP_HEADER))
return COMMON_GROUP;
if (s.startsWith(GROUP_HEADER))
return s.substring(GROUP_HEADER.length());
if (s.startsWith(OVERRIDE_HEADER))
return s.substring(OVERRIDE_HEADER.length());
// parameter
return s.substring(s.indexOf(nameHeader) + nameHeader.length());
}
protected int getItemIndex(TreeItem parent, TreeItem child) {
return getItemIndex(parent.getItems(), child);
}
protected int getItemIndex(Tree parent, TreeItem child) {
return getItemIndex(parent.getItems(), child);
}
/**
* Works between parameter tree and settings tree We don't use any relative index offsets.
* Instead, we search for the item with the same parameter name.
*
*
* @param containingGroup
* in parm section; if null = means all groups (common parms)
* @return
*/
protected TreeItem[] getSettingsParameter(TreeItem containingGroup, String sourceItemName) {
if (null == settingsTree)
return null;
if (null != containingGroup && isNOT_IN_ANY_GROUP(containingGroup))
return new TreeItem[] { findMatchingParm(settingsTree.getItems()[0], sourceItemName) };
TreeItem[] groups = getSettingsGroups((null == containingGroup) ? tree.getItems()[1] // use
// common
// group,
// will
// return
// all
// groups
// in
// settings
// pg
: containingGroup);
TreeItem[] results = new TreeItem[groups.length];
for (int i = 0; i < groups.length; i++) {
results[i] = findMatchingParm(groups[i], sourceItemName);
}
return results;
}
private TreeItem findMatchingParm(TreeItem group, String name) {
final TreeItem[] items = group.getItems();
for (int i = 0; i < items.length; i++) {
if (name.equals(getName(items[i])))
return items[i];
}
throw new InternalErrorCDE("invalid state");
}
/**
* get set of settings group from settingsTree that correspond to parmsection group
*
* @param group
* @return
*/
protected TreeItem[] getSettingsGroups(TreeItem group) {
if (null == settingsTree)
return null;
if (isNOT_IN_ANY_GROUP(group))
return new TreeItem[] { settingsTree.getItems()[0] };
AbstractList results = new ArrayList();
String[] groupNamesArray = groupNamesToArray(getName(group.getText()));
TreeItem[] items = settingsTree.getItems();
if (groupNamesArray.length == 1 && groupNamesArray[0].equals(COMMON_GROUP)) {
// add parm to all groups except <Not in any group>
TreeItem[] result = new TreeItem[items.length - 1];
System.arraycopy(items, 1, result, 0, result.length);
return result;
}
for (int itemIndex = 0; itemIndex < items.length; itemIndex++) {
String name = getName(items[itemIndex].getText());
for (int i = 0; i < groupNamesArray.length; i++) {
if (name.equals(groupNamesArray[i]))
results.add(items[itemIndex]);
}
}
return (TreeItem[]) results.toArray(treeItemArray0);
}
/**
* find settings tree item for group name
*
* @param name
* @return
*/
protected TreeItem getSettingsGroupTreeItemByName(String name) {
TreeItem[] items = settingsTree.getItems();
for (int i = 0; i < items.length; i++) {
if (name.equals(getName(items[i].getText())))
return items[i];
}
throw new InternalErrorCDE("invalid state"); //$NON-NLS-1$
}
protected ConfigurationParameter getCorrespondingModelParm(TreeItem item) {
if (!isParameter(item))
throw new InternalErrorCDE("invalid argument"); //$NON-NLS-1$
return (ConfigurationParameter) item.getData();
}
protected ConfigGroup getCorrespondingModelGroup(TreeItem item) {
if (!isGroup(item))
throw new InternalErrorCDE("invalid argument"); //$NON-NLS-1$
return (ConfigGroup) item.getData();
}
public ConfigurationParameterSettings getConfigurationParameterSettings() {
return editor.getAeDescription().getMetaData().getConfigurationParameterSettings();
}
/*************************************************************************************************
* * methods affecting the parameter settings. * These run whether or not the settings page has
* been instantiated. * If the settings page is instantiated, that GUI is also updated.
* *******************************************************************
*/
public ConfigurationParameterSettings getModelSettings() {
return getAnalysisEngineMetaData().getConfigurationParameterSettings();
}
/**
* Remove a parameter from all groups it lives in the Settings. If settings page is shown, also
* update the GUI.
*
* @param treeItem
* in ParameterSection of parameter belonging to (multiple) groups
*/
public void removeParmSettingFromMultipleGroups(TreeItem parmItem, boolean removeFromGUI) {
if (!isParameter(parmItem))
throw new InternalErrorCDE("invalid argument"); //$NON-NLS-1$
ConfigurationParameterSettings modelSettings = getModelSettings();
String parmName = getName(parmItem);
TreeItem parent = parmItem.getParentItem();
String groupName = getName(parent.getText());
if (!groupName.equals(NOT_IN_ANY_GROUP)) {
String[] groupNames = (getName(parent.getText()).equals(COMMON_GROUP)) ? getAllGroupNames()
: getCorrespondingModelGroup(parent).getNameArray();
for (int i = 0; i < groupNames.length; i++) {
modelSettings.setParameterValue(groupNames[i], parmName, null);
}
} else {
modelSettings.setParameterValue(parmName, null);
}
if (null != settings) {
if (removeFromGUI) {
TreeItem[] settingsTreeParms = getSettingsParameter(parent, parmName);
for (int i = 0; i < settingsTreeParms.length; i++) {
settingsTreeParms[i].dispose();
}
} else { // leave parm but remove value
editor.getSettingsPage().getValueSection().refresh();
}
}
}
public void updateParmInSettingsGUI(ConfigurationParameter existingCP, TreeItem existingTreeItem,
String prevName) {
if (null != settings) {
TreeItem[] settingsTreeParms = getSettingsParameter(existingTreeItem.getParentItem(),
prevName);
for (int i = 0; i < settingsTreeParms.length; i++) {
fillParmItem(settingsTreeParms[i], existingCP);
}
}
}
protected String[] getAllGroupNames() {
return getAllGroupNames(cpd);
}
/**
*
* @param aCpd
* @return all named groups, excludes <Common> and <Not in any group>
*/
protected String[] getAllGroupNames(ConfigurationParameterDeclarations aCpd) {
ConfigurationGroup[] cgs = aCpd.getConfigurationGroups();
Set results = new TreeSet();
for (int i = 0; i < cgs.length; i++) {
String[] names = cgs[i].getNames();
for (int j = 0; j < names.length; j++) {
results.add(names[j]);
}
}
return (String[]) results.toArray(stringArray0);
}
public void removeCommonParmSettingsFromMultipleGroups() {
ConfigurationParameterSettings modelSettings = getModelSettings();
String[] allGroupNames = getAllGroupNames();
// TreeItem [] items = new TreeItem[0]; // done to avoid may not have been initialized msg
// int offset = 0;
commonParms = cpd.getCommonParameters();
for (int i = 0; i < allGroupNames.length; i++) {
// if (null != settings) {
// items = getSettingsGroupTreeItemByName(allGroupNames[i]).getItems();
// offset = items.length - commonParms.length;
// }
for (int j = 0; j < commonParms.length; j++) {
modelSettings.setParameterValue(allGroupNames[i], commonParms[j].getName(), null);
}
}
if (null != settings) {
for (int j = 0; j < commonParms.length; j++) {
TreeItem[] settingsParms = getSettingsParameter(null, commonParms[j].getName());
for (int k = 0; k < settingsParms.length; k++) {
settingsParms[k].dispose();
}
}
}
}
/**
* Remove some of the parameter settings associated with this particular group, not all the
* parameters for that group name (some parameters may be associated with other instances of a
* particular group name.) If no other group-set contains a particular individual group name, in
* the Settings: remove the common parameters, and remove the individual group itself. Remove the
* particular group-set definition. Note that a group may be defined in more than one group-set.
*
* Method: for the group-set, get the parms. Remove just those parms from all groups. Remove the
* group on the settings page (together with common parms for it) if no other group-set has this
* group name Remove the group-set.
*
* @param groupNames
* @param cps
*/
public void removeIncludedParmSettingsFromMultipleGroups(String[] groupNames,
ConfigurationParameter[] cps) {
for (int j = 0; j < groupNames.length; j++) {
removeIncludedParmSettingsFromSingleGroup(groupNames[j], cps);
}
}
/**
*
* @param treeItem
* in ParameterSection of items an array of tree items to remove Can be all items under a
* particular group, or a set of items from different groups
*/
public void removeIncludedParmSettingsFromSingleGroup(String groupName,
ConfigurationParameter[] cps) {
ConfigurationParameterSettings modelSettings = getModelSettings();
// modelSettings.setParameterValue()
if (groupName.equals(COMMON_GROUP))
throw new InternalErrorCDE("invalid state"); //$NON-NLS-1$
if (groupName.equals(NOT_IN_ANY_GROUP)) {
modelSettings.setParameterSettings(nameValuePairArray0);
} else {
for (int i = 0; i < cps.length; i++)
modelSettings.setParameterValue(groupName, cps[i].getName(), null);
}
if (null != settings) {
TreeItem settingGroup = getSettingsGroupTreeItemByName(groupName);
if (groupName.equals(COMMON_GROUP) || groupName.equals(NOT_IN_ANY_GROUP)) {
disposeAllChildItems(settingGroup);
} else {
if (getConfigurationParameterDeclarations().getConfigurationGroupDeclarations(groupName).length == 1) {
settingGroup.dispose();
} else {
for (int i = 0; i < cps.length; i++) {
findMatchingParm(settingGroup, cps[i].getName()).dispose();
}
}
}
}
}
public void disposeAllChildItems(TreeItem parent) {
TreeItem[] items = parent.getItems();
for (int j = 0; j < items.length; j++) {
items[j].dispose();
}
}
protected void showDescriptionAsToolTip(Event event) {
TreeItem item = tree.getItem(new Point(event.x, event.y));
if (null != item && isParameter(item)) {
setToolTipText(tree, getCorrespondingModelParm(item).getDescription());
} else
tree.setToolTipText(""); //$NON-NLS-1$
}
}