Revision 5019

View differences:

org.gvsig.vcsgis/trunk/org.gvsig.vcsgis/org.gvsig.vcsgis.swing/org.gvsig.vcsgis.swing.impl/src/main/java/org/gvsig/vcsgis/swing/impl/managehistory/BackupHistory.java
7 7

  
8 8
import java.io.File;
9 9
import java.util.Map;
10
import java.util.concurrent.Callable;
10 11
import org.gvsig.fmap.dal.DALLocator;
11 12
import org.gvsig.fmap.dal.DataManager;
12 13
import org.gvsig.fmap.dal.DataStoreParameters;
......
25 26
import org.gvsig.tools.dispose.DisposeUtils;
26 27
import org.gvsig.tools.task.SimpleTaskStatus;
27 28
import org.gvsig.vcsgis.lib.VCSGisEntity;
29
import static org.gvsig.vcsgis.lib.VCSGisManager.ERR_EXCEPTION;
30
import static org.gvsig.vcsgis.lib.VCSGisManager.ERR_OK;
28 31
import org.slf4j.Logger;
29 32
import org.slf4j.LoggerFactory;
30 33

  
......
32 35
 *
33 36
 * @author fdiaz
34 37
 */
35
public class BackupHistory implements Runnable {
38
public class BackupHistory implements Callable<Integer> {
36 39
    
37 40
    private static final Logger LOGGER = LoggerFactory.getLogger(BackupHistory.class);
38 41

  
42
    public static final String ENTITIES_FILE_PREFIX = "ENTITIES_";
43
    public static final String REVISIONS_FILE_PREFIX = "REVISIONS_";
44
    public static final String DATA_FILE_PREFIX = "DATA_";
39 45

  
40 46
    private final JDBCServerExplorerParameters repository;
41 47
    private final File targetfolder;
......
50 56
    }
51 57

  
52 58
    @Override
53
    public void run() {
59
    public Integer call() {
54 60

  
55 61
        if( this.status == null ) {
56 62
            this.status = ToolsLocator.getTaskStatusManager().createDefaultSimpleTaskStatus("vcsgis init");
......
81 87
            // Exportar DataRepoTable de la entidad
82 88
            exportDataTable(sourceExplorer, targetExplorer, entity, revisionsMap);
83 89
            status.terminate();
90
            return ERR_OK;
84 91
        } catch (Exception ex) {
85 92
            LOGGER.warn("Can't export history.", ex);
86 93
            status.abort();
94
            return ERR_EXCEPTION;
87 95
        } finally {
88 96
            status.pop();
89 97
        }
......
98 106
        try {
99 107
            status.message("Exporting entities table.");
100 108
            String sourceTable = "VCSGISREPO_ENTITIES";
101
            String targetTable = "ENTITIES_"+entity.getEntityName();
109
            String targetTable = ENTITIES_FILE_PREFIX+entity.getEntityName();
102 110
            String filter = "\"COD_ENTITY\"='"+entity.getEntityCode()+"'";
103 111

  
104 112
            DataManager dataManager = DALLocator.getDataManager();
......
145 153
            status.message("Exporting revision table.");
146 154

  
147 155
            String sourceTable = "VCSGISREPO_REVISIONS";
148
            String targetTable = "REVISIONS_"+entity.getEntityName();
156
            String targetTable = REVISIONS_FILE_PREFIX+entity.getEntityName();
149 157
            String filter = "\"COD_ENTITY\"='"+entity.getEntityCode()+"'";
150 158
            String order = "+REV_NUMBER";
151 159

  
......
200 208
            status.message("Exporting data table.");
201 209

  
202 210
            String sourceTable = "VCSGISREPO_DATA";
203
            String targetTable = "DATA_"+entity.getEntityName();
211
            String targetTable = DATA_FILE_PREFIX+entity.getEntityName();
204 212
            String filter = "\"COD_ENTITY\"='"+entity.getEntityCode()+"'";
205 213
//            String order = "+REV_NUMBER";
206 214

  
org.gvsig.vcsgis/trunk/org.gvsig.vcsgis/org.gvsig.vcsgis.swing/org.gvsig.vcsgis.swing.impl/src/main/java/org/gvsig/vcsgis/swing/impl/managehistory/VCSGisJRestoreHistoryImpl.java
22 22
package org.gvsig.vcsgis.swing.impl.managehistory;
23 23

  
24 24
import java.awt.Cursor;
25
import java.io.File;
25 26
import javax.swing.ImageIcon;
26 27
import javax.swing.JComponent;
27 28
import javax.swing.SwingUtilities;
28 29
import javax.swing.event.ChangeEvent;
30
import javax.swing.filechooser.FileFilter;
31
import org.apache.commons.io.FilenameUtils;
32
import org.apache.commons.lang3.StringUtils;
33
import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters;
29 34
import org.gvsig.tools.ToolsLocator;
30 35
import org.gvsig.tools.i18n.I18nManager;
31 36
import org.gvsig.tools.swing.api.Component;
......
38 43
import org.gvsig.tools.swing.api.task.TaskStatusSwingManager;
39 44
import org.gvsig.tools.swing.api.windowmanager.Dialog;
40 45
import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
46
import org.gvsig.tools.task.SimpleTaskStatus;
47
import org.gvsig.vcsgis.lib.UserCancelledException;
48
import org.gvsig.vcsgis.lib.VCSGisEntity;
41 49
import static org.gvsig.vcsgis.lib.VCSGisManager.ERR_CANT_CHECKOUT;
50
import static org.gvsig.vcsgis.lib.VCSGisManager.ERR_OK;
42 51
import org.gvsig.vcsgis.lib.VCSGisRuntimeException;
43 52
import org.gvsig.vcsgis.lib.repository.VCSGisRepository;
44 53
import org.gvsig.vcsgis.lib.repository.VCSGisRepositoryLocaldbApi;
......
52 61
import static org.gvsig.vcsgis.swing.impl.VCSGisSwingManagerImpl.ICON_GROUP_NAME;
53 62
import static org.gvsig.vcsgis.swing.impl.VCSGisSwingManagerImpl.ICON_PROVIDER_NAME;
54 63
import static org.gvsig.vcsgis.swing.impl.VCSGisSwingManagerImpl.registerIcons;
64
import static org.gvsig.vcsgis.swing.impl.managehistory.BackupHistory.ENTITIES_FILE_PREFIX;
55 65
import org.slf4j.LoggerFactory;
56 66

  
57 67
/**
......
110 120
                btnSelectFolder
111 121
        );
112 122
        
123
        this.fileController.setFileFilter(new FileFilter() {
124
            @Override
125
            public boolean accept(File f) {
126
                String name = f.getName();
127
                if(f.isDirectory()){
128
                    return true;
129
                }
130
                if(FilenameUtils.isExtension(name.toLowerCase(), "csv") &&
131
                        StringUtils.startsWithIgnoreCase(name, ENTITIES_FILE_PREFIX)) {
132
                    return true;
133
                };
134
                return false;
135
            }
136

  
137
            @Override
138
            public String getDescription() {
139
                I18nManager i18n = ToolsLocator.getI18nManager();
140
                return i18n.getTranslation("_Entity_history_backup_files");
141
            }
142
        });
143
        
113 144
        this.fileController.addChangeListener((ChangeEvent e) -> {
114 145
            doUpdateComponents();
115 146
        });
......
233 264
        final VCSGisWorkspace workspace = this.getWorkspace();
234 265
        boolean replaceLayerIfExists = true;
235 266
        
236
        //TODO:
237
        
238
//        if (workspace != null && !entities.isEmpty() ) {
239
//            SimpleTaskStatus taskStatus = ToolsLocator.getTaskStatusManager().createDefaultSimpleTaskStatus("Download changes");
240
//            try {
241
//                taskStatus.setAutoremove(true);
242
//                taskStatus.add();
243
//                taskStatus.setRangeOfValues(0, entities.size());
244
//                taskStatus.setCurValue(0);
245
//                this.taskStatusController.bind(taskStatus);
246
//                processing = true;
247
//                doUpdateComponents();
248
//
249
//                VCSGisRepository repository = workspace.getRepository();
250
//                JDBCServerExplorerParameters serverExplorerParameters = null;
251
//                if(repository instanceof VCSGisRepositoryLocaldbApi){
252
//                    serverExplorerParameters = ((VCSGisRepositoryLocaldbApi)repository).getServerExplorer().getParameters();
253
//                }
254
//                int res = ERR_OK;
267

  
268
        File entitiesFile = fileController.get();
269
        if (workspace != null && entitiesFile != null && entitiesFile.exists() ) {
270
            SimpleTaskStatus taskStatus = ToolsLocator.getTaskStatusManager().createDefaultSimpleTaskStatus("Download changes");
271
            try {
272
                taskStatus.setAutoremove(true);
273
                taskStatus.add();
274
                taskStatus.setRangeOfValues(0, 1);
275
                taskStatus.setCurValue(0);
276
                this.taskStatusController.bind(taskStatus);
277
                processing = true;
278
                doUpdateComponents();
279

  
280
                VCSGisRepository repository = workspace.getRepository();
281
                JDBCServerExplorerParameters serverExplorerParameters = null;
282
                if(repository instanceof VCSGisRepositoryLocaldbApi){
283
                    serverExplorerParameters = ((VCSGisRepositoryLocaldbApi)repository).getServerExplorer().getParameters();
284
                }
285
                int res = ERR_OK;
286
                // Note: RestoreHistory only restore one entity per file
255 287
//                for (VCSGisEntity entity : entities) {
256
//                    taskStatus.setTitle("Export history" + " - " + entity.getLabel() + taskStatus.getProgressLabel());
257
//                    showMessage(i18n.getTranslation("_Processing"), null);
258
//                    BackupHistory exportHistory = new BackupHistory(serverExplorerParameters, fileController.get(), entity, taskStatus);
259
//                    exportHistory.run();
260
//                    
261
//                    taskStatus.incrementCurrentValue();
262
//
288
                    taskStatus.setTitle("Restore history" + " - " + entitiesFile.getName() + taskStatus.getProgressLabel());
289
                    showMessage(i18n.getTranslation("_Processing"), null);
290
                    RestoreHistory restoreHistory = new RestoreHistory(
291
                            serverExplorerParameters, 
292
                            entitiesFile, taskStatus);
293
                    res = restoreHistory.call();
294
                    if(res != ERR_OK){
295
                        showMessage(i18n.getTranslation("_Aborting_process"), null);
296
                        taskStatus.abort();
297
                        return res;
298
                    }
299
                    taskStatus.incrementCurrentValue();
263 300
//                }
264
//                showMessage(i18n.getTranslation("_Ended_process"), null);
265
//                taskStatus.terminate();
266
//                return res;
267
//            } catch(UserCancelledException ex) {
268
//                LOGGER.warn("User cancelled");
269
//                taskStatus.cancel();
270
//            } catch(Exception ex) {
271
//                LOGGER.warn("Can't export history", ex);
272
//                taskStatus.abort();
273
//            } finally {
274
//                processing = false;
275
//                doUpdateComponents();
276
//            }
277
//        }
301
                showMessage(i18n.getTranslation("_Ended_process"), null);
302
                taskStatus.terminate();
303
                return res;
304
            } catch(UserCancelledException ex) {
305
                LOGGER.warn("User cancelled");
306
                taskStatus.cancel();
307
            } catch(Exception ex) {
308
                LOGGER.warn("Can't restore history", ex);
309
                taskStatus.abort();
310
            } finally {
311
                processing = false;
312
                doUpdateComponents();
313
            }
314
        }
315

  
316

  
317

  
318

  
278 319
        return ERR_CANT_CHECKOUT;
279 320
    }
280 321

  
org.gvsig.vcsgis/trunk/org.gvsig.vcsgis/org.gvsig.vcsgis.swing/org.gvsig.vcsgis.swing.impl/src/main/java/org/gvsig/vcsgis/swing/impl/managehistory/VCSGisJBackupHistoryImpl.java
301 301
                    taskStatus.setTitle("Backup history" + " - " + entity.getLabel() + taskStatus.getProgressLabel());
302 302
                    showMessage(i18n.getTranslation("_Processing"), null);
303 303
                    BackupHistory backupHistory = new BackupHistory(serverExplorerParameters, folderController.get(), entity, taskStatus);
304
                    backupHistory.run();
305
                    
304
                    res = backupHistory.call();
305
                    if(res != ERR_OK){
306
                        showMessage(i18n.getTranslation("_Aborting_process"), null);
307
                        taskStatus.abort();
308
                        return res;
309
                    }
306 310
                    taskStatus.incrementCurrentValue();
307

  
308 311
                }
309 312
                showMessage(i18n.getTranslation("_Ended_process"), null);
310 313
                taskStatus.terminate();
org.gvsig.vcsgis/trunk/org.gvsig.vcsgis/org.gvsig.vcsgis.swing/org.gvsig.vcsgis.swing.impl/src/main/java/org/gvsig/vcsgis/swing/impl/managehistory/RestoreHistory.java
6 6
package org.gvsig.vcsgis.swing.impl.managehistory;
7 7

  
8 8
import java.io.File;
9
import java.util.concurrent.Callable;
10
import javax.json.JsonObject;
9 11
import org.apache.commons.io.FilenameUtils;
12
import org.gvsig.expressionevaluator.spi.JsonUtils;
10 13
import org.gvsig.fmap.dal.DALLocator;
11 14
import org.gvsig.fmap.dal.DataManager;
12 15
import org.gvsig.fmap.dal.DataStore;
......
24 27
import org.gvsig.tools.ToolsLocator;
25 28
import org.gvsig.tools.dispose.DisposeUtils;
26 29
import org.gvsig.tools.task.SimpleTaskStatus;
30
import org.gvsig.vcsgis.lib.VCSGisManager;
31
import static org.gvsig.vcsgis.lib.VCSGisManager.ERR_EXCEPTION;
32
import static org.gvsig.vcsgis.lib.VCSGisManager.ERR_OK;
27 33
import org.slf4j.Logger;
28 34
import org.slf4j.LoggerFactory;
29 35

  
......
31 37
 *
32 38
 * @author fdiaz
33 39
 */
34
public class RestoreHistory implements Runnable {
40
public class RestoreHistory implements Callable<Integer> {
35 41
    
36 42
    private static final Logger LOGGER = LoggerFactory.getLogger(RestoreHistory.class);
37 43

  
......
47 53
    }
48 54

  
49 55
    @Override
50
    public void run() {
56
    public Integer call() {
51 57

  
52 58
        if( this.status == null ) {
53 59
            this.status = ToolsLocator.getTaskStatusManager().createDefaultSimpleTaskStatus("vcsgis init");
......
147 153
            targetDataStore.edit(MODE_APPEND);
148 154
            
149 155
            status.setCurValue(0);
156
            int line = 1;
150 157
            for (Feature feature : dataFeatures) {
158
                String data = feature.getString("DAT_DATA");
159
                if(data != null){
160
                    JsonObject x = null;
161
                    try {
162
                        x = JsonUtils.toJsonObject(data);
163
                    } catch (Exception ex) {
164
                        throw new RuntimeException("DAT_DATA incorrect value at line "+line, ex);
165
                    }
166
                    
167
                    if(x == null){
168
                        throw new RuntimeException("DAT_DATA incorrect value at line "+line);
169
                    }
170
                }
151 171
                f = targetDataStore.createNewFeature();
152 172
                f.copyFrom(feature);
153 173
                f.set("DAT_REVNUMBER", f.getLong("DAT_REVNUMBER")+firstRevisionNumber);
154 174
                targetDataStore.insert(f);
175
                
155 176
                status.incrementCurrentValue();
177
                line++;
156 178
            }
157 179
            trans.commit();
158 180
            status.terminate();
181
            return ERR_OK;
159 182
        } catch (Exception ex) {
160 183
            LOGGER.warn("Can't export history.", ex);
161 184
            DataTransaction.rollbackQuietly(trans);
162 185
            status.abort();
186
            return ERR_EXCEPTION;
163 187
        } finally {
164 188
            DisposeUtils.disposeQuietly(trans);
165 189
            status.pop();
org.gvsig.vcsgis/trunk/org.gvsig.vcsgis/org.gvsig.vcsgis.swing/org.gvsig.vcsgis.swing.impl/src/test/java/org/gvsig/vcsgis/swing/impl/managehistory/Test01BackupHistory.java
340 340
                    ws1.getWorkspaceEntityByName("test"),
341 341
                    null
342 342
            );
343
            backup.run();
343
            r = backup.call();
344
            assertEquals("backup status", ERR_NO_ERROR, r);
344 345

  
345 346
            // Inicializamos el repositorio y lo abrimos
346 347
            r = manager.initRepository(targetServer.getParameters(), null);
......
357 358
                    null
358 359
            );
359 360

  
360
            restore.run();
361
            r = restore.call();
362
            assertEquals("restore status", ERR_NO_ERROR, r);
361 363
            
362 364
            // ------------------------------------------------------------
363 365
            // Creamos workspace1 y lo abrimos.
org.gvsig.vcsgis/trunk/org.gvsig.vcsgis/pom.xml
14 14

  
15 15
    <properties>
16 16
        <org.gvsig.h2spatial.provider>org.gvsig.h2spatial.h2gis132.provider</org.gvsig.h2spatial.provider>
17
        <org.gvsig.topology.version>1.0.81</org.gvsig.topology.version>
18
        <org.gvsig.oracle.version>2.0.62</org.gvsig.oracle.version>
19
        <org.gvsig.postgresql.version>2.0.183</org.gvsig.postgresql.version>
17
        <org.gvsig.topology.version>1.0.82-SNAPSHOT</org.gvsig.topology.version>
18
        <org.gvsig.oracle.version>2.0.63-SNAPSHOT</org.gvsig.oracle.version>
19
        <org.gvsig.postgresql.version>2.0.184-SNAPSHOT</org.gvsig.postgresql.version>
20 20
    </properties>
21 21

  
22 22
    <url>https://devel.gvsig.org/sites/org.gvsig.vcsgis/${project.version}</url>
org.gvsig.vcsgis/trunk/org.gvsig.vcsgis/org.gvsig.vcsgis.app/org.gvsig.vcsgis.app.mainplugin/src/main/java/org/gvsig/vcsgis/app/VCSGisExtension.java
192 192
            case "tools-vcsgis-prepare-workingcopy":
193 193
                showPrepareWorkingcopyDialog();
194 194
                break;
195
            case "tools-vcsgis-export-history":
195
            case "tools-vcsgis-backup-history":
196 196
                showBackupHistoryDialog();
197 197
                break;
198 198
            case "tools-vcsgis-restore-history":
......
613 613
        VCSGisSwingManager swingManager = VCSGisSwingLocator.getVCSGisSwingManager();
614 614

  
615 615
        VCSGisDialogInfo dialog = this.dialogsHelper.getOrCreateDialog("RestoreHistory",
616
                swingManager.createBackupHistoryPanel(),
616
                swingManager.createRestoreHistoryPanel(),
617 617
                "_VCS_Restore_history",
618 618
                "_VCS_Restore_history",
619 619
                "_VCS_Restore_history",
org.gvsig.vcsgis/trunk/org.gvsig.vcsgis/org.gvsig.vcsgis.app/org.gvsig.vcsgis.app.mainplugin/src/main/resources-plugin/config.xml
197 197
    <action 
198 198
        name="tools-vcsgis-backup-history" 
199 199
        label="_VCS_Backup_history" 
200
        tooltip="_Export_history"
200
        tooltip="_Backup_history"
201 201
        position="900700800" 
202 202
        action-command="tools-vcsgis-backup-history" 
203 203
        icon="tools-vcsgis-backup-history"
org.gvsig.vcsgis/trunk/org.gvsig.vcsgis/org.gvsig.vcsgis.app/org.gvsig.vcsgis.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties
243 243
_VCS_Backup_history=Backup history
244 244
_Folder=Folder
245 245
_VCS_Restore_history=Restore historial
246
_Entity_history_backup_files=Entity history backup files
247
_EntitiesFile=Archivo de entidades
248
_Replace_layer_if_exists=Replace layer if exists
org.gvsig.vcsgis/trunk/org.gvsig.vcsgis/org.gvsig.vcsgis.app/org.gvsig.vcsgis.app.mainplugin/src/main/resources-plugin/i18n/text.properties
255 255
_VCS_Backup_history=Copia de seguridad del historial
256 256
_Folder=Carpeta
257 257
_VCS_Restore_history=Restaurar historial
258
_Backup_history=Crea una copia de seguridad en csv del historial de una entidad
259
_Restore_history=Restaura una copia de seguridad en csv del historial de una entidad
260
_Entity_history_backup_files=Archivos de copia de seguridad del historial de entidades
261
_EntitiesFile=Archivo de entidades
262
_Replace_layer_if_exists=Reemplazar la capa si existe

Also available in: Unified diff