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

org.opentcs.operationsdesk.components.drawing.OpenTCSDrawingEditorOperating Maven / Gradle / Ivy

There is a newer version: 6.2.0
Show newest version
/**
 * Copyright (c) The openTCS Authors.
 *
 * This program is free software and subject to the MIT license. (For details,
 * see the licensing information (LICENSE.txt) you should have received with
 * this copy of the software.)
 */
package org.opentcs.operationsdesk.components.drawing;

import static java.util.Objects.requireNonNull;

import jakarta.inject.Inject;
import java.util.List;
import javax.swing.SwingUtilities;
import org.opentcs.guing.base.components.properties.event.AttributesChangeEvent;
import org.opentcs.guing.base.components.properties.event.NullAttributesChangeListener;
import org.opentcs.guing.base.model.elements.VehicleModel;
import org.opentcs.guing.common.components.drawing.OpenTCSDrawingEditor;
import org.opentcs.guing.common.components.drawing.OpenTCSDrawingView;
import org.opentcs.guing.common.event.SystemModelTransitionEvent;
import org.opentcs.guing.common.persistence.ModelManager;
import org.opentcs.operationsdesk.components.drawing.figures.NamedVehicleFigure;
import org.opentcs.operationsdesk.util.VehicleCourseObjectFactory;

/**
 * The DrawingEditor coordinates DrawingViews
 * and the Drawing.
 * It also offers methods to add specific unique figures to the
 * Drawing.
 */
public class OpenTCSDrawingEditorOperating
    extends
      OpenTCSDrawingEditor {

  /**
   * Provides the current system model.
   */
  private final ModelManager modelManager;
  /**
   * A factory for course objects.
   */
  private final VehicleCourseObjectFactory courseObjectFactory;

  /**
   * Creates a new instance.
   *
   * @param courseObjectFactory A factory for course objects.
   * @param modelManager Provides the current system model.
   */
  @Inject
  public OpenTCSDrawingEditorOperating(
      VehicleCourseObjectFactory courseObjectFactory,
      ModelManager modelManager
  ) {
    super(courseObjectFactory);
    this.courseObjectFactory = requireNonNull(courseObjectFactory, "courseObjectFactory");
    this.modelManager = requireNonNull(modelManager, "modelManager");
  }

  @Override
  public void onEvent(Object event) {
    if (event instanceof SystemModelTransitionEvent) {
      handleSystemModelTransition((SystemModelTransitionEvent) event);
    }
  }

  private void handleSystemModelTransition(SystemModelTransitionEvent evt) {
    switch (evt.getStage()) {
      case UNLOADING:
        // XXX Remove vehicles?
        break;
      case LOADED:
        setVehicles(modelManager.getModel().getVehicleModels());
//        initializeOffsetFigures();
        break;
      default:
        // Do nada.
    }
  }

  /**
   * Adds the given vehicles to the drawing.
   *
   * @param vehicleModels The VehicleModels to add.
   */
  public void setVehicles(List vehicleModels) {
    for (VehicleModel vehicleComp : vehicleModels) {
      addVehicle(vehicleComp);
    }
  }

  /**
   * Adds a vehicle to the drawing.
   *
   * @param vehicleModel The vehicle model to add.
   */
  public void addVehicle(VehicleModel vehicleModel) {
    NamedVehicleFigure vehicleFigure
        = courseObjectFactory.createNamedVehicleFigure(vehicleModel);

    SwingUtilities.invokeLater(() -> getDrawing().add(vehicleFigure));

    vehicleModel.addAttributesChangeListener(vehicleFigure);
    modelManager.getModel().registerFigure(vehicleModel, vehicleFigure);

    vehicleModel.setDisplayDriveOrders(true);
    for (OpenTCSDrawingView view : getAllViews()) {
      view.displayDriveOrders(vehicleModel, true);
    }
    vehicleFigure.propertiesChanged(
        new AttributesChangeEvent(new NullAttributesChangeListener(), vehicleModel)
    );
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy