Statistics
| Revision:

gvsig-tools / org.gvsig.tools / library / trunk / org.gvsig.tools / org.gvsig.tools.swing / org.gvsig.tools.swing.spi / src / main / java / org / gvsig / tools / swing / spi / DelegatedJFieldComponent.java @ 202

History | View | Annotate | Download (9.14 KB)

1
/* gvSIG. Geographic Information System of the Valencian Government
2
 *
3
 * Copyright (C) 2007-2008 Infrastructures and Transports Department
4
 * of the Valencian Government (CIT)
5
 * 
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 2
9
 * of the License, or (at your option) any later version.
10
 * 
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 * 
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
19
 * MA  02110-1301, USA.
20
 * 
21
 */
22
/*
23
 * AUTHORS (In addition to CIT):
24
 * 2010 Institute of New Imaging Technologies (INIT): 
25
 *   http://www.init.uji.es
26
 * Geographic Information research group: 
27
 *   http://www.geoinfo.uji.es
28
 * Universitat Jaume I, Spain
29
 */
30

    
31
/**
32
 * 
33
 */
34
package org.gvsig.tools.swing.spi;
35

    
36
import java.util.ArrayList;
37
import java.util.List;
38

    
39
import javax.swing.DefaultListModel;
40
import javax.swing.ListModel;
41
import javax.swing.event.ListDataListener;
42

    
43
import org.gvsig.tools.dynobject.DynClass;
44
import org.gvsig.tools.dynobject.DynField;
45
import org.gvsig.tools.service.Manager;
46
import org.gvsig.tools.service.ServiceException;
47
import org.gvsig.tools.swing.api.ToolsSwingLocator;
48
import org.gvsig.tools.swing.api.dynobject.ValueChangedListener;
49
import org.gvsig.tools.swing.api.dynobject.dynfield.JDynFieldComponent;
50
import org.gvsig.tools.swing.api.dynobject.dynfield.ValueField;
51

    
52
/**
53
 * @author <a href="mailto:reinhold@uji.es">cmartin</a>
54
 * 
55
 */
