aboutsummaryrefslogtreecommitdiff
path: root/subsonic-booter/src/main/java/net/sourceforge/subsonic/booter/mac/StatusPanel.java
diff options
context:
space:
mode:
Diffstat (limited to 'subsonic-booter/src/main/java/net/sourceforge/subsonic/booter/mac/StatusPanel.java')
-rw-r--r--subsonic-booter/src/main/java/net/sourceforge/subsonic/booter/mac/StatusPanel.java115
1 files changed, 115 insertions, 0 deletions
diff --git a/subsonic-booter/src/main/java/net/sourceforge/subsonic/booter/mac/StatusPanel.java b/subsonic-booter/src/main/java/net/sourceforge/subsonic/booter/mac/StatusPanel.java
new file mode 100644
index 00000000..f20671f8
--- /dev/null
+++ b/subsonic-booter/src/main/java/net/sourceforge/subsonic/booter/mac/StatusPanel.java
@@ -0,0 +1,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());
+ }
+} \ No newline at end of file