private void dimensionConfigChanged(DimensionConfigChangeEvent dimensionChange) {
    PlotConfiguration currentPlotConfig =
        plotInstance.getCurrentPlotConfigurationClone(); // get current plot configuration

    // if domain config has changed
    if (dimensionChange.getDimension() == PlotDimension.DOMAIN) {
      getDomainConfigManagerData()
          .dimensionConfigChanged(dimensionChange); // inform domain config data

      // also inform both domain dimension configs
      DomainConfigManager domainConfigManager = currentPlotConfig.getDomainConfigManager();
      getDimensionConfigData(domainConfigManager.getDomainConfig(false))
          .dimensionConfigChanged(dimensionChange);
      getDimensionConfigData(domainConfigManager.getDomainConfig(true))
          .dimensionConfigChanged(dimensionChange);

    } else {
      // inform default dimension config data about change

      int id = dimensionChange.getSource().getId(); // fetch id of changed dimension
      DimensionConfig currentDimensionConfig =
          currentPlotConfig.getDefaultDimensionConfigById(id); // look up dimension config

      // if dimension config is still present, inform data about changes
      if (currentDimensionConfig != null) {
        DimensionConfigData dimData =
            getDimensionConfigData((DefaultDimensionConfig) currentDimensionConfig);
        dimData.dimensionConfigChanged(dimensionChange);
      } else {
        // if current dimension config is null it has been deleted afterwards in a meta change event
        debug(
            "#### CAUTION #### DIMENSION CHANGED:  current dimension config "
                + dimensionChange.getSource().getLabel()
                + " with id "
                + dimensionChange.getSource().getId()
                + " is null! Meta change event?");
        return; // do nothing and return
      }
    }

    // and process event here too
    if (dimensionChange.getType() == DimensionConfigChangeType.RANGE) {
      clearCache();
    }
  }
  public List<PlotConfigurationError> getErrors() {
    List<PlotConfigurationError> errors = new LinkedList<PlotConfigurationError>();

    for (ValueSourceData valueSourceData : getValueSourcesData()) {
      errors.addAll(valueSourceData.getErrors());
    }

    for (DimensionConfigData data : dimensionConfigDataMap.values()) {
      if (data.getDimensionConfig().getDimension() == PlotDimension.DOMAIN) {
        continue;
      } else {
        List<PlotConfigurationError> error = data.getErrors();
        errors.addAll(error);
      }
    }

    // check domain dimension for errors depending on grouping state
    DomainConfigManager domainConfigManager =
        plotInstance.getCurrentPlotConfigurationClone().getDomainConfigManager();
    GroupingState groupingState = domainConfigManager.getGroupingState();
    switch (groupingState) {
      case GROUPED:
        errors.addAll(
            getDimensionConfigData(domainConfigManager.getDomainConfig(true)).getErrors());
        break;
      case PARTIALLY_GROUPED:
        errors.addAll(
            getDimensionConfigData(domainConfigManager.getDomainConfig(true)).getErrors());
        errors.addAll(
            getDimensionConfigData(domainConfigManager.getDomainConfig(false)).getErrors());
        break;
      case UNGROUPED:
        errors.addAll(
            getDimensionConfigData(domainConfigManager.getDomainConfig(false)).getErrors());
        break;
    }

    for (RangeAxisData data : rangeAxisDataMap.values()) {
      errors.addAll(data.getErrors());
    }

    errors.addAll(domainConfigManagerData.getErrors());

    return errors;
  }