public void refresh() {
    try {
      Date now = new Date();
      HashMap<String, Double> readyTasks = new HashMap<String, Double>();
      HashMap<String, Double> execTasks = new HashMap<String, Double>();
      HashMap<String, Double> suspendTasks = new HashMap<String, Double>();
      HashMap<String, Double> expireTasks = new HashMap<String, Double>();

      HashSet<String> performersNames = new HashSet<String>();

      Collection<LightActivityInstance> ais =
          ProcessbaseApplication.getCurrent().getBpmModule().getActivityInstances();
      for (LightActivityInstance ai : ais) {
        ActivityDefinition ad =
            ProcessbaseApplication.getCurrent()
                .getBpmModule()
                .getProcessActivity(ai.getProcessDefinitionUUID(), ai.getActivityName());
        if (!ad.getPerformers().isEmpty()) {
          performersNames.add(ad.getPerformers().toString());
        }
        if (ai.isTask() && ai.getState().equals(ActivityState.READY)) {
          if (readyTasks.containsKey(ad.getPerformers().toString())) {
            Double c = readyTasks.get(ad.getPerformers().toString());
            readyTasks.put(ad.getPerformers().toString(), c.doubleValue() + 1);
          } else {
            readyTasks.put(ad.getPerformers().toString(), 1.0);
          }
        } else if (ai.isTask() && ai.getState().equals(ActivityState.EXECUTING)) {
          if (execTasks.containsKey(ad.getPerformers().toString())) {
            Double c = execTasks.get(ad.getPerformers().toString());
            execTasks.put(ad.getPerformers().toString(), c.doubleValue() + 1);
          } else {
            execTasks.put(ad.getPerformers().toString(), 1.0);
          }
        } else if (ai.isTask() && ai.getState().equals(ActivityState.SUSPENDED)) {
          if (suspendTasks.containsKey(ad.getPerformers().toString())) {
            Double c = suspendTasks.get(ad.getPerformers().toString());
            suspendTasks.put(ad.getPerformers().toString(), c.doubleValue() + 1);
          } else {
            suspendTasks.put(ad.getPerformers().toString(), 1.0);
          }
        }
        if (ai.isTask()
            && (ai.getState().equals(ActivityState.EXECUTING)
                || ai.getState().equals(ActivityState.READY)
                || ai.getState().equals(ActivityState.SUSPENDED))
            && ai.getExpectedEndDate() != null
            && ai.getExpectedEndDate().before(now)) {
          if (expireTasks.containsKey(ad.getPerformers().toString())) {
            Double c = expireTasks.get(ad.getPerformers().toString());
            expireTasks.put(ad.getPerformers().toString(), c.doubleValue() + 1);
          } else {
            expireTasks.put(ad.getPerformers().toString(), 1.0);
          }
        }
      }
      ArrayList<XYSeries> xySeries = new ArrayList<XYSeries>();
      XYSeries seriesDataREADY = new XYSeries("READY");
      ArrayList<Double> r = new ArrayList<Double>();
      XYSeries seriesDataEXECUTING = new XYSeries("EXECUTING");
      ArrayList<Double> rEXECUTING = new ArrayList<Double>();
      XYSeries seriesDataSUSPEND = new XYSeries("SUSPEND");
      ArrayList<Double> rSUSPEND = new ArrayList<Double>();
      XYSeries seriesDataEXPIRED = new XYSeries("EXPIRED");
      ArrayList<Double> rEXPIRED = new ArrayList<Double>();

      for (String perf : performersNames) {
        r.add(readyTasks.containsKey(perf) ? readyTasks.get(perf) : 0);
        rEXECUTING.add(execTasks.containsKey(perf) ? execTasks.get(perf) : 0);
        rSUSPEND.add(suspendTasks.containsKey(perf) ? suspendTasks.get(perf) : 0);
        rEXPIRED.add(expireTasks.containsKey(perf) ? expireTasks.get(perf) : 0);
      }
      seriesDataREADY.setSeriesPoints(getPoints(seriesDataREADY, r));
      xySeries.add(seriesDataREADY);
      seriesDataEXECUTING.setSeriesPoints(getPoints(seriesDataEXECUTING, rEXECUTING));
      xySeries.add(seriesDataEXECUTING);
      seriesDataSUSPEND.setSeriesPoints(getPoints(seriesDataSUSPEND, rSUSPEND));
      xySeries.add(seriesDataSUSPEND);
      seriesDataEXPIRED.setSeriesPoints(getPoints(seriesDataEXPIRED, rEXPIRED));
      xySeries.add(seriesDataEXPIRED);

      removeAllComponents();
      InvientCharts ich = createchart(new ArrayList(performersNames), xySeries);
      ich.setWidth("100%");
      addComponent(ich);
    } catch (Exception ex) {
      ex.printStackTrace();
    }
  }