139 // Instance data |
172 // Instance data |
140 // |
173 // |
141 private ChangeableAggregator aggregator; |
174 private ChangeableAggregator aggregator; |
142 private PasswordPanel passPanel; |
175 private PasswordPanel passPanel; |
143 |
176 |
144 private JLabel userNameLabel; |
177 private MutableProperty<String> descProperty = new StringProperty(); |
145 private JLabel userNameValue; |
178 private MutableProperty<String> groupProperty = new StringProperty(); |
146 private JLabel userDescLabel; |
179 private MutableProperty<String> homeProperty = new StringProperty(); |
147 |
180 private MutableProperty<String> shellProperty = new StringProperty(); |
148 private MutableProperty<String> userDescProperty = |
181 private MutableProperty<Boolean> settingsProperty = new BooleanProperty(); |
149 new StringProperty(); |
182 |
150 private MutableProperty<Boolean> isAdminProperty = |
183 private UserMgrPanelDescriptor descriptor; |
151 new BooleanProperty(); |
|
152 |
184 |
153 // |
185 // |
154 // Constructors |
186 // Constructors |
155 // |
187 // |
156 |
188 |
157 public UserMgrBasicPanel() { |
189 public UserMgrBasicPanel(UserMgrPanelDescriptor descriptor) { |
|
190 this.descriptor = descriptor; |
158 JPanel form = createForm(); |
191 JPanel form = createForm(); |
159 setContent(form, false, false); |
192 setContent(form, false, false); |
160 |
193 |
161 aggregator = getChangeableAggregator(); |
194 aggregator = getChangeableAggregator(); |
162 aggregator.addChangeables(userDescProperty); |
195 aggregator.addChangeables(descProperty); |
163 aggregator.addChangeables(isAdminProperty); |
196 aggregator.addChangeables(groupProperty); |
|
197 aggregator.addChangeables(homeProperty); |
|
198 aggregator.addChangeables(shellProperty); |
|
199 aggregator.addChangeables(settingsProperty); |
164 aggregator.addChangeables(getPassProperty()); |
200 aggregator.addChangeables(getPassProperty()); |
165 aggregator.addChangeables(getPassConfirmProperty()); |
201 aggregator.addChangeables(getPassConfirmProperty()); |
166 } |
202 } |
167 |
203 |
168 // |
204 // |
169 // BasicUserMgrPanel methods |
205 // UserMgrBasicPanel methods |
170 // |
206 // |
171 |
207 |
172 public MutableProperty<String> getUserDescProperty() { |
208 public MutableProperty<String> getDescProperty() { |
173 return userDescProperty; |
209 return descProperty; |
174 } |
210 } |
175 |
211 |
176 public MutableProperty<Boolean> getIsAdminProperty() { |
212 public MutableProperty<String> getGroupProperty() { |
177 return isAdminProperty; |
213 return groupProperty; |
|
214 } |
|
215 |
|
216 public MutableProperty<String> getHomeProperty() { |
|
217 return homeProperty; |
|
218 } |
|
219 |
|
220 public MutableProperty<String> getShellProperty() { |
|
221 return shellProperty; |
|
222 } |
|
223 |
|
224 public MutableProperty<Boolean> getSettingsProperty() { |
|
225 return settingsProperty; |
178 } |
226 } |
179 |
227 |
180 public MutableProperty<char[]> getPassProperty() { |
228 public MutableProperty<char[]> getPassProperty() { |
181 return passPanel.passProperty; |
229 return passPanel.passProperty; |
182 } |
230 } |
183 |
231 |
184 public MutableProperty<char[]> getPassConfirmProperty() { |
232 public MutableProperty<char[]> getPassConfirmProperty() { |
185 return passPanel.passConfirmProperty; |
233 return passPanel.passConfirmProperty; |
186 } |
234 } |
187 |
235 |
188 public void init(UserManagedObject umo) { |
236 public void init(UserMgrPanelDescriptor paneldesc, UserManagedObject umo) { |
189 // Sanity check -- the UI should be updated only on the event thread |
237 // Sanity check -- the UI should be updated only on the event thread |
190 assert EventQueue.isDispatchThread(); |
238 assert EventQueue.isDispatchThread(); |
191 |
239 |
192 // Toggle the labels for roles |
240 |
193 initLabels(umo.isUserNormal()); |
241 this.umo = umo; |
|
242 descriptor = paneldesc; |
194 |
243 |
195 // Set the current and saved values for each property |
244 // Set the current and saved values for each property |
196 userNameValue.setText(umo.getName()); |
245 nameField.setText(umo.getName()); |
197 |
246 Long uidValue = new Long(umo.getUserId()); |
198 userDescProperty.update( |
247 uidField.setText(uidValue.toString()); |
199 umo.getUserDescProperty().getSavedValue(), false); |
248 |
200 isAdminProperty.update(umo.getIsAdminProperty().getSavedValue(), false); |
249 descProperty.update(umo.getUserDescProperty().getSavedValue(), false); |
|
250 descField.setText(umo.getUserDescription()); |
|
251 |
|
252 // group |
|
253 long gid = umo.getGroupId(); |
|
254 String gname = null; |
|
255 long savedGid = umo.getGroupIdProperty().getSavedValue(); |
|
256 String savedGname = null; |
|
257 if (groupCombo.getItemCount() > 0) |
|
258 groupCombo.removeAllItems(); |
|
259 for (Group g : descriptor.getGroups()) { |
|
260 groupCombo.addItem(g.getGroupName()); |
|
261 if (gid == g.getGroupID()) |
|
262 gname = g.getGroupName(); |
|
263 if (savedGid == g.getGroupID()) |
|
264 savedGname = g.getGroupName(); |
|
265 } |
|
266 groupProperty.update(savedGname, false); |
|
267 groupCombo.setSelectedItem(gname); |
|
268 |
|
269 // homedir |
|
270 if (!umo.isNewUser()) { |
|
271 homeField.setText(umo.getHomedir()); |
|
272 } |
|
273 homeProperty.update(umo.getHomeDirProperty().getSavedValue(), false); |
|
274 |
|
275 // shell |
|
276 if (shellCombo.getItemCount() > 0) |
|
277 shellCombo.removeAllItems(); |
|
278 for (String s : descriptor.getShells()) |
|
279 shellCombo.addItem(s); |
|
280 shellProperty.update(umo.getShellProperty().getSavedValue(), false); |
|
281 shellCombo.setSelectedItem(umo.getShell()); |
|
282 |
|
283 // Password |
201 getPassProperty().update(umo.getPassProperty().getSavedValue(), false); |
284 getPassProperty().update(umo.getPassProperty().getSavedValue(), false); |
202 getPassConfirmProperty().update( |
285 getPassConfirmProperty().update( |
203 umo.getPassProperty().getSavedValue(), false); |
286 umo.getPassProperty().getSavedValue(), false); |
204 |
287 |
205 passPanel.setCollapsed(!getPassProperty().isChanged()); |
288 if (umo.hasPassword()) { |
|
289 changepassStr = Finder.getString("usermgr.basic.label.changepass"); |
|
290 } else { |
|
291 changepassStr = Finder.getString("usermgr.basic.label.initialpass"); |
|
292 } |
|
293 |
|
294 passPanel.setCollapsed(true); |
|
295 |
|
296 settingsProperty.update(false, true); |
206 } |
297 } |
207 |
298 |
208 // |
299 // |
209 // Private methods |
300 // Private methods |
210 // |
301 // |
211 |
302 |
212 private JPanel createForm() { |
303 private JPanel createForm() { |
213 // Create the form elements |
304 JPanel form = new JPanel(new GridBagLayout()); |
214 // User name - Readonly |
305 GridBagConstraints gbc = new GridBagConstraints(); |
215 userNameLabel = new JLabel(); |
306 int width = GUIUtil.getTextFieldWidth(); |
216 userNameValue = new JLabel(); |
307 int hGap = GUIUtil.getHalfGap(); |
217 |
308 |
218 // User Description |
309 gbc.weightx = 1.0; |
219 userDescLabel = new JLabel(); |
310 gbc.anchor = GridBagConstraints.LINE_START; |
220 JTextField userDescField = GUIUtil.createTextField(); |
311 gbc.fill = GridBagConstraints.NONE; |
|
312 gbc.insets = new Insets(0, 0, hGap, hGap); |
|
313 |
|
314 // User name |
|
315 actString = new ActionString("usermgr.basic.name." + |
|
316 descriptor.getTypeString()); |
|
317 nameLabel = new JLabel(actString.getString()); |
|
318 |
|
319 nameField = new JLabel(); |
|
320 |
|
321 // Add to the layout |
|
322 gbc.gridx = 0; |
|
323 gbc.gridy = 0; |
|
324 form.add(nameLabel, gbc); |
|
325 gbc.gridx = GridBagConstraints.RELATIVE; |
|
326 form.add(nameField, gbc); |
|
327 form.add(new Spacer(), gbc); |
|
328 |
|
329 // Description |
|
330 actString = new ActionString("usermgr.basic.desc." + |
|
331 descriptor.getTypeString()); |
|
332 descLabel = new JLabel(actString.getString()); |
|
333 descLabel.setDisplayedMnemonic(actString.getMnemonic()); |
|
334 descField = GUIUtil.createTextField(); |
221 new TextComponentPropertySynchronizer<String, JTextField>( |
335 new TextComponentPropertySynchronizer<String, JTextField>( |
222 userDescProperty, userDescField); |
336 descProperty, descField); |
223 ChangeIndicator userDescChange = new ChangeIndicator(); |
337 ChangeIndicator descChange = new ChangeIndicator(); |
224 userDescProperty.addChangeListener(userDescChange); |
338 descProperty.addChangeListener(descChange); |
225 |
339 |
226 // Is Administrator |
340 // Connect the label to the field |
227 JCheckBox isAdminCheckBox = new JCheckBox( |
341 descLabel.setLabelFor(descField); |
228 Finder.getString("usermgr.basic.label.enableadmin")); |
342 |
229 new CheckBoxPropertySynchronizer( |
343 // Add to the layout |
230 isAdminProperty, isAdminCheckBox); |
344 gbc.gridx = 0; |
231 ChangeIndicator isAdminChange = new ChangeIndicator(); |
345 gbc.gridy++; // next row |
232 isAdminProperty.addChangeListener(isAdminChange); |
346 form.add(descLabel, gbc); |
233 isAdminCheckBox.setSelected(false); |
347 gbc.gridx = GridBagConstraints.RELATIVE; |
234 |
348 form.add(descField, gbc); |
235 // Create the form and add the form elements |
349 form.add(descChange, gbc); |
236 JPanel formPanel = new JPanel(); |
350 |
237 formPanel.setOpaque(false); |
351 // User ID |
238 Form form = new Form(formPanel, VerticalAnchor.TOP); |
352 actString = new ActionString("usermgr.basic.uid." + |
239 |
353 descriptor.getTypeString()); |
|
354 uidLabel = new JLabel(actString.getString()); |
|
355 uidField = new JLabel(); |
|
356 |
|
357 // Add to the layout |
|
358 gbc.gridx = 0; |
|
359 gbc.gridy++; // next row |
|
360 form.add(uidLabel, gbc); |
|
361 gbc.gridx = GridBagConstraints.RELATIVE; |
|
362 form.add(uidField, gbc); |
|
363 form.add(new Spacer(), gbc); |
|
364 |
|
365 // Group Name |
|
366 actString = new ActionString("usermgr.basic.label.group"); |
|
367 JLabel groupLabel = new JLabel(actString.getString()); |
|
368 groupLabel.setDisplayedMnemonic(actString.getMnemonic()); |
|
369 groupCombo = new JComboBox(); |
|
370 new ComboBoxPropertySynchronizer<String>(groupProperty, groupCombo); |
|
371 |
|
372 for (Group g : descriptor.getGroups()) { |
|
373 groupCombo.addItem(g.getGroupName()); |
|
374 } |
|
375 ChangeIndicator groupChange = new ChangeIndicator(); |
|
376 groupProperty.addChangeListener(groupChange); |
|
377 |
|
378 // Connect the label to the field |
|
379 groupLabel.setLabelFor(groupCombo); |
|
380 |
|
381 gbc.gridx = 0; |
|
382 gbc.gridy++; // next row |
|
383 form.add(groupLabel, gbc); |
|
384 gbc.gridx = GridBagConstraints.RELATIVE; |
|
385 form.add(groupCombo, gbc); |
|
386 form.add(groupChange, gbc); |
|
387 |
|
388 // Home Directory |
|
389 actString = new ActionString("usermgr.basic.label.home"); |
|
390 JLabel homeLabel = new JLabel(actString.getString()); |
|
391 homeLabel.setDisplayedMnemonic(actString.getMnemonic()); |
|
392 |
|
393 homeField = new HintTextField(width); |
|
394 homeField.setHintText(Finder.getString("usermgr.new.value.auto")); |
|
395 new HintTextPropertySynchronizer<String>(homeProperty, homeField, ""); |
|
396 |
|
397 ChangeIndicator homeChange = new ChangeIndicator(); |
|
398 homeProperty.addChangeListener(homeChange); |
|
399 |
|
400 // Connect the label to the field |
|
401 homeLabel.setLabelFor(homeField); |
|
402 |
|
403 // Add to the layout |
|
404 gbc.gridx = 0; |
|
405 gbc.gridy++; // next row |
|
406 form.add(homeLabel, gbc); |
|
407 gbc.gridx = GridBagConstraints.RELATIVE; |
|
408 form.add(homeField, gbc); |
|
409 form.add(homeChange, gbc); |
|
410 |
|
411 // Login Shell |
|
412 actString = new ActionString("usermgr.basic.label.shell"); |
|
413 JLabel shellLabel = new JLabel(actString.getString()); |
|
414 shellLabel.setDisplayedMnemonic(actString.getMnemonic()); |
|
415 shellCombo = new JComboBox(); |
|
416 new ComboBoxPropertySynchronizer<String>(shellProperty, shellCombo); |
|
417 for (String s : descriptor.getShells()) |
|
418 shellCombo.addItem(s); |
|
419 ChangeIndicator shellChange = new ChangeIndicator(); |
|
420 shellProperty.addChangeListener(shellChange); |
|
421 |
|
422 // Connect the label to the field |
|
423 shellLabel.setLabelFor(shellCombo); |
|
424 |
|
425 gbc.gridx = 0; |
|
426 gbc.gridy++; // next row |
|
427 form.add(shellLabel, gbc); |
|
428 gbc.gridx = GridBagConstraints.RELATIVE; |
|
429 form.add(shellCombo, gbc); |
|
430 form.add(shellChange, gbc); |
|
431 |
|
432 // Change Password |
|
433 gbc.gridx = 0; |
|
434 gbc.gridy++; // next row |
|
435 gbc.weightx = 0.0; |
|
436 gbc.gridwidth = GridBagConstraints.REMAINDER; |
240 passPanel = new PasswordPanel(); |
437 passPanel = new PasswordPanel(); |
241 |
438 form.add(passPanel, gbc); |
242 int hGap = GUIUtil.getHalfGap(); |
439 |
243 ColumnLayoutConstraint col = new ColumnLayoutConstraint( |
440 // Advanced Settings |
244 HorizontalAnchor.FILL, hGap); |
441 actString = new ActionString("usermgr.advanced.settings"); |
245 RowLayoutConstraint row = new RowLayoutConstraint( |
442 JButton advSettings = new JButton(actString.getString()); |
246 VerticalAnchor.CENTER, hGap); |
443 advSettings.setActionCommand(ACTION_ADV_SETTINGS); |
247 HasAnchors a = new SimpleHasAnchors( |
444 advSettings.addActionListener(this); |
248 HorizontalAnchor.LEFT, VerticalAnchor.CENTER); |
445 advSettings.setMnemonic(actString.getMnemonic()); |
249 |
446 settingsChange = new ChangeIndicator(); |
250 form.addTable(3, hGap, hGap*2, HorizontalAnchor.LEFT, col); |
447 settingsProperty.addChangeListener(settingsChange); |
251 |
448 |
252 form.add(userNameLabel, a); |
449 // Add to the layout |
253 form.add(userNameValue, a); |
450 gbc.gridx = 0; |
254 form.add(new Spacer(), a); |
451 gbc.gridy++; |
255 |
452 gbc.gridwidth = 1; // GridBagConstraints.RELATIVE; |
256 form.add(userDescLabel, a); |
453 gbc.weighty = 1.0; |
257 form.add(userDescField, a); |
454 gbc.anchor = GridBagConstraints.LAST_LINE_START; |
258 form.add(userDescChange, a); |
455 form.add(advSettings, gbc); |
259 |
456 gbc.gridx = GridBagConstraints.RELATIVE; |
260 form.addRow(HorizontalAnchor.LEFT, col); |
457 gbc.gridwidth = 0; |
261 form.add(isAdminCheckBox, row); |
458 form.add(settingsChange, gbc); |
262 form.add(isAdminChange, row); |
459 |
263 |
460 return form; |
264 form.addRow(HorizontalAnchor.LEFT, col); |
461 } |
265 form.add(passPanel); |
462 |
266 |
463 /** |
267 return formPanel; |
464 * ActionListener for Advanced Settings |
268 } |
465 */ |
269 |
466 @Override |
270 private void initLabels(boolean bNormalUser) { |
467 public void actionPerformed(ActionEvent e) { |
271 if (bNormalUser) { |
468 String actionCmd = e.getActionCommand(); |
272 // Normal user |
469 if (actionCmd == ACTION_ADV_SETTINGS) { |
273 userNameLabel.setText( |
470 if (advDialog == null || |
274 Finder.getString("usermgr.basic.label.username")); |
471 descriptor.isTypeRole() != advDialog.isTypeRole()) { |
275 userDescLabel.setText( |
472 advDialog = new AdvancedSettingsDialog(this, |
276 Finder.getString("usermgr.basic.label.userdesc")); |
473 descriptor, umo); |
277 } else { |
474 } else { |
278 // Role |
475 advDialog.setUser(umo); |
279 userNameLabel.setText( |
476 } |
280 Finder.getString("usermgr.basic.label.rolename")); |
477 advDialog.show(); |
281 userDescLabel.setText( |
478 if (advDialog.getValue() == JOptionPane.OK_OPTION) { |
282 Finder.getString("usermgr.basic.label.roledesc")); |
479 advDialog.update(); |
283 } |
480 settingsProperty.setValue(advDialog.isChanged()); |
|
481 } |
|
482 } |
|
483 } |
|
484 |
|
485 /** |
|
486 * Clear the advanced settings change state. |
|
487 */ |
|
488 public void clearChanges() { |
|
489 settingsProperty.update(false, true); |
284 } |
490 } |
285 } |
491 } |