bug TDI-23200:'#' Character in Password does not work

git-svn-id: http://talendforge.org/svn/tos/trunk@93152 f6f1c999-d317-4740-80b0-e6d1abc6f99e
This commit is contained in:
plv
2012-11-02 02:51:22 +00:00
parent 3b98a3cc10
commit c08589d2f0
3 changed files with 249 additions and 117 deletions

View File

@@ -13,10 +13,13 @@
package org.talend.core.model.general;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import org.talend.commons.ui.runtime.exception.ExceptionHandler;
import org.talend.core.runtime.i18n.Messages;
import org.talend.json.JSONException;
import org.talend.json.JSONObject;
import org.talend.repository.model.RepositoryConstants;
/**
@@ -31,21 +34,23 @@ public class ConnectionBean implements Cloneable {
private static final String FIELDS_SEPARATOR = "#"; //$NON-NLS-1$
private String repositoryId;
private static final String ID = "id"; //$NON-NLS-1$
private String name;
private static final String DESCRIPTION = "description"; //$NON-NLS-1$
private String description;
private static final String NAME = "name"; //$NON-NLS-1$
private String user;
private static final String PASSWORD = "password"; //$NON-NLS-1$
private String password;
private static final String USER = "user"; //$NON-NLS-1$
private Map<String, String> dynamicFields = new HashMap<String, String>();
private static final String WORKSPACE = "workSpace"; //$NON-NLS-1$
private boolean complete;
private static final String DYNAMICFIELDS = "dynamicFields"; //$NON-NLS-1$
private String workSpace;
private static final String COMPLETE = "complete"; //$NON-NLS-1$
JSONObject conDetails = new JSONObject();
/**
* DOC smallet ConnectionBean constructor comment.
@@ -73,12 +78,33 @@ public class ConnectionBean implements Cloneable {
return newConnection;
}
/**
* Getter for ID.
*
* @return the ID
*/
public String getRepositoryId() {
return this.repositoryId;
try {
if (conDetails.has(ID)) {
return conDetails.getString(ID);
}
} catch (JSONException e) {
//
}
return "";
}
/**
* Sets the ID.
*
* @param id the id to set
*/
public void setRepositoryId(String repositoryId) {
this.repositoryId = repositoryId;
try {
conDetails.put(ID, repositoryId);
} catch (JSONException e) {
//
}
}
/**
@@ -87,7 +113,14 @@ public class ConnectionBean implements Cloneable {
* @return the description
*/
public String getDescription() {
return this.description;
try {
if (conDetails.has(DESCRIPTION)) {
return conDetails.getString(DESCRIPTION);
}
} catch (JSONException e) {
//
}
return "";
}
/**
@@ -96,7 +129,11 @@ public class ConnectionBean implements Cloneable {
* @param description the description to set
*/
public void setDescription(String description) {
this.description = description;
try {
conDetails.put(DESCRIPTION, description);
} catch (JSONException e) {
//
}
}
/**
@@ -105,7 +142,14 @@ public class ConnectionBean implements Cloneable {
* @return the name
*/
public String getName() {
return this.name;
try {
if (conDetails.has(NAME)) {
return conDetails.getString(NAME);
}
} catch (JSONException e) {
//
}
return "";
}
/**
@@ -114,7 +158,11 @@ public class ConnectionBean implements Cloneable {
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
try {
conDetails.put(NAME, name);
} catch (JSONException e) {
//
}
}
/**
@@ -123,7 +171,14 @@ public class ConnectionBean implements Cloneable {
* @return the password
*/
public String getPassword() {
return this.password;
try {
if (conDetails.has(PASSWORD)) {
return conDetails.getString(PASSWORD);
}
} catch (JSONException e) {
//
}
return "";
}
/**
@@ -132,7 +187,11 @@ public class ConnectionBean implements Cloneable {
* @param password the password to set
*/
public void setPassword(String password) {
this.password = password;
try {
conDetails.put(PASSWORD, password);
} catch (JSONException e) {
//
}
}
/**
@@ -141,7 +200,14 @@ public class ConnectionBean implements Cloneable {
* @return the user
*/
public String getUser() {
return this.user;
try {
if (conDetails.has(USER)) {
return conDetails.getString(USER);
}
} catch (JSONException e) {
//
}
return "";
}
/**
@@ -150,7 +216,11 @@ public class ConnectionBean implements Cloneable {
* @param user the user to set
*/
public void setUser(String user) {
this.user = user;
try {
conDetails.put(USER, user);
} catch (JSONException e) {
//
}
}
/**
@@ -159,10 +229,14 @@ public class ConnectionBean implements Cloneable {
* @return the workSpace
*/
public String getWorkSpace() {
if (this.workSpace == null) {
return ""; //$NON-NLS-1$
try {
if (conDetails.has(WORKSPACE)) {
return conDetails.getString(WORKSPACE);
}
} catch (JSONException e) {
//
}
return this.workSpace;
return "";
}
/**
@@ -171,65 +245,72 @@ public class ConnectionBean implements Cloneable {
* @param workSpace the workSpace to set
*/
public void setWorkSpace(String workSpace) {
this.workSpace = workSpace;
try {
conDetails.put(WORKSPACE, workSpace);
} catch (JSONException e) {
//
}
}
public Map<String, String> getDynamicFields() {
return this.dynamicFields;
Map<String, String> dynamicFields = new HashMap<String, String>();
try {
if (conDetails.has(DYNAMICFIELDS)) {
Object object = conDetails.get(DYNAMICFIELDS);
if (object instanceof JSONObject) {
JSONObject dynamicJson = (JSONObject) object;
Iterator sortedKeys = dynamicJson.sortedKeys();
while (sortedKeys.hasNext()) {
String key = (String) sortedKeys.next();
String value = dynamicJson.getString(key);
dynamicFields.put(key, value);
}
}
}
} catch (JSONException e) {
}
return dynamicFields;
}
public void setDynamicFields(Map<String, String> dynamicFields) {
this.dynamicFields = dynamicFields;
try {
JSONObject dynamicJson = new JSONObject();
for (String key : dynamicFields.keySet()) {
dynamicJson.put(key, dynamicFields.get(key));
}
conDetails.put(DYNAMICFIELDS, dynamicJson);
} catch (JSONException e) {
//
}
}
public boolean isComplete() {
return this.complete;
try {
if (conDetails.has(COMPLETE)) {
return (Boolean) conDetails.get(COMPLETE);
}
} catch (JSONException e) {
//
}
return false;
}
public void setComplete(boolean complete) {
this.complete = complete;
try {
conDetails.put(COMPLETE, complete);
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public ConnectionBean clone() throws CloneNotSupportedException {
ConnectionBean object = (ConnectionBean) super.clone();
object.setDynamicFields(new HashMap<String, String>(this.dynamicFields));
return object;
return writeFromJSON(this.getConDetails());
}
@Override
public String toString() {
StringBuffer string = new StringBuffer("Repository:" + getRepositoryId() + ", Name:" + getName() //$NON-NLS-1$ //$NON-NLS-2$
+ ", Desription:" + getDescription() + ", User:" + getUser() + ", Password:" + getPassword() //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ ", WorkSpace:" + getWorkSpace() + ", Complete:" + isComplete()); //$NON-NLS-1$//$NON-NLS-1$ //$NON-NLS-2$
string.append(", Dyn:").append(dynamicFields); //$NON-NLS-1$
return string.toString();
}
public String readToString() {
StringBuffer fields = new StringBuffer(256);
fields.append(assertValue(getRepositoryId()));
fields.append(FIELDS_SEPARATOR);
fields.append(assertValue(getName()));
fields.append(FIELDS_SEPARATOR);
fields.append(assertValue(getDescription()));
fields.append(FIELDS_SEPARATOR);
fields.append(assertValue(getUser()));
fields.append(FIELDS_SEPARATOR);
fields.append(assertValue(getPassword()));
fields.append(FIELDS_SEPARATOR);
fields.append(assertValue(getWorkSpace()));
fields.append(FIELDS_SEPARATOR);
fields.append(isComplete());
if (dynamicFields.size() > 0) {
for (String current : dynamicFields.keySet()) {
fields.append(FIELDS_SEPARATOR);
fields.append(current + DYN_FIELDS_SEPARATOR + dynamicFields.get(current));
}
}
return fields.toString();
return this.getConDetails().toString();
}
public static ConnectionBean writeFromString(String s) {
@@ -244,41 +325,28 @@ public class ConnectionBean implements Cloneable {
toReturn.setPassword(st[i++]);
toReturn.setWorkSpace(st[i++]);
toReturn.setComplete(new Boolean(st[i++]));
JSONObject dynamicJson = new JSONObject();
toReturn.getConDetails().put(DYNAMICFIELDS, dynamicJson);
while (i < st.length) {
String[] st2 = st[i++].split(DYN_FIELDS_SEPARATOR, -1);
toReturn.getDynamicFields().put(st2[0], st2[1]);
dynamicJson.put(st2[0], st2[1]);
}
} catch (ArrayIndexOutOfBoundsException e) {
// e.printStackTrace();
ExceptionHandler.process(e);
} catch (JSONException e) {
ExceptionHandler.process(e);
}
return toReturn;
}
// public static void main(String[] args) {
// ConnectionBean tt = new ConnectionBean();
// tt.setName("tagada");
// System.out.println(tt);
// tt.setDescription("MyDesc");
// tt.setUser("smallet@talend.com");
// tt.setPassword("");
// tt.getDynamicFields().put("DbLogin", "root");
// tt.getDynamicFields().put("DbPassword", "toor");
// String test2 = tt.readToString();
// ConnectionBean bean2 = writeFromString(test2);
// System.out.println(bean2 + " (" + test2 + ")");
// }
/**
*
* DOC ggu Comment method "assertValue".
*/
private String assertValue(final String value) {
if (value == null) {
return ""; //$NON-NLS-1$
public static ConnectionBean writeFromJSON(JSONObject json) {
ConnectionBean toReturn = new ConnectionBean();
try {
toReturn.setConDetails(new JSONObject(json.toString()));
} catch (JSONException e) {
//
}
return value;
return toReturn;
}
@Override
@@ -289,8 +357,17 @@ public class ConnectionBean implements Cloneable {
if (!(obj instanceof ConnectionBean)) {
return false;
}
ConnectionBean other = (ConnectionBean) obj;
return this.readToString().equals(((ConnectionBean) obj).readToString());
return this.getConDetails().toString().equals(other.getConDetails().toString());
}
public JSONObject getConDetails() {
return conDetails;
}
public void setConDetails(JSONObject conDetails) {
this.conDetails = conDetails;
}
}

View File

@@ -22,6 +22,9 @@ import org.eclipse.jface.preference.IPersistentPreferenceStore;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.ui.PlatformUI;
import org.talend.core.model.general.ConnectionBean;
import org.talend.json.JSONArray;
import org.talend.json.JSONException;
import org.talend.json.JSONObject;
/**
* Used to store connections / users for the login dialog <br/>
@@ -31,6 +34,8 @@ import org.talend.core.model.general.ConnectionBean;
*/
public final class PreferenceManipulator implements ITalendCorePrefConstants {
private static final String JSON_CONNECTIONS = "Connections.new";
private static final String PREF_DELIMITER = "|"; //$NON-NLS-1$
/** The preference store manipulated. */
@@ -74,14 +79,28 @@ public final class PreferenceManipulator implements ITalendCorePrefConstants {
return array;
}
private List<String> readStringList(final String prefName) {
private JSONArray readJsonArray(final String prefName) {
String prefs = store.getString(prefName);
List<String> strings = new ArrayList<String>();
StringTokenizer st = new StringTokenizer(prefs, PREF_DELIMITER);
while (st.hasMoreTokens()) {
strings.add(st.nextToken());
}
if (prefs != null) {
try {
return new JSONArray(prefs);
} catch (JSONException e) {
//
}
}
return new JSONArray();
}
private List<String> readStringList(final String prefName) {
List<String> strings = new ArrayList<String>();
String prefs = store.getString(prefName);
if (prefs != null) {
StringTokenizer st = new StringTokenizer(prefs, PREF_DELIMITER);
while (st.hasMoreTokens()) {
strings.add(st.nextToken());
}
}
return strings;
}
@@ -103,6 +122,11 @@ public final class PreferenceManipulator implements ITalendCorePrefConstants {
save();
}
private void saveJsonArray(final JSONArray prefArray, String prefName) {
store.setValue(prefName, prefArray.toString());
save();
}
/**
* Add a string to an array preference.
*
@@ -128,20 +152,34 @@ public final class PreferenceManipulator implements ITalendCorePrefConstants {
for (String currentConnectionToLoad : readStringArray(CONNECTIONS)) {
toReturn.add(ConnectionBean.writeFromString(currentConnectionToLoad));
}
store.setValue(CONNECTIONS, "");
JSONArray jsonArray = readJsonArray(JSON_CONNECTIONS);
for (int i = 0; i < jsonArray.length(); i++) {
try {
Object object = jsonArray.get(i);
if (object instanceof JSONObject) {
toReturn.add(ConnectionBean.writeFromJSON((JSONObject) object));
}
} catch (JSONException e) {
//
}
}
return toReturn;
}
public void saveConnections(List<ConnectionBean> cons) {
String[] prefArray = new String[cons.size()];
int i = 0;
JSONArray array = new JSONArray();
for (ConnectionBean currentConnection : cons) {
prefArray[i++] = currentConnection.readToString();
array.put(currentConnection.getConDetails());
}
saveStringArray(prefArray, CONNECTIONS);
saveJsonArray(array, JSON_CONNECTIONS);
}
public void addConnection(ConnectionBean con) {
addStringToArray(con.readToString(), CONNECTIONS);
JSONArray array = new JSONArray();
array.put(con.getConDetails());
saveJsonArray(array, JSON_CONNECTIONS);
}
/**

View File

@@ -30,7 +30,11 @@ import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.adaptor.LocationManager;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.ui.PlatformUI;
import org.talend.commons.ui.runtime.exception.ExceptionHandler;
import org.talend.core.model.general.ConnectionBean;
import org.talend.json.JSONArray;
import org.talend.json.JSONException;
import org.talend.json.JSONObject;
/**
* DOC hwang class global comment. Detailled comment
@@ -89,22 +93,35 @@ public class ConnectionUserPerReader {
* @throws DocumentException
*/
public List<ConnectionBean> readConnections() {
if (!isRead)
if (!isRead) {
this.readProperties();
}
List<ConnectionBean> toReturn = new ArrayList<ConnectionBean>();
String userString = proper.getProperty("connection.users"); //$NON-NLS-1$
if (userString == null) {
userString = "";//$NON-NLS-1$
return new ArrayList<ConnectionBean>(0);
} else {
if (userString != null) {
String[] users = userString.split("\\|");//$NON-NLS-1$
List<ConnectionBean> toReturn = new ArrayList<ConnectionBean>(users.length);
for (String usr : users) {
ConnectionBean conBean = ConnectionBean.writeFromString(proper.getProperty(usr));
toReturn.add(conBean);
}
return toReturn;
// FIXME
proper.remove("connection.users");
}
try {
String jsonString = proper.getProperty("connection.define"); //$NON-NLS-1$
if (jsonString != null) {
JSONArray users = new JSONArray(jsonString);
for (int i = 0; i < users.length(); i++) {
JSONObject user = users.getJSONObject(i);
ConnectionBean conBean = ConnectionBean.writeFromJSON(user);
toReturn.add(conBean);
}
}
} catch (JSONException e) {
ExceptionHandler.process(e);
}
return toReturn;
}
private ConnectionUserPerReader readProperties() {
@@ -151,23 +168,23 @@ public class ConnectionUserPerReader {
createPropertyFile();
if (!isRead)
this.readProperties();
StringBuilder sb = new StringBuilder();
int i = 0;
if (cons == null || cons.size() == 0) {
proper.remove("connection.users");//$NON-NLS-1$
} else {
JSONArray usersJsonArray = new JSONArray();
for (ConnectionBean currentConnection : cons) {
String userName = currentConnection.getName();
if (i != 0 && userName != null) {
sb.append("|");//$NON-NLS-1$
}
if (userName != null)
sb.append(userName);
proper.setProperty(userName, currentConnection.readToString());
i++;
// String userName = currentConnection.getName();
// if (i != 0 && userName != null) {
// sb.append("|");//$NON-NLS-1$
// }
// if (userName != null) {
JSONObject userJson = currentConnection.getConDetails();
// proper.setProperty(userName, userJson.toString());
usersJsonArray.put(userJson);
// }
}
proper.setProperty("connection.users", sb.toString());//$NON-NLS-1$
//proper.setProperty("connection.users", sb.toString());//$NON-NLS-1$
proper.setProperty("connection.define", usersJsonArray.toString());//$NON-NLS-1$
}
try {