svn-gvsig-desktop / branches / v2_0_0_prep / libraries / libTools / src / org / gvsig / tools / dynobject / impl / DefaultDynClass.java @ 25018
History | View | Annotate | Download (4.78 KB)
1 |
package org.gvsig.tools.dynobject.impl; |
---|---|
2 |
|
3 |
import java.util.ArrayList; |
4 |
import java.util.HashMap; |
5 |
import java.util.Iterator; |
6 |
import java.util.LinkedHashMap; |
7 |
import java.util.Map; |
8 |
|
9 |
import org.gvsig.tools.dynobject.DynClass; |
10 |
import org.gvsig.tools.dynobject.DynField; |
11 |
import org.gvsig.tools.dynobject.DynObject; |
12 |
import org.gvsig.tools.dynobject.DynObjectManager; |
13 |
|
14 |
public class DefaultDynClass implements DynClass { |
15 |
|
16 |
class FieldAndIndex { |
17 |
DynField field; |
18 |
int index;
|
19 |
|
20 |
FieldAndIndex(DynField field, int index) {
|
21 |
this.field = field;
|
22 |
this.index = index;
|
23 |
} |
24 |
} |
25 |
|
26 |
private DefaultDynObjectManager manager;
|
27 |
|
28 |
private String name; |
29 |
private String description; |
30 |
|
31 |
private Map parents; |
32 |
private Map fields; |
33 |
private Map declaredFields; |
34 |
|
35 |
private boolean needConsolide; |
36 |
|
37 |
public DefaultDynClass(DynObjectManager manager, String name, String description) { |
38 |
this.parents = new LinkedHashMap(); |
39 |
this.fields = new LinkedHashMap(); |
40 |
this.declaredFields = new HashMap(); |
41 |
this.needConsolide = false; |
42 |
|
43 |
this.manager = (DefaultDynObjectManager) manager;
|
44 |
this.name = name;
|
45 |
this.description = description;
|
46 |
} |
47 |
|
48 |
public DefaultDynClass(DynObjectManager manager, String name, String description, DynClass[] superClases) { |
49 |
this(manager,name,description);
|
50 |
for( int i=0; i<superClases.length; i++ ) { |
51 |
DynClass dynClass = superClases[i]; |
52 |
if( ! this.parents.containsKey(dynClass.getName()) ) { |
53 |
this.parents.put(dynClass.getName(), dynClass);
|
54 |
} |
55 |
} |
56 |
} |
57 |
|
58 |
public DefaultDynObjectManager getManager() {
|
59 |
return this.manager; |
60 |
} |
61 |
|
62 |
public Map getFieldsMap() { |
63 |
return this.fields; |
64 |
} |
65 |
|
66 |
public void consolide() { |
67 |
this.fields = new LinkedHashMap(); |
68 |
int index = 0; |
69 |
Iterator it = this.declaredFields.values().iterator(); |
70 |
while( it.hasNext() ) {
|
71 |
DynField field = (DynField) it.next(); |
72 |
this.fields.put(field.getName(), new FieldAndIndex(field,index++)); |
73 |
} |
74 |
it = this.parents.values().iterator();
|
75 |
while( it.hasNext() ) {
|
76 |
DefaultDynClass dynClass = (DefaultDynClass) it.next(); |
77 |
Map fields = dynClass.getFieldsMap();
|
78 |
Iterator itf = fields.values().iterator();
|
79 |
while( itf.hasNext() ) {
|
80 |
DynField field = (DynField) it.next(); |
81 |
if( !this.fields.containsKey(field.getName()) ) { |
82 |
this.fields.put(field.getName(), new FieldAndIndex(field,index++)); |
83 |
} |
84 |
} |
85 |
} |
86 |
this.needConsolide = false; |
87 |
} |
88 |
|
89 |
public void extend(DynClass dynClass) { |
90 |
if( this.parents.containsKey(dynClass.getName()) ) { |
91 |
return;
|
92 |
} |
93 |
this.parents.put(dynClass.getName(), dynClass);
|
94 |
consolide(); |
95 |
} |
96 |
|
97 |
public void extend(String dynClassName) { |
98 |
DynClass dynClass = manager.get(dynClassName); |
99 |
extend(dynClass); |
100 |
} |
101 |
|
102 |
int getFieldIndex(String name) { |
103 |
FieldAndIndex f = (FieldAndIndex) this.fields.get(name);
|
104 |
if( f == null ) { |
105 |
return -1; |
106 |
} |
107 |
return f.index;
|
108 |
} |
109 |
|
110 |
public DynField getDeclaredDynField(String name) { |
111 |
return (DynField)this.declaredFields.get(name); |
112 |
} |
113 |
|
114 |
public DynField[] getDeclaredDynFields() { |
115 |
return (DynField[]) this.declaredFields.values().toArray(); |
116 |
} |
117 |
|
118 |
public String getDescription() { |
119 |
return this.description; |
120 |
} |
121 |
|
122 |
public DynField getDynField(String name) { |
123 |
return ((FieldAndIndex)this.fields.get(name)).field; |
124 |
} |
125 |
|
126 |
public int getDynFieldsCount() { |
127 |
return this.fields.size(); |
128 |
} |
129 |
|
130 |
public DynField[] getDynFields() { |
131 |
DynField[] fields = new DynField[ this.fields.size() ]; |
132 |
int i=0; |
133 |
Iterator it = this.fields.values().iterator(); |
134 |
while( it.hasNext() ) {
|
135 |
DynField field = (DynField) it.next(); |
136 |
fields[i++] = field; |
137 |
} |
138 |
return fields;
|
139 |
} |
140 |
|
141 |
public String getName() { |
142 |
return this.name; |
143 |
} |
144 |
|
145 |
public DynField addDynField(String name) { |
146 |
this.needConsolide = true; |
147 |
DynField field = new DefaultDynField(name);
|
148 |
return field;
|
149 |
} |
150 |
|
151 |
public ArrayList _getSuperDynClasses(ArrayList dcList) { |
152 |
Iterator iter = parents.values().iterator();
|
153 |
while (iter.hasNext()) {
|
154 |
DefaultDynClass dc = (DefaultDynClass) iter.next(); |
155 |
if (dc.parents.size() > 1) |
156 |
dcList.add(dc._getSuperDynClasses(dcList)); |
157 |
if (!dcList.contains(dc))
|
158 |
dcList.add(dc); |
159 |
} |
160 |
return dcList;
|
161 |
} |
162 |
|
163 |
public DynClass[] getSuperDynClasses() { |
164 |
ArrayList dcList = new ArrayList(); |
165 |
return (DynClass[]) _getSuperDynClasses(dcList).toArray(); |
166 |
} |
167 |
|
168 |
public DynObject newInstance() {
|
169 |
return this.manager.createDynObject(this); |
170 |
} |
171 |
|
172 |
public boolean isInstance(DynObject dynObject) { |
173 |
ArrayList dcList = new ArrayList(); |
174 |
_getSuperDynClasses(dcList); |
175 |
if (dcList.contains(dynObject.getDynClass()))
|
176 |
return true; |
177 |
return false; |
178 |
} |
179 |
|
180 |
public void removeDynField(String name) { |
181 |
// TODO Auto-generated method stub
|
182 |
this.needConsolide = false; |
183 |
} |
184 |
|
185 |
public Iterator allParentDynClassesIterator() { |
186 |
// TODO Auto-generated method stub
|
187 |
return null; |
188 |
} |
189 |
|
190 |
|
191 |
} |