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