Revision 202

View differences:

org.gvsig.tools/library/trunk/org.gvsig.tools/org.gvsig.tools.main/src/main/java/org/gvsig/tools/main/dynobject/DynObjectComponentAction.java
41 41
import javax.swing.JFrame;
42 42
import javax.swing.JPanel;
43 43
import javax.swing.JTabbedPane;
44
import javax.swing.WindowConstants;
44 45

  
45 46
//import org.gvsig.app.swing.serv.field.JProjectionDynFieldComponentFactory;
46 47
import org.gvsig.tools.ToolsLocator;
......
65 66

  
66 67
    private static final long serialVersionUID = -3386010046112585198L;
67 68

  
68
    private DynObjectSwingManager swingManager = ToolsSwingLocator
69
	    .getDynObjectSwingManager();
70
    private DynObjectManager dynManager = ToolsLocator.getDynObjectManager();
69
    private static DynObjectManager dynManager = ToolsLocator.getDynObjectManager();
71 70

  
71
    private static DynObjectSwingManager swingManager = ToolsSwingLocator.getDynObjectSwingManager();
72
  
73
 
72 74
    /**
73 75
     * @see MainAction#MainAction(JTabbedPane)
74 76
     */
75 77
    public DynObjectComponentAction(JTabbedPane tabbedPane) {
76 78
	super("DynObject", tabbedPane);
77 79
	putValue(SHORT_DESCRIPTION, "DynObject viewer components");
80
	registerDynObjects();
78 81
    }
82
    
83
    public void registerDynObjects(){
84
	TestDynObject.registerDynObject();
85
	Adress.registerDynObject();
86
    }
79 87

  
88
    
89
    
90
    
80 91
    @Override
81 92
    protected JComponent createComponent() {
82 93
	DynObject dynObject;
83 94
	final JDynObjectComponent dynObjectView;
84
	try {
85
	    
86
	    DynClass dynClass = createDynClass2(dynManager.add("Test",
87
		"Test dynclass"));
95
	JPanel mainPane = new JPanel(new BorderLayout());
96
	dynObjectView = getDynObjectView();
97
	if (dynObjectView == null) return mainPane;
88 98

  
89
	    dynObject = createDynObject(dynClass);
99
	JComponent component = (JComponent) dynObjectView.getComponent();
100
	mainPane.add(component, BorderLayout.CENTER);
101
	component.setPreferredSize(new Dimension(100, 100));
102
	JButton button = new JButton("Save");
103
	button.addActionListener(new ActionListener() {
104
	    public void actionPerformed(ActionEvent e) {
105
		launchNewFrame(dynObjectView);
106
	    }
107
	});
108
	mainPane.add(button, BorderLayout.SOUTH);
90 109

  
91

  
92
	    DynObjectModel model = createDynModel(dynClass);
93

  
94
	    JPanel mainPane = new JPanel(new BorderLayout());
95
	    dynObjectView = swingManager.createJDynObjectComponent(dynObject,
96
		    model);
97

  
98
	    JComponent component = (JComponent) dynObjectView.getComponent();
99
	    mainPane.add(component, BorderLayout.CENTER);
100
	    component.setPreferredSize(new Dimension(100, 100));
101
	    JButton button = new JButton("Save");
102
	    button.addActionListener(new ActionListener(){
103
		public void actionPerformed(ActionEvent e) {
104
		    launchNewFrame(dynObjectView);   
105
		}
106
	    });
107
	    mainPane.add(button, BorderLayout.SOUTH);
108

  
109
	    return mainPane;
110
	} catch (ServiceException e) {
111
	    // TODO Auto-generated catch block
112
	    e.printStackTrace();
113
	    return null;
114
	}
110
	return mainPane;
115 111
    }
116 112

  
117
//    private DynClass createDynClass(DynClass dynClass) {
118
//	DynClass dynClass2 = createDynClass2(dynClass);
119
////	dynClass2.addDynField("dynObject").setType(DataTypes.DYNOBJECT);
120
//	return dynClass2;
121
//    }
122 113

  
123 114
    /**
124 115
     * @return
125 116
     */
