Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.plugin / org.gvsig.app / org.gvsig.app.mainplugin / src / main / java / org / gvsig / app / extension / copytable / CopyTable2ProcessParametersImpl.java @ 46629

History | View | Annotate | Download (19.9 KB)

1
/*
2
 * To change this license header, choose License Headers in Project Properties.
3
 * To change this template file, choose Tools | Templates
4
 * and open the template in the editor.
5
 */
6
package org.gvsig.app.extension.copytable;
7

    
8
import java.util.Iterator;
9
import java.util.LinkedHashMap;
10
import java.util.Map;
11
import org.gvsig.expressionevaluator.Expression;
12
import org.gvsig.fmap.dal.DALLocator;
13
import org.gvsig.fmap.dal.DataManager;
14
import org.gvsig.fmap.dal.DataParameters;
15
import org.gvsig.fmap.dal.DataStoreParameters;
16
import org.gvsig.fmap.dal.feature.FeatureStore;
17
import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemStoreParameters;
18
import org.gvsig.fmap.dal.store.jdbc.JDBCStoreParameters;
19
import org.gvsig.tools.ToolsLocator;
20
import org.gvsig.tools.dispose.DisposeUtils;
21
import org.gvsig.tools.dispose.impl.AbstractDisposable;
22
import org.gvsig.tools.dynobject.DynStruct;
23
import org.gvsig.tools.exception.BaseException;
24
import org.gvsig.tools.persistence.PersistenceManager;
25
import org.gvsig.tools.persistence.PersistentState;
26
import org.gvsig.tools.persistence.exception.PersistenceException;
27
import org.slf4j.LoggerFactory;
28

    
29
/**
30
 *
31
 * @author jjdelcerro
32
 */
