Mercurial Hosting > luan
comparison core/src/luan/modules/JavaLuan.java @ 301:a6bf8ff720f8
add java security
git-svn-id: https://luan-java.googlecode.com/svn/trunk@302 21e917c8-12df-6dd8-5cb6-c86387c605b9
author | fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9> |
---|---|
date | Wed, 17 Dec 2014 12:35:57 +0000 |
parents | 9fb523472035 |
children | 03e9cda4748d |
comparison
equal
deleted
inserted
replaced
300:9fb523472035 | 301:a6bf8ff720f8 |
---|---|
25 import luan.LuanElement; | 25 import luan.LuanElement; |
26 | 26 |
27 | 27 |
28 public final class JavaLuan { | 28 public final class JavaLuan { |
29 | 29 |
30 public static void java(LuanState luan) { | 30 public static void java(LuanState luan) throws LuanException { |
31 check(luan,luan.currentSource().name); | |
31 luan.currentEnvironment().setJava(); | 32 luan.currentEnvironment().setJava(); |
32 } | 33 } |
33 | 34 |
34 public static final LuanFunction javaFn; | 35 public static final LuanFunction javaFn; |
35 static { | 36 static { |
309 } | 310 } |
310 } | 311 } |
311 | 312 |
312 public static Static load(LuanState luan,String name) throws LuanException { | 313 public static Static load(LuanState luan,String name) throws LuanException { |
313 checkJava(luan); | 314 checkJava(luan); |
314 @SuppressWarnings("unchecked") | |
315 Map<String,Static> loaded = (Map<String,Static>)luan.registry().get("Java.loaded"); | |
316 if( loaded == null ) { | |
317 loaded = new HashMap<String,Static>(); | |
318 luan.registry().put("Java.loaded",loaded); | |
319 } | |
320 Static s = loaded.get(name); | |
321 if( s == null ) { | |
322 s = getClassStatic(luan,name); | |
323 loaded.put(name,s); | |
324 } | |
325 return s; | |
326 } | |
327 | |
328 private static Static getClassStatic(LuanState luan,String name) throws LuanException { | |
329 Class cls; | 315 Class cls; |
330 try { | 316 try { |
331 cls = Class.forName(name); | 317 cls = Class.forName(name); |
332 } catch(ClassNotFoundException e) { | 318 } catch(ClassNotFoundException e) { |
333 try { | 319 try { |
431 return Luan.first(luan.call(fn,name,args)); | 417 return Luan.first(luan.call(fn,name,args)); |
432 } | 418 } |
433 } | 419 } |
434 ); | 420 ); |
435 } | 421 } |
422 | |
423 | |
424 | |
425 // security | |
426 | |
427 public interface Security { | |
428 public void check(LuanState luan,String name) throws LuanException; | |
429 } | |
430 | |
431 private static String SECURITY_KEY = "Java.Security"; | |
432 | |
433 private static void check(LuanState luan,String name) throws LuanException { | |
434 Security s = (Security)luan.registry().get(SECURITY_KEY); | |
435 if( s!=null ) | |
436 s.check(luan,name); | |
437 } | |
438 | |
439 public static void setSecurity(LuanState luan,Security s) { | |
440 luan.registry().put(SECURITY_KEY,s); | |
441 } | |
442 | |
436 } | 443 } |