126
    private DynClass createDynClass2(DynClass dynClass) {
127

  
128
	// TODO add all the available data types
129
	dynClass.addDynFieldString("text");
130
	dynClass.addDynFieldString("label").setReadOnly(true);
131
	dynClass.addDynFieldList("integer-list").setMandatory(true)
132
		.setElementsType(DataTypes.INT);
133
	dynClass.addDynFieldFloat("float");
134
	dynClass.addDynFieldInt("integer-readonly").setReadOnly(true)
135
		.setMandatory(true);
136

  
137
	DynObjectValueItem[] values = new DynObjectValueItem[3];
138
	values[0] = new DynObjectValueItem(0, "monday");
139
	values[1] = new DynObjectValueItem(1, "tuesday");
140
	values[2] = new DynObjectValueItem(2, "wednesday");
141
	dynClass.addDynFieldInt("combo").setDefaultDynValue(0)
142
		.setAvailableValues(values).setMandatory(true);
143

  
144
	dynClass.addDynField("file").setMandatory(true).setType(DataTypes.FILE);
145
	dynClass.addDynField("folder").setMandatory(true).setType(
146
		DataTypes.FOLDER);
147

  
148
//	dynClass.addDynField("srs").setMandatory(true).setType(
149
//		JProjectionDynFieldComponentFactory.IPROJECTION);
150

  
151
	dynClass.addDynFieldDate("date").setMandatory(true);
152
	dynClass.addDynField("date-only").setMandatory(true).setType(DataTypes.DATE).setSubtype(DataTypes.SUBTYPE_DATE);
153
	dynClass.addDynFieldDate("time-only").setMandatory(true).setType(DataTypes.TIME).setSubtype(null);
154
	dynClass.addDynField("timestamp").setMandatory(true).setType(DataTypes.TIMESTAMP);
155
	
156
	dynClass.addDynFieldBoolean("boolean");
157

  
158
	dynClass.addDynFieldList("folders").setElementsType(DataTypes.FOLDER);
159
	// dynClass.addDynField("dates").setMandatory(true)
160
	// .setType(DataTypes.DATE);
161

  
162
	return dynClass;
117
    private JDynObjectComponent getDynObjectView() {
118
	try {
119
	    TestDynObject testDynObject = (TestDynObject) dynManager
120
		    .get("Test");
121
	    return swingManager.createJDynObjectComponent(testDynObject
122
		    .createDynObject(), testDynObject.createDynModel());
123
	} catch (ServiceException e) {
124
	    return null;
125
	}
163 126
    }
164 127

  
165
    /**
166
     * @return
167
     * @throws ServiceException
168
     */
169
    private DynObjectModel createDynModel(DynClass dynClass)
170
	    throws ServiceException {
171
	DynObjectModel model = swingManager.createEmptyDynObjectModel(dynClass);
172
	model.add("text");
173

  
174
//	model.add("New items", "srs");
175
	model.add("New items", "date");
176
	model.add("New items", "date-only");
177
	model.add("New items", "time-only");
178
//	model.add("New items", "timestamp");
179
	// model.add("folders");
180

  
181
	model.add("integers", "integer-list");
182
	model.add("integers", "float");
183
	model.add("integers", "float");
184
	model.add("combo");
185
	model.add("combo");
186
	// model.add("dynObject");
187
	return model;
188
    }
189

  
190
    private DynObject createDynObject(DynClass dynClass) throws ServiceException {
191
	DynObject dynObject = dynManager.createDynObject(dynClass);
192

  
193
	dynObject.setDynValue("text", "some text");
194

  
195
	List<Integer> integerList = new ArrayList<Integer>();
196
	dynObject.setDynValue("integer-list", integerList);
197

  
198
	// a?ado los valores del list
199
	integerList.add(12345);
200
	integerList.add(123456);
201
	integerList.add(12345);
202
	integerList.add(123457);
203
	integerList.add(12345);
204

  
205
	List<File> folderList = new ArrayList<File>();
206

  
207
	dynObject.setDynValue("float", 12345.321f);
208
	dynObject.setDynValue("integer-readonly", 123);
209
	dynObject.setDynValue("combo", 0);
210

  
211
	dynObject.setDynValue("date", new Date());
212
	dynObject.setDynValue("time-only", new Date());
213
	
214
	// dynObject.setDynValue("dynObject", createDynObject2());
215
	dynObject.setDynValue("folders", folderList);
216

  
217
	return dynObject;
218
    }
219

  
220
    private DynObject createDynObject2() {
221
	DynClass dynClass = dynManager.add("test2", "test dynclass 2");
222

  
223
	DynObject dynObject = dynManager
224
		.createDynObject(createDynClass2(dynClass));
225

  
226
	dynObject.setDynValue("text", "some text");
227

  
228
	dynObject.setDynValue("label", "this is a readonly text");
229

  
230
	List<Integer> integerList = new ArrayList<Integer>();
231
	dynObject.setDynValue("integer-list", integerList);
232

  
233
	// a?ado los valores del list
234
	integerList.add(12345);
235
	integerList.add(123456);
236
	integerList.add(12345);
237
	integerList.add(123457);
238
	integerList.add(12345);
239

  
240
	// List<File> folderList = new ArrayList<File>();
241

  
242
	dynObject.setDynValue("float", 12345.321f);
243
	dynObject.setDynValue("integer-readonly", 123);
244
	dynObject.setDynValue("combo", 0);
245
	// dynObject.setDynValue("folders", folderList);
246

  
247
	return dynObject;
248
    }
249

  
250 128
    @Override
251 129
    protected String getComponentTitle() {
252 130
	return "DynObject";
......
256 134
     * @param dynObjectView
257 135
     */
258 136
    protected void launchNewFrame(JDynObjectComponent dynObjectView) {
137
	
259 138
	dynObjectView.saveStatus();
260 139

  
261
	JDynObjectComponent newDynObjectView;
262
	try {
263
	    newDynObjectView = swingManager
264
		    .createJDynObjectComponent(dynObjectView.getDynObject());
140
	final JFrame frame = new JFrame("Tools swing components test app");
141
	// frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
265 142

  
266
	    final JFrame frame = new JFrame("Tools swing components test app");
267
	    // frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
143
	frame.getContentPane().add((Component) getDynObjectView().getComponent());
268 144

  
269
	    frame.getContentPane().add(
270
		    (Component) newDynObjectView.getComponent());
271

  
272
	    // Display the window.
273
	    frame.pack();
274
	    frame.setVisible(true);
275

  
276
	} catch (ServiceException e) {
277
	    // TODO Auto-generated catch block
278
	    e.printStackTrace();
279
	}
145
	// Display the window.
146
	frame.pack();
147
	frame.setVisible(true);
280 148
    }
281 149

  
282 150
}
org.gvsig.tools/library/trunk/org.gvsig.tools/org.gvsig.tools.main/src/main/java/org/gvsig/tools/main/dynobject/Adress.java
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.main.dynobject;
35

  
36
import org.gvsig.tools.ToolsLocator;
37
import org.gvsig.tools.dynobject.DynClass;
38
import org.gvsig.tools.dynobject.DynObjectManager;
39
import org.gvsig.tools.dynobject.DynStruct;
40
import org.gvsig.tools.dynobject.impl.DefaultDynClass;
41
import org.gvsig.tools.dynobject.impl.DefaultDynObject;
42
import org.gvsig.tools.service.ServiceException;
43
import org.gvsig.tools.swing.api.ToolsSwingLocator;
44
import org.gvsig.tools.swing.api.dynobject.DynObjectModel;
45
import org.gvsig.tools.swing.api.dynobject.DynObjectSwingManager;
46

  
47
/**
48
 * @author <a href="mailto:reinhold@uji.es">cmartin</a>
49
 *
50
 */
51
public class Adress extends DefaultDynClass{
52

  
53
    private DynObjectSwingManager swingManager = ToolsSwingLocator
54
    .getDynObjectSwingManager();
55
    
56
    /**
57
     * @param name
58
     * @param description
59
     * @return
60
     */
61
//    private static DynStruct getDynClass(String name, String description) {
62
//	DynObjectManager dynManager = ToolsLocator.getDynObjectManager();
63
//	return createDynClass(dynManager.add(name,
64
//		description));
65
//    }
66
    
67
    public static void registerDynObject(){
68
	ToolsLocator.getDynObjectManager().add(new Adress("Address","This is an address dynObject"));
69
    }
70
    
71
    /**
72
     * @param dynClass
73
     */
74
    public Adress(String name, String description) {
75
	super(ToolsLocator.getDynObjectManager(),name, description);
76
	initDynClass();
77
   }
78

  
79
    /**
80
     * @param add
81
     * @return
82
     */
83
    private void initDynClass() {
84
	this.addDynFieldString("Street").setMandatory(true);
85
	this.addDynFieldInt("Number");
86
	this.addDynFieldString("CP");
87
	this.addDynFieldString("State");
88
	this.addDynFieldString("Country").setDefaultDynValue("Spain");
89
    }
90
    
91
    public DynObjectModel createModel(){
92
	DynObjectModel model = null;
93
	try {
94
	    model = swingManager.createEmptyDynObjectModel(this);
95
	    model.add("Street");
96
	    model.add("Number");
97
	    model.add("CP");
98
	    model.add("State");
99
	    model.add("Country");
100
	} catch (ServiceException e) {
101
	    e.printStackTrace();
102
	}
103
	return model;
104
    }
105

  
106
}
org.gvsig.tools/library/trunk/org.gvsig.tools/org.gvsig.tools.main/src/main/java/org/gvsig/tools/main/dynobject/TestDynObject.java
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.main.dynobject;
35

  
36
import java.io.File;
37
import java.util.ArrayList;
38
import java.util.Date;
39
import java.util.List;
40

  
41
import org.gvsig.app.swing.serv.field.JProjectionDynFieldComponentFactory;
42
import org.gvsig.app.swing.serv.field.crs.JCRSDynFieldComponentFactory;
43
import org.gvsig.tools.ToolsLocator;
44
import org.gvsig.tools.dataTypes.DataTypes;
45
import org.gvsig.tools.dynobject.DynClass;
46
import org.gvsig.tools.dynobject.DynObject;
47
import org.gvsig.tools.dynobject.DynObjectManager;
48
import org.gvsig.tools.dynobject.DynObjectValueItem;
49
import org.gvsig.tools.dynobject.impl.DefaultDynClass;
50
import org.gvsig.tools.service.ServiceException;
51
import org.gvsig.tools.swing.api.ToolsSwingLocator;
52
import org.gvsig.tools.swing.api.dynobject.DynObjectModel;
53
import org.gvsig.tools.swing.api.dynobject.DynObjectSwingManager;
54

  
55
/**
56
 * @author <a href="mailto:reinhold@uji.es">cmartin</a>
57
 *
58
 */
59
public class TestDynObject extends DefaultDynClass{
60

  
61

  
62
    private static DynObjectSwingManager swingManager = ToolsSwingLocator.getDynObjectSwingManager();
63
    
64
    private static DynObjectManager dynManager = ToolsLocator.getDynObjectManager();
65

  
66
    // 
67
    /**
68
     * @param manager
69
     * @param name
70
     * @param description
71
     */
72
    public TestDynObject(String name,
73
	    String description) {
74
	super(dynManager, name, description);
75
	initDynClass();
76
    }
77
    
78
//    private DynClass createDynClass(DynClass dynClass) {
79
//	DynClass dynClass2 = createDynClass2(dynClass);
80
////	dynClass2.addDynField("dynObject").setType(DataTypes.DYNOBJECT);
81
//	return dynClass2;
82
//  }
83

  
84
    
85
    public static void registerDynObject(){
86
	dynManager.add(new TestDynObject("Test", "test dynclass"));
87
    }
88
    
89
    /**
90
     * @return
91
     */
92
//    private JDynObjectComponent getAddressDynObjectView() {
93
//	try {
94
//	    Adress testDynObject = (TestDynObject) dynManager
95
//		    .get("Test");
96
//	    return swingManager.createJDynObjectComponent(testDynObject
97
//		    .createDynObject(), testDynObject.createDynModel());
98
//	} catch (ServiceException e) {
99
//	    return null;
100
//	}
101
//    }
102
    
103
  /**
104
   * @return
105
   */
106
  private void initDynClass() {
107

  
108
	this.addDynFieldList("Address-list").setMandatory(true)
109
	.setElementsType(DataTypes.DYNOBJECT);
110
	
111

  
112
	// TODO add all the available data types
113
	this.addDynFieldString("text");
114
	this.addDynFieldString("label").setReadOnly(true);
115
		
116
	this.addDynFieldInt("integer").setReadOnly(true)
117
		.setMandatory(true);
118

  
119
	this.addDynFieldList("boolean-list").setMandatory(true)
120
	.setElementsType(DataTypes.BOOLEAN);
121
	this.addDynFieldList("integer-list").setMandatory(true)
122
	.setElementsType(DataTypes.INT);
123
	this.addDynFieldFloat("float");
124
	this.addDynFieldList("float-list").setMandatory(true)
125
	.setElementsType(DataTypes.FLOAT);
126
	this.addDynFieldFloat("byte");
127
	this.addDynFieldList("byte-list").setMandatory(true)
128
	.setElementsType(DataTypes.BYTE);
129

  
130
	DynObjectValueItem[] values = new DynObjectValueItem[3];
131
	values[0] = new DynObjectValueItem(0, "monday");
132
	values[1] = new DynObjectValueItem(1, "tuesday");
133
	values[2] = new DynObjectValueItem(2, "wednesday");
134
	this.addDynFieldInt("combo").setDefaultDynValue(0)
135
		.setAvailableValues(values).setMandatory(true);
136

  
137
	this.addDynFieldList("combo-list").setMandatory(true)
138
	.setElementsType(DataTypes.INT).getElementsType().setAvailableValues(values);
139
	
140
	
141
	this.addDynField("file").setMandatory(true).setType(DataTypes.FILE);
142
	this.addDynField("folder").setMandatory(true).setType(
143
		DataTypes.FOLDER);
144
	this.addDynFieldList("folders").setElementsType(DataTypes.FOLDER);
145
	this.addDynFieldList("files").setElementsType(DataTypes.FILE);
146
		
147
	this.addDynField("srs").setMandatory(true).setType(
148
		JProjectionDynFieldComponentFactory.IPROJECTION);
149
	this.addDynField("crs").setMandatory(true).setType(
150
		JCRSDynFieldComponentFactory.ICRS);
151

  
152
	this.addDynFieldDate("date").setMandatory(true).setSubtype(null);
153
	this.addDynField("date-only").setMandatory(true).setType(DataTypes.DATE).setSubtype(DataTypes.SUBTYPE_DATE);
154
	this.addDynFieldDate("time-only").setMandatory(true).setType(DataTypes.TIME).setSubtype(null);
155
	this.addDynField("timestamp").setMandatory(true).setType(DataTypes.TIMESTAMP);
156
	
157
	this.addDynFieldBoolean("boolean");
158

  
159
	this.addDynField("Address").setType(DataTypes.DYNOBJECT);
160
	
161

  
162
	// this.addDynField("dates").setMandatory(true)
163
	// .setType(DataTypes.DATE);
164
  }
165

  
166
  /**
167
   * @return
168
   * @throws ServiceException
169
   */
170
  public DynObjectModel createDynModel()
171
	    throws ServiceException {
172
	DynObjectModel model = swingManager.createEmptyDynObjectModel(this);
173
	model.add("text");
174
	model.add("label");
175
	model.add("boolean");
176
	model.add("boolean-list");
177

  
178
//	model.add("SRS", "srs");
179
//	model.add("SRS", "crs");
180
	model.add("Date", "date");
181
	model.add("Date", "date-only");
182
	model.add("Date", "time-only");
183
	model.add("Date", "timestamp");
184
	model.add("Files", "file");
185
	model.add("Files", "folder");
186
	model.add("Files", "files");
187
	model.add("Files", "folders");
188

  
189
	model.add("integers", "integer");
190
	model.add("integers", "float");
191
	model.add("list", "byte");
192
	model.add("list", "integer-list");
193
	model.add("list", "float-list");
194
	model.add("list", "byte-list");
195
	
196
	model.add("combo-list");
197
	model.add("combo");
198
	model.add("combo");
199

  
200
	model.add("DynObjects", "Address");
201
	model.add("DynObjects", "Address-list");
202
	return model;
203
  }
204

  
205
  public DynObject createDynObject() throws ServiceException {
206
	DynObject dynObject = dynManager.createDynObject(this);
207

  
208
	dynObject.setDynValue("text", "some text");
209
	dynObject.setDynValue("label", "some readonly text");
210

  
211
	//BOOLEAN LIST
212
	List<Boolean> booleanList = new ArrayList<Boolean>();
213
	dynObject.setDynValue("boolean-list", booleanList);
214

  
215
	// a?ado los valores del list
216
	booleanList.add(true);
217
	booleanList.add(false);
218
	booleanList.add(null);
219
	
220

  
221
	//INTEGER LIST
222
	List<Integer> integerList = new ArrayList<Integer>();
223
	dynObject.setDynValue("integer-list", integerList);
224

  
225
	// a?ado los valores del list
226
	integerList.add(12345);
227
	integerList.add(123456);
228
	integerList.add(12345);
229
	integerList.add(123457);
230
	integerList.add(12345);
231

  
232
	
233
	//DOUBLE LIST
234
	List<Double> floatList = new ArrayList<Double>();
235
	dynObject.setDynValue("float-list", floatList);
236

  
237
	// a?ado los valores del list
238
	floatList.add(12345.45);
239
	floatList.add(123456.3);
240
	floatList.add(12345.2);
241

  
242
	
243
	//BIT LIST
244
	List<Byte> byteList = new ArrayList<Byte>();
245
	dynObject.setDynValue("byte-list", byteList);
246

  
247
	byte a = (byte) 0xAA;
248
	byte b = (byte) 0xBB;
249
	byte c = (byte) 0xCC;
250
	
251
	// a?ado los valores del list
252
	byteList.add(a);
253
	byteList.add(b);
254
	byteList.add(c);
255
	
256
	dynObject.setDynValue("float", 12345.321f);
257
	dynObject.setDynValue("integer", 123);
258
	dynObject.setDynValue("combo", 0);
259

  
260
	dynObject.setDynValue("date", new Date());
261
	dynObject.setDynValue("time-only", new Date());
262
	
263
	dynObject.setDynValue("Address", dynManager.createDynObject(new Adress("Address", "Address example")));
264
	
265
	//DYNOBJECT LIST
266
	List<DynObject> dynObjectList = new ArrayList<DynObject>();
267
	dynObjectList.add(dynManager.createDynObject(new Adress("Address-list", "Address list example")));
268

  
269
	dynObject.setDynValue("Address-list", dynObjectList);
270

  
271
	
272
	List<File> folderList = new ArrayList<File>();
273
	dynObject.setDynValue("folders", folderList);
274
	return dynObject;
275
  }
276

  
277
//  public DynObject createDynObject() {
278
//	DynObject dynObject = dynManager.createDynObject(this);
279
//
280
//	dynObject.setDynValue("text", "some text");
281
//
282
//	dynObject.setDynValue("label", "this is a readonly text");
283
//
284
//	List<Integer> integerList = new ArrayList<Integer>();
285
//	dynObject.setDynValue("integer-list", integerList);
286
//
287
//	// a?ado los valores del list
288
//	integerList.add(12345);
289
//	integerList.add(123456);
290
//	integerList.add(12345);
291
//	integerList.add(123457);
292
//	integerList.add(12345);
293
//
294
//	// List<File> folderList = new ArrayList<File>();
295
//
296
//	dynObject.setDynValue("float", 12345.321f);
297
//	dynObject.setDynValue("integer-readonly", 123);
298
//	dynObject.setDynValue("combo", 0);
299
//	// dynObject.setDynValue("folders", folderList);
300
//
301
//	return dynObject;
302
//  }
303
}
org.gvsig.tools/library/trunk/org.gvsig.tools/org.gvsig.tools.main/pom.xml
41 41
			<version>2.1.0-SNAPSHOT</version>
42 42
			<scope>runtime</scope>
43 43
		</dependency>
44
<!--		<dependency>
44
		<dependency>
45 45
			<groupId>org.gvsig</groupId>
46 46
			<artifactId>org.gvsig.app.swing.serv.field</artifactId>
47 47
			<version>2.1.0-SNAPSHOT</version>
48 48
			<scope>runtime</scope>
49
		</dependency>-->
49
		</dependency>
50
						<dependency>
51
			<groupId>org.gvsig</groupId>
52
			<artifactId>org.gvsig.metadata</artifactId>
53
			<version>2.0-SNAPSHOT</version>
54
		</dependency>
55
		<dependency>
56
			<groupId>org.gvsig</groupId>
57
			<artifactId>org.gvsig.metadata</artifactId>
58
			<version>2.0-SNAPSHOT</version>
59
			<classifier>simple</classifier>
60
			<scope>runtime</scope>
61
		</dependency>
50 62
	</dependencies>
51 63
</project>
org.gvsig.tools/library/trunk/org.gvsig.tools/org.gvsig.tools.lib/src/main/java/org/gvsig/tools/dynobject/impl/DefaultDynField.java
337 337
		return this;
338 338
	}
