<?php
namespace App\Entity;
use App\Annotation\EsUploadable;
use Doctrine\ORM\Mapping as ORM;
use App\Repository\AFrameRoomRepository;
use ApiPlatform\Core\Annotation\ApiFilter;
use App\Entity\Traits\TimestampableEntity;
use Doctrine\Common\Collections\Collection;
use ApiPlatform\Core\Annotation\ApiResource;
use App\Entity\Interfaces\UploadMappedInterface;
use Doctrine\Common\Collections\ArrayCollection;
use App\Entity\Interfaces\ContainerMappedInterface;
use Symfony\Component\Serializer\Annotation\Groups;
use Symfony\Component\Validator\Constraints as Assert;
use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\SearchFilter;
/**
* @ApiResource(
* attributes={"security"="is_granted('ROLE_OPERATOR')"},
* normalizationContext={"groups"={"AFrameRoom:Read"}, "skip_null_values"=false},
* denormalizationContext={"groups"={"AFrameRoom:Write"}},
* collectionOperations={
* "post",
* "get",
* "get_aframe"={
* "route_name"="api_aframe_a3d",
* "security"="is_granted('IS_AUTHENTICATED_FULLY')",
* "method"="GET",
* "openapi_context" = {
* "parameters" = {
* {
* "name" = "locale",
* "in" = "query",
* "description" = "Enter locale",
* "schema" = {
* "type" = "string"
* }
* }
* }
* }
* },
* },
* itemOperations={
* "get"={"security"="is_granted('IS_CO_OPR', object)"},
* "put"={"security"="is_granted('IS_CO_OPR', object)"},
* "patch"={"security"="is_granted('IS_CO_OPR', object)"},
* "delete"={"security"="is_granted('IS_CO_OPR', object)"},
* "patch_set_default"={
* "route_name"="api_aframeroom_set_default_collection",
* "method"="PATCH",
* "denormalization_context"={"groups"={"AFrameRoom:SetDefault"}},
* "security"="is_granted('IS_CO_OPR', object)"
* },
* }
* )
* @ApiFilter(SearchFilter::class, properties={"container.id": "exact", "name": "partial"})
* @ORM\Entity(repositoryClass=AFrameRoomRepository::class)
*/
class AFrameRoom implements ContainerMappedInterface, UploadMappedInterface
{
/**
* Hook timestampable behavior
* updates createdAt, updatedAt fields
*/
use TimestampableEntity;
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
* @Groups({"AFrameRoom:Read"})
*/
private $id;
/**
* @ORM\Column(type="string", length=255)
* @Groups({"AFrameRoom:Read", "AFrameRoom:Write"})
*
* @Assert\NotBlank()
* @Assert\Length(max=255, maxMessage="validation.aFrameRoom:name.max")
*/
private $name;
/**
* @ORM\Column(type="string", length=255, nullable=true)
* @Groups({"AFrameRoom:Read", "AFrameRoom:Write"})
*
* @Assert\Length(max=255, maxMessage="validation.aFrameRoom:image.max")
* @EsUploadable()
*/
protected $image;
/**
* @ORM\Column(type="decimal", precision=10, scale=3)
* @Groups({"AFrameRoom:Read", "AFrameRoom:Write"})
*
* @Assert\NotBlank()
* @Assert\Regex(pattern="/^-?\d{1,7}+(\.\d{1,3}+)?$/", message="validation.aFrameRoom:camPosX.decimal")
*/
private $camPosX;
/**
* @ORM\Column(type="decimal", precision=10, scale=3)
* @Groups({"AFrameRoom:Read", "AFrameRoom:Write"})
*
* @Assert\NotBlank()
* @Assert\Regex(pattern="/^-?\d{1,7}+(\.\d{1,3}+)?$/", message="validation.aFrameRoom:camPosY.decimal")
*/
private $camPosY;
/**
* @ORM\Column(type="decimal", precision=10, scale=3)
* @Groups({"AFrameRoom:Read", "AFrameRoom:Write"})
*
* @Assert\NotBlank()
* @Assert\Regex(pattern="/^-?\d{1,7}+(\.\d{1,3}+)?$/", message="validation.aFrameRoom:camPosZ.decimal")
*/
private $camPosZ;
/**
* @ORM\Column(type="decimal", precision=10, scale=3)
* @Groups({"AFrameRoom:Read", "AFrameRoom:Write"})
*
* @Assert\NotBlank()
* @Assert\Regex(pattern="/^-?\d{1,7}+(\.\d{1,3}+)?$/", message="validation.aFrameRoom:camRotX.decimal")
*/
private $camRotX;
/**
* @ORM\Column(type="decimal", precision=10, scale=3)
* @Groups({"AFrameRoom:Read", "AFrameRoom:Write"})
*
* @Assert\NotBlank()
* @Assert\Regex(pattern="/^-?\d{1,7}+(\.\d{1,3}+)?$/", message="validation.aFrameRoom:camRotY.decimal")
*/
private $camRotY;
/**
* @ORM\Column(type="decimal", precision=10, scale=3)
* @Groups({"AFrameRoom:Read", "AFrameRoom:Write"})
*
* @Assert\NotBlank()
* @Assert\Regex(pattern="/^-?\d{1,7}+(\.\d{1,3}+)?$/", message="validation.aFrameRoom:camRotZ.decimal")
*/
private $camRotZ;
/**
* @ORM\Column(type="boolean", nullable=true)
* @Groups({"AFrameRoom:Read", "AFrameRoom:Write"})
*
* @Assert\Type("bool")
*/
private $isEntryRoom;
/**
* @ORM\ManyToOne(targetEntity=Container::class, inversedBy="aFrameRooms")
* @ORM\JoinColumn(nullable=false, onDelete="CASCADE")
* @Groups({"AFrameRoom:Read", "AFrameRoom:Write"})
*/
private $container;
/**
* @ORM\OneToMany(targetEntity=AFramePanel::class, mappedBy="aFrameRoom", orphanRemoval=true)
*/
private $aFramePanels;
/**
* @ORM\Column(type="boolean", nullable=true)
* @Groups({"AFrameRoom:Read", "AFrameRoom:Write"})
*/
private $isRotateEnable = true;
/**
* @ORM\Column(type="boolean", nullable=true)
* @Groups({"AFrameRoom:Read", "AFrameRoom:Write"})
*/
private $isShowTurnArrows;
/**
* @ORM\Column(type="decimal", precision=10, scale=3, nullable=true)
* @Groups({"AFrameRoom:Read", "AFrameRoom:Write"})
*/
private $turnLeftAngle;
/**
* @ORM\Column(type="decimal", precision=10, scale=3, nullable=true)
* @Groups({"AFrameRoom:Read", "AFrameRoom:Write"})
*/
private $turnRightAngle;
/**
* @ORM\Column(type="boolean", nullable=true)
* @Groups({"AFrameRoom:Read", "AFrameRoom:Write"})
*/
private $isRestrictLateralMovement;
/**
* @ORM\Column(type="decimal", precision=10, scale=3, nullable=true)
* @Groups({"AFrameRoom:Read", "AFrameRoom:Write"})
*/
private $lateralAngleRange;
/**
* @ORM\Column(type="boolean", nullable=true)
* @Groups({"AFrameRoom:Read", "AFrameRoom:Write"})
*/
private $isRestrictPolarMovement;
/**
* @ORM\Column(type="decimal", precision=10, scale=3, nullable=true)
* @Groups({"AFrameRoom:Read", "AFrameRoom:Write"})
*/
private $polarAngleRange;
public function __construct()
{
$this->aFramePanels = new ArrayCollection();
}
public function getId(): ?int
{
return $this->id;
}
public function getName(): ?string
{
return $this->name;
}
public function setName(string $name): self
{
$this->name = $name;
return $this;
}
public function getImage(): ?string
{
return $this->image;
}
public function setImage(?string $image): self
{
$this->image = $image;
return $this;
}
public function getCamPosX(): ?string
{
return $this->camPosX;
}
public function setCamPosX(string $camPosX): self
{
$this->camPosX = $camPosX;
return $this;
}
public function getCamPosY(): ?string
{
return $this->camPosY;
}
public function setCamPosY(string $camPosY): self
{
$this->camPosY = $camPosY;
return $this;
}
public function getCamPosZ(): ?string
{
return $this->camPosZ;
}
public function setCamPosZ(string $camPosZ): self
{
$this->camPosZ = $camPosZ;
return $this;
}
public function getCamRotX(): ?string
{
return $this->camRotX;
}
public function setCamRotX(string $camRotX): self
{
$this->camRotX = $camRotX;
return $this;
}
public function getCamRotY(): ?string
{
return $this->camRotY;
}
public function setCamRotY(string $camRotY): self
{
$this->camRotY = $camRotY;
return $this;
}
public function getCamRotZ(): ?string
{
return $this->camRotZ;
}
public function setCamRotZ(string $camRotZ): self
{
$this->camRotZ = $camRotZ;
return $this;
}
public function getIsEntryRoom(): ?bool
{
return $this->isEntryRoom;
}
public function setIsEntryRoom(?bool $isEntryRoom): self
{
$this->isEntryRoom = $isEntryRoom;
return $this;
}
public function getContainer(): ?Container
{
return $this->container;
}
public function setContainer(?Container $container): self
{
$this->container = $container;
return $this;
}
/**
* @return Collection|AFramePanel[]
*/
public function getAFramePanels(): Collection
{
return $this->aFramePanels;
}
public function addAFramePanel(AFramePanel $aFramePanel): self
{
if (!$this->aFramePanels->contains($aFramePanel)) {
$this->aFramePanels[] = $aFramePanel;
$aFramePanel->setAFrameRoom($this);
}
return $this;
}
public function removeAFramePanel(AFramePanel $aFramePanel): self
{
if ($this->aFramePanels->removeElement($aFramePanel)) {
// set the owning side to null (unless already changed)
if ($aFramePanel->getAFrameRoom() === $this) {
$aFramePanel->setAFrameRoom(null);
}
}
return $this;
}
public function getIsRotateEnable(): ?bool
{
return $this->isRotateEnable;
}
public function setIsRotateEnable(?bool $isRotateEnable): self
{
$this->isRotateEnable = $isRotateEnable;
return $this;
}
public function getIsShowTurnArrows(): ?bool
{
return $this->isShowTurnArrows;
}
public function setIsShowTurnArrows(?bool $isShowTurnArrows): self
{
$this->isShowTurnArrows = $isShowTurnArrows;
return $this;
}
public function getTurnLeftAngle(): ?string
{
return $this->turnLeftAngle;
}
public function setTurnLeftAngle(?string $turnLeftAngle): self
{
$this->turnLeftAngle = $turnLeftAngle;
return $this;
}
public function getTurnRightAngle(): ?string
{
return $this->turnRightAngle;
}
public function setTurnRightAngle(?string $turnRightAngle): self
{
$this->turnRightAngle = $turnRightAngle;
return $this;
}
public function getIsRestrictLateralMovement(): ?bool
{
return $this->isRestrictLateralMovement;
}
public function setIsRestrictLateralMovement(?bool $isRestrictLateralMovement): self
{
$this->isRestrictLateralMovement = $isRestrictLateralMovement;
return $this;
}
public function getLateralAngleRange(): ?string
{
return $this->lateralAngleRange;
}
public function setLateralAngleRange(?string $lateralAngleRange): self
{
$this->lateralAngleRange = $lateralAngleRange;
return $this;
}
public function getIsRestrictPolarMovement(): ?bool
{
return $this->isRestrictPolarMovement;
}
public function setIsRestrictPolarMovement(?bool $isRestrictPolarMovement): self
{
$this->isRestrictPolarMovement = $isRestrictPolarMovement;
return $this;
}
public function getPolarAngleRange(): ?string
{
return $this->polarAngleRange;
}
public function setPolarAngleRange(?string $polarAngleRange): self
{
$this->polarAngleRange = $polarAngleRange;
return $this;
}
}