aboutsummaryrefslogtreecommitdiff
path: root/subsonic-booter/src/main/java/net/sourceforge/subsonic/booter/agent/StatusPanel.java
blob: 91625f19c98083e7d823663f1e811056719f4293 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
package net.sourceforge.subsonic.booter.agent;

import com.jgoodies.forms.builder.DefaultFormBuilder;
import com.jgoodies.forms.factories.Borders;
import com.jgoodies.forms.factories.ButtonBarFactory;
import com.jgoodies.forms.layout.FormLayout;
import net.sourceforge.subsonic.booter.deployer.DeploymentStatus;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.DateFormat;
import java.util.Locale;

/**
 * Panel displaying the status of the Subsonic service.
 *
 * @author Sindre Mehus
 */
public class StatusPanel extends JPanel implements SubsonicListener {

    private static final DateFormat DATE_FORMAT = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM, Locale.US);

    private final SubsonicAgent subsonicAgent;

    private JTextField statusTextField;
    private JTextField startedTextField;
    private JTextField memoryTextField;
    private JTextArea errorTextField;
    private JButton startButton;
    private JButton stopButton;
    private JButton urlButton;

    public StatusPanel(SubsonicAgent subsonicAgent) {
        this.subsonicAgent = subsonicAgent;
        createComponents();
        configureComponents();
        layoutComponents();
        addBehaviour();
        subsonicAgent.addListener(this);
    }

    private void createComponents() {
        statusTextField = new JTextField();
        startedTextField = new JTextField();
        memoryTextField = new JTextField();
        errorTextField = new JTextArea(3, 24);
        startButton = new JButton("Start");
        stopButton = new JButton("Stop");
        urlButton = new JButton();
    }

    private void configureComponents() {
        statusTextField.setEditable(false);
        startedTextField.setEditable(false);
        memoryTextField.setEditable(false);
        errorTextField.setEditable(false);

        errorTextField.setLineWrap(true);
        errorTextField.setBorder(startedTextField.getBorder());

        urlButton.setBorderPainted(false);
        urlButton.setContentAreaFilled(false);
        urlButton.setForeground(Color.BLUE.darker());
        urlButton.setHorizontalAlignment(SwingConstants.LEFT);
    }

    private void layoutComponents() {
        JPanel buttons = ButtonBarFactory.buildRightAlignedBar(startButton, stopButton);

        FormLayout layout = new FormLayout("right:d, 6dlu, max(d;30dlu):grow");
        DefaultFormBuilder builder = new DefaultFormBuilder(layout, this);
        builder.append("Service status", statusTextField);
        builder.append("", buttons);
        builder.appendParagraphGapRow();
        builder.nextRow();
        builder.append("Started on", startedTextField);
        builder.append("Memory used", memoryTextField);
        builder.append("Error message", errorTextField);
        builder.append("Server address", urlButton);

        setBorder(Borders.DIALOG_BORDER);
    }

    private void addBehaviour() {
        urlButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                subsonicAgent.openBrowser();
            }
        });
        startButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                subsonicAgent.checkElevation("-start");
                subsonicAgent.startOrStopService(true);
            }
        });
        stopButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                subsonicAgent.checkElevation("-stop");
                subsonicAgent.startOrStopService(false);
            }
        });
    }

    public void notifyDeploymentStatus(DeploymentStatus status) {
        startedTextField.setText(status == null ? null : DATE_FORMAT.format(status.getStartTime()));
        memoryTextField.setText(status == null ? null : status.getMemoryUsed() + " MB");
        errorTextField.setText(status == null ? null : status.getErrorMessage());
        urlButton.setText(status == null ? null : status.getURL());
    }

    public void notifyServiceStatus(String serviceStatus) {
        statusTextField.setText(serviceStatus);
    }
}