コード例 #1
0
  @Override
  protected ICommand getBeforeSetCommand(SetRequest request) {

    ICommand setCommand = super.getBeforeSetCommand(request);

    Set<View> viewsToDestroy = new HashSet<View>();

    // Get modified object and retrieve inconsistent view
    EObject modifiedObject = request.getElementToEdit();
    if ((modifiedObject != null)
        && (modifiedObject instanceof Property)
        && (request.getFeature() == UMLPackage.eINSTANCE.getProperty_Aggregation())
        && (request.getValue() != AggregationKind.COMPOSITE_LITERAL)) {

      viewsToDestroy.addAll(getViewsToDestroy(modifiedObject));
    }

    if ((modifiedObject != null)
        && (modifiedObject instanceof Property)
        && (request.getFeature() == UMLPackage.eINSTANCE.getTypedElement_Type())
        && (request.getValue() instanceof Type)
        && !((ISpecializationType) SysMLElementTypes.BLOCK)
            .getMatcher()
            .matches((Type) request.getValue())) {

      viewsToDestroy.addAll(getViewsToDestroy(modifiedObject));
    }

    if (!viewsToDestroy.isEmpty()) {
      DestroyDependentsRequest ddr =
          new DestroyDependentsRequest(
              request.getEditingDomain(), request.getElementToEdit(), false);
      ddr.setClientContext(request.getClientContext());
      ddr.addParameters(request.getParameters());
      ICommand destroyViewsCommand = ddr.getDestroyDependentsCommand(viewsToDestroy);
      setCommand = CompositeCommand.compose(setCommand, destroyViewsCommand);
    }

    return setCommand;
  }