@Override
  public void onEditTabSelected() {

    boolean doParsing = false;
    if (context.isSourceChanged()) {
      // if there has been changes in the source we should try to parse the file and build the data
      // object again.
      doParsing = true;
    } else if (context.isNotParsed()) {
      // uncommon case, the file wasn't parsed yet.
      doParsing = true;
    }

    if (doParsing) {

      view.showLoading();

      // If there are changes in the source, we must try to parse the file.
      modelerService
          .call(
              new RemoteCallback<GenerationResult>() {
                @Override
                public void callback(GenerationResult result) {
                  view.hideBusyIndicator();

                  if (result.hasErrors()) {

                    showParseErrorsDialog(
                        Constants.INSTANCE.modelEditor_message_file_parsing_errors(),
                        true,
                        result.getErrors(),
                        new Command() {
                          @Override
                          public void execute() {
                            // return to the source tab
                            setSelectedTab(EDITABLE_SOURCE_TAB);
                            context.setParseStatus(DataModelerContext.ParseStatus.PARSE_ERRORS);
                            updateEditorView(null);
                            context.setDataObject(null);
                            context.setEditionMode(DataModelerContext.EditionMode.SOURCE_MODE);
                            dataModelerWBContext.setActiveContext(context);
                          }
                        });

                  } else {
                    // ok, we can reload the editor tab.
                    context.setParseStatus(DataModelerContext.ParseStatus.PARSED);
                    updateEditorView(result.getDataObject());
                    context.setEditionStatus(DataModelerContext.EditionStatus.NO_CHANGES);
                    context.setDataObject(result.getDataObject());
                    context.setObjectProperty(null);
                    context.setEditionMode(DataModelerContext.EditionMode.GRAPHICAL_MODE);
                    view.setContext(context);
                    cleanSystemMessages(getCurrentMessageType());
                    dataModelerWBContext.setActiveContext(context);
                  }
                }
              },
              new DataModelerErrorCallback(Constants.INSTANCE.modelEditor_loading_error()))
          .updateDataObject(
              context.getDataObject(), getSource(), versionRecordManager.getCurrentPath());
    } else {
      // no changes in the source tab
      if (!isOverviewTabSelected()) {
        context.setEditionStatus(DataModelerContext.EditionStatus.NO_CHANGES);
      }

      if (context.isParseErrors()) {
        // there are parse errors, the editor tab couldn't be loaded.  (errors are already
        // published)
        showParseErrorsDialog(
            Constants.INSTANCE.modelEditor_message_file_parsing_errors(),
            false,
            null,
            new Command() {
              @Override
              public void execute() {
                context.setEditionMode(DataModelerContext.EditionMode.SOURCE_MODE);
                dataModelerWBContext.setActiveContext(context);
                setSelectedTab(EDITABLE_SOURCE_TAB);
              }
            });
      } else {
        context.setEditionMode(DataModelerContext.EditionMode.GRAPHICAL_MODE);
        dataModelerWBContext.setActiveContext(context);
      }
    }
  }