blob: f20671f8010f4b535a43a0f492e0c5f43b988f36 (
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
|
package net.sourceforge.subsonic.booter.mac;
import java.awt.Color;
import java.awt.Desktop;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.URI;
import java.text.DateFormat;
import java.util.Locale;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.Timer;
import com.jgoodies.forms.builder.DefaultFormBuilder;
import com.jgoodies.forms.factories.Borders;
import com.jgoodies.forms.layout.FormLayout;
import net.sourceforge.subsonic.booter.deployer.DeploymentStatus;
import net.sourceforge.subsonic.booter.deployer.SubsonicDeployerService;
/**
* Panel displaying the status of the Subsonic service.
*
* @author Sindre Mehus
*/
public class StatusPanel extends JPanel {
private static final DateFormat DATE_FORMAT = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM, Locale.US);
private final SubsonicDeployerService deployer;
private JTextField startedTextField;
private JTextField memoryTextField;
private JTextArea errorTextField;
private JButton urlButton;
public StatusPanel(SubsonicDeployerService deployer) {
this.deployer = deployer;
createComponents();
configureComponents();
layoutComponents();
addBehaviour();
}
private void createComponents() {
startedTextField = new JTextField();
memoryTextField = new JTextField();
errorTextField = new JTextArea(3, 24);
urlButton = new JButton();
}
private void configureComponents() {
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() {
FormLayout layout = new FormLayout("right:d, 6dlu, max(d;30dlu):grow");
DefaultFormBuilder builder = new DefaultFormBuilder(layout, this);
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) {
openBrowser();
}
});
Timer timer = new Timer(3000, new ActionListener() {
public void actionPerformed(ActionEvent e) {
updateStatus(deployer.getDeploymentInfo());
}
});
updateStatus(deployer.getDeploymentInfo());
timer.start();
}
private void openBrowser() {
String url = urlButton.getText();
if (url == null) {
return;
}
try {
Desktop.getDesktop().browse(new URI(url));
} catch (Throwable x) {
x.printStackTrace();
}
}
private void updateStatus(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());
}
}
|