Mercurial Hosting > luan
annotate src/luan/modules/Utils.java @ 1831:8f9ae295bf6a default tip
add Hosted.authorize
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Thu, 26 Sep 2024 15:07:45 -0600 |
parents | 0ba144491a42 |
children |
rev | line source |
---|---|
167
4c0131c2b650
merge luan/lib into modules
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
161
diff
changeset
|
1 package luan.modules; |
75
aa7538ae5fb6
can now load modules from classpath
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
2 |
aa7538ae5fb6
can now load modules from classpath
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
3 import java.io.Reader; |
aa7538ae5fb6
can now load modules from classpath
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
4 import java.io.IOException; |
115
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
88
diff
changeset
|
5 import java.io.ByteArrayOutputStream; |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
88
diff
changeset
|
6 import java.io.InputStream; |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
88
diff
changeset
|
7 import java.io.OutputStream; |
143
fcb81fa2df0d
handle urls and java resources as files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
130
diff
changeset
|
8 import java.io.File; |
713
a21e9594307d
add Process handling to Utils.java
Franklin Schmidt <fschmidt@gmail.com>
parents:
646
diff
changeset
|
9 import java.io.InputStreamReader; |
143
fcb81fa2df0d
handle urls and java resources as files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
130
diff
changeset
|
10 import java.net.URL; |
fcb81fa2df0d
handle urls and java resources as files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
130
diff
changeset
|
11 import java.net.MalformedURLException; |
1389
eb8b35dccd99
cleanup and stringify change
Franklin Schmidt <fschmidt@gmail.com>
parents:
1367
diff
changeset
|
12 import java.util.Map; |
1493 | 13 import goodjava.io.IoUtils; |
1389
eb8b35dccd99
cleanup and stringify change
Franklin Schmidt <fschmidt@gmail.com>
parents:
1367
diff
changeset
|
14 import luan.Luan; |
86
6db8f286fa6c
_ENV is per module, not global
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
75
diff
changeset
|
15 import luan.LuanException; |
251
705d14f4d8ee
start web testing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
16 import luan.LuanTable; |
582
31926755689e
add Thread.synchronized
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
17 import luan.LuanFunction; |
75
aa7538ae5fb6
can now load modules from classpath
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
18 |
aa7538ae5fb6
can now load modules from classpath
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
19 |
aa7538ae5fb6
can now load modules from classpath
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
20 public final class Utils { |
aa7538ae5fb6
can now load modules from classpath
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
21 private Utils() {} // never |
aa7538ae5fb6
can now load modules from classpath
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
22 |
116
1ff1c32417eb
more IoLib work and added init.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
115
diff
changeset
|
23 static final int bufSize = 8192; |
115
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
88
diff
changeset
|
24 |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
637
diff
changeset
|
25 private static void checkNotNull(Object v,String expected,int pos) throws LuanException { |
86
6db8f286fa6c
_ENV is per module, not global
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
75
diff
changeset
|
26 if( v == null ) |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
637
diff
changeset
|
27 throw new LuanException("bad argument #"+pos+" ("+expected+" expected, got nil)"); |
637
6ea90dc10375
bbcode parser now takes a quoter function
Franklin Schmidt <fschmidt@gmail.com>
parents:
582
diff
changeset
|
28 } |
6ea90dc10375
bbcode parser now takes a quoter function
Franklin Schmidt <fschmidt@gmail.com>
parents:
582
diff
changeset
|
29 |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
637
diff
changeset
|
30 public static void checkNotNull(String s,int pos) throws LuanException { |
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
637
diff
changeset
|
31 checkNotNull(s,"string",pos); |
86
6db8f286fa6c
_ENV is per module, not global
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
75
diff
changeset
|
32 } |
6db8f286fa6c
_ENV is per module, not global
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
75
diff
changeset
|
33 |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
637
diff
changeset
|
34 public static void checkNotNull(String s) throws LuanException { |
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
637
diff
changeset
|
35 checkNotNull(s,1); |
637
6ea90dc10375
bbcode parser now takes a quoter function
Franklin Schmidt <fschmidt@gmail.com>
parents:
582
diff
changeset
|
36 } |
6ea90dc10375
bbcode parser now takes a quoter function
Franklin Schmidt <fschmidt@gmail.com>
parents:
582
diff
changeset
|
37 |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
637
diff
changeset
|
38 public static void checkNotNull(byte[] b,int pos) throws LuanException { |
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
637
diff
changeset
|
39 checkNotNull(b,"binary",pos); |
251
705d14f4d8ee
start web testing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
40 } |
705d14f4d8ee
start web testing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
41 |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
637
diff
changeset
|
42 public static void checkNotNull(byte[] b) throws LuanException { |
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
637
diff
changeset
|
43 checkNotNull(b,1); |
637
6ea90dc10375
bbcode parser now takes a quoter function
Franklin Schmidt <fschmidt@gmail.com>
parents:
582
diff
changeset
|
44 } |
6ea90dc10375
bbcode parser now takes a quoter function
Franklin Schmidt <fschmidt@gmail.com>
parents:
582
diff
changeset
|
45 |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
637
diff
changeset
|
46 public static void checkNotNull(LuanTable t,int pos) throws LuanException { |
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
637
diff
changeset
|
47 checkNotNull(t,"table",pos); |
305
5e7450ac27f2
rename String.byte() to String.unicode();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
260
diff
changeset
|
48 } |
5e7450ac27f2
rename String.byte() to String.unicode();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
260
diff
changeset
|
49 |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
637
diff
changeset
|
50 public static void checkNotNull(LuanTable t) throws LuanException { |
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
637
diff
changeset
|
51 checkNotNull(t,1); |
637
6ea90dc10375
bbcode parser now takes a quoter function
Franklin Schmidt <fschmidt@gmail.com>
parents:
582
diff
changeset
|
52 } |
6ea90dc10375
bbcode parser now takes a quoter function
Franklin Schmidt <fschmidt@gmail.com>
parents:
582
diff
changeset
|
53 |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
637
diff
changeset
|
54 public static void checkNotNull(Number n,int pos) throws LuanException { |
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
637
diff
changeset
|
55 checkNotNull(n,"number",pos); |
251
705d14f4d8ee
start web testing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
56 } |
705d14f4d8ee
start web testing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
57 |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
637
diff
changeset
|
58 public static void checkNotNull(Number n) throws LuanException { |
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
637
diff
changeset
|
59 checkNotNull(n,1); |
637
6ea90dc10375
bbcode parser now takes a quoter function
Franklin Schmidt <fschmidt@gmail.com>
parents:
582
diff
changeset
|
60 } |
6ea90dc10375
bbcode parser now takes a quoter function
Franklin Schmidt <fschmidt@gmail.com>
parents:
582
diff
changeset
|
61 |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
637
diff
changeset
|
62 public static void checkNotNull(LuanFunction fn,int pos) throws LuanException { |
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
637
diff
changeset
|
63 checkNotNull(fn,"function",pos); |
251
705d14f4d8ee
start web testing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
64 } |
705d14f4d8ee
start web testing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
65 |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
637
diff
changeset
|
66 public static void checkNotNull(LuanFunction fn) throws LuanException { |
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
637
diff
changeset
|
67 checkNotNull(fn,1); |
582
31926755689e
add Thread.synchronized
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
68 } |
31926755689e
add Thread.synchronized
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
69 |
115
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
88
diff
changeset
|
70 public static byte[] readAll(InputStream in) |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
88
diff
changeset
|
71 throws IOException |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
88
diff
changeset
|
72 { |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
88
diff
changeset
|
73 ByteArrayOutputStream out = new ByteArrayOutputStream(); |
1493 | 74 IoUtils.copyAll(in,out); |
115
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
88
diff
changeset
|
75 return out.toByteArray(); |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
88
diff
changeset
|
76 } |
143
fcb81fa2df0d
handle urls and java resources as files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
130
diff
changeset
|
77 |
1389
eb8b35dccd99
cleanup and stringify change
Franklin Schmidt <fschmidt@gmail.com>
parents:
1367
diff
changeset
|
78 |
1420 | 79 public static String removeString(LuanTable options,String key) throws LuanException { |
80 Object val = options.remove(key); | |
1389
eb8b35dccd99
cleanup and stringify change
Franklin Schmidt <fschmidt@gmail.com>
parents:
1367
diff
changeset
|
81 if( val!=null && !(val instanceof String) ) |
eb8b35dccd99
cleanup and stringify change
Franklin Schmidt <fschmidt@gmail.com>
parents:
1367
diff
changeset
|
82 throw new LuanException( "parameter '"+key+"' must be a string but is a "+Luan.type(val) ); |
eb8b35dccd99
cleanup and stringify change
Franklin Schmidt <fschmidt@gmail.com>
parents:
1367
diff
changeset
|
83 return (String)val; |
eb8b35dccd99
cleanup and stringify change
Franklin Schmidt <fschmidt@gmail.com>
parents:
1367
diff
changeset
|
84 } |
eb8b35dccd99
cleanup and stringify change
Franklin Schmidt <fschmidt@gmail.com>
parents:
1367
diff
changeset
|
85 |
1420 | 86 public static String removeRequiredString(LuanTable options,String key) throws LuanException { |
87 String s = removeString(options,key); | |
1392 | 88 if( s==null ) |
89 throw new LuanException( "parameter '"+key+"' is required" ); | |
90 return s; | |
91 } | |
92 | |
1420 | 93 public static Number removeNumber(LuanTable options,String key) throws LuanException { |
94 Object val = options.remove(key); | |
1389
eb8b35dccd99
cleanup and stringify change
Franklin Schmidt <fschmidt@gmail.com>
parents:
1367
diff
changeset
|
95 if( val!=null && !(val instanceof Number) ) |
eb8b35dccd99
cleanup and stringify change
Franklin Schmidt <fschmidt@gmail.com>
parents:
1367
diff
changeset
|
96 throw new LuanException( "parameter '"+key+"' must be a string but is a "+Luan.type(val) ); |
eb8b35dccd99
cleanup and stringify change
Franklin Schmidt <fschmidt@gmail.com>
parents:
1367
diff
changeset
|
97 return (Number)val; |
eb8b35dccd99
cleanup and stringify change
Franklin Schmidt <fschmidt@gmail.com>
parents:
1367
diff
changeset
|
98 } |
eb8b35dccd99
cleanup and stringify change
Franklin Schmidt <fschmidt@gmail.com>
parents:
1367
diff
changeset
|
99 |
1420 | 100 public static Integer removeInteger(LuanTable options,String key) throws LuanException { |
101 Object val = options.remove(key); | |
1389
eb8b35dccd99
cleanup and stringify change
Franklin Schmidt <fschmidt@gmail.com>
parents:
1367
diff
changeset
|
102 if( val==null ) |
eb8b35dccd99
cleanup and stringify change
Franklin Schmidt <fschmidt@gmail.com>
parents:
1367
diff
changeset
|
103 return null; |
eb8b35dccd99
cleanup and stringify change
Franklin Schmidt <fschmidt@gmail.com>
parents:
1367
diff
changeset
|
104 Integer i = Luan.asInteger(val); |
eb8b35dccd99
cleanup and stringify change
Franklin Schmidt <fschmidt@gmail.com>
parents:
1367
diff
changeset
|
105 if( i==null ) { |
eb8b35dccd99
cleanup and stringify change
Franklin Schmidt <fschmidt@gmail.com>
parents:
1367
diff
changeset
|
106 String type = val instanceof Number ? val.getClass().getSimpleName().toLowerCase() : Luan.type(val); |
eb8b35dccd99
cleanup and stringify change
Franklin Schmidt <fschmidt@gmail.com>
parents:
1367
diff
changeset
|
107 throw new LuanException( "parameter '"+key+"' must be an integer but is a "+type ); |
eb8b35dccd99
cleanup and stringify change
Franklin Schmidt <fschmidt@gmail.com>
parents:
1367
diff
changeset
|
108 } |
eb8b35dccd99
cleanup and stringify change
Franklin Schmidt <fschmidt@gmail.com>
parents:
1367
diff
changeset
|
109 return i; |
eb8b35dccd99
cleanup and stringify change
Franklin Schmidt <fschmidt@gmail.com>
parents:
1367
diff
changeset
|
110 } |
eb8b35dccd99
cleanup and stringify change
Franklin Schmidt <fschmidt@gmail.com>
parents:
1367
diff
changeset
|
111 |
1420 | 112 public static LuanTable removeTable(LuanTable options,String key) throws LuanException { |
113 Object val = options.remove(key); | |
1389
eb8b35dccd99
cleanup and stringify change
Franklin Schmidt <fschmidt@gmail.com>
parents:
1367
diff
changeset
|
114 if( val!=null && !(val instanceof LuanTable) ) |
eb8b35dccd99
cleanup and stringify change
Franklin Schmidt <fschmidt@gmail.com>
parents:
1367
diff
changeset
|
115 throw new LuanException( "parameter '"+key+"' must be a table but is a "+Luan.type(val) ); |
eb8b35dccd99
cleanup and stringify change
Franklin Schmidt <fschmidt@gmail.com>
parents:
1367
diff
changeset
|
116 return (LuanTable)val; |
eb8b35dccd99
cleanup and stringify change
Franklin Schmidt <fschmidt@gmail.com>
parents:
1367
diff
changeset
|
117 } |
eb8b35dccd99
cleanup and stringify change
Franklin Schmidt <fschmidt@gmail.com>
parents:
1367
diff
changeset
|
118 |
1420 | 119 public static Boolean removeBoolean(LuanTable options,String key) throws LuanException { |
120 Object val = options.remove(key); | |
1389
eb8b35dccd99
cleanup and stringify change
Franklin Schmidt <fschmidt@gmail.com>
parents:
1367
diff
changeset
|
121 if( val!=null && !(val instanceof Boolean) ) |
eb8b35dccd99
cleanup and stringify change
Franklin Schmidt <fschmidt@gmail.com>
parents:
1367
diff
changeset
|
122 throw new LuanException( "parameter '"+key+"' must be a string but is a "+Luan.type(val) ); |
eb8b35dccd99
cleanup and stringify change
Franklin Schmidt <fschmidt@gmail.com>
parents:
1367
diff
changeset
|
123 return (Boolean)val; |
eb8b35dccd99
cleanup and stringify change
Franklin Schmidt <fschmidt@gmail.com>
parents:
1367
diff
changeset
|
124 } |
eb8b35dccd99
cleanup and stringify change
Franklin Schmidt <fschmidt@gmail.com>
parents:
1367
diff
changeset
|
125 |
1420 | 126 public static LuanFunction removeFunction(LuanTable options,String key) throws LuanException { |
127 Object val = options.remove(key); | |
1392 | 128 if( val!=null && !(val instanceof LuanFunction) ) |
129 throw new LuanException( "parameter '"+key+"' must be a function but is a "+Luan.type(val) ); | |
130 return (LuanFunction)val; | |
131 } | |
132 | |
1420 | 133 public static LuanFunction removeRequiredFunction(LuanTable options,String key) throws LuanException { |
134 LuanFunction fn = removeFunction(options,key); | |
1392 | 135 if( fn==null ) |
136 throw new LuanException( "parameter '"+key+"' is required" ); | |
137 return fn; | |
138 } | |
139 | |
1420 | 140 public static void checkEmpty(LuanTable options) throws LuanException { |
141 if( !options.isEmpty() ) | |
142 throw new LuanException( "unrecognized options: "+options.asMap() ); | |
1389
eb8b35dccd99
cleanup and stringify change
Franklin Schmidt <fschmidt@gmail.com>
parents:
1367
diff
changeset
|
143 } |
eb8b35dccd99
cleanup and stringify change
Franklin Schmidt <fschmidt@gmail.com>
parents:
1367
diff
changeset
|
144 |
75
aa7538ae5fb6
can now load modules from classpath
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
145 } |