1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118 | -----------------------------------------------------------------------
-- asf-converters-sizes -- Size converter
-- Copyright (C) 2012, 2022 Stephane Carrez
-- Written by Stephane Carrez (Stephane.Carrez@gmail.com)
--
-- Licensed under the Apache License, Version 2.0 (the "License");
-- you may not use this file except in compliance with the License.
-- You may obtain a copy of the License at
--
-- http://www.apache.org/licenses/LICENSE-2.0
--
-- Unless required by applicable law or agreed to in writing, software
-- distributed under the License is distributed on an "AS IS" BASIS,
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- See the License for the specific language governing permissions and
-- limitations under the License.
-----------------------------------------------------------------------
with Ada.Exceptions;
with Ada.Strings.Unbounded;
with Util.Locales;
with Util.Strings;
with Util.Properties.Bundles;
with ASF.Locales;
with ASF.Utils;
with ASF.Applications.Main;
package body ASF.Converters.Sizes is
ONE_KB : constant Long_Long_Integer := 1_024;
ONE_MB : constant Long_Long_Integer := ONE_KB * 1_024;
ONE_GB : constant Long_Long_Integer := ONE_MB * 1_024;
UNIT_GB : aliased constant String := "size_giga_bytes";
UNIT_MB : aliased constant String := "size_mega_bytes";
UNIT_KB : aliased constant String := "size_kilo_bytes";
UNIT_B : aliased constant String := "size_bytes";
-- ------------------------------
-- Convert the object value into a string. The object value is associated
-- with the specified component.
-- If the string cannot be converted, the Invalid_Conversion exception should be raised.
-- ------------------------------
overriding
function To_String (Convert : in Size_Converter;
Context : in ASF.Contexts.Faces.Faces_Context'Class;
Component : in ASF.Components.Base.UIComponent'Class;
Value : in Util.Beans.Objects.Object) return String is
pragma Unreferenced (Convert);
Bundle : ASF.Locales.Bundle;
Locale : constant Util.Locales.Locale := Context.Get_Locale;
begin
begin
ASF.Applications.Main.Load_Bundle (Context.Get_Application.all,
Name => "sizes",
Locale => Util.Locales.To_String (Locale),
Bundle => Bundle);
exception
when E : Util.Properties.Bundles.NO_BUNDLE =>
Component.Log_Error ("Cannot localize sizes: {0}",
Ada.Exceptions.Exception_Message (E));
end;
-- Convert the value as an integer here so that we can raise
-- the Invalid_Conversion exception.
declare
Size : constant Long_Long_Integer := Util.Beans.Objects.To_Long_Long_Integer (Value);
Val : Integer;
Values : ASF.Utils.Object_Array (1 .. 1);
Result : Ada.Strings.Unbounded.Unbounded_String;
Unit : Util.Strings.Name_Access;
begin
if Size >= ONE_GB then
Val := Integer ((Size + ONE_GB / 2) / ONE_GB);
Unit := UNIT_GB'Access;
elsif Size >= ONE_MB then
Val := Integer ((Size + ONE_MB / 2) / ONE_MB);
Unit := UNIT_MB'Access;
elsif Size >= ONE_KB then
Val := Integer ((Size + ONE_KB / 2) / ONE_KB);
Unit := UNIT_KB'Access;
else
Val := Integer (Size);
Unit := UNIT_B'Access;
end if;
Values (1) := Util.Beans.Objects.To_Object (Val);
ASF.Utils.Formats.Format (Bundle.Get (Unit.all), Values, Result);
return Ada.Strings.Unbounded.To_String (Result);
end;
exception
when E : others =>
raise ASF.Converters.Invalid_Conversion with Ada.Exceptions.Exception_Message (E);
end To_String;
-- ------------------------------
-- Convert the date string into an object for the specified component.
-- If the string cannot be converted, the Invalid_Conversion exception should be raised.
-- ------------------------------
overriding
function To_Object (Convert : in Size_Converter;
Context : in ASF.Contexts.Faces.Faces_Context'Class;
Component : in ASF.Components.Base.UIComponent'Class;
Value : in String) return Util.Beans.Objects.Object is
pragma Unreferenced (Convert, Context, Value);
begin
Component.Log_Error ("Conversion of string to a size is not implemented");
raise ASF.Converters.Invalid_Conversion with "Not implemented";
return Util.Beans.Objects.Null_Object;
end To_Object;
end ASF.Converters.Sizes;
|