Better event handling for browser preview refreshs
[phpeclipse.git] / archive / net.sourceforge.phpeclipse.wiki / src / net / sourceforge / phpeclipse / wiki / internal / Configuration.java
index 0b2c404..1cadc30 100644 (file)
  * are made available under the terms of the Common Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/cpl-v10.html
- *
+  *
  * Contributors:
  *    IBM - Initial API and implementation
  **********************************************************************/
 package net.sourceforge.phpeclipse.wiki.internal;
 
 import net.sourceforge.phpeclipse.wiki.editor.WikiEditorPlugin;
+import net.sourceforge.phpeclipse.wiki.preferences.UserValidationDialog;
+import net.sourceforge.phpeclipse.wiki.preferences.Util;
 
+import org.eclipse.swt.widgets.Shell;
 
 /**
- * 
+ *  
  */
-public class Configuration implements IConfiguration {
-       private static final String MEMENTO_ID = "id";
-       private static final String MEMENTO_USER = "user";
-       private static final String MEMENTO_URL = "url";
-       private static final String MEMENTO_PASSWORD = "password";
-       private static final String MEMENTO_TYPE_ID = "type-id";
-
-       protected String id;
-       protected String fUrl;
-       protected String fPassword;
-       protected String fUser;
-       protected String fType;
-       
-       public Configuration() {
-         this( WikiEditorPlugin.HTTP_QUERY );  // default type
-       }
-       
-       public Configuration(String type) {
-         this.fType = type;
-       }
-       
-       /* (non-Javadoc)
-        * @see org.eclipse.monitor.internal.IConfiguration#getId()
-        */
-       public String getId() {
-               return id;
-       }
-
-       public String getURL() {
-               return fUrl;
-       }
-
-       /* (non-Javadoc)
-        * @see org.eclipse.monitor.internal.IConfiguration#getRemotePort()
-        */
-       public String getPassword() {
-               return fPassword;
-       }
-
-       /* (non-Javadoc)
-        * @see org.eclipse.monitor.internal.IConfiguration#getLocalPort()
-        */
-       public String getUser() {
-               return fUser;
-       }
-
-       /**
-        */
-       public String getType() {
-               return fType;
-       }
-
-       /* (non-Javadoc)
-        * @see org.eclipse.monitor.internal.IConfiguration#isRunning()
-        */
-       public boolean isActive() {
-               return ConfigurationManager.getInstance().isActive(this);
-       }
-       
-       public void delete() {
-               ConfigurationManager.getInstance().removeConfiguration(this);
-       }
-
-       public boolean isWorkingCopy() {
-               return false;
-       }
-       
-       public IConfigurationWorkingCopy getWorkingCopy() {
-               return new ConfigurationWorkingCopy(this);
-       }
-       
-       protected void setInternal(IConfiguration monitor) {
-               id = monitor.getId();
-               fUrl = monitor.getURL();
-               fPassword = monitor.getPassword();
-               fUser = monitor.getUser();
-               fType = monitor.getType();
-       }
-       
-       protected void save(IMemento memento) {
-               memento.putString(MEMENTO_ID, id);
-               memento.putString(MEMENTO_TYPE_ID, fType);
-               memento.putString(MEMENTO_USER, fUser);
-               memento.putString(MEMENTO_URL, fUrl);
-               memento.putString(MEMENTO_PASSWORD, fPassword);
-       }
-
-       protected void load(IMemento memento) {
-               id = memento.getString(MEMENTO_ID);
-               fType = memento.getString(MEMENTO_TYPE_ID);
-               fUser = memento.getString(MEMENTO_USER);
-               fUrl = memento.getString(MEMENTO_URL);
-               fPassword = memento.getString(MEMENTO_PASSWORD);
-       }
+public class Configuration implements IConfiguration, Comparable {
+  private static final String MEMENTO_ID = "id";
+
+  private static final String MEMENTO_NAME = "name";
+
+  private static final String MEMENTO_USER = "user";
+
+  private static final String MEMENTO_URL = "url";
+
+  private static final String MEMENTO_PASSWORD = "password";
+
+  private static final String MEMENTO_TYPE_ID = "type-id";
+
+  protected String fId = "";
+
+  protected String fName = "";
+
+  protected String fUrl = "";
+
+  protected String fPassword = "";
+
+  protected String fUser = "";
+
+  protected String fType = "";
+
+  private static final char[] SCRAMBLING_TABLE=new char[] {
+       0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
+       16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,
+       114,120,53,79,96,109,72,108,70,64,76,67,116,74,68,87,
+       111,52,75,119,49,34,82,81,95,65,112,86,118,110,122,105,
+       41,57,83,43,46,102,40,89,38,103,45,50,42,123,91,35,
+       125,55,54,66,124,126,59,47,92,71,115,78,88,107,106,56,
+       36,121,117,104,101,100,69,73,99,63,94,93,39,37,61,48,
+       58,113,32,90,44,98,60,51,33,97,62,77,84,80,85,223,
+       225,216,187,166,229,189,222,188,141,249,148,200,184,136,248,190,
+       199,170,181,204,138,232,218,183,255,234,220,247,213,203,226,193,
+       174,172,228,252,217,201,131,230,197,211,145,238,161,179,160,212,
+       207,221,254,173,202,146,224,151,140,196,205,130,135,133,143,246,
+       192,159,244,239,185,168,215,144,139,165,180,157,147,186,214,176,
+       227,231,219,169,175,156,206,198,129,164,150,210,154,177,134,127,
+       182,128,158,208,162,132,167,209,149,241,153,251,237,236,171,195,
+       243,233,253,240,194,250,191,155,142,137,245,235,163,242,178,152
+       };
+  public Configuration() {
+    this(WikiEditorPlugin.HTTP_QUERY); // default type
+  }
+
+  public Configuration(String type) {
+    this.fType = type;
+  }
+
+  public String getId() {
+    return fId;
+  }
+
+  public String getName() {
+    return fName;
+  }
+
+  public String getURL() {
+    return fUrl;
+  }
+
+  public String getPassword() {
+    return fPassword;
+  }
+
+  /*
+   * (non-Javadoc)
+   * 
+   * @see org.eclipse.monitor.internal.IConfiguration#getLocalPort()
+   */
+  public String getUser() {
+    return fUser;
+  }
+
+  /**
+   */
+  public String getType() {
+    return fType;
+  }
+
+  /*
+   * (non-Javadoc)
+   * 
+   * @see org.eclipse.monitor.internal.IConfiguration#isRunning()
+   */
+  public boolean isActive() {
+    return ConfigurationManager.getInstance().isActive(this);
+  }
+
+  public void delete() {
+    ConfigurationManager.getInstance().removeConfiguration(this);
+  }
+
+  public boolean isWorkingCopy() {
+    return false;
+  }
+
+  public IConfigurationWorkingCopy getWorkingCopy() {
+    return new ConfigurationWorkingCopy(this);
+  }
+
+  protected void setInternal(IConfiguration monitor) {
+    fId = monitor.getId();
+    fName = monitor.getName();
+    fUrl = monitor.getURL();
+    fPassword = monitor.getPassword();
+    fUser = monitor.getUser();
+    fType = monitor.getType();
+  }
+
+  protected void save(IMemento memento) {
+    memento.putString(MEMENTO_ID, fId);
+    memento.putString(MEMENTO_NAME, fName);
+    memento.putString(MEMENTO_TYPE_ID, fType);
+    memento.putString(MEMENTO_USER, fUser);
+    memento.putString(MEMENTO_URL, fUrl);
+    String result = 'A'+scramblePassword(fPassword);
+    memento.putString(MEMENTO_PASSWORD, result);
+  }
+
+  protected void load(IMemento memento) {
+    fId = memento.getString(MEMENTO_ID);
+    if (fId == null) {
+      fId = "";
+    }
+    fName = memento.getString(MEMENTO_NAME);
+    if (fName == null) {
+      fName = "";
+    }
+    fType = memento.getString(MEMENTO_TYPE_ID);
+    if (fType == null) {
+      fType = "";
+    }
+    fUser = memento.getString(MEMENTO_USER);
+    if (fUser == null) {
+      fUser = "";
+    }
+    fUrl = memento.getString(MEMENTO_URL);
+    if (fUrl == null) {
+      fUrl = "";
+    }
+    String result = memento.getString(MEMENTO_PASSWORD);
+    
+    if (result == null) {
+      fPassword = "";
+    } else {
+      fPassword = scramblePassword(result.substring(1));
+    }
+  }
+
+  /*
+   * (non-Javadoc)
+   * 
+   * @see java.lang.Object#toString()
+   */
+  public String toString() {
+    StringBuffer buffer = new StringBuffer();
+    buffer.append(fName);
+    buffer.append(" - ");
+    buffer.append(fUser);
+    buffer.append(" - ");
+    buffer.append(fUrl);
+    buffer.append(" - ");
+    buffer.append(fType);
+    return buffer.toString();
+  }
+
+  /*
+   * (non-Javadoc)
+   * 
+   * @see java.lang.Comparable#compareTo(java.lang.Object)
+   */
+  public int compareTo(Object o) {
+    if (o instanceof IConfiguration) {
+      return fName.compareTo(((IConfiguration) o).getName());
+    }
+    return 1;
+  }
+
+  private static String scramblePassword(String password)  {
+    int length = password.length();
+    char[] out = new char[length];
+    for (int i = 0; i < length; i++) {
+      char value = password.charAt(i);
+      out[i] = SCRAMBLING_TABLE[value];
+    }
+    return new String(out);
+  }
+
+  public boolean isUserComplete() {
+    if (fUser==null || fUser.equals("")) {
+      return false;
+    }
+    if (fPassword==null || fPassword.equals("")) {
+      return false;
+    }
+    return true;
+  }
+  /**
+   * Asks the User to enter a Password. Places the results in the supplied string[]. result[0] must contain the username, result[1]
+   * must contain the fPassword. If the fUser canceled, both values must be zero.
+   * 
+   * @param location
+   *          the location to obtain the fPassword for
+   * @param username
+   *          the username
+   * @param message
+   *          a message to display to the fUser
+   * @param userMutable
+   *          whether the fUser can be changed in the dialog
+   * @param result
+   *          a String array of length two in which to put the result
+   */
+  public boolean promptForPassword(final String username, final String message, final boolean userMutable, final String[] result) {
+    if (isUserComplete()) {
+      result[0] = fUser;
+      result[1] = fPassword;
+      return true;
+    }
+    Shell shell = Util.findShell();
+    if (shell == null) {
+      return false;
+    }
+    UserValidationDialog dialog = new UserValidationDialog(shell, fUrl, (username == null) ? "" : username, message);//$NON-NLS-1$
+    dialog.setUsernameMutable(userMutable);
+    dialog.open(); 
+    result[0] = dialog.getUsername();
+    result[1] = dialog.getPassword();
+    if (dialog.getAllowCaching()) {
+      fUser = result[0];
+      fPassword = result[1];
+    }
+    return dialog.getAllowCaching();
+  }
 }
\ No newline at end of file