339 339

  
340
	private boolean isContainer(){
340
	public boolean isContainer(){
341 341
	    return ToolsLocator.getDataTypesManager().isContainer(this.dataType);
342 342
	}
343 343

  
org.gvsig.tools/library/trunk/org.gvsig.tools/org.gvsig.tools.lib/src/main/java/org/gvsig/tools/dynobject/DynField.java
201 201
	 *    
202 202
	 * @return DynField that define the type of elements.
203 203
	 */
204
	public DynField setReadOnly(boolean isReadOnly);		
204
	public DynField setReadOnly(boolean isReadOnly);	
205
	
206
	
207
	public boolean isContainer();
205 208
}
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/AbstractJDynFieldComponentFactory.java
139 139
	// this.getServiceManager().getJSingleReadOnlyDynFieldComponent(component,
140 140
	// field);
141 141
	// }
142
	if (field.getAvailableValues() != null)
142
	if ((!field.isContainer())&&((field.getAvailableValues() != null)))
143 143
	    return this.getServiceManager()
144 144
		    .getJSingleComboBoxDynFieldComponent(component, field);
145 145
	return component;
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/AbstractDynObjectComponent.java
173 173
	}
174 174
	return true;
175 175
    }
176
    
177
    /**
178
     * 
179
     */
180
    protected void emptyAll() {
181
	Map<Component, JDynFieldComponent> items = this.getComponents();
182
	for (JDynFieldComponent item : items.values())
183
	    item.setValue(null);
184
    }
