Mercurial Hosting > luan
annotate core/src/luan/AbstractLuanTable.java @ 364:1a464e090538 0.3
simplify table code
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Thu, 16 Apr 2015 11:51:21 -0600 |
parents | 1bce334a816b |
children | 5e0acdeaea93 |
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 |
b76fcb72d97d
add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
35 @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
|
36 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
|
37 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
|
38 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
|
39 } |
b25feac318d8
add lucene jar and minor changes
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
233
diff
changeset
|
40 return map; |
222
b76fcb72d97d
add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
41 } |
b76fcb72d97d
add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
42 |
355
1bce334a816b
AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents:
300
diff
changeset
|
43 // shouldn't include list |
1bce334a816b
AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents:
300
diff
changeset
|
44 protected Map<Object,Object> map() { |
1bce334a816b
AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents:
300
diff
changeset
|
45 return asMap(); |
1bce334a816b
AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents:
300
diff
changeset
|
46 } |
1bce334a816b
AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents:
300
diff
changeset
|
47 |
222
b76fcb72d97d
add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
48 protected abstract String type(); |
b76fcb72d97d
add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
49 |
b76fcb72d97d
add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
50 @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
|
51 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
|
52 } |
b76fcb72d97d
add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
53 |
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
|
54 @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
|
55 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
|
56 } |
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 @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
|
59 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
|
60 } |
b76fcb72d97d
add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
61 |
b76fcb72d97d
add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
62 @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
|
63 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
|
64 } |
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 Object remove(int pos) { |
b76fcb72d97d
add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
67 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
|
68 } |
b76fcb72d97d
add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
69 |
b76fcb72d97d
add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
70 @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
|
71 } |
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 @Override public int length() { |
b76fcb72d97d
add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
74 return 0; |
b76fcb72d97d
add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
75 } |
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 @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
|
78 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
|
79 } |
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 @Override public LuanTable getMetatable() { |
b76fcb72d97d
add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
82 return null; |
b76fcb72d97d
add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
83 } |
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 @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
|
86 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
|
87 } |
274
8afe9f2fdfec
AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
234
diff
changeset
|
88 |
8afe9f2fdfec
AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
234
diff
changeset
|
89 @Override public LuanTable cloneTable() { |
364 | 90 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
|
91 } |
300
9fb523472035
add java() to control java access
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
284
diff
changeset
|
92 |
9fb523472035
add java() to control java access
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
284
diff
changeset
|
93 @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
|
94 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
|
95 } |
9fb523472035
add java() to control java access
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
284
diff
changeset
|
96 |
9fb523472035
add java() to control java access
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
284
diff
changeset
|
97 @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
|
98 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
|
99 } |
355
1bce334a816b
AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents:
300
diff
changeset
|
100 |
1bce334a816b
AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents:
300
diff
changeset
|
101 @Override public String repr() { |
1bce334a816b
AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents:
300
diff
changeset
|
102 return repr( Collections.newSetFromMap(new IdentityHashMap<AbstractLuanTable,Boolean>()) ); |
1bce334a816b
AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents:
300
diff
changeset
|
103 } |
1bce334a816b
AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents:
300
diff
changeset
|
104 |
1bce334a816b
AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents:
300
diff
changeset
|
105 private String repr(Set<AbstractLuanTable> set) { |
1bce334a816b
AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents:
300
diff
changeset
|
106 if( !set.add(this) ) { |
1bce334a816b
AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents:
300
diff
changeset
|
107 return "\"<circular reference>\""; |
1bce334a816b
AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents:
300
diff
changeset
|
108 } |
1bce334a816b
AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents:
300
diff
changeset
|
109 StringBuilder sb = new StringBuilder(); |
1bce334a816b
AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents:
300
diff
changeset
|
110 sb.append('{'); |
1bce334a816b
AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents:
300
diff
changeset
|
111 boolean isFirst = true; |
1bce334a816b
AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents:
300
diff
changeset
|
112 for( Object obj : asList() ) { |
1bce334a816b
AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents:
300
diff
changeset
|
113 if( isFirst ) { |
1bce334a816b
AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents:
300
diff
changeset
|
114 isFirst = false; |
1bce334a816b
AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents:
300
diff
changeset
|
115 } else { |
1bce334a816b
AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents:
300
diff
changeset
|
116 sb.append(", "); |
1bce334a816b
AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents:
300
diff
changeset
|
117 } |
1bce334a816b
AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents:
300
diff
changeset
|
118 sb.append(repr(set,obj)); |
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 for( Map.Entry<Object,Object> entry : map().entrySet() ) { |
1bce334a816b
AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents:
300
diff
changeset
|
121 if( isFirst ) { |
1bce334a816b
AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents:
300
diff
changeset
|
122 isFirst = false; |
1bce334a816b
AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents:
300
diff
changeset
|
123 } else { |
1bce334a816b
AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents:
300
diff
changeset
|
124 sb.append(", "); |
1bce334a816b
AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents:
300
diff
changeset
|
125 } |
1bce334a816b
AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents:
300
diff
changeset
|
126 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
|
127 } |
1bce334a816b
AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents:
300
diff
changeset
|
128 sb.append('}'); |
1bce334a816b
AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents:
300
diff
changeset
|
129 return sb.toString(); |
1bce334a816b
AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents:
300
diff
changeset
|
130 } |
1bce334a816b
AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents:
300
diff
changeset
|
131 |
1bce334a816b
AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents:
300
diff
changeset
|
132 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
|
133 |
1bce334a816b
AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents:
300
diff
changeset
|
134 private String reprKey(Set<AbstractLuanTable> set,Object obj) { |
1bce334a816b
AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents:
300
diff
changeset
|
135 if( obj instanceof String ) { |
1bce334a816b
AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents:
300
diff
changeset
|
136 String s = (String)obj; |
1bce334a816b
AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents:
300
diff
changeset
|
137 if( namePtn.matcher(s).matches() ) |
1bce334a816b
AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents:
300
diff
changeset
|
138 return s; |
1bce334a816b
AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents:
300
diff
changeset
|
139 } |
1bce334a816b
AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents:
300
diff
changeset
|
140 return "[" + repr(set,obj) + "]"; |
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 |
1bce334a816b
AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents:
300
diff
changeset
|
143 String repr(Set<AbstractLuanTable> set,Object obj) { |
1bce334a816b
AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents:
300
diff
changeset
|
144 if( obj instanceof AbstractLuanTable ) { |
1bce334a816b
AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents:
300
diff
changeset
|
145 AbstractLuanTable t = (AbstractLuanTable)obj; |
1bce334a816b
AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents:
300
diff
changeset
|
146 return t.repr(set); |
1bce334a816b
AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents:
300
diff
changeset
|
147 } else { |
1bce334a816b
AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents:
300
diff
changeset
|
148 String s = Luan.repr(obj); |
1bce334a816b
AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents:
300
diff
changeset
|
149 if( s == null ) |
1bce334a816b
AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents:
300
diff
changeset
|
150 s = "<couldn't repr: " + Luan.stringEncode(Luan.toString(obj)) + ">"; |
1bce334a816b
AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents:
300
diff
changeset
|
151 return s; |
1bce334a816b
AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents:
300
diff
changeset
|
152 } |
1bce334a816b
AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents:
300
diff
changeset
|
153 } |
1bce334a816b
AbstractLuanTable now implements LuanRepr
Franklin Schmidt <fschmidt@gmail.com>
parents:
300
diff
changeset
|
154 |
222
b76fcb72d97d
add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
155 } |