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 }