diff options
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.java | 116 |
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); + } +} |