All Downloads are FREE. Search and download functionalities are using the official Maven repository.

us.ihmc.scs2.sessionVisualizer.jfx.tools.ChartGroupTools Maven / Gradle / Ivy

package us.ihmc.scs2.sessionVisualizer.jfx.tools;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

import us.ihmc.scs2.sessionVisualizer.jfx.charts.ChartGroupLayout;
import us.ihmc.scs2.sessionVisualizer.jfx.charts.ChartGroupModel;
import us.ihmc.scs2.sessionVisualizer.jfx.charts.ChartIdentifier;
import us.ihmc.scs2.sessionVisualizer.jfx.yoComposite.YoComposite;
import us.ihmc.yoVariables.variable.YoVariable;

public class ChartGroupTools
{
   public static List toChartGroupLayouts(List yoComposites)
   {
      if (yoComposites == null || yoComposites.isEmpty())
         return null;

      YoComposite firstComposite = yoComposites.get(0);

      if (yoComposites.size() == 1)
         return toChartGroupLayouts(firstComposite);

      boolean areAllSameType = yoComposites.subList(1, yoComposites.size()).stream()
                                           .allMatch(composite -> composite.getClass().equals(firstComposite.getClass()));

      if (areAllSameType && !firstComposite.getPattern().getPreferredChartConfigurations().isEmpty() && firstComposite.getYoComponents().size() > 1)
      {
         List chartGroupLayouts = new ArrayList<>();
         List models = firstComposite.getPattern().getPreferredChartConfigurations();

         for (int i = 0; i < models.size(); i++)
         {
            ChartGroupModel model = models.get(i);
            Map> layout = new LinkedHashMap<>();

            List chartIdentifiers = model.getChartIdentifiers();

            for (int j = 0; j < chartIdentifiers.size(); j++)
            {
               int jFinal = j;
               layout.put(chartIdentifiers.get(j),
                          yoComposites.stream().map(yoComposite -> yoComposite.getYoComponents().get(jFinal)).collect(Collectors.toList()));
            }

            chartGroupLayouts.add(new ChartGroupLayout(model.getName(), layout));
         }
         return chartGroupLayouts;
      }
      else
      {
         return Arrays.asList(singleChartLayout(yoComposites), horizontalLayout(yoComposites), verticalLayout(yoComposites));
      }
   }

   public static List toChartGroupLayouts(YoComposite yoComposite)
   {
      return yoComposite.getPattern().getPreferredChartConfigurations().stream().map(model -> new ChartGroupLayout(model, yoComposite))
                        .collect(Collectors.toList());
   }

   public static ChartGroupLayout singleChartLayout(List yoComposites)
   {
      if (yoComposites == null || yoComposites.isEmpty())
         return null;

      List yoVariables = yoComposites.stream().flatMap(yoComposite -> yoComposite.getYoComponents().stream()).collect(Collectors.toList());

      return new ChartGroupLayout("Single", Collections.singletonMap(new ChartIdentifier(0, 0), yoVariables));
   }

   public static ChartGroupLayout horizontalLayout(List yoComposites)
   {
      if (yoComposites == null || yoComposites.isEmpty())
         return null;

      Map> layout = new LinkedHashMap<>();
      for (int i = 0; i < yoComposites.size(); i++)
         layout.put(new ChartIdentifier(0, i), yoComposites.get(i).getYoComponents());
      return new ChartGroupLayout("Horizontal", layout);
   }

   public static ChartGroupLayout verticalLayout(List yoComposites)
   {
      if (yoComposites == null || yoComposites.isEmpty())
         return null;

      Map> layout = new LinkedHashMap<>();
      for (int i = 0; i < yoComposites.size(); i++)
         layout.put(new ChartIdentifier(i, 0), yoComposites.get(i).getYoComponents());
      return new ChartGroupLayout("Vertical", layout);
   }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy