IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();
if (selection.getFirstElement() instanceof FeatureValue) {
FeatureValue featureValue = (FeatureValue) selection.getFirstElement();
FeatureStructure newValue;
Type fsSuperType = featureValue.getFeature().getRange();
if (!fsSuperType.isArray()) {
List subTypes =
document.getCAS().getTypeSystem().getProperlySubsumedTypes(fsSuperType);
Type typeToCreate;
int arraySize = -1;
if (subTypes.size() == 0) {
typeToCreate = fsSuperType;
}
else {
CreateFeatureStructureDialog createFsDialog =
new CreateFeatureStructureDialog(Display.getCurrent()
.getActiveShell(), fsSuperType, document.getCAS().getTypeSystem());
int returnCode = createFsDialog.open();
if (returnCode == IDialogConstants.OK_ID) {
typeToCreate = createFsDialog.getType();
arraySize = createFsDialog.getArraySize();
}
else {
return;
}
}
newValue = createFS(typeToCreate, arraySize);
document.addFeatureStructure(newValue);
} else {
Type arrayType = featureValue.getFeature().getRange();
CreateFeatureStructureDialog createArrayDialog = new CreateFeatureStructureDialog(Display.getCurrent()
.getActiveShell(), arrayType, document.getCAS().getTypeSystem());
int returnCode = createArrayDialog.open();
if (returnCode == IDialogConstants.OK_ID) {
newValue = createFS(arrayType, createArrayDialog.getArraySize());
} else {
return;
}
}
featureValue.getFeatureStructure().setFeatureValue(featureValue.getFeature(), newValue);
document.update(featureValue.getFeatureStructure());
}
else if (selection.getFirstElement() instanceof ArrayValue) {
ArrayValue value = (ArrayValue) selection.getFirstElement();
TypeSystem typeSystem = document.getCAS().getTypeSystem();
CreateFeatureStructureDialog createFsDialog =
new CreateFeatureStructureDialog(Display.getCurrent()
.getActiveShell(), typeSystem.getType(CAS.TYPE_NAME_TOP),
typeSystem);
int returnCode = createFsDialog.open();
if (returnCode == IDialogConstants.OK_ID) {
FeatureStructure fs = createFS(createFsDialog.getType(), createFsDialog.getArraySize());
ArrayFS array = (ArrayFS) value.getFeatureStructure();
array.set(value.slot(), fs);