if (null == otherCol || "".equals(otherCol))
allFeatItem.dispose();
}
private void handleEdit(TableTreeItem editItem, int itemKind) {
Capability c = getCapability(editItem);
switch (itemKind) {
case SOFA_ITEM: {
boolean existingIsInput = INPUT.equals(editItem.getText(INPUT_COL));
String existingSofaName = editItem.getText(NAME_COL);
AddSofaDialog dialog = new AddSofaDialog(this, c, existingSofaName, existingIsInput);
if (dialog.open() == Window.CANCEL)
return;
if (dialog.isInput == existingIsInput && dialog.sofaName.equals(existingSofaName))
return;
// MODEL UPDATING
// if rename,
// update entry or remove / add entry
// DO FOR ALL INSTANCES IN ALL CAPABILITY SETS.
// change name in all mappings
// if switch from input to output, delete from one array, add to other,
// mappings: no change (maybe the user switches the other items too).
if (Window.CANCEL == Utility
.popOkCancel(
"Confirm Change to all Capability Sets",
"This edit operation will change the Sofa in all Capability Sets in which it is defined. Please confirm.",
MessageDialog.WARNING))
return;
final Capability[] cSets = getCapabilities();
for (int i = 0; i < cSets.length; i++) {
boolean wasRemoved;
String[] prevSofas;
if (existingIsInput) {
cSets[i].setInputSofas((String[]) Utility.removeElementsFromArray(prevSofas = cSets[i]
.getInputSofas(), existingSofaName, String.class));
wasRemoved = prevSofas != cSets[i].getInputSofas();
} else {
cSets[i].setOutputSofas((String[]) Utility.removeElementsFromArray(prevSofas = cSets[i]
.getOutputSofas(), existingSofaName, String.class));
wasRemoved = prevSofas != cSets[i].getOutputSofas();
}
if (wasRemoved) {
if (dialog.isInput) {
cSets[i].setInputSofas(stringArrayAdd(cSets[i].getInputSofas(), dialog.sofaName));
} else {
cSets[i].setOutputSofas(stringArrayAdd(cSets[i].getOutputSofas(), dialog.sofaName));
}
}
}
if (!dialog.sofaName.equals(existingSofaName)) {
// rename in mappings
SofaMapping[] mappings = getSofaMappings();
for (int i = 0; i < mappings.length; i++) {
if (existingSofaName.equals(mappings[i].getAggregateSofaName())) {
mappings[i].setAggregateSofaName(dialog.sofaName);
}
}
}
// GUI updating:
// setGuiSofaName(editItem, dialog.sofaName, dialog.isInput);
refresh(); // because multiple capability sets may have changed
sofaMapSection.markStale();
finishAction();
pack04();
break;
}
case TYPE: {
AddCapabilityTypeDialog dialog = new AddCapabilityTypeDialog(this, c, editItem);
if (dialog.open() == Window.CANCEL)
return;
TypeOrFeature typeInput = getTypeOrFeature(c.getInputs(), getFullyQualifiedName(editItem));
if (dialog.inputs[0]) {
if (null == typeInput) {
c.addInputType(dialog.types[0], true);
// add all-features
getOrCreateAllFeatItem(editItem, INPUT_COL, INPUT);
}
} else if (null != typeInput) { // check for any input features done in dialog
c.setInputs(typeOrFeatureArrayRemove(c.getInputs(), typeInput));
removeAllFeatItemGui(editItem, INPUT_COL);
}
TypeOrFeature typeOutput = getTypeOrFeature(c.getOutputs(), getFullyQualifiedName(editItem));
if (dialog.outputs[0]) {
if (null == typeOutput) {
c.addOutputType(dialog.types[0], true);
getOrCreateAllFeatItem(editItem, OUTPUT_COL, OUTPUT);
}
} else if (null != typeOutput) {
c.setOutputs(typeOrFeatureArrayRemove(c.getOutputs(), typeOutput));
removeAllFeatItemGui(editItem, OUTPUT_COL);
}
if (dialog.inputs[0] || dialog.outputs[0]) {
editItem.setText(INPUT_COL, dialog.inputs[0] ? INPUT : "");
editItem.setText(OUTPUT_COL, dialog.outputs[0] ? OUTPUT : "");
} else {
editItem.dispose();
pack04();
}
finishAction();
break;
}
case LANG_ITEM: {
CommonInputDialog dialog = new CommonInputDialog(
this,
"Edit Language",
"Enter a two letter ISO-639 language code, followed optionally by a two-letter ISO-3166 country code (Examples: fr or fr-CA)",
CommonInputDialog.LANGUAGE, editItem.getText(NAME_COL));
if (dialogForLanguage(c, dialog) == Window.CANCEL)
return;
c.getLanguagesSupported()[getIndex(editItem)] = dialog.getValue();
// update GUI
editItem.setText(NAME_COL, dialog.getValue());
finishAction();
break;
}