@Override
    public void menuAboutToShow(IMenuManager manager) {
      manager.add(
          new Action(Messages.MenuExportChartData) {
            @Override
            public void run() {
              ScatterChartCSVExporter exporter = new ScatterChartCSVExporter(chart);
              exporter.setValueFormat(new DecimalFormat("0.##########%")); // $NON-NLS-1$
              exporter.export(getTitle() + ".csv"); // $NON-NLS-1$
            }
          });

      Set<Class<?>> exportTypes =
          new HashSet<Class<?>>(
              Arrays.asList(
                  new Class<?>[] { //
                    Client.class,
                    Security.class,
                    Portfolio.class,
                    Account.class,
                    Classification.class
                  }));

      for (DataSeries series : picker.getSelectedDataSeries()) {
        if (exportTypes.contains(series.getType())) addMenu(manager, series);
      }

      manager.add(new Separator());
      chart.exportMenuAboutToShow(manager, getTitle());
    }
 private void addScatterSeries(DataSeries item, PerformanceIndex index) {
   Volatility volatility = index.getVolatility();
   ILineSeries series =
       chart.addScatterSeries(
           new double[] {volatility.getStandardDeviation()},
           new double[] {index.getFinalAccumulatedPercentage()},
           item.getLabel());
   item.configure(series);
 }
  private void addPortfolio(DataSeries item, Portfolio portfolio, List<Exception> warnings) {
    Object cacheKey = item.isPortfolioPlus() ? portfolio.getUUID() : portfolio;
    PerformanceIndex portfolioIndex = dataCache.get(cacheKey);

    if (portfolioIndex == null) {
      portfolioIndex =
          item.isPortfolioPlus()
              ? PerformanceIndex //
                  .forPortfolioPlusAccount(getClient(), portfolio, getReportingPeriod(), warnings)
              : PerformanceIndex.forPortfolio(
                  getClient(), portfolio, getReportingPeriod(), warnings);
      dataCache.put(cacheKey, portfolioIndex);
    }

    addScatterSeries(item, portfolioIndex);
  }
 private void addMenu(IMenuManager manager, final DataSeries series) {
   manager.add(
       new Action(MessageFormat.format(Messages.LabelExport, series.getLabel())) {
         @Override
         public void run() {
           exportDataSeries(series);
         }
       });
 }
    private void exportDataSeries(DataSeries series) {
      AbstractCSVExporter exporter =
          new AbstractCSVExporter() {
            @Override
            protected void writeToFile(File file) throws IOException {
              PerformanceIndex index = null;

              if (series.getType() == Client.class) index = dataCache.get(Client.class);
              else if (series.isPortfolioPlus())
                index = dataCache.get(((Portfolio) series.getInstance()).getUUID());
              else if (series.getType() == Security.class && !series.isBenchmark())
                index = dataCache.get(((Security) series.getInstance()).getUUID());
              else index = dataCache.get(series.getInstance());

              index.exportVolatilityData(file);
            }

            @Override
            protected Control getControl() {
              return ExportDropDown.this.getToolBar();
            }
          };
      exporter.export(getTitle() + "_" + series.getLabel() + ".csv"); // $NON-NLS-1$ //$NON-NLS-2$
    }
 private void addSecurity(DataSeries item, Security security, List<Exception> warnings) {
   if (item.isBenchmark()) addSecurityBenchmark(item, security, warnings);
   else addSecurityPerformance(item, security, warnings);
 }
  private void setChartSeries() {
    List<Exception> warnings = new ArrayList<Exception>();

    for (DataSeries item : picker.getSelectedDataSeries()) {
      if (item.getType() == Client.class)
        addClient(item, (ClientDataSeries) item.getInstance(), warnings);
      else if (item.getType() == Security.class)
        addSecurity(item, (Security) item.getInstance(), warnings);
      else if (item.getType() == Portfolio.class)
        addPortfolio(item, (Portfolio) item.getInstance(), warnings);
      else if (item.getType() == Account.class)
        addAccount(item, (Account) item.getInstance(), warnings);
      else if (item.getType() == Classification.class)
        addClassification(item, (Classification) item.getInstance(), warnings);
    }

    PortfolioPlugin.log(warnings);
  }