Revision 63 org.gvsig.catalog/branches/org.gvsig.catalog-CSW2.0.2/org.gvsig.catalog/org.gvsig.catalog.extension/src/main/java/org/gvsig/catalog/loaders/PostgisLayerLoader.java

View differences:

PostgisLayerLoader.java
40 40
 */
41 41
package org.gvsig.catalog.loaders;
42 42

  
43
import java.awt.Dimension;
44
import java.net.MalformedURLException;
45
import java.net.URL;
43 46
import java.util.StringTokenizer;
44 47
import java.util.TreeMap;
45 48

  
49
import javax.swing.JLabel;
50
import javax.swing.JOptionPane;
51
import javax.swing.JPanel;
52
import javax.swing.JPasswordField;
53

  
54
import org.apache.commons.dbcp.SQLNestedException;
55
import org.apache.commons.lang3.StringUtils;
46 56
import org.gvsig.catalog.schemas.Resource;
47 57
import org.gvsig.catalog.utils.Strings;
48 58
import org.gvsig.fmap.dal.DataStoreParameters;
49 59
import org.gvsig.fmap.dal.exception.InitializeException;
50 60
import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
61
import org.gvsig.fmap.dal.resource.db.DBParameters;
62
import org.gvsig.fmap.dal.store.jdbc.JDBCConnectionParameters;
63
import org.gvsig.fmap.mapcontext.layers.FLayer;
51 64
import org.gvsig.i18n.Messages;
52 65

  
53 66

  
......
59 72
 */
