package de.ph87.electro.circuit.part; import com.fasterxml.jackson.annotation.JsonTypeInfo; import de.ph87.electro.circuit.part.parts.*; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.ToString; import java.awt.*; @Getter @ToString @NoArgsConstructor @JsonTypeInfo(use = JsonTypeInfo.Id.MINIMAL_CLASS) public abstract class PartDto { private String uuid; private String name; private Point position; private Orientation orientation; protected PartDto(final Part part) { this.uuid = part.getUuid(); this.name = part.getName(); this.position = part.getPosition(); this.orientation = part.getOrientation(); } public static PartDto of(final Part abstractPart) { return switch (abstractPart) { case final Battery part -> new BatteryDto(part); case final Light part -> new LightDto(part); case final Connector part -> new ConnectorDto(part); case final Switch1x1 part -> new Switch1x1Dto(part); case final Switch1x2 part -> new Switch1x2Dto(part); case final SwitchCross part -> new SwitchCrossDto(part); case final Poti part -> new PotiDto(part); case final Voltmeter part -> new MeterDto(part); case final Amperemeter part -> new MeterDto(part); case null, default -> throw new RuntimeException(); }; } }