176 185

  
177 186
    /**
187
     * @param value
188
     */
189
    protected void fillValues(DynObject dynObject) {
190
	Map<Component, JDynFieldComponent> items = this.getComponents();
191
	for (JDynFieldComponent item : items.values())
192
	    item.setValue(dynObject.getDynValue(item.getDynField().getName()));
193
    }
194

  
195
    /**
178 196
     * @param component
179 197
     * @return
180 198
     */
......
189 207
	    comp.saveStatus();
190 208
	}
191 209
    }
210
    
192 211

  
212

  
213
    /* (non-Javadoc)
214
     * @see org.gvsig.tools.swing.api.dynobject.JDynObjectComponent#addValueChangedListener(org.gvsig.tools.swing.api.dynobject.ValueChangedListener)
215
     */
216
    public void addValueChangedListener(ValueChangedListener listener) {
217
	Iterator<JDynFieldComponent> componentFields = this.getComponents()
218
		.values().iterator();
219
	JDynFieldComponent comp;
220
	while (componentFields.hasNext()) {
221
	    comp = componentFields.next();
222
	    comp.addValueChangedListener(listener);
193 223
}
224
    }
225

  
226
}
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/AbstractJDynFieldComponent.java
29 29
import javax.swing.BorderFactory;
30 30
import javax.swing.Box;
31 31
import javax.swing.BoxLayout;
32
import javax.swing.JButton;
32 33
import javax.swing.JPanel;
33 34

  
34 35
import org.gvsig.tools.ToolsLocator;
......
100 101
		marginLeft, marginRight);
