// Try to get the current model from the edited object
Object o = getObject();
final Model model = (o instanceof ModelObject) ? ((ModelObject) o).getOwningModel() : null;
// Initialize the item selection dialog
final ItemSelectionDialog dlg = new ItemSelectionDialog(ApplicationUtil.getActiveWindow(), true);
dlg.setTitle(title);
// We may select a single object only
dlg.setSelectionMode(ItemTree.SELECTION_SINGLE);
dlg.setShowGroups(false);
// Determine the types of displayed and selectable objects from the editor parameters
String [] supportedItemTypes = null;
String [] selectableItemTypes = null;
Class [] supportedObjectClasses = null;
Class [] selectableObjectClasses = null;
if (itemType != null)
{
if (supportedItemTypeList == null)
{
supportedItemTypeList = new ArrayList();
supportedItemTypeList.add(ItemTypes.MODEL);
if (!itemType.equals(ItemTypes.MODEL))
{
supportedItemTypeList.add(itemType);
}
}
if (selectableItemTypeList == null)
{
selectableItemTypeList = new ArrayList();
selectableItemTypeList.add(itemType);
}
}
if (supportedItemTypeList != null)
supportedItemTypes = CollectionUtil.toStringArray(supportedItemTypeList);
if (selectableItemTypeList != null)
selectableItemTypes = CollectionUtil.toStringArray(selectableItemTypeList);
if (supportedObjectClassList != null)
supportedObjectClasses = (Class []) CollectionUtil.toArray(supportedObjectClassList, Class.class);
if (selectableObjectClassList != null)
selectableObjectClasses = (Class []) CollectionUtil.toArray(selectableObjectClassList, Class.class);
dlg.setSupportedItemTypes(supportedItemTypes);
dlg.setSelectableItemTypes(selectableItemTypes);
dlg.setSupportedObjectClasses(supportedObjectClasses);
dlg.setSelectableObjectClasses(selectableObjectClasses);
// Determine the current object from the value of the property (i. e. the object name)
String objectRef = (String) value;
ModelObject object = null;
if (objectRef != null && itemType != null)
{
try
{
if (model != null)
{
object = model.resolveObjectRef(objectRef, itemType);
}
else
{
ModelQualifier qualifier = new ModelQualifier(objectRef);
qualifier.setItemType(itemType);
object = ModelConnector.getInstance().getItemByQualifier(qualifier, false);
}
}
catch (ModelException e)
{
}
}
ItemTreeState state = new ItemTreeState();
Model currentModel = null;
if (object != null)
{
// Open the current object
currentModel = object.getOwningModel();
}
else
{
// Open the current model
if (model != null)
{
currentModel = model;
}
if (openSystemModel)
{
// Open the System model
currentModel = ModelConnector.getInstance().getModelByQualifier(CoreConstants.SYSTEM_MODEL_QUALIFIER);
}
}
if (currentModel != null)
{
state.addExpandedQualifier(currentModel.getQualifier());
}
// Select the previously selected initial nodes if present
if (object != null)
{
state.addSelectedQualifier(object.getQualifier());
}
else if (objectRef != null)
{
state.addSelectedQualifier(new ModelQualifier(objectRef));
}
else
{
if (currentModel != null)
{
state.addSelectedQualifier(currentModel.getQualifier());
}
}
// Instantiate the customizer class
if (customizer == null && customizerClassName != null)
{
try
{
customizer = (ComponentSelectionEditorCustomizer) ReflectUtil.instantiate(customizerClassName, ComponentSelectionEditorCustomizer.class, "component selection editor customizer class");
}
catch (Exception e)
{
ExceptionUtil.printTrace(e);
}
}
if (customizer != null)
{
if (!customizer.initializeDialog(this, dlg))
return;
}
// Build the tree, expanding the first level and the currently selected item
dlg.rebuildTree();
dlg.expand(1);
dlg.restoreState(state);
dlg.addWindowListener(new WindowAdapter()
{
public void windowClosed(WindowEvent we)
{
List selection = dlg.getSelectedObjects();
if (selection != null)
{
ModelObject selectedObject = (ModelObject) selection.get(0);
if (customizer != null)
{
if (!customizer.dialogClosed(ComponentSelectionEditor.this, dlg, selectedObject))
return;
}
String objectRef = null;
if (model != null)
{
if (!(selectedObject instanceof ComplexTypeItem))
{
objectRef = model.determineObjectRef(selectedObject);
}
}
if (objectRef == null)
{
objectRef = selectedObject.getQualifier().toString();
}
textField.setText(objectRef);
textField.requestFocus();
propertyChanged();
}
else
{
if (customizer != null)
{
customizer.dialogClosed(ComponentSelectionEditor.this, dlg, null);
}
}
}
});
if (customizer != null)
{
if (!customizer.dialogInitialized(this, dlg))
return;
}
// Show the dialog
dlg.setVisible(true);
}