Revision 46850 trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/java/org/gvsig/fmap/dal/swing/impl/featuretype/DefaultFeatureAttributePanel.java
DefaultFeatureAttributePanel.java | ||
---|---|---|
2 | 2 |
|
3 | 3 |
import java.awt.Component; |
4 | 4 |
import java.awt.event.ActionEvent; |
5 |
import java.awt.event.ActionListener; |
|
6 | 5 |
import org.gvsig.fmap.dal.swing.featuretype.FeatureTypeAttributePanel; |
7 | 6 |
import java.awt.event.ItemEvent; |
8 | 7 |
import java.net.URL; |
... | ... | |
22 | 21 |
import javax.swing.JList; |
23 | 22 |
import javax.swing.JOptionPane; |
24 | 23 |
import javax.swing.JScrollPane; |
24 |
import javax.swing.JSplitPane; |
|
25 |
import javax.swing.JTable; |
|
25 | 26 |
import javax.swing.JTextField; |
26 | 27 |
import javax.swing.ListModel; |
27 | 28 |
import javax.swing.SwingUtilities; |
... | ... | |
30 | 31 |
import javax.swing.text.JTextComponent; |
31 | 32 |
import org.apache.commons.io.FilenameUtils; |
32 | 33 |
import org.apache.commons.lang3.StringUtils; |
34 |
import org.apache.commons.lang3.tuple.ImmutablePair; |
|
35 |
import org.apache.commons.lang3.tuple.Pair; |
|
33 | 36 |
import org.cresques.cts.IProjection; |
37 |
import org.gvsig.expressionevaluator.Code; |
|
38 |
import org.gvsig.expressionevaluator.Code.Callable; |
|
39 |
import org.gvsig.expressionevaluator.Code.Constant; |
|
40 |
import org.gvsig.expressionevaluator.Code.Identifier; |
|
41 |
import org.gvsig.expressionevaluator.Codes; |
|
34 | 42 |
import org.gvsig.expressionevaluator.Expression; |
43 |
import static org.gvsig.expressionevaluator.ExpressionBuilder.FUNCTION_GETATTR; |
|
44 |
import static org.gvsig.expressionevaluator.ExpressionBuilder.OPERATOR_EQ; |
|
35 | 45 |
import org.gvsig.expressionevaluator.ExpressionUtils; |
36 | 46 |
import org.gvsig.expressionevaluator.swing.CalculatorController; |
37 | 47 |
import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingLocator; |
... | ... | |
39 | 49 |
import org.gvsig.expressionevaluator.swing.ExpressionPickerController; |
40 | 50 |
import org.gvsig.fmap.dal.DALLocator; |
41 | 51 |
import org.gvsig.fmap.dal.DataManager; |
52 |
import static org.gvsig.fmap.dal.DataManager.FUNCTION_SELECT; |
|
42 | 53 |
import org.gvsig.fmap.dal.DataStore; |
43 | 54 |
import org.gvsig.fmap.dal.DataStoreProviderFactory; |
44 | 55 |
import org.gvsig.fmap.dal.DataTypes; |
56 |
import org.gvsig.fmap.dal.SQLBuilder; |
|
45 | 57 |
import org.gvsig.fmap.dal.StoresRepository; |
46 |
import org.gvsig.fmap.dal.complements.Search; |
|
47 | 58 |
import org.gvsig.fmap.dal.exception.DataException; |
59 |
import org.gvsig.fmap.dal.expressionevaluator.DALExpressionBuilder; |
|
48 | 60 |
import org.gvsig.fmap.dal.expressionevaluator.FeatureAttributeEmulatorExpression; |
49 | 61 |
import org.gvsig.fmap.dal.expressionevaluator.FeatureSymbolTable; |
50 | 62 |
import org.gvsig.fmap.dal.feature.DataProfile; |
... | ... | |
61 | 73 |
import org.gvsig.fmap.dal.swing.DALSwingLocator; |
62 | 74 |
import org.gvsig.fmap.dal.swing.DataSwingManager; |
63 | 75 |
import org.gvsig.fmap.dal.swing.expressionevaluator.FeatureStoreElement; |
76 |
import org.gvsig.fmap.dal.swing.featuretype.AttributeDescriptorAndExpressionPickerController; |
|
77 |
import org.gvsig.fmap.dal.swing.featuretype.AttributeDescriptorPickerController; |
|
64 | 78 |
import org.gvsig.fmap.dal.swing.featuretype.FeatureTypePanel; |
65 | 79 |
import static org.gvsig.fmap.dal.swing.featuretype.FeatureTypePanel.MODE_EDIT_ALL; |
66 | 80 |
import static org.gvsig.fmap.dal.swing.featuretype.FeatureTypePanel.MODE_EDIT_ONLY_METADATA; |
... | ... | |
84 | 98 |
import org.gvsig.tools.swing.api.ListElement; |
85 | 99 |
import org.gvsig.tools.swing.api.ToolsSwingLocator; |
86 | 100 |
import org.gvsig.tools.swing.api.ToolsSwingManager; |
101 |
import org.gvsig.tools.swing.api.ToolsSwingUtils; |
|
87 | 102 |
import org.gvsig.tools.swing.api.pickercontroller.DatePickerController; |
88 | 103 |
import org.gvsig.tools.swing.api.pickercontroller.PickerController; |
89 | 104 |
import org.gvsig.tools.swing.api.threadsafedialogs.ThreadSafeDialogsManager; |
... | ... | |
91 | 106 |
import org.gvsig.tools.swing.api.windowmanager.WindowManager; |
92 | 107 |
import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2; |
93 | 108 |
import org.gvsig.tools.swing.icontheme.IconTheme; |
109 |
import org.gvsig.tools.util.LabeledValue; |
|
110 |
import org.gvsig.tools.util.LabeledValueImpl; |
|
94 | 111 |
import org.slf4j.Logger; |
95 | 112 |
import org.slf4j.LoggerFactory; |
96 | 113 |
|
... | ... | |
114 | 131 |
// ---- |
115 | 132 |
private Feature sampleFeature; |
116 | 133 |
private String previousDefaultValue; |
134 |
private ToManyController toManyController; |
|
135 |
private JSplitPane splAttrTags; |
|
117 | 136 |
|
118 |
private static class ForeingKeyController {
|
|
137 |
private static class ToOneController {
|
|
119 | 138 |
|
120 |
private final JCheckBox chkIsForeingKey; |
|
139 |
private final JTextComponent txtMyFieldName; |
|
140 |
private final JComboBox cboRelationType; |
|
121 | 141 |
private final JCheckBox chkIsClosedList; |
122 | 142 |
private final JComboBox cboTable; |
123 |
private final JComboBox cboCode;
|
|
124 |
private final JTextField txtFormula;
|
|
143 |
private final JComboBox cboForeignField;
|
|
144 |
private final JComboBox cboFormula;
|
|
125 | 145 |
private final JButton btnFormula; |
126 | 146 |
private final JButton btnFormulaHistory; |
127 | 147 |
private final JButton btnFormulaBokkmarks; |
128 |
private ExpressionPickerController pickerFormula; |
|
148 |
private AttributeDescriptorAndExpressionPickerController pickerFormula; |
|
149 |
private AttributeDescriptorPickerController pickerCode; |
|
129 | 150 |
private boolean editable; |
130 | 151 |
private ForeingKey foreingKey; |
131 | 152 |
|
132 |
public ForeingKeyController( |
|
133 |
JCheckBox chkIsForeingKey, |
|
153 |
public ToOneController( |
|
154 |
JTextComponent txtMyFieldName, |
|
155 |
JComboBox cboRelationType, |
|
134 | 156 |
JCheckBox chkIsClosedList, |
135 | 157 |
JComboBox cboTable, |
136 | 158 |
JComboBox cboCode, |
137 |
JTextField txtFormula,
|
|
159 |
JComboBox cboFormula,
|
|
138 | 160 |
JButton btnFormula, |
139 | 161 |
JButton btnFormulaBokkmarks, |
140 | 162 |
JButton btnFormulaHistory |
141 | 163 |
) { |
142 |
this.chkIsForeingKey = chkIsForeingKey; |
|
164 |
this.txtMyFieldName = txtMyFieldName; |
|
165 |
this.cboRelationType = cboRelationType; |
|
143 | 166 |
this.chkIsClosedList = chkIsClosedList; |
144 | 167 |
this.cboTable = cboTable; |
145 |
this.cboCode = cboCode;
|
|
146 |
this.txtFormula = txtFormula;
|
|
168 |
this.cboForeignField = cboCode;
|
|
169 |
this.cboFormula = cboFormula;
|
|
147 | 170 |
this.btnFormula = btnFormula; |
148 | 171 |
this.btnFormulaHistory = btnFormulaHistory; |
149 | 172 |
this.btnFormulaBokkmarks = btnFormulaBokkmarks; |
... | ... | |
152 | 175 |
|
153 | 176 |
private void initComponents() { |
154 | 177 |
DataSwingManager dataSwingManager = DALSwingLocator.getSwingManager(); |
178 |
I18nManager i18n = ToolsLocator.getI18nManager(); |
|
155 | 179 |
|
156 | 180 |
this.editable = true; |
157 |
|
|
181 |
DefaultComboBoxModel<ListElement<Integer>> relationTypeModel = new DefaultComboBoxModel<>(); |
|
182 |
// relationTypeModel.addElement(new ListElement<>(i18n.getTranslation("_None"),DynField.RELATION_TYPE_NONE)); |
|
183 |
relationTypeModel.addElement(new ListElement<>(i18n.getTranslation("_Identity_1_1"),DynField.RELATION_TYPE_IDENTITY)); |
|
184 |
relationTypeModel.addElement(new ListElement<>(i18n.getTranslation("_Collaboration_1_1"),DynField.RELATION_TYPE_COLLABORATION)); |
|
185 |
// relationTypeModel.addElement(new ListElement<>(i18n.getTranslation("_Composition_1_N"),DynField.RELATION_TYPE_COMPOSITION)); |
|
186 |
// relationTypeModel.addElement(new ListElement<>(i18n.getTranslation("_Aggregate_1_N"),DynField.RELATION_TYPE_AGGREGATE)); |
|
187 |
this.cboRelationType.setModel(relationTypeModel); |
|
188 |
|
|
158 | 189 |
DefaultComboBoxModel<String> model = new DefaultComboBoxModel(); |
159 | 190 |
StoresRepository repository = DALLocator.getDataManager().getStoresRepository(); |
160 | 191 |
List<String> tableNames = new ArrayList<>(); |
... | ... | |
165 | 196 |
for (String tableName : tableNames) { |
166 | 197 |
model.addElement(tableName); |
167 | 198 |
} |
199 |
this.cboTable.setEditable(false); |
|
168 | 200 |
this.cboTable.setModel(model); |
169 | 201 |
this.cboTable.addItemListener((ItemEvent e) -> { |
170 | 202 |
if (e.getStateChange() != ItemEvent.SELECTED) { |
171 | 203 |
return; |
172 | 204 |
} |
173 | 205 |
Thread th = new Thread(() -> { |
174 |
doPopulateComboCode();
|
|
175 |
}, "FeatureTypePanelForeingKeyPopulateComboCode");
|
|
206 |
doTableChanged();
|
|
207 |
}, "FeatureTypePanelToOneChangeTable");
|
|
176 | 208 |
th.start(); |
177 | 209 |
}); |
210 |
this.pickerCode = dataSwingManager.createAttributeDescriptorPickerController(cboForeignField); |
|
211 |
|
|
178 | 212 |
this.btnFormula.setText(""); |
179 | 213 |
this.btnFormulaBokkmarks.setText(""); |
180 | 214 |
this.btnFormulaHistory.setText(""); |
181 |
this.pickerFormula = ExpressionEvaluatorSwingLocator.getManager() |
|
182 |
.createExpressionPickerController(txtFormula, btnFormula, btnFormulaBokkmarks, btnFormulaHistory); |
|
215 |
this.pickerFormula = dataSwingManager.createExpressionPickerController( |
|
216 |
null, |
|
217 |
cboFormula, |
|
218 |
btnFormula, |
|
219 |
btnFormulaBokkmarks, |
|
220 |
btnFormulaHistory |
|
221 |
); |
|
222 |
this.pickerFormula.setAllowNull(true); |
|
183 | 223 |
} |
184 | 224 |
|
185 |
private void doPopulateComboCode() {
|
|
225 |
private void doTableChanged() {
|
|
186 | 226 |
String tableName = (String) this.cboTable.getSelectedItem(); |
187 | 227 |
if( StringUtils.isBlank(tableName) ) { |
188 | 228 |
return; |
... | ... | |
198 | 238 |
} catch (DataException ex) { |
199 | 239 |
return; |
200 | 240 |
} |
201 |
|
|
202 | 241 |
DataSwingManager dataSwingManager = DALSwingLocator.getSwingManager(); |
203 |
dataSwingManager.resetExpressionBuilder(this.pickerFormula.getConfig()); |
|
204 |
dataSwingManager.addToExpressionBuilder(this.pickerFormula.getConfig(), (FeatureStore) store, "foreigntable"); |
|
205 | 242 |
|
206 |
Search search = (Search) ToolsLocator.getComplementsManager().get( |
|
207 |
Search.COMPLEMENT_MANE, featureType |
|
208 |
); |
|
209 |
List<Search.OrderedAttribute> attributes = search.getOrderedAttributes( |
|
210 |
Search.BASIC_TYPES_FILTER, |
|
211 |
Search.LABEL_ORDER, |
|
212 |
-1 |
|
213 |
); |
|
214 |
final DefaultComboBoxModel model = new DefaultComboBoxModel(); |
|
215 |
for (Search.OrderedAttribute attribute : attributes) { |
|
216 |
model.addElement(attribute.getDescriptor().getName()); |
|
243 |
this.pickerCode.setAllowNull(true); |
|
244 |
this.pickerCode.setFeatureType(featureType); |
|
245 |
if (featureType == null) { |
|
246 |
return; |
|
217 | 247 |
} |
248 |
dataSwingManager.configureExpressionBuilder(this.pickerFormula.getConfig(), ((FeatureStore)store)); |
|
218 | 249 |
SwingUtilities.invokeLater(() -> { |
219 |
cboCode.setModel(model); |
|
220 |
cboCode.setSelectedItem(foreingKey.getCodeName()); |
|
250 |
cboForeignField.setSelectedItem(foreingKey.getCodeName()); |
|
221 | 251 |
}); |
222 | 252 |
} |
223 | 253 |
|
224 | 254 |
public void setEditable(boolean editable) { |
225 |
this.chkIsForeingKey.setEnabled(editable);
|
|
255 |
this.cboRelationType.setEnabled(editable);
|
|
226 | 256 |
this.chkIsClosedList.setEnabled(editable); |
227 | 257 |
this.cboTable.setEnabled(editable); |
228 |
this.cboCode.setEnabled(editable);
|
|
258 |
this.cboForeignField.setEnabled(editable);
|
|
229 | 259 |
this.pickerFormula.setEditable(editable); |
230 | 260 |
this.editable = editable; |
231 | 261 |
} |
... | ... | |
234 | 264 |
if( !editable ) { |
235 | 265 |
enabled = false; |
236 | 266 |
} |
237 |
this.chkIsForeingKey.setEnabled(enabled);
|
|
267 |
this.cboRelationType.setEnabled(enabled);
|
|
238 | 268 |
this.chkIsClosedList.setEnabled(enabled); |
239 | 269 |
this.cboTable.setEnabled(enabled); |
240 |
this.cboCode.setEnabled(enabled);
|
|
241 |
this.pickerFormula.setEditable(editable);
|
|
270 |
this.cboForeignField.setEnabled(enabled);
|
|
271 |
this.pickerFormula.setEditable(enabled);
|
|
242 | 272 |
} |
243 | 273 |
|
244 | 274 |
public void clean() { |
245 |
this.chkIsForeingKey.setSelected(false); |
|
275 |
this.txtMyFieldName.setText(""); |
|
276 |
this.cboRelationType.setSelectedIndex(-1); |
|
246 | 277 |
this.chkIsClosedList.setSelected(false); |
247 | 278 |
this.cboTable.setSelectedItem(""); |
248 |
this.cboCode.setSelectedItem("");
|
|
279 |
this.cboForeignField.setSelectedItem("");
|
|
249 | 280 |
this.pickerFormula.set(null); |
250 | 281 |
} |
251 | 282 |
|
252 |
public void put(ForeingKey foreingKey) { |
|
283 |
public void put(FeatureAttributeDescriptor descriptor) { |
|
284 |
if( descriptor == null ) { |
|
285 |
this.clean(); |
|
286 |
return; |
|
287 |
} |
|
288 |
ForeingKey foreingKey = descriptor.getForeingKey(); |
|
253 | 289 |
if( foreingKey==null ) { |
254 | 290 |
this.clean(); |
255 | 291 |
return; |
256 | 292 |
} |
293 |
StoresRepository repository = DALLocator.getDataManager().getStoresRepository(); |
|
294 |
this.pickerFormula.setFeatureType(repository.getFeatureType(foreingKey.getTableName())); |
|
257 | 295 |
this.foreingKey = foreingKey; |
258 |
this.chkIsForeingKey.setSelected(foreingKey.isForeingKey());
|
|
296 |
ListElement.setSelected(this.cboRelationType,descriptor.getRelationType());
|
|
259 | 297 |
this.chkIsClosedList.setSelected(foreingKey.isClosedList()); |
260 |
this.cboTable.setSelectedItem(foreingKey.getTableName()); |
|
261 |
this.cboCode.setSelectedItem(foreingKey.getCodeName()); |
|
298 |
this.cboTable.setSelectedItem(foreingKey.getTableName()); |
|
299 |
doTableChanged(); |
|
300 |
this.pickerCode.set(foreingKey.getCodeName()); |
|
262 | 301 |
this.pickerFormula.set(foreingKey.getLabelExpression(null)); |
302 |
this.txtMyFieldName.setText(descriptor.getName()); |
|
263 | 303 |
} |
264 | 304 |
|
265 |
public void fetch(EditableForeingKey foreingKey) { |
|
305 |
public void fetch(EditableFeatureAttributeDescriptor descriptor) { |
|
306 |
if( descriptor == null ) { |
|
307 |
this.clean(); |
|
308 |
return; |
|
309 |
} |
|
310 |
EditableForeingKey foreingKey = descriptor.getForeingKey(); |
|
266 | 311 |
if( foreingKey==null ) { |
267 | 312 |
return; |
268 | 313 |
} |
269 |
foreingKey.setForeingKey(this.chkIsForeingKey.isSelected()); |
|
314 |
// foreingKey.setForeingKey(this.chkIsForeingKey.isSelected());
|
|
270 | 315 |
foreingKey.setClosedList(this.chkIsClosedList.isSelected()); |
271 | 316 |
foreingKey.setTableName((String) this.cboTable.getSelectedItem()); |
272 |
foreingKey.setCodeName((String) this.cboCode.getSelectedItem());
|
|
317 |
foreingKey.setCodeName(this.pickerCode.getName());
|
|
273 | 318 |
Expression exp = this.pickerFormula.get(); |
274 | 319 |
if( ExpressionUtils.isPhraseEmpty(exp) ) { |
275 | 320 |
foreingKey.setLabelFormula(""); |
... | ... | |
277 | 322 |
foreingKey.setLabelFormula(exp.getPhrase()); |
278 | 323 |
} |
279 | 324 |
} |
325 |
|
|
326 |
public int getRelationType() { |
|
327 |
Object n = this.cboRelationType.getSelectedItem(); |
|
328 |
if( n == null ) { |
|
329 |
return DynField.RELATION_TYPE_NONE; |
|
330 |
} |
|
331 |
return ((LabeledValue<Integer>)n).getValue(); |
|
332 |
} |
|
280 | 333 |
} |
281 | 334 |
|
335 |
private static class ToManyController { |
|
282 | 336 |
|
337 |
private final JComboBox cboRelationType; |
|
338 |
private final JComboBox cboMyField; |
|
339 |
private final JComboBox cboTable; |
|
340 |
private final JComboBox cboForeignField; |
|
341 |
private final JTextField txtExpression; |
|
342 |
private final JButton btnExpression; |
|
343 |
private final JButton btnExpressionHistory; |
|
344 |
private final JButton btnExpressionBokkmarks; |
|
345 |
private ExpressionPickerController pickerExpression; |
|
346 |
private AttributeDescriptorPickerController pickerForeignField; |
|
347 |
private AttributeDescriptorPickerController pickerMyField; |
|
348 |
private boolean editable; |
|
349 |
private boolean disableEvents; |
|
350 |
|
|
351 |
public ToManyController( |
|
352 |
JComboBox cboRelationType, |
|
353 |
JComboBox cboMyField, |
|
354 |
JComboBox cboTable, |
|
355 |
JComboBox cboForeignField, |
|
356 |
JTextField txtExpression, |
|
357 |
JButton btnExpression, |
|
358 |
JButton btnExpressionBokkmarks, |
|
359 |
JButton btnExpressionHistory |
|
360 |
) { |
|
361 |
this.disableEvents = false; |
|
362 |
this.cboRelationType = cboRelationType; |
|
363 |
this.cboMyField = cboMyField; |
|
364 |
this.cboTable = cboTable; |
|
365 |
this.cboForeignField = cboForeignField; |
|
366 |
this.txtExpression = txtExpression; |
|
367 |
this.btnExpression = btnExpression; |
|
368 |
this.btnExpressionHistory = btnExpressionHistory; |
|
369 |
this.btnExpressionBokkmarks = btnExpressionBokkmarks; |
|
370 |
this.initComponents(); |
|
371 |
} |
|
372 |
|
|
373 |
private void initComponents() { |
|
374 |
DataSwingManager dataSwingManager = DALSwingLocator.getSwingManager(); |
|
375 |
I18nManager i18n = ToolsLocator.getI18nManager(); |
|
376 |
|
|
377 |
this.editable = true; |
|
378 |
DefaultComboBoxModel<LabeledValueImpl<Integer>> relationTypeModel = new DefaultComboBoxModel<>(); |
|
379 |
// relationTypeModel.addElement(new LabeledValueImpl<>(i18n.getTranslation("_None"),DynField.RELATION_TYPE_NONE)); |
|
380 |
// relationTypeModel.addElement(new LabeledValueImpl<>(i18n.getTranslation("_Identity_1_1"),DynField.RELATION_TYPE_IDENTITY)); |
|
381 |
// relationTypeModel.addElement(new LabeledValueImpl<>(i18n.getTranslation("_Collaboration_1_1"),DynField.RELATION_TYPE_COLLABORATION)); |
|
382 |
relationTypeModel.addElement(new LabeledValueImpl<>(i18n.getTranslation("_Composition_1_N"),DynField.RELATION_TYPE_COMPOSITION)); |
|
383 |
relationTypeModel.addElement(new LabeledValueImpl<>(i18n.getTranslation("_Aggregate_1_N"),DynField.RELATION_TYPE_AGGREGATE)); |
|
384 |
this.cboRelationType.setModel(relationTypeModel); |
|
385 |
|
|
386 |
this.pickerMyField = dataSwingManager.createAttributeDescriptorPickerController(cboMyField); |
|
387 |
this.pickerMyField.setAllowNull(true); |
|
388 |
this.pickerMyField.addChangeListener((ChangeEvent e) -> { |
|
389 |
if( disableEvents ) { |
|
390 |
return; |
|
391 |
} |
|
392 |
doUpdateExpression(); |
|
393 |
}); |
|
394 |
DefaultComboBoxModel<String> model = new DefaultComboBoxModel(); |
|
395 |
StoresRepository repository = DALLocator.getDataManager().getStoresRepository(); |
|
396 |
List<String> tableNames = new ArrayList<>(); |
|
397 |
for (String tableName : repository.keySet()) { |
|
398 |
tableNames.add(tableName); |
|
399 |
} |
|
400 |
Collections.sort(tableNames); |
|
401 |
for (String tableName : tableNames) { |
|
402 |
model.addElement(tableName); |
|
403 |
} |
|
404 |
this.cboTable.setEditable(false); |
|
405 |
this.cboTable.setModel(model); |
|
406 |
this.cboTable.addItemListener((ItemEvent e) -> { |
|
407 |
if( disableEvents ) { |
|
408 |
return; |
|
409 |
} |
|
410 |
if (e.getStateChange() != ItemEvent.SELECTED) { |
|
411 |
return; |
|
412 |
} |
|
413 |
Thread th = new Thread(() -> |
|
414 |
{ doTableChanged(); }, |
|
415 |
"FeatureTypePanelToManyTableChanged" |
|
416 |
); |
|
417 |
th.start(); |
|
418 |
}); |
|
419 |
this.pickerForeignField = dataSwingManager.createAttributeDescriptorPickerController(cboForeignField); |
|
420 |
this.pickerForeignField.setAllowNull(true); |
|
421 |
this.pickerForeignField.addChangeListener((ChangeEvent e) -> { |
|
422 |
if( disableEvents ) { |
|
423 |
return; |
|
424 |
} |
|
425 |
doUpdateExpression(); |
|
426 |
}); |
|
427 |
|
|
428 |
this.pickerExpression = ExpressionEvaluatorSwingLocator.getManager().createExpressionPickerController( |
|
429 |
txtExpression, |
|
430 |
btnExpression, |
|
431 |
btnExpressionBokkmarks, |
|
432 |
btnExpressionHistory |
|
433 |
); |
|
434 |
} |
|
435 |
|
|
436 |
private void doTableChanged() { |
|
437 |
String tableName = (String) this.cboTable.getSelectedItem(); |
|
438 |
if( StringUtils.isBlank(tableName) ) { |
|
439 |
return; |
|
440 |
} |
|
441 |
StoresRepository repository = DALLocator.getDataManager().getStoresRepository(); |
|
442 |
DataStore store = repository.getStore(tableName); |
|
443 |
if( !(store instanceof FeatureStore) ) { |
|
444 |
return; |
|
445 |
} |
|
446 |
FeatureStore featureStore = (FeatureStore) store; |
|
447 |
FeatureType featureType; |
|
448 |
try { |
|
449 |
featureType = featureStore.getDefaultFeatureType(); |
|
450 |
} catch (DataException ex) { |
|
451 |
return; |
|
452 |
} |
|
453 |
DataSwingManager dataSwingManager = DALSwingLocator.getSwingManager(); |
|
454 |
|
|
455 |
this.pickerForeignField.setFeatureType(featureType); |
|
456 |
if (featureType == null) { |
|
457 |
return; |
|
458 |
} |
|
459 |
dataSwingManager.configureExpressionBuilder(this.pickerExpression.getConfig(), featureStore); |
|
460 |
} |
|
461 |
|
|
462 |
private void doUpdateExpression() { |
|
463 |
String myField = this.pickerMyField.getName(); |
|
464 |
if( StringUtils.isBlank(myField) ) { |
|
465 |
this.pickerExpression.set(null); |
|
466 |
return; |
|
467 |
} |
|
468 |
String foreignField = this.pickerForeignField.getName(); |
|
469 |
if( StringUtils.isBlank(foreignField) ) { |
|
470 |
this.pickerExpression.set(null); |
|
471 |
return; |
|
472 |
} |
|
473 |
String tableName = this.getTableName(); |
|
474 |
if( StringUtils.isBlank(tableName) ) { |
|
475 |
this.pickerExpression.set(null); |
|
476 |
return; |
|
477 |
} |
|
478 |
DataManager dataManager = DALLocator.getDataManager(); |
|
479 |
DALExpressionBuilder builder = dataManager.createDALExpressionBuilder(); |
|
480 |
SQLBuilder.SelectBuilder select = builder.select(); |
|
481 |
select.from().table().name(tableName); |
|
482 |
select.column().all(); |
|
483 |
select.where().set(builder.expression().eq( |
|
484 |
builder.expression().column(myField), |
|
485 |
builder.expression().getattr(tableName, foreignField) |
|
486 |
) |
|
487 |
); |
|
488 |
this.pickerExpression.set(ExpressionUtils.createExpression(select.toString())); |
|
489 |
} |
|
490 |
|
|
491 |
private String[] getFieldsAndTable(Expression expression) { |
|
492 |
if (ExpressionUtils.isEmpty(expression)) { |
|
493 |
return null; |
|
494 |
} |
|
495 |
try { |
|
496 |
Code code = expression.getCode(); |
|
497 |
if( !StringUtils.equalsIgnoreCase(Callable.name(code),FUNCTION_SELECT) ) { |
|
498 |
return null; |
|
499 |
} |
|
500 |
Code.Callable callable = (Code.Callable) code; |
|
501 |
String tableName; |
|
502 |
Codes args = callable.parameters(); |
|
503 |
Code storeName_code = (Code) args.get(1); |
|
504 |
if (storeName_code instanceof Code.Identifier) { |
|
505 |
tableName = ((Code.Identifier) storeName_code).name(); |
|
506 |
} else if (storeName_code instanceof Code.Constant) { |
|
507 |
Code.Constant storeName_const = (Code.Constant) storeName_code; |
|
508 |
if (storeName_const.value() instanceof CharSequence) { |
|
509 |
tableName = storeName_const.value().toString(); |
|
510 |
} else { |
|
511 |
return null; |
|
512 |
} |
|
513 |
} else { |
|
514 |
return null; |
|
515 |
} |
|
516 |
if (StringUtils.isBlank(tableName)) { |
|
517 |
return null; |
|
518 |
} |
|
519 |
String foreignColumnName = null; |
|
520 |
String myColumnName = null; |
|
521 |
Code where = callable.parameters().get(2); // WHERE |
|
522 |
Code myFieldCode = getCode( |
|
523 |
where, |
|
524 |
new ImmutablePair<>(OPERATOR_EQ, 0) |
|
525 |
); |
|
526 |
if( myFieldCode != null ) { |
|
527 |
myColumnName = Objects.toString(Identifier.name(myFieldCode), null); |
|
528 |
} |
|
529 |
Code foreingFieldCode = getCode( |
|
530 |
where, |
|
531 |
new ImmutablePair<>(OPERATOR_EQ, 1), |
|
532 |
new ImmutablePair<>(FUNCTION_GETATTR, 1) |
|
533 |
); |
|
534 |
if( foreingFieldCode != null ) { |
|
535 |
foreignColumnName = Objects.toString(Constant.value(foreingFieldCode), null); |
|
536 |
} |
|
537 |
return new String[] { myColumnName, tableName,foreignColumnName }; |
|
538 |
} catch(Throwable t) { |
|
539 |
LOGGER.warn("Can't get table and code from expression '"+expression.getPhrase()+"' in toMany controller",t); |
|
540 |
return null; |
|
541 |
} |
|
542 |
} |
|
543 |
|
|
544 |
private Code getCode(Code code, Pair<String,Integer>... args) { |
|
545 |
for (Pair<String, Integer> arg : args) { |
|
546 |
if( !StringUtils.equalsIgnoreCase(Callable.name(code),arg.getLeft()) ) { |
|
547 |
return null; |
|
548 |
} |
|
549 |
code = Callable.parameters(code).get(arg.getRight()); |
|
550 |
} |
|
551 |
return code; |
|
552 |
} |
|
553 |
|
|
554 |
private String getTableName() { |
|
555 |
String s = (String) this.cboTable.getSelectedItem(); |
|
556 |
if( StringUtils.isBlank(s) ) { |
|
557 |
return null; |
|
558 |
} |
|
559 |
return s; |
|
560 |
} |
|
561 |
|
|
562 |
public void setEditable(boolean editable) { |
|
563 |
this.cboRelationType.setEnabled(editable); |
|
564 |
this.pickerMyField.setEditable(editable); |
|
565 |
this.cboTable.setEnabled(editable); |
|
566 |
this.pickerForeignField.setEditable(editable); |
|
567 |
this.pickerExpression.setEditable(editable); |
|
568 |
this.editable = editable; |
|
569 |
} |
|
570 |
|
|
571 |
public void setEnabled(boolean enabled) { |
|
572 |
if( !editable ) { |
|
573 |
enabled = false; |
|
574 |
} |
|
575 |
this.cboRelationType.setEnabled(enabled); |
|
576 |
this.pickerMyField.setEnabled(enabled); |
|
577 |
this.cboTable.setEnabled(enabled); |
|
578 |
this.pickerForeignField.setEnabled(enabled); |
|
579 |
this.pickerExpression.setEditable(enabled); |
|
580 |
} |
|
581 |
|
|
582 |
public void clean() { |
|
583 |
this.cboRelationType.setSelectedIndex(-1); |
|
584 |
this.pickerMyField.clean(); |
|
585 |
this.cboTable.setSelectedIndex(-1); |
|
586 |
this.pickerForeignField.clean(); |
|
587 |
this.pickerExpression.set(null); |
|
588 |
} |
|
589 |
|
|
590 |
public void put(FeatureAttributeDescriptor descriptor) { |
|
591 |
if (descriptor == null) { |
|
592 |
this.clean(); |
|
593 |
return; |
|
594 |
} |
|
595 |
boolean prevDisableEvents = this.disableEvents; |
|
596 |
try { |
|
597 |
this.disableEvents = true; |
|
598 |
this.pickerMyField.setFeatureType(descriptor.getFeatureType()); |
|
599 |
ListElement.setSelected(this.cboRelationType, descriptor.getRelationType()); |
|
600 |
FeatureAttributeEmulator attrEmulator = descriptor.getFeatureAttributeEmulator(); |
|
601 |
if (attrEmulator instanceof FeatureAttributeEmulatorExpression) { |
|
602 |
Expression expression = ((FeatureAttributeEmulatorExpression) attrEmulator).getExpression(); |
|
603 |
String[] fieldsAndTable = this.getFieldsAndTable(expression); |
|
604 |
if (fieldsAndTable == null) { |
|
605 |
this.cboTable.setSelectedIndex(-1); |
|
606 |
this.pickerForeignField.clean(); |
|
607 |
return; |
|
608 |
} |
|
609 |
this.pickerMyField.set(fieldsAndTable[0]); |
|
610 |
this.cboTable.setSelectedItem(fieldsAndTable[1]); |
|
611 |
doTableChanged(); |
|
612 |
this.pickerForeignField.set(fieldsAndTable[2]); |
|
613 |
this.pickerExpression.set(expression); |
|
614 |
} |
|
615 |
} catch (Throwable t) { |
|
616 |
LOGGER.warn("Can't set attribute descriptor in toMany controller",t); |
|
617 |
} finally { |
|
618 |
this.disableEvents = prevDisableEvents; |
|
619 |
} |
|
620 |
} |
|
621 |
|
|
622 |
public void fetch(EditableFeatureAttributeDescriptor descriptor) { |
|
623 |
if( descriptor == null ) { |
|
624 |
this.clean(); |
|
625 |
return; |
|
626 |
} |
|
627 |
Expression exp = this.pickerExpression.get(); |
|
628 |
if( ExpressionUtils.isPhraseEmpty(exp) ) { |
|
629 |
descriptor.setFeatureAttributeEmulator((Expression)null); |
|
630 |
} else { |
|
631 |
descriptor.setFeatureAttributeEmulator(exp); |
|
632 |
} |
|
633 |
} |
|
634 |
|
|
635 |
public int getRelationType() { |
|
636 |
Object n = this.cboRelationType.getSelectedItem(); |
|
637 |
if( n == null ) { |
|
638 |
return DynField.RELATION_TYPE_NONE; |
|
639 |
} |
|
640 |
return ((LabeledValue<Integer>)n).getValue(); |
|
641 |
} |
|
642 |
} |
|
643 |
|
|
644 |
|
|
283 | 645 |
private static class AvailableValuesController { |
284 | 646 |
|
285 | 647 |
private final JList lstValues; |
... | ... | |
439 | 801 |
private CalculatorController<Integer> pickerOrder; |
440 | 802 |
private AvailableValuesController availableValuesController; |
441 | 803 |
private AggregateController<Tag> tagsController; |
442 |
private ForeingKeyController foreingKeyController;
|
|
804 |
private ToOneController toOneController;
|
|
443 | 805 |
private ExpressionPickerController pickerValuesFilter; |
444 | 806 |
|
445 | 807 |
private int mode; |
... | ... | |
494 | 856 |
final I18nManager i18n = ToolsLocator.getI18nManager(); |
495 | 857 |
final DataTypesManager dataTypeManager = ToolsLocator.getDataTypesManager(); |
496 | 858 |
|
859 |
// ToolsSwingUtils.ensureMaxRows(this.tblAttrTagsItems,19); |
|
860 |
ToolsSwingUtils.ensureMaxRows(this.gridAttrTagsTable, 10); |
|
861 |
this.splAttrTags = ToolsSwingUtils.createVerticalSplit( |
|
862 |
this.grdAttrTags, |
|
863 |
this.gridAttrTagsTable, false, |
|
864 |
this.gridAttrTagsItem, true |
|
865 |
); |
|
866 |
|
|
497 | 867 |
DefaultComboBoxModel<ListElement<Integer>> modelTypes = new DefaultComboBoxModel<>(); |
498 | 868 |
for (ListElement<Integer> element : fieldTypes) { |
499 | 869 |
modelTypes.addElement(element); |
... | ... | |
568 | 938 |
swingManager.translate(this.lblAvailableValues); |
569 | 939 |
swingManager.translate(this.lblAvailableValuesLabel); |
570 | 940 |
swingManager.translate(this.lblAvailableValuesValue); |
571 |
swingManager.translate(this.lblRelationType); |
|
572 | 941 |
swingManager.translate(this.btnAvailableValuesAdd); |
573 | 942 |
swingManager.translate(this.btnAvailableValuesUpdate); |
574 | 943 |
swingManager.translate(this.btnAvailableValuesRemove); |
... | ... | |
578 | 947 |
swingManager.translate(this.lblAttrTagsItemNotes); |
579 | 948 |
swingManager.translate(this.lblValuesFilter); |
580 | 949 |
|
581 |
swingManager.translate(this.lblForeingKeyCodeName); |
|
582 |
swingManager.translate(this.lblForeingKeyLabelFormula); |
|
583 |
swingManager.translate(this.lblForeingKeyTableName); |
|
584 |
swingManager.translate(this.lblIsClosedList); |
|
585 |
swingManager.translate(this.chkIsForeingKey); |
|
950 |
swingManager.translate(this.lblRelationRepository); |
|
586 | 951 |
|
952 |
swingManager.translate(this.lblRelationNone); |
|
953 |
swingManager.translate(this.lblRelationToOne); |
|
954 |
swingManager.translate(this.lblRelationToMany); |
|
955 |
|
|
956 |
swingManager.translate(this.lblRelationToOneType); |
|
957 |
swingManager.translate(this.lblRelationToOneCondition); |
|
958 |
swingManager.translate(this.lblRelationToOneLabelFormula); |
|
959 |
swingManager.translate(this.lblRelationToOneIsClosedList); |
|
960 |
|
|
961 |
swingManager.translate(this.lblRelationToManyType); |
|
962 |
swingManager.translate(this.lblRelationToManyExpression); |
|
963 |
swingManager.translate(this.lblRelationToManyCondition); |
|
964 |
|
|
965 |
// swingManager.translate(this.chkIsForeingKey); |
|
966 |
|
|
587 | 967 |
swingManager.translate(this.txtDisplaySize); |
588 | 968 |
swingManager.translate(this.txtPrecision); |
589 | 969 |
swingManager.translate(this.txtScale); |
... | ... | |
619 | 999 |
swingManager.setDefaultPopupMenu(this.cboGeometryType); |
620 | 1000 |
swingManager.setDefaultPopupMenu(this.cboDataProfile); |
621 | 1001 |
|
622 |
swingManager.setDefaultPopupMenu(this.cboForeingKeyCodeName);
|
|
623 |
swingManager.setDefaultPopupMenu(this.cboForeingKeyTableName);
|
|
1002 |
// swingManager.setDefaultPopupMenu(this.cboRelationToOneCodeName);
|
|
1003 |
// swingManager.setDefaultPopupMenu(this.cboRelationToOneTableName);
|
|
624 | 1004 |
|
1005 |
// swingManager.setDefaultPopupMenu(this.cboRelationToManyForeignFieldName); |
|
1006 |
// swingManager.setDefaultPopupMenu(this.cboRelationToManyTableName); |
|
1007 |
|
|
625 | 1008 |
swingManager.setDefaultPopupMenu(this.cboGroup); |
626 | 1009 |
swingManager.setDefaultPopupMenu(this.txtOrder); |
627 | 1010 |
swingManager.setDefaultPopupMenu(this.txtLabel); |
... | ... | |
631 | 1014 |
swingManager.setDefaultPopupMenu(this.txtAvailableValuesLabel); |
632 | 1015 |
swingManager.setDefaultPopupMenu(this.txtAvailableValuesValue); |
633 | 1016 |
|
634 |
this.foreingKeyController = new ForeingKeyController( |
|
635 |
chkIsForeingKey, |
|
636 |
chkIsClosedList, |
|
637 |
cboForeingKeyTableName, |
|
638 |
cboForeingKeyCodeName, |
|
639 |
txtForeingKeyFormula, |
|
640 |
btnForeingKeyFormula, |
|
641 |
btnForeingKeyFormulaBookmarks, |
|
642 |
btnForeingKeyFormulaHistory |
|
1017 |
this.toOneController = new ToOneController( |
|
1018 |
txtRelationToOneMyFieldName, |
|
1019 |
cboRelationToOneType, |
|
1020 |
chkRelationToOneIsClosedList, |
|
1021 |
cboRelationToOneTableName, |
|
1022 |
cboRelationToOneCodeName, |
|
1023 |
cboRelationToOneFormula, |
|
1024 |
btnRelationToOneFormula, |
|
1025 |
btnRelationToOneFormulaBookmarks, |
|
1026 |
btnRelationToOneFormulaHistory |
|
643 | 1027 |
); |
1028 |
this.toManyController = new ToManyController( |
|
1029 |
cboRelationToManyType, |
|
1030 |
cboRelationToManyMyFieldName, |
|
1031 |
cboRelationToManyTableName, |
|
1032 |
cboRelationToManyForeignFieldName, |
|
1033 |
|
|
1034 |
txtRelationToManyExpression, |
|
1035 |
|
|
1036 |
btnRelationToManyExpression, |
|
1037 |
btnRelationToManyExpressionHistory, |
|
1038 |
btnRelationToManyExpressionBookmarks |
|
1039 |
); |
|
644 | 1040 |
this.pickerIntervalEnd = swingManager.createDatePickerController( |
645 | 1041 |
this.txtIntervalEnd, |
646 | 1042 |
this.btnIntervalEnd |
... | ... | |
740 | 1136 |
doDataTypeSelection(); |
741 | 1137 |
}); |
742 | 1138 |
|
743 |
DefaultComboBoxModel<ListElement<Integer>> relationTypeModel = new DefaultComboBoxModel<>(); |
|
744 |
relationTypeModel.addElement(new ListElement<>(i18n.getTranslation("_None"),DynField.RELATION_TYPE_NONE)); |
|
745 |
relationTypeModel.addElement(new ListElement<>(i18n.getTranslation("_Identity_1_1"),DynField.RELATION_TYPE_IDENTITY)); |
|
746 |
relationTypeModel.addElement(new ListElement<>(i18n.getTranslation("_Collaboration_1_1"),DynField.RELATION_TYPE_COLLABORATION)); |
|
747 |
relationTypeModel.addElement(new ListElement<>(i18n.getTranslation("_Composition_1_N"),DynField.RELATION_TYPE_COMPOSITION)); |
|
748 |
relationTypeModel.addElement(new ListElement<>(i18n.getTranslation("_Aggregate_1_N"),DynField.RELATION_TYPE_AGGREGATE)); |
|
749 |
this.cboRelationType.setModel(relationTypeModel); |
|
750 |
|
|
751 |
|
|
752 | 1139 |
this.pickerValuesFilter = evaluatorSwingManager.createExpressionPickerController( |
753 | 1140 |
txtValuesFilter, btnValuesFilter, btnValuesFilterBookmarks, btnValuesFilterHistory |
754 | 1141 |
); |
... | ... | |
758 | 1145 |
doIsAutomaticChanged(); |
759 | 1146 |
}); |
760 | 1147 |
|
1148 |
this.rdbRelationNone.addItemListener((ItemEvent e) -> { doChangeRelationType(); }); |
|
1149 |
this.rdbRelationToOne.addItemListener((ItemEvent e) -> { doChangeRelationType(); }); |
|
1150 |
this.rdbRelationToMany.addItemListener((ItemEvent e) -> { doChangeRelationType(); }); |
|
1151 |
|
|
1152 |
SwingUtilities.invokeLater( () -> { |
|
1153 |
splAttrTags.setDividerLocation(0.4); |
|
1154 |
} |
|
1155 |
); |
|
1156 |
|
|
761 | 1157 |
} |
1158 |
|
|
1159 |
private int getRelationType() { |
|
1160 |
if( this.rdbRelationNone.isSelected() ) { |
|
1161 |
return DynField.RELATION_TYPE_NONE; |
|
1162 |
} |
|
1163 |
if( this.rdbRelationToOne.isSelected() ) { |
|
1164 |
return this.toOneController.getRelationType(); |
|
1165 |
} |
|
1166 |
if( this.rdbRelationToMany.isSelected() ) { |
|
1167 |
return this.toManyController.getRelationType(); |
|
1168 |
} |
|
1169 |
return DynField.RELATION_TYPE_NONE; |
|
1170 |
} |
|
762 | 1171 |
|
1172 |
private void doChangeRelationType() { |
|
1173 |
boolean enabled; |
|
1174 |
switch(this.getMode() ) { |
|
1175 |
case MODE_EDIT_ONLY_METADATA: |
|
1176 |
case MODE_EDIT_ALL: |
|
1177 |
enabled = true; |
|
1178 |
break; |
|
1179 |
case MODE_SHOW_ONLY: |
|
1180 |
default: |
|
1181 |
enabled = false; |
|
1182 |
break; |
|
1183 |
} |
|
1184 |
|
|
1185 |
if( this.rdbRelationNone.isSelected() ) { |
|
1186 |
this.pickerVirtualFieldGetter.setEnabled(enabled); |
|
1187 |
this.toOneController.setEnabled(false); |
|
1188 |
this.toManyController.setEnabled(false); |
|
1189 |
this.toManyController.setEnabled(false); |
|
1190 |
} else if( this.rdbRelationToOne.isSelected() ) { |
|
1191 |
this.pickerVirtualFieldGetter.setEnabled(enabled); |
|
1192 |
this.toManyController.setEnabled(false); |
|
1193 |
if( this.isVirtualField() ) { |
|
1194 |
this.rdbRelationNone.setSelected(true); |
|
1195 |
} else { |
|
1196 |
this.toOneController.setEnabled(enabled); |
|
1197 |
} |
|
1198 |
} else if( this.rdbRelationToMany.isSelected() ) { |
|
1199 |
if( !this.isVirtualField() || this.getDataType().getType()!=DataTypes.LIST ) { |
|
1200 |
this.rdbRelationNone.setSelected(true); |
|
1201 |
} else { |
|
1202 |
this.pickerVirtualFieldGetter.setEnabled(false); |
|
1203 |
this.toOneController.setEnabled(false); |
|
1204 |
this.toManyController.setEnabled(enabled); |
|
1205 |
} |
|
1206 |
} |
|
1207 |
} |
|
1208 |
|
|
763 | 1209 |
@Override |
764 | 1210 |
public JComponent asJComponent() { |
765 | 1211 |
return this; |
... | ... | |
924 | 1370 |
|
925 | 1371 |
descriptor.setDefaultFormat(this.txtDefaultFormat.getText()); |
926 | 1372 |
descriptor.setDataProfileName((String) ListElement.getSelected(this.cboDataProfile)); |
927 |
descriptor.setRelationType((int) ListElement.getSelected(this.cboRelationType)); |
|
928 | 1373 |
switch (descriptor.getType()) { |
929 | 1374 |
case DataTypes.GEOMETRY: |
930 | 1375 |
GeometryManager geomManager = GeometryLocator.getGeometryManager(); |
... | ... | |
1048 | 1493 |
descriptor.setAvailableValues(this.availableValuesController.get()); |
1049 | 1494 |
|
1050 | 1495 |
this.tagsController.getModel().fetch(descriptor.getTags()); |
1051 |
this.foreingKeyController.fetch(descriptor.getForeingKey()); |
|
1496 |
|
|
1497 |
this.toOneController.fetch(descriptor); |
|
1498 |
this.toManyController.fetch(descriptor); |
|
1499 |
if( rdbRelationToOne.isSelected() ) { |
|
1500 |
descriptor.setRelationType(this.toOneController.getRelationType()); |
|
1501 |
descriptor.getForeingKey().setForeingKey(true); |
|
1502 |
} else if( rdbRelationToMany.isSelected() ) { |
|
1503 |
descriptor.setRelationType(this.toManyController.getRelationType()); |
|
1504 |
descriptor.getForeingKey().setForeingKey(false); |
|
1505 |
} else if( rdbRelationNone.isSelected() ) { |
|
1506 |
descriptor.setRelationType(DynField.RELATION_TYPE_NONE); |
|
1507 |
descriptor.getForeingKey().setForeingKey(false); |
|
1508 |
} |
|
1509 |
|
|
1510 |
|
|
1052 | 1511 |
return descriptor; |
1053 | 1512 |
} |
1054 | 1513 |
|
... | ... | |
1091 | 1550 |
this.txtMaxValue.setText(""); |
1092 | 1551 |
this.availableValuesController.clean(); |
1093 | 1552 |
this.tagsController.clean(); |
1094 |
this.foreingKeyController.clean();
|
|
1553 |
this.toOneController.clean();
|
|
1095 | 1554 |
} |
1096 | 1555 |
|
1097 | 1556 |
@Override |
... | ... | |
1195 | 1654 |
ListElement.setSelected(cboFieldType, dataType.getType()); |
1196 | 1655 |
} |
1197 | 1656 |
|
1198 |
ListElement.setSelected(cboRelationType, descriptor.getRelationType()); |
|
1199 |
|
|
1200 | 1657 |
String profile = descriptor.getDataProfileName(); |
1201 | 1658 |
if (StringUtils.isBlank(profile)) { |
1202 | 1659 |
this.cboDataProfile.setSelectedIndex(-1); |
... | ... | |
1227 | 1684 |
} |
1228 | 1685 |
this.tagsController.setModel(new TagsModel(descriptor.getTags())); |
1229 | 1686 |
|
1230 |
this.foreingKeyController.put(descriptor.getForeingKey()); |
|
1687 |
this.toOneController.put(descriptor); |
|
1688 |
this.toManyController.put(descriptor); |
|
1689 |
switch(descriptor.getRelationType()) { |
|
1690 |
case DynField.RELATION_TYPE_NONE: |
|
1691 |
this.rdbRelationNone.setSelected(true); |
|
1692 |
this.rdbRelationToOne.setSelected(false); |
|
1693 |
this.rdbRelationToMany.setSelected(false); |
|
1694 |
this.toOneController.clean(); |
|
1695 |
this.toManyController.clean(); |
|
1696 |
break; |
|
1697 |
case DynField.RELATION_TYPE_IDENTITY: |
|
1698 |
case DynField.RELATION_TYPE_COLLABORATION: |
|
1699 |
this.rdbRelationNone.setSelected(false); |
|
1700 |
this.rdbRelationToOne.setSelected(true); |
|
1701 |
this.rdbRelationToMany.setSelected(false); |
|
1702 |
this.toManyController.clean(); |
|
1703 |
break; |
|
1704 |
case DynField.RELATION_TYPE_COMPOSITION: |
|
1705 |
case DynField.RELATION_TYPE_AGGREGATE: |
|
1706 |
this.rdbRelationNone.setSelected(false); |
|
1707 |
this.rdbRelationToOne.setSelected(false); |
|
1708 |
this.rdbRelationToMany.setSelected(true); |
|
1709 |
this.pickerVirtualFieldGetter.setEnabled(false); |
|
1710 |
// this.pickerVirtualFieldGetter.set(null); |
|
1711 |
this.toOneController.clean(); |
|
1712 |
break; |
|
1713 |
|
|
1714 |
} |
|
1231 | 1715 |
|
1232 | 1716 |
if (!(descriptor instanceof EditableFeatureAttributeDescriptor)) { |
1233 | 1717 |
this.setMode(FeatureTypePanel.MODE_SHOW_ONLY); |
... | ... | |
1325 | 1809 |
this.tabAditionalFields.setEnabledAt(1, false); |
1326 | 1810 |
this.tabAditionalFields.setEnabledAt(2, false); |
1327 | 1811 |
} |
1812 |
// updateRelationState(); |
|
1813 |
doChangeRelationType(); |
|
1328 | 1814 |
} catch (Exception ex) { |
1329 | 1815 |
LOGGER.warn("Problems changing field type.", ex); |
1330 | 1816 |
} |
... | ... | |
1350 | 1836 |
DataType dataType = this.getDataType(); |
1351 | 1837 |
switch(this.mode) { |
1352 | 1838 |
case MODE_EDIT_ALL: |
1353 |
this.cboRelationType.setEnabled(true); |
|
1354 | 1839 |
this.txtDefaultValue.setEditable(!this.chkIsAutomatic.isSelected()); |
1355 | 1840 |
this.txtDefaultFormat.setEditable(true); |
1356 | 1841 |
this.txtFieldName.setEditable(true); |
... | ... | |
1397 | 1882 |
this.pickerValuesFilter.setEditable(true); |
1398 | 1883 |
this.availableValuesController.setEditable(true); |
1399 | 1884 |
this.tagsController.setEnabled(true); |
1400 |
this.foreingKeyController.setEditable(true); |
|
1401 | 1885 |
break; |
1402 | 1886 |
case MODE_EDIT_ONLY_METADATA: |
1403 | 1887 |
if( this.chkVirtualField.isSelected() ) { |
... | ... | |
1423 | 1907 |
this.pickerCRS.setEditable(false); |
1424 | 1908 |
} |
1425 | 1909 |
|
1426 |
this.cboRelationType.setEnabled(true); |
|
1427 | 1910 |
this.txtDefaultValue.setEditable(true); |
1428 | 1911 |
this.txtDefaultFormat.setEditable(true); |
1429 | 1912 |
this.pickerIntervalEnd.setEditable(true); |
... | ... | |
1456 | 1939 |
this.pickerValuesFilter.setEditable(true); |
1457 | 1940 |
this.availableValuesController.setEditable(true); |
1458 | 1941 |
this.tagsController.setEnabled(true); |
1459 |
this.foreingKeyController.setEditable(true); |
|
1460 | 1942 |
break; |
1461 | 1943 |
case MODE_SHOW_ONLY: |
1462 |
this.cboRelationType.setEnabled(false); |
|
1463 | 1944 |
this.txtDefaultValue.setEditable(false); |
1464 | 1945 |
this.txtDefaultFormat.setEditable(false); |
1465 | 1946 |
this.txtFieldName.setEditable(false); |
... | ... | |
1497 | 1978 |
this.pickerValuesFilter.setEditable(false); |
1498 | 1979 |
this.availableValuesController.setEditable(false); |
1499 | 1980 |
this.tagsController.setEnabled(false); |
1500 |
this.foreingKeyController.setEditable(false); |
|
1501 | 1981 |
break; |
1502 | 1982 |
} |
1983 |
updateRelationState(); |
|
1503 | 1984 |
} |
1985 |
|
|
1986 |
private void updateRelationState() { |
|
1987 |
switch(this.mode) { |
|
1988 |
case MODE_EDIT_ALL: |
|
1989 |
case MODE_EDIT_ONLY_METADATA: |
|
1990 |
if( this.isVirtualField() ) { |
|
1991 |
this.toOneController.setEditable(false); |
|
1992 |
this.rdbRelationToOne.setEnabled(false); |
|
1993 |
this.toManyController.setEditable(this.getDataType().getType() == DataTypes.LIST); |
|
1994 |
this.rdbRelationToMany.setEnabled(this.getDataType().getType() == DataTypes.LIST); |
|
1995 |
} else { |
|
1996 |
this.toOneController.setEditable(true); |
|
1997 |
this.rdbRelationToOne.setEnabled(true); |
|
1998 |
this.toManyController.setEditable(false); |
|
1999 |
this.rdbRelationToMany.setEnabled(false); |
|
2000 |
} |
|
2001 |
this.rdbRelationNone.setEnabled(true); |
|
2002 |
if( this.rdbRelationToMany.isSelected() ) { |
|
2003 |
this.pickerVirtualFieldGetter.setEnabled(false); |
|
2004 |
// this.pickerVirtualFieldGetter.set(null); |
|
2005 |
} |
|
2006 |
break; |
|
2007 |
case MODE_SHOW_ONLY: |
|
2008 |
default: |
|
2009 |
this.toOneController.setEditable(false); |
|
2010 |
this.toManyController.setEditable(false); |
|
2011 |
this.rdbRelationToOne.setEnabled(false); |
|
2012 |
this.rdbRelationToMany.setEnabled(false); |
|
2013 |
this.rdbRelationNone.setEnabled(false); |
|
2014 |
if( this.rdbRelationToMany.isSelected() ) { |
|
2015 |
this.pickerVirtualFieldGetter.setEnabled(false); |
|
2016 |
// this.pickerVirtualFieldGetter.set(null); |
|
2017 |
} |
|
2018 |
break; |
|
2019 |
} |
|
2020 |
} |
|
1504 | 2021 |
|
1505 | 2022 |
private void doCheckPrecisionAndScale() { |
1506 | 2023 |
DataType dataType = this.getDataType(); |
Also available in: Unified diff