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();
|