1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License, Version 1.0 only 6 * (the "License"). You may not use this file except in compliance 7 * with the License. 8 * 9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10 * or http://www.opensolaris.org/os/licensing. 11 * See the License for the specific language governing permissions 12 * and limitations under the License. 13 * 14 * When distributing Covered Code, include this CDDL HEADER in each 15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16 * If applicable, add the following below this CDDL HEADER, with the 17 * fields enclosed by brackets "[]" replaced with your own identifying 18 * information: Portions Copyright [yyyy] [name of copyright owner] 19 * 20 * CDDL HEADER END 21 */ 22 /* 23 * ident "%Z%%M% %I% %E% SMI" 24 * 25 * Copyright 2005 Sun Microsystems, Inc. All rights reserved. 26 * Use is subject to license terms. 27 */ 28 29 /** 30 * GUI interface for Kerberos KDC 31 */ 32 33 // Java Workshop stuff 34 import sunsoft.jws.visual.rt.base.*; 35 import sunsoft.jws.visual.rt.base.Global; 36 import sunsoft.jws.visual.rt.awt.TabbedFolder; 37 import sunsoft.jws.visual.rt.awt.TextList; 38 import sunsoft.jws.visual.rt.awt.StringVector; 39 import sunsoft.jws.visual.rt.shadow.java.awt.*; 40 41 // Regular JDK stuff 42 import java.awt.*; 43 import java.awt.event.*; 44 import java.util.EventListener; 45 import java.util.Properties; 46 import java.util.Vector; 47 import java.util.Random; 48 import java.util.StringTokenizer; 49 import java.io.IOException; 50 import java.io.File; 51 import java.io.InputStream; 52 import java.net.URL; 53 54 // Stuff to support I18N 55 import java.util.Date; 56 import java.util.Calendar; 57 import java.util.GregorianCalendar; 58 import java.util.Locale; 59 import java.text.DateFormat; 60 import java.text.ParseException; 61 import java.text.DateFormatSymbols; 62 import java.text.NumberFormat; 63 import java.util.ResourceBundle; 64 import java.util.ListResourceBundle; 65 import java.util.MissingResourceException; 66 import java.util.Enumeration; 67 68 public class KdcGui extends Group { 69 70 // Basics 71 private KdcGuiRoot gui; 72 private Krb5Conf kc; 73 private Principal prin = null; 74 private Policy pol = null; 75 private Defaults defaults = null; 76 private Defaults olddefaults = null; 77 public Frame defaultsEditingFrame = null; // public since used 78 // by ContextHelp class 79 public Frame realMainFrame = null; 80 public Frame realLoginFrame = null; 81 82 public Kadmin Kadmin = null; 83 84 // Privileges stuff: corresponds to ADMCIL set in kdc.conf 85 public int privs = 0; 86 public static final int PRIV_ADD = 0x02; // KADM5_PRIV_ADD 87 public static final int PRIV_DELETE = 0x08; // KADM5_PRIV_DELETE 88 public static final int PRIV_MODIFY = 0x04; // KADM5_PRIV_MODIFY 89 public static final int PRIV_CHANGEPW = 0x20; // KADM5_PRIV_CPW 90 public static final int PRIV_INQUIRE = 0x01; // KADM5_PRIV_GET 91 public static final int PRIV_LIST = 0x10; // KADM5_PRIV_LIST 92 public boolean noLists = false; 93 94 // For modal warning dialog and context-sensitive help dialog 95 private Dialog dialog; 96 public ContextHelp cHelp = null; // tweaked from ContextHelp when 97 // it is dismissed 98 99 private static Toolkit toolkit; 100 101 // For showDataFormatError() to determine what kind of error to show 102 103 public static final int DURATION_DATA = 1; 104 public static final int DATE_DATA = 2; 105 public static final int NUMBER_DATA = 3; 106 107 private static String[] durationErrorText = null; 108 private static String[] dateErrorText = null; 109 private static String[] numberErrorText = null; 110 111 // For date & time helper dialogs 112 private DateTimeDialog dateTimeDialog = null; 113 private DurationHelper durationHelper = null; 114 115 // For the encryption list helper dialog 116 private EncListDialog encListDialog = null; 117 118 // Important defaults and current settings 119 private String DefName = null; 120 private String DefRealm = null; 121 private String DefServer = null; 122 private String DefPort = "0"; 123 private String CurName, CurPass, CurRealm, CurServer; 124 private int CurPort; 125 private String CurPrincipal; 126 private String CurPolicy; 127 private String curPrPattern = ""; 128 private String curPoPattern = ""; 129 private int curPrListPos = 0; 130 private int curPoListPos = 0; 131 private String[] principalList = null; 132 private Date principalListDate = new Date(0); 133 private String[] policyList = null; 134 private Date policyListDate = new Date(0); 135 private static final long A_LONG_TIME = 1000 * 60 * 60 * 24 * 365; 136 137 // General state variables 138 private boolean prSelValid = false; 139 private String[] prMulti = null; 140 private boolean prNeedSave = false; 141 private boolean poSelValid = false; 142 private String[] poMulti = null; 143 private boolean poNeedSave = false; 144 private boolean glNeedSave = false; 145 private boolean firsttime = true; 146 private boolean prnameEditable = false; 147 private boolean ponameEditable = false; 148 149 // Support for context-sensitive help 150 private static final int BUTTON_ACTION = 1; 151 private static final int BUTTON_MOUSE = 2; 152 private static final int TEXTFIELD_ACTION = 3; 153 private static final int TEXTFIELD_MOUSE = 4; 154 private static final int TEXTFIELD_KEY = 5; 155 private static final int CHOICE_ITEM = 6; 156 private static final int CHOICE_MOUSE = 7; 157 private static final int CHECKBOX_ITEM = 8; 158 private static final int CHECKBOX_MOUSE = 9; 159 private static final int LABEL_MOUSE = 10; 160 private static final int WINDOW_LISTENER = 11; 161 162 private boolean loginListeners = false; 163 private Vector LoginNormal = null; 164 private Vector LoginHelp = null; 165 private Vector LoginFixers = null; 166 private Vector MainNormal = null; 167 private Vector MainHelp = null; 168 private Vector MainFixers = null; 169 private Vector defaultsNormal = null; 170 private Vector defaultsHelp = null; 171 private Vector defaultsFixers = null; 172 public boolean loginHelpMode = false; 173 public boolean mainHelpMode = false; 174 public boolean defaultsHelpMode = false; 175 176 // For Principal and Policy Keystroke listeners 177 private static final int PRINCIPAL_EDITING = 1; 178 private static final int POLICY_EDITING = 2; 179 private static final int DEFAULTS_EDITING = 3; 180 private static final int PRINCIPAL_LIST = 4; 181 private static final int POLICY_LIST = 5; 182 183 // For status line 184 private String OpString = ""; 185 private String ModeString = ""; 186 private String SaveString = ""; 187 188 // For I18N 189 private static ResourceBundle rb; 190 private static ResourceBundle hrb; 191 private static DateFormat df; 192 private static NumberFormat nf; 193 194 private static String neverString; 195 196 // For general pupose help 197 Process browserProcess; 198 String helpIndexFile = "file:/usr/lib/krb5/HelpIndex.html"; 199 200 // For performance monitoring 201 boolean perfmon = false; 202 Date pdateFirst; 203 Date pdateAfterKrb5Conf; 204 Date pdateEndGuiRoot; 205 Date pdateBeginStartGroup; 206 Date pdateStringsDone; 207 Date pdateLoginReady; 208 Date pdateLoginDone; 209 Date pdateSessionUp; 210 Date pdatePreMainShow; 211 Date pdatePostMainShow; 212 Date pdateMainActive; 213 Date pdateStartPlist; 214 Date pdateHavePlist; 215 Date pdateEmptyPlist; 216 Date pdateDonePlist; 217 218 public void reportTime(String s0, Date curr, Date prev) { 219 if (!perfmon) 220 return; 221 String s1 = curr.toString(); 222 long curdiff = curr.getTime() - prev.getTime(); 223 String s2 = (new Long(curdiff)).toString(); 224 long cumdiff = curr.getTime() - pdateFirst.getTime(); 225 String s3 = (new Long(cumdiff)).toString(); 226 System.out.println(s0+s1+" delta "+s2+" cume "+s3); 227 } 228 229 public void reportStartTimes() { 230 if (!perfmon) 231 return; 232 System.out.println(""); 233 reportTime("First timestamp: ", pdateFirst, pdateFirst); 234 reportTime("After krb5.conf: ", pdateAfterKrb5Conf, pdateFirst); 235 reportTime("KdcGuiRoot done: ", pdateEndGuiRoot, pdateAfterKrb5Conf); 236 reportTime("At startGroup : ", pdateBeginStartGroup, pdateEndGuiRoot); 237 reportTime("Strings set up : ", pdateStringsDone, pdateBeginStartGroup); 238 reportTime("Login ready : ", pdateLoginReady, pdateStringsDone); 239 reportTime("Login complete : ", pdateLoginDone, pdateLoginReady); 240 reportTime("Session set up : ", pdateSessionUp, pdateLoginDone); 241 reportTime("Start main win : ", pdatePreMainShow, pdateSessionUp); 242 reportTime("Done main win : ", pdatePostMainShow, pdatePreMainShow); 243 reportTime("Main win active: ", pdateMainActive, pdatePostMainShow); 244 } 245 246 /** 247 * Sample method call ordering during a group's lifetime: 248 * 249 * Constructor 250 * initRoot 251 * initGroup 252 * (setOnGroup and getOnGroup may be called at any time in any 253 * order after initGroup has been called) 254 * createGroup 255 * showGroup/hideGroup + startGroup/stopGroup 256 * destroyGroup 257 */ 258 259 /** 260 * The constructor sets up defaults for login screen 261 * 262 */ 263 public KdcGui() { 264 265 /* 266 * Set up defaults from /etc/krb5/krb5.conf 267 */ 268 269 pdateFirst = new Date(); 270 DefName = System.getProperty("user.name" /* NOI18N */)+ 271 "/admin" /* NOI18N */; 272 kc = new Krb5Conf(); 273 DefRealm = kc.getDefaultRealm(); 274 DefServer = kc.getRealmServer(DefRealm); 275 DefPort = kc.getRealmPort(DefRealm); 276 pdateAfterKrb5Conf = new Date(); 277 278 /* 279 * Take care of Java Workshop attribute plumbing 280 */ 281 addForwardedAttributes(); 282 } 283 284 /** 285 * Inherited from the Java Workshop skeleton 286 * 287 */ 288 protected Root initRoot() { 289 /* 290 * Initialize the gui components 291 */ 292 gui = new KdcGuiRoot(this); 293 pdateEndGuiRoot = new Date(); 294 295 /* 296 * Take care of Java Workshop attribute plumbing. 297 */ 298 addAttributeForward(gui.getMainChild()); 299 300 initLoginStrings(); 301 initMainStrings(); 302 pdateStringsDone = new Date(); 303 return gui; 304 } 305 306 /** 307 * Set up the login screen properly. 308 * 309 */ 310 protected void startGroup() { 311 pdateBeginStartGroup = new Date(); 312 realLoginFrame = (Frame)gui.loginframe.getBody(); 313 realLoginFrame.setTitle(getString("SEAM Administration Login")); 314 setLoginDefaults(); 315 pdateLoginReady = new Date(); 316 } 317 318 /** 319 * All cleanup done here. 320 */ 321 protected void stopGroup() { 322 killHelpBrowser(); 323 } 324 325 326 /** 327 * Callbacks from Java workshop to decide whether to take the action 328 * or show appropriate help for it. 329 * 330 * 1. Actions that are triggered from all three - mainframe, 331 * loginframe, and defaultsEditingFrame - are: context sensitive help. 332 * 2. Actions that are triggered only from mainframe are: printing, 333 * logging out, edit preferences. 334 * 3. Actions that are triggered from mainframe and loginframe are: 335 * exit, general help, context sensitive help, about. 336 */ 337 338 339 // All three frames 340 341 public void checkContextSensitiveHelp(Frame frame) { 342 if ((loginHelpMode && frame == realLoginFrame) 343 || (mainHelpMode && frame == realMainFrame) 344 || (defaultsHelpMode && frame == defaultsEditingFrame)) 345 showHelp("ContextSensitiveHelp"); 346 else 347 contextHelp(frame); 348 } 349 350 // Mainframe only 351 352 public void checkPrintCurPr() { 353 if (mainHelpMode) 354 showHelp("PrintCurrentPrincipal"); 355 else 356 printCurPr(); 357 } 358 359 public void checkPrintCurPol() { 360 if (mainHelpMode) 361 showHelp("PrintCurrentPolicy"); 362 else 363 printCurPol(); 364 } 365 366 public void checkPrintPrList() { 367 if (mainHelpMode) 368 showHelp("PrintPrincipalList"); 369 else 370 printPrList(); 371 } 372 373 public void checkPrintPoList() { 374 if (mainHelpMode) 375 showHelp("PrintPolicyList"); 376 else 377 printPoList(); 378 } 379 380 public void checkLogout() { 381 if (mainHelpMode) 382 showHelp("Logout"); 383 else if (okayToLeave(realMainFrame)) 384 logout(); 385 } 386 387 public void checkEditPreferences() { 388 if (mainHelpMode) 389 showHelp("EditPreferences"); 390 else 391 editPreferences(); 392 } 393 394 public void checkRefreshPrincipals() { 395 if (mainHelpMode) 396 showHelp("RefreshPrincipals"); 397 else { 398 principalList = null; 399 fillPrincipalList(curPrPattern); 400 } 401 } 402 403 public void checkRefreshPolicies() { 404 if (mainHelpMode) 405 showHelp("RefreshPolicies"); 406 else { 407 policyList = null; 408 fillPolicyList(curPoPattern); 409 } 410 } 411 412 // Mainframe and loginframe 413 414 public void checkExit(Frame frame) { 415 if ((loginHelpMode && frame == realLoginFrame) 416 || (mainHelpMode && frame == realMainFrame)) 417 showHelp("Exit"); 418 else if (okayToLeave(frame)) 419 exit(); 420 } 421 422 public void checkHelp(Frame frame) { 423 if ((loginHelpMode && frame == realLoginFrame) 424 || (mainHelpMode && frame == realMainFrame)) 425 showHelp("HelpBrowser"); 426 else 427 showHelpBrowser(frame); 428 } 429 430 public void checkAbout(Frame frame) { 431 if ((loginHelpMode && frame == realLoginFrame) 432 || (mainHelpMode && frame == realMainFrame)) 433 showHelp("About"); 434 else 435 doAbout(frame); 436 } 437 438 public boolean okayToLeave(Frame frame) { 439 if (prNeedSave || poNeedSave || glNeedSave) { 440 String text[] = {getString("You are about to lose changes."), 441 getString("Click Save to commit changes, " 442 +"Discard to discard changes, " 443 +"or Cancel to continue editing.")}; 444 String resp = confirmSave(frame, text); 445 if (resp.equals(getString("Cancel"))) 446 return false; 447 else if (resp.equals(getString("Save"))) { 448 if (prNeedSave) 449 if (!prDoSave()) 450 return false; // found an error so cannot leave 451 if (poNeedSave) 452 if (!poDoSave()) 453 return false; // found an error so cannot leave 454 if (glNeedSave) 455 glDoSave(true); 456 } else 457 prNeedSave = poNeedSave = glNeedSave = false; 458 } 459 return true; 460 } 461 462 /** 463 * We use the JDK 1.1 event model for most of our events, but 464 * we do still need to handle old-style events because the 465 * tabbed folder and the card panel(supplied by Java Workshop) 466 * are not compatible with the new event model. We use the 467 * callouts from Java Workshop to deal with the card panel, 468 * but we need to have some code here to do the right thing 469 * when the user selects a new tab in the tabbed folder. 470 * 471 * It is important that not too many conditions are tested here, 472 * because all events flow through this code path. 473 * 474 */ 475 public boolean handleEvent(Message msg, Event evt) { 476 477 /* 478 * Look for events from the principal and policy list. 479 */ 480 481 if (evt.target == gui.Prlist.getBody()) { 482 if (mainHelpMode) { 483 if (evt.id == Event.ACTION_EVENT 484 || evt.id == Event.LIST_SELECT) { 485 restorePrListSelection(); 486 showHelp(((Component)gui.Prlist.getBody()).getName()); 487 } 488 } // end of help mode 489 else if (evt.id == Event.ACTION_EVENT) 490 prModify(); 491 else if (evt.id == Event.LIST_SELECT) 492 lookAtPrList(); 493 return true; 494 } // end of Prlist 495 496 if (evt.target == gui.Pollist.getBody()) { 497 if (mainHelpMode) { 498 if (evt.id == Event.ACTION_EVENT 499 || evt.id == Event.LIST_SELECT) { 500 restorePoListSelection(); 501 showHelp(((Component)gui.Pollist.getBody()).getName()); 502 } 503 } // end of help mode 504 else if (evt.id == Event.ACTION_EVENT) 505 poSelected(); 506 else if (evt.id == Event.LIST_SELECT) 507 lookAtPoList(); 508 return true; 509 } // end of Pollist 510 511 /* 512 * Look for a unique event from the tabbed folder component; 513 * if I see it, I know I have a chance to disallow a switch. 514 * This makes sure data is saved before leaving a tab. 515 */ 516 if (evt.id == TabbedFolder.CONFIRM_SWITCH) { 517 // System.out.println("Got confirm for "+evt.arg); 518 String e = (String)evt.arg; 519 if (!mainHelpMode && okayToLeave(realMainFrame) == false) { 520 // System.out.println("Denying switch"); 521 ((TabbedFolder)gui.tabbedfolder1.getBody()).cancelSwitch(); 522 } 523 /* 524 * Okay with switch; make sure the data is up to date 525 */ 526 else if (e.compareTo(getString("Principals")) == 0) { 527 if (mainHelpMode) { 528 showHelp("PrincipalTab"); 529 ((TabbedFolder)gui.tabbedfolder1.getBody()).cancelSwitch(); 530 } else { 531 showPrincipalList(curPrPattern); 532 disablePolicyPrinting(); 533 } 534 } else if (e.compareTo(getString("Policies")) == 0) { 535 if (mainHelpMode) { 536 showHelp("PolicyTab"); 537 ((TabbedFolder)gui.tabbedfolder1.getBody()).cancelSwitch(); 538 } else { 539 showPolicyList(curPoPattern); 540 disablePrincipalPrinting(); 541 } 542 } 543 } 544 return super.handleEvent(msg, evt); 545 } 546 547 /* 548 * New methods for the admin gui login screen. 549 */ 550 551 /** 552 * Set strings on login screen to their I18N'd values 553 * 554 */ 555 public void initLoginStrings() { 556 gui.File2.set("text" /* NOI18N */, getString("File")); 557 gui.Exit2.set("text" /* NOI18N */, getString("Exit")); 558 gui.menu1.set("text" /* NOI18N */, getString("Help")); 559 gui.browserHelp1.set("text" /* NOI18N */, getString("Help Contents")); 560 gui.Context2.set("text" /* NOI18N */, 561 getString("Context-Sensitive Help")); 562 gui.About2.set("text" /* NOI18N */, getString("About")); 563 gui.LoginNameLabel.set("text" /* NOI18N */, 564 getString("Principal Name:")); 565 gui.LoginPassLabel.set("text" /* NOI18N */, getString("Password:")); 566 gui.LoginRealmLabel.set("text" /* NOI18N */, getString("Realm:")); 567 gui.LoginServerLabel.set("text" /* NOI18N */, getString("Master KDC:")); 568 gui.LoginOK.set("text" /* NOI18N */, getString("OK")); 569 gui.LoginStartOver.set("text" /* NOI18N */, getString("Start Over")); 570 } 571 572 /** 573 * Set strings on main screen to their I18N'd values 574 * 575 */ 576 public void initMainStrings() { 577 gui.mainframe.set("title" /* NOI18N */, 578 getString("SEAM Administration Tool")); 579 gui.File.set("text" /* NOI18N */, getString("File")); 580 gui.Print.set("text" /* NOI18N */, getString("Print")); 581 gui.PrintCurPr.set("text" /* NOI18N */, getString("Current Principal")); 582 gui.PrintCurPol.set("text" /* NOI18N */, getString("Current Policy")); 583 gui.PrintPrlist.set("text" /* NOI18N */, getString("Principal List")); 584 gui.PrintPollist.set("text" /* NOI18N */, getString("Policy List")); 585 gui.logout.set("text" /* NOI18N */, getString("Log Out")); 586 gui.Exit.set("text" /* NOI18N */, getString("Exit")); 587 gui.editMenu.set("text" /* NOI18N */, getString("Edit")); 588 gui.editPreferences.set("text" /* NOI18N */, 589 getString("Properties...")); 590 gui.menu2.set("text" /* NOI18N */, getString("Refresh")); 591 gui.refreshPrincipals.set("text" /* NOI18N */, 592 getString("Principal List")); 593 gui.refreshPolicies.set("text" /* NOI18N */, getString("Policy List")); 594 gui.Help.set("text" /* NOI18N */, getString("Help")); 595 gui.browserHelp2.set("text" /* NOI18N */, getString("Help Contents")); 596 gui.Context.set("text" /* NOI18N */, 597 getString("Context-Sensitive Help")); 598 gui.About.set("text" /* NOI18N */, getString("About")); 599 600 gui.Prlisttab.set("layoutName", getString("Principals")); 601 gui.Pollisttab.set("layoutName", getString("Policies")); 602 603 gui.PrListLabel.set("text" /* NOI18N */, getString("Principal List")); 604 gui.PrSearchLab.set("text" /* NOI18N */, getString("Filter Pattern:")); 605 gui.PrListClear.set("text" /* NOI18N */, getString("Clear Filter")); 606 gui.PrListModify.set("text" /* NOI18N */, getString("Modify")); 607 gui.PrListAdd.set("text" /* NOI18N */, getString("Create New")); 608 gui.PrListDelete.set("text" /* NOI18N */, getString("Delete")); 609 gui.PrListDuplicate.set("text" /* NOI18N */, getString("Duplicate")); 610 611 gui.PrBasicLabel.set("text" /* NOI18N */, 612 getString("Principal Basics")); 613 gui.PrNameLabel1.set("text" /* NOI18N */, getString("Principal Name:")); 614 gui.LabelBarGeneral.set("text" /* NOI18N */, getString("General")); 615 gui.PrCommentsLabel.set("text" /* NOI18N */, getString("Comments:")); 616 gui.PrPolicyLabel.set("text" /* NOI18N */, getString("Policy:")); 617 gui.PrPasswordLabel.set("text" /* NOI18N */, getString("Password:")); 618 gui.PrBasicRandomPw.set("text" /* NOI18N */, 619 getString("Generate Random Password")); 620 gui.EncListLabel.set("text" /* NOI18N */, 621 getString("Encryption Key Types:")); 622 gui.LabelBarPrincipal.set("text" /* NOI18N */, 623 getString("Admin History")); 624 gui.PrLastChangedTimeLabel.set("text" /* NOI18N */, 625 getString("Last Principal Change:")); 626 gui.PrLastChangedByLabel.set("text" /* NOI18N */, 627 getString("Last Changed By:")); 628 gui.PrExpiryLabel.set("text" /* NOI18N */, 629 getString("Account Expires:")); 630 gui.PrBasicSave.set("text" /* NOI18N */, getString("Save")); 631 gui.PrBasicPrevious.set("text" /* NOI18N */, getString("Previous")); 632 gui.PrBasicNext.set("text" /* NOI18N */, getString("Next")); 633 gui.PrBasicCancel.set("text" /* NOI18N */, getString("Cancel")); 634 635 gui.PrDetailLabel.set("text" /* NOI18N */, 636 getString("Principal Details")); 637 gui.LabelBarPassword.set("text" /* NOI18N */, getString("Password")); 638 gui.PrLastSuccessLabel.set("text" /* NOI18N */, 639 getString("Last Success:")); 640 gui.PrLastFailureLabel.set("text" /* NOI18N */, 641 getString("Last Failure:")); 642 gui.PrFailureCountLabel.set("text" /* NOI18N */, 643 getString("Failure Count:")); 644 gui.PrPwLastChangedLabel.set("text" /* NOI18N */, 645 getString("Last Password Change:")); 646 gui.PrPwExpiryLabel.set("text" /* NOI18N */, 647 getString("Password Expires:")); 648 gui.PrKvnoLabel.set("text" /* NOI18N */, getString("Key Version:")); 649 gui.LabelBarTicket.set("text" /* NOI18N */, 650 getString("Ticket Lifetimes")); 651 gui.PrMaxTicketLifetimeLabel.set("text" /* NOI18N */, 652 getString("Maximum Lifetime (seconds):")); 653 gui.PrMaxTicketRenewalLabel.set("text" /* NOI18N */, 654 getString("Maximum Renewal (seconds):")); 655 gui.PrDetailSave.set("text" /* NOI18N */, getString("Save")); 656 gui.PrDetailPrevious.set("text" /* NOI18N */, getString("Previous")); 657 gui.PrDetailNext.set("text" /* NOI18N */, getString("Next")); 658 gui.PrDetailCancel.set("text" /* NOI18N */, getString("Cancel")); 659 660 gui.PrFlagLabel.set("text" /* NOI18N */, getString("Principal Flags")); 661 gui.LabelBarSecurity.set("text" /* NOI18N */, getString("Security")); 662 663 gui.PrLockAcct.set("text" /* NOI18N */, 664 Flags.getLabel(Flags.DISALLOW_ALL_TIX)); 665 gui.PrForcePwChange.set("text" /* NOI18N */, 666 Flags.getLabel(Flags.REQUIRES_PWCHANGE)); 667 gui.LabelBarTickets.set("text" /* NOI18N */, getString("Ticket")); 668 gui.PrAllowPostdated.set("text" /* NOI18N */, 669 Flags.getLabel(Flags.DISALLOW_POSTDATED)); 670 gui.PrAllowForwardable.set("text" /* NOI18N */, 671 Flags.getLabel(Flags.DISALLOW_FORWARDABLE)); 672 gui.PrAllowRenewable.set("text" /* NOI18N */, 673 Flags.getLabel(Flags.DISALLOW_RENEWABLE)); 674 gui.PrAllowProxiable.set("text" /* NOI18N */, 675 Flags.getLabel(Flags.DISALLOW_PROXIABLE)); 676 gui.PrAllowSvr.set("text" /* NOI18N */, 677 Flags.getLabel(Flags.DISALLOW_SVR)); 678 gui.LabelBarMiscellany.set("text" /* NOI18N */, 679 getString("Miscellaneous")); 680 gui.PrAllowTGT.set("text" /* NOI18N */, 681 Flags.getLabel(Flags.DISALLOW_TGT_BASED)); 682 gui.PrAllowDupAuth.set("text" /* NOI18N */, 683 Flags.getLabel(Flags.DISALLOW_DUP_SKEY)); 684 gui.PrRequirePreAuth.set("text" /* NOI18N */, 685 Flags.getLabel(Flags.REQUIRE_PRE_AUTH)); 686 gui.PrRequireHwPreAuth.set("text" /* NOI18N */, 687 Flags.getLabel(Flags.REQUIRE_HW_AUTH)); 688 gui.PrFlagsSave.set("text" /* NOI18N */, getString("Save")); 689 gui.PrFlagsPrevious.set("text" /* NOI18N */, getString("Previous")); 690 gui.PrFlagsNext.set("text" /* NOI18N */, getString("Done")); 691 gui.PrFlagsCancel.set("text" /* NOI18N */, getString("Cancel")); 692 693 gui.PoListLabel.set("text" /* NOI18N */, getString("Policy List")); 694 gui.PoListPatternLabel.set("text" /* NOI18N */, 695 getString("Filter Pattern:")); 696 gui.PoListClear.set("text" /* NOI18N */, getString("Clear Filter")); 697 gui.PoListModify.set("text" /* NOI18N */, getString("Modify")); 698 gui.PoListAdd.set("text" /* NOI18N */, getString("Create New")); 699 gui.PoListDelete.set("text" /* NOI18N */, getString("Delete")); 700 gui.PoListDuplicate.set("text" /* NOI18N */, getString("Duplicate")); 701 702 gui.PoDetailLabel.set("text" /* NOI18N */, getString("Policy Details")); 703 gui.PoNameLabel.set("text" /* NOI18N */, getString("Policy Name:")); 704 gui.PoMinPwLengthLabel.set("text" /* NOI18N */, 705 getString("Minimum Password Length:")); 706 gui.PoMinPwClassLabel.set("text" /* NOI18N */, 707 getString("Minimum Password Classes:")); 708 gui.PoSavedPasswordsLabel.set("text" /* NOI18N */, 709 getString("Saved Password History:")); 710 gui.PoMinTicketLifetimeLabel.set("text" /* NOI18N */, 711 getString("Minimum Password Lifetime (seconds):")); 712 gui.PoMaxTicketLifetimeLabel.set("text" /* NOI18N */, 713 getString("Maximum Password Lifetime (seconds):")); 714 gui.PoReferencesLabel.set("text" /* NOI18N */, 715 getString("Principals Using This Policy:")); 716 gui.PoDetailSave.set("text" /* NOI18N */, getString("Save")); 717 gui.PoDetailPrevious.set("text" /* NOI18N */, getString("Previous")); 718 gui.PoDetailDone.set("text" /* NOI18N */, getString("Done")); 719 gui.PoDetailCancel.set("text" /* NOI18N */, getString("Cancel")); 720 } 721 722 /** 723 * Allow user to see a fatal error before exiting 724 */ 725 public void fatalError(Frame frame, String[] text) { 726 String title = getString("Error"); 727 String[] buttons = new String[1]; 728 buttons[0] = getString("OK"); 729 ChoiceDialog cd = new ChoiceDialog(frame, title, text, buttons); 730 cd.getSelection(); 731 exit(); 732 } 733 734 /** 735 * Set the defaults for the login screen. Called on startup, 736 * when "Start Over" is pressed, or when "Log Out" is chosen 737 * from the main screen's menu. 738 * 739 */ 740 public void setLoginDefaults() { 741 CurName = DefName; 742 CurPass = ""; 743 if (DefRealm != null) 744 CurRealm = DefRealm; 745 else { 746 CurRealm = ""; 747 if (firsttime) { 748 showLoginWarning(getString("Cannot find default realm; " 749 +"check /etc/krb5/krb5.conf")); 750 firsttime = false; 751 } 752 } 753 if (DefServer != null) 754 CurServer = DefServer; 755 else 756 CurServer = ""; 757 CurPort = 0; 758 try { 759 Integer i = new Integer(DefPort); 760 CurPort = i.intValue(); 761 } catch (NumberFormatException e) {} 762 gui.LoginName.set("text" /* NOI18N */, CurName); 763 gui.LoginPass.set("text" /* NOI18N */, CurPass); 764 gui.LoginRealm.set("text" /* NOI18N */, CurRealm); 765 gui.LoginServer.set("text" /* NOI18N */, CurServer); 766 if (CurRealm.equals("___default_realm___")) { 767 String[] error = new String[1]; 768 error[0] = getString( 769 "Kerberos /etc/krb5/krb5.conf configuration" 770 +" file not configured; exiting"); 771 fatalError(realLoginFrame, error); 772 } 773 if (!loginListeners) 774 setupLoginNormalListeners(); 775 loginListeners = true; 776 TextField name = (TextField)gui.LoginName.getBody(); 777 name.selectAll(); 778 name.requestFocus(); 779 } 780 781 /** 782 * React after new realm entered 783 * 784 */ 785 public void newRealm() { 786 CurRealm = (String)gui.LoginRealm.get("text" /* NOI18N */); 787 String s = kc.getRealmServer(CurRealm); 788 if (s != null) { 789 CurServer = s; 790 gui.LoginServer.set("text" /* NOI18N */, CurServer); 791 792 } else { 793 showLoginWarning(getString("Cannot find default server for realm")); 794 CurServer = ""; 795 gui.LoginServer.set("text" /* NOI18N */, CurServer); 796 ((TextField)gui.LoginServer.getBody()).requestFocus(); 797 } 798 } 799 800 /** 801 * React after new server entered 802 * 803 */ 804 public void newServer() { 805 CurServer = (String)gui.LoginServer.get("text" /* NOI18N */); 806 if (CurPass.compareTo("") != 0) 807 loginComplete(); 808 } 809 810 /** 811 * React after username is complete 812 * 813 */ 814 public void nameComplete() { 815 ((TextField)gui.LoginName.getBody()).select(0, 0); 816 ((TextField)gui.LoginPass.getBody()).requestFocus(); 817 } 818 819 /** 820 * React after password is complete or "OK" button is pressed. 821 * We insist that the realm and server are set here separately 822 * so that we can permit field-to-field motion if /etc/krb5/krb5.conf 823 * does not exist. 824 * 825 */ 826 public void passwordComplete() { 827 CurPass = (String)gui.LoginPass.get("text" /* NOI18N */); 828 if (CurRealm.compareTo("") == 0) { 829 ((TextField)gui.LoginRealm.getBody()).requestFocus(); 830 return; 831 } 832 if (CurServer.compareTo("") == 0) { 833 ((TextField)gui.LoginServer.getBody()).requestFocus(); 834 return; 835 } 836 loginComplete(); 837 } 838 839 /** 840 * Check to see if we're happy with the login information. 841 * We may want to go to the main screen, principal list tab. 842 * 843 */ 844 public void loginComplete() { 845 pdateLoginDone = new Date(); 846 CurName = (String)gui.LoginName.get("text" /* NOI18N */); 847 CurPass = (String)gui.LoginPass.get("text" /* NOI18N */); 848 CurRealm = (String)gui.LoginRealm.get("text" /* NOI18N */); 849 CurServer = (String)gui.LoginServer.get("text" /* NOI18N */); 850 if (CurPass.compareTo("") == 0) { 851 showLoginWarning(getString("A password must be specified")); 852 ((TextField)gui.LoginPass.getBody()).requestFocus(); 853 return; 854 } 855 if (CurRealm.compareTo("") == 0) { 856 showLoginWarning(getString("A realm entry must be specified")); 857 ((TextField)gui.LoginRealm.getBody()).requestFocus(); 858 return; 859 } 860 if (CurServer.compareTo("") == 0) { 861 showLoginWarning(getString("A master KDC entry must be specified")); 862 ((TextField)gui.LoginServer.getBody()).requestFocus(); 863 return; 864 } 865 866 realLoginFrame.setCursor(new Cursor(Cursor.WAIT_CURSOR)); 867 Kadmin = new Kadmin(); 868 boolean b; 869 try { 870 b = Kadmin.sessionInit(CurName, CurPass, CurRealm, CurServer, 871 CurPort); 872 } catch (Exception e) { 873 b = false; 874 realLoginFrame.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); 875 showLoginError(e.getMessage()); 876 return; 877 } 878 realLoginFrame.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); 879 if (b == false) { 880 showLoginError(getString("Invalid login, please try again")); 881 return; 882 } 883 pdateSessionUp = new Date(); 884 885 // Instantiate defaults for this user 886 if (defaults == null) 887 defaults = new Defaults(System.getProperty("user.home" /* NOI18N */) 888 + "/.gkadmin" /* NOI18N */, 889 (java.awt.Color)gui.mainframe.get("background")); 890 else 891 defaults.refreshDefaults(); 892 893 // Figure out what privileges we have 894 try { 895 privs = Kadmin.getPrivs(); 896 } catch (Exception e) { 897 showLoginError(e.getMessage()); 898 } 899 900 // Check privileges; if bad enough, we'll just give up. 901 if (checkPrivs() == false) { 902 try { 903 Kadmin.sessionExit(); 904 } catch (Exception e) {} 905 return; 906 } 907 reactToPrivs(); 908 909 prSetEditable(false); 910 prSetCanSave(false); 911 poSetEditable(false); 912 poSetCanSave(false); 913 prSelValid(false); 914 poSelValid(false); 915 gui.PrListPattern.set("text" /* NOI18N */, ""); 916 gui.PoListPattern.set("text" /* NOI18N */, ""); 917 918 // Disable login frame 919 setListeners(LoginNormal, false); 920 loginListeners = false; 921 922 pdatePreMainShow = new Date(); 923 realLoginFrame.setCursor(new Cursor(Cursor.WAIT_CURSOR)); 924 gui.mainframe.show(true); /* XXX - done waaay too early, fix */ 925 realLoginFrame.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); 926 pdatePostMainShow = new Date(); 927 realMainFrame = (Frame)gui.mainframe.getBody(); 928 realMainFrame.setCursor(new Cursor(Cursor.WAIT_CURSOR)); 929 gui.tabbedfolder1.show(getString("Principals")); 930 gui.cardpanel2.show("List" /* NOI18N */); 931 setupMainNormalListeners(); 932 setupDefaultsEditingFrame(); 933 realMainFrame.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); 934 pdateMainActive = new Date(); 935 reportStartTimes(); 936 937 showPolicyList(""); 938 showPrincipalList(""); 939 setPolicyChoice(); 940 /* XXX - disabled multiple selection until double-click works */ 941 gui.Prlist.set("allowMultipleSelections" /* NOI18N */, 942 new Boolean(false)); 943 gui.Pollist.set("allowMultipleSelections" /* NOI18N */, 944 new Boolean(false)); 945 if ((privs & PRIV_LIST) == 0) { 946 showWarning( 947 getString("Unable to access lists;please use the Name field.")); 948 ((TextField)gui.PrListPattern.getBody()).requestFocus(); 949 } 950 } 951 952 /** 953 * React to main screen's "Log Out" choice by going back to login screen. 954 * 955 */ 956 public void logout() { 957 realMainFrame.setCursor(new Cursor(Cursor.WAIT_CURSOR)); 958 setListeners(MainNormal, false); 959 setListeners(defaultsNormal, false); 960 try { 961 Kadmin.sessionExit(); 962 Kadmin = null; 963 } catch (Exception e) { 964 realMainFrame.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); 965 showError(e.getMessage()); 966 return; 967 } 968 setLoginDefaults(); 969 principalList = null; 970 gui.Prlist.set("items" /* NOI18N */, null); 971 policyList = null; 972 gui.Pollist.set("items" /* NOI18N */, null); 973 gui.mainframe.show(false); 974 curPrListPos = 0; 975 curPrPattern = ""; 976 curPoListPos = 0; 977 curPoPattern = ""; 978 979 // Forget this user's print preferences 980 PrintUtil.reinitialize(); 981 982 realMainFrame.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); 983 } 984 985 public void exit() { 986 try { 987 if (Kadmin != null) 988 Kadmin.sessionExit(); 989 } catch (Exception e) {} 990 super.exit(); 991 } 992 993 /* 994 * Methods for the principal list panel 995 */ 996 997 /** 998 * Update all principal text fields from gui. 999 * Check to see if anyone of them had a parse error. 1000 * @param nullPasswdOK true if the password can be null. This is 1001 * allowed only when the operation is a modify on an existing 1002 * principal or if it is an attempt to print a new principal still 1003 * in creation. 1004 * @returns true if all is ok, false if an error occurs 1005 */ 1006 // Quits as soon as the first error is detected. The method that 1007 // detects the error also shows a dialog box with a message. 1008 public boolean prUpdateFromGui(boolean nullPasswdOK) { 1009 return (setPrName1() && setPrPassword(nullPasswdOK) && setPrExpiry() && 1010 setPrComments() && setPrPwExpiry() && setPrKvno() && 1011 setPrMaxlife() && setPrMaxrenew() && setEncType()); 1012 } 1013 1014 /** 1015 * Is the principal name field editable? 1016 * 1017 */ 1018 public void prSetEditable(boolean editable) { 1019 prnameEditable = editable; 1020 Boolean b = new Boolean(editable); 1021 gui.PrName1.set("editable" /* NOI18N */, b); 1022 } 1023 1024 /** 1025 * React to a change in the principal search pattern 1026 * 1027 */ 1028 public void prPatternComplete() { 1029 curPrListPos = 0; 1030 String pattern = (String)gui.PrListPattern.get("text" /* NOI18N */); 1031 if (!noLists) 1032 showPrincipalList(pattern); 1033 else 1034 setCurPrincipal(pattern); 1035 } 1036 1037 /** 1038 * Clear principal search pattern 1039 * 1040 */ 1041 public void prPatternClear() { 1042 if (noLists) { 1043 gui.PrListPattern.set("text" /* NOI18N */, ""); 1044 ((TextField)gui.PrListPattern.getBody()).requestFocus(); 1045 } else { 1046 String tempName = CurPrincipal; 1047 fillPrincipalList(""); 1048 selectPrincipal(tempName); 1049 } 1050 } 1051 1052 /** 1053 * Show the principal list after applying the filter passed in. 1054 */ 1055 public void showPrincipalList(String pattern) { 1056 prin = null; // we are not editing a principal 1057 fillPrincipalList(pattern); 1058 ModeString = ""; 1059 OpString = ""; 1060 updateStatus(); 1061 gui.cardpanel1.show("List" /* NOI18N */); 1062 if (noLists) 1063 ((TextField)gui.PrListPattern.getBody()).requestFocus(); 1064 } 1065 1066 /** 1067 * Generate the principal list for the first time or after a pattern 1068 * has been chosen. 1069 * 1070 */ 1071 public void fillPrincipalList(String pattern) { 1072 if (noLists) { 1073 setCurPrincipal((String)gui.PrListPattern.get("text" /* NOI18N */)); 1074 ((TextField)gui.PrListPattern.getBody()).requestFocus(); 1075 disablePrincipalPrinting(); 1076 return; 1077 } 1078 realMainFrame.setCursor(new Cursor(Cursor.WAIT_CURSOR)); 1079 pdateStartPlist = new Date(); 1080 // Do we still want to cache the principal list? 1081 long cachetime = A_LONG_TIME; 1082 if (!defaults.getStaticLists()) 1083 cachetime = defaults.getCacheTime() * 1000; 1084 if (principalList != null 1085 && ((new Date()).getTime() - principalListDate.getTime()) 1086 <= cachetime) { 1087 1088 // Has the pattern changed? 1089 if (pattern.compareTo(curPrPattern) != 0) 1090 newPrPattern(pattern); 1091 realMainFrame.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); 1092 selectPrincipal(curPrListPos); 1093 return; 1094 1095 } 1096 PrincipalList p = new PrincipalList(Kadmin); 1097 gui.StatusLine.set("text" /* NOI18N */, 1098 getString("Loading principal list")); 1099 try { 1100 principalList = p.getPrincipalList(CurRealm); 1101 principalListDate = new Date(); 1102 } catch (Exception e) { 1103 realMainFrame.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); 1104 showError(e.getMessage()); 1105 updateStatus(); 1106 return; 1107 } 1108 updateStatus(); 1109 pdateHavePlist = new Date(); 1110 reportTime("Fetched Plist : ", pdateHavePlist, pdateStartPlist); 1111 newPrPattern(pattern); 1112 selectPrincipal(curPrListPos); 1113 realMainFrame.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); 1114 pdateDonePlist = new Date(); 1115 reportTime("Completed Plist: ", pdateDonePlist, pdateHavePlist); 1116 if (perfmon) 1117 System.out.println("Principal list has " 1118 +(new Integer(principalList.length)).toString()+" items"); 1119 } 1120 1121 private void newPrPattern(String pattern) { 1122 curPrPattern = pattern; 1123 gui.PrListPattern.set("text" /* NOI18N */, pattern); 1124 refreshPrincipalList(); 1125 } 1126 1127 private void refreshPrincipalList() { 1128 if (noLists) 1129 return; 1130 Filter f = new Filter(principalList, curPrPattern); 1131 gui.Prlist.set("items" /* NOI18N */, f.out); 1132 } 1133 1134 private void selectPrincipal(int pos) { 1135 TextList list = (TextList)gui.Prlist.getBody(); 1136 if (list.countItems() == 0) { 1137 setCurPrincipal(""); 1138 return; 1139 } 1140 1141 if (pos < 0) 1142 pos = 0; 1143 else if (pos >= list.countItems()) 1144 pos = list.countItems() - 1; 1145 1146 list.select(pos); 1147 enablePrincipalPrinting(); 1148 list.makeVisible(pos); 1149 setCurPrincipal(list.getItem(pos)); 1150 } 1151 1152 private void selectPrincipal(String name) { 1153 String[] list = getItemsFromTextList(((TextList)gui.Prlist.getBody())); 1154 selectPrincipal(search(list, name)); 1155 } 1156 1157 private String[] getItemsFromTextList(TextList list) { 1158 StringVector v = list.items(); 1159 String [] ret = new String[v.size()]; 1160 v.copyInto(ret); 1161 return ret; 1162 } 1163 1164 /** 1165 * Find index where "name" might go in a sorted string array; 1166 * returns either the element which matches "name" exactly 1167 * or the element just lexographically greater than "name". 1168 */ 1169 private int search(String[] array, String name) { 1170 int lo = 0; 1171 int hi = array.length; 1172 int mid = hi; 1173 while (lo < hi) { 1174 mid = (lo + hi) / 2; 1175 int cmp = name.concat("@").compareTo(array[mid].concat("@")); 1176 if (hi - lo == 1) { 1177 if (cmp > 0) 1178 mid = hi; 1179 break; 1180 } 1181 if (cmp == 0) 1182 break; 1183 if (cmp < 0) 1184 hi = mid; 1185 else if (cmp > 0) 1186 lo = mid; 1187 } 1188 return mid; 1189 } 1190 1191 private String[] addToList(String[] list, String name) { 1192 if (list == null) 1193 return null; 1194 int index = search(list, name); 1195 int rem = list.length - index; 1196 String[] newlist = new String[list.length+1]; 1197 if (index > 0) 1198 System.arraycopy(list, 0, newlist, 0, index); 1199 newlist[index] = name; 1200 if (rem > 0) 1201 System.arraycopy(list, index, newlist, index+1, rem); 1202 return newlist; 1203 } 1204 1205 private String[] delFromList(String[] list, String name) { 1206 if (list == null) 1207 return null; 1208 int index = search(list, name); 1209 int rem = list.length - index; 1210 String[] newlist = new String[list.length-1]; 1211 if (index > 0) 1212 System.arraycopy(list, 0, newlist, 0, index); 1213 if (rem > 1) 1214 System.arraycopy(list, index+1, newlist, index, rem-1); 1215 return newlist; 1216 } 1217 1218 /** 1219 * Collect the policy choice entries 1220 * 1221 */ 1222 public void setPolicyChoice() { 1223 String[] pols = null; 1224 if (!noLists) { 1225 PolicyList p = new PolicyList(Kadmin); 1226 try { 1227 pols = p.getPolicyList(); 1228 } catch (Exception e) { 1229 showError(e.getMessage()); 1230 return; 1231 } 1232 } 1233 Choice c = (Choice)gui.PrPolicy.getBody(); 1234 c.removeAll(); 1235 c.add(getString("(no policy)")); 1236 for (int i = 0; pols != null && i < pols.length; i++) 1237 c.add(pols[i]); 1238 } 1239 1240 /** 1241 * Look at the principal list to see what's selected 1242 * 1243 */ 1244 public void lookAtPrList() { 1245 if (noLists) 1246 return; 1247 TextList list = (TextList) gui.Prlist.getBody(); 1248 prMulti = null; 1249 String[] sel = list.getSelectedItems(); 1250 if (sel.length == 1) { 1251 setCurPrincipal(sel[0]); 1252 curPrListPos = list.getSelectedIndex(); 1253 } else { 1254 if (sel.length > 0) 1255 prMulti = sel; 1256 setCurPrincipal(""); 1257 } 1258 } 1259 1260 private void restorePrListSelection() { 1261 if (noLists) 1262 return; 1263 TextList list = (TextList) gui.Prlist.getBody(); 1264 list.select(curPrListPos); 1265 } 1266 1267 /** 1268 * When the principal name choice changes, we want to reflect 1269 * the name in the other principal tabs. We can also use this 1270 * opportunity to enable/disable buttons. 1271 * 1272 */ 1273 public void setCurPrincipal(String name) { 1274 CurPrincipal = name; 1275 gui.PrName1.set("text" /* NOI18N */, name); 1276 gui.PrName2.set("text" /* NOI18N */, name); 1277 gui.PrName3.set("text" /* NOI18N */, name); 1278 if (name.compareTo("") == 0) { 1279 prSelValid(false); 1280 return; 1281 } 1282 prSelValid(true); 1283 } 1284 1285 /** 1286 * Make Modify, Delete and Duplicate buttons react to what is selected. 1287 * Privileges: 1288 * If we have neither modify or inquire, we keep Modify disabled; 1289 * if we have no modify privileges, we permit Modify to see info, 1290 * but the principal panel components are disabled in reactToPrivs(). 1291 * If we have add and inquire privileges, we can permit Duplicate; 1292 * no add also means Create New is permanently disabled in reactToPrivs(). 1293 * If we have no delete privileges, we keep Delete disabled. 1294 */ 1295 public void prSelValid(boolean selected) { 1296 prSelValid = selected; 1297 Boolean b = new Boolean(selected && (privs & PRIV_INQUIRE) != 0); 1298 gui.PrListModify.set("enabled" /* NOI18N */, b); 1299 int want = (PRIV_ADD | PRIV_INQUIRE); 1300 b = new Boolean(selected && (privs & want) == want); 1301 gui.PrListDuplicate.set("enabled" /* NOI18N */, b); 1302 b = new Boolean((selected || prMulti != null) 1303 &&(privs & PRIV_DELETE) != 0); 1304 gui.PrListDelete.set("enabled" /* NOI18N */, b); 1305 } 1306 1307 /** 1308 * Make the Save button do the right thing. 1309 * 1310 */ 1311 public void prSetCanSave(boolean ok) { 1312 Boolean b = new Boolean(ok); 1313 gui.PrBasicSave.set("enabled" /* NOI18N */, b); 1314 gui.PrDetailSave.set("enabled" /* NOI18N */, b); 1315 gui.PrFlagsSave.set("enabled" /* NOI18N */, b); 1316 } 1317 1318 /** 1319 * Update status line with current information. 1320 * 1321 */ 1322 public void updateStatus() { 1323 gui.StatusLine.set("text" /* NOI18N */, ModeString+OpString+SaveString); 1324 } 1325 1326 /** 1327 * This is a way for the data modification actions to note that 1328 * the principal has edits outstanding. 1329 * 1330 */ 1331 public void prSetNeedSave() { 1332 prNeedSave = true; 1333 prSetCanSave(true); 1334 SaveString = getString("- *CHANGES*"); 1335 updateStatus(); 1336 } 1337 1338 public boolean prDoSave() { 1339 1340 // before attempting to save make sure all text fields are in order 1341 if (prUpdateFromGui(!prin.isNew) == false) 1342 return false; 1343 1344 boolean b = true; 1345 realMainFrame.setCursor(new Cursor(Cursor.WAIT_CURSOR)); 1346 try { 1347 b = prin.savePrincipal(); 1348 } catch (Exception e) { 1349 b = false; 1350 showError(e.getMessage()); 1351 } 1352 realMainFrame.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); 1353 if (!b) 1354 return false; 1355 if (prin.isNew) { 1356 principalList = addToList(principalList, prin.PrName); 1357 refreshPrincipalList(); 1358 selectPrincipal(prin.PrName); 1359 } 1360 prin.isNew = false; 1361 gui.PrPassword.set("text" /* NOI18N */, ""); 1362 prin.setPassword(""); 1363 prSetEditable(false); 1364 prSetCanSave(false); 1365 prNeedSave = false; 1366 SaveString = ""; 1367 updateStatus(); 1368 return true; 1369 } 1370 1371 /** 1372 * React to a choice from the principal list via double-click or 1373 * single-click+Modify; we want to go to the next tab in each case. 1374 * If we don't have modify privileges, we need to simply show values. 1375 */ 1376 public void prModify() { 1377 enablePrincipalPrinting(); 1378 if (!prNeedSave) { 1379 prSetEditable(false); 1380 prSetCanSave(false); 1381 } 1382 if (noLists) 1383 CurPrincipal = (String)gui.PrListPattern.get("text" /* NOI18N */); 1384 realMainFrame.setCursor(new Cursor(Cursor.WAIT_CURSOR)); 1385 enablePrAttributes(new Boolean((privs & (PRIV_ADD|PRIV_MODIFY)) != 0)); 1386 Boolean b = new Boolean((privs & PRIV_CHANGEPW) != 0); 1387 gui.PrPassword.set("enabled" /* NOI18N */, b); 1388 gui.PrBasicRandomPw.set("enabled" /* NOI18N */, b); 1389 gui.EncList.set("enabled" /* NOI18N */, b); 1390 try { 1391 prin = new Principal(Kadmin, CurPrincipal); 1392 } catch (Exception e) { 1393 showError(e.getMessage()); 1394 realMainFrame.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); 1395 return; 1396 } 1397 realMainFrame.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); 1398 showPrincipal(prin); 1399 String policy = (String)gui.PrPolicy.get("selectedItem" /* NOI18N */); 1400 if (policy.compareTo(getString("(no policy)")) == 0) 1401 policy = ""; 1402 else 1403 setDefaultPolicy(policy); 1404 ModeString = getString("Modify")+" "; 1405 OpString = getString("Principal"); 1406 updateStatus(); 1407 gui.cardpanel1.show("Basics" /* NOI18N */); 1408 } 1409 1410 /** 1411 * React to add principal button 1412 * If we got here, we need to enable attributes since we have privs. 1413 */ 1414 public void prAdd() { 1415 enablePrincipalPrinting(); 1416 setCurPrincipal(""); 1417 prSelValid = true; 1418 prSetEditable(true); 1419 prSetNeedSave(); 1420 realMainFrame.setCursor(new Cursor(Cursor.WAIT_CURSOR)); 1421 Boolean b = new Boolean(true); 1422 enablePrAttributes(b); 1423 gui.PrPassword.set("enabled" /* NOI18N */, b); 1424 gui.PrBasicRandomPw.set("enabled" /* NOI18N */, b); 1425 gui.EncList.set("enabled" /* NOI18N */, b); 1426 try { 1427 prin = new Principal(Kadmin, defaults); 1428 } catch (Exception e) { 1429 showError(e.getMessage()); 1430 realMainFrame.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); 1431 return; 1432 } 1433 realMainFrame.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); 1434 showPrincipal(prin); 1435 ModeString = getString("Create New")+" "; 1436 OpString = getString("Principal"); 1437 updateStatus(); 1438 gui.cardpanel1.show("Basics" /* NOI18N */); 1439 ((TextField)gui.PrName1.getBody()).requestFocus(); 1440 } 1441 1442 /** 1443 * React to duplicate principal button 1444 * 1445 */ 1446 public void prDuplicate() { 1447 enablePrincipalPrinting(); 1448 if (noLists) 1449 CurPrincipal = (String)gui.PrListPattern.get("text" /* NOI18N */); 1450 realMainFrame.setCursor(new Cursor(Cursor.WAIT_CURSOR)); 1451 try { 1452 prin = new Principal(Kadmin, CurPrincipal); 1453 } catch (Exception e) { 1454 showError(e.getMessage()); 1455 realMainFrame.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); 1456 return; 1457 } 1458 realMainFrame.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); 1459 setCurPrincipal(""); 1460 prSelValid = true; 1461 prSetEditable(true); 1462 prSetNeedSave(); 1463 realMainFrame.setCursor(new Cursor(Cursor.WAIT_CURSOR)); 1464 Boolean b = new Boolean(true); 1465 enablePrAttributes(b); 1466 gui.PrPassword.set("enabled" /* NOI18N */, b); 1467 gui.PrBasicRandomPw.set("enabled" /* NOI18N */, b); 1468 gui.PrBasicRandomPw.set("enabled" /* NOI18N */, b); 1469 try { 1470 prin = new Principal(Kadmin, prin); 1471 } catch (Exception e) { 1472 showError(e.getMessage()); 1473 realMainFrame.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); 1474 return; 1475 } 1476 realMainFrame.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); 1477 prin.PrName = ""; 1478 showPrincipal(prin); 1479 ModeString = getString("Duplicate")+" "; 1480 OpString = getString("Principal"); 1481 updateStatus(); 1482 gui.cardpanel1.show("Basics" /* NOI18N */); 1483 ((TextField)gui.PrName1.getBody()).requestFocus(); 1484 } 1485 1486 /** 1487 * React to delete principal button 1488 */ 1489 public void prDelete() { 1490 String text[] = {getString("You are about to destroy data."), 1491 getString("Click OK to proceed or" 1492 +" Cancel to continue editing.")}; 1493 String resp = confirmAction(realMainFrame, text); 1494 if (resp.equals(getString("Cancel"))) 1495 return; 1496 if (noLists) 1497 CurPrincipal = (String)gui.PrListPattern.get("text" /* NOI18N */); 1498 boolean b = false; 1499 try { 1500 b = Kadmin.deletePrincipal(CurPrincipal); 1501 } catch (Exception e) { 1502 showError(e.getMessage()); 1503 return; 1504 } 1505 if (!b) 1506 return; 1507 principalList = delFromList(principalList, CurPrincipal); 1508 refreshPrincipalList(); 1509 setCurPrincipal(""); 1510 prSelValid = true; 1511 prSetEditable(true); 1512 if (curPrListPos == ((TextList)gui.Prlist.getBody()).countItems()) 1513 curPrListPos--; 1514 showPrincipalList(curPrPattern); 1515 } 1516 1517 /** 1518 * React to Previous button on basic screen 1519 * 1520 */ 1521 public void prBasicPrevious() { 1522 prCancel(); 1523 } 1524 1525 /** 1526 * React to Next button on basic screen. If some changes were made 1527 * then check to see if they contain a parse error. If so, do 1528 * nothing. The method that checks for error messages also displays 1529 * the error message. 1530 * 1531 */ 1532 public void prBasicNext() { 1533 if (prNeedSave) 1534 if (!prUpdateFromGui(!prin.isNew)) 1535 return; 1536 1537 updateStatus(); 1538 gui.cardpanel1.show("Details" /* NOI18N */); 1539 } 1540 1541 /** 1542 * React to Previous button on detail screen. If some changes were made 1543 * then check to see if they contain a parse error. If so, do 1544 * nothing. The method that checks for error messages also displays 1545 * the error message. 1546 */ 1547 public void prDetailPrevious() { 1548 if (prNeedSave) 1549 if (!prUpdateFromGui(!prin.isNew)) 1550 return; 1551 1552 updateStatus(); 1553 gui.cardpanel1.show("Basics" /* NOI18N */); 1554 } 1555 1556 /** 1557 * React to Next button on detail screen. If some changes were made 1558 * then check to see if they contain a parse error. If so, do 1559 * nothing. The method that checks for error messages also displays 1560 * the error message. 1561 * 1562 */ 1563 public void prDetailNext() { 1564 if (prNeedSave) 1565 if (!prUpdateFromGui(!prin.isNew)) 1566 return; 1567 1568 updateStatus(); 1569 gui.cardpanel1.show("Flags" /* NOI18N */); 1570 } 1571 1572 /** 1573 * React to Previous button on flags screen 1574 * 1575 */ 1576 public void prFlagsPrevious() { 1577 updateStatus(); 1578 gui.cardpanel1.show("Details" /* NOI18N */); 1579 } 1580 1581 /** 1582 * React to Done button on flags screen. If any changes were made to 1583 * the principal, then try to save them. If the save fails for any 1584 * reason, do not return to the principal list. 1585 * 1586 */ 1587 public void prFlagsDone() { 1588 if (prNeedSave && prDoSave() == false) 1589 return; 1590 showPrincipalList(curPrPattern); 1591 } 1592 1593 /** 1594 * React to save principal button 1595 * 1596 */ 1597 public void prSave() { 1598 prDoSave(); 1599 } 1600 1601 /** 1602 * React to cancel principal button 1603 * 1604 */ 1605 public void prCancel() { 1606 if (prNeedSave) { 1607 String text[] = {getString("You are about to lose changes."), 1608 getString("Click Save to commit changes, " 1609 +"Discard to discard changes, " 1610 +"or Cancel to continue editing.")}; 1611 String resp = confirmSave(realMainFrame, text); 1612 if (resp.equals(getString("Cancel"))) 1613 return; 1614 if (resp.equals(getString("Save"))) 1615 if (!prDoSave()) 1616 return; 1617 } 1618 prSetEditable(false); 1619 prSetCanSave(false); 1620 prNeedSave = false; 1621 lookAtPrList(); 1622 SaveString = ""; 1623 showPrincipalList(curPrPattern); 1624 } 1625 1626 /* 1627 * Methods for the principal attribute panels 1628 */ 1629 1630 public boolean setPrName1() { 1631 if (!prnameEditable) 1632 return true; 1633 1634 String p = ((String)gui.PrName1.get("text" /* NOI18N */)).trim(); 1635 if (p.compareTo("") == 0) { 1636 showError(getString("Please enter a principal name or cancel")); 1637 ((TextField)gui.PrName1.getBody()).requestFocus(); 1638 return false; 1639 } 1640 // visually delete any white space that was at the start or end 1641 // by resetting the field to the trimmmed String. 1642 gui.PrName1.set("text" /* NOI18N */, p); 1643 setCurPrincipal(p); 1644 prin.setName(p); 1645 return true; 1646 } 1647 1648 public boolean setPrComments() { 1649 prin.setComments((String)gui.PrComments.get("text" /* NOI18N */)); 1650 return true; 1651 } 1652 1653 public boolean setEncType() { 1654 if (prin.setEncType((String)gui.EncList.get("text" /* NOI18N */))) { 1655 // visually delete any extraneous data that was ignored in the 1656 // parsing by resetting the gui data 1657 gui.EncList.set("text" /* NOI18N */, prin.getEncType()); 1658 return true; 1659 } else 1660 return false; 1661 } 1662 1663 public boolean setPrExpiry() { 1664 if (prin.setExpiry((String)gui.PrExpiry.get("text" /* NOI18N */))) { 1665 // visually delete any extraneous data that was ignored in the 1666 // parsing by resetting the gui data 1667 gui.PrExpiry.set("text" /* NOI18N */, prin.getExpiry()); 1668 return true; 1669 } else { 1670 showDataFormatError(((TextField)gui.PrExpiry.getBody()), 1671 DATE_DATA); 1672 return false; 1673 } 1674 } 1675 1676 public boolean setPrPassword(boolean nullOK) { 1677 String p = (String)gui.PrPassword.get("text" /* NOI18N */); 1678 if (p.compareTo("") == 0) { 1679 if (!nullOK) { 1680 showError(getString("Please enter a password or cancel")); 1681 ((TextField)gui.PrPassword.getBody()).requestFocus(); 1682 return false; 1683 } else return true; 1684 } 1685 1686 prin.setPassword(p); 1687 return true; 1688 } 1689 1690 public void genRandomPassword() { 1691 int n, count = 0; 1692 byte[] buf = new byte[20]; 1693 byte b; 1694 Random r = new Random(); 1695 String passlist = "abcdefghijklmnopqrstuvwxyz1234567890!#$%&*+@" 1696 /* NOI18N */; 1697 1698 gui.PrPassword.set("text" /* NOI18N */, ""); 1699 while (count < 10) { 1700 n = r.nextInt() & 0x7F; 1701 b = (byte)n; 1702 if (passlist.indexOf(b) == -1) 1703 continue; 1704 buf[count++] = b; 1705 } 1706 buf[count] = 0; 1707 CurPass = new String(buf); 1708 gui.PrPassword.set("text" /* NOI18N */, CurPass); 1709 prin.setPassword((String)gui.PrPassword.get("text" /* NOI18N */)); 1710 } 1711 1712 public void setPrPolicy() { 1713 if (prin == null) 1714 return; 1715 String policy = (String)gui.PrPolicy.get("selectedItem" /* NOI18N */); 1716 if (policy.compareTo(getString("(no policy)")) == 0) 1717 policy = ""; 1718 try { 1719 prin.setPolicy(policy); 1720 } catch (Exception e) {}; 1721 setDefaultPolicy(policy); 1722 } 1723 1724 public boolean setPrMaxlife() { 1725 if (prin.setMaxlife((String)gui.PrMaxLifetime.get("text" 1726 /* NOI18N */))) { 1727 // visually delete any extraneous data that was ignored in the 1728 // parsing by resetting the gui data 1729 gui.PrMaxLifetime.set("text" /* NOI18N */, prin.getMaxLife()); 1730 return true; 1731 } else { 1732 showDataFormatError(((TextField)gui.PrMaxLifetime.getBody()), 1733 DURATION_DATA); 1734 return false; 1735 } 1736 } 1737 1738 public boolean setPrMaxrenew() { 1739 if (prin.setMaxrenew((String)gui.PrMaxRenewal.get( 1740 "text" /* NOI18N */))) { 1741 // visually delete any extraneous data that was ignored in the 1742 // parsing by resetting the gui data 1743 gui.PrMaxRenewal.set("text" /* NOI18N */, prin.getMaxRenew()); 1744 return true; 1745 } else { 1746 showDataFormatError(((TextField)gui.PrMaxRenewal.getBody()), 1747 DURATION_DATA); 1748 return false; 1749 } 1750 } 1751 1752 public boolean setPrKvno() { 1753 if (prin.setKvno((String)gui.PrKvno.get("text" /* NOI18N */))) { 1754 // visually delete any extraneous data that was ignored in the 1755 // parsing by resetting the gui data 1756 gui.PrKvno.set("text" /* NOI18N */, nf.format(prin.Kvno)); 1757 return true; 1758 } else { 1759 showDataFormatError(((TextField)gui.PrKvno.getBody()), NUMBER_DATA); 1760 return false; 1761 } 1762 } 1763 1764 public boolean setPrPwExpiry() { 1765 if (prin.setPwExpiry((String)gui.PrPwExpiry.get("text" /* NOI18N */))) { 1766 // visually delete any extraneous data that was ignored in the 1767 // parsing by resetting the gui data 1768 gui.PrPwExpiry.set("text" /* NOI18N */, prin.getPwExpireTime()); 1769 return true; 1770 } else { 1771 showDataFormatError(((TextField)gui.PrPwExpiry.getBody()), 1772 DATE_DATA); 1773 return false; 1774 } 1775 } 1776 1777 public void setPrFlag(int bitmask) { 1778 prin.flags.toggleFlags(bitmask); 1779 } 1780 1781 /** 1782 * Update components to reflect data in this principal 1783 * 1784 */ 1785 public void showPrincipal(Principal p) { 1786 1787 gui.PrName1.set("text" /* NOI18N */, p.PrName); 1788 gui.PrName2.set("text" /* NOI18N */, p.PrName); 1789 gui.PrName3.set("text" /* NOI18N */, p.PrName); 1790 gui.PrComments.set("text" /* NOI18N */, p.Comments); 1791 String policy = p.Policy; 1792 if (policy.compareTo("") == 0) 1793 policy = getString("(no policy)"); 1794 gui.PrPolicy.set("selectedItem" /* NOI18N */, policy); 1795 gui.PrPassword.set("text" /* NOI18N */, ""); 1796 1797 gui.PrLastChangedTime.set("text" /* NOI18N */, p.getModTime()); 1798 gui.PrLastChangedBy.set("text" /* NOI18N */, p.ModName); 1799 gui.PrExpiry.set("text" /* NOI18N */, p.getExpiry()); 1800 gui.EncList.set("text" /* NOI18N */, p.getEncType()); 1801 gui.PrLastSuccess.set("text" /* NOI18N */, p.getLastSuccess()); 1802 gui.PrLastFailure.set("text" /* NOI18N */, p.getLastFailure()); 1803 gui.PrFailCount.set("text" /* NOI18N */, nf.format(p.NumFailures)); 1804 gui.PrLastPwChange.set("text" /* NOI18N */, p.getLastPwChange()); 1805 gui.PrPwExpiry.set("text" /* NOI18N */, p.getPwExpireTime()); 1806 gui.PrKvno.set("text" /* NOI18N */, nf.format(p.Kvno)); 1807 gui.PrMaxLifetime.set("text" /* NOI18N */, p.getMaxLife()); 1808 gui.PrMaxRenewal.set("text" /* NOI18N */, p.getMaxRenew()); 1809 1810 gui.PrLockAcct.set("state" /* NOI18N */, 1811 new Boolean(p.flags.getFlag(Flags.DISALLOW_ALL_TIX))); 1812 gui.PrForcePwChange.set("state" /* NOI18N */, 1813 new Boolean(p.flags.getFlag(Flags.REQUIRES_PWCHANGE))); 1814 gui.PrAllowPostdated.set("state" /* NOI18N */, 1815 new Boolean(!p.flags.getFlag(Flags.DISALLOW_POSTDATED))); 1816 gui.PrAllowForwardable.set("state" /* NOI18N */, 1817 new Boolean(!p.flags.getFlag(Flags.DISALLOW_FORWARDABLE))); 1818 gui.PrAllowRenewable.set("state" /* NOI18N */, 1819 new Boolean(!p.flags.getFlag(Flags.DISALLOW_RENEWABLE))); 1820 gui.PrAllowProxiable.set("state" /* NOI18N */, 1821 new Boolean(!p.flags.getFlag(Flags.DISALLOW_PROXIABLE))); 1822 gui.PrAllowSvr.set("state" /* NOI18N */, 1823 new Boolean(!p.flags.getFlag(Flags.DISALLOW_SVR))); 1824 gui.PrAllowTGT.set("state" /* NOI18N */, 1825 new Boolean(!p.flags.getFlag(Flags.DISALLOW_TGT_BASED))); 1826 gui.PrAllowDupAuth.set("state" /* NOI18N */, 1827 new Boolean(!p.flags.getFlag(Flags.DISALLOW_DUP_SKEY))); 1828 gui.PrRequirePreAuth.set("state" /* NOI18N */, 1829 new Boolean(p.flags.getFlag(Flags.REQUIRE_PRE_AUTH))); 1830 gui.PrRequireHwPreAuth.set("state" /* NOI18N */, 1831 new Boolean(p.flags.getFlag(Flags.REQUIRE_HW_AUTH))); 1832 } 1833 1834 /** 1835 * Format a time duration for printing, using I18N formats 1836 * 1837 */ 1838 public String showDuration(Integer seconds) { 1839 return nf.format(seconds.longValue()); 1840 } 1841 1842 /* 1843 * Methods for the policy list panel 1844 */ 1845 1846 /** 1847 * Update all policy text fields from gui. 1848 * Check to see if anyone of them had a parse error. 1849 * @returns true if all is ok, false if an error occurs 1850 */ 1851 // Quits as soon as the first error is detected. The method that 1852 // detects the error also shows a dialog box with a message. 1853 public boolean poUpdateFromGui() { 1854 return (setPolName() && setPolMinlife() && setPolMaxlife()); 1855 } 1856 1857 /** 1858 * If we have edited a principal, select their policy by default 1859 * 1860 */ 1861 public void setDefaultPolicy(String name) { 1862 setCurPolicy(name); 1863 fillPolicyList(""); 1864 TextList l = (TextList)gui.Pollist.getBody(); 1865 int itemcount = l.countItems(); 1866 for (int i = 0; i < itemcount; i++) 1867 if (l.getItem(i).compareTo(name) == 0) { 1868 curPoListPos = i; 1869 break; 1870 } 1871 } 1872 1873 /** 1874 * Is the policy name field editable? 1875 * 1876 */ 1877 public void poSetEditable(boolean editable) { 1878 ponameEditable = editable; 1879 Boolean b = new Boolean(editable); 1880 gui.PoName.set("editable" /* NOI18N */, b); 1881 } 1882 1883 /** 1884 * React to a change in the policy list pattern 1885 * 1886 */ 1887 public void poPatternComplete() { 1888 curPoListPos = 0; 1889 String pattern = (String)gui.PoListPattern.get("text" /* NOI18N */); 1890 if (!noLists) 1891 showPolicyList(pattern); 1892 else 1893 setCurPolicy(pattern); 1894 } 1895 1896 /** 1897 * Clear policy list pattern 1898 * 1899 */ 1900 public void poPatternClear() { 1901 if (noLists) { 1902 gui.PoListPattern.set("text" /* NOI18N */, ""); 1903 ((TextField)gui.PoListPattern.getBody()).requestFocus(); 1904 } else { 1905 String tempName = CurPolicy; 1906 fillPolicyList(""); 1907 selectPolicy(tempName); 1908 } 1909 } 1910 1911 /** 1912 * Show the policy list after applying the filter passed in. 1913 */ 1914 public void showPolicyList(String pattern) { 1915 pol = null; // we are not editing a policy 1916 fillPolicyList(pattern); 1917 ModeString = ""; 1918 OpString = ""; 1919 updateStatus(); 1920 gui.cardpanel2.show("List" /* NOI18N */); 1921 if (noLists) 1922 ((TextField)gui.PoListPattern.getBody()).requestFocus(); 1923 } 1924 1925 /** 1926 * Generate the policy list for the first time or after a pattern 1927 * has been chosen. 1928 * 1929 */ 1930 public void fillPolicyList(String pattern) { 1931 if (noLists) { 1932 setCurPolicy((String)gui.PoListPattern.get("text" /* NOI18N */)); 1933 ((TextField)gui.PoListPattern.getBody()).requestFocus(); 1934 disablePolicyPrinting(); 1935 return; 1936 } 1937 realMainFrame.setCursor(new Cursor(Cursor.WAIT_CURSOR)); 1938 long cachetime = A_LONG_TIME; 1939 if (!defaults.getStaticLists()) 1940 cachetime = defaults.getCacheTime() * 1000; 1941 if (policyList != null 1942 && ((new Date()).getTime() - policyListDate.getTime()) 1943 <= cachetime) { 1944 if (pattern.compareTo(curPoPattern) != 0) 1945 newPoPattern(pattern); 1946 realMainFrame.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); 1947 selectPolicy(curPoListPos); 1948 return; 1949 } 1950 PolicyList p = new PolicyList(Kadmin); 1951 gui.StatusLine.set("text" /* NOI18N */, 1952 getString("Loading policy list")); 1953 try { 1954 policyList = p.getPolicyList(); 1955 policyListDate = new Date(); 1956 } catch (Exception e) { 1957 realMainFrame.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); 1958 showError(e.getMessage()); 1959 updateStatus(); 1960 return; 1961 } 1962 updateStatus(); 1963 newPoPattern(pattern); 1964 selectPolicy(curPoListPos); 1965 realMainFrame.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); 1966 } 1967 1968 private void newPoPattern(String pattern) { 1969 curPoPattern = pattern; 1970 gui.PoListPattern.set("text" /* NOI18N */, pattern); 1971 refreshPolicyList(); 1972 } 1973 1974 private void refreshPolicyList() { 1975 if (noLists) 1976 return; 1977 Filter f = new Filter(policyList, curPoPattern); 1978 gui.Pollist.set("items" /* NOI18N */, f.out); 1979 } 1980 1981 private void selectPolicy(int pos) { 1982 TextList list = (TextList)gui.Pollist.getBody(); 1983 if (list.countItems() == 0) { 1984 setCurPolicy(""); 1985 return; 1986 } 1987 1988 if (pos < 0) 1989 pos = 0; 1990 else if (pos >= list.countItems()) 1991 pos = list.countItems() - 1; 1992 1993 list.select(pos); 1994 enablePolicyPrinting(); 1995 list.makeVisible(pos); 1996 setCurPolicy(list.getItem(pos)); 1997 } 1998 1999 private void selectPolicy(String name) { 2000 String[] list = getItemsFromTextList((TextList)gui.Pollist.getBody()); 2001 selectPolicy(search(list, name)); 2002 } 2003 2004 /** 2005 * When the policy name choice changes, we want to reflect 2006 * the name in the policy detail tab. 2007 * 2008 */ 2009 public void setCurPolicy(String name) { 2010 CurPolicy = name; 2011 gui.PoName.set("text" /* NOI18N */, CurPolicy); 2012 if (name.compareTo("") == 0) { 2013 poSelValid(false); 2014 return; 2015 } 2016 poSelValid(true); 2017 } 2018 2019 /** 2020 * Look at the policy list to see what's selected 2021 * 2022 */ 2023 public void lookAtPoList() { 2024 if (noLists) 2025 return; 2026 TextList list = (TextList) gui.Pollist.getBody(); 2027 poMulti = null; 2028 String[] sel = list.getSelectedItems(); 2029 if (sel.length == 1) { 2030 setCurPolicy(sel[0]); 2031 curPoListPos = list.getSelectedIndex(); 2032 } else { 2033 if (sel.length > 0) 2034 poMulti = sel; 2035 setCurPolicy(""); 2036 } 2037 } 2038 2039 private void restorePoListSelection() { 2040 if (noLists) 2041 return; 2042 TextList list = (TextList) gui.Pollist.getBody(); 2043 list.select(curPoListPos); 2044 } 2045 2046 /** 2047 * Make Modify, Delete and Duplicate buttons react to what is selected. 2048 * 2049 */ 2050 public void poSelValid(boolean selected) { 2051 poSelValid = selected; 2052 Boolean b = new Boolean(selected && (privs & PRIV_INQUIRE) != 0); 2053 gui.PoListModify.set("enabled" /* NOI18N */, b); 2054 int want = (PRIV_ADD | PRIV_INQUIRE); 2055 b = new Boolean(selected && (privs & want) == want); 2056 gui.PoListDuplicate.set("enabled" /* NOI18N */, b); 2057 b = new Boolean((selected || poMulti != null) 2058 &&(privs & PRIV_DELETE) != 0); 2059 gui.PoListDelete.set("enabled" /* NOI18N */, b); 2060 } 2061 2062 /** 2063 * Make the Save button do the right thing. 2064 * 2065 */ 2066 public void poSetCanSave(boolean ok) { 2067 Boolean b = new Boolean(ok); 2068 gui.PoDetailSave.set("enabled" /* NOI18N */, b); 2069 } 2070 2071 /** 2072 * This is a way for the data modification actions to note that 2073 * the principal has edits outstanding. 2074 * 2075 */ 2076 public void poSetNeedSave() { 2077 poNeedSave = true; 2078 poSetCanSave(true); 2079 SaveString = getString("- *CHANGES*"); 2080 updateStatus(); 2081 } 2082 2083 public boolean poDoSave() { 2084 2085 // before attempting to save make sure all text fields are in order 2086 if (poUpdateFromGui() == false) 2087 return false; 2088 2089 boolean b = true; 2090 realMainFrame.setCursor(new Cursor(Cursor.WAIT_CURSOR)); 2091 try { 2092 b = pol.savePolicy(); 2093 } catch (Exception e) { 2094 b = false; 2095 showError(e.getMessage()); 2096 } 2097 realMainFrame.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); 2098 if (!b) 2099 return false; 2100 if (pol.isNew) { 2101 policyList = addToList(policyList, pol.PolicyName); 2102 refreshPolicyList(); 2103 selectPolicy(pol.PolicyName); 2104 setPolicyChoice(); 2105 } 2106 pol.isNew = false; 2107 poSetEditable(false); 2108 poSetCanSave(false); 2109 poNeedSave = false; 2110 SaveString = ""; 2111 updateStatus(); 2112 return true; 2113 } 2114 2115 /** 2116 * React to a choice from the policy list via double-click or 2117 * single-click+Modify; we want to go to the next tab in each case. 2118 * If we don't have modify privileges, we need to simply show values. 2119 */ 2120 public void poSelected() { 2121 enablePolicyPrinting(); 2122 lookAtPoList(); 2123 if (!poNeedSave) { 2124 poSetEditable(false); 2125 poSetCanSave(false); 2126 } 2127 if (noLists) 2128 CurPolicy = (String)gui.PoListPattern.get("text" /* NOI18N */); 2129 realMainFrame.setCursor(new Cursor(Cursor.WAIT_CURSOR)); 2130 enablePoAttributes(new Boolean((privs & (PRIV_ADD|PRIV_MODIFY)) != 0)); 2131 try { 2132 pol = new Policy(Kadmin, CurPolicy); 2133 } catch (Exception e) { 2134 showError(e.getMessage()); 2135 realMainFrame.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); 2136 return; 2137 } 2138 realMainFrame.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); 2139 showPolicy(pol); 2140 ModeString = getString("Modify")+" "; 2141 OpString = getString("Policy"); 2142 updateStatus(); 2143 gui.cardpanel2.show("Details" /* NOI18N */); 2144 } 2145 2146 /** 2147 * React to add policy button 2148 * If we got here, we need to enable attributes since we have privs. 2149 */ 2150 public void poAdd() { 2151 enablePolicyPrinting(); 2152 setCurPolicy(""); 2153 poSelValid = true; 2154 poSetEditable(true); 2155 poSetNeedSave(); 2156 enablePoAttributes(new Boolean(true)); 2157 realMainFrame.setCursor(new Cursor(Cursor.WAIT_CURSOR)); 2158 try { 2159 pol = new Policy(Kadmin); 2160 } catch (Exception e) { 2161 showError(e.getMessage()); 2162 realMainFrame.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); 2163 return; 2164 } 2165 realMainFrame.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); 2166 showPolicy(pol); 2167 ModeString = getString("Create New")+" "; 2168 OpString = getString("Policy"); 2169 updateStatus(); 2170 gui.cardpanel2.show("Details" /* NOI18N */); 2171 ((TextField)gui.PoName.getBody()).requestFocus(); 2172 } 2173 2174 /** 2175 * React to duplicate policy button 2176 * 2177 */ 2178 public void poDuplicate() { 2179 enablePolicyPrinting(); 2180 if (noLists) 2181 CurPolicy = (String)gui.PoListPattern.get("text" /* NOI18N */); 2182 realMainFrame.setCursor(new Cursor(Cursor.WAIT_CURSOR)); 2183 try { 2184 pol = new Policy(Kadmin, CurPolicy); 2185 } catch (Exception e) { 2186 showError(e.getMessage()); 2187 realMainFrame.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); 2188 return; 2189 } 2190 realMainFrame.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); 2191 setCurPolicy(""); 2192 poSelValid = true; 2193 poSetEditable(true); 2194 poSetNeedSave(); 2195 try { 2196 pol = new Policy(Kadmin, pol); 2197 } catch (Exception e) { 2198 showError(e.getMessage()); 2199 return; 2200 } 2201 pol.PolicyName = ""; 2202 showPolicy(pol); 2203 ModeString = getString("Duplicate")+" "; 2204 OpString = getString("Policy"); 2205 updateStatus(); 2206 gui.cardpanel2.show("Details" /* NOI18N */); 2207 ((TextField)gui.PoName.getBody()).requestFocus(); 2208 } 2209 2210 /** 2211 * React to delete policy button 2212 */ 2213 public void poDelete() { 2214 String text[] = {getString("You are about to destroy data."), 2215 getString("Click OK to proceed or" 2216 +" Cancel to continue editing.")}; 2217 String resp = confirmAction(realMainFrame, text); 2218 if (resp.equals(getString("Cancel"))) 2219 return; 2220 boolean b; 2221 if (noLists) 2222 CurPolicy = (String)gui.PoListPattern.get("text" /* NOI18N */); 2223 realMainFrame.setCursor(new Cursor(Cursor.WAIT_CURSOR)); 2224 try { 2225 b = Kadmin.deletePolicy(CurPolicy); 2226 } catch (Exception e) { 2227 showError(e.getMessage()); 2228 realMainFrame.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); 2229 return; 2230 } 2231 realMainFrame.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); 2232 if (!b) 2233 return; 2234 policyList = delFromList(policyList, CurPolicy); 2235 refreshPolicyList(); 2236 setPolicyChoice(); 2237 setCurPolicy(""); 2238 poSelValid = true; 2239 poSetEditable(true); 2240 if (curPoListPos == ((TextList)gui.Pollist.getBody()).countItems()) 2241 curPoListPos--; 2242 showPolicyList(curPoPattern); 2243 } 2244 2245 /** 2246 * React to save policy button 2247 * 2248 */ 2249 public void poSave() { 2250 poDoSave(); 2251 } 2252 2253 /** 2254 * React to cancel policy button 2255 * 2256 */ 2257 public void poCancel() { 2258 if (poNeedSave) { 2259 String text[] = {getString("You are about to lose changes."), 2260 getString("Click Save to commit changes, " 2261 +"Discard to discard changes, " 2262 +"or Cancel to continue editing.")}; 2263 String resp = confirmSave(realMainFrame, text); 2264 if (resp.equals(getString("Cancel"))) 2265 return; 2266 if (resp.equals(getString("Save"))) 2267 if (!poDoSave()) 2268 return; 2269 } 2270 poSetEditable(false); 2271 poSetCanSave(false); 2272 poNeedSave = false; 2273 lookAtPoList(); 2274 SaveString = ""; 2275 showPolicyList(curPoPattern); 2276 } 2277 2278 /** 2279 * React to previous button on policy detail screen 2280 * 2281 */ 2282 public void polPrevious() { 2283 poCancel(); 2284 } 2285 2286 /** 2287 * React to done button on policy detail screen 2288 * 2289 */ 2290 public void polDone() { 2291 if (poNeedSave && poDoSave() == false) 2292 return; 2293 showPolicyList(curPoPattern); 2294 } 2295 2296 /* 2297 * Methods for the policy details panel 2298 */ 2299 2300 public boolean setPolName() { 2301 if (!ponameEditable) 2302 return true; 2303 2304 String p = (String)gui.PoName.get("text" /* NOI18N */); 2305 if (p.compareTo(getString("(no policy)")) == 0) { 2306 showError(getString("Policy name already exists. Please choose " 2307 +"a different policy name or cancel")); 2308 gui.PoName.set("text" /* NOI18N */, ""); 2309 ((TextField)gui.PoName.getBody()).requestFocus(); 2310 return false; 2311 } 2312 if (p.compareTo("") == 0) { 2313 showError(getString("Please enter a policy name or cancel")); 2314 ((TextField)gui.PoName.getBody()).requestFocus(); 2315 return false; 2316 } 2317 2318 setCurPolicy(p); 2319 pol.setName(p); 2320 return true; 2321 } 2322 2323 public void setPolPwLength() { 2324 if (pol == null) 2325 return; 2326 try { 2327 pol.setPolPwLength((String)gui.PoMinPwLength.get("selectedItem" 2328 /* NOI18N */)); 2329 } catch (Exception e) {}; 2330 } 2331 2332 public void setPolPwClasses() { 2333 if (pol == null) 2334 return; 2335 try { 2336 pol.setPolPwClasses((String)gui.PoMinPwClass.get("selectedItem" 2337 /* NOI18N */)); 2338 } catch (Exception e) {}; 2339 } 2340 2341 public void setPolPwHistory() { 2342 if (pol == null) 2343 return; 2344 try { 2345 pol.setPolPwHistory((String)gui.PoSavedPasswords.get("selectedItem" 2346 /* NOI18N */)); 2347 } catch (Exception e) {}; 2348 } 2349 2350 public boolean setPolMinlife() { 2351 if (pol.setPolMinlife((String)gui.PoMinTicketLifetime.get("text" 2352 /* NOI18N */))) { 2353 // visually delete any extraneous data that was ignored in the 2354 // parsing by resetting the gui data 2355 gui.PoMinTicketLifetime.set("text" /* NOI18N */, 2356 showDuration(pol.PwMinLife)); 2357 return true; 2358 } else { 2359 showDataFormatError(((TextField)gui.PoMinTicketLifetime.getBody()), 2360 DURATION_DATA); 2361 return false; 2362 } 2363 } 2364 2365 public boolean setPolMaxlife() { 2366 if (pol.setPolMaxlife((String)gui.PoMaxTicketLifetime.get( 2367 "text" /* NOI18N */))) { 2368 // visually delete any extraneous data that was ignored in the 2369 // parsing by resetting the gui data 2370 gui.PoMaxTicketLifetime.set("text" /* NOI18N */, 2371 showDuration(pol.PwMaxLife)); 2372 return true; 2373 } else { 2374 showDataFormatError(((TextField)gui.PoMaxTicketLifetime.getBody()), 2375 DURATION_DATA); 2376 return false; 2377 } 2378 } 2379 2380 /** 2381 * Update components to reflect data in this policy 2382 * 2383 */ 2384 public void showPolicy(Policy p) { 2385 gui.PoName.set("text" /* NOI18N */, p.PolicyName); 2386 gui.PoMinPwLength.set("selectedItem" /* NOI18N */, 2387 nf.format(p.PwMinLength)); 2388 gui.PoMinPwClass.set("selectedItem" /* NOI18N */, 2389 nf.format(p.PwMinClasses)); 2390 gui.PoSavedPasswords.set("selectedItem" /* NOI18N */, 2391 nf.format(p.PwSaveCount)); 2392 gui.PoMinTicketLifetime.set("text" /* NOI18N */, 2393 showDuration(p.PwMinLife)); 2394 gui.PoMaxTicketLifetime.set("text" /* NOI18N */, 2395 showDuration(p.PwMaxLife)); 2396 gui.PoReferences.set("text" /* NOI18N */, nf.format(p.RefCount)); 2397 } 2398 2399 /* 2400 * Methods for defaults tab 2401 */ 2402 2403 /** 2404 * React to save button 2405 * 2406 */ 2407 public void glSave() { 2408 if (defaults.updateFromGui()) { 2409 glDoSave(true); 2410 glUpdate(); 2411 } 2412 } 2413 2414 /** 2415 * React to apply button 2416 * 2417 */ 2418 public void glApply() { 2419 if (defaults.updateFromGui()) { 2420 glDoSave(false); 2421 glUpdate(); 2422 } 2423 } 2424 2425 /** 2426 * React to cancel button 2427 * 2428 */ 2429 public void glCancel() { 2430 if (glNeedSave) { 2431 String text[] = {getString("You are about to lose changes."), 2432 getString("Click Save to commit changes, " 2433 +"Discard to discard changes, " 2434 +"or Cancel to continue editing.")}; 2435 String resp = confirmSave(defaultsEditingFrame, text); 2436 if (resp.equals(getString("Cancel"))) 2437 return; 2438 if (resp.equals(getString("Discard"))) 2439 defaults.restoreValues(olddefaults); 2440 if (resp.equals(getString("Save"))) { 2441 glDoSave(true); 2442 glUpdate(); 2443 return; 2444 } 2445 } 2446 glDoSave(false); 2447 } 2448 2449 public void glDoSave(boolean save) { 2450 defaults.close(save); 2451 glSetCanSave(false); 2452 glNeedSave = false; 2453 SaveString = ""; 2454 updateStatus(); 2455 } 2456 2457 public void glUpdate() { 2458 noLists = ((privs & PRIV_LIST) == 0 || !defaults.getShowLists()); 2459 fixHelpTags(); 2460 fixListPanels(); 2461 // Load principal list if we are in the principal tab and are not 2462 // editing a principal 2463 if (gui.tabbedfolder1.get("currentCard" /* NO18N */) == 2464 getString("Principals") && prin == null) 2465 fillPrincipalList(curPrPattern); 2466 // Load policy list if we are in the policy tab and are not 2467 // editing a policy 2468 if (gui.tabbedfolder1.get("currentCard" /* NO18N */) == 2469 getString("Policies") && pol == null) 2470 fillPolicyList(curPoPattern); 2471 } 2472 2473 /** 2474 * This is a way for the data modification actions to note that 2475 * the principal has edits outstanding. 2476 * 2477 */ 2478 public void glSetNeedSave() { 2479 glNeedSave = true; 2480 glSetCanSave(true); 2481 } 2482 2483 /** 2484 * Make the Save button do the right thing. 2485 * 2486 */ 2487 public void glSetCanSave(boolean ok) { 2488 defaults.saveButton.setEnabled(ok); 2489 defaults.applyButton.setEnabled(ok); 2490 } 2491 2492 public boolean setGlobalMaxrenew() { 2493 boolean done = defaults.setMaxTicketRenewableLife(); 2494 glSetNeedSave(); 2495 return done; 2496 } 2497 2498 public boolean setGlobalMaxlife() { 2499 boolean done = defaults.setMaxTicketLife(); 2500 glSetNeedSave(); 2501 return done; 2502 } 2503 2504 public boolean setGlobalExpiry() { 2505 boolean done = defaults.setAccountExpiryDate(); 2506 glSetNeedSave(); 2507 return done; 2508 } 2509 2510 public boolean setServerSide() { 2511 boolean done = defaults.setServerSide(); 2512 glSetNeedSave(); 2513 return done; 2514 } 2515 2516 public boolean setShowLists() { 2517 boolean done = defaults.setShowLists(); 2518 glSetNeedSave(); 2519 return done; 2520 } 2521 2522 public boolean setStaticLists() { 2523 boolean done = defaults.setStaticLists(); 2524 glSetNeedSave(); 2525 return done; 2526 } 2527 2528 public boolean setCacheTime() { 2529 boolean done = defaults.setCacheTime(); 2530 glSetNeedSave(); 2531 return done; 2532 } 2533 2534 public void setGlobalFlag(int bitfield) { 2535 defaults.toggleFlag(bitfield); 2536 glSetNeedSave(); 2537 } 2538 2539 /* 2540 * Miscellany 2541 */ 2542 public void printPrList() { 2543 String title = getString("Principal List"); 2544 if (curPrPattern.length() > 0) 2545 title = title.concat(" (" + getString("Filter Pattern:") + " " 2546 + curPrPattern + ")"); 2547 if (principalList == null) 2548 fillPrincipalList(curPrPattern); 2549 printList((TextList)gui.Prlist.getBody(), title); 2550 } 2551 2552 public void printCurPr() { 2553 Principal toPrint; 2554 2555 if (prin == null) { 2556 // We are viewing the principal list. Instantiate a new 2557 // principal using the current name. 2558 toPrint = new Principal(Kadmin, CurPrincipal); 2559 } else { 2560 // We are in the middle of editing a principal. Update the 2561 // current principal object with the current contents of the 2562 // gui. It's ok for the password to be null, we are not printing 2563 // it anyway. 2564 if (!prUpdateFromGui(true)) 2565 return; 2566 toPrint = prin; 2567 } 2568 2569 PrintUtil.dump(realMainFrame, toPrint); 2570 } 2571 2572 public void printPoList() { 2573 String title = getString("Policy List"); 2574 if (curPoPattern.length() > 0) 2575 title = title.concat(" (" + getString("Filter Pattern:") + " " 2576 + curPoPattern + ")"); 2577 if (policyList == null) 2578 fillPolicyList(curPoPattern); 2579 printList((TextList)gui.Pollist.getBody(), title); 2580 } 2581 2582 public void printCurPol() { 2583 Policy toPrint; 2584 2585 if (pol == null) { 2586 // We are viewing the policy list. Instantiate a new 2587 // policy using the current name. 2588 toPrint = new Policy(Kadmin, CurPolicy); 2589 } else { 2590 // We are in the middle of editing a policy. Update the current 2591 // policy object with the current contents of the gui. 2592 if (!poUpdateFromGui()) 2593 return; 2594 toPrint = pol; 2595 } 2596 2597 PrintUtil.dump(realMainFrame, toPrint); 2598 2599 } 2600 2601 private void printList(TextList guiList, String title) { 2602 String[] list = getItemsFromTextList(guiList); 2603 StringBuffer sb = new StringBuffer(title).append('\n'); 2604 2605 for (int i = 0; i < list.length; i++) { 2606 sb.append(list[i]).append('\n'); 2607 } 2608 2609 PrintUtil.dump(realMainFrame, sb); 2610 } 2611 2612 public void showHelpBrowser(Frame frame) { 2613 try { 2614 2615 File file = new File("/usr/dt/bin/sdtwebclient"); 2616 if (!file.exists()) { 2617 showDialog(frame, getString("Error"), 2618 getString("Can't run /usr/dt/bin/sdtwebclient.")); 2619 return; 2620 } 2621 String url = kc.getHelpURL(); 2622 if (url == null) 2623 url = helpIndexFile; 2624 URL help = new URL(url); 2625 InputStream is = null; 2626 try { 2627 is = help.openStream(); 2628 } catch (IOException e) {} 2629 if (is == null) { 2630 showDialog(frame, getString("Error"), 2631 getString("Invalid URL: ")+url); 2632 return; 2633 } 2634 2635 if (browserProcess != null) { 2636 // Will throw IllegalThreadStateException if thread not exited 2637 // yet 2638 int i = browserProcess.exitValue(); 2639 } 2640 2641 // Thread has exited or never existed 2642 browserProcess = 2643 Runtime.getRuntime().exec("/usr/dt/bin/sdtwebclient" +url); 2644 2645 } catch (IOException e) { 2646 showDialog(frame, getString("Error"), e.getMessage()); 2647 } catch (IllegalThreadStateException e) { 2648 // Ok. All this mean is that a previous instance of the browser 2649 // exists 2650 } 2651 } 2652 2653 private void killHelpBrowser() { 2654 if (browserProcess != null) { 2655 browserProcess.destroy(); 2656 } 2657 } 2658 2659 private void setupDefaultsEditingFrame() { 2660 defaultsEditingFrame = defaults.getEditingFrame(); 2661 glSetCanSave(false); 2662 setupDefaultsNormalListeners(); 2663 defaults.csHelp.addActionListener 2664 (new DefaultsContextSensitiveHelpListener()); 2665 } 2666 2667 public void editPreferences() { 2668 olddefaults = new Defaults(defaults); 2669 defaults.updateGuiComponents(); 2670 defaultsEditingFrame.setVisible(true); 2671 } 2672 2673 static Frame getFrame(Component c) { 2674 Frame frame = null; 2675 2676 while ((c = c.getParent()) != null) 2677 if (c instanceof Frame) 2678 frame = (Frame)c; 2679 return frame; 2680 } 2681 2682 /** 2683 * General purpose dialog with title and a label settable 2684 */ 2685 public void showDialog(Frame frame, String title, String text) { 2686 String[] lines = new String[1]; 2687 lines[0] = text; 2688 String[] buttons = new String[1]; 2689 buttons[0] = getString("OK"); 2690 ChoiceDialog cd = new ChoiceDialog(frame, title, lines, buttons); 2691 } 2692 2693 public void showLoginWarning(String err) { 2694 showDialog(realLoginFrame, getString("Warning"), err); 2695 } 2696 2697 public void showLoginError(String err) { 2698 showDialog(realLoginFrame, getString("Error"), err); 2699 } 2700 2701 public void showWarning(String err) { 2702 showDialog(realMainFrame, getString("Warning"), err); 2703 } 2704 2705 public void showError(String err) { 2706 showDialog(realMainFrame, getString("Error"), err); 2707 } 2708 2709 public static void showDataFormatError(TextField tf, int dataType) { 2710 2711 Frame parent = getFrame(tf); 2712 2713 tf.selectAll(); 2714 toolkit.beep(); 2715 2716 String title = getString("Error"); 2717 2718 String[] lines = null; 2719 String[] buttons = {getString("OK")}; 2720 2721 switch (dataType) { 2722 case DURATION_DATA: 2723 lines = durationErrorText; 2724 break; 2725 case DATE_DATA: 2726 lines = dateErrorText; 2727 break; 2728 case NUMBER_DATA: 2729 lines = numberErrorText; 2730 break; 2731 } 2732 2733 Point p = tf.getLocationOnScreen(); 2734 ChoiceDialog cd = new ChoiceDialog(parent, title, lines, 2735 buttons, p.x, p.y); 2736 2737 tf.requestFocus(); 2738 2739 } 2740 2741 /** 2742 * Confirm a destructive user action 2743 */ 2744 public String confirmAction(Frame frame, String[] text) { 2745 String title = getString("Confirm Action"); 2746 String[] buttons = new String[2]; 2747 buttons[0] = getString("OK"); 2748 buttons[1] = getString("Cancel"); 2749 ChoiceDialog cd = new ChoiceDialog(frame, title, text, buttons); 2750 return (cd.getSelection() == null? getString("Cancel") 2751 :cd.getSelection()); 2752 } 2753 2754 /** 2755 * Confirm a destructive user action, offering choice of saving 2756 */ 2757 public String confirmSave(Frame frame, String[] text) { 2758 String title = getString("Confirm Action"); 2759 String[] buttons = new String[3]; 2760 buttons[0] = getString("Save"); 2761 buttons[1] = getString("Discard"); 2762 buttons[2] = getString("Cancel"); 2763 ChoiceDialog cd = new ChoiceDialog(frame, title, text, buttons); 2764 return (cd.getSelection() == null? getString("Cancel") 2765 : cd.getSelection()); 2766 } 2767 2768 /** 2769 * Show version info 2770 */ 2771 public void doAbout(Frame frame) { 2772 String title = getString("About SEAM Adminstration Tool"); 2773 String[] text = new String[7]; 2774 text[0] = getString("Sun Enterprise Authentication" 2775 +" Mechanism Administration Tool"); 2776 text[1] = System.getProperty("SEAM_VERS" /* NOI18N */); 2777 text[2] = getString("Copyright 2005 Sun Microsystems, Inc. " 2778 +"All rights reserved."); 2779 text[3] = getString("Use is subject to license terms."); 2780 text[4] = System.getProperty("os.name" /* NOI18N */); 2781 text[5] = System.getProperty("os.arch" /* NOI18N */); 2782 text[6] = System.getProperty("os.version" /* NOI18N */); 2783 String[] button = new String[1]; 2784 button[0] = getString("Dismiss"); 2785 ChoiceDialog cd = new ChoiceDialog(frame, title, text, button); 2786 } 2787 2788 private void getDateTimeFromDialogBox(TextField tf, Frame frame) { 2789 tf.select(0, 0); 2790 dateTimeDialog = new DateTimeDialog(frame, tf.getBackground(), 2791 tf.getForeground()); 2792 2793 if (!tf.getText().equalsIgnoreCase(neverString)) { 2794 try { 2795 Date currVal = df.parse(tf.getText()); 2796 dateTimeDialog.setDate(currVal); 2797 /* 2798 * In case an exception occurs, let the dialog box be 2799 * initialized to its default date (viz current time). 2800 */ 2801 } catch (ParseException e) { 2802 } catch (NullPointerException e) { 2803 // gets thrown when parse string begins with text 2804 // probable JDK bug 2805 } 2806 catch (StringIndexOutOfBoundsException e) { 2807 // gets thrown when parse string contains only one number 2808 // probable JDK bug 2809 } 2810 } 2811 dateTimeDialog.setVisible(true); 2812 2813 // Modal dialog box so this is after dialog box disappers 2814 if (dateTimeDialog.isSaved()) { 2815 tf.setText(dateTimeDialog.toString()); 2816 tf.dispatchEvent(new ActionEvent(tf, ActionEvent.ACTION_PERFORMED, 2817 "setFromDateTimeDialog" /* NOI18N */)); 2818 } 2819 } 2820 2821 private void getDurationFromDialogBox(TextField tf, Frame frame) { 2822 tf.select(0, 0); 2823 durationHelper = new DurationHelper(frame, tf.getBackground(), 2824 tf.getForeground()); 2825 durationHelper.setVisible(true); 2826 2827 // Modal dialog box so this is after dialog box disappers 2828 if (durationHelper.isSaved()) { 2829 tf.setText(durationHelper.toString()); 2830 tf.dispatchEvent(new ActionEvent(tf, ActionEvent.ACTION_PERFORMED, 2831 "setFromDurationHelper" /* NOI18N */)); 2832 } 2833 } 2834 2835 private void getEncListFromDialogBox(TextField tf, Frame frame) { 2836 tf.select(0, 0); 2837 encListDialog = new EncListDialog(frame, tf.getBackground(), 2838 tf.getForeground(), Kadmin); 2839 2840 encListDialog.setEncTypes(tf.getText()); 2841 encListDialog.setVisible(true); 2842 2843 // Modal dialog box so this is after dialog box disappers 2844 if (encListDialog.isSaved()) { 2845 String e = encListDialog.toString(); 2846 2847 if (e.compareTo("") != 0) { 2848 String p = (String)gui.PrPassword.get("text" /* NOI18N */); 2849 2850 // In order to change the key encryption type(s) the admin 2851 // will have to supply a password. 2852 if (p.compareTo("") == 0) { 2853 showWarning(getString( 2854 "If changing the key encryption types then specify a" + 2855 " new password for the principal whose keys are" + 2856 " being changed")); 2857 ((TextField)gui.PrPassword.getBody()).requestFocus(); 2858 } 2859 } 2860 tf.setText(e); 2861 tf.dispatchEvent(new ActionEvent(tf, 2862 ActionEvent.ACTION_PERFORMED, 2863 "setFromEncListDialog" /* NOI18N */)); 2864 } 2865 } 2866 2867 /** 2868 * By going into context-sensitive help mode, normal listeners will 2869 * be removed and replaced with help listeners, so that help will 2870 * be shown for the object. 2871 * 2872 */ 2873 public void contextHelp(Frame frame) { 2874 2875 if (cHelp == null) { 2876 cHelp = new ContextHelp(frame, this); 2877 cHelp.setVisible(true); 2878 } 2879 2880 if (frame == realLoginFrame) 2881 setupLoginHelpListeners(); 2882 else if (frame == realMainFrame) 2883 setupMainHelpListeners(); 2884 else if (frame == defaultsEditingFrame) 2885 setupDefaultsHelpListeners(); 2886 2887 frame.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR)); 2888 } 2889 2890 2891 /** 2892 * Enables the print menu for printing principal related info. 2893 */ 2894 private void enablePrincipalPrinting() { 2895 ((MenuItem)gui.PrintCurPr.getBody()).setEnabled(true); 2896 } 2897 2898 /** 2899 * Enables the print menu for printing policy related info. 2900 */ 2901 private void enablePolicyPrinting() { 2902 ((MenuItem)gui.PrintCurPol.getBody()).setEnabled(true); 2903 } 2904 2905 /** 2906 * Disables the print menu for printing principal related info. 2907 */ 2908 private void disablePrincipalPrinting() { 2909 ((MenuItem)gui.PrintCurPr.getBody()).setEnabled(false); 2910 } 2911 2912 /** 2913 * Disables the print menu for printing policy related info. 2914 */ 2915 private void disablePolicyPrinting() { 2916 ((MenuItem)gui.PrintCurPol.getBody()).setEnabled(false); 2917 } 2918 2919 /** 2920 * Set up the listeners for the objects on the login screen in normal mode 2921 * 2922 */ 2923 public void setupLoginNormalListeners() { 2924 if (LoginNormal == null) { 2925 LoginNormal = new Vector(10, 10); 2926 ActionListener al; 2927 Association a; 2928 Object o; 2929 2930 al = new LoginNameAction(); 2931 o = gui.LoginName.getBody(); 2932 a = new Association(o, al, TEXTFIELD_ACTION); 2933 LoginNormal.addElement(a); 2934 2935 al = new LoginPassAction(); 2936 o = gui.LoginPass.getBody(); 2937 a = new Association(o, al, TEXTFIELD_ACTION); 2938 LoginNormal.addElement(a); 2939 2940 al = new LoginRealmAction(); 2941 o = gui.LoginRealm.getBody(); 2942 a = new Association(o, al, TEXTFIELD_ACTION); 2943 LoginNormal.addElement(a); 2944 2945 al = new LoginServerAction(); 2946 o = gui.LoginServer.getBody(); 2947 a = new Association(o, al, TEXTFIELD_ACTION); 2948 LoginNormal.addElement(a); 2949 2950 al = new LoginOKAction(); 2951 o = gui.LoginOK.getBody(); 2952 a = new Association(o, al, BUTTON_ACTION); 2953 LoginNormal.addElement(a); 2954 2955 al = new LoginStartOverAction(); 2956 o = gui.LoginStartOver.getBody(); 2957 a = new Association(o, al, BUTTON_ACTION); 2958 LoginNormal.addElement(a); 2959 } 2960 setListeners(LoginHelp, false); 2961 setListeners(LoginFixers, false); 2962 setListeners(LoginNormal, true); 2963 loginHelpMode = false; 2964 } 2965 2966 /** 2967 * Set up the listeners for the objects on the login screen in help mode 2968 * 2969 */ 2970 public void setupLoginHelpListeners() { 2971 if (LoginHelp == null) { 2972 LoginHelp = new Vector(10, 10); 2973 MouseListener ml = new HelpListener(); 2974 Association a; 2975 Object o; 2976 2977 o = gui.LoginName.getBody(); 2978 a = new Association(o, ml, TEXTFIELD_MOUSE); 2979 LoginHelp.addElement(a); 2980 ((TextField)o).setName("LoginName" /* NOI18N */); 2981 2982 o = gui.LoginNameLabel.getBody(); 2983 a = new Association(o, ml, LABEL_MOUSE); 2984 LoginHelp.addElement(a); 2985 ((Label)o).setName("LoginName" /* NOI18N */); 2986 2987 o = gui.LoginPass.getBody(); 2988 a = new Association(o, ml, TEXTFIELD_MOUSE); 2989 LoginHelp.addElement(a); 2990 ((TextField)o).setName("LoginPass" /* NOI18N */); 2991 2992 o = gui.LoginPassLabel.getBody(); 2993 a = new Association(o, ml, LABEL_MOUSE); 2994 LoginHelp.addElement(a); 2995 ((Label)o).setName("LoginPass" /* NOI18N */); 2996 2997 o = gui.LoginRealm.getBody(); 2998 a = new Association(o, ml, TEXTFIELD_MOUSE); 2999 LoginHelp.addElement(a); 3000 ((TextField)o).setName("LoginRealm" /* NOI18N */); 3001 3002 o = gui.LoginRealmLabel.getBody(); 3003 a = new Association(o, ml, LABEL_MOUSE); 3004 LoginHelp.addElement(a); 3005 ((Label)o).setName("LoginRealm" /* NOI18N */); 3006 3007 o = gui.LoginServer.getBody(); 3008 a = new Association(o, ml, TEXTFIELD_MOUSE); 3009 LoginHelp.addElement(a); 3010 ((TextField)o).setName("LoginServer" /* NOI18N */); 3011 3012 o = gui.LoginServerLabel.getBody(); 3013 a = new Association(o, ml, LABEL_MOUSE); 3014 LoginHelp.addElement(a); 3015 ((Label)o).setName("LoginServer" /* NOI18N */); 3016 3017 o = gui.LoginOK.getBody(); 3018 a = new Association(o, ml, BUTTON_MOUSE); 3019 LoginHelp.addElement(a); 3020 ((Button)o).setName("LoginOK" /* NOI18N */); 3021 3022 o = gui.LoginStartOver.getBody(); 3023 a = new Association(o, ml, BUTTON_MOUSE); 3024 LoginHelp.addElement(a); 3025 ((Button)o).setName("LoginStartOver" /* NOI18N */); 3026 } 3027 setListeners(LoginNormal, false); 3028 setListeners(LoginHelp, true); 3029 setupLoginHelpFixers(); 3030 loginHelpMode = true; 3031 } 3032 3033 public void setupLoginHelpFixers() { 3034 LoginFixers = new Vector(10, 10); 3035 Object o; 3036 Association a; 3037 TextFixer tf; 3038 3039 o = gui.LoginName.getBody(); 3040 tf = new TextFixer((TextField)o); 3041 a = new Association(o, tf, TEXTFIELD_KEY); 3042 LoginFixers.addElement(a); 3043 3044 o = gui.LoginPass.getBody(); 3045 tf = new TextFixer((TextField)o); 3046 a = new Association(o, tf, TEXTFIELD_KEY); 3047 LoginFixers.addElement(a); 3048 3049 o = gui.LoginRealm.getBody(); 3050 tf = new TextFixer((TextField)o); 3051 a = new Association(o, tf, TEXTFIELD_KEY); 3052 LoginFixers.addElement(a); 3053 3054 o = gui.LoginServer.getBody(); 3055 tf = new TextFixer((TextField)o); 3056 a = new Association(o, tf, TEXTFIELD_KEY); 3057 LoginFixers.addElement(a); 3058 3059 setListeners(LoginFixers, true); 3060 } 3061 3062 /** 3063 * Set up the listeners for the objects on the main screen in normal mode 3064 * 3065 */ 3066 public void setupMainNormalListeners() { 3067 if (MainNormal == null) { 3068 Frame fr = realMainFrame; 3069 MainNormal = new Vector(10, 10); 3070 ActionListener al; 3071 ItemListener il; 3072 DateTimeListener dtl; 3073 DurationListener dl; 3074 EncListListener ell; 3075 KeyListener kl1 = new KeystrokeDetector(PRINCIPAL_EDITING); 3076 KeyListener kl2 = new KeystrokeDetector(POLICY_EDITING); 3077 KeyListener kl3 = new KeystrokeDetector(PRINCIPAL_LIST); 3078 KeyListener kl4 = new KeystrokeDetector(POLICY_LIST); 3079 Association a; 3080 Object o; 3081 3082 WindowListener wl = new MainWindowCloseAction(); 3083 o = realMainFrame; 3084 a = new Association(o, wl, WINDOW_LISTENER); 3085 MainNormal.addElement(a); 3086 3087 al = new PrListPatternAction(); 3088 o = gui.PrListPattern.getBody(); 3089 a = new Association(o, al, TEXTFIELD_ACTION); 3090 MainNormal.addElement(a); 3091 a = new Association(o, kl3, TEXTFIELD_KEY); 3092 MainNormal.addElement(a); 3093 3094 al = new PrListClearAction(); 3095 o = gui.PrListClear.getBody(); 3096 a = new Association(o, al, BUTTON_ACTION); 3097 MainNormal.addElement(a); 3098 3099 al = new PrListModifyAction(); 3100 o = gui.PrListModify.getBody(); 3101 a = new Association(o, al, BUTTON_ACTION); 3102 MainNormal.addElement(a); 3103 3104 al = new PrListAddAction(); 3105 o = gui.PrListAdd.getBody(); 3106 a = new Association(o, al, BUTTON_ACTION); 3107 MainNormal.addElement(a); 3108 3109 al = new PrListDeleteAction(); 3110 o = gui.PrListDelete.getBody(); 3111 a = new Association(o, al, BUTTON_ACTION); 3112 MainNormal.addElement(a); 3113 3114 al = new PrListDuplicateAction(); 3115 o = gui.PrListDuplicate.getBody(); 3116 a = new Association(o, al, BUTTON_ACTION); 3117 MainNormal.addElement(a); 3118 3119 al = new PrSaveAction(); 3120 o = gui.PrBasicSave.getBody(); 3121 a = new Association(o, al, BUTTON_ACTION); 3122 MainNormal.addElement(a); 3123 o = gui.PrDetailSave.getBody(); 3124 a = new Association(o, al, BUTTON_ACTION); 3125 MainNormal.addElement(a); 3126 o = gui.PrFlagsSave.getBody(); 3127 a = new Association(o, al, BUTTON_ACTION); 3128 MainNormal.addElement(a); 3129 3130 al = new PrCancelAction(); 3131 o = gui.PrBasicCancel.getBody(); 3132 a = new Association(o, al, BUTTON_ACTION); 3133 MainNormal.addElement(a); 3134 o = gui.PrDetailCancel.getBody(); 3135 a = new Association(o, al, BUTTON_ACTION); 3136 MainNormal.addElement(a); 3137 o = gui.PrFlagsCancel.getBody(); 3138 a = new Association(o, al, BUTTON_ACTION); 3139 MainNormal.addElement(a); 3140 3141 al = new PrCommentsAction(); 3142 o = gui.PrComments.getBody(); 3143 a = new Association(o, al, TEXTFIELD_ACTION); 3144 MainNormal.addElement(a); 3145 a = new Association(o, kl1, TEXTFIELD_KEY); 3146 MainNormal.addElement(a); 3147 3148 il = new PrPolicyAction(); 3149 o = gui.PrPolicy.getBody(); 3150 a = new Association(o, il, CHOICE_ITEM); 3151 MainNormal.addElement(a); 3152 3153 al = new PrPasswordAction(); 3154 o = gui.PrPassword.getBody(); 3155 a = new Association(o, al, TEXTFIELD_ACTION); 3156 MainNormal.addElement(a); 3157 a = new Association(o, kl1, TEXTFIELD_KEY); 3158 MainNormal.addElement(a); 3159 3160 al = new PrRandomPwAction(); 3161 o = gui.PrBasicRandomPw.getBody(); 3162 a = new Association(o, al, BUTTON_ACTION); 3163 MainNormal.addElement(a); 3164 3165 al = new EncListAction(); 3166 o = gui.EncList.getBody(); 3167 a = new Association(o, al, TEXTFIELD_ACTION); 3168 MainNormal.addElement(a); 3169 a = new Association(o, kl1, TEXTFIELD_KEY); 3170 MainNormal.addElement(a); 3171 3172 ell = new EncListListener((TextField)gui.EncList.getBody(), fr); 3173 o = gui.EncListMoreButton.getBody(); 3174 a = new Association(o, ell, BUTTON_ACTION); 3175 MainNormal.addElement(a); 3176 3177 al = new PrExpiryAction(); 3178 o = gui.PrExpiry.getBody(); 3179 a = new Association(o, al, TEXTFIELD_ACTION); 3180 MainNormal.addElement(a); 3181 a = new Association(o, kl1, TEXTFIELD_KEY); 3182 MainNormal.addElement(a); 3183 3184 dtl = new DateTimeListener((TextField)gui.PrExpiry.getBody(), fr); 3185 o = gui.PrExpiryMoreButton.getBody(); 3186 a = new Association(o, dtl, BUTTON_ACTION); 3187 MainNormal.addElement(a); 3188 3189 al = new PrBasicPreviousAction(); 3190 o = gui.PrBasicPrevious.getBody(); 3191 a = new Association(o, al, BUTTON_ACTION); 3192 MainNormal.addElement(a); 3193 3194 al = new PrBasicNextAction(); 3195 o = gui.PrBasicNext.getBody(); 3196 a = new Association(o, al, BUTTON_ACTION); 3197 MainNormal.addElement(a); 3198 3199 al = new PrPwExpiryAction(); 3200 o = gui.PrPwExpiry.getBody(); 3201 a = new Association(o, al, TEXTFIELD_ACTION); 3202 MainNormal.addElement(a); 3203 a = new Association(o, kl1, TEXTFIELD_KEY); 3204 MainNormal.addElement(a); 3205 3206 dtl = new DateTimeListener((TextField)gui.PrPwExpiry.getBody(), fr); 3207 o = gui.PrPwExpiryMoreButton.getBody(); 3208 a = new Association(o, dtl, BUTTON_ACTION); 3209 MainNormal.addElement(a); 3210 3211 al = new PrKvnoAction(); 3212 o = gui.PrKvno.getBody(); 3213 a = new Association(o, al, TEXTFIELD_ACTION); 3214 MainNormal.addElement(a); 3215 a = new Association(o, kl1, TEXTFIELD_KEY); 3216 MainNormal.addElement(a); 3217 3218 al = new PrMaxLifetimeAction(); 3219 o = gui.PrMaxLifetime.getBody(); 3220 a = new Association(o, al, TEXTFIELD_ACTION); 3221 MainNormal.addElement(a); 3222 a = new Association(o, kl1, TEXTFIELD_KEY); 3223 MainNormal.addElement(a); 3224 3225 dl = new DurationListener((TextField)gui.PrMaxLifetime.getBody(), 3226 fr); 3227 o = gui.PrMaxLifetimeMoreButton.getBody(); 3228 a = new Association(o, dl, BUTTON_ACTION); 3229 MainNormal.addElement(a); 3230 3231 al = new PrMaxRenewalAction(); 3232 o = gui.PrMaxRenewal.getBody(); 3233 a = new Association(o, al, TEXTFIELD_ACTION); 3234 MainNormal.addElement(a); 3235 a = new Association(o, kl1, TEXTFIELD_KEY); 3236 MainNormal.addElement(a); 3237 3238 dl = new DurationListener((TextField)gui.PrMaxRenewal.getBody(), 3239 fr); 3240 o = gui.PrMaxRenewalMoreButton.getBody(); 3241 a = new Association(o, dl, BUTTON_ACTION); 3242 MainNormal.addElement(a); 3243 3244 al = new PrDetailPreviousAction(); 3245 o = gui.PrDetailPrevious.getBody(); 3246 a = new Association(o, al, BUTTON_ACTION); 3247 MainNormal.addElement(a); 3248 3249 al = new PrDetailNextAction(); 3250 o = gui.PrDetailNext.getBody(); 3251 a = new Association(o, al, BUTTON_ACTION); 3252 MainNormal.addElement(a); 3253 3254 al = new PrFlagsPreviousAction(); 3255 o = gui.PrFlagsPrevious.getBody(); 3256 a = new Association(o, al, BUTTON_ACTION); 3257 MainNormal.addElement(a); 3258 3259 al = new PrFlagsNextAction(); 3260 o = gui.PrFlagsNext.getBody(); 3261 a = new Association(o, al, BUTTON_ACTION); 3262 MainNormal.addElement(a); 3263 3264 il = new PrLockAcctAction(); 3265 o = gui.PrLockAcct.getBody(); 3266 a = new Association(o, il, CHECKBOX_ITEM); 3267 MainNormal.addElement(a); 3268 3269 il = new PrForcePwChangeAction(); 3270 o = gui.PrForcePwChange.getBody(); 3271 a = new Association(o, il, CHECKBOX_ITEM); 3272 MainNormal.addElement(a); 3273 3274 il = new PrAllowPostdatedAction(); 3275 o = gui.PrAllowPostdated.getBody(); 3276 a = new Association(o, il, CHECKBOX_ITEM); 3277 MainNormal.addElement(a); 3278 3279 il = new PrAllowForwardableAction(); 3280 o = gui.PrAllowForwardable.getBody(); 3281 a = new Association(o, il, CHECKBOX_ITEM); 3282 MainNormal.addElement(a); 3283 3284 il = new PrAllowRenewableAction(); 3285 o = gui.PrAllowRenewable.getBody(); 3286 a = new Association(o, il, CHECKBOX_ITEM); 3287 MainNormal.addElement(a); 3288 3289 il = new PrAllowProxiableAction(); 3290 o = gui.PrAllowProxiable.getBody(); 3291 a = new Association(o, il, CHECKBOX_ITEM); 3292 MainNormal.addElement(a); 3293 3294 il = new PrAllowSvrAction(); 3295 o = gui.PrAllowSvr.getBody(); 3296 a = new Association(o, il, CHECKBOX_ITEM); 3297 MainNormal.addElement(a); 3298 3299 il = new PrAllowTGTAction(); 3300 o = gui.PrAllowTGT.getBody(); 3301 a = new Association(o, il, CHECKBOX_ITEM); 3302 MainNormal.addElement(a); 3303 3304 il = new PrAllowDupAuthAction(); 3305 o = gui.PrAllowDupAuth.getBody(); 3306 a = new Association(o, il, CHECKBOX_ITEM); 3307 MainNormal.addElement(a); 3308 3309 il = new PrRequirePreAuthAction(); 3310 o = gui.PrRequirePreAuth.getBody(); 3311 a = new Association(o, il, CHECKBOX_ITEM); 3312 MainNormal.addElement(a); 3313 3314 il = new PrRequireHwPreAuthAction(); 3315 o = gui.PrRequireHwPreAuth.getBody(); 3316 a = new Association(o, il, CHECKBOX_ITEM); 3317 MainNormal.addElement(a); 3318 3319 al = new PoListPatternAction(); 3320 o = gui.PoListPattern.getBody(); 3321 a = new Association(o, al, TEXTFIELD_ACTION); 3322 MainNormal.addElement(a); 3323 a = new Association(o, kl4, TEXTFIELD_KEY); 3324 MainNormal.addElement(a); 3325 3326 al = new PoListClearAction(); 3327 o = gui.PoListClear.getBody(); 3328 a = new Association(o, al, BUTTON_ACTION); 3329 MainNormal.addElement(a); 3330 3331 al = new PoListModifyAction(); 3332 o = gui.PoListModify.getBody(); 3333 a = new Association(o, al, BUTTON_ACTION); 3334 MainNormal.addElement(a); 3335 3336 al = new PoListAddAction(); 3337 o = gui.PoListAdd.getBody(); 3338 a = new Association(o, al, BUTTON_ACTION); 3339 MainNormal.addElement(a); 3340 3341 al = new PoListDeleteAction(); 3342 o = gui.PoListDelete.getBody(); 3343 a = new Association(o, al, BUTTON_ACTION); 3344 MainNormal.addElement(a); 3345 3346 al = new PoListDuplicateAction(); 3347 o = gui.PoListDuplicate.getBody(); 3348 a = new Association(o, al, BUTTON_ACTION); 3349 MainNormal.addElement(a); 3350 3351 il = new PoMinPwLengthAction(); 3352 o = gui.PoMinPwLength.getBody(); 3353 a = new Association(o, il, CHOICE_ITEM); 3354 MainNormal.addElement(a); 3355 3356 il = new PoMinPwClassAction(); 3357 o = gui.PoMinPwClass.getBody(); 3358 a = new Association(o, il, CHOICE_ITEM); 3359 MainNormal.addElement(a); 3360 3361 il = new PoSavedPasswordsAction(); 3362 o = gui.PoSavedPasswords.getBody(); 3363 a = new Association(o, il, CHOICE_ITEM); 3364 MainNormal.addElement(a); 3365 3366 al = new PoMinTicketLifetimeAction(); 3367 o = gui.PoMinTicketLifetime.getBody(); 3368 a = new Association(o, al, TEXTFIELD_ACTION); 3369 MainNormal.addElement(a); 3370 a = new Association(o, kl2, TEXTFIELD_KEY); 3371 MainNormal.addElement(a); 3372 3373 dl = new DurationListener( 3374 (TextField)gui.PoMinTicketLifetime.getBody(), fr); 3375 o = gui.PoMinTicketLifetimeMoreButton.getBody(); 3376 a = new Association(o, dl, BUTTON_ACTION); 3377 MainNormal.addElement(a); 3378 3379 al = new PoMaxTicketLifetimeAction(); 3380 o = gui.PoMaxTicketLifetime.getBody(); 3381 a = new Association(o, al, TEXTFIELD_ACTION); 3382 MainNormal.addElement(a); 3383 a = new Association(o, kl2, TEXTFIELD_KEY); 3384 MainNormal.addElement(a); 3385 3386 dl = new DurationListener( 3387 (TextField)gui.PoMaxTicketLifetime.getBody(), fr); 3388 o = gui.PoMaxTicketLifetimeMoreButton.getBody(); 3389 a = new Association(o, dl, BUTTON_ACTION); 3390 MainNormal.addElement(a); 3391 3392 al = new PoSaveAction(); 3393 o = gui.PoDetailSave.getBody(); 3394 a = new Association(o, al, BUTTON_ACTION); 3395 MainNormal.addElement(a); 3396 3397 al = new PoCancelAction(); 3398 o = gui.PoDetailCancel.getBody(); 3399 a = new Association(o, al, BUTTON_ACTION); 3400 MainNormal.addElement(a); 3401 3402 al = new PoPreviousAction(); 3403 o = gui.PoDetailPrevious.getBody(); 3404 a = new Association(o, al, BUTTON_ACTION); 3405 MainNormal.addElement(a); 3406 3407 al = new PoDoneAction(); 3408 o = gui.PoDetailDone.getBody(); 3409 a = new Association(o, al, BUTTON_ACTION); 3410 MainNormal.addElement(a); 3411 3412 } 3413 setListeners(MainHelp, false); 3414 setListeners(MainFixers, false); 3415 setListeners(MainNormal, true); 3416 mainHelpMode = false; 3417 } 3418 3419 /** 3420 * Set up the listeners for the objects on the main screen in help mode 3421 * 3422 */ 3423 public void setupMainHelpListeners() { 3424 if (MainHelp == null) { 3425 MainHelp = new Vector(10, 10); 3426 MouseListener ml = new HelpListener(); 3427 Association a; 3428 Object o; 3429 3430 o = gui.PrListPattern.getBody(); 3431 a = new Association(o, ml, TEXTFIELD_MOUSE); 3432 MainHelp.addElement(a); 3433 ((TextField)o).setName("PrListPattern" /* NOI18N */); 3434 3435 o = gui.PrSearchLab.getBody(); 3436 a = new Association(o, ml, LABEL_MOUSE); 3437 MainHelp.addElement(a); 3438 ((Label)o).setName("PrListPattern" /* NOI18N */); 3439 3440 o = gui.PrListClear.getBody(); 3441 a = new Association(o, ml, BUTTON_MOUSE); 3442 MainHelp.addElement(a); 3443 ((Button)o).setName("PrListClear" /* NOI18N */); 3444 3445 o = gui.PrListModify.getBody(); 3446 a = new Association(o, ml, BUTTON_MOUSE); 3447 MainHelp.addElement(a); 3448 ((Button)o).setName("PrListModify" /* NOI18N */); 3449 3450 o = gui.PrListAdd.getBody(); 3451 a = new Association(o, ml, BUTTON_MOUSE); 3452 MainHelp.addElement(a); 3453 ((Button)o).setName("PrListAdd" /* NOI18N */); 3454 3455 o = gui.PrListDelete.getBody(); 3456 a = new Association(o, ml, BUTTON_MOUSE); 3457 MainHelp.addElement(a); 3458 ((Button)o).setName("PrListDelete" /* NOI18N */); 3459 3460 o = gui.PrListDuplicate.getBody(); 3461 a = new Association(o, ml, BUTTON_MOUSE); 3462 MainHelp.addElement(a); 3463 ((Button)o).setName("PrListDuplicate" /* NOI18N */); 3464 3465 o = gui.PrBasicSave.getBody(); 3466 a = new Association(o, ml, BUTTON_MOUSE); 3467 MainHelp.addElement(a); 3468 ((Button)o).setName("PrSave" /* NOI18N */); 3469 3470 o = gui.PrDetailSave.getBody(); 3471 a = new Association(o, ml, BUTTON_MOUSE); 3472 MainHelp.addElement(a); 3473 ((Button)o).setName("PrSave" /* NOI18N */); 3474 3475 o = gui.PrFlagsSave.getBody(); 3476 a = new Association(o, ml, BUTTON_MOUSE); 3477 MainHelp.addElement(a); 3478 ((Button)o).setName("PrSave" /* NOI18N */); 3479 3480 o = gui.PrBasicCancel.getBody(); 3481 a = new Association(o, ml, BUTTON_MOUSE); 3482 MainHelp.addElement(a); 3483 ((Button)o).setName("PrCancel" /* NOI18N */); 3484 3485 o = gui.PrDetailCancel.getBody(); 3486 a = new Association(o, ml, BUTTON_MOUSE); 3487 MainHelp.addElement(a); 3488 ((Button)o).setName("PrCancel" /* NOI18N */); 3489 3490 o = gui.PrFlagsCancel.getBody(); 3491 a = new Association(o, ml, BUTTON_MOUSE); 3492 MainHelp.addElement(a); 3493 ((Button)o).setName("PrCancel" /* NOI18N */); 3494 3495 o = gui.PrName1.getBody(); 3496 a = new Association(o, ml, TEXTFIELD_MOUSE); 3497 MainHelp.addElement(a); 3498 ((TextField)o).setName("PrName" /* NOI18N */); 3499 3500 o = gui.PrNameLabel1.getBody(); 3501 a = new Association(o, ml, LABEL_MOUSE); 3502 MainHelp.addElement(a); 3503 ((Label)o).setName("PrName" /* NOI18N */); 3504 3505 o = gui.PrComments.getBody(); 3506 a = new Association(o, ml, TEXTFIELD_MOUSE); 3507 MainHelp.addElement(a); 3508 ((TextField)o).setName("PrComments" /* NOI18N */); 3509 3510 o = gui.PrCommentsLabel.getBody(); 3511 a = new Association(o, ml, LABEL_MOUSE); 3512 MainHelp.addElement(a); 3513 ((Label)o).setName("PrComments" /* NOI18N */); 3514 3515 o = gui.PrPolicy.getBody(); 3516 a = new Association(o, ml, CHOICE_MOUSE); 3517 MainHelp.addElement(a); 3518 ((Choice)o).setName("PrPolicy" /* NOI18N */); 3519 3520 o = gui.PrPolicyLabel.getBody(); 3521 a = new Association(o, ml, LABEL_MOUSE); 3522 MainHelp.addElement(a); 3523 ((Label)o).setName("PrPolicy" /* NOI18N */); 3524 3525 o = gui.PrPassword.getBody(); 3526 a = new Association(o, ml, TEXTFIELD_MOUSE); 3527 MainHelp.addElement(a); 3528 ((TextField)o).setName("PrPassword" /* NOI18N */); 3529 3530 o = gui.PrPasswordLabel.getBody(); 3531 a = new Association(o, ml, LABEL_MOUSE); 3532 MainHelp.addElement(a); 3533 ((Label)o).setName("PrPassword" /* NOI18N */); 3534 3535 o = gui.PrBasicRandomPw.getBody(); 3536 a = new Association(o, ml, BUTTON_MOUSE); 3537 MainHelp.addElement(a); 3538 ((Button)o).setName("PrBasicRandomPw" /* NOI18N */); 3539 3540 o = gui.EncList.getBody(); 3541 a = new Association(o, ml, TEXTFIELD_MOUSE); 3542 MainHelp.addElement(a); 3543 ((TextField)o).setName("EncList" /* NOI18N */); 3544 3545 o = gui.EncListLabel.getBody(); 3546 a = new Association(o, ml, LABEL_MOUSE); 3547 MainHelp.addElement(a); 3548 ((Label)o).setName("EncList" /* NOI18N */); 3549 3550 o = gui.EncListMoreButton.getBody(); 3551 a = new Association(o, ml, BUTTON_MOUSE); 3552 MainHelp.addElement(a); 3553 ((Button)o).setName("EncListHelperButton" /* NOI18N */); 3554 3555 o = gui.PrExpiry.getBody(); 3556 a = new Association(o, ml, TEXTFIELD_MOUSE); 3557 MainHelp.addElement(a); 3558 ((TextField)o).setName("PrExpiry" /* NOI18N */); 3559 3560 o = gui.PrExpiryLabel.getBody(); 3561 a = new Association(o, ml, LABEL_MOUSE); 3562 MainHelp.addElement(a); 3563 ((Label)o).setName("PrExpiry" /* NOI18N */); 3564 3565 o = gui.PrExpiryMoreButton.getBody(); 3566 a = new Association(o, ml, BUTTON_MOUSE); 3567 MainHelp.addElement(a); 3568 ((Button)o).setName("DateHelperButton" /* NOI18N */); 3569 3570 o = gui.PrLastChangedTime.getBody(); 3571 a = new Association(o, ml, LABEL_MOUSE); 3572 MainHelp.addElement(a); 3573 ((Label)o).setName("PrinBasLastPrincipalChange" /* NOI18N */); 3574 3575 o = gui.PrLastChangedTimeLabel.getBody(); 3576 a = new Association(o, ml, LABEL_MOUSE); 3577 MainHelp.addElement(a); 3578 ((Label)o).setName("PrinBasLastPrincipalChange" /* NOI18N */); 3579 3580 o = gui.PrLastChangedBy.getBody(); 3581 a = new Association(o, ml, LABEL_MOUSE); 3582 MainHelp.addElement(a); 3583 ((Label)o).setName("PrinBasLastChangedBy" /* NOI18N */); 3584 3585 o = gui.PrLastChangedByLabel.getBody(); 3586 a = new Association(o, ml, LABEL_MOUSE); 3587 MainHelp.addElement(a); 3588 ((Label)o).setName("PrinBasLastChangedBy" /* NOI18N */); 3589 3590 o = gui.PrBasicPrevious.getBody(); 3591 a = new Association(o, ml, BUTTON_MOUSE); 3592 MainHelp.addElement(a); 3593 ((Button)o).setName("PrBasicPrevious" /* NOI18N */); 3594 3595 o = gui.PrBasicNext.getBody(); 3596 a = new Association(o, ml, BUTTON_MOUSE); 3597 MainHelp.addElement(a); 3598 ((Button)o).setName("PrBasicNext" /* NOI18N */); 3599 3600 o = gui.PrLastSuccess.getBody(); 3601 a = new Association(o, ml, LABEL_MOUSE); 3602 MainHelp.addElement(a); 3603 ((Label)o).setName("PrinDetLastSuccess" /* NOI18N */); 3604 3605 o = gui.PrLastSuccessLabel.getBody(); 3606 a = new Association(o, ml, LABEL_MOUSE); 3607 MainHelp.addElement(a); 3608 ((Label)o).setName("PrinDetLastSuccess" /* NOI18N */); 3609 3610 o = gui.PrLastFailure.getBody(); 3611 a = new Association(o, ml, LABEL_MOUSE); 3612 MainHelp.addElement(a); 3613 ((Label)o).setName("PrinDetLastFailure" /* NOI18N */); 3614 3615 o = gui.PrLastFailureLabel.getBody(); 3616 a = new Association(o, ml, LABEL_MOUSE); 3617 MainHelp.addElement(a); 3618 ((Label)o).setName("PrinDetLastFailure" /* NOI18N */); 3619 3620 o = gui.PrFailCount.getBody(); 3621 a = new Association(o, ml, LABEL_MOUSE); 3622 MainHelp.addElement(a); 3623 ((Label)o).setName("PrinDetFailureCount" /* NOI18N */); 3624 3625 o = gui.PrFailureCountLabel.getBody(); 3626 a = new Association(o, ml, LABEL_MOUSE); 3627 MainHelp.addElement(a); 3628 ((Label)o).setName("PrinDetFailureCount" /* NOI18N */); 3629 3630 o = gui.PrLastPwChange.getBody(); 3631 a = new Association(o, ml, LABEL_MOUSE); 3632 MainHelp.addElement(a); 3633 ((Label)o).setName("PrinDetLastPasswordChange" /* NOI18N */); 3634 3635 o = gui.PrPwLastChangedLabel.getBody(); 3636 a = new Association(o, ml, LABEL_MOUSE); 3637 MainHelp.addElement(a); 3638 ((Label)o).setName("PrinDetLastPasswordChange" /* NOI18N */); 3639 3640 o = gui.PrPwExpiry.getBody(); 3641 a = new Association(o, ml, TEXTFIELD_MOUSE); 3642 MainHelp.addElement(a); 3643 ((TextField)o).setName("PrPwExpiry" /* NOI18N */); 3644 3645 o = gui.PrPwExpiryLabel.getBody(); 3646 a = new Association(o, ml, LABEL_MOUSE); 3647 MainHelp.addElement(a); 3648 ((Label)o).setName("PrPwExpiry" /* NOI18N */); 3649 3650 o = gui.PrPwExpiryMoreButton.getBody(); 3651 a = new Association(o, ml, BUTTON_MOUSE); 3652 MainHelp.addElement(a); 3653 ((Button)o).setName("DateHelperButton" /* NOI18N */); 3654 3655 o = gui.PrKvno.getBody(); 3656 a = new Association(o, ml, TEXTFIELD_MOUSE); 3657 MainHelp.addElement(a); 3658 ((TextField)o).setName("PrKvno" /* NOI18N */); 3659 3660 o = gui.PrKvnoLabel.getBody(); 3661 a = new Association(o, ml, LABEL_MOUSE); 3662 MainHelp.addElement(a); 3663 ((Label)o).setName("PrKvno" /* NOI18N */); 3664 3665 o = gui.PrMaxLifetime.getBody(); 3666 a = new Association(o, ml, TEXTFIELD_MOUSE); 3667 MainHelp.addElement(a); 3668 ((TextField)o).setName("PrMaxLifetime" /* NOI18N */); 3669 3670 o = gui.PrMaxTicketLifetimeLabel.getBody(); 3671 a = new Association(o, ml, LABEL_MOUSE); 3672 MainHelp.addElement(a); 3673 ((Label)o).setName("PrMaxLifetime" /* NOI18N */); 3674 3675 o = gui.PrMaxLifetimeMoreButton.getBody(); 3676 a = new Association(o, ml, BUTTON_MOUSE); 3677 MainHelp.addElement(a); 3678 ((Button)o).setName("DurationHelperButton" /* NOI18N */); 3679 3680 o = gui.PrMaxRenewal.getBody(); 3681 a = new Association(o, ml, TEXTFIELD_MOUSE); 3682 MainHelp.addElement(a); 3683 ((TextField)o).setName("PrMaxRenewal" /* NOI18N */); 3684 3685 o = gui.PrMaxTicketRenewalLabel.getBody(); 3686 a = new Association(o, ml, LABEL_MOUSE); 3687 MainHelp.addElement(a); 3688 ((Label)o).setName("PrMaxRenewal" /* NOI18N */); 3689 3690 o = gui.PrMaxRenewalMoreButton.getBody(); 3691 a = new Association(o, ml, BUTTON_MOUSE); 3692 MainHelp.addElement(a); 3693 ((Button)o).setName("DurationHelperButton" /* NOI18N */); 3694 3695 o = gui.PrDetailPrevious.getBody(); 3696 a = new Association(o, ml, BUTTON_MOUSE); 3697 MainHelp.addElement(a); 3698 ((Button)o).setName("PrDetailPrevious" /* NOI18N */); 3699 3700 o = gui.PrDetailNext.getBody(); 3701 a = new Association(o, ml, BUTTON_MOUSE); 3702 MainHelp.addElement(a); 3703 ((Button)o).setName("PrDetailNext" /* NOI18N */); 3704 3705 o = gui.PrFlagsPrevious.getBody(); 3706 a = new Association(o, ml, BUTTON_MOUSE); 3707 MainHelp.addElement(a); 3708 ((Button)o).setName("PrFlagsPrevious" /* NOI18N */); 3709 3710 o = gui.PrFlagsNext.getBody(); 3711 a = new Association(o, ml, BUTTON_MOUSE); 3712 MainHelp.addElement(a); 3713 ((Button)o).setName("PrFlagsNext" /* NOI18N */); 3714 3715 o = gui.PrLockAcct.getBody(); 3716 a = new Association(o, ml, CHECKBOX_MOUSE); 3717 MainHelp.addElement(a); 3718 ((Checkbox)o).setName("PrLockAcct" /* NOI18N */); 3719 3720 o = gui.PrForcePwChange.getBody(); 3721 a = new Association(o, ml, CHECKBOX_MOUSE); 3722 MainHelp.addElement(a); 3723 ((Checkbox)o).setName("PrForcePwChange" /* NOI18N */); 3724 3725 o = gui.PrAllowPostdated.getBody(); 3726 a = new Association(o, ml, CHECKBOX_MOUSE); 3727 MainHelp.addElement(a); 3728 ((Checkbox)o).setName("PrAllowPostdated" /* NOI18N */); 3729 3730 o = gui.PrAllowForwardable.getBody(); 3731 a = new Association(o, ml, CHECKBOX_MOUSE); 3732 MainHelp.addElement(a); 3733 ((Checkbox)o).setName("PrAllowForwardable" /* NOI18N */); 3734 3735 o = gui.PrAllowRenewable.getBody(); 3736 a = new Association(o, ml, CHECKBOX_MOUSE); 3737 MainHelp.addElement(a); 3738 ((Checkbox)o).setName("PrAllowRenewable" /* NOI18N */); 3739 3740 o = gui.PrAllowProxiable.getBody(); 3741 a = new Association(o, ml, CHECKBOX_MOUSE); 3742 MainHelp.addElement(a); 3743 ((Checkbox)o).setName("PrAllowProxiable" /* NOI18N */); 3744 3745 o = gui.PrAllowSvr.getBody(); 3746 a = new Association(o, ml, CHECKBOX_MOUSE); 3747 MainHelp.addElement(a); 3748 ((Checkbox)o).setName("PrAllowSvr" /* NOI18N */); 3749 3750 o = gui.PrAllowTGT.getBody(); 3751 a = new Association(o, ml, CHECKBOX_MOUSE); 3752 MainHelp.addElement(a); 3753 ((Checkbox)o).setName("PrAllowTGT" /* NOI18N */); 3754 3755 o = gui.PrAllowDupAuth.getBody(); 3756 a = new Association(o, ml, CHECKBOX_MOUSE); 3757 MainHelp.addElement(a); 3758 ((Checkbox)o).setName("PrAllowDupAuth" /* NOI18N */); 3759 3760 o = gui.PrRequirePreAuth.getBody(); 3761 a = new Association(o, ml, CHECKBOX_MOUSE); 3762 MainHelp.addElement(a); 3763 ((Checkbox)o).setName("PrRequirePreAuth" /* NOI18N */); 3764 3765 o = gui.PrRequireHwPreAuth.getBody(); 3766 a = new Association(o, ml, CHECKBOX_MOUSE); 3767 MainHelp.addElement(a); 3768 ((Checkbox)o).setName("PrRequireHwPreAuth" /* NOI18N */); 3769 3770 o = gui.PoListPattern.getBody(); 3771 a = new Association(o, ml, TEXTFIELD_MOUSE); 3772 MainHelp.addElement(a); 3773 ((TextField)o).setName("PoListPattern" /* NOI18N */); 3774 3775 o = gui.PoListPatternLabel.getBody(); 3776 a = new Association(o, ml, LABEL_MOUSE); 3777 MainHelp.addElement(a); 3778 ((Label)o).setName("PoListPattern" /* NOI18N */); 3779 3780 o = gui.PoListClear.getBody(); 3781 a = new Association(o, ml, BUTTON_MOUSE); 3782 MainHelp.addElement(a); 3783 ((Button)o).setName("PoListClear" /* NOI18N */); 3784 3785 o = gui.PoListModify.getBody(); 3786 a = new Association(o, ml, BUTTON_MOUSE); 3787 MainHelp.addElement(a); 3788 ((Button)o).setName("PoListModify" /* NOI18N */); 3789 3790 o = gui.PoListAdd.getBody(); 3791 a = new Association(o, ml, BUTTON_MOUSE); 3792 MainHelp.addElement(a); 3793 ((Button)o).setName("PoListAdd" /* NOI18N */); 3794 3795 o = gui.PoListDelete.getBody(); 3796 a = new Association(o, ml, BUTTON_MOUSE); 3797 MainHelp.addElement(a); 3798 ((Button)o).setName("PoListDelete" /* NOI18N */); 3799 3800 o = gui.PoListDuplicate.getBody(); 3801 a = new Association(o, ml, BUTTON_MOUSE); 3802 MainHelp.addElement(a); 3803 ((Button)o).setName("PoListDuplicate" /* NOI18N */); 3804 3805 o = gui.PoName.getBody(); 3806 a = new Association(o, ml, TEXTFIELD_MOUSE); 3807 MainHelp.addElement(a); 3808 ((TextField)o).setName("PoName" /* NOI18N */); 3809 3810 o = gui.PoNameLabel.getBody(); 3811 a = new Association(o, ml, LABEL_MOUSE); 3812 MainHelp.addElement(a); 3813 ((Label)o).setName("PoName" /* NOI18N */); 3814 3815 o = gui.PoMinPwLength.getBody(); 3816 a = new Association(o, ml, CHOICE_MOUSE); 3817 MainHelp.addElement(a); 3818 ((Choice)o).setName("PoMinPwLength" /* NOI18N */); 3819 3820 o = gui.PoMinPwLengthLabel.getBody(); 3821 a = new Association(o, ml, LABEL_MOUSE); 3822 MainHelp.addElement(a); 3823 ((Label)o).setName("PoMinPwLength" /* NOI18N */); 3824 3825 o = gui.PoMinPwClass.getBody(); 3826 a = new Association(o, ml, CHOICE_MOUSE); 3827 MainHelp.addElement(a); 3828 ((Choice)o).setName("PoMinPwClass" /* NOI18N */); 3829 3830 o = gui.PoMinPwClassLabel.getBody(); 3831 a = new Association(o, ml, LABEL_MOUSE); 3832 MainHelp.addElement(a); 3833 ((Label)o).setName("PoMinPwClass" /* NOI18N */); 3834 3835 o = gui.PoSavedPasswords.getBody(); 3836 a = new Association(o, ml, CHOICE_MOUSE); 3837 MainHelp.addElement(a); 3838 ((Choice)o).setName("PoSavedPasswords" /* NOI18N */); 3839 3840 o = gui.PoSavedPasswordsLabel.getBody(); 3841 a = new Association(o, ml, LABEL_MOUSE); 3842 MainHelp.addElement(a); 3843 ((Label)o).setName("PoSavedPasswords" /* NOI18N */); 3844 3845 o = gui.PoMinTicketLifetime.getBody(); 3846 a = new Association(o, ml, TEXTFIELD_MOUSE); 3847 MainHelp.addElement(a); 3848 ((TextField)o).setName("PoMinTicketLifetime" /* NOI18N */); 3849 3850 o = gui.PoMinTicketLifetimeLabel.getBody(); 3851 a = new Association(o, ml, LABEL_MOUSE); 3852 MainHelp.addElement(a); 3853 ((Label)o).setName("PoMinTicketLifetime" /* NOI18N */); 3854 3855 o = gui.PoMinTicketLifetimeMoreButton.getBody(); 3856 a = new Association(o, ml, BUTTON_MOUSE); 3857 MainHelp.addElement(a); 3858 ((Button)o).setName("DurationHelperButton" /* NOI18N */); 3859 3860 o = gui.PoMaxTicketLifetime.getBody(); 3861 a = new Association(o, ml, TEXTFIELD_MOUSE); 3862 MainHelp.addElement(a); 3863 ((TextField)o).setName("PoMaxTicketLifetime" /* NOI18N */); 3864 3865 o = gui.PoMaxTicketLifetimeLabel.getBody(); 3866 a = new Association(o, ml, LABEL_MOUSE); 3867 MainHelp.addElement(a); 3868 ((Label)o).setName("PoMaxTicketLifetime" /* NOI18N */); 3869 3870 o = gui.PoMaxTicketLifetimeMoreButton.getBody(); 3871 a = new Association(o, ml, BUTTON_MOUSE); 3872 MainHelp.addElement(a); 3873 ((Button)o).setName("DurationHelperButton" /* NOI18N */); 3874 3875 o = gui.PoReferences.getBody(); 3876 a = new Association(o, ml, LABEL_MOUSE); 3877 MainHelp.addElement(a); 3878 ((Label)o).setName("PolDetPrincipalsUsingThisPolicy" /* NOI18N */); 3879 3880 o = gui.PoReferencesLabel.getBody(); 3881 a = new Association(o, ml, LABEL_MOUSE); 3882 MainHelp.addElement(a); 3883 ((Label)o).setName("PolDetPrincipalsUsingThisPolicy" /* NOI18N */); 3884 3885 o = gui.PoDetailSave.getBody(); 3886 a = new Association(o, ml, BUTTON_MOUSE); 3887 MainHelp.addElement(a); 3888 ((Button)o).setName("PoSave" /* NOI18N */); 3889 3890 o = gui.PoDetailCancel.getBody(); 3891 a = new Association(o, ml, BUTTON_MOUSE); 3892 MainHelp.addElement(a); 3893 ((Button)o).setName("PoCancel" /* NOI18N */); 3894 3895 o = gui.PoDetailPrevious.getBody(); 3896 a = new Association(o, ml, BUTTON_MOUSE); 3897 MainHelp.addElement(a); 3898 ((Button)o).setName("PoDetailPrevious" /* NOI18N */); 3899 3900 o = gui.PoDetailDone.getBody(); 3901 a = new Association(o, ml, BUTTON_MOUSE); 3902 MainHelp.addElement(a); 3903 ((Button)o).setName("PoDetailDone" /* NOI18N */); 3904 3905 setupMainHelpFlagTogglers(); 3906 } 3907 3908 fixHelpTags(); 3909 setListeners(MainNormal, false); 3910 setListeners(MainHelp, true); 3911 setupMainHelpFixers(); 3912 mainHelpMode = true; 3913 } 3914 3915 public void fixHelpTags() { 3916 if (noLists) { 3917 ((TextList)gui.Prlist.getBody()).setName("PrNoList" /* NOI18N */); 3918 ((TextField)gui.PrListPattern.getBody()).setName("PrNameNoList" 3919 /* NOI18N */); 3920 ((Button)gui.PrListClear.getBody()).setName("PrNoListClear" 3921 /* NOI18N */); 3922 ((TextList)gui.Pollist.getBody()).setName("PolNoList" /* NOI18N */); 3923 ((TextField)gui.PoListPattern.getBody()).setName("PoNameNoList" 3924 /* NOI18N */); 3925 ((Button)gui.PoListClear.getBody()).setName("PoNoListClear" 3926 /* NOI18N */); 3927 } else { 3928 ((TextList)gui.Prlist.getBody()).setName("PrList" /* NOI18N */); 3929 ((TextField)gui.PrListPattern.getBody()).setName("PrListPattern" 3930 /* NOI18N */); 3931 ((Button)gui.PrListClear.getBody()).setName("PrListClear" 3932 /* NOI18N */); 3933 ((TextList)gui.Pollist.getBody()).setName("Pollist" /* NOI18N */); 3934 ((TextField)gui.PoListPattern.getBody()).setName("PoListPattern" 3935 /* NOI18N */); 3936 ((Button)gui.PoListClear.getBody()).setName("PoListClear" 3937 /* NOI18N */); 3938 } 3939 } 3940 3941 /** 3942 * Helper method to setupMainHelpListeners. Should be called from 3943 * only from there. 3944 */ 3945 private void setupMainHelpFlagTogglers() { 3946 3947 if (MainHelp == null) 3948 return; 3949 3950 CheckboxToggler ml = new CheckboxToggler(); 3951 Object o; 3952 Association a; 3953 3954 o = gui.PrLockAcct.getBody(); 3955 a = new Association(o, ml, CHECKBOX_MOUSE); 3956 MainHelp.addElement(a); 3957 3958 o = gui.PrForcePwChange.getBody(); 3959 a = new Association(o, ml, CHECKBOX_MOUSE); 3960 MainHelp.addElement(a); 3961 3962 o = gui.PrAllowPostdated.getBody(); 3963 a = new Association(o, ml, CHECKBOX_MOUSE); 3964 MainHelp.addElement(a); 3965 3966 o = gui.PrAllowForwardable.getBody(); 3967 a = new Association(o, ml, CHECKBOX_MOUSE); 3968 MainHelp.addElement(a); 3969 3970 o = gui.PrAllowRenewable.getBody(); 3971 a = new Association(o, ml, CHECKBOX_MOUSE); 3972 MainHelp.addElement(a); 3973 3974 o = gui.PrAllowProxiable.getBody(); 3975 a = new Association(o, ml, CHECKBOX_MOUSE); 3976 MainHelp.addElement(a); 3977 3978 o = gui.PrAllowSvr.getBody(); 3979 a = new Association(o, ml, CHECKBOX_MOUSE); 3980 MainHelp.addElement(a); 3981 3982 o = gui.PrAllowTGT.getBody(); 3983 a = new Association(o, ml, CHECKBOX_MOUSE); 3984 MainHelp.addElement(a); 3985 3986 o = gui.PrAllowDupAuth.getBody(); 3987 a = new Association(o, ml, CHECKBOX_MOUSE); 3988 MainHelp.addElement(a); 3989 3990 o = gui.PrRequirePreAuth.getBody(); 3991 a = new Association(o, ml, CHECKBOX_MOUSE); 3992 MainHelp.addElement(a); 3993 3994 o = gui.PrRequireHwPreAuth.getBody(); 3995 a = new Association(o, ml, CHECKBOX_MOUSE); 3996 MainHelp.addElement(a); 3997 } 3998 3999 public void setupMainHelpFixers() { 4000 MainFixers = new Vector(10, 10); 4001 Object o; 4002 Association a; 4003 TextFixer tf; 4004 ChoiceFixer cf; 4005 4006 o = gui.PrListPattern.getBody(); 4007 tf = new TextFixer((TextField)o); 4008 a = new Association(o, tf, TEXTFIELD_KEY); 4009 MainFixers.addElement(a); 4010 4011 o = gui.PrName1.getBody(); 4012 tf = new TextFixer((TextField)o); 4013 a = new Association(o, tf, TEXTFIELD_KEY); 4014 MainFixers.addElement(a); 4015 4016 o = gui.PrComments.getBody(); 4017 tf = new TextFixer((TextField)o); 4018 a = new Association(o, tf, TEXTFIELD_KEY); 4019 MainFixers.addElement(a); 4020 4021 o = gui.PrPolicy.getBody(); 4022 cf = new ChoiceFixer((Choice)o); 4023 a = new Association(o, cf, CHOICE_ITEM); 4024 MainFixers.addElement(a); 4025 4026 o = gui.PrPassword.getBody(); 4027 tf = new TextFixer((TextField)o); 4028 a = new Association(o, tf, TEXTFIELD_KEY); 4029 MainFixers.addElement(a); 4030 4031 o = gui.PrExpiry.getBody(); 4032 tf = new TextFixer((TextField)o); 4033 a = new Association(o, tf, TEXTFIELD_KEY); 4034 MainFixers.addElement(a); 4035 4036 o = gui.EncList.getBody(); 4037 tf = new TextFixer((TextField)o); 4038 a = new Association(o, tf, TEXTFIELD_KEY); 4039 MainFixers.addElement(a); 4040 4041 o = gui.PrPwExpiry.getBody(); 4042 tf = new TextFixer((TextField)o); 4043 a = new Association(o, tf, TEXTFIELD_KEY); 4044 MainFixers.addElement(a); 4045 4046 o = gui.PrKvno.getBody(); 4047 tf = new TextFixer((TextField)o); 4048 a = new Association(o, tf, TEXTFIELD_KEY); 4049 MainFixers.addElement(a); 4050 4051 o = gui.PrMaxLifetime.getBody(); 4052 tf = new TextFixer((TextField)o); 4053 a = new Association(o, tf, TEXTFIELD_KEY); 4054 MainFixers.addElement(a); 4055 4056 o = gui.PrMaxRenewal.getBody(); 4057 tf = new TextFixer((TextField)o); 4058 a = new Association(o, tf, TEXTFIELD_KEY); 4059 MainFixers.addElement(a); 4060 4061 o = gui.PoListPattern.getBody(); 4062 tf = new TextFixer((TextField)o); 4063 a = new Association(o, tf, TEXTFIELD_KEY); 4064 MainFixers.addElement(a); 4065 4066 o = gui.PoName.getBody(); 4067 tf = new TextFixer((TextField)o); 4068 a = new Association(o, tf, TEXTFIELD_KEY); 4069 MainFixers.addElement(a); 4070 4071 o = gui.PoMinPwLength.getBody(); 4072 cf = new ChoiceFixer((Choice)o); 4073 a = new Association(o, cf, CHOICE_ITEM); 4074 MainFixers.addElement(a); 4075 4076 o = gui.PoMinPwClass.getBody(); 4077 cf = new ChoiceFixer((Choice)o); 4078 a = new Association(o, cf, CHOICE_ITEM); 4079 MainFixers.addElement(a); 4080 4081 o = gui.PoSavedPasswords.getBody(); 4082 cf = new ChoiceFixer((Choice)o); 4083 a = new Association(o, cf, CHOICE_ITEM); 4084 MainFixers.addElement(a); 4085 4086 o = gui.PoMinTicketLifetime.getBody(); 4087 tf = new TextFixer((TextField)o); 4088 a = new Association(o, tf, TEXTFIELD_KEY); 4089 MainFixers.addElement(a); 4090 4091 o = gui.PoMaxTicketLifetime.getBody(); 4092 tf = new TextFixer((TextField)o); 4093 a = new Association(o, tf, TEXTFIELD_KEY); 4094 MainFixers.addElement(a); 4095 4096 setListeners(MainFixers, true); 4097 } 4098 4099 public void setupDefaultsNormalListeners() { 4100 4101 if (defaultsNormal == null) { 4102 defaultsNormal = new Vector(10, 10); 4103 ActionListener al; 4104 ItemListener il; 4105 KeyListener kl = new KeystrokeDetector(DEFAULTS_EDITING); 4106 Association a; 4107 Object o; 4108 4109 // Action listeners for Defaults 4110 4111 il = new GlobalLockAcctAction(); 4112 o = defaults.disableAccount; 4113 a = new Association(o, il, CHECKBOX_ITEM); 4114 defaultsNormal.addElement(a); 4115 4116 il = new GlobalForcePwChangeAction(); 4117 o = defaults.forcePasswordChange; 4118 a = new Association(o, il, CHECKBOX_ITEM); 4119 defaultsNormal.addElement(a); 4120 4121 il = new GlobalAllowPostdatedAction(); 4122 o = defaults.allowPostdatedTix; 4123 a = new Association(o, il, CHECKBOX_ITEM); 4124 defaultsNormal.addElement(a); 4125 4126 il = new GlobalAllowForwardableAction(); 4127 o = defaults.allowForwardableTix; 4128 a = new Association(o, il, CHECKBOX_ITEM); 4129 defaultsNormal.addElement(a); 4130 4131 il = new GlobalAllowRenewableAction(); 4132 o = defaults.allowRenewableTix; 4133 a = new Association(o, il, CHECKBOX_ITEM); 4134 defaultsNormal.addElement(a); 4135 4136 il = new GlobalAllowProxiableAction(); 4137 o = defaults.allowProxiableTix; 4138 a = new Association(o, il, CHECKBOX_ITEM); 4139 defaultsNormal.addElement(a); 4140 4141 il = new GlobalAllowSvrAction(); 4142 o = defaults.allowServiceTix; 4143 a = new Association(o, il, CHECKBOX_ITEM); 4144 defaultsNormal.addElement(a); 4145 4146 il = new GlobalAllowTGTAction(); 4147 o = defaults.allowTGTAuth; 4148 a = new Association(o, il, CHECKBOX_ITEM); 4149 defaultsNormal.addElement(a); 4150 4151 il = new GlobalAllowDupAuthAction(); 4152 o = defaults.allowDupAuth; 4153 a = new Association(o, il, CHECKBOX_ITEM); 4154 defaultsNormal.addElement(a); 4155 4156 il = new GlobalRequirePreAuthAction(); 4157 o = defaults.requirePreauth; 4158 a = new Association(o, il, CHECKBOX_ITEM); 4159 defaultsNormal.addElement(a); 4160 4161 il = new GlobalRequireHwPreAuthAction(); 4162 o = defaults.requireHWAuth; 4163 a = new Association(o, il, CHECKBOX_ITEM); 4164 defaultsNormal.addElement(a); 4165 4166 il = new GlobalDefaultServerSideAction(); 4167 o = defaults.serverSide; 4168 a = new Association(o, il, CHECKBOX_ITEM); 4169 defaultsNormal.addElement(a); 4170 4171 al = new GlobalDefaultRenewableLifeAction(); 4172 o = defaults.maxTicketRenewableLife; 4173 a = new Association(o, al, TEXTFIELD_ACTION); 4174 defaultsNormal.addElement(a); 4175 a = new Association(o, kl, TEXTFIELD_KEY); 4176 defaultsNormal.addElement(a); 4177 4178 al = new GlobalDefaultLifeAction(); 4179 o = defaults.maxTicketLife; 4180 a = new Association(o, al, TEXTFIELD_ACTION); 4181 defaultsNormal.addElement(a); 4182 a = new Association(o, kl, TEXTFIELD_KEY); 4183 defaultsNormal.addElement(a); 4184 4185 al = new GlobalDefaultExpiryAction(); 4186 o = defaults.accountExpiryDate; 4187 a = new Association(o, al, TEXTFIELD_ACTION); 4188 defaultsNormal.addElement(a); 4189 a = new Association(o, kl, TEXTFIELD_KEY); 4190 defaultsNormal.addElement(a); 4191 4192 il = new GlobalDefaultShowListsAction(); 4193 o = defaults.showLists; 4194 a = new Association(o, il, CHECKBOX_ITEM); 4195 defaultsNormal.addElement(a); 4196 4197 il = new GlobalDefaultStaticListsAction(); 4198 o = defaults.staticLists; 4199 a = new Association(o, il, CHECKBOX_ITEM); 4200 defaultsNormal.addElement(a); 4201 4202 al = new GlobalDefaultCacheTimeAction(); 4203 o = defaults.cacheTime; 4204 a = new Association(o, al, TEXTFIELD_ACTION); 4205 defaultsNormal.addElement(a); 4206 a = new Association(o, kl, TEXTFIELD_KEY); 4207 defaultsNormal.addElement(a); 4208 4209 al = new GlobalSaveAction(); 4210 o = defaults.saveButton; 4211 a = new Association(o, al, BUTTON_ACTION); 4212 defaultsNormal.addElement(a); 4213 4214 al = new GlobalApplyAction(); 4215 o = defaults.applyButton; 4216 a = new Association(o, al, BUTTON_ACTION); 4217 defaultsNormal.addElement(a); 4218 4219 al = new GlobalCancelAction(); 4220 o = defaults.cancelButton; 4221 a = new Association(o, al, BUTTON_ACTION); 4222 defaultsNormal.addElement(a); 4223 4224 DateTimeListener dtl = new DateTimeListener( 4225 defaults.accountExpiryDate, defaultsEditingFrame); 4226 o = defaults.dateMoreButton; 4227 a = new Association(o, dtl, BUTTON_ACTION); 4228 defaultsNormal.addElement(a); 4229 4230 DurationListener dl = new DurationListener( 4231 defaults.maxTicketRenewableLife, defaultsEditingFrame); 4232 o = defaults.renewalMoreButton; 4233 a = new Association(o, dl, BUTTON_ACTION); 4234 defaultsNormal.addElement(a); 4235 4236 dl = new DurationListener(defaults.maxTicketLife, 4237 defaultsEditingFrame); 4238 o = defaults.lifeMoreButton; 4239 a = new Association(o, dl, BUTTON_ACTION); 4240 defaultsNormal.addElement(a); 4241 4242 dl = new DurationListener(defaults.cacheTime, defaultsEditingFrame); 4243 o = defaults.cacheMoreButton; 4244 a = new Association(o, dl, BUTTON_ACTION); 4245 defaultsNormal.addElement(a); 4246 4247 } 4248 setListeners(defaultsHelp, false); 4249 setListeners(defaultsFixers, false); 4250 setListeners(defaultsNormal, true); 4251 defaultsHelpMode = false; 4252 } 4253 4254 public void setupDefaultsHelpListeners() { 4255 if (defaultsHelp == null) { 4256 defaultsHelp = new Vector(10, 10); 4257 MouseListener ml = new HelpListener(); 4258 Association a; 4259 Object o; 4260 4261 o = defaults.disableAccount; 4262 a = new Association(o, ml, CHECKBOX_MOUSE); 4263 defaultsHelp.addElement(a); 4264 defaults.disableAccount.setName("GlobalLockAcct" /* NOI18N */); 4265 4266 o = defaults.forcePasswordChange; 4267 a = new Association(o, ml, CHECKBOX_MOUSE); 4268 defaultsHelp.addElement(a); 4269 defaults.forcePasswordChange.setName("GlobalForcePwChange" 4270 /* NOI18N */); 4271 4272 o = defaults.allowPostdatedTix; 4273 a = new Association(o, ml, CHECKBOX_MOUSE); 4274 defaultsHelp.addElement(a); 4275 defaults.allowPostdatedTix.setName("GlobalAllowPostdated" 4276 /* NOI18N */); 4277 4278 o = defaults.allowForwardableTix; 4279 a = new Association(o, ml, CHECKBOX_MOUSE); 4280 defaultsHelp.addElement(a); 4281 defaults.allowForwardableTix.setName("GlobalAllowForwardable" 4282 /* NOI18N */); 4283 4284 o = defaults.allowRenewableTix; 4285 a = new Association(o, ml, CHECKBOX_MOUSE); 4286 defaultsHelp.addElement(a); 4287 defaults.allowRenewableTix.setName("GlobalAllowRenewable" 4288 /* NOI18N */); 4289 4290 o = defaults.allowProxiableTix; 4291 a = new Association(o, ml, CHECKBOX_MOUSE); 4292 defaultsHelp.addElement(a); 4293 defaults.allowProxiableTix.setName("GlobalAllowProxiable" 4294 /* NOI18N */); 4295 4296 o = defaults.allowServiceTix; 4297 a = new Association(o, ml, CHECKBOX_MOUSE); 4298 defaultsHelp.addElement(a); 4299 defaults.allowServiceTix.setName("GlobalAllowSvr" /* NOI18N */); 4300 4301 o = defaults.allowTGTAuth; 4302 a = new Association(o, ml, CHECKBOX_MOUSE); 4303 defaultsHelp.addElement(a); 4304 defaults.allowTGTAuth.setName("GlobalAllowTGT" /* NOI18N */); 4305 4306 o = defaults.allowDupAuth; 4307 a = new Association(o, ml, CHECKBOX_MOUSE); 4308 defaultsHelp.addElement(a); 4309 defaults.allowDupAuth.setName("GlobalAllowDupAuth" /* NOI18N */); 4310 4311 o = defaults.requirePreauth; 4312 a = new Association(o, ml, CHECKBOX_MOUSE); 4313 defaultsHelp.addElement(a); 4314 defaults.requirePreauth.setName("GlobalRequirePreAuth" 4315 /* NOI18N */); 4316 4317 o = defaults.requireHWAuth; 4318 a = new Association(o, ml, CHECKBOX_MOUSE); 4319 defaultsHelp.addElement(a); 4320 defaults.requireHWAuth.setName("GlobalRequireHwPreAuth" 4321 /* NOI18N */); 4322 4323 o = defaults.serverSide; 4324 a = new Association(o, ml, CHECKBOX_MOUSE); 4325 defaultsHelp.addElement(a); 4326 defaults.serverSide.setName("GlDefServerSide" /* NOI18N */); 4327 4328 o = defaults.maxTicketRenewableLife; 4329 a = new Association(o, ml, TEXTFIELD_MOUSE); 4330 defaultsHelp.addElement(a); 4331 defaults.maxTicketRenewableLife.setName("GlDefRenewableLife" 4332 /* NOI18N */); 4333 4334 o = defaults.maxTicketRenewableLifeLabel; 4335 a = new Association(o, ml, LABEL_MOUSE); 4336 defaultsHelp.addElement(a); 4337 defaults.maxTicketRenewableLifeLabel.setName("GlDefRenewableLife" 4338 /* NOI18N */); 4339 4340 o = defaults.maxTicketLife; 4341 a = new Association(o, ml, TEXTFIELD_MOUSE); 4342 defaultsHelp.addElement(a); 4343 defaults.maxTicketLife.setName("GlDefLife" /* NOI18N */); 4344 4345 o = defaults.maxTicketLifeLabel; 4346 a = new Association(o, ml, LABEL_MOUSE); 4347 defaultsHelp.addElement(a); 4348 defaults.maxTicketLifeLabel.setName("GlDefLife" /* NOI18N */); 4349 4350 o = defaults.accountExpiryDate; 4351 a = new Association(o, ml, TEXTFIELD_MOUSE); 4352 defaultsHelp.addElement(a); 4353 defaults.accountExpiryDate.setName("GlDefExpiry" /* NOI18N */); 4354 4355 o = defaults.accountExpiryDateLabel; 4356 a = new Association(o, ml, LABEL_MOUSE); 4357 defaultsHelp.addElement(a); 4358 defaults.accountExpiryDateLabel.setName("GlDefExpiry" /* NOI18N */); 4359 4360 o = defaults.showLists; 4361 a = new Association(o, ml, CHECKBOX_MOUSE); 4362 defaultsHelp.addElement(a); 4363 defaults.showLists.setName("GlDefShowLists" /* NOI18N */); 4364 4365 o = defaults.staticLists; 4366 a = new Association(o, ml, CHECKBOX_MOUSE); 4367 defaultsHelp.addElement(a); 4368 defaults.staticLists.setName("GlDefStaticLists" /* NOI18N */); 4369 4370 o = defaults.cacheTime; 4371 a = new Association(o, ml, TEXTFIELD_MOUSE); 4372 defaultsHelp.addElement(a); 4373 defaults.cacheTime.setName("GlDefCacheTime" /* NOI18N */); 4374 4375 o = defaults.cacheTimeLabel; 4376 a = new Association(o, ml, LABEL_MOUSE); 4377 defaultsHelp.addElement(a); 4378 defaults.cacheTimeLabel.setName("GlDefCacheTime" /* NOI18N */); 4379 4380 o = defaults.saveButton; 4381 a = new Association(o, ml, BUTTON_MOUSE); 4382 defaultsHelp.addElement(a); 4383 defaults.saveButton.setName("GlobalSave" /* NOI18N */); 4384 4385 o = defaults.applyButton; 4386 a = new Association(o, ml, BUTTON_MOUSE); 4387 defaultsHelp.addElement(a); 4388 defaults.applyButton.setName("GlobalApply" /* NOI18N */); 4389 4390 o = defaults.cancelButton; 4391 a = new Association(o, ml, BUTTON_MOUSE); 4392 defaultsHelp.addElement(a); 4393 defaults.cancelButton.setName("GlobalCancel" /* NOI18N */); 4394 4395 o = defaults.dateMoreButton; 4396 a = new Association(o, ml, BUTTON_MOUSE); 4397 defaultsHelp.addElement(a); 4398 defaults.dateMoreButton.setName("DateHelperButton" /* NOI18N */); 4399 4400 o = defaults.lifeMoreButton; 4401 a = new Association(o, ml, BUTTON_MOUSE); 4402 defaultsHelp.addElement(a); 4403 defaults.lifeMoreButton.setName("DurationHelperButton" 4404 /* NOI18N */); 4405 4406 o = defaults.renewalMoreButton; 4407 a = new Association(o, ml, BUTTON_MOUSE); 4408 defaultsHelp.addElement(a); 4409 defaults.renewalMoreButton.setName("DurationHelperButton" 4410 /* NOI18N */); 4411 4412 o = defaults.cacheMoreButton; 4413 a = new Association(o, ml, BUTTON_MOUSE); 4414 defaultsHelp.addElement(a); 4415 defaults.cacheMoreButton.setName("DurationHelperButton" 4416 /* NOI18N */); 4417 4418 setupDefaultsHelpFlagTogglers(); 4419 } 4420 4421 setListeners(defaultsNormal, false); 4422 setListeners(defaultsHelp, true); 4423 setupDefaultsHelpFixers(); 4424 defaultsHelpMode = true; 4425 } 4426 4427 /** 4428 * Helper method to setupDefaultsHelpListeners. Should be called from 4429 * only from there. 4430 */ 4431 private void setupDefaultsHelpFlagTogglers() { 4432 4433 if (defaultsHelp == null) 4434 return; 4435 4436 CheckboxToggler ml = new CheckboxToggler(); 4437 Object o; 4438 Association a; 4439 4440 o = defaults.disableAccount; 4441 a = new Association(o, ml, CHECKBOX_MOUSE); 4442 defaultsHelp.addElement(a); 4443 4444 o = defaults.forcePasswordChange; 4445 a = new Association(o, ml, CHECKBOX_MOUSE); 4446 defaultsHelp.addElement(a); 4447 4448 o = defaults.allowPostdatedTix; 4449 a = new Association(o, ml, CHECKBOX_MOUSE); 4450 defaultsHelp.addElement(a); 4451 4452 o = defaults.allowForwardableTix; 4453 a = new Association(o, ml, CHECKBOX_MOUSE); 4454 defaultsHelp.addElement(a); 4455 4456 o = defaults.allowRenewableTix; 4457 a = new Association(o, ml, CHECKBOX_MOUSE); 4458 defaultsHelp.addElement(a); 4459 4460 o = defaults.allowProxiableTix; 4461 a = new Association(o, ml, CHECKBOX_MOUSE); 4462 defaultsHelp.addElement(a); 4463 4464 o = defaults.allowServiceTix; 4465 a = new Association(o, ml, CHECKBOX_MOUSE); 4466 defaultsHelp.addElement(a); 4467 4468 o = defaults.allowTGTAuth; 4469 a = new Association(o, ml, CHECKBOX_MOUSE); 4470 defaultsHelp.addElement(a); 4471 4472 o = defaults.allowDupAuth; 4473 a = new Association(o, ml, CHECKBOX_MOUSE); 4474 defaultsHelp.addElement(a); 4475 4476 o = defaults.requirePreauth; 4477 a = new Association(o, ml, CHECKBOX_MOUSE); 4478 defaultsHelp.addElement(a); 4479 4480 o = defaults.requireHWAuth; 4481 a = new Association(o, ml, CHECKBOX_MOUSE); 4482 defaultsHelp.addElement(a); 4483 4484 o = defaults.showLists; 4485 a = new Association(o, ml, CHECKBOX_MOUSE); 4486 defaultsHelp.addElement(a); 4487 4488 o = defaults.serverSide; 4489 a = new Association(o, ml, CHECKBOX_MOUSE); 4490 defaultsHelp.addElement(a); 4491 4492 o = defaults.staticLists; 4493 a = new Association(o, ml, CHECKBOX_MOUSE); 4494 defaultsHelp.addElement(a); 4495 } 4496 4497 public void setupDefaultsHelpFixers() { 4498 defaultsFixers = new Vector(10, 10); 4499 Association a; 4500 Object o; 4501 TextFixer tf; 4502 4503 o = defaults.maxTicketRenewableLife; 4504 tf = new TextFixer((TextField)o); 4505 a = new Association(o, tf, TEXTFIELD_KEY); 4506 defaultsFixers.addElement(a); 4507 4508 o = defaults.maxTicketLife; 4509 tf = new TextFixer((TextField)o); 4510 a = new Association(o, tf, TEXTFIELD_KEY); 4511 defaultsFixers.addElement(a); 4512 4513 o = defaults.accountExpiryDate; 4514 tf = new TextFixer((TextField)o); 4515 a = new Association(o, tf, TEXTFIELD_KEY); 4516 defaultsFixers.addElement(a); 4517 4518 o = defaults.cacheTime; 4519 tf = new TextFixer((TextField)o); 4520 a = new Association(o, tf, TEXTFIELD_KEY); 4521 defaultsFixers.addElement(a); 4522 4523 setListeners(defaultsFixers, true); 4524 } 4525 4526 /** 4527 * Set up listeners from a vector of Associations objects 4528 * 4529 */ 4530 public void setListeners(Vector associations, boolean install) { 4531 setListeners(associations, install, false); 4532 } 4533 4534 public void setListeners(Vector associations, boolean install, boolean loud) 4535 { 4536 Association a; 4537 Button b; 4538 TextField t; 4539 Choice c; 4540 Checkbox x; 4541 Label z; 4542 Window w; 4543 4544 if (associations != null) { 4545 for (int i = 0; i < associations.size(); i++) { 4546 a = (Association)associations.elementAt(i); 4547 int type = a.Type; 4548 EventListener el = a.Listener; 4549 if (loud) { 4550 Object o = a.Object; 4551 String flag = install ? "install" : "deinstall"; 4552 System.out.println(flag+ 4553 "ing listener "+el+" on component "+o); 4554 } 4555 4556 switch (type) { 4557 case BUTTON_ACTION: 4558 b = (Button)a.Object; 4559 if (install) 4560 b.addActionListener((ActionListener)el); 4561 else 4562 b.removeActionListener((ActionListener)el); 4563 break; 4564 4565 case BUTTON_MOUSE: 4566 b = (Button)a.Object; 4567 if (install) 4568 b.addMouseListener((MouseListener)el); 4569 else 4570 b.removeMouseListener((MouseListener)el); 4571 break; 4572 4573 case TEXTFIELD_ACTION: 4574 t = (TextField)a.Object; 4575 if (install) 4576 t.addActionListener((ActionListener)el); 4577 else 4578 t.removeActionListener((ActionListener)el); 4579 break; 4580 4581 case TEXTFIELD_MOUSE: 4582 t = (TextField)a.Object; 4583 if (install) 4584 t.addMouseListener((MouseListener)el); 4585 else 4586 t.removeMouseListener((MouseListener)el); 4587 break; 4588 4589 case TEXTFIELD_KEY: 4590 t = (TextField)a.Object; 4591 if (install) 4592 t.addKeyListener((KeyListener)el); 4593 else 4594 t.removeKeyListener((KeyListener)el); 4595 break; 4596 4597 case CHOICE_ITEM: 4598 c = (Choice)a.Object; 4599 if (install) 4600 c.addItemListener((ItemListener)el); 4601 else 4602 c.removeItemListener((ItemListener)el); 4603 break; 4604 4605 case CHOICE_MOUSE: 4606 c = (Choice)a.Object; 4607 if (install) 4608 c.addMouseListener((MouseListener)el); 4609 else 4610 c.removeMouseListener((MouseListener)el); 4611 break; 4612 4613 case CHECKBOX_ITEM: 4614 x = (Checkbox)a.Object; 4615 if (install) 4616 x.addItemListener((ItemListener)el); 4617 else 4618 x.removeItemListener((ItemListener)el); 4619 break; 4620 4621 case CHECKBOX_MOUSE: 4622 x = (Checkbox)a.Object; 4623 if (install) 4624 x.addMouseListener((MouseListener)el); 4625 else 4626 x.removeMouseListener((MouseListener)el); 4627 break; 4628 4629 case LABEL_MOUSE: 4630 z = (Label)a.Object; 4631 if (install) 4632 z.addMouseListener((MouseListener)el); 4633 else 4634 z.removeMouseListener((MouseListener)el); 4635 break; 4636 4637 case WINDOW_LISTENER: 4638 w = (Window)a.Object; 4639 if (install) 4640 w.addWindowListener((WindowListener)el); 4641 else 4642 w.removeWindowListener((WindowListener)el); 4643 break; 4644 } 4645 } 4646 } 4647 } 4648 4649 /* 4650 * About a million actions here ... 4651 */ 4652 private class LoginOKAction implements ActionListener { 4653 public void actionPerformed(ActionEvent e) { 4654 loginComplete(); 4655 } 4656 } 4657 4658 private class LoginStartOverAction implements ActionListener { 4659 public void actionPerformed(ActionEvent e) { 4660 setLoginDefaults(); 4661 } 4662 } 4663 4664 private class LoginNameAction implements ActionListener { 4665 public void actionPerformed(ActionEvent e) { 4666 nameComplete(); 4667 } 4668 } 4669 4670 private class LoginPassAction implements ActionListener { 4671 public void actionPerformed(ActionEvent e) { 4672 loginComplete(); 4673 } 4674 } 4675 4676 private class LoginRealmAction implements ActionListener { 4677 public void actionPerformed(ActionEvent e) { 4678 newRealm(); 4679 } 4680 } 4681 4682 private class LoginServerAction implements ActionListener { 4683 public void actionPerformed(ActionEvent e) { 4684 newServer(); 4685 } 4686 } 4687 4688 private class MainWindowCloseAction extends WindowAdapter { 4689 public void windowClosing(WindowEvent e) { 4690 checkLogout(); 4691 } 4692 }; 4693 4694 private class PrListPatternAction implements ActionListener { 4695 public void actionPerformed(ActionEvent e) { 4696 prPatternComplete(); 4697 } 4698 } 4699 4700 private class PrListClearAction implements ActionListener { 4701 public void actionPerformed(ActionEvent e) { 4702 prPatternClear(); 4703 } 4704 } 4705 4706 private class PrListModifyAction implements ActionListener { 4707 public void actionPerformed(ActionEvent e) { 4708 prModify(); 4709 } 4710 } 4711 4712 private class PrListAddAction implements ActionListener { 4713 public void actionPerformed(ActionEvent e) { 4714 prAdd(); 4715 } 4716 } 4717 4718 private class PrListDeleteAction implements ActionListener { 4719 public void actionPerformed(ActionEvent e) { 4720 prDelete(); 4721 } 4722 } 4723 4724 private class PrListDuplicateAction implements ActionListener { 4725 public void actionPerformed(ActionEvent e) { 4726 prDuplicate(); 4727 } 4728 } 4729 4730 private class PrCommentsAction implements ActionListener { 4731 public void actionPerformed(ActionEvent e) { 4732 setPrComments(); 4733 prSetNeedSave(); 4734 } 4735 } 4736 4737 private class PrPolicyAction implements ItemListener { 4738 public void itemStateChanged(ItemEvent e) { 4739 setPrPolicy(); 4740 prSetNeedSave(); 4741 } 4742 } 4743 4744 private class PrPasswordAction implements ActionListener { 4745 public void actionPerformed(ActionEvent e) { 4746 setPrPassword(!prin.isNew); 4747 prSetNeedSave(); 4748 } 4749 } 4750 4751 private class PrRandomPwAction implements ActionListener { 4752 public void actionPerformed(ActionEvent e) { 4753 genRandomPassword(); 4754 prSetNeedSave(); 4755 } 4756 } 4757 4758 private class EncListAction implements ActionListener { 4759 public void actionPerformed(ActionEvent e) { 4760 setEncType(); 4761 prSetNeedSave(); 4762 } 4763 } 4764 4765 private class PrExpiryAction implements ActionListener { 4766 public void actionPerformed(ActionEvent e) { 4767 setPrExpiry(); 4768 prSetNeedSave(); 4769 } 4770 } 4771 4772 private class PrSaveAction implements ActionListener { 4773 public void actionPerformed(ActionEvent e) { 4774 prSave(); 4775 } 4776 } 4777 4778 private class PrCancelAction implements ActionListener { 4779 public void actionPerformed(ActionEvent e) { 4780 prCancel(); 4781 } 4782 } 4783 4784 private class PrBasicPreviousAction implements ActionListener { 4785 public void actionPerformed(ActionEvent e) { 4786 prBasicPrevious(); 4787 } 4788 } 4789 4790 private class PrBasicNextAction implements ActionListener { 4791 public void actionPerformed(ActionEvent e) { 4792 prBasicNext(); 4793 } 4794 } 4795 4796 private class PrPwExpiryAction implements ActionListener { 4797 public void actionPerformed(ActionEvent e) { 4798 setPrPwExpiry(); 4799 prSetNeedSave(); 4800 } 4801 } 4802 4803 private class PrKvnoAction implements ActionListener { 4804 public void actionPerformed(ActionEvent e) { 4805 setPrKvno(); 4806 prSetNeedSave(); 4807 } 4808 } 4809 4810 private class PrMaxLifetimeAction implements ActionListener { 4811 public void actionPerformed(ActionEvent e) { 4812 setPrMaxlife(); 4813 prSetNeedSave(); 4814 } 4815 } 4816 4817 private class PrMaxRenewalAction implements ActionListener { 4818 public void actionPerformed(ActionEvent e) { 4819 setPrMaxrenew(); 4820 prSetNeedSave(); 4821 } 4822 } 4823 4824 private class PrDetailPreviousAction implements ActionListener { 4825 public void actionPerformed(ActionEvent e) { 4826 prDetailPrevious(); 4827 } 4828 } 4829 4830 private class PrDetailNextAction implements ActionListener { 4831 public void actionPerformed(ActionEvent e) { 4832 prDetailNext(); 4833 } 4834 } 4835 4836 private class PrFlagsPreviousAction implements ActionListener { 4837 public void actionPerformed(ActionEvent e) { 4838 prFlagsPrevious(); 4839 } 4840 } 4841 4842 private class PrLockAcctAction implements ItemListener { 4843 public void itemStateChanged(ItemEvent e) { 4844 setPrFlag(Flags.DISALLOW_ALL_TIX); 4845 prSetNeedSave(); 4846 } 4847 } 4848 4849 private class PrForcePwChangeAction implements ItemListener { 4850 public void itemStateChanged(ItemEvent e) { 4851 setPrFlag(Flags.REQUIRES_PWCHANGE); 4852 prSetNeedSave(); 4853 } 4854 } 4855 4856 private class PrAllowPostdatedAction implements ItemListener { 4857 public void itemStateChanged(ItemEvent e) { 4858 setPrFlag(Flags.DISALLOW_POSTDATED); 4859 prSetNeedSave(); 4860 } 4861 } 4862 4863 private class PrAllowForwardableAction implements ItemListener { 4864 public void itemStateChanged(ItemEvent e) { 4865 setPrFlag(Flags.DISALLOW_FORWARDABLE); 4866 prSetNeedSave(); 4867 } 4868 } 4869 4870 private class PrAllowRenewableAction implements ItemListener { 4871 public void itemStateChanged(ItemEvent e) { 4872 setPrFlag(Flags.DISALLOW_RENEWABLE); 4873 prSetNeedSave(); 4874 } 4875 } 4876 4877 private class PrAllowProxiableAction implements ItemListener { 4878 public void itemStateChanged(ItemEvent e) { 4879 setPrFlag(Flags.DISALLOW_PROXIABLE); 4880 prSetNeedSave(); 4881 } 4882 } 4883 4884 private class PrAllowSvrAction implements ItemListener { 4885 public void itemStateChanged(ItemEvent e) { 4886 setPrFlag(Flags.DISALLOW_SVR); 4887 prSetNeedSave(); 4888 } 4889 } 4890 4891 private class PrAllowTGTAction implements ItemListener { 4892 public void itemStateChanged(ItemEvent e) { 4893 setPrFlag(Flags.DISALLOW_TGT_BASED); 4894 prSetNeedSave(); 4895 } 4896 } 4897 4898 private class PrAllowDupAuthAction implements ItemListener { 4899 public void itemStateChanged(ItemEvent e) { 4900 setPrFlag(Flags.DISALLOW_DUP_SKEY); 4901 prSetNeedSave(); 4902 } 4903 } 4904 4905 private class PrRequirePreAuthAction implements ItemListener { 4906 public void itemStateChanged(ItemEvent e) { 4907 setPrFlag(Flags.REQUIRE_PRE_AUTH); 4908 prSetNeedSave(); 4909 } 4910 } 4911 4912 private class PrRequireHwPreAuthAction implements ItemListener { 4913 public void itemStateChanged(ItemEvent e) { 4914 setPrFlag(Flags.REQUIRE_HW_AUTH); 4915 prSetNeedSave(); 4916 } 4917 } 4918 4919 private class PrFlagsNextAction implements ActionListener { 4920 public void actionPerformed(ActionEvent e) { 4921 prFlagsDone(); 4922 } 4923 } 4924 4925 private class PoListPatternAction implements ActionListener { 4926 public void actionPerformed(ActionEvent e) { 4927 poPatternComplete(); 4928 } 4929 } 4930 4931 private class PoListClearAction implements ActionListener { 4932 public void actionPerformed(ActionEvent e) { 4933 poPatternClear(); 4934 } 4935 } 4936 4937 private class PoListModifyAction implements ActionListener { 4938 public void actionPerformed(ActionEvent e) { 4939 poSelected(); 4940 } 4941 } 4942 4943 private class PoListAddAction implements ActionListener { 4944 public void actionPerformed(ActionEvent e) { 4945 poAdd(); 4946 } 4947 } 4948 4949 private class PoListDeleteAction implements ActionListener { 4950 public void actionPerformed(ActionEvent e) { 4951 poDelete(); 4952 } 4953 } 4954 4955 private class PoListDuplicateAction implements ActionListener { 4956 public void actionPerformed(ActionEvent e) { 4957 poDuplicate(); 4958 } 4959 } 4960 4961 private class PoMinPwLengthAction implements ItemListener { 4962 public void itemStateChanged(ItemEvent e) { 4963 setPolPwLength(); 4964 poSetNeedSave(); 4965 } 4966 } 4967 4968 private class PoMinPwClassAction implements ItemListener { 4969 public void itemStateChanged(ItemEvent e) { 4970 setPolPwClasses(); 4971 poSetNeedSave(); 4972 } 4973 } 4974 4975 private class PoSavedPasswordsAction implements ItemListener { 4976 public void itemStateChanged(ItemEvent e) { 4977 setPolPwHistory(); 4978 poSetNeedSave(); 4979 } 4980 } 4981 4982 private class PoMinTicketLifetimeAction implements ActionListener { 4983 public void actionPerformed(ActionEvent e) { 4984 setPolMinlife(); 4985 poSetNeedSave(); 4986 } 4987 } 4988 4989 private class PoMaxTicketLifetimeAction implements ActionListener { 4990 public void actionPerformed(ActionEvent e) { 4991 setPolMaxlife(); 4992 poSetNeedSave(); 4993 } 4994 } 4995 4996 private class PoSaveAction implements ActionListener { 4997 public void actionPerformed(ActionEvent e) { 4998 poSave(); 4999 } 5000 } 5001 5002 private class PoCancelAction implements ActionListener { 5003 public void actionPerformed(ActionEvent e) { 5004 poCancel(); 5005 } 5006 } 5007 5008 private class PoPreviousAction implements ActionListener { 5009 public void actionPerformed(ActionEvent e) { 5010 polPrevious(); 5011 } 5012 } 5013 5014 private class PoDoneAction implements ActionListener { 5015 public void actionPerformed(ActionEvent e) { 5016 polDone(); 5017 } 5018 } 5019 5020 private class GlobalLockAcctAction implements ItemListener { 5021 public void itemStateChanged(ItemEvent e) { 5022 setGlobalFlag(Flags.DISALLOW_ALL_TIX); 5023 } 5024 } 5025 5026 private class GlobalForcePwChangeAction implements ItemListener { 5027 public void itemStateChanged(ItemEvent e) { 5028 setGlobalFlag(Flags.REQUIRES_PWCHANGE); 5029 } 5030 } 5031 5032 private class GlobalAllowPostdatedAction implements ItemListener { 5033 public void itemStateChanged(ItemEvent e) { 5034 setGlobalFlag(Flags.DISALLOW_POSTDATED); 5035 } 5036 } 5037 5038 private class GlobalAllowForwardableAction implements ItemListener { 5039 public void itemStateChanged(ItemEvent e) { 5040 setGlobalFlag(Flags.DISALLOW_FORWARDABLE); 5041 } 5042 } 5043 5044 private class GlobalAllowRenewableAction implements ItemListener { 5045 public void itemStateChanged(ItemEvent e) { 5046 setGlobalFlag(Flags.DISALLOW_RENEWABLE); 5047 } 5048 } 5049 5050 private class GlobalAllowProxiableAction implements ItemListener { 5051 public void itemStateChanged(ItemEvent e) { 5052 setGlobalFlag(Flags.DISALLOW_PROXIABLE); 5053 } 5054 } 5055 5056 private class GlobalAllowSvrAction implements ItemListener { 5057 public void itemStateChanged(ItemEvent e) { 5058 setGlobalFlag(Flags.DISALLOW_SVR); 5059 } 5060 } 5061 5062 private class GlobalAllowTGTAction implements ItemListener { 5063 public void itemStateChanged(ItemEvent e) { 5064 setGlobalFlag(Flags.DISALLOW_TGT_BASED); 5065 } 5066 } 5067 5068 private class GlobalAllowDupAuthAction implements ItemListener { 5069 public void itemStateChanged(ItemEvent e) { 5070 setGlobalFlag(Flags.DISALLOW_DUP_SKEY); 5071 } 5072 } 5073 5074 private class GlobalRequirePreAuthAction implements ItemListener { 5075 public void itemStateChanged(ItemEvent e) { 5076 setGlobalFlag(Flags.REQUIRE_PRE_AUTH); 5077 } 5078 } 5079 5080 private class GlobalRequireHwPreAuthAction implements ItemListener { 5081 public void itemStateChanged(ItemEvent e) { 5082 setGlobalFlag(Flags.REQUIRE_HW_AUTH); 5083 } 5084 } 5085 5086 private class GlobalDefaultServerSideAction implements ItemListener { 5087 public void itemStateChanged(ItemEvent e) { 5088 setServerSide(); 5089 } 5090 } 5091 5092 private class GlobalDefaultRenewableLifeAction implements ActionListener { 5093 public void actionPerformed(ActionEvent e) { 5094 if (!setGlobalMaxrenew()) { 5095 ((TextField)e.getSource()).requestFocus(); 5096 } 5097 } 5098 } 5099 5100 private class GlobalDefaultLifeAction implements ActionListener { 5101 public void actionPerformed(ActionEvent e) { 5102 if (!setGlobalMaxlife()) { 5103 ((TextField)e.getSource()).requestFocus(); 5104 } 5105 } 5106 } 5107 5108 private class GlobalDefaultExpiryAction implements ActionListener { 5109 public void actionPerformed(ActionEvent e) { 5110 if (!setGlobalExpiry()) 5111 ((TextField)e.getSource()).requestFocus(); 5112 } 5113 } 5114 5115 private class GlobalDefaultShowListsAction implements ItemListener { 5116 public void itemStateChanged(ItemEvent e) { 5117 setShowLists(); 5118 } 5119 } 5120 5121 private class GlobalDefaultStaticListsAction implements ItemListener { 5122 public void itemStateChanged(ItemEvent e) { 5123 setStaticLists(); 5124 } 5125 } 5126 5127 private class GlobalDefaultCacheTimeAction implements ActionListener { 5128 public void actionPerformed(ActionEvent e) { 5129 setCacheTime(); 5130 } 5131 } 5132 5133 private class GlobalSaveAction implements ActionListener { 5134 public void actionPerformed(ActionEvent e) { 5135 glSave(); 5136 } 5137 } 5138 5139 private class GlobalApplyAction implements ActionListener { 5140 public void actionPerformed(ActionEvent e) { 5141 glApply(); 5142 } 5143 } 5144 5145 private class GlobalCancelAction implements ActionListener { 5146 public void actionPerformed(ActionEvent e) { 5147 glCancel(); 5148 } 5149 } 5150 5151 private class HelpListener extends MouseAdapter { 5152 public void mouseClicked(MouseEvent e) { 5153 showHelp(e.getComponent().getName()); 5154 } 5155 } 5156 5157 private class CheckboxToggler extends MouseAdapter { 5158 public void mouseClicked(MouseEvent e) { 5159 if (e.getComponent() instanceof Checkbox) { 5160 Checkbox cb = (Checkbox)e.getComponent(); 5161 cb.setState(!cb.getState()); 5162 } 5163 } 5164 } 5165 5166 private class ChoiceFixer implements ItemListener { 5167 private Choice c; 5168 private String s; 5169 5170 ChoiceFixer(Choice c) { 5171 this.c = c; 5172 s = c.getSelectedItem(); 5173 // System.out.println("CF: Saving string "+s); 5174 } 5175 5176 public void itemStateChanged(ItemEvent e) { 5177 if (e.getSource() == c && !c.getSelectedItem().equals(s)) 5178 c.select(s); 5179 // System.out.println("CF: Restoring string "+s); 5180 } 5181 } 5182 5183 private class TextFixer extends KeyAdapter { 5184 private TextField t; 5185 private String s; 5186 5187 TextFixer(TextField t) { 5188 this.t = t; 5189 s = t.getText(); 5190 // System.out.println("TF: Saving string "+s); 5191 } 5192 5193 public void keyTyped(KeyEvent e) { 5194 if (e.getSource() == t) 5195 t.setText(s); 5196 // System.out.println("TF: Restoring string "+s); 5197 } 5198 } 5199 5200 /* 5201 * End of the million listeners 5202 */ 5203 5204 /** 5205 * Call rb.getString(), but catch exception and returns English 5206 * key so that small spelling errors don't cripple the GUI 5207 * 5208 */ 5209 private static final String getString(String key) { 5210 try { 5211 String res = rb.getString(key); 5212 return res; 5213 } catch (MissingResourceException e) { 5214 System.out.println("Missing resource "+key+", using English."); 5215 return key; 5216 } 5217 } 5218 5219 private static final String getHelpString(String key) { 5220 String res; 5221 try { 5222 res = hrb.getString(key); 5223 } catch (MissingResourceException e) { 5224 res = "Missing help on key "+key; 5225 } 5226 return res; 5227 } 5228 5229 5230 /** 5231 * Check the privileges this principal has to see what we should not try. 5232 */ 5233 private boolean checkPrivs() { 5234 boolean okay = true; 5235 String lpriv = (((privs & PRIV_ADD) == 0) ? "A" : "a") 5236 + (((privs & PRIV_DELETE) == 0) ? "D" : "d") 5237 + (((privs & PRIV_MODIFY) == 0) ? "M" : "m") 5238 + (((privs & PRIV_CHANGEPW) == 0) ? "C" : "c") 5239 + (((privs & PRIV_INQUIRE) == 0) ? "I" : "i") 5240 + (((privs & PRIV_LIST) == 0) ? "L" : "l"); 5241 // System.out.println("Privileges are "+lpriv+" " 5242 // +(new Integer(privs).toString())); 5243 /** 5244 * Having modify is not useful if we can't either add or see 5245 * old values 5246 */ 5247 if ((privs & (PRIV_MODIFY | PRIV_INQUIRE | PRIV_ADD)) == PRIV_MODIFY) 5248 okay = false; 5249 /* Having changepw without inquire is not useful */ 5250 if (privs == PRIV_CHANGEPW) 5251 okay = false; 5252 if (!okay) { 5253 showLoginError( 5254 getString("Insufficient privileges to use gkadmin: ")+lpriv 5255 +getString(" Please try using another principal.")); 5256 return false; 5257 } 5258 return true; 5259 } 5260 5261 /* 5262 * Try to cope with the privileges we have. 5263 */ 5264 private void reactToPrivs() { 5265 Boolean off = new Boolean(false); 5266 5267 /* 5268 * If we don't have the Add privilege, we turn off "Create New" 5269 * and "Duplicate". "Duplicate" is also handled in prSelValid/ 5270 * poSelValid because it's sensitive to selection from the lists. 5271 */ 5272 if ((privs & PRIV_ADD) == 0) { 5273 // System.out.println("Disabling Create New buttons"); 5274 gui.PrListAdd.set("enabled" /* NOI18N */, off); 5275 gui.PoListAdd.set("enabled" /* NOI18N */, off); 5276 gui.PrListDuplicate.set("enabled" /* NOI18N */, off); 5277 gui.PoListDuplicate.set("enabled" /* NOI18N */, off); 5278 } 5279 5280 /* 5281 * If we don't have the Delete privilege, we turn off "Delete". 5282 * This is also done in prSelValid/poSelValid because it is 5283 * thought about when a list item is selected. 5284 */ 5285 if ((privs & PRIV_DELETE) == 0) { 5286 // System.out.println("Disabling Delete buttons"); 5287 gui.PrListDelete.set("enabled" /* NOI18N */, off); 5288 gui.PoListDelete.set("enabled" /* NOI18N */, off); 5289 } 5290 5291 /* 5292 * If we don't have changepw, disable textfield and random button. 5293 * Add needs to turn this on again for an add operation only. 5294 */ 5295 if ((privs & PRIV_CHANGEPW) == 0) { 5296 // System.out.println("Disabling password components"); 5297 gui.PrPassword.set("enabled" /* NOI18N */, off); 5298 gui.PrBasicRandomPw.set("enabled" /* NOI18N */, off); 5299 gui.EncList.set("enabled" /* NOI18N */, off); 5300 } 5301 5302 /* 5303 * If we don't have inquire, we can't get an existing principal 5304 * to duplicate, and permitting modification seems a bad idea. 5305 * We can still use the panels if we can add. These will also 5306 * get dealt with in prSelValid/poSelValid. 5307 */ 5308 if ((privs & PRIV_INQUIRE) == 0) { 5309 // System.out.println("Disabling Modify buttons"); 5310 gui.PrListModify.set("enabled" /* NOI18N */, off); 5311 gui.PoListModify.set("enabled" /* NOI18N */, off); 5312 gui.PrListDuplicate.set("enabled" /* NOI18N */, off); 5313 gui.PoListDuplicate.set("enabled" /* NOI18N */, off); 5314 } 5315 5316 /* 5317 * If we don't have Modify or Add but do have Inquire, we want to 5318 * turn off save and cancel buttons, as well as all principal and 5319 * policy components to prevent any changes. 5320 */ 5321 if ((privs & (PRIV_MODIFY | PRIV_ADD)) == 0) { 5322 // System.out.println("Disabling attribute components"); 5323 enablePrAttributes(off); 5324 enablePoAttributes(off); 5325 } 5326 5327 /* 5328 * We may have no list privs, or we may have turned off lists. 5329 * Set things up accordingly. 5330 */ 5331 noLists = ((privs & PRIV_LIST) == 0 || !defaults.getShowLists()); 5332 fixListPanels(); 5333 } 5334 5335 private void fixListPanels() { 5336 /* 5337 * If we can't use lists, we won't fetch lists, which means the 5338 * only way to get a principal is to type something into the 5339 * list pattern field. Relabel those so they work better. 5340 */ 5341 String s; 5342 Boolean yes = new Boolean(true); 5343 Boolean no = new Boolean(false); 5344 if (noLists) { 5345 // System.out.println("Hijacking list pattern stuff"); 5346 gui.PrListLabel.set("enabled" /* NOI18N */, no); 5347 gui.PoListLabel.set("enabled" /* NOI18N */, no); 5348 s = getString("Principal Name:"); 5349 gui.PrSearchLab.set("text" /* NOI18N */, s); 5350 s = getString("Policy Name:"); 5351 gui.PoListPatternLabel.set("text" /* NOI18N */, s); 5352 s = getString("Clear Name"); 5353 gui.PrListClear.set("text" /* NOI18N */, s); 5354 gui.PoListClear.set("text" /* NOI18N */, s); 5355 gui.Prlist.set("enabled", no); 5356 gui.Pollist.set("enabled", no); 5357 gui.refreshPrincipals.set("enabled", no); 5358 gui.refreshPolicies.set("enabled", no); 5359 gui.Prlist.set("selectedItem" /* NOI18N */, null); 5360 gui.Pollist.set("selectedItem" /* NOI18N */, null); 5361 gui.PrintPrlist.set("enabled" /* NOI18N */, no); 5362 gui.PrintPollist.set("enabled" /* NOI18N */, no); 5363 } else { 5364 gui.PrListLabel.set("enabled" /* NOI18N */, yes); 5365 gui.PoListLabel.set("enabled" /* NOI18N */, yes); 5366 s = getString("Filter Pattern:"); 5367 gui.PrSearchLab.set("text" /* NOI18N */, s); 5368 gui.PoListPatternLabel.set("text" /* NOI18N */, s); 5369 s = getString("Clear Filter"); 5370 gui.PrListClear.set("text" /* NOI18N */, s); 5371 gui.PoListClear.set("text" /* NOI18N */, s); 5372 gui.Prlist.set("enabled", yes); 5373 gui.Pollist.set("enabled", yes); 5374 gui.refreshPrincipals.set("enabled", yes); 5375 gui.refreshPolicies.set("enabled", yes); 5376 gui.PrintPrlist.set("enabled", yes); 5377 gui.PrintPollist.set("enabled", yes); 5378 } 5379 } 5380 5381 private void enablePrAttributes(Boolean sense) { 5382 // Basics 5383 gui.PrPolicy.set("enabled" /* NOI18N */, sense); 5384 gui.PrExpiry.set("enabled" /* NOI18N */, sense); 5385 gui.EncList.set("enabled" /* NOI18N */, sense); 5386 gui.PrComments.set("enabled" /* NOI18N */, sense); 5387 // Details 5388 gui.PrPwExpiry.set("enabled" /* NOI18N */, sense); 5389 gui.PrKvno.set("enabled" /* NOI18N */, sense); 5390 gui.PrMaxLifetime.set("enabled" /* NOI18N */, sense); 5391 gui.PrMaxRenewal.set("enabled" /* NOI18N */, sense); 5392 // Flags 5393 gui.PrLockAcct.set("enabled" /* NOI18N */, sense); 5394 gui.PrForcePwChange.set("enabled" /* NOI18N */, sense); 5395 gui.PrAllowPostdated.set("enabled" /* NOI18N */, sense); 5396 gui.PrAllowForwardable.set("enabled" /* NOI18N */, sense); 5397 gui.PrAllowRenewable.set("enabled" /* NOI18N */, sense); 5398 gui.PrAllowProxiable.set("enabled" /* NOI18N */, sense); 5399 gui.PrAllowSvr.set("enabled" /* NOI18N */, sense); 5400 gui.PrAllowTGT.set("enabled" /* NOI18N */, sense); 5401 gui.PrAllowDupAuth.set("enabled" /* NOI18N */, sense); 5402 gui.PrRequirePreAuth.set("enabled" /* NOI18N */, sense); 5403 gui.PrRequireHwPreAuth.set("enabled" /* NOI18N */, sense); 5404 } 5405 5406 private void enablePoAttributes(Boolean sense) { 5407 // Policy 5408 gui.PoMinPwLength.set("enabled" /* NOI18N */, sense); 5409 gui.PoMinPwClass.set("enabled" /* NOI18N */, sense); 5410 gui.PoSavedPasswords.set("enabled" /* NOI18N */, sense); 5411 gui.PoMinTicketLifetime.set("enabled" /* NOI18N */, sense); 5412 gui.PoMaxTicketLifetime.set("enabled" /* NOI18N */, sense); 5413 } 5414 5415 /** 5416 * Show context-sensitive help from HelpData class 5417 * 5418 */ 5419 public void showHelp(String what) { 5420 String res; 5421 5422 // System.out.println("Help on "+what); 5423 if (cHelp == null) { 5424 // System.out.println("showHelp called without context."); 5425 return; 5426 } 5427 res = getHelpString(what); 5428 cHelp.setText(res); 5429 cHelp.setVisible(true); 5430 } 5431 5432 /** 5433 * Holds an association between an object and a listener, keeping 5434 * track of the types so that they can be assigned en masse later 5435 * 5436 */ 5437 private class Association extends Object { 5438 Object Object; 5439 EventListener Listener; 5440 int Type; 5441 5442 public Association(Object obj, EventListener list, int type) { 5443 Object = obj; 5444 Listener = list; 5445 Type = type; 5446 } 5447 } 5448 5449 /** 5450 * Action listeners for the defaults editing frame. 5451 */ 5452 5453 private class DefaultsContextSensitiveHelpListener 5454 implements ActionListener { 5455 public void actionPerformed(ActionEvent e) { 5456 if (defaultsHelpMode) 5457 showHelp("ContextSensitiveHelp"); 5458 else 5459 contextHelp(defaultsEditingFrame); 5460 } 5461 } 5462 5463 /** 5464 * This class launches the dateTimeDialog box when the user presses 5465 * the "..." button. An instance of this is shared by all the 5466 * buttons that are meant to do this. 5467 */ 5468 private class DateTimeListener implements ActionListener { 5469 5470 private TextField tf; 5471 private Frame frame; 5472 5473 DateTimeListener(TextField tf, Frame frame) { 5474 this.tf = tf; 5475 this.frame = frame; 5476 } 5477 5478 public void actionPerformed(ActionEvent e) { 5479 if (mainHelpMode && frame == realMainFrame) 5480 showHelp("DateTime..."); 5481 else 5482 if (defaultsHelpMode && frame == defaultsEditingFrame) 5483 showHelp("DateTime..."); 5484 else 5485 getDateTimeFromDialogBox(tf, frame); 5486 } // actionPerformed 5487 } // class DateTimeListener 5488 5489 /** 5490 * This class launches the EncListDialog box when the user presses 5491 * the "..." button. An instance of this is shared by all the 5492 * buttons that are meant to do this. 5493 */ 5494 private class EncListListener implements ActionListener { 5495 5496 private TextField tf; 5497 private Frame frame; 5498 5499 EncListListener(TextField tf, Frame frame) { 5500 this.tf = tf; 5501 this.frame = frame; 5502 } 5503 5504 public void actionPerformed(ActionEvent e) { 5505 if (mainHelpMode && frame == realMainFrame) 5506 showHelp("EncList..."); 5507 else 5508 if (defaultsHelpMode && frame == defaultsEditingFrame) 5509 showHelp("EncList..."); 5510 else 5511 getEncListFromDialogBox(tf, frame); 5512 } // actionPerformed 5513 } // class EncListListener 5514 5515 /** 5516 * This class launches the durrationHelper dialog box when the user presses 5517 * the "..." button. An instance of this is shared by all the 5518 * buttons that are meant to do this. 5519 */ 5520 private class DurationListener implements ActionListener { 5521 5522 private TextField tf; 5523 private Frame frame; 5524 5525 DurationListener(TextField tf, Frame frame) { 5526 this.tf = tf; 5527 this.frame = frame; 5528 } 5529 5530 public void actionPerformed(ActionEvent e) { 5531 if (mainHelpMode && frame == realMainFrame) 5532 showHelp("Duration..."); 5533 else 5534 if (defaultsHelpMode && frame == defaultsEditingFrame) 5535 showHelp("Duration..."); 5536 else 5537 getDurationFromDialogBox(tf, frame); 5538 } 5539 } 5540 5541 5542 private class KeystrokeDetector extends KeyAdapter { 5543 5544 private int changeType; // principal or policy change 5545 5546 public KeystrokeDetector(int type) { 5547 changeType = type; 5548 } 5549 5550 public void keyTyped(KeyEvent e) { 5551 reactToKey(changeType); 5552 ((TextField)e.getComponent()).requestFocus(); 5553 } 5554 } 5555 5556 private void reactToKey(int changeType) { 5557 switch (changeType) { 5558 case PRINCIPAL_EDITING: 5559 prSetNeedSave(); 5560 break; 5561 5562 case POLICY_EDITING: 5563 poSetNeedSave(); 5564 break; 5565 5566 case DEFAULTS_EDITING: 5567 glSetNeedSave(); 5568 break; 5569 5570 case PRINCIPAL_LIST: 5571 if (noLists) 5572 prSelValid(true); 5573 break; 5574 5575 case POLICY_LIST: 5576 if (noLists) 5577 poSelValid(true); 5578 break; 5579 } 5580 } 5581 5582 private static String enclose(String value) { 5583 return new StringBuffer("\"").append(value).append("\"").toString(); 5584 } 5585 5586 private static String constructDurationExample() { 5587 StringBuffer result = new StringBuffer(getString("Example: ")); 5588 result.append(enclose(nf.format(28800))); 5589 return result.toString(); 5590 } 5591 5592 private static String constructDateExample() { 5593 StringBuffer result = new StringBuffer(getString("Example: ")); 5594 result.append(enclose(df.format(new Date()))); 5595 result.append(' ').append(getString("or")).append(' '); 5596 result.append(enclose(neverString)); 5597 return result.toString(); 5598 } 5599 5600 private static String constructNumberExample() { 5601 StringBuffer result = new StringBuffer(getString("Example: ")); 5602 result.append(enclose(nf.format(4))); 5603 return result.toString(); 5604 } 5605 5606 static { 5607 rb = ResourceBundle.getBundle("GuiResource" /* NOI18N */); 5608 hrb = ResourceBundle.getBundle("HelpData" /* NOI18N */); 5609 df = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, 5610 DateFormat.MEDIUM); 5611 nf = NumberFormat.getInstance(); 5612 5613 neverString = getString("Never"); 5614 5615 toolkit = Toolkit.getDefaultToolkit(); 5616 5617 durationErrorText = new String[] {getHelpString("Bad Duration"), 5618 constructDurationExample()}; 5619 dateErrorText = new String[] {getHelpString("Bad Date"), 5620 constructDateExample()}; 5621 numberErrorText = new String[] {getHelpString("Bad Number"), 5622 constructNumberExample()}; 5623 } 5624 5625 } 5626