*/ 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 */ 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 */ 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 */ 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; } }