33
public class CopyTable2ProcessParametersImpl extends AbstractDisposable implements CopyTable2ProcessParameters{
34
    
35
    final static private org.slf4j.Logger LOGGER = LoggerFactory.getLogger(CopyTable2ProcessParametersImpl.class);
36

    
37
    public static class ProcessFieldParametersImpl implements ProcessFieldParameters {
38
    
39
        private String name;
40
        private boolean copyThisField;
41
        private Expression expression;
42
        
43
        public ProcessFieldParametersImpl() {
44
            //For persistence only
45
        }
46
        
47
        public ProcessFieldParametersImpl(String name, boolean update, Expression expression) {
48
            this.name = name;
49
            this.copyThisField = update;
50
            this.expression = expression;
51
        }
52

    
53
        /**
54
         * @return the name
55
         */
56
        @Override
57
        public String getName() {
58
            return name;
59
        }
60

    
61
        /**
62
         * @return the update
63
         */
64
        @Override
65
        public boolean isCopyThisFieldActive() {
66
            return copyThisField;
67
        }
68

    
69
        /**
70
         * @return the expression
71
         */
72
        @Override
73
        public Expression getExpression() {
74
            return expression;
75
        }
76
        
77
        public static void selfRegister() {
78
            PersistenceManager manager = ToolsLocator.getPersistenceManager();
79

    
80
            DynStruct definition
81
                    = manager.addDefinition(ProcessFieldParametersImpl.class,
82
                            "ProcessFieldParameters",
83
                            "ProcessFieldParameters Persistence definition",
84
                            null,
85
                            null);
86

    
87
            definition.addDynFieldString("name")
88
                    .setMandatory(true);
89
            definition.addDynFieldBoolean("copyThisField")
90
                    .setMandatory(true);
91
            definition.addDynFieldObject("expression")
92
                    .setClassOfValue(Expression.class)
93
                    .setMandatory(false);
94
        }
95

    
96
        @Override
97
        public void loadFromState(PersistentState state) throws PersistenceException {
98
        this.name = state.getString("name");
99
        this.copyThisField = state.getBoolean("copyThisField");
100
        this.expression = (Expression)state.get("expression");
101
        }
102

    
103
        @Override
104
        public void saveToState(PersistentState state) throws PersistenceException {
105
            state.set("name", this.name );
106
            state.set("copyThisField", this.copyThisField);
107
            state.set("expression", this.expression);
108
        }
109
        
110
        
111
        
112
    }
113
    
114
    
115
    private Expression sourceFilter;
116
    private FeatureStore sourceStore;
117
    private FeatureStore targetStore;
118

    
119
    private Map<String,ProcessFieldParameters> fields;
120
    
121
    private int editMode;
122
    private int finishAndRestarEditEach;
123
    private boolean finishAndRestarEdit;
124
    private boolean beginEditIfNeed;
125
    private boolean finishEditAfterTerminate;
126
    private boolean notifyUserIfNeedBeginEditing;
127

    
128
    private String sourceFieldJoin;
129
    private String targetFieldJoin;
130
    private boolean insertIfNotExistsTarget;
131
    private boolean updateIfExistsTarget;
132
    private boolean deleteIfNotExiststInSource;
133
    private Expression updateIfExistsInTargetCondition;
134

    
135
    public CopyTable2ProcessParametersImpl() {
136
        super();
137
        this.sourceFilter = null;
138
        this.sourceStore = null;
139
        this.fields = new LinkedHashMap<>();
140
    }
141

    
142
    @Override
143
    protected void doDispose() throws BaseException {
144
        DisposeUtils.dispose(sourceStore);
145
        DisposeUtils.dispose(targetStore);
146
        this.sourceStore = null;
147
        this.targetStore = null;
148
        this.sourceFilter = null;
149
    }
150

    
151
    @Override
152
    public CopyTable2ProcessParameters add(String name, boolean copyField, Expression expression) {
153
        ProcessFieldParametersImpl x = new ProcessFieldParametersImpl(name, copyField, expression);
154
        this.fields.put(name,x);
155
        return this;
156
    }
157

    
158
    @Override
159
    public ProcessFieldParameters get(String name) {
160
        return this.fields.get(name);
161
    }
162
    
163
    @Override
164
    public Iterator<ProcessFieldParameters> iterator() {
165
        return this.fields.values().iterator();
166
    }
167

    
168
    @Override
169
    public CopyTable2ProcessParameters setSourceStore(FeatureStore store) {
170
        DisposeUtils.dispose(this.sourceStore);
171
        this.sourceStore = store;
172
        DisposeUtils.bind(this.sourceStore);
173
        return this;
174
    }
175

    
176
    @Override
177
    public FeatureStore getSourceStore() {
178
        return sourceStore;
179
    }
180
    
181
    /**
182
     * @return the filter
183
     */
184
    @Override
185
    public Expression getSourceFilter() {
186
        return sourceFilter;
187
    }
188

    
189
    /**
190
     * @param filter the filter to set
191
     */
192
    @Override
193
    public CopyTable2ProcessParameters setSourceFilter(Expression filter) {
194
        this.sourceFilter = filter;
195
        return this;
196
    }
197

    
198
    /**
199
     * @return the editMode
200
     */
201
    @Override
202
    public int getEditMode() {
203
        return editMode;
204
    }
205

    
206
    /**
207
     * @param editMode the editMode to set
208
     */
209
    @Override
210
    public CopyTable2ProcessParameters setEditMode(int editMode) {
211
        this.editMode = editMode;
212
        return this;
213
    }
214

    
215
    /**
216
     * @return the finishAndRestarEditEach
217
     */
218
    @Override
219
    public int getFinishAndRestarEditEach() {
220
        return finishAndRestarEditEach;
221
    }
222

    
223
    /**
224
     * @param finishAndRestarEditEach the finishAndRestarEditEach to set
225
     */
226
    @Override
227
    public CopyTable2ProcessParameters setFinishAndRestarEditEach(int finishAndRestarEditEach) {
228
        this.finishAndRestarEditEach = finishAndRestarEditEach;
229
        return this;
230
    }
231

    
232
    /**
233
     * @return the beginEditIfNeed
234
     */
235
    @Override
236
    public boolean isBeginEditIfNeed() {
237
        return beginEditIfNeed;
238
    }
239

    
240
    /**
241
     * @param beginEditIfNeed the beginEditIfNeed to set
242
     */
243
    @Override
244
    public CopyTable2ProcessParameters setBeginEditIfNeed(boolean beginEditIfNeed) {
245
        this.beginEditIfNeed = beginEditIfNeed;
246
        return this;
247
    }
248

    
249
    /**
250
     * @return the finishEditAfterTerminate
251
     */
252
    @Override
253
    public boolean isFinishEditAfterTerminate() {
254
        return finishEditAfterTerminate;
255
    }
256

    
257
    /**
258
     * @param finishEditAfterTerminate the finishEditAfterTerminate to set
259
     */
260
    @Override
261
    public CopyTable2ProcessParameters setFinishEditAfterTerminate(boolean finishEditAfterTerminate) {
262
        this.finishEditAfterTerminate = finishEditAfterTerminate;
263
        return this;
264
    }
265

    
266
    /**
267
     * @return the notifyUserIfNeedBeginEditing
268
     */
269
    @Override
270
    public boolean isNotifyUserIfNeedBeginEditing() {
271
        return notifyUserIfNeedBeginEditing;
272
    }
273

    
274
    /**
275
     * @param notifyUserIfNeedBeginEditing the notifyUserIfNeedBeginEditing to set
276
     */
277
    @Override
278
    public CopyTable2ProcessParameters setNotifyUserIfNeedBeginEditing(boolean notifyUserIfNeedBeginEditing) {
279
        this.notifyUserIfNeedBeginEditing = notifyUserIfNeedBeginEditing;
280
        return this;
281
    }
282

    
283
    /**
284
     * @return the finishAndRestarEdit
285
     */
286
    @Override
287
    public boolean isFinishAndRestarEdit() {
288
        return finishAndRestarEdit;
289
    }
290

    
291
    /**
292
     * @param finishAndRestarEdit the finishAndRestarEdit to set
293
     */
294
    @Override
295
    public CopyTable2ProcessParameters setFinishAndRestarEdit(boolean finishAndRestarEdit) {
296
        this.finishAndRestarEdit = finishAndRestarEdit;
297
        return this;
298
    }
299

    
300
    @Override
301
    public FeatureStore getTargetStore() {
302
        return this.targetStore;
303
    }
304

    
305
    @Override
306
    public boolean isInsertIfNotExistsTargetActive() {
307
        return this.insertIfNotExistsTarget;
308
    }
309

    
310
    @Override
311
    public boolean isUpdateIfExistsTargetActive() {
312
        return this.updateIfExistsTarget;
313
    }
314

    
315
    @Override
316
    public boolean isDeleteIfNotExiststInSourceActive() {
317
        return this.deleteIfNotExiststInSource;
318
    }
319

    
320
    @Override
321
    public String getSourceFieldForJoin() {
322
        return this.sourceFieldJoin;
323
    }
324

    
325
    @Override
326
    public String getTargetFieldForJoin() {
327
        return this.targetFieldJoin;
328
    }
329

    
330
    @Override
331
    public Expression getUpdateIfExistsInTargetCondition() {
332
        return this.updateIfExistsInTargetCondition;
333
    }
334

    
335
    @Override
336
    public CopyTable2ProcessParameters setTargetStore(FeatureStore store) {
337
        DisposeUtils.dispose(this.targetStore);
338
        this.targetStore = store;
339
        DisposeUtils.bind(this.targetStore);
340
        
341
        return this;
342
    }
343

    
344
    @Override
345
    public CopyTable2ProcessParameters setInsertIfNotExistsTargetActive(boolean active) {
346
        this.insertIfNotExistsTarget = active;
347
        return this;
348
    }
349

    
350
    @Override
351
    public CopyTable2ProcessParameters setUpdateIfExistsTargetActive(boolean active) {
352
        this.updateIfExistsTarget = active;
353
        return this;
354
    }
355

    
356
    @Override
357
    public CopyTable2ProcessParameters setSourceFieldForJoin(String fieldName) {
358
        this.sourceFieldJoin = fieldName;
359
        return this;
360
    }
361

    
362
    @Override
363
    public CopyTable2ProcessParameters setTargetFieldForJoin(String fieldName) {
364
        this.targetFieldJoin = fieldName;
365
        return this;
366
    }
367

    
368
    @Override
369
    public CopyTable2ProcessParameters setUpdateIfExistsInTargetCondition(Expression condition) {
370
        this.updateIfExistsInTargetCondition = condition;
371
        return this;
372
    }
373

    
374
    @Override
375
    public CopyTable2ProcessParameters setDeleteIfNotExiststInSourceActive(boolean active) {
376
        this.deleteIfNotExiststInSource = active;
377
        return this;
378
    }
379

    
380
    @Override
381
    public void saveToState(PersistentState state) throws PersistenceException {
382
            state.set("sourceFilter", this.sourceFilter );
383
            if(this.sourceStore != null){
384
                state.set("sourceStoreParams", this.sourceStore.getParameters());
385
            }
386
            if(this.targetStore != null){
387
                state.set("targetStoreParams", this.targetStore.getParameters());
388
            }
389

    
390
            state.set("fields", this.fields );
391
            state.set("editMode", this.editMode );
392
            state.set("finishAndRestarEditEach", this.finishAndRestarEditEach );
393
            state.set("finishAndRestarEdit", this.finishAndRestarEdit );
394
            state.set("beginEditIfNeed", this.beginEditIfNeed );
395
            state.set("finishEditAfterTerminate", this.finishEditAfterTerminate );
396
            state.set("notifyUserIfNeedBeginEditing", this.notifyUserIfNeedBeginEditing );
397
            state.set("sourceFieldJoin", this.sourceFieldJoin );
398
            state.set("targetFieldJoin", this.targetFieldJoin );
399
            state.set("insertIfNotExistsTarget", this.insertIfNotExistsTarget );
400
            state.set("updateIfExistsTarget", this.updateIfExistsTarget );
401
            state.set("deleteIfNotExiststInSource", this.deleteIfNotExiststInSource );
402
            state.set("updateIfExistsInTargetCondition", this.updateIfExistsInTargetCondition );
403

    
404
    }
405

    
406
    @Override
407
    public void loadFromState(PersistentState state) throws PersistenceException {
408
        this.sourceFilter = (Expression)state.get("sourceFilter");
409

    
410
        
411
        DataManager dataManager = DALLocator.getDataManager();
412
        DataStoreParameters sourceStoreParams = (DataStoreParameters) state.get("sourceStoreParams");
413
        if (sourceStoreParams != null && sourceStoreParams instanceof DataStoreParameters) {
414
            try {
415
                this.sourceStore = (FeatureStore) dataManager.openStore(sourceStoreParams.getProviderName(), sourceStoreParams);
416
            } catch (Exception ex) {
417
                LOGGER.warn("Can't open source store '"+sourceStoreParams.getDescription()+"'", ex);
418
            }
419
        }
420
        
421
        DataStoreParameters targetStoreParams = (DataStoreParameters)state.get("targetStoreParams");
422
        if(targetStoreParams != null && targetStoreParams instanceof DataStoreParameters){
423
            try {
424
                this.targetStore = (FeatureStore) dataManager.openStore(targetStoreParams.getProviderName(), targetStoreParams);
425
            } catch (Exception ex) {
426
                LOGGER.warn("Can't open target store '"+sourceStoreParams.getDescription()+"'", ex);
427
            }
428
        }
429
        
430
        this.fields = state.getMap("fields");
431
        this.editMode = state.getInt("editMode");
432
        this.finishAndRestarEditEach = state.getInt("finishAndRestarEditEach");
433
        this.finishAndRestarEdit = state.getBoolean("finishAndRestarEdit");
434
        this.beginEditIfNeed = state.getBoolean("beginEditIfNeed");
435
        this.finishEditAfterTerminate = state.getBoolean("finishEditAfterTerminate");
436
        this.notifyUserIfNeedBeginEditing = state.getBoolean("notifyUserIfNeedBeginEditing");
437
        this.sourceFieldJoin = state.getString("sourceFieldJoin");
438
        this.targetFieldJoin = state.getString("targetFieldJoin");
439
        this.insertIfNotExistsTarget = state.getBoolean("insertIfNotExistsTarget");
440
        this.updateIfExistsTarget = state.getBoolean("updateIfExistsTarget");
441
        this.deleteIfNotExiststInSource = state.getBoolean("deleteIfNotExiststInSource");
442
        this.updateIfExistsInTargetCondition = (Expression)state.get("updateIfExistsInTargetCondition");
443
    }
444
    
445
    public static void selfRegister() {
446
        PersistenceManager manager = ToolsLocator.getPersistenceManager();
447

    
448
        DynStruct definition
449
                = manager.addDefinition(CopyTable2ProcessParametersImpl.class,
450
                        "CopyTable2ProcessParameters",
451
                        "CopyTable2ProcessParameters Persistence definition",
452
                        null,
453
                        null);
454
        
455
        ProcessFieldParametersImpl.selfRegister();
456

    
457
        definition.addDynFieldObject("sourceStoreParams")
458
                .setClassOfValue(DataParameters.class)
459
                .setMandatory(true);
460
        definition.addDynFieldObject("targetStoreParams")
461
                .setClassOfValue(DataParameters.class)
462
                .setMandatory(true);
463
        definition.addDynFieldObject("sourceFilter")
464
                .setClassOfValue(Expression.class)
465
                .setMandatory(false);
466
        definition.addDynFieldObject("updateIfExistsInTargetCondition")
467
                .setClassOfValue(Expression.class)
468
                .setMandatory(false);
469
        definition.addDynFieldMap("fields")
470
                .setClassOfItems(ProcessFieldParametersImpl.class)
471
                .setMandatory(true);
472
        definition.addDynFieldInt("editMode")
473
                .setMandatory(true);
474
        definition.addDynFieldInt("finishAndRestarEditEach")
475
                .setMandatory(true);
476
        definition.addDynFieldBoolean("finishAndRestarEdit")
477
                .setMandatory(true);
478
        definition.addDynFieldBoolean("beginEditIfNeed")
479
                .setMandatory(true);
480
        definition.addDynFieldBoolean("finishEditAfterTerminate")
481
                .setMandatory(true);
482
        definition.addDynFieldBoolean("notifyUserIfNeedBeginEditing")
483
                .setMandatory(true);
484
        definition.addDynFieldString("sourceFieldJoin")
485
                .setMandatory(true);
486
        definition.addDynFieldString("targetFieldJoin")
487
                .setMandatory(true);
488
        definition.addDynFieldBoolean("insertIfNotExistsTarget")
489
                .setMandatory(true);
490
        definition.addDynFieldBoolean("updateIfExistsTarget")
491
                .setMandatory(true);
492
        definition.addDynFieldBoolean("deleteIfNotExiststInSource")
493
                .setMandatory(true);
494
    }
495

    
496
    public String toString() {
497
        StringBuilder builder = new StringBuilder();
498
        builder.append("SOURCE: ");
499
        DataStoreParameters sourceParameters = this.sourceStore.getParameters();
500
        if(sourceParameters instanceof JDBCStoreParameters) {
501
            builder.append(((JDBCStoreParameters)sourceParameters).getUrl());
502
            builder.append(" -> ");
503
            builder.append(((JDBCStoreParameters) sourceParameters).getTable());
504
        } else if(sourceParameters instanceof FilesystemStoreParameters) {
505
            builder.append(((FilesystemStoreParameters)sourceParameters).getFile().getAbsolutePath());
506
        }
507
        builder.append("\n");
508
        builder.append("TARGET: ");
509
        DataStoreParameters targetParameters = this.targetStore.getParameters();
510
        if(targetParameters instanceof JDBCStoreParameters) {
511
            builder.append(((JDBCStoreParameters)targetParameters).getUrl());
512
            builder.append(" -> ");
513
            builder.append(((JDBCStoreParameters) targetParameters).getTable());
514
        } else if(targetParameters instanceof FilesystemStoreParameters) {
515
            builder.append(((FilesystemStoreParameters)sourceParameters).getFile().getAbsolutePath());
516
        }
517
        builder.append("\n");
518
        builder.append("FIELDS: ");
519
        for (Map.Entry<String, ProcessFieldParameters> entry : this.fields.entrySet()) {
520
            builder.append("\n");
521
            builder.append("  ");
522
            builder.append(entry.getKey());
523
            builder.append(": ");
524
            ProcessFieldParameters value = entry.getValue();
525
            if(value != null){
526
                Expression expression = value.getExpression();
527
                if(expression != null){
528
                    builder.append(expression.getPhrase());
529
                }
530
            }
531
        }
532
        builder.append("\n");
533
        builder.append("EDIT MODE: ");
534
        builder.append(this.editMode);
535
        builder.append("\n");
536
        builder.append("FINISH AND RESTART EDIT EACH: ");
537
        builder.append(this.finishAndRestarEditEach);
538
        builder.append("\n");
539
        builder.append("FINISH AND RESTART EDIT: ");
540
        builder.append(this.finishAndRestarEdit);
541
        
542
        builder.append("\n");
543
        builder.append("BEGIN EDIT IF NEED: ");
544
        builder.append(this.beginEditIfNeed);
545
        builder.append("\n");
546
        builder.append("FINISH EDIT AFTER TERMINATE: ");
547
        builder.append(this.finishEditAfterTerminate);
548
        builder.append("\n");
549
        builder.append("NOTIFY USER IF NEED BEGIN EDITING: ");
550
        builder.append(this.notifyUserIfNeedBeginEditing);
551
        builder.append("\n");
552
        builder.append("SOURCE FIELD JOIN: ");
553
        builder.append(this.sourceFieldJoin);
554
        builder.append("\n");
555
        builder.append("TARGET FIELD JOIN: ");
556
        builder.append(this.targetFieldJoin);
557
        builder.append("\n");
558
        builder.append("INSERT IF NOT EXISTS TARGET: ");
559
        builder.append(this.insertIfNotExistsTarget);
560
        builder.append("\n");
561
        builder.append("UPDATE IF EXISTS TARGET: ");
562
        builder.append(this.updateIfExistsTarget);
563
        builder.append("\n");
564
        builder.append("DELETE IF NOT EXISTS IN SOURCE: ");
565
        builder.append(this.deleteIfNotExiststInSource);
566
        builder.append("\n");
567
        builder.append("UPDATE IF EXISTS IN TARGET CONDITION: ");
568
        if(this.updateIfExistsInTargetCondition != null){
569
            builder.append(this.updateIfExistsInTargetCondition.getPhrase());
570
        }
571
        return builder.toString();
572
    }
573
    
574
    
575

    
576
}