Revision 202 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

View differences:

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
		}
189
	    }
190
		
191
	}
192
	return dynObj;
117 193
    }
118 194

  
119 195

  
......
130 206
     * @see org.gvsig.tools.service.Service#getManager()
131 207
     */
132 208
    public Manager getManager() {
133
	// TODO Auto-generated method stub
134
	return null;
209
	return ToolsSwingLocator.getDynObjectSwingManager();
135 210
    }
136 211

  
137 212

  
......
188 263
     * @see org.gvsig.tools.swing.spi.DelegatedJFieldComponent#setFieldValue(java.lang.Object)
189 264
     */
190 265
    public void setFieldValue(Object value) {
191
	if (value instanceof DynObject){
192
	    this.dynObject = (DynObject) value;
266
	if (value!=null){
267
	    this.dynObject = (DynObject) value;	 
193 268
	}
194 269
    }
195 270

  
......
198 273
     * @see org.gvsig.tools.swing.api.dynobject.dynfield.ValueField#setValue(java.lang.Object)
199 274
     */
200 275
    public void setValue(Object value) {
201
	if (this.dynObject!=null)
202
	    this.dynObject = (DynObject) value;	  
276
	Object dynValue = null;
277
	if (value instanceof DynObject){
278
	    boolean validated = true;
279
	    DynObject dynObj = (DynObject) value;
280
	    for (DynField field: dynObject.getDynClass().getDeclaredDynFields()){
281
		dynValue = dynObj.getDynValue(field.getName());
282
		if (value != null) {
283
		    try {
284
			field.validate(dynValue);
285
			dynObj.setDynValue(field.getName(), dynValue);
286
	
287
		    } catch (DynFieldValidateException e) {
288
			e.printStackTrace();
289
			validated = false;
290
		    }
291
		}
292
	    }
293
	    if (validated)
294
		this.jDynObjectComponent.setValue(this.dynObject);
295
	}else if (value instanceof JDynFieldComponent){
296
	    JDynFieldComponent field = (JDynFieldComponent) value;
297
	    String name = field.getDynField().getName();
298
	    if (this.dynClass.getDynField(name)!=null){
299
		  try {
300
		      	dynValue = field.getValue();
301
			field.getDynField().validate(dynValue);
302
			this.dynObject.setDynValue(name,dynValue);
303
		    } catch (DynFieldValidateException e) {
304
			e.printStackTrace();
305
		    }
306
		    
307
	    }
308
	}else
309
	    this.jDynObjectComponent.setValue(null);
310
	this.fireValueChangedEvent();
203 311
    }
204 312

  
205 313

  
......
209 317
    public DynClass getDynClass() {
210 318
	return this.dynObject.getDynClass();
211 319
    }
320

  
321
    /* (non-Javadoc)
322
     * @see org.gvsig.tools.swing.api.dynobject.ValueChangedListener#handleValueChanged(org.gvsig.tools.swing.api.dynobject.dynfield.JDynFieldComponent)
323
     */
324
    public void handleValueChanged(JDynFieldComponent field) {
325
	setValue(field);
326
    }
212 327
}

Also available in: Unified diff