56
public abstract class DelegatedJFieldComponent extends AbstractJDynField
57
        implements JDynFieldComponent {
58

    
59
    public class NValueField extends ArrayList implements NFieldValue, ListModel {
60
        private final DynField field;
61
        private int selectedIndex;
62
        private DefaultListModel model;
63
        
64
        /**
65
         * @param parent
66
         */
67
        public NValueField(ValueField parent, DynField field) {
68
            this.field = field;
69
            this.selectedIndex = -1;
70
            model = new DefaultListModel();
71
            
72
            
73
//            elems = new ArrayList<Object>();
74

    
75
            // Object value = parent.getValue();
76
            // if (value==null)
77
            // value = parent.getDefaultValue();
78
            // if (value==null)
79
            // this.elems = new ArrayList<Object>();
80
            // else
81
            // this.elems = (List) value;
82
        }
83

    
84
//        public void addItem(int index, Object element) {
85
//            this.model.add(index, element);
86
//            this.add(index,element);
87
//        }
88

    
89
        /*
90
         * (non-Javadoc)
91
         * 
92
         * @see
93
         * org.gvsig.tools.swing.api.dynobject.dynfield.ValueField#getDefaultValue
94
         * ()
95
         */
96
        public Object getDefaultValue() {
97
            return field.getDefaultValue();
98
        }
99

    
100
        /*
101
         * (non-Javadoc)
102
         * 
103
         * @see
104
         * org.gvsig.tools.swing.api.dynobject.dynfield.ValueField#getValue()
105
         */
106
        public Object getValue() {
107
            if (this.isEmpty())
108
                return null;
109
            if ((selectedIndex < 0) || (selectedIndex >= this.size()))
110
                return null;
111
            return this.get(selectedIndex);
112
        }
113

    
114
        public void setSelectedIndex(int index) {
115
            selectedIndex = index;
116
        }
117

    
118
        /*
119
         * (non-Javadoc)
120
         * 
121
         * @see
122
         * org.gvsig.tools.swing.api.dynobject.dynfield.ValueField#setValue(
123
         * java.lang.Object)
124
         */
125
        public void addElement(int index, Object element) {
126
            addElement(index, element, element);
127
        }
128
        
129
        public void addElement(Object value){
130
            addElement(this.size(), value);
131
        }
132
        
133
        
134
        public void addElement(Object value, Object printValue){
135
            addElement(this.size(), value, printValue);
136
        }
137
        
138
        /**
139
         * @param size
140
         * @param value
141
         * @param printValue
142
         */
143
        private void addElement(int index, Object element, Object printValue) {
144
            if (printValue==null) return;
145
            this.add(index, element); 
146
            if (printValue==null)
147
                this.model.add(index, element);
148
            else
149
                this.model.add(index, printValue);
150
            
151
        }
152

    
153
        public void setValue(int index, Object element, Object printValue) {
154
            if (printValue==null) return;
155
            this.set(index, element); 
156
            if (printValue==null)
157
                this.model.set(index, element);
158
            else
159
                this.model.set(index, printValue);
160
        }
161

    
162
        /* (non-Javadoc)
163
         * @see org.gvsig.tools.swing.api.dynobject.dynfield.ValueField#setValue(java.lang.Object)
164
         */
165
        public void setValue(Object value) {
166
            if (value==null) return;
167
            if (value instanceof List){
168
                for (Object elem: (List) value)
169
                    addElement(elem);
170
            }else{
171
                addElement(value);
172
            }
173
        }
174

    
175
        /* (non-Javadoc)
176
         * @see javax.swing.ListModel#addListDataListener(javax.swing.event.ListDataListener)
177
         */
178
        public void addListDataListener(ListDataListener l) {
179
            this.model.addListDataListener(l);
180
        }
181

    
182
        /* (non-Javadoc)
183
         * @see javax.swing.ListModel#getElementAt(int)
184
         */
185
        public Object getElementAt(int index) {
186
            return this.model.getElementAt(index);
187
        }
188

    
189
        /* (non-Javadoc)
190
         * @see javax.swing.ListModel#getSize()
191
         */
192
        public int getSize() {
193
           return this.model.getSize();
194
        }
195

    
196
        /* (non-Javadoc)
197
         * @see javax.swing.ListModel#removeListDataListener(javax.swing.event.ListDataListener)
198
         */
199
        public void removeListDataListener(ListDataListener l) {
200
            this.model.removeListDataListener(l);
201
        }
202

    
203
        /**
204
         * @return
205
         */
206
        public Object firstElement() {
207
            return this.model.firstElement();
208
        }
209
        
210
        public void removeElement(int index){
211
            this.remove(index);
212
            this.model.remove(index);
213
        }
214

    
215
    }
216

    
217
    protected JDynFieldComponent component;
218
    private NValueField simpleValueField;
219

    
220
    private ValueField parent;
221

    
222
    public DelegatedJFieldComponent(DynField dynField) {
223
        super(dynField);
224
        this.init();
225
    }
226

    
227
    /**
228
     * @param component2
229
     * @param dynField2
230
     */
231
    public DelegatedJFieldComponent(JDynFieldComponent component,
232
            DynField dynField) {
233
        super(dynField);
234
        this.initComponent(component);
235
        this.init();
236
    }
237

    
238
    /**
239
     * @param parent
240
     * @param dynField2
241
     */
242
    public DelegatedJFieldComponent(ValueField parent, DynField dynField) {
243
        super(dynField);
244
        try {
245
            simpleValueField = new NValueField(parent, dynField);
246

    
247
            this.initComponent(ToolsSwingLocator.getDynObjectSwingManager()
248
                    .createJDynFieldComponent(simpleValueField,
249
                            dynField.getElementsType()));
250
            this.parent = parent;
251

    
252
            this.init();
253
        } catch (ServiceException e) {
254
            // TODO Auto-generated catch block
255
            e.printStackTrace();
256
        }
257
    }
258

    
259
    /*
260
     * (non-Javadoc)
261
     * 
262
     * @seeorg.gvsig.tools.swing.api.dynobject.dynfield.JDynFieldComponent#
263
     * addValueChangedListener
264
     * (org.gvsig.tools.swing.api.dynobject.ValueChangedListener)
265
     */
266
    public void addValueChangedListener(ValueChangedListener listener) {
267
        component.addValueChangedListener(listener);
268
    }
269

    
270
    /*
271
     * (non-Javadoc)
272
     * 
273
     * @seeorg.gvsig.tools.swing.api.dynobject.dynfield.JDynFieldComponent#
274
     * raiseValueChangedEvent()
275
     */
276
    public void fireValueChangedEvent() {
277
        component.fireValueChangedEvent();
278
    }
279

    
280
    /*
281
     * (non-Javadoc)
282
     * 
283
     * @see
284
     * org.gvsig.tools.swing.api.dynobject.dynfield.ValueField#getDefaultValue()
285
     */
286
    public Object getDefaultValue() {
287
        return parent.getDefaultValue();
288
    }
289

    
290
    // /* (non-Javadoc)
291
    // * @see
292
    // org.gvsig.tools.swing.api.dynobject.dynfield.JDynFieldComponent#getDynObject()
293
    // */
294
    // public DynObject getDynObject() {
295
    // return this.component.getDynObject();
296
    // }
297

    
298
    /*
299
     * (non-Javadoc)
300
     * 
301
     * @see
302
     * org.gvsig.tools.swing.api.dynobject.dynfield.JDynFieldComponent#getFieldValue
303
     * ()
304
     */
305
    @Override
306
    public Object getFieldValue() {
307
        Object value = parent.getValue();
308
        if (value != null)
309
            return value;
310
        return parent.getDefaultValue();
311
    }
312

    
313
    /*
314
     * (non-Javadoc)
315
     * 
316
     * @see org.gvsig.tools.service.Service#getManager()
317
     */
318
    public Manager getManager() {
319
        return component.getManager();
320
    }
321

    
322
    protected ValueField getParentValueField() {
323
        return parent;
324
    }
325

    
326
    /*
327
     * (non-Javadoc)
328
     * 
329
     * @see
330
     * org.gvsig.tools.swing.api.dynobject.dynfield.JDynFieldComponent#getValue
331
     * ()
332
     */
333
    public Object getValue() {
334
        return parent.getValue();
335
    }
336

    
337
    protected NValueField getValueField() {
338
        return simpleValueField;
339
    }
340

    
341
    protected void initComponent(JDynFieldComponent component) {
342
        this.component = component;
343
        parent = component;
344
    }
345
    
346

    
347
    /*
348
     * (non-Javadoc)
349
     * 
350
     * @see
351
     * org.gvsig.tools.swing.api.dynobject.dynfield.JDynFieldComponent#isMandatory
352
     * ()
353
     */
354
    public boolean isMandatory() {
355
        return component.isMandatory();
356
    }
357

    
358
    /*
359
     * (non-Javadoc)
360
     * 
361
     * @see
362
     * org.gvsig.tools.swing.api.dynobject.dynfield.JDynFieldComponent#setValue
363
     * (java.lang.Object)
364
     */
365
    @Override
366
    public void setValue(Object value) {
367
        parent.setValue(value);
368
    }
369
}