001package jmri.jmrit.permission.swing; 002 003import java.awt.event.ActionEvent; 004 005import javax.swing.Icon; 006 007import jmri.*; 008import jmri.util.swing.*; 009 010 011/** 012 * Let a user change his own password. 013 * 014 * @author Daniel Bergqvist (C) 2024 015 */ 016public class ChangePasswordAction extends JmriAbstractAction { 017 018 public ChangePasswordAction(String s, WindowInterface wi) { 019 super(s, wi); 020 checkPermission(); 021 } 022 023 public ChangePasswordAction(String s, Icon i, WindowInterface wi) { 024 super(s, i, wi); 025 checkPermission(); 026 } 027 028 public ChangePasswordAction() { 029 super(Bundle.getMessage("ChangePasswordAction_Title")); 030 checkPermission(); 031 } 032 033 private void checkPermission() { 034 var permissionManager = InstanceManager.getDefault(PermissionManager.class); 035 if (permissionManager.isEnabled()) { 036 setEnabled(permissionManager.isLoggedIn()); 037 permissionManager.addLoginListener((isLogin) -> { 038 setEnabled(isLogin); 039 }); 040 } else { 041 setEnabled(false); 042 } 043 } 044 045 @Override 046 public void actionPerformed(ActionEvent e) { 047 var permissionManager = InstanceManager.getDefault(PermissionManager.class); 048 if (!permissionManager.hasPermission(PermissionsSystemAdmin.PERMISSION_EDIT_PERMISSIONS)) { 049 // Note that the line above _asks_ about the permission and the line below 050 // _checks_ for the permission. If the line below doesn't have the permission, 051 // a JOptionPane will show an error message. 052 if (!permissionManager.checkPermission(PermissionsSystemAdmin.PERMISSION_EDIT_OWN_PASSWORD)) { 053 return; 054 } 055 } 056 new ChangePasswordDialog().setVisible(true); 057 } 058 059 @Override 060 public JmriPanel makePanel() { 061 throw new IllegalArgumentException("Should not be invoked"); 062 } 063 064}