Files
MDAllowedValueSets/src/enums/MDMeasurementType.php
T

490 lines
17 KiB
PHP

<?PHP
/**
* Represents a measurement type.
*
* @author Joshua Ramon Enslin <joshua@museum-digital.de>
*/
declare(strict_types = 1);
/**
* Represents a measurement type.
*/
enum MDMeasurementType implements MDValueEnumInterface, JsonSerializable {
// Main types
case length;
case height;
case width;
case weight;
case diameter;
case wall;
case die_axis;
case number_of_copies; // copies, specimen
case number_of_parts;
// Sub-types
case length_socle;
case height_socle;
case width_socle;
case length_sheet_size;
case height_sheet_size;
case width_sheet_size;
case length_image_size;
case height_image_size;
case width_image_size;
case length_frame;
case height_frame;
case width_frame;
case diameter_frame;
case length_min;
case length_max;
case height_min;
case height_max;
case width_min;
case width_max;
case diameter_min;
case diameter_max;
case length_blade;
case height_blade;
case width_blade;
case length_handle;
case height_handle;
case width_handle;
case length_scabbard;
case height_scabbard;
case width_scabbard;
case length_label;
case height_label;
case width_label;
case number_of_sheets;
case number_of_double_pages;
case number_of_standalone_sheets;
case number_of_written_pages;
case diameter_image_size;
case length_of_base;
case height_of_base;
case width_of_base;
case diameter_of_base;
case height_image_mount_inner;
case height_image_mount_outer;
case width_image_mount_inner;
case width_image_mount_outer;
case height_plate;
case width_plate;
case length_packaging;
case height_packaging;
case width_packaging;
case length_box;
case height_box;
case width_box;
/**
* Returns a value of this type based on a string.
*
* @param string $input Input to get a value from.
*
* @return MDMeasurementType
*/
public static function fromString(string $input):MDMeasurementType {
return match($input) {
'length' => self::length,
'height' => self::height,
'width' => self::width,
'number_of_copies' => self::number_of_copies,
'weight' => self::weight,
'diameter' => self::diameter,
'wall' => self::wall,
'number_of_parts' => self::number_of_parts,
'die_axis' => self::die_axis,
'length_socle' => self::length_socle,
'height_socle' => self::height_socle,
'width_socle' => self::width_socle,
'length_sheet_size' => self::length_sheet_size,
'height_sheet_size' => self::height_sheet_size,
'width_sheet_size' => self::width_sheet_size,
'length_image_size' => self::length_image_size,
'height_image_size' => self::height_image_size,
'width_image_size' => self::width_image_size,
'length_frame' => self::length_frame,
'height_frame' => self::height_frame,
'width_frame' => self::width_frame,
'length_min' => self::length_min,
'length_max' => self::length_max,
'height_min' => self::height_min,
'height_max' => self::height_max,
'width_min' => self::width_min,
'width_max' => self::width_max,
'diameter_min' => self::diameter_min,
'diameter_max' => self::diameter_max,
'diameter_frame' => self::diameter_frame,
'length_blade' => self::length_blade,
'height_blade' => self::height_blade,
'width_blade' => self::width_blade,
'length_handle' => self::length_handle,
'height_handle' => self::height_handle,
'width_handle' => self::width_handle,
'length_scabbard' => self::length_scabbard,
'height_scabbard' => self::height_scabbard,
'width_scabbard' => self::width_scabbard,
'length_label' => self::length_label,
'height_label' => self::height_label,
'width_label' => self::width_label,
'number_of_sheets' => self::number_of_sheets,
'number_of_double_pages' => self::number_of_double_pages,
'number_of_standalone_sheets' => self::number_of_standalone_sheets,
'number_of_written_pages' => self::number_of_written_pages,
'diameter_image_size' => self::diameter_image_size,
'length_of_base' => self::length_of_base,
'height_of_base' => self::height_of_base,
'width_of_base' => self::width_of_base,
'diameter_of_base' => self::diameter_of_base,
'height_image_mount_inner' => self::height_image_mount_inner,
'height_image_mount_outer' => self::height_image_mount_outer,
'width_image_mount_inner' => self::width_image_mount_inner,
'width_image_mount_outer' => self::width_image_mount_outer,
'height_plate' => self::height_plate,
'width_plate' => self::width_plate,
'length_packaging' => self::length_packaging,
'height_packaging' => self::height_packaging,
'width_packaging' => self::width_packaging,
'length_box' => self::length_box,
'height_box' => self::height_box,
'width_box' => self::width_box,
default => throw new MDpageParameterNotFromListException("Unknown measurement type"),
};
}
/**
* Returns a value of this type based on an integer.
*
* @param integer $input Input to get a value from.
*
* @return MDMeasurementType
*/
public static function fromInt(int $input):MDMeasurementType {
return match($input) {
1 => self::length,
2 => self::height,
3 => self::width,
4 => self::number_of_copies,
5 => self::weight,
6 => self::diameter,
7 => self::wall,
8 => self::number_of_parts,
9 => self::die_axis,
10 => self::length_socle,
11 => self::height_socle,
12 => self::width_socle,
13 => self::length_sheet_size,
14 => self::height_sheet_size,
15 => self::width_sheet_size,
16 => self::length_image_size,
17 => self::height_image_size,
18 => self::width_image_size,
19 => self::length_frame,
20 => self::height_frame,
21 => self::width_frame,
22 => self::length_min,
23 => self::length_max,
24 => self::height_min,
25 => self::height_max,
26 => self::width_min,
27 => self::width_max,
28 => self::diameter_min,
29 => self::diameter_max,
30 => self::diameter_frame,
31 => self::length_blade,
32 => self::height_blade,
33 => self::width_blade,
34 => self::number_of_sheets,
35 => self::number_of_double_pages,
36 => self::number_of_standalone_sheets,
37 => self::number_of_written_pages,
38 => self::diameter_image_size,
39 => self::length_of_base,
40 => self::height_of_base,
41 => self::width_of_base,
42 => self::diameter_of_base,
43 => self::length_handle,
44 => self::height_handle,
45 => self::width_handle,
46 => self::length_scabbard,
47 => self::height_scabbard,
48 => self::width_scabbard,
49 => self::length_label,
50 => self::height_label,
51 => self::width_label,
52 => self::height_image_mount_inner,
53 => self::height_image_mount_outer,
54 => self::width_image_mount_inner,
55 => self::width_image_mount_outer,
56 => self::height_plate,
57 => self::width_plate,
58 => self::length_packaging,
59 => self::height_packaging,
60 => self::width_packaging,
61 => self::length_box,
62 => self::height_box,
63 => self::width_box,
default => throw new MDpageParameterNotFromListException("Unknown measurement type"),
};
}
/**
*
*/
/**
* Lists all available names.
*
* @return array<string>
*/
public static function caseNames():array {
$output = [];
$cases = self::cases();
foreach ($cases as $case) {
$output[] = $case->name;
}
return $output;
}
/**
* Returns the highest level measurement type relative to the provided one.
*
* @return MDMeasurementType
*/
public function getHighestSuperordinate():MDMeasurementType {
return match($this) {
self::length => self::length,
self::height => self::height,
self::width => self::width,
self::number_of_copies => self::number_of_copies,
self::weight => self::weight,
self::diameter => self::diameter,
self::wall => self::wall,
self::number_of_parts => self::number_of_parts,
self::die_axis => self::die_axis,
self::length_socle => self::length,
self::height_socle => self::height,
self::width_socle => self::width,
self::length_sheet_size => self::length,
self::height_sheet_size => self::height,
self::width_sheet_size => self::width,
self::length_image_size => self::length,
self::height_image_size => self::height,
self::width_image_size => self::width,
self::length_frame => self::length,
self::height_frame => self::height,
self::width_frame => self::width,
self::length_min => self::length,
self::length_max => self::length,
self::height_min => self::height,
self::height_max => self::height,
self::width_min => self::width,
self::width_max => self::width,
self::diameter_min => self::diameter,
self::diameter_max => self::diameter,
self::diameter_frame => self::diameter,
self::length_blade => self::length,
self::height_blade => self::height,
self::width_blade => self::width,
self::number_of_sheets => self::number_of_parts,
self::number_of_double_pages => self::number_of_parts,
self::number_of_standalone_sheets => self::number_of_parts,
self::number_of_written_pages => self::number_of_parts,
self::diameter_image_size => self::diameter,
self::length_of_base => self::length,
self::height_of_base => self::height,
self::width_of_base => self::width,
self::diameter_of_base => self::diameter,
self::length_handle => self::length,
self::height_handle => self::height,
self::width_handle => self::width,
self::length_scabbard => self::length,
self::height_scabbard => self::height,
self::width_scabbard => self::width,
self::length_label => self::length,
self::height_label => self::height,
self::width_label => self::width,
self::height_image_mount_inner => self::height,
self::height_image_mount_outer => self::height,
self::width_image_mount_inner => self::width,
self::width_image_mount_outer => self::width,
self::height_plate => self::height,
self::width_plate => self::width,
self::length_packaging => self::length,
self::height_packaging => self::height,
self::width_packaging => self::width,
self::length_box => self::length,
self::height_box => self::height,
self::width_box => self::width,
# default => throw new MDpageParameterNotFromListException("Unknown measurement type"),
};
}
/**
* Returns an integer representation of the collective (for storage in DB).
*
* @return integer
*/
public function toInt():int {
return match($this) {
self::length => 1,
self::height => 2,
self::width => 3,
self::number_of_copies => 4,
self::weight => 5,
self::diameter => 6,
self::wall => 7,
self::number_of_parts => 8,
self::die_axis => 9,
self::length_socle => 10,
self::height_socle => 11,
self::width_socle => 12,
self::length_sheet_size => 13,
self::height_sheet_size => 14,
self::width_sheet_size => 15,
self::length_image_size => 16,
self::height_image_size => 17,
self::width_image_size => 18,
self::length_frame => 19,
self::height_frame => 20,
self::width_frame => 21,
self::length_min => 22,
self::length_max => 23,
self::height_min => 24,
self::height_max => 25,
self::width_min => 26,
self::width_max => 27,
self::diameter_min => 28,
self::diameter_max => 29,
self::diameter_frame => 30,
self::length_blade => 31,
self::height_blade => 32,
self::width_blade => 33,
self::number_of_sheets => 34,
self::number_of_double_pages => 35,
self::number_of_standalone_sheets => 36,
self::number_of_written_pages => 37,
self::diameter_image_size => 38,
self::length_of_base => 39,
self::height_of_base => 40,
self::width_of_base => 41,
self::diameter_of_base => 42,
self::length_handle => 43,
self::height_handle => 44,
self::width_handle => 45,
self::length_scabbard => 46,
self::height_scabbard => 47,
self::width_scabbard => 48,
self::length_label => 49,
self::height_label => 50,
self::width_label => 51,
self::height_image_mount_inner => 52,
self::height_image_mount_outer => 53,
self::width_image_mount_inner => 54,
self::width_image_mount_outer => 55,
self::height_plate => 56,
self::width_plate => 57,
self::length_packaging => 58,
self::height_packaging => 59,
self::width_packaging => 60,
self::length_box => 61,
self::height_box => 62,
self::width_box => 63,
# default => throw new MDpageParameterNotFromListException("Unknown measurement type"),
};
}
/**
* Returns suitable measurement type.
*
* @return class-string
*/
public function getMeasurementUnit():string {
return match($this->getHighestSuperordinate()) {
self::length,
self::height,
self::width,
self::wall,
self::diameter => MDLengthUnit::Class,
self::number_of_copies => MDCountCopiesUnit::Class,
self::weight => MDWeightUnit::Class,
self::number_of_parts => MDCountPartsUnit::Class,
self::die_axis => MDDieAxisUnit::Class,
# default => throw new MDpageParameterNotFromListException("Unknown measurement type"),
};
}
/**
* Gets an unsorted list of the entries in a translated version.
*
* @param MDTlLoader $tlLoader Translation loader.
*
* @return array<string, string>
*/
public static function getUnsortedList(MDTlLoader $tlLoader):array {
return MDValueSet::getTlUnsortedList($tlLoader, self::caseNames(), "measurement_type_set", "measurement_type_set");
}
/**
* Gets a sorted list of the entries in a translated version.
*
* @param MDTlLoader $tlLoader Translation loader.
*
* @return array<string, string>
*/
public static function getSortedList(MDTlLoader $tlLoader):array {
return MDValueSet::getTlSortedList($tlLoader, self::caseNames(), "measurement_type_set", "measurement_type_set");
}
/**
* Returns the name of the current value in translation.
*
* @param MDTlLoader $tlLoader Translation loader.
*
* @return string
*/
public function getTledName(MDTlLoader $tlLoader):string {
return $tlLoader->tl("measurement_type_set", "measurement_type_set", $this->name);
}
/**
* Provides the option to serialize as a string during json_encode().
*
* @return string
*/
public function jsonSerialize():string {
return $this->name;
}
}