Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.plugin / org.gvsig.geodb.app / org.gvsig.geodb.app.mainplugin / src / main / java / org / gvsig / geodb / databaseworkspace / ConnectToDatabaseWorkspacePanel.java @ 46542

History | View | Annotate | Download (7.14 KB)

1
package org.gvsig.geodb.databaseworkspace;
2

    
3
import javax.swing.JComponent;
4
import javax.swing.JOptionPane;
5
import javax.swing.event.ChangeEvent;
6
import javax.swing.event.ChangeListener;
7
import org.apache.commons.lang.StringUtils;
8
import org.gvsig.fmap.dal.DALLocator;
9
import org.gvsig.fmap.dal.DataManager;
10
import org.gvsig.fmap.dal.DataStoreParameters;
11
import org.gvsig.fmap.dal.DatabaseWorkspaceManager;
12
import static org.gvsig.fmap.dal.DatabaseWorkspaceManager.CONFIG_NAME_STORESREPOSITORYID;
13
import static org.gvsig.fmap.dal.DatabaseWorkspaceManager.CONFIG_NAME_STORESREPOSITORYLABEL;
14
import org.gvsig.fmap.dal.StoresRepository;
15
import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters;
16
import org.gvsig.fmap.dal.store.jdbc.JDBCStoreParameters;
17
import org.gvsig.fmap.dal.swing.DALSwingLocator;
18
import org.gvsig.tools.ToolsLocator;
19
import org.gvsig.tools.i18n.I18nManager;
20
import org.gvsig.tools.swing.api.Component;
21
import org.gvsig.tools.swing.api.ToolsSwingLocator;
22
import org.gvsig.tools.swing.api.ToolsSwingUtils;
23
import org.gvsig.tools.swing.api.pickercontroller.PickerController;
24
import org.gvsig.tools.swing.api.threadsafedialogs.ThreadSafeDialogsManager;
25
import org.gvsig.tools.swing.api.windowmanager.Dialog;
26
import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
27

    
28
/**
29
 *
30
 * @author jjdelcerro
31
 */
32
public class ConnectToDatabaseWorkspacePanel 
33
        extends ConnectToDatabaseWorkspacePanelView
34
        implements Component
