annotate core/src/luan/AbstractLuanTable.java @ 397:5e0acdeaea93

add LuanTable isSet() and asSet() (untested)
author Franklin Schmidt <fschmidt@gmail.com>
date Mon, 27 Apr 2015 12:25:30 -0600
parents 1a464e090538
children 3e68917a0dc6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
222
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
1 package luan;
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
2
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
3 import java.util.Iterator;
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
4 import java.util.ListIterator;
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
5 import java.util.Map;
284
8870840251ea use LinkedHashMap in LuanTable to preserve order
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
6 import java.util.LinkedHashMap;
222
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
7 import java.util.List;
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
8 import java.util.ArrayList;
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
9 import java.util.Collections;
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
10 import java.util.Comparator;
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
11 import java.util.Set;
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
12 import java.util.HashSet;
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
13 import java.util.IdentityHashMap;
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
14 import java.util.regex.Pattern;
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
15
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
16
355
1bce334a816b AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents: 300
diff changeset
17 public abstract class AbstractLuanTable implements LuanTable, LuanRepr {
222
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
18
284
8870840251ea use LinkedHashMap in LuanTable to preserve order
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
19 protected final Map<Object,Object> newMap() {
8870840251ea use LinkedHashMap in LuanTable to preserve order
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
20 return new LinkedHashMap<Object,Object>();
8870840251ea use LinkedHashMap in LuanTable to preserve order
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
21 }
8870840251ea use LinkedHashMap in LuanTable to preserve order
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
22
233
ef39bc4d3f70 basic lucene works
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 224
diff changeset
23 @Override public boolean isEmpty() {
ef39bc4d3f70 basic lucene works
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 224
diff changeset
24 return isList() && length()==0;
ef39bc4d3f70 basic lucene works
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 224
diff changeset
25 }
ef39bc4d3f70 basic lucene works
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 224
diff changeset
26
ef39bc4d3f70 basic lucene works
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 224
diff changeset
27 @Override public boolean isList() {
ef39bc4d3f70 basic lucene works
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 224
diff changeset
28 return asList().size() == asMap().size();
ef39bc4d3f70 basic lucene works
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 224
diff changeset
29 }
ef39bc4d3f70 basic lucene works
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 224
diff changeset
30
222
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
31 @Override public List<Object> asList() {
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
32 return Collections.emptyList();
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
33 }
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
34
397
5e0acdeaea93 add LuanTable isSet() and asSet() (untested)
Franklin Schmidt <fschmidt@gmail.com>
parents: 364
diff changeset
35 @Override public boolean isSet() {
5e0acdeaea93 add LuanTable isSet() and asSet() (untested)
Franklin Schmidt <fschmidt@gmail.com>
parents: 364
diff changeset
36 for( Map.Entry<Object,Object> entry : this ) {
5e0acdeaea93 add LuanTable isSet() and asSet() (untested)
Franklin Schmidt <fschmidt@gmail.com>
parents: 364
diff changeset
37 if( !entry.getValue().equals(Boolean.TRUE) )
5e0acdeaea93 add LuanTable isSet() and asSet() (untested)
Franklin Schmidt <fschmidt@gmail.com>
parents: 364
diff changeset
38 return false;
5e0acdeaea93 add LuanTable isSet() and asSet() (untested)
Franklin Schmidt <fschmidt@gmail.com>
parents: 364
diff changeset
39 }
5e0acdeaea93 add LuanTable isSet() and asSet() (untested)
Franklin Schmidt <fschmidt@gmail.com>
parents: 364
diff changeset
40 return true;
5e0acdeaea93 add LuanTable isSet() and asSet() (untested)
Franklin Schmidt <fschmidt@gmail.com>
parents: 364
diff changeset
41 }
5e0acdeaea93 add LuanTable isSet() and asSet() (untested)
Franklin Schmidt <fschmidt@gmail.com>
parents: 364
diff changeset
42
5e0acdeaea93 add LuanTable isSet() and asSet() (untested)
Franklin Schmidt <fschmidt@gmail.com>
parents: 364
diff changeset
43 @Override public Set<Object> asSet() {
5e0acdeaea93 add LuanTable isSet() and asSet() (untested)
Franklin Schmidt <fschmidt@gmail.com>
parents: 364
diff changeset
44 Set<Object> set = new HashSet<Object>();
5e0acdeaea93 add LuanTable isSet() and asSet() (untested)
Franklin Schmidt <fschmidt@gmail.com>
parents: 364
diff changeset
45 for( Map.Entry<Object,Object> entry : this ) {
5e0acdeaea93 add LuanTable isSet() and asSet() (untested)
Franklin Schmidt <fschmidt@gmail.com>
parents: 364
diff changeset
46 set.add(entry.getKey());
5e0acdeaea93 add LuanTable isSet() and asSet() (untested)
Franklin Schmidt <fschmidt@gmail.com>
parents: 364
diff changeset
47 }
5e0acdeaea93 add LuanTable isSet() and asSet() (untested)
Franklin Schmidt <fschmidt@gmail.com>
parents: 364
diff changeset
48 return set;
5e0acdeaea93 add LuanTable isSet() and asSet() (untested)
Franklin Schmidt <fschmidt@gmail.com>
parents: 364
diff changeset
49 }
5e0acdeaea93 add LuanTable isSet() and asSet() (untested)
Franklin Schmidt <fschmidt@gmail.com>
parents: 364
diff changeset
50
222
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
51 @Override public Map<Object,Object> asMap() {
284
8870840251ea use LinkedHashMap in LuanTable to preserve order
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
52 Map<Object,Object> map = newMap();
234
b25feac318d8 add lucene jar and minor changes
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 233
diff changeset
53 for( Map.Entry<Object,Object> entry : this ) {
b25feac318d8 add lucene jar and minor changes
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 233
diff changeset
54 map.put(entry.getKey(),entry.getValue());
b25feac318d8 add lucene jar and minor changes
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 233
diff changeset
55 }
b25feac318d8 add lucene jar and minor changes
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 233
diff changeset
56 return map;
222
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
57 }
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
58
355
1bce334a816b AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents: 300
diff changeset
59 // shouldn't include list
1bce334a816b AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents: 300
diff changeset
60 protected Map<Object,Object> map() {
1bce334a816b AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents: 300
diff changeset
61 return asMap();
1bce334a816b AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents: 300
diff changeset
62 }
1bce334a816b AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents: 300
diff changeset
63
222
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
64 protected abstract String type();
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
65
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
66 @Override public final String toString() {
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
67 return type() + ": " + Integer.toHexString(hashCode());
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
68 }
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
69
224
05eb2837ddbf change LuanTable.put() to not return old value
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 222
diff changeset
70 @Override public void put(Object key,Object val) {
222
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
71 throw new UnsupportedOperationException("can't put into a "+type());
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
72 }
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
73
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
74 @Override public void insert(int pos,Object value) {
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
75 throw new UnsupportedOperationException("can't insert into a "+type());
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
76 }
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
77
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
78 @Override public void add(Object value) {
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
79 throw new UnsupportedOperationException("can't add to a "+type());
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
80 }
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
81
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
82 @Override public Object remove(int pos) {
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
83 throw new UnsupportedOperationException("can't remove from a "+type());
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
84 }
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
85
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
86 @Override public void sort(Comparator<Object> cmp) {
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
87 }
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
88
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
89 @Override public int length() {
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
90 return 0;
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
91 }
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
92
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
93 @Override public LuanTable subList(int from,int to) {
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
94 throw new UnsupportedOperationException("can't get a sub-list of a "+type());
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
95 }
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
96
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
97 @Override public LuanTable getMetatable() {
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
98 return null;
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
99 }
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
100
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
101 @Override public void setMetatable(LuanTable metatable) {
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
102 throw new UnsupportedOperationException("can't set a metatable on a "+type());
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
103 }
274
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 234
diff changeset
104
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 234
diff changeset
105 @Override public LuanTable cloneTable() {
364
1a464e090538 simplify table code
Franklin Schmidt <fschmidt@gmail.com>
parents: 355
diff changeset
106 return isList() ? new LuanTableImpl(new ArrayList<Object>(asList())) : new LuanTableImpl(asMap());
274
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 234
diff changeset
107 }
300
9fb523472035 add java() to control java access
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 284
diff changeset
108
9fb523472035 add java() to control java access
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 284
diff changeset
109 @Override public boolean hasJava() {
9fb523472035 add java() to control java access
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 284
diff changeset
110 throw new UnsupportedOperationException();
9fb523472035 add java() to control java access
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 284
diff changeset
111 }
9fb523472035 add java() to control java access
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 284
diff changeset
112
9fb523472035 add java() to control java access
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 284
diff changeset
113 @Override public void setJava() {
9fb523472035 add java() to control java access
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 284
diff changeset
114 throw new UnsupportedOperationException();
9fb523472035 add java() to control java access
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 284
diff changeset
115 }
355
1bce334a816b AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents: 300
diff changeset
116
1bce334a816b AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents: 300
diff changeset
117 @Override public String repr() {
1bce334a816b AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents: 300
diff changeset
118 return repr( Collections.newSetFromMap(new IdentityHashMap<AbstractLuanTable,Boolean>()) );
1bce334a816b AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents: 300
diff changeset
119 }
1bce334a816b AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents: 300
diff changeset
120
1bce334a816b AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents: 300
diff changeset
121 private String repr(Set<AbstractLuanTable> set) {
1bce334a816b AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents: 300
diff changeset
122 if( !set.add(this) ) {
1bce334a816b AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents: 300
diff changeset
123 return "\"<circular reference>\"";
1bce334a816b AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents: 300
diff changeset
124 }
1bce334a816b AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents: 300
diff changeset
125 StringBuilder sb = new StringBuilder();
1bce334a816b AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents: 300
diff changeset
126 sb.append('{');
1bce334a816b AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents: 300
diff changeset
127 boolean isFirst = true;
1bce334a816b AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents: 300
diff changeset
128 for( Object obj : asList() ) {
1bce334a816b AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents: 300
diff changeset
129 if( isFirst ) {
1bce334a816b AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents: 300
diff changeset
130 isFirst = false;
1bce334a816b AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents: 300
diff changeset
131 } else {
1bce334a816b AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents: 300
diff changeset
132 sb.append(", ");
1bce334a816b AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents: 300
diff changeset
133 }
1bce334a816b AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents: 300
diff changeset
134 sb.append(repr(set,obj));
1bce334a816b AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents: 300
diff changeset
135 }
1bce334a816b AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents: 300
diff changeset
136 for( Map.Entry<Object,Object> entry : map().entrySet() ) {
1bce334a816b AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents: 300
diff changeset
137 if( isFirst ) {
1bce334a816b AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents: 300
diff changeset
138 isFirst = false;
1bce334a816b AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents: 300
diff changeset
139 } else {
1bce334a816b AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents: 300
diff changeset
140 sb.append(", ");
1bce334a816b AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents: 300
diff changeset
141 }
1bce334a816b AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents: 300
diff changeset
142 sb.append(reprKey(set,entry.getKey())).append('=').append(repr(set,entry.getValue()));
1bce334a816b AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents: 300
diff changeset
143 }
1bce334a816b AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents: 300
diff changeset
144 sb.append('}');
1bce334a816b AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents: 300
diff changeset
145 return sb.toString();
1bce334a816b AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents: 300
diff changeset
146 }
1bce334a816b AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents: 300
diff changeset
147
1bce334a816b AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents: 300
diff changeset
148 private static final Pattern namePtn = Pattern.compile("[a-zA-Z_][a-zA-Z_0-9]*");
1bce334a816b AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents: 300
diff changeset
149
1bce334a816b AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents: 300
diff changeset
150 private String reprKey(Set<AbstractLuanTable> set,Object obj) {
1bce334a816b AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents: 300
diff changeset
151 if( obj instanceof String ) {
1bce334a816b AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents: 300
diff changeset
152 String s = (String)obj;
1bce334a816b AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents: 300
diff changeset
153 if( namePtn.matcher(s).matches() )
1bce334a816b AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents: 300
diff changeset
154 return s;
1bce334a816b AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents: 300
diff changeset
155 }
1bce334a816b AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents: 300
diff changeset
156 return "[" + repr(set,obj) + "]";
1bce334a816b AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents: 300
diff changeset
157 }
1bce334a816b AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents: 300
diff changeset
158
1bce334a816b AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents: 300
diff changeset
159 String repr(Set<AbstractLuanTable> set,Object obj) {
1bce334a816b AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents: 300
diff changeset
160 if( obj instanceof AbstractLuanTable ) {
1bce334a816b AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents: 300
diff changeset
161 AbstractLuanTable t = (AbstractLuanTable)obj;
1bce334a816b AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents: 300
diff changeset
162 return t.repr(set);
1bce334a816b AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents: 300
diff changeset
163 } else {
1bce334a816b AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents: 300
diff changeset
164 String s = Luan.repr(obj);
1bce334a816b AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents: 300
diff changeset
165 if( s == null )
1bce334a816b AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents: 300
diff changeset
166 s = "<couldn't repr: " + Luan.stringEncode(Luan.toString(obj)) + ">";
1bce334a816b AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents: 300
diff changeset
167 return s;
1bce334a816b AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents: 300
diff changeset
168 }
1bce334a816b AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents: 300
diff changeset
169 }
1bce334a816b AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents: 300
diff changeset
170
222
b76fcb72d97d add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
171 }