@Override
 public void doActivate() {
   super.doActivate();
   final Procedure1<Text> _function =
       (Text it) -> {
         String _name = this.getName();
         it.setText(_name);
         TooltipExtensions.setTooltip(it, "Zoom to reveal content");
       };
   ObjectExtensions.<Text>operator_doubleArrow(this.label, _function);
   boolean _equals = Objects.equal(this.innerDiagram, null);
   if (_equals) {
     String _name = this.getName();
     String _plus = ("No inner diagram set on node " + _name);
     String _plus_1 = (_plus + ". LOD behavior deactivated");
     LevelOfDetailDiagramNode.LOG.severe(_plus_1);
   } else {
     XDiagram _diagram = CoreExtensions.getDiagram(this);
     ViewportTransform _viewportTransform = _diagram.getViewportTransform();
     ReadOnlyDoubleProperty _scaleProperty = _viewportTransform.scaleProperty();
     final ChangeListener<Number> _function_1 =
         (ObservableValue<? extends Number> prop, Number oldVal, Number newVal) -> {
           Bounds _boundsInLocal = this.getBoundsInLocal();
           final Bounds bounds = this.localToScene(_boundsInLocal);
           double _width = bounds.getWidth();
           double _height = bounds.getHeight();
           final double area = (_width * _height);
           if ((area <= 100000)) {
             this.label.setVisible(true);
             this.innerDiagramGroup.setVisible(false);
             this.pane.setBackgroundPaint(RectangleBorderPane.DEFAULT_BACKGROUND);
           } else {
             this.label.setVisible(false);
             this.innerDiagramGroup.setVisible(true);
             this.innerDiagram.activate();
             final Procedure1<DiagramScaler> _function_2 =
                 (DiagramScaler it) -> {
                   Bounds _layoutBounds = this.label.getLayoutBounds();
                   double _width_1 = _layoutBounds.getWidth();
                   double _plus_2 = (_width_1 + 40);
                   it.setWidth(_plus_2);
                   Bounds _layoutBounds_1 = this.label.getLayoutBounds();
                   double _height_1 = _layoutBounds_1.getHeight();
                   double _plus_3 = (_height_1 + 20);
                   it.setHeight(_plus_3);
                   it.activate();
                 };
             ObjectExtensions.<DiagramScaler>operator_doubleArrow(this.diagramScaler, _function_2);
             Paint _backgroundPaint = this.innerDiagram.getBackgroundPaint();
             this.pane.setBackgroundPaint(_backgroundPaint);
           }
         };
     _scaleProperty.addListener(_function_1);
   }
 }
 protected <T extends Object> void doRevealElement(
     final T element, final EntryCall<? super T> entryCall, final IEditorPart editor) {
   XDiagram _diagram = this.root.getDiagram();
   final InterpreterContext interpreterContext = new InterpreterContext(_diagram);
   entryCall.execute(element, this.configInterpreter, interpreterContext);
   CommandStack _commandStack = this.root.getCommandStack();
   interpreterContext.executeCommands(_commandStack);
   final IMappedElementDescriptor<T> descriptor = this.<T, Object>createMappedDescriptor(element);
   XDiagram _diagram_1 = interpreterContext.getDiagram();
   ObservableList<XNode> _nodes = _diagram_1.getNodes();
   XDiagram _diagram_2 = interpreterContext.getDiagram();
   ObservableList<XConnection> _connections = _diagram_2.getConnections();
   Iterable<XDomainObjectShape> _plus = Iterables.<XDomainObjectShape>concat(_nodes, _connections);
   final Function1<XDomainObjectShape, Boolean> _function =
       (XDomainObjectShape it) -> {
         DomainObjectDescriptor _domainObjectDescriptor = it.getDomainObjectDescriptor();
         return Boolean.valueOf(Objects.equal(_domainObjectDescriptor, descriptor));
       };
   final XDomainObjectShape centerShape =
       IterableExtensions.<XDomainObjectShape>findFirst(_plus, _function);
   CommandStack _commandStack_1 = this.root.getCommandStack();
   ParallelAnimationCommand _parallelAnimationCommand = new ParallelAnimationCommand();
   final Procedure1<ParallelAnimationCommand> _function_1 =
       (ParallelAnimationCommand it) -> {
         boolean _needsLayoutCommand = interpreterContext.needsLayoutCommand();
         if (_needsLayoutCommand) {
           Layouter _layouter = new Layouter();
           XDiagram _diagram_3 = interpreterContext.getDiagram();
           Duration _millis = DurationExtensions.millis(500);
           LazyCommand _createLayoutCommand =
               _layouter.createLayoutCommand(LayoutType.DOT, _diagram_3, _millis, centerShape);
           it.operator_add(_createLayoutCommand);
         }
         final Function1<XShape, Boolean> _function_2 =
             (XShape it_1) -> {
               return Boolean.valueOf(Objects.equal(it_1, centerShape));
             };
         SelectAndRevealCommand _selectAndRevealCommand =
             new SelectAndRevealCommand(this.root, _function_2);
         it.operator_add(_selectAndRevealCommand);
       };
   ParallelAnimationCommand _doubleArrow =
       ObjectExtensions.<ParallelAnimationCommand>operator_doubleArrow(
           _parallelAnimationCommand, _function_1);
   _commandStack_1.execute(_doubleArrow);
 }
 protected void refreshUpdateState() {
   XDiagram _diagram = this.root.getDiagram();
   final ReconcileBehavior behavior =
       _diagram.<ReconcileBehavior>getBehavior(ReconcileBehavior.class);
   boolean _notEquals = (!Objects.equal(behavior, null));
   if (_notEquals) {
     this.refreshDirtyState(behavior);
   }
   final ArrayList<XShape> allShapes = CollectionLiterals.<XShape>newArrayList();
   XDiagram _diagram_1 = this.root.getDiagram();
   ObservableList<XNode> _nodes = _diagram_1.getNodes();
   Iterables.<XShape>addAll(allShapes, _nodes);
   XDiagram _diagram_2 = this.root.getDiagram();
   ObservableList<XConnection> _connections = _diagram_2.getConnections();
   Iterables.<XShape>addAll(allShapes, _connections);
   final Consumer<XShape> _function =
       (XShape it) -> {
         ReconcileBehavior _behavior = it.<ReconcileBehavior>getBehavior(ReconcileBehavior.class);
         if (_behavior != null) {
           this.refreshDirtyState(_behavior);
         }
       };
   allShapes.forEach(_function);
 }
 public <T extends Object, U extends Object> XDiagram createDiagram(
     final T diagramObject,
     final DiagramMapping<T> diagramMapping,
     final boolean isOnDemand,
     final InterpreterContext context) {
   XDiagram _xblockexpression = null;
   {
     boolean _isApplicable = diagramMapping.isApplicable(diagramObject);
     boolean _not = (!_isApplicable);
     if (_not) {
       return null;
     }
     final IMappedElementDescriptor<T> descriptor =
         this.<T>getDescriptor(diagramObject, diagramMapping);
     boolean _equals = Objects.equal(descriptor, null);
     if (_equals) {
       return null;
     }
     XDiagram _diagram = context.getDiagram();
     DomainObjectDescriptor _domainObjectDescriptor = _diagram.getDomainObjectDescriptor();
     final boolean replaceDiagram = (!Objects.equal(_domainObjectDescriptor, descriptor));
     context.setIsReplaceRootDiagram(replaceDiagram);
     XDiagram _xifexpression = null;
     if (replaceDiagram) {
       _xifexpression = diagramMapping.createDiagram(descriptor);
     } else {
       _xifexpression = context.getDiagram();
     }
     final XDiagram diagram = _xifexpression;
     InterpreterContext _xifexpression_1 = null;
     if (replaceDiagram) {
       _xifexpression_1 = new InterpreterContext(diagram, context);
     } else {
       _xifexpression_1 = context;
     }
     final InterpreterContext newContext = _xifexpression_1;
     if (isOnDemand) {
       diagram.setLayoutOnActivate(true);
       final Procedure1<XDiagram> _function =
           (XDiagram it) -> {
             final Function1<T, Object> _function_1 =
                 (T domainObject) -> {
                   Object _xblockexpression_1 = null;
                   {
                     this.<T>populateDiagram(diagramMapping, domainObject, newContext);
                     newContext.directlyApplyChanges();
                     XRoot _root = CoreExtensions.getRoot(diagram);
                     final CommandStack commandStack = _root.getCommandStack();
                     newContext.executeCommands(commandStack);
                     _xblockexpression_1 = null;
                   }
                   return _xblockexpression_1;
                 };
             descriptor.<Object>withDomainObject(_function_1);
           };
       diagram.setContentsInitializer(_function);
     } else {
       this.<T>populateDiagram(diagramMapping, diagramObject, newContext);
     }
     _xblockexpression = diagram;
   }
   return _xblockexpression;
 }