101 102
    }
102 103

  
104
    public void setValue(Object value){
105
	if (value==null)
106
	    setNullValue();
107
	else 
108
	    setNonNullValue(value);
109
	this.fireValueChangedEvent();
110
    }
111
    
112
    /**
113
     * @param value
114
     */
115
    protected abstract void setNonNullValue(Object value);
116
    
117
    /**
118
     * 
119
     */
120
    protected abstract void setNullValue();
121

  
103 122
    /*
104 123
     * (non-Javadoc)
105 124
     * 
......
127 146
	return pane;
128 147
    }
129 148

  
149

  
150
    protected JButton createButton(String text) {
151
	return ToolsSwingLocator.getUsabilitySwingManager().createJToolButton(
152
		this.translate(text));
153
    }
154
	
130 155
    /*
131 156
     * (non-Javadoc)
132 157
     * 
......
231 256
     *            the value for the field
232 257
     */
233 258
    public void setFieldValue(Object value) {
234
	fieldValue.setValue(value);
259
	if (validate(value))
260
	    fieldValue.setValue(value);
235 261
    }
236 262

  
237 263
    /**
......
248 274
     */
249 275
    private boolean validate(Object value) {
250 276
	try {
251
	    this.getDynField().validate(this.getValue());
277
	    this.getDynField().validate(value);
252 278
	    return true;
253 279
	} catch (DynFieldValidateException e) {
254 280
	    return false;
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
37 37
import java.util.List;
38 38

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

  
41 43
import org.gvsig.tools.dynobject.DynClass;
42 44
import org.gvsig.tools.dynobject.DynField;
......
54 56
public abstract class DelegatedJFieldComponent extends AbstractJDynField
55 57
	implements JDynFieldComponent {
56 58

  
57
    public class NValueField implements NFieldValue {
58

  
59
	private final DefaultListModel model;
59
    public class NValueField extends ArrayList implements NFieldValue, ListModel {
60 60
	private final DynField field;
61 61
	private int selectedIndex;
62

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

  
72 75
	    // Object value = parent.getValue();
......
78 81
	    // this.elems = (List) value;
79 82
	}
80 83

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

  
85 89
	/*
86 90
	 * (non-Javadoc)
......
93 97
	    return field.getDefaultValue();
94 98
	}
95 99

  
96
	public DefaultListModel getModel() {
97
	    return model;
98
	}
99

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

  
114
	public void removeItem(int index) {
115
	    model.remove(index);
116
	}
117

  
118 114
	public void setSelectedIndex(int index) {
119 115
	    selectedIndex = index;
120 116
	}
......
126 122
	 * org.gvsig.tools.swing.api.dynobject.dynfield.ValueField#setValue(
127 123
	 * java.lang.Object)
128 124
	 */
129
	public void add(Object value) {
130
	    setValue(value);
125
	public void addElement(int index, Object element) {
126
	    addElement(index, element, element);
131 127
	}
132 128
	
133
	public void setValue(Object value) {
134
	    model.add(model.getSize(), value);
129
	public void addElement(Object value){
130
	    addElement(this.size(), value);
135 131
	}
136

  
132
	
133
	
134
	public void addElement(Object value, Object printValue){
135
	    addElement(this.size(), value, printValue);
136
	}
137
	
137 138
	/**
138
	 * @param index
139
	 * @param size
139 140
	 * @param value
141
	 * @param printValue
140 142
	 */
141
	public void add(Integer index, Object value) {
142
	    model.add(index, value);
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
	    
143 151
	}
144 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

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

  
152
	
153 215
    }
154 216

  
155 217
    protected JDynFieldComponent component;
......
280 342
	this.component = component;
281 343
	parent = component;
282 344
    }
345
    
283 346

  
284 347
    /*
285 348
     * (non-Javadoc)
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/DynObjectValueField.java
38 38
import org.gvsig.tools.dynobject.DynField;
39 39
import org.gvsig.tools.dynobject.DynObject;
40 40
import org.gvsig.tools.dynobject.DynObjectManager;
41
import org.gvsig.tools.dynobject.exception.DynFieldValidateException;
41 42
import org.gvsig.tools.swing.api.dynobject.dynfield.ValueField;
42 43

  
43 44
/**
......
81 82
     * @see org.gvsig.tools.swing.api.dynobject.dynfield.ValueField#getValue()
82 83
     */
83 84
    public Object getValue() {
84
	Object value = parent.getDynValue(fieldName);
85
	String name = getFieldName();
86
	Object value = parent.getDynValue(name);
85 87
	DynObjectManager dynManager = ToolsLocator.getDynObjectManager();
86 88
	if ((value==null)&& (isDynObject()))
87 89
	    return dynManager.createDynObject(dynManager.get(this.getDynField().getName()));
88
	return null;
90
	return value;
89 91
    }
92
    
93
    /**
94
     * @return
95
     */
96
    private String getFieldName() {
97
	String name = this.fieldName;
98
	String suffix = "-List-item";
99
	if (name.endsWith(suffix))
100
	    return name.replace(suffix, "");
101
	return name;
102
    }
90 103

  
91 104
    /*
92 105
     * (non-Javadoc)
......
96 109
     * .lang.Object)
97 110
     */
98 111
    public void setValue(Object value) {
99
	parent.setDynValue(fieldName, value);
112
	try {
113
	    getDynField().validate(value);
114
	    parent.setDynValue(fieldName, value);
115
	} catch (DynFieldValidateException e) {
116
	    // TODO Auto-generated catch block
117
	    e.printStackTrace();
118
	}
100 119
    }
101 120
    
102 121
    public DynField getDynField(){
org.gvsig.tools/library/trunk/org.gvsig.tools/org.gvsig.tools.swing/org.gvsig.tools.swing.impl/src/main/java/org/gvsig/tools/swing/impl/dynobject/dynfield/JNDynFieldComponent.java
43 43
import java.util.List;
44 44

  
45 45
import javax.swing.BorderFactory;
46
import javax.swing.DefaultListModel;
47 46
import javax.swing.JButton;
48 47
import javax.swing.JList;
49 48
import javax.swing.JPanel;
......
56 55
import org.gvsig.tools.dynobject.DynField;
57 56
import org.gvsig.tools.service.ServiceException;
58 57
import org.gvsig.tools.swing.api.ToolsSwingLocator;
58
import org.gvsig.tools.swing.api.dynobject.ValueChangedListener;
59 59
import org.gvsig.tools.swing.api.dynobject.dynfield.JDynFieldComponent;
60 60
import org.gvsig.tools.swing.api.dynobject.dynfield.ValueField;
61 61
import org.gvsig.tools.swing.spi.DelegatedJFieldComponent;
......
64 64
 * @author <a href="mailto:reinhold@uji.es">cmartin</a>
65 65
 *
66 66
 */
67
public class JNDynFieldComponent  extends DelegatedJFieldComponent implements JDynFieldComponent, ListSelectionListener {
67
public class JNDynFieldComponent  extends DelegatedJFieldComponent implements JDynFieldComponent, ListSelectionListener, ValueChangedListener {
68 68
    
69 69
    
70 70
    private static final int  MINIMUM_LIST_SIZE = 5;
71 71

  
72
    private static final Object UNKNOWN = "unknown";
73

  
72 74
    private JList list;
73 75

  
74 76
    private JButton sbutton;
......
96 98
     */
97 99
    public JNDynFieldComponent(ValueField parent, DynField dynField) {
98 100
	super(parent,dynField);
101
	this.addValueChangedListener(this);
99 102
    }
100 103

  
101 104
    private void addElement(Object element) {
102
	items.add(element);	
103
	this.list.setSelectedIndex(items.getModel().getSize()-1);
105
	Object[] values = this.getDynField().getElementsType().getAvailableValues();
106
	if (values!=null)
107
	    items.addElement(element, values[(Integer) element]);	
108
	else if (this.getDynField().getElementsType().getType()==DataTypes.BOOLEAN)
109
	    if (element == null)
110
		items.addElement(element, UNKNOWN);
111
	    else
112
		items.addElement(element, element);
113
	 else
114
		items.addElement(element, element);		    
115
	this.list.setSelectedIndex(items.getSize()-1);
104 116
    }
105 117
    
118
    private void setValue(Object element, int index) { 	
119
	Object[] values = this.getDynField().getElementsType().getAvailableValues();
120
	if (element instanceof Integer){
121
	    int ind = (Integer) element;
122
	    if ((values!=null)&&(ind>-1))
123
		items.setValue(index, element, values[(Integer) element]);	
124
	    else
125
		items.setValue(index, element, element);
126
	}else if (this.getDynField().getElementsType().getType()==DataTypes.BOOLEAN)
127
	    if (element == null)
128
		items.setValue(index, element, UNKNOWN);
129
	    else
130
		items.setValue(index, element, element);
131
	 else
132
		items.setValue(index, element, element);	
133
	this.list.setSelectedIndex(index);
134
    }
135
    
106 136
//    private void addElement(int index, Object item, boolean addItemToInnerList) {
107 137
//	addItem(index,item);
108 138
////	if (addItemToInnerList)
......
265 295
	c.gridy = 0;
266 296
	c.ipady = 0;
267 297
	c.weightx = 0.0;  // 0
268
	c.fill = GridBagConstraints.BASELINE;
298
	c.fill = GridBagConstraints.RELATIVE;
269 299
	c.anchor = GridBagConstraints.PAGE_START;
270 300
	subPanel.add(sbutton,c);
271 301

  
......
331 361
     * 
332 362
     */
333 363
    private void initJList() {
334
	this.list = new JList(this.items.getModel());
364
	this.list = new JList(this.items);
335 365
	this.list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
336 366
	this.list.addListSelectionListener(this);
337
	if (this.items.getModel().getSize()>0) 
367
	if (this.items.getSize()>0) 
338 368
	    this.list.setSelectedIndex(0);
339 369
    }
340 370

  
......
356 386
    public boolean isValid() {
357 387
	return this.component.isValid();
358 388
    }
359

  
389
    
360 390
    /**
361 391
     * 
362 392
     */
363 393
    private void populateItems(List items) {
364 394
	if (items == null)
365 395
	    return;
366
	Object element;
367
	for (int i = 0; i < items.size(); i++) {
368
	    element = items.get(i);
369
	    this.items.add(element);
370
	}
396
	else
397
	    this.items.setValue(items);
371 398
//	if (!items.isEmpty())
372 399
//	    this.list.setSelectedIndex(0);
373 400
    }
374 401

  
375 402
    public void refresh(){
376
	if ((items.getModel().isEmpty())||(list.getSelectedIndex()<0)){
403
	if ((items.isEmpty())||(list.getSelectedIndex()<0)){
377 404
	   this.sbutton.setEnabled(false);
378 405
	   this.component.requestFocus();
379 406
	}else
......
382 409

  
383 410
    private void removeElement(int ind) {
384 411
	
385
	if ((ind>=0)&&(ind<this.items.getModel().getSize()))
412
	if ((ind>=0)&&(ind<this.items.getSize()))
386 413
	removeItem(ind);
387 414
	
388
	if (items.getModel().getSize()<0)
415
	if (items.getSize()<0)
389 416
	    sbutton.setEnabled(false);
390 417
	else{
391 418
	    if (ind>0)
......
399 426
     */
400 427
    private void removeItem(int ind) {
401 428
//	model.removeElement(model.get(ind));
402
	this.items.removeItem(ind);
429
	this.items.removeElement(ind);
403 430
    }
404 431

  
405 432
    /* (non-Javadoc)
......
435 462
//	for (int i=0;i<this.model.size();i++){
436 463
//	    this.items.addItem(i,this.model.get(i));
437 464
//	}
438
	setFieldValue(this.items.toArray());
465
	setFieldValue(this.items);
439 466
    }
440 467

  
441 468

  
......
472 499
    @Override
473 500
    public void setValue(Object value) {
474 501
	if (value instanceof List){
475
	   populateItems((List) value);
502
	   this.items.setValue((List) value);
476 503
	}else{
477
	    this.list.setSelectedValue(value, true);		
504
	   this.list.setSelectedValue(value, true);		
478 505
	}
479

  
506
	this.fireValueChangedEvent();
480 507
    }
481 508

  
482 509

  
......
485 512
     */
486 513
    public void valueChanged(ListSelectionEvent e) {
487 514
	if (list.getSelectedIndex()>=0){
488
	    this.component.setValue(this.items.getModel().getElementAt(list.getSelectedIndex()));
515
	    this.component.setValue(this.items.getElementAt(list.getSelectedIndex()));
489 516
//	    this.list.setVisibleRowCount(model.getSize());
490 517
	    this.sbutton.setVisible(true);
491 518
//	    this.listScrollPane.setVisible(true);
492 519
	}else{
493
	    if (this.items.getModel().getSize()<1){
520
	    if (this.items.getSize()<1){
494 521
//		this.sbutton.setVisible(false);
495 522
//		this.listScrollPane.setVisible(false);
496 523
	    }else{
497
		int index =this.items.getModel().indexOf(this.items.getModel().firstElement());
524
		int index =this.items.indexOf(this.items.firstElement());
498 525
		if (index!=this.list.getSelectedIndex())
499 526
		    this.list.setSelectedIndex(index);
500 527
	    }
501 528
	}
502 529
	refresh();
503
	if (!isValid())
504
	    this.fireValueChangedEvent();
530
	this.fireValueChangedEvent();
505 531
    }
506 532

  
533
    /* (non-Javadoc)
534
     * @see org.gvsig.tools.swing.api.dynobject.ValueChangedListener#handleValueChanged(org.gvsig.tools.swing.api.dynobject.dynfield.JDynFieldComponent)
535
     */
536
    public void handleValueChanged(JDynFieldComponent field) {
537
	Object value = field.getValue();
538
	int index = this.list.getSelectedIndex();
539
	if (index>-1){
540
	    setValue(value,index);
541
	}
542
    }
507 543

  
544

  
508 545
//    /* (non-Javadoc)
509 546
//     * @see org.gvsig.tools.swing.spi.DelegatedJFieldComponent#getDynField()
510 547
//     */
org.gvsig.tools/library/trunk/org.gvsig.tools/org.gvsig.tools.swing/org.gvsig.tools.swing.impl/src/main/java/org/gvsig/tools/swing/impl/dynobject/dynfield/JDynObjectDynFieldComponent.java
35 35

  
36 36

  
37 37
import java.awt.Component;
38
import java.util.ArrayList;
39
import java.util.HashMap;
40
import java.util.List;
38 41

  
42
import org.gvsig.tools.ToolsLocator;
43
import org.gvsig.tools.dataTypes.DataTypes;
39 44
import org.gvsig.tools.dynobject.DynClass;
40 45
import org.gvsig.tools.dynobject.DynField;
41 46
import org.gvsig.tools.dynobject.DynObject;
47
import org.gvsig.tools.dynobject.DynObjectManager;
48
import org.gvsig.tools.dynobject.exception.DynFieldValidateException;
42 49
import org.gvsig.tools.service.Manager;
43 50
import org.gvsig.tools.service.ServiceException;
44 51
import org.gvsig.tools.swing.api.ToolsSwingLocator;
......
51 58
 * @author <a href="mailto:reinhold@uji.es">cmartin</a>
52 59
 *
53 60
 */
54
public class JDynObjectDynFieldComponent implements JDynFieldComponent{
61
public class JDynObjectDynFieldComponent implements JDynFieldComponent, ValueChangedListener{
55 62
    
56 63
    private JDynObjectComponent jDynObjectComponent;
57 64
    private DynObject dynObject;
58 65
    private DynField dynField;
59 66
    private Component component;
60 67
    private ValueField dynValueField;
68
    private DynObjectManager manager;
69
    private DynClass dynClass;
70
    private List<ValueChangedListener> listeners;
61 71

  
62 72
    /**
63 73
     * @param dynField
......
68 78
    public JDynObjectDynFieldComponent(DynField dynField, ValueField dynObjectValue, DynObject dynObject) throws ServiceException {
69 79
	this.dynField = dynField;
70 80
	this.dynValueField = dynObjectValue;
71
	this.dynObject = (DynObject) dynObjectValue.getValue();
72
	this.jDynObjectComponent = ToolsSwingLocator.getDynObjectSwingManager().createJDynObjectComponent(getDynObjectValue());
81
	this.manager = ToolsLocator.getDynObjectManager();
82
	this.listeners = new ArrayList<ValueChangedListener>();
83
	this.dynClass = manager.get(getFieldName());
84
	
85
	this.jDynObjectComponent = ToolsSwingLocator.getDynObjectSwingManager().createJDynObjectComponent(getDynObject());
86
//	this.dynObject = createDynObject(dynObjectValue.getValue());
87
	
88
	this.jDynObjectComponent.handleValueChanged(this);
73 89
	this.component = (Component) this.jDynObjectComponent.getComponent();	
90
	this.jDynObjectComponent.addValueChangedListener(this);
74 91
    }
75
    
76
    /* (non-Javadoc)
77
     * @see org.gvsig.tools.swing.api.dynobject.dynfield.JDynFieldComponent#addValueChangedListener(org.gvsig.tools.swing.api.dynobject.ValueChangedListener)
92

  
93
    /*
94
     * (non-Javadoc)
95
     * 
96
     * @seeorg.gvsig.tools.swing.api.dynobject.dynfield.JDynFieldComponent#
97
     * addValueChangedListener
98
     * (org.gvsig.tools.swing.api.dynobject.ValueChangedListener)
78 99
     */
79 100
    public void addValueChangedListener(ValueChangedListener listener) {
80
	// TODO Auto-generated method stub
101
	this.listeners.add(listener);
81 102
    }
82 103

  
83

  
84 104
    /* (non-Javadoc)
85 105
     * @see org.gvsig.tools.swing.api.dynobject.dynfield.JDynFieldComponent#fireValueChangedEvent()
86 106
     */
87 107
    public void fireValueChangedEvent() {
88
	// TODO Auto-generated method stub
108
	for (ValueChangedListener listener: this.listeners)
109
	    listener.handleValueChanged(this);
89 110
    }
111
    
112
    public DynObject getDynObject(){
113
	if (this.dynObject!=null)
114
	    return this.dynObject;
115
	createDynObject(this.getFieldValue());
116
	return this.dynObject;
117
    }
118
    
119
    
120
    /**
121
     * 
122
     */
123
    private DynObject createDynObject(Object value) {
124
	this.dynObject = manager.createDynObject(this.dynClass);
125
	if (value instanceof DynObject){
126
	    setValue((DynObject) value);
127
	}
128
	return dynObject;
90 129

  
130
    }
91 131

  
132
    /**
133
     * @return
134
     */
135
    private String getFieldName() {
136
	String name ="";
137
	String suffix = "-list-List-item";
138
	
139
	if (this.dynField.isContainer())
140
	    name = this.dynField.getElementsType().getName();
141
	else 
142
//	    if (this.dynField.getType()==DataTypes.DYNOBJECT)
143
	    name = this.dynField.getName();
144
	
145
	
146
	if (name.endsWith(suffix))
147
	    return name.replace(suffix, "");
148
	return name;
149
    }
150

  
151

  
152

  
92 153
    /* (non-Javadoc)
93 154
     * @see org.gvsig.tools.swing.api.dynobject.dynfield.JComponent#getComponent()
94 155
     */
......
113 174

  
114 175

  
115 176
    private DynObject getDynObjectValue(){
116
	return this.dynObject;
177
	DynObject dynObj = this.manager.createDynObject(this.dynClass);
178
	Object value = null;
179
	for (DynField field: dynObject.getDynClass().getDeclaredDynFields()){
180
	    value = dynObject.getDynValue(field.getName());
181
	    if (value!=null){
182
		try {
183
		    field.validate(value);
184
		    dynObj.setDynValue(field.getName(), value);
185
		} catch (DynFieldValidateException e) {
186
		    // TODO Auto-generated catch block
187
		    e.printStackTrace();
188
		}
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff