/*
   * (non-Javadoc)
   *
   * @see org.eclipse.jface.action.Action#run()
   */
  public void run() {
    transStar(NAME);
    try {
      LevelViewDialog dialog = new LevelViewDialog(true);
      List showLevels = new ArrayList();
      List nullLevelHandle = new ArrayList();
      int viewCount = viewHandle.getLevelCount();
      for (int i = 0; i < viewCount; i++) {
        LevelViewHandle levelHandle = viewHandle.getLevel(i);
        if (levelHandle.getCubeLevel() == null) {
          nullLevelHandle.add(Integer.valueOf(levelHandle.getIndex()));
        } else {
          showLevels.add(levelHandle.getCubeLevel());
        }
      }

      ExtendedItemHandle extendedHandle = CrosstabAdaptUtil.getExtendedItemHandle(getHandle());
      LevelViewHandle levelViewHandle = CrosstabAdaptUtil.getLevelViewHandle(extendedHandle);

      dialog.setInput(findDimension(levelViewHandle.getCubeLevel()), showLevels);
      if (dialog.open() == Window.OK) {
        CrosstabReportItemHandle reportHandle = viewHandle.getCrosstab();

        List result = (List) dialog.getResult();
        boolean isLevelRemoved = processor(showLevels, result, nullLevelHandle, false);

        if (isLevelRemoved) {
          boolean bool = CrosstabAdaptUtil.needRemoveInvaildBindings(reportHandle);
          processor(showLevels, result, nullLevelHandle, true);
          if (bool) {
            CrosstabAdaptUtil.removeInvalidBindings(reportHandle);
          }
        } else {
          processor(showLevels, result, nullLevelHandle, true);
        }

        AggregationCellProviderWrapper providerWrapper =
            new AggregationCellProviderWrapper(reportHandle);
        providerWrapper.updateAllAggregationCells(AggregationCellViewAdapter.SWITCH_VIEW_TYPE);
      }
    } catch (SemanticException e) {
      rollBack();
      ExceptionUtil.handle(e);
      return;
    }
    transEnd();
  }
  private void initializeItems(MeasureInfo measureInfo) {
    List<String> viewNameList = new ArrayList<String>();
    List<String> itemList = new ArrayList<String>();

    MeasureViewHandle measureView = crosstab.getMeasure(measureInfo.getMeasureName());
    if (measureView != null && measureView instanceof ComputedMeasureViewHandle) {
      itemList.add("");
      viewNameList.add(""); // $NON-NLS-1$
    } else
    // NOT ComputedMeasureViewHandle -- begin --
    {
      AggregationCellHandle cell = getAggregationCell(measureInfo);
      if (cell != null && cellProviderWrapper.getMatchProvider(cell) == null) {
        itemList.add("");
        viewNameList.add(""); // $NON-NLS-1$
      }

      IAggregationCellViewProvider providers[] = cellProviderWrapper.getAllProviders();
      for (int i = 0; i < providers.length; i++) {
        IAggregationCellViewProvider tmp = (IAggregationCellViewProvider) providers[i];
        if (tmp == null) {
          continue;
        }
        SwitchCellInfo info = new SwitchCellInfo(crosstab, SwitchCellInfo.MEASURE);
        info.setMeasureInfo(measureInfo);

        if (!providers[i].canSwitch(info)) {
          continue;
        }

        String displayName = tmp.getViewDisplayName();
        viewNameList.add(tmp.getViewName());
        itemList.add(
            Messages.getString(
                "GrandTotalProvider.ShowAs", //$NON-NLS-1$
                new String[] {displayName}));
      }
    } // NOT ComputedMeasureViewHandle -- end --
    comboItems = (String[]) itemList.toArray(new String[itemList.size()]);
    viewNames = (String[]) viewNameList.toArray(new String[viewNameList.size()]);
  }