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}