35
    {
36

    
37
    private Dialog dialog;
38
    private PickerController<JDBCServerExplorerParameters> connectionPicker;
39

    
40
    public ConnectToDatabaseWorkspacePanel() {
41
        this.initComponents();
42
    }
43
    
44
    public boolean connect() {
45
        JDBCServerExplorerParameters conn = getConnection();
46
        if( conn == null ) {
47
            return false;
48
        }
49
        DataManager dataManager = DALLocator.getDataManager();
50
        DatabaseWorkspaceManager workspace = dataManager.createDatabaseWorkspaceManager(conn);
51
        StoresRepository repo = workspace.getStoresRepository();
52
        if( hasConflictTheRepositoryWithOtherRepositoryAlreadyRegistered(repo) ) {
53
            ThreadSafeDialogsManager dialogs = ToolsSwingLocator.getThreadSafeDialogsManager();
54
            I18nManager i18n = ToolsLocator.getI18nManager();
55
            int n = dialogs.confirmDialog(
56
                    i18n.getTranslation("_The_name_of_some_tables_of_the_repository_coincide_with_those_of_another_repository_already_registered") + 
57
                            " ("+repo.getLabel()+")\n" +
58
                            i18n.getTranslation("_If_you_connect_to_this_repository_and_have_tables_or_layers_loaded_from_the_previous_repository_you_may_notice_inconsistencies_in_the_data") + "\n" +
59
                            i18n.getTranslation("_Do_you_want_to_connect_with_the_current_repository_anyway"), 
60
                    i18n.getTranslation("_Connect_to_repository"), 
61
                    JOptionPane.YES_NO_OPTION, 
62
                    JOptionPane.QUESTION_MESSAGE
63
            );
64
            if( n!=JOptionPane.YES_OPTION ) {
65
                return false;
66
            }
67
        }        
68
        workspace.connect();
69
        return true;
70
    }
71

    
72
    public void disconnect() {
73
      String id = this.getID();
74
      DataManager dataManager = DALLocator.getDataManager();
75
      DatabaseWorkspaceManager workspace = dataManager.getDatabaseWorkspace(id);
76
      if( workspace!=null ) {
77
        workspace.disconnect();
78
      }
79
    }
80
    
81
    private void initComponents() {
82
        this.connectionPicker = DALSwingLocator.getSwingManager().createJDBCConnectionPickerController(
83
                this.cboConnection,
84
                this.btnConnection
85
        );
86
        this.connectionPicker.addChangeListener(new ChangeListener() {
87
            @Override
88
            public void stateChanged(ChangeEvent e) {
89
                doUpdateStoresRepositoryInfo();
90
            }
91
        });
92
        ToolsSwingUtils.ensureRowsCols(this, 7, 110, 10, 160);
93
        doUpdateStoresRepositoryInfo();
94
    }
95

    
96
    @Override
97
    public JComponent asJComponent() {
98
        return this;
99
    }
100

    
101
    public JDBCServerExplorerParameters getConnection() {
102
        JDBCServerExplorerParameters conn = this.connectionPicker.get();
103
        if (conn == null) {
104
            return null;
105
        }
106
        DataManager dataManager = DALLocator.getDataManager();
107
        DatabaseWorkspaceManager workspace = dataManager.createDatabaseWorkspaceManager(conn);
108
        if( !workspace.isValidStoresRepository() ) {
109
            return null;
110
        }
111
        return conn;
112
    }
113

    
114
    private void doUpdateEnableComponents() {
115
        DataManager dataManager = DALLocator.getDataManager();
116

    
117
        boolean theEnabled = this.getConnection() != null;
118
        if( dialog!=null ) {
119
            this.dialog.setButtonEnabled(
120
                    WindowManager_v2.BUTTON_OK, 
121
                    theEnabled
122
            );
123
            String id = this.getID();
124
            this.dialog.setButtonEnabled(
125
                    WindowManager_v2.BUTTON_APPLY, 
126
                    dataManager.getDatabaseWorkspace(id)!=null
127
            );
128
        }
129
    }
130
    
131
    private void doUpdateStoresRepositoryInfo() {
132
        if( this.getConnection()!=null ) {
133
          DataManager dataManager = DALLocator.getDataManager();
134
          JDBCServerExplorerParameters conn = getConnection();
135
          DatabaseWorkspaceManager workspace = dataManager.createDatabaseWorkspaceManager(conn);
136
          String id = workspace.get(CONFIG_NAME_STORESREPOSITORYID);
137
          String label = workspace.get(CONFIG_NAME_STORESREPOSITORYLABEL);
138
          String url = conn.getUrl();
139
          this.txtID.setText(StringUtils.defaultIfBlank(id, ""));
140
          this.txtLabel.setText(StringUtils.defaultIfBlank(label, ""));
141
          this.txtUrl.setText(StringUtils.defaultIfBlank(url, ""));
142
          this.connectionPicker.set(conn);
143
        } else {
144
          this.txtID.setText("");
145
          this.txtLabel.setText("");
146
          this.txtUrl.setText("");
147
          this.connectionPicker.set(null);
148
        }
149
        this.doUpdateEnableComponents();
150
    }
151
    
152
    public String getID() {
153
      return this.txtID.getText();
154
    }
155
    
156
    public String getLabel() {
157
      return this.txtLabel.getText();
158
    }
159
    
160
    void setDialog(Dialog dialog) {
161
       this.dialog = dialog;
162
       this.doUpdateEnableComponents();
163
    }
164

    
165
    private boolean hasConflictTheRepositoryWithOtherRepositoryAlreadyRegistered(StoresRepository repo) {
166
        DataManager dataManager = DALLocator.getDataManager();
167
        StoresRepository globalRepository = dataManager.getStoresRepository();
168
        for (String name : repo.keySet()) {
169
            DataStoreParameters params = repo.get(name);
170
            if( params instanceof JDBCStoreParameters ) {
171
                DataStoreParameters registeredParams = globalRepository.get(name);
172
                if( registeredParams instanceof JDBCStoreParameters ) {
173
                    String url = ((JDBCStoreParameters) params).getUrl();
174
                    String registeredUrl = ((JDBCStoreParameters) registeredParams).getUrl();
175
                    if( !StringUtils.equals(url, registeredUrl)) {
176
                        return true;
177
                    }
178
                }
179
            }
180
        }
181
        return false;
182
    }
183
    
184
}