ogcore/src/Dto/Input/PartitionInput.php

118 lines
4.0 KiB
PHP

<?php
namespace App\Dto\Input;
use ApiPlatform\Metadata\ApiProperty;
use App\Dto\Output\ClientOutput;
use App\Dto\Output\ImageOutput;
use App\Dto\Output\OperativeSystemOutput;
use App\Dto\Output\OrganizationalUnitOutput;
use App\Entity\HardwareProfile;
use App\Entity\Menu;
use App\Entity\Partition;
use Ramsey\Uuid\UuidInterface;
use Symfony\Component\Serializer\Annotation\Groups;
use Symfony\Component\Validator\Constraints as Assert;
final class PartitionInput
{
#[Groups(['partition:write', 'client:write'])]
public ?UuidInterface $uuid = null;
#[Groups(['partition:write'])]
public ?bool $removed = null;
#[Groups(['partition:write', 'client:write'])]
public ?bool $format = null;
#[Groups(['partition:write', 'client:write'])]
#[ApiProperty(description: 'The disk number of the partition', example: 1)]
public ?int $diskNumber = null;
#[Groups(['partition:write', 'client:write'])]
#[ApiProperty(description: 'The number of the partition', example: 1)]
public ?int $partitionNumber = null;
#[Groups(['partition:write', 'client:write'])]
#[ApiProperty(description: 'The code of the partition', example: "code")]
public ?string $partitionCode = null;
#[Assert\NotNull()]
#[Groups(['partition:write', 'client:write'])]
#[ApiProperty(description: 'The size of the partition', example: 100)]
public ?float $size = null;
#[Groups(['partition:write', 'client:write'])]
#[ApiProperty(description: 'The cache content of the partition', example: "cache content")]
public ?string $cacheContent = null;
#[Groups(['partition:write', 'client:write'])]
#[ApiProperty(description: 'The type of the partition', example: "LINUX")]
public ?string $type = null;
#[Groups(['partition:write', 'client:write'])]
#[ApiProperty(description: 'The filesystem of the partition', example: "EXT4")]
public ?string $filesystem = null;
#[Groups(['partition:write', 'client:write'])]
#[ApiProperty(description: 'The operative system name of the partition', example: "Ubuntu")]
public ?OperativeSystemOutput $operativeSystem = null;
#[Groups(['partition:write', 'client:write'])]
#[ApiProperty(description: 'The memory usage of the partition', example: 100)]
public ?int $memoryUsage = null;
#[Groups(['partition:write', 'client:write'])]
#[ApiProperty(description: 'The image of the partition')]
public ?ImageOutput $image = null;
public function __construct(?Partition $partition = null)
{
if (!$partition) {
return;
}
$this->diskNumber = $partition->getDiskNumber();
$this->partitionNumber = $partition->getPartitionNumber();
$this->partitionCode = $partition->getPartitionCode();
$this->size = $partition->getSize();
$this->cacheContent = $partition->getCacheContent();
$this->filesystem = $partition->getFilesystem();
if ($partition->getOperativeSystem()) {
$this->operativeSystem = new OperativeSystemOutput($partition->getOperativeSystem());
}
$this->memoryUsage = $partition->getMemoryUsage();
if ($partition->getImage()) {
$this->image = new ImageOutput($partition->getImage());
}
}
public function createOrUpdateEntity(?Partition $partition = null): Partition
{
if (!$partition) {
$partition = new Partition();
}
$partition->setDiskNumber($this->diskNumber);
$partition->setPartitionNumber($this->partitionNumber);
$partition->setPartitionCode($this->partitionCode);
$partition->setSize($this->size * 1024);
$partition->setCacheContent($this->cacheContent);
$partition->setFilesystem($this->filesystem);
if ($this->operativeSystem) {
$partition->setOperativeSystem($this->operativeSystem->getEntity());
}
$partition->setMemoryUsage($this->memoryUsage * 100);
if ($this->image) {
$partition->setImage($this->image->getEntity());
}
return $partition;
}
}