60 73

  
61 74
public class PostgisLayerLoader extends GvSigLayerLoader{
62
        
63
    public PostgisLayerLoader(Resource resource) {
64
        super(resource);
65
    }
66 75

  
67
    protected boolean hasSpecificLayer() {
68
        return false;
69
    }
76
	public PostgisLayerLoader(Resource resource) {
77
		super(resource);
78
	}
70 79

  
71
    protected String getLayerName() {        
72
        return getResource().getName();
73
    }   
74
    
75
    protected DataStoreParameters createDataStoreParameters()
76
    throws InitializeException, ProviderNotRegisteredException {
77
        String jdbcUrl = getResource().getLinkage();
78
        String table = getResource().getName();
79
        
80
        DataStoreParameters dataStoreParameters = DATA_MANAGER.createStoreParameters("PostgreSQL");
81
        parseParams(dataStoreParameters, jdbcUrl, table);
82
        
83
        return dataStoreParameters;
84
    }
80
	protected boolean hasSpecificLayer() {
81
		return false;
82
	}
85 83

  
86
    private void parseParams(DataStoreParameters dataStoreParameters, String jdbcUrl, String table){
87
        StringTokenizer sti = new StringTokenizer(jdbcUrl,"?");
88
        String dbURL = sti.nextToken();
89
        String p = sti.nextToken();
90
        TreeMap map = separateParams(p);
91
        String user = (String) map.get((String) "USER");
92
        String pwd = (String) map.get((String) "PASSWORD");
93
        map = Strings.separateParams(table);
94
        dataStoreParameters.setDynValue("USER", user);
95
        dataStoreParameters.setDynValue("PASSWORD",pwd);        
96
        dataStoreParameters.setDynValue("WHERECLAUSE","");
97
        dataStoreParameters.setDynValue("DBURL",dbURL);        
98
    }
84
	protected String getLayerName() {        
85
		return getResource().getName();
86
	}   
99 87

  
100
    private TreeMap separateParams(String pairValues){
101
        TreeMap map = new TreeMap(); 
102
        String[] params = pairValues.split("&");
103
        for (int i = 0; i < params.length; i++) {
104
            String[] nameValue = params[i].split("=");
105
            map.put(nameValue[0].toUpperCase(), nameValue[1]);
106
        }
107
        return map;
108
    }
88
	protected DataStoreParameters createDataStoreParameters()
89
			throws InitializeException, ProviderNotRegisteredException {
90
		String jdbcUrl = getResource().getLinkage();
91
		String table = getResource().getName();
109 92

  
110
    /*
111
     *  (non-Javadoc)
112
     * @see es.gva.cit.gvsig.catalogClient.loaders.LayerLoader#getErrorMessage()
113
     */
114
    protected String getErrorMessage() {
115
        return Messages.getText("postgisError") + ".\n" +
116
        Messages.getText("server") + ": " + 
117
        getResource().getLinkage() + "\n" +
118
        Messages.getText("parameters") + ": " +
119
        getResource().getName();
120
    }
93
		DataStoreParameters dataStoreParameters = DATA_MANAGER.createStoreParameters("PostgreSQL");
94
		parseParams(dataStoreParameters, jdbcUrl, table);
121 95

  
122
    /*
123
     *  (non-Javadoc)
124
     * @see es.gva.cit.gvsig.catalogClient.loaders.LayerLoader#getWindowMessage()
125
     */
126
    protected String getWindowMessage() {
127
        return Messages.getText("postgisLoad");
128
    }
96
		return dataStoreParameters;
97
	}
129 98

  
99
	private void parseParams(DataStoreParameters dataStoreParameters, String jdbcUrl, String table){
100
		StringTokenizer sti = new StringTokenizer(jdbcUrl,"?");
101
		String dbURL = sti.nextToken();
102
		String user = "";
103
		String pwd = "";
104
		if(sti.hasMoreTokens()){
105
			String p = sti.nextToken();
130 106

  
107
			TreeMap map = separateParams(p);
108
			user = (String) map.get((String) "USER");
109
			pwd = (String) map.get((String) "PASSWORD");
110
			map = Strings.separateParams(table);
111
			dataStoreParameters.setDynValue("USER", user);
112
			dataStoreParameters.setDynValue("PASSWORD",pwd);        
113
			dataStoreParameters.setDynValue("WHERECLAUSE","");
114
			dataStoreParameters.setDynValue("DBURL",dbURL);   
115
		}else{
116
			if(dbURL.startsWith("jdbc:postgresql://")){
117
				//jdbc:postgresql://test.gvsig.net:7432/gvsig:****@test
118
				try {
119
					URL url = new URL(dbURL.replace("jdbc:postgresql://", "http://"));
120
					if(url != null) {
121
						dataStoreParameters.setDynValue(JDBCConnectionParameters.HOST_PARAMTER_NAME, url.getHost());
122
						dataStoreParameters.setDynValue(JDBCConnectionParameters.PORT_PARAMTER_NAME, url.getPort()+"");
123
						//						/gvsig:****@test
124
						String path = url.getPath();
125
						user = path.substring(1, path.indexOf(":"));
126
						pwd = getCredentials(user);
127

  
128
						String db = path.substring(path.indexOf("@")+1);
129

  
130
						dataStoreParameters.setDynValue(DBParameters.USER_PARAMTER_NAME, user);
131
						dataStoreParameters.setDynValue(DBParameters.PASSWORD_PARAMTER_NAME, pwd);        
132
						dataStoreParameters.setDynValue(JDBCConnectionParameters.DBNAME_PARAMTER_NAME, db);     
133
					}
134
				} catch (MalformedURLException e) {
135
					// TODO Auto-generated catch block
136
					e.printStackTrace();
137
				}
138

  
139
			}
140
		}
141

  
142
		dataStoreParameters.setDynValue("Table", table); 
143
	}
144

  
145
	
146
	
147
	
148
	private String getCredentials(String user) {
149
		JPanel panel = new JPanel();
150
		JLabel label = new JLabel(Messages.getText("password_needed")+" ("+user+"):");
151
		JPasswordField pass = new JPasswordField();
152
		pass.setPreferredSize(new Dimension(150, 25));
153
		panel.add(label);
154
		panel.add(pass);
155
		String[] options = new String[]{Messages.getText("connectButton"), Messages.getText("cancelSearchButton")};
156
		int option = JOptionPane.showOptionDialog(null, panel, Messages.getText("password_needed_title"),
157
				JOptionPane.NO_OPTION, JOptionPane.PLAIN_MESSAGE,
158
				null, options, options[1]);
159
		if(option == 0){
160
			return new String(pass.getPassword());
161
		}
162
		return "";
163
	}
164

  
165
//	public void loadLayer() throws LayerLoaderException {
166
//		FLayer layer;
167
//		try{
168
//			if (hasSpecificLayer()){
169
//				layer = createLayerFromExtensionPoint();       
170
//			}else{
171
//				layer = createLayerFromParameters();                 
172
//			}
173
//			if (layer != null){
174
//				addLayerToView(layer);
175
//			}
176
//		} catch (Exception e) {
177
//			if(e. instanceof SQLNestedException){
178
//				JPanel panel = new JPanel();
179
//				JLabel label = new JLabel("Enter a password:");
180
//				JPasswordField pass = new JPasswordField();
181
//				panel.add(label);
182
//				panel.add(pass);
183
//				String[] options = new String[]{"OK", "Cancel"};
184
//				int option = JOptionPane.showOptionDialog(null, panel, "The title",
185
//						JOptionPane.NO_OPTION, JOptionPane.PLAIN_MESSAGE,
186
//						null, options, options[1]);
187
//				if(option == 0 && !StringUtils.isBlank(new String(pass.getPassword()))){
188
//					String pwd =  new String(pass.getPassword());
189
//					try{
190
//						DataStoreParameters dataStoreParameters = createDataStoreParameters(); 
191
//						dataStoreParameters.setDynValue(DBParameters.PASSWORD_PARAMTER_NAME, pwd);
192
//						MAP_CONTEXT_MANAGER.createLayer(getLayerName(), dataStoreParameters);
193
//					}catch (Exception ex) {
194
//						throw new LayerLoaderException(ex.getMessage(), ex, getWindowMessage());
195
//					} 
196
//				}else{
197
//					throw new LayerLoaderException(e.getMessage(), e, getWindowMessage());
198
//				}
199
//			}else{
200
//				e.printStackTrace();
201
//				throw new LayerLoaderException(e.getMessage(), e, getWindowMessage());
202
//			}
203
//		} 
204
//
205
//	}	
206

  
207
	private TreeMap separateParams(String pairValues){
208
		TreeMap map = new TreeMap(); 
209
		String[] params = pairValues.split("&");
210
		for (int i = 0; i < params.length; i++) {
211
			String[] nameValue = params[i].split("=");
212
			map.put(nameValue[0].toUpperCase(), nameValue[1]);
213
		}
214
		return map;
215
	}
216

  
217
	/*
218
	 *  (non-Javadoc)
219
	 * @see es.gva.cit.gvsig.catalogClient.loaders.LayerLoader#getErrorMessage()
220
	 */
221
	protected String getErrorMessage() {
222
		return Messages.getText("postgisError") + ".\n" +
223
				Messages.getText("server") + ": " + 
224
				getResource().getLinkage() + "\n" +
225
				Messages.getText("parameters") + ": " +
226
				getResource().getName();
227
	}
228

  
229
	/*
230
	 *  (non-Javadoc)
231
	 * @see es.gva.cit.gvsig.catalogClient.loaders.LayerLoader#getWindowMessage()
232
	 */
233
	protected String getWindowMessage() {
234
		return Messages.getText("postgisLoad");
235
	}
236

  
237

  
131 238
}

Also available in: Unified diff