summaryrefslogtreecommitdiff
path: root/src/main/java/net/jesterpm/podcastuploader/ui
diff options
context:
space:
mode:
authorJesse Morgan <jesse@jesterpm.net>2017-04-30 18:19:45 -0700
committerJesse Morgan <jesse@jesterpm.net>2017-04-30 18:19:45 -0700
commite150b8230a5490588703b3ba02f31d702bdbfccf (patch)
treec0e1bcfa49d232c16b79fcc407219cc71850d590 /src/main/java/net/jesterpm/podcastuploader/ui
parentc5df48d96b5e48845a85f1495d0ed5ab1d1cc37b (diff)
Adding metadata window.HEADmaster
Diffstat (limited to 'src/main/java/net/jesterpm/podcastuploader/ui')
-rw-r--r--src/main/java/net/jesterpm/podcastuploader/ui/Action.java5
-rw-r--r--src/main/java/net/jesterpm/podcastuploader/ui/ConfigurationWindow.java43
-rw-r--r--src/main/java/net/jesterpm/podcastuploader/ui/GUIFactory.java21
-rw-r--r--src/main/java/net/jesterpm/podcastuploader/ui/MetadataWindow.java186
-rw-r--r--src/main/java/net/jesterpm/podcastuploader/ui/UIFactory.java13
5 files changed, 224 insertions, 44 deletions
diff --git a/src/main/java/net/jesterpm/podcastuploader/ui/Action.java b/src/main/java/net/jesterpm/podcastuploader/ui/Action.java
index 5ec4bde..10ea248 100644
--- a/src/main/java/net/jesterpm/podcastuploader/ui/Action.java
+++ b/src/main/java/net/jesterpm/podcastuploader/ui/Action.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2012 Jesse Morgan
+ * Copyright 2012-2017 Jesse Morgan <jesse@jesterpm.net>
*/
package net.jesterpm.podcastuploader.ui;
@@ -9,9 +9,10 @@ package net.jesterpm.podcastuploader.ui;
*
* @author Jesse Morgan <jesse@jesterpm.net>
*/
+@FunctionalInterface
public interface Action {
/**
* This method is called when the action is performed.
*/
- public void onAction();
+ void onAction();
}
diff --git a/src/main/java/net/jesterpm/podcastuploader/ui/ConfigurationWindow.java b/src/main/java/net/jesterpm/podcastuploader/ui/ConfigurationWindow.java
index d0dc96d..dece665 100644
--- a/src/main/java/net/jesterpm/podcastuploader/ui/ConfigurationWindow.java
+++ b/src/main/java/net/jesterpm/podcastuploader/ui/ConfigurationWindow.java
@@ -28,8 +28,6 @@ public class ConfigurationWindow extends JFrame {
private final JTextField mAWSKey;
private final JTextField mAWSSecret;
private final JTextField mS3Bucket;
- private final JTextField mMetadataServer;
- private final JButton mAuthorize;
private final JButton mSave;
public ConfigurationWindow() {
@@ -43,8 +41,6 @@ public class ConfigurationWindow extends JFrame {
mAWSKey = new JTextField();
mAWSSecret = new JTextField();
mS3Bucket = new JTextField();
- mMetadataServer = new JTextField();
- mAuthorize = new JButton("Authorize App");
mSave = new JButton("Save");
mSave.setDefaultCapable(true);
@@ -59,9 +55,6 @@ public class ConfigurationWindow extends JFrame {
fieldConstraint.fill = GridBagConstraints.HORIZONTAL;
fieldConstraint.weightx = 1;
- panel.add(new JLabel("Podcast Server:", JLabel.RIGHT), labelConstraint);
- panel.add(mMetadataServer, fieldConstraint);
-
panel.add(new JLabel("AWS Access Key:", JLabel.RIGHT), labelConstraint);
panel.add(mAWSKey, fieldConstraint);
@@ -72,11 +65,6 @@ public class ConfigurationWindow extends JFrame {
panel.add(mS3Bucket, fieldConstraint);
GridBagConstraints buttonConstraint = new GridBagConstraints();
- buttonConstraint.gridy = 5;
- buttonConstraint.gridwidth = 2;
- buttonConstraint.weighty = 1;
- panel.add(mAuthorize, buttonConstraint);
-
buttonConstraint.gridx = 1;
buttonConstraint.gridy = 7;
buttonConstraint.gridwidth = 1;
@@ -114,37 +102,8 @@ public class ConfigurationWindow extends JFrame {
return mS3Bucket.getText();
}
- public void setMetadataServer(final String value) {
- mMetadataServer.setText(value);
- }
-
- public String getMetadataServer() {
- return mMetadataServer.getText();
- }
-
- public void setHasAuthKey(final boolean value) {
- if (value) {
- mAuthorize.setText("Reauthorize App");
-
- } else {
- mAuthorize.setText("Authorize App");
- }
- }
-
- public void addAuthorizeAction(final Action a) {
- mAuthorize.addActionListener(new ActionListener() {
- public void actionPerformed(final ActionEvent e) {
- a.onAction();
- }
- });
- }
-
public void addSaveAction(final Action a) {
- mSave.addActionListener(new ActionListener() {
- public void actionPerformed(final ActionEvent e) {
- a.onAction();
- }
- });
+ mSave.addActionListener(e -> a.onAction());
}
public void addCancelAction(final Action a) {
diff --git a/src/main/java/net/jesterpm/podcastuploader/ui/GUIFactory.java b/src/main/java/net/jesterpm/podcastuploader/ui/GUIFactory.java
new file mode 100644
index 0000000..61562dd
--- /dev/null
+++ b/src/main/java/net/jesterpm/podcastuploader/ui/GUIFactory.java
@@ -0,0 +1,21 @@
+package net.jesterpm.podcastuploader.ui;
+
+/**
+ * Implementation of UIFactory which produces a GUI.
+ */
+public class GUIFactory implements UIFactory {
+ @Override
+ public MetadataWindow createMetadataWindow() {
+ return new MetadataWindow();
+ }
+
+ @Override
+ public ProgressWindow createProcessWindow() {
+ return new ProgressWindow();
+ }
+
+ @Override
+ public ConfigurationWindow createConfigurationWindow() {
+ return new ConfigurationWindow();
+ }
+}
diff --git a/src/main/java/net/jesterpm/podcastuploader/ui/MetadataWindow.java b/src/main/java/net/jesterpm/podcastuploader/ui/MetadataWindow.java
new file mode 100644
index 0000000..4be37f4
--- /dev/null
+++ b/src/main/java/net/jesterpm/podcastuploader/ui/MetadataWindow.java
@@ -0,0 +1,186 @@
+/*
+ * Copyright 2017 Jesse Morgan <jesse@jesterpm.net>
+ */
+
+package net.jesterpm.podcastuploader.ui;
+
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.io.File;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+
+import javax.swing.*;
+import javax.swing.border.EmptyBorder;
+import javax.swing.filechooser.FileNameExtensionFilter;
+
+/**
+ * UI for gathering podcast metadata.
+ *
+ * @author Jesse Morgan <jesse@jesterpm.net>
+ */
+public class MetadataWindow extends JFrame {
+
+ private final JTextField mDate;
+ private final JTextField mTitle;
+ private final JTextField mSeries;
+ private final JTextField mSpeaker;
+
+ private File mFile;
+ private final JTextField mFileField;
+ private final JButton mFileButton;
+
+ private final JButton mConfigButton;
+ private final JButton mUploadButton;
+
+ public MetadataWindow() {
+ super("Podcast Metadata");
+
+ JPanel panel = new JPanel();
+ panel.setBorder(new EmptyBorder(10, 10, 10, 10));
+ panel.setLayout(new GridBagLayout());
+ add(panel);
+
+ mDate = new JTextField();
+ mTitle = new JTextField();
+ mSeries = new JTextField();
+ mSpeaker = new JTextField();
+
+ mFileField = new JTextField();
+ mFileField.setEnabled(false);
+ mFileField.setColumns(40);
+
+ mFileButton = new JButton("Browse");
+ mFileButton.addActionListener(e -> chooseFile());
+
+ mConfigButton = new JButton("Configure");
+
+ mUploadButton = new JButton("Upload");
+ mUploadButton.setDefaultCapable(true);
+
+ GridBagConstraints labelConstraint = new GridBagConstraints();
+ labelConstraint.gridx = 0;
+ labelConstraint.gridy = GridBagConstraints.RELATIVE;
+
+ GridBagConstraints fieldConstraint = new GridBagConstraints();
+ fieldConstraint.gridx = 1;
+ fieldConstraint.gridy = GridBagConstraints.RELATIVE;
+ fieldConstraint.fill = GridBagConstraints.HORIZONTAL;
+ fieldConstraint.weightx = 1;
+ fieldConstraint.gridwidth = 2;
+
+ panel.add(new JLabel("Date:", JLabel.RIGHT), labelConstraint);
+ panel.add(mDate, fieldConstraint);
+
+ panel.add(new JLabel("Title:", JLabel.RIGHT), labelConstraint);
+ panel.add(mTitle, fieldConstraint);
+
+ panel.add(new JLabel("Series:", JLabel.RIGHT), labelConstraint);
+ panel.add(mSeries, fieldConstraint);
+
+ panel.add(new JLabel("Speaker:", JLabel.RIGHT), labelConstraint);
+ panel.add(mSpeaker, fieldConstraint);
+
+ panel.add(new JLabel("File:", JLabel.RIGHT), labelConstraint);
+
+ GridBagConstraints fileFieldConstraint = new GridBagConstraints();
+ fileFieldConstraint.gridx = 1;
+ fileFieldConstraint.gridy = 4;
+ fileFieldConstraint.fill = GridBagConstraints.HORIZONTAL;
+ fileFieldConstraint.weightx = 1;
+ panel.add(mFileField, fileFieldConstraint);
+
+ GridBagConstraints fileButtonConstraint = new GridBagConstraints();
+ fileButtonConstraint.gridx = 2;
+ fileButtonConstraint.gridy = 4;
+ panel.add(mFileButton, fileButtonConstraint);
+
+ GridBagConstraints buttonConstraint = new GridBagConstraints();
+ buttonConstraint.gridx = 0;
+ buttonConstraint.gridy = 7;
+ buttonConstraint.gridwidth = 1;
+ buttonConstraint.anchor = GridBagConstraints.LAST_LINE_END;
+ panel.add(mConfigButton, buttonConstraint);
+
+ buttonConstraint.gridx = 1;
+ buttonConstraint.gridwidth = 2;
+ buttonConstraint.gridy = 7;
+ buttonConstraint.anchor = GridBagConstraints.LAST_LINE_END;
+ panel.add(mUploadButton, buttonConstraint);
+
+ pack();
+ Dimension d = getPreferredSize();
+ d.height += 20;
+ d.width += 50;
+ setMinimumSize(d);
+ }
+
+ public void setDate(final LocalDate value) {
+ mDate.setText(value.format(DateTimeFormatter.ISO_DATE));
+ }
+
+ public LocalDate getDate() {
+ return LocalDate.parse(mDate.getText(), DateTimeFormatter.ISO_DATE);
+ }
+
+ public void setTitle(final String value) {
+ mTitle.setText(value);
+ }
+
+ public String getTitle() {
+ return mTitle.getText();
+ }
+
+ public void setSeries(final String value) {
+ mSeries.setText(value);
+ }
+
+ public String getSeries() {
+ return mSeries.getText();
+ }
+
+ public void setSpeaker(final String value) {
+ mSpeaker.setText(value);
+ }
+
+ public File getFile() {
+ return mFile;
+ }
+
+ public void setFile(final File value) {
+ mFile = value;
+ mSpeaker.setText(value.getAbsolutePath());
+ }
+
+ public String getSpeaker() {
+ return mSpeaker.getText();
+ }
+
+ public void addUploadAction(final Action a) {
+ mUploadButton.addActionListener(e -> a.onAction());
+ }
+
+ public void addConfigButtonAction(final Action a) {
+ mConfigButton.addActionListener(e -> a.onAction());
+ }
+
+ public void addCancelAction(final Action a) {
+ addWindowListener(new WindowAdapter() {
+ public void windowClosing(final WindowEvent e) {
+ a.onAction();
+ }
+ });
+ }
+
+ private void chooseFile() {
+ JFileChooser chooser = new JFileChooser();
+ chooser.setFileFilter(new FileNameExtensionFilter("Audio Files", "mp3", "wav"));
+ int result = chooser.showDialog(this, "Select");
+ if (result == JFileChooser.APPROVE_OPTION) {
+ setFile(chooser.getSelectedFile());
+ }
+ }
+}
diff --git a/src/main/java/net/jesterpm/podcastuploader/ui/UIFactory.java b/src/main/java/net/jesterpm/podcastuploader/ui/UIFactory.java
new file mode 100644
index 0000000..8239f85
--- /dev/null
+++ b/src/main/java/net/jesterpm/podcastuploader/ui/UIFactory.java
@@ -0,0 +1,13 @@
+package net.jesterpm.podcastuploader.ui;
+
+/**
+ * Factory which produces various views.
+ */
+public interface UIFactory {
+
+ MetadataWindow createMetadataWindow();
+
+ ProgressWindow createProcessWindow();
+
+ ConfigurationWindow createConfigurationWindow();
+}