aboutsummaryrefslogtreecommitdiff
path: root/subsonic-booter/src/main/java/net/sourceforge/subsonic/booter/agent/StatusPanel.java
diff options
context:
space:
mode:
Diffstat (limited to 'subsonic-booter/src/main/java/net/sourceforge/subsonic/booter/agent/StatusPanel.java')
-rw-r--r--subsonic-booter/src/main/java/net/sourceforge/subsonic/booter/agent/StatusPanel.java116
1 files changed, 116 insertions, 0 deletions
diff --git a/subsonic-booter/src/main/java/net/sourceforge/subsonic/booter/agent/StatusPanel.java b/subsonic-booter/src/main/java/net/sourceforge/subsonic/booter/agent/StatusPanel.java
new file mode 100644
index 00000000..91625f19
--- /dev/null
+++ b/subsonic-booter/src/main/java/net/sourceforge/subsonic/booter/agent/StatusPanel.java
@@ -0,0 +1,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);
+ }
+}