annotate core/src/luan/LuanPropertyMeta.java @ 413:8937263f59f6

add __pairs; add back HttpServicer.get_parameter_values;
author Franklin Schmidt <fschmidt@gmail.com>
date Wed, 29 Apr 2015 19:01:18 -0600
parents 1b38de2b1845
children ce8e19567911
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
407
7fd9f1b7b878 replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
1 package luan;
7fd9f1b7b878 replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
2
413
8937263f59f6 add __pairs;
Franklin Schmidt <fschmidt@gmail.com>
parents: 408
diff changeset
3 import java.util.Map;
8937263f59f6 add __pairs;
Franklin Schmidt <fschmidt@gmail.com>
parents: 408
diff changeset
4 import java.util.Iterator;
407
7fd9f1b7b878 replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
5
413
8937263f59f6 add __pairs;
Franklin Schmidt <fschmidt@gmail.com>
parents: 408
diff changeset
6
8937263f59f6 add __pairs;
Franklin Schmidt <fschmidt@gmail.com>
parents: 408
diff changeset
7 public final class LuanPropertyMeta extends LuanMeta implements DeepCloneable<LuanPropertyMeta> {
407
7fd9f1b7b878 replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
8 private LuanTable getters;
7fd9f1b7b878 replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
9 private LuanTable setters;
7fd9f1b7b878 replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
10
7fd9f1b7b878 replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
11 private LuanPropertyMeta() {}
7fd9f1b7b878 replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
12
7fd9f1b7b878 replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
13 public static LuanPropertyMeta newInstance() {
7fd9f1b7b878 replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
14 LuanPropertyMeta meta = new LuanPropertyMeta();
408
1b38de2b1845 merge LuanTableImpl into LuanTable
Franklin Schmidt <fschmidt@gmail.com>
parents: 407
diff changeset
15 meta.getters = new LuanTable();
1b38de2b1845 merge LuanTableImpl into LuanTable
Franklin Schmidt <fschmidt@gmail.com>
parents: 407
diff changeset
16 meta.setters = new LuanTable();
407
7fd9f1b7b878 replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
17 return meta;
7fd9f1b7b878 replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
18 }
7fd9f1b7b878 replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
19
7fd9f1b7b878 replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
20 public LuanTable getters() {
7fd9f1b7b878 replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
21 return getters;
7fd9f1b7b878 replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
22 }
7fd9f1b7b878 replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
23
7fd9f1b7b878 replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
24 public LuanTable setters() {
7fd9f1b7b878 replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
25 return setters;
7fd9f1b7b878 replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
26 }
7fd9f1b7b878 replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
27
7fd9f1b7b878 replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
28 @Override public LuanPropertyMeta shallowClone() {
7fd9f1b7b878 replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
29 return new LuanPropertyMeta();
7fd9f1b7b878 replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
30 }
7fd9f1b7b878 replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
31
7fd9f1b7b878 replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
32 @Override public void deepenClone(LuanPropertyMeta clone,DeepCloner cloner) {
7fd9f1b7b878 replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
33 clone.getters = cloner.get(getters);
7fd9f1b7b878 replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
34 clone.setters = cloner.get(setters);
7fd9f1b7b878 replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
35 }
7fd9f1b7b878 replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
36
7fd9f1b7b878 replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
37 @Override public Object __index(LuanState luan,LuanTable tbl,Object key) throws LuanException {
7fd9f1b7b878 replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
38 Object obj = getters.get(key);
7fd9f1b7b878 replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
39 if( obj == null )
7fd9f1b7b878 replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
40 return null;
7fd9f1b7b878 replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
41 if( !(obj instanceof LuanFunction) )
7fd9f1b7b878 replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
42 throw luan.exception("get for '"+key+"' isn't a function");
7fd9f1b7b878 replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
43 LuanFunction fn = (LuanFunction)obj;
7fd9f1b7b878 replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
44 return luan.call(fn);
7fd9f1b7b878 replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
45 }
7fd9f1b7b878 replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
46
413
8937263f59f6 add __pairs;
Franklin Schmidt <fschmidt@gmail.com>
parents: 408
diff changeset
47 @Override protected Iterator keys() {
8937263f59f6 add __pairs;
Franklin Schmidt <fschmidt@gmail.com>
parents: 408
diff changeset
48 return new Iterator() {
8937263f59f6 add __pairs;
Franklin Schmidt <fschmidt@gmail.com>
parents: 408
diff changeset
49 final Iterator<Map.Entry<Object,Object>> iter = getters.iterator();
8937263f59f6 add __pairs;
Franklin Schmidt <fschmidt@gmail.com>
parents: 408
diff changeset
50
8937263f59f6 add __pairs;
Franklin Schmidt <fschmidt@gmail.com>
parents: 408
diff changeset
51 @Override public boolean hasNext() {
8937263f59f6 add __pairs;
Franklin Schmidt <fschmidt@gmail.com>
parents: 408
diff changeset
52 return iter.hasNext();
8937263f59f6 add __pairs;
Franklin Schmidt <fschmidt@gmail.com>
parents: 408
diff changeset
53 }
8937263f59f6 add __pairs;
Franklin Schmidt <fschmidt@gmail.com>
parents: 408
diff changeset
54 @Override public Object next() {
8937263f59f6 add __pairs;
Franklin Schmidt <fschmidt@gmail.com>
parents: 408
diff changeset
55 return iter.next().getKey();
8937263f59f6 add __pairs;
Franklin Schmidt <fschmidt@gmail.com>
parents: 408
diff changeset
56 }
8937263f59f6 add __pairs;
Franklin Schmidt <fschmidt@gmail.com>
parents: 408
diff changeset
57 @Override public void remove() {
8937263f59f6 add __pairs;
Franklin Schmidt <fschmidt@gmail.com>
parents: 408
diff changeset
58 throw new UnsupportedOperationException();
8937263f59f6 add __pairs;
Franklin Schmidt <fschmidt@gmail.com>
parents: 408
diff changeset
59 }
8937263f59f6 add __pairs;
Franklin Schmidt <fschmidt@gmail.com>
parents: 408
diff changeset
60 };
8937263f59f6 add __pairs;
Franklin Schmidt <fschmidt@gmail.com>
parents: 408
diff changeset
61 }
8937263f59f6 add __pairs;
Franklin Schmidt <fschmidt@gmail.com>
parents: 408
diff changeset
62
8937263f59f6 add __pairs;
Franklin Schmidt <fschmidt@gmail.com>
parents: 408
diff changeset
63
407
7fd9f1b7b878 replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
64 @Override public boolean canNewindex() {
7fd9f1b7b878 replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
65 return true;
7fd9f1b7b878 replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
66 }
7fd9f1b7b878 replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
67
7fd9f1b7b878 replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
68 @Override public void __newindex(LuanState luan,LuanTable tbl,Object key,Object value) throws LuanException {
7fd9f1b7b878 replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
69 Object obj = setters.get(key);
7fd9f1b7b878 replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
70 if( obj == null )
7fd9f1b7b878 replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
71 throw luan.exception("can't set property '"+key+"'");
7fd9f1b7b878 replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
72 if( !(obj instanceof LuanFunction) )
7fd9f1b7b878 replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
73 throw luan.exception("set for '"+key+"' isn't a function");
7fd9f1b7b878 replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
74 LuanFunction fn = (LuanFunction)obj;
7fd9f1b7b878 replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
75 luan.call(fn,new Object[]{value});
7fd9f1b7b878 replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
76 }
7fd9f1b7b878 replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
77
7fd9f1b7b878 replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
78 @Override public LuanTable newMetatable() {
7fd9f1b7b878 replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
79 LuanTable mt = super.newMetatable();
7fd9f1b7b878 replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
80 mt.put( "get", getters );
7fd9f1b7b878 replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
81 mt.put( "set", setters );
7fd9f1b7b878 replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
82 return mt;
7fd9f1b7b878 replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
83 }
7fd9f1b7b878 replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
84
7fd9f1b7b878 replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
85 }