Revision 47784 trunk/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/updatetable/UpdateTableProcessImpl.java

View differences:

UpdateTableProcessImpl.java
6 6
package org.gvsig.app.extension.updatetable;
7 7

  
8 8
import java.util.List;
9
import java.util.function.Predicate;
9 10
import org.gvsig.app.extension.updatetable.UpdateTableProcessParameters.ProcessFieldParameters;
10 11
import org.gvsig.expressionevaluator.Expression;
11 12
import org.gvsig.expressionevaluator.ExpressionUtils;
......
26 27
import org.slf4j.Logger;
27 28
import org.slf4j.LoggerFactory;
28 29
import org.gvsig.fmap.dal.DataTransaction;
30
import org.gvsig.fmap.dal.feature.FeatureStoreNotification;
31
import org.gvsig.tools.ToolsLocator;
29 32
import org.gvsig.tools.dispose.DisposeUtils;
33
import org.gvsig.tools.identitymanagement.IdentityUtils;
30 34

  
31 35
/**
32 36
 *
......
75 79
        try {
76 80
            DataManager dataManager = DALLocator.getDataManager();
77 81

  
82
            FeatureStore store = this.parameters.getStore();
83
            if( !IdentityUtils.isAuthorized(
84
                    "tools-updatetable", store, store.getFullName()) ) {
85
                this.status.message("User not authotized to this action");
86
                return;
87
            }
88
                    
78 89
            this.transaction = dataManager.createTransaction();
79 90
            this.transaction.begin();
80 91

  
81
            FeatureStore store = this.parameters.getStore();
82 92
            this.transaction.add(store, false);
83 93
            
84 94
            this.status.setTitle("Update table '" + store.getName() + "'");
......
125 135
    }
126 136

  
127 137
    public void update_editeds() throws DataException {
138
        Predicate<FeatureStoreNotification> saveNotificationsFilter = null;
139
        
128 140
        FeatureStore store = this.parameters.getStore();
129
        Expression filter = this.parameters.getFilter();
130
        List<FeatureReference> set = store.getEditedFeatures();
131
        if( set.isEmpty() ) {
132
            return;
133
        }
134
        this.beginEditing();
135
        long rows = set.size();
136
        this.status.setRangeOfValues(0, rows);
141
        try {
142
            saveNotificationsFilter = store.setNotificationsFilter(new StoreNotificationsFilter());
137 143

  
138
        for (FeatureReference featureReferfence : set) {
139
            this.status.incrementCurrentValue();
140
            if (this.status.isCancellationRequested()) {
141
                this.status.cancel();
142
                this.abortEditing();
144
            Expression filter = this.parameters.getFilter();
145
            List<FeatureReference> set = store.getEditedFeatures();
146
            if( set.isEmpty() ) {
143 147
                return;
144 148
            }
145
            Feature feature = featureReferfence.getFeature();
146
            this.featureSymbolTable.setFeature(feature);
147
            boolean sholdProcessFeature = DataTypeUtils.toBoolean(filter.execute(featureSymbolTable), false);
148
            if (!sholdProcessFeature) {
149
                continue;
149
            this.beginEditing();
150
            long rows = set.size();
151
            this.status.setRangeOfValues(0, rows);
152

  
153
            for (FeatureReference featureReferfence : set) {
154
                this.status.incrementCurrentValue();
155
                if (this.status.isCancellationRequested()) {
156
                    this.status.cancel();
157
                    this.abortEditing();
158
                    return;
159
                }
160
                Feature feature = featureReferfence.getFeature();
161
                this.featureSymbolTable.setFeature(feature);
162
                boolean sholdProcessFeature = DataTypeUtils.toBoolean(filter.execute(featureSymbolTable), false);
163
                if (!sholdProcessFeature) {
164
                    continue;
165
                }
166

  
167
                EditableFeature editable_feature = feature.getEditable();
168
                process_feature(editable_feature);
169
                store.update(editable_feature);
170
                restart_editing();
150 171
            }
151

  
152
            EditableFeature editable_feature = feature.getEditable();
153
            process_feature(editable_feature);
154
            store.update(editable_feature);
155
            restart_editing();
172
            this.endEditing();
173
        } finally {
174
            store.setNotificationsFilter(saveNotificationsFilter);
156 175
        }
157
        this.endEditing();
158 176
    }
159 177

  
160 178
    public void update_selection() throws DataException {
179
        Predicate<FeatureStoreNotification> saveNotificationsFilter = null;
180

  
161 181
        FeatureStore store = this.parameters.getStore();
162
        Expression filter = this.parameters.getFilter();
163
        FeatureSet set = store.getFeatureSelection();
164
        this.beginEditing();
165
        long rows = set.getSize();
166
        this.status.setRangeOfValues(0, rows);
182
        try {
183
            saveNotificationsFilter = store.setNotificationsFilter(new StoreNotificationsFilter());
184
            
185
            Expression filter = this.parameters.getFilter();
186
            FeatureSet set = store.getFeatureSelection();
187
            this.beginEditing();
188
            long rows = set.getSize();
189
            this.status.setRangeOfValues(0, rows);
167 190

  
168
        for (Feature feature : set) {
169
            this.status.incrementCurrentValue();
170
            if (this.status.isCancellationRequested()) {
171
                this.status.cancel();
172
                this.abortEditing();
173
                return;
174
            }
191
            for (Feature feature : set) {
192
                this.status.incrementCurrentValue();
193
                if (this.status.isCancellationRequested()) {
194
                    this.status.cancel();
195
                    this.abortEditing();
196
                    return;
197
                }
175 198

  
176
            this.featureSymbolTable.setFeature(feature);
177
            if( filter!=null ) {
178
                boolean sholdProcessFeature = DataTypeUtils.toBoolean(filter.execute(featureSymbolTable), false);
179
                if (!sholdProcessFeature) {
180
                    continue;
199
                this.featureSymbolTable.setFeature(feature);
200
                if( filter!=null ) {
201
                    boolean sholdProcessFeature = DataTypeUtils.toBoolean(filter.execute(featureSymbolTable), false);
202
                    if (!sholdProcessFeature) {
203
                        continue;
204
                    }
181 205
                }
206

  
207
                EditableFeature editable_feature = feature.getEditable();
208
                process_feature(editable_feature);
209
                set.update(editable_feature);
210
                restart_editing();
182 211
            }
183

  
184
            EditableFeature editable_feature = feature.getEditable();
185
            process_feature(editable_feature);
186
            set.update(editable_feature);
187
            restart_editing();
212
            this.endEditing();
213
        } finally {
214
            store.setNotificationsFilter(saveNotificationsFilter);
188 215
        }
189
        this.endEditing();
190 216
    }
191 217

  
192 218
    public void update_all() throws DataException {
219
        Predicate<FeatureStoreNotification> saveNotificationsFilter = null;
220
        
193 221
        FeatureStore store = this.parameters.getStore();
194
        Expression filter = this.parameters.getFilter();
195
        
196
        FeatureQuery query = store.createFeatureQuery(filter);
197
        FeatureSet set = store.getFeatureSet(query);
198
        this.transaction.add(set);
199
        
200
        this.beginEditing();
201
        long rows = set.getSize();
202
        this.status.setRangeOfValues(0, rows);
222
        try {
223
            saveNotificationsFilter = store.setNotificationsFilter(new StoreNotificationsFilter());
203 224

  
204
        for (Feature feature : set) {
205
            this.status.incrementCurrentValue();
206
            if (this.status.isCancellationRequested()) {
207
                this.status.cancel();
208
                this.abortEditing();
209
                return;
225
            Expression filter = this.parameters.getFilter();
226

  
227
            FeatureQuery query = store.createFeatureQuery(filter);
228
            FeatureSet set = store.getFeatureSet(query);
229
            this.transaction.add(set);
230

  
231
            this.beginEditing();
232
            long rows = set.getSize();
233
            this.status.setRangeOfValues(0, rows);
234

  
235
            for (Feature feature : set) {
236
                this.status.incrementCurrentValue();
237
                if (this.status.isCancellationRequested()) {
238
                    this.status.cancel();
239
                    this.abortEditing();
240
                    return;
241
                }
242
                EditableFeature editable_feature = feature.getEditable();
243
                process_feature(editable_feature);
244
                set.update(editable_feature);
245
                restart_editing();
210 246
            }
211
            EditableFeature editable_feature = feature.getEditable();
212
            process_feature(editable_feature);
213
            set.update(editable_feature);
214
            restart_editing();
247
            this.endEditing();
248
        } finally {
249
            store.setNotificationsFilter(saveNotificationsFilter);
215 250
        }
216
        this.endEditing();
251
        
217 252
    }
218 253

  
219 254
    private void process_feature(EditableFeature feature) {
......
327 362
        return this.out;
328 363
    }
329 364
    
365
    private class StoreNotificationsFilter implements Predicate<FeatureStoreNotification> {
366

  
367
        @Override
368
        public boolean test(FeatureStoreNotification t) {
369
            if( t!=null ) {
370
                switch(t.getType()) {
371
                    case FeatureStoreNotification.AFTER_UPDATE:
372
                    case FeatureStoreNotification.BEFORE_UPDATE:
373
                        return true;
374
                }
375
                LOGGER.info(t.getType());
376
            }
377
            return false;
378
        }
379
        
380
    }
330 381
    
331 382

  
332 383
}

Also available in: Unified diff