Statistics
| Revision:

gvsig-projects-pool / org.gvsig.vcsgis / trunk / org.gvsig.vcsgis / org.gvsig.vcsgis.swing / org.gvsig.vcsgis.swing.impl / src / main / java / org / gvsig / vcsgis / swing / impl / changes / VCSGisJChangesImpl.java @ 3379

History | View | Annotate | Download (10.1 KB)

1
/*
2
 * gvSIG. Desktop Geographic Information System.
3
 * 
4
 * Copyright (C) 2007-2020 gvSIG Association.
5
 * 
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 3
9
 * of the License, or (at your option) any later version.
10
 * 
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 * 
16
 * You should have received a copy of the GNU General Public License 
17
 * along with this program. If not, see <https://www.gnu.org/licenses/>. 
18
 * 
19
 * For any additional information, do not hesitate to contact us
20
 * at info AT gvsig.com, or visit our website www.gvsig.com.
21
 */
22

    
23
package org.gvsig.vcsgis.swing.impl.changes;
24

    
25
import java.awt.Dimension;
26
import java.awt.event.ActionEvent;
27
import java.util.List;
28
import javax.swing.ImageIcon;
29
import javax.swing.JComponent;
30
import javax.swing.SwingUtilities;
31
import javax.swing.Timer;
32
import org.gvsig.tools.ToolsLocator;
33
import org.gvsig.tools.swing.api.ToolsSwingLocator;
34
import org.gvsig.tools.swing.api.ToolsSwingManager;
35
import org.gvsig.tools.swing.api.pickercontroller.PickerController;
36
import org.gvsig.tools.swing.api.task.TaskStatusController;
37
import org.gvsig.tools.swing.api.task.TaskStatusSwingManager;
38
import org.gvsig.vcsgis.lib.VCSGisEntity;
39
import org.gvsig.vcsgis.lib.workspace.VCSGisWorkspace;
40
import org.gvsig.vcsgis.lib.workspace.VCSGisWorkspaceEntity;
41
import org.gvsig.vcsgis.swing.VCSGisJChanges;
42
import org.gvsig.vcsgis.swing.VCSGisSwingLocator;
43
import org.gvsig.vcsgis.swing.VCSGisSwingManager;
44
import static org.gvsig.vcsgis.swing.impl.VCSGisSwingCommons.notInSwingThreadInvokeLater;
45
import org.gvsig.vcsgis.swing.impl.VCSGisSwingManagerImpl;
46
import static org.gvsig.vcsgis.swing.impl.VCSGisSwingManagerImpl.ICON_COMMON_GROUP_NAME;
47
import static org.gvsig.vcsgis.swing.impl.VCSGisSwingManagerImpl.ICON_GROUP_NAME;
48
import static org.gvsig.vcsgis.swing.impl.VCSGisSwingManagerImpl.ICON_PROVIDER_NAME;
49
import static org.gvsig.vcsgis.swing.impl.VCSGisSwingManagerImpl.registerIcons;
50
import org.slf4j.Logger;
51
import org.slf4j.LoggerFactory;
52

    
53
/**
54
 *
55
 * @author gvSIG Team
56
 */
57
@SuppressWarnings("UseSpecificCatch")
58
public class VCSGisJChangesImpl 
59
        extends VCSGisJChangesView 
60
        implements VCSGisJChanges
61
    {
62
    
63
    private static final Logger LOGGER = LoggerFactory.getLogger(VCSGisJChangesImpl.class);
64

    
65
    public static final int LOCAL_TAB_INDEX = 0;
66
    public static final int REMOTE_TAB_INDEX = 1;
67

    
68
    private PickerController<VCSGisWorkspace> workspacePicker;
69
    private LocalChangesController localChangesController;
70
    private RemoteChangesController remoteChangesController;
71
    private final List<VCSGisWorkspaceEntity> workspaceEntities = null;
72
    private final List<VCSGisEntity> repositoryEntities = null;
73
    private boolean entitiesUpdateds;
74
    private VCSGisWorkspace currentWorkspace;
75
    private TaskStatusController taskStatusController;
76
    private Timer timerClearMsg;
77
    /* friend */ boolean processing;
78
    
79
    
80
    public VCSGisJChangesImpl() {
81
        processing = false;
82
        initComponents();
83
    }
84

    
85
    @Override
86
    public JComponent asJComponent() {
87
        return this;
88
    }
89

    
90
    @Override
91
    public ImageIcon loadImage(String imageName) {
92
        return VCSGisSwingManagerImpl.loadImage(imageName);
93
    }
94
    
95
    private void translate() {
96
        ToolsSwingManager swingManager = ToolsSwingLocator.getToolsSwingManager();
97
        swingManager.translate(this.lblWorkspace);
98
        swingManager.translate(this.btnWorkspace);
99

    
100
        swingManager.translate(this.tabLocalAndRemote);
101
    }
102

    
103
    private void initComponents() {
104
        VCSGisSwingManager vcsSwingManager = VCSGisSwingLocator.getVCSGisSwingManager();
105
        TaskStatusSwingManager taskStatusManager = ToolsSwingLocator.getTaskStatusSwingManager();
106

    
107
        this.timerClearMsg = new Timer(5000, (ActionEvent e) -> {
108
            getTaskStatusController().message("");
109
        });
110
        this.timerClearMsg.setRepeats(false);
111
        
112
        translate();
113

    
114
        this.taskStatusController = taskStatusManager.createTaskStatusController(
115
                this.lblStatusCaption, 
116
                this.lblStatusMessages, 
117
                this.pbStatus
118
        );
119
        this.taskStatusController.setShowCancelButton(false);
120
        this.taskStatusController.setShowRemoveTaskButton(false);
121
        this.taskStatusController.bind(ToolsLocator.getTaskStatusManager());
122
        SwingUtilities.invokeLater(() -> {this.setVisibleStatus(false); });
123
        
124
        
125
        this.workspacePicker = vcsSwingManager.createWorkspacePickerController(
126
                this.cboWorkspace,
127
                this.btnWorkspace
128
        );
129
        
130
        
131

    
132
        this.localChangesController = new LocalChangesController(
133
            this,
134
            this.workspacePicker,
135
            this.tblLocalChanges,
136
            this.btnLocalCheckAll,
137
            this.btnLocalUnCheckAll,
138
            this.btnLocalShowForm,
139
            this.btnLocalRefresh,
140
            this.btnLocalCommit,
141
            this.btnLocalRevert,
142
            this.lblLocalEffectiveDate,
143
            this.txtLocalEffectiveDate,
144
            this.txtLocalComment,
145
            this.btnLocalEffectiveDate,
146
            this.lblLocalComment,
147
            this.btnLocalZoom,
148
            this.btnLocalCenter,
149
            this.btnLocalCleanHighligthed,
150
            this.lblLocalChangesCount,
151
            this.txtLocalTablesFilter,
152
            this.btnLocalTable,
153
            this.treeLocalTables
154
        );
155
        
156
        this.remoteChangesController = new RemoteChangesController(
157
            this,
158
                
159
            this.workspacePicker,
160

    
161
            this.lstRemoteTables,
162
            this.btnRemoteTablesReload,
163

    
164
            this.tblRemoteChanges,
165
            this.btnRemoteCheckAll,
166
            this.btnRemoteUncheckAll,
167
            this.btnRemoteDownloadChanges,
168
            this.btnRemoteReloadChanges,
169
            this.btnRemoteCleanChanges,
170
            this.btnRemoteUpdate,
171
            this.btnRemoteMerge,
172
            this.btnRemoteShowForm,
173
            this.btnRemoteZoom,
174
            this.btnRemoteCenter,
175
            this.btnRemoteCheckout,
176
            this.btnRemoteCleanHighligthed,
177
            this.lblRemoteChangesCount
178
        );
179
        
180
        this.setPreferredSize(new Dimension(600, 400));
181
    }
182
    
183
    /* friend */ void doUpdateComponents() {
184
        if( notInSwingThreadInvokeLater(() -> {doUpdateComponents();}) ) {
185
            return;
186
        }
187
        
188
        if(this.localChangesController != null){
189
            this.localChangesController.doUpdateComponents();
190
        }
191
        if(this.remoteChangesController != null){
192
            this.remoteChangesController.doUpdateComponents();
193
        }
194
    }
195
    
196
    public void updateLocalChangesTable() {
197
        if( notInSwingThreadInvokeLater(() -> {updateLocalChangesTable();}) ) {
198
            return;
199
        }
200
        this.localChangesController.doReloadTables();
201
        this.localChangesController.doUpdateTableLocalChanges();
202
    }
203

    
204
    public VCSGisWorkspace getWorkspace() {
205
        VCSGisWorkspace ws = this.workspacePicker.get();
206
        return ws;
207
    }
208
    
209
    public void updateEntitiesFromRepository(boolean forceUpdateEntities) {
210
        VCSGisWorkspace ws = this.getWorkspace();
211
        if( ws == null ) {
212
            return;
213
        }
214
        if( !forceUpdateEntities && this.currentWorkspace==ws && this.entitiesUpdateds ) {
215
            return;
216
        }
217
        setVisibleStatus(true);
218
        ws.updateEntitiesFromRepository();
219
        this.currentWorkspace = ws;
220
        this.entitiesUpdateds = true;
221
        setVisibleStatus(false);
222
    }
223
    
224

    
225
    public void message(final String msg) {
226
        if( notInSwingThreadInvokeLater(() -> {message(msg);})) {
227
            return;
228
        }
229
        this.timerClearMsg.stop();
230
        this.getTaskStatusController().message(msg);
231
        this.timerClearMsg.start();
232
    }
233

    
234
    public void setVisibleStatus(boolean visible) {
235
        if( notInSwingThreadInvokeLater(() -> {setVisibleStatus(visible);}) ) {
236
            return;
237
        }
238
        this.lblStatusCaption.setVisible(visible);
239
        this.pbStatus.setVisible(visible);
240
        this.lblStatusMessages.setVisible(true);
241
    }
242
    
243
    public TaskStatusController getTaskStatusController() {
244
        return this.taskStatusController;
245
    }
246

    
247
    public static void selfRegister() {
248
        String[][] iconsInfo = new String[][]{
249
            new String[]{ICON_PROVIDER_NAME, ICON_COMMON_GROUP_NAME, "common-check-off"},
250
            new String[]{ICON_PROVIDER_NAME, ICON_COMMON_GROUP_NAME, "common-check-on"},
251
            new String[]{ICON_PROVIDER_NAME, ICON_COMMON_GROUP_NAME, "common-showform"},
252
            new String[]{ICON_PROVIDER_NAME, ICON_GROUP_NAME, "vcsgis-commit-all"},
253
            new String[]{ICON_PROVIDER_NAME, ICON_GROUP_NAME, "vcsgis-refresh-status"},
254
            new String[]{ICON_PROVIDER_NAME, ICON_GROUP_NAME, "vcsgis-revert"},
255
            new String[]{ICON_PROVIDER_NAME, ICON_GROUP_NAME, "vcsgis-update-all"},
256
            new String[]{ICON_PROVIDER_NAME, ICON_GROUP_NAME, "vcsgis-merge"},
257
            new String[]{ICON_PROVIDER_NAME, ICON_GROUP_NAME, "vcsgis-show-local-changes"},
258
            new String[]{ICON_PROVIDER_NAME, ICON_GROUP_NAME, "vcsgis-show-remote-changes"},
259
            new String[]{ICON_PROVIDER_NAME, ICON_GROUP_NAME, "vcsgis-show-local-and-remote-changes"},
260
            new String[]{ICON_PROVIDER_NAME, ICON_GROUP_NAME, "vcsgis-center-context"},
261
            new String[]{ICON_PROVIDER_NAME, ICON_GROUP_NAME, "vcsgis-zoom-context"},
262
            new String[]{ICON_PROVIDER_NAME, ICON_GROUP_NAME, "vcsgis-clean-highlighted"},
263
        };
264
        registerIcons(iconsInfo);
265
        
266
    }
267

    
268
    @Override
269
    public boolean isProcessing() {
270
        return this.processing;
271
    }
272
    
273
    public void selectTab(int tab){
274
        this.tabLocalAndRemote.setSelectedIndex(tab);
275
    }
276
    
277
    public void selectOnlyALocalEntity(VCSGisEntity selectedTable){
278
        this.localChangesController.selectOnlyAEntity(selectedTable);
279
    }
280
}