/*
     * (non-Javadoc)
     * @see org.eclipse.sapphire.ui.SapphireActionHandler#run(org.eclipse.sapphire.ui.SapphireRenderingContext)
     */
    @Override
    protected Object run(SapphireRenderingContext context) {

      final IModelElement rootModel = context.getPart().getModelElement();
      final ModelProperty modelProperty =
          rootModel.getModelElementType().getProperty(this.strModelProperty);
      Object obj = rootModel.read(modelProperty);
      IModelElement mElement = null;

      if (obj instanceof ModelElementList<?>) {
        // System.out.println( "QuickActionsHandlerFactory.Handler.run()" + obj.getClass() );
        ModelElementList<?> list = (ModelElementList<?>) obj;
        mElement = list.addNewElement();
      } else {
        throw new UnsupportedOperationException(
            Resources.bind(Resources.unsuportedOperation, this.strModelProperty));
      }

      // Select the ndoe
      final MasterDetailsEditorPagePart page = getPart().nearest(MasterDetailsEditorPagePart.class);
      final MasterDetailsContentNode root = page.getContentOutline().getRoot();
      final MasterDetailsContentNode node = root.findNodeByModelElement(mElement);
      if (node != null) {
        node.select();
      }

      return mElement;
    }
  private void handleModelPropertyChange(final PropertyEvent event) {
    final IModelElement element = event.element();
    final ModelProperty property = event.property();
    ModelElementList<IModelElement> newList =
        (ModelElementList<IModelElement>) element.read(property);

    List<ShapePart> children = getChildren();
    List<IModelElement> oldList = new ArrayList<IModelElement>(children.size());
    for (ShapePart shapePart : children) {
      oldList.add(shapePart.getLocalModelElement());
    }

    List<IModelElement> deletedShapes = ListUtil.ListDiff(oldList, newList);
    List<IModelElement> newShapes = ListUtil.ListDiff(newList, oldList);
    if (deletedShapes.isEmpty() && newShapes.isEmpty() && ListUtil.ListDiffers(oldList, newList)) {
      // List has been re-ordered
      List<ShapePart> newChildren = new ArrayList<ShapePart>();
      for (IModelElement listEle : newList) {
        ShapePart shapePart = getShapePart(listEle);
        newChildren.add(shapePart);
      }
      this.children.clear();
      this.children.addAll(newChildren);
      broadcast(new ShapeReorderEvent(this));
    } else {
      for (IModelElement deletedShape : deletedShapes) {
        ShapePart shapePart = getShapePart(deletedShape);
        if (shapePart != null) {
          shapePart.dispose();
          this.children.remove(shapePart);
          broadcast(new ShapeDeleteEvent(shapePart));
        }
      }
      for (IModelElement newShape : newShapes) {
        ShapeFactoryCaseDef shapeFactoryCase = getShapeFactoryCase(newShape);

        ShapePart shapePart = createShapePart(shapeFactoryCase, newShape);
        this.children.add(shapePart);
        broadcast(new ShapeAddEvent(shapePart));
      }
    }
  }