From e150b8230a5490588703b3ba02f31d702bdbfccf Mon Sep 17 00:00:00 2001 From: Jesse Morgan Date: Sun, 30 Apr 2017 18:19:45 -0700 Subject: Adding metadata window. --- .../net/jesterpm/podcastuploader/ui/Action.java | 5 +- .../podcastuploader/ui/ConfigurationWindow.java | 43 +---- .../jesterpm/podcastuploader/ui/GUIFactory.java | 21 +++ .../podcastuploader/ui/MetadataWindow.java | 186 +++++++++++++++++++++ .../net/jesterpm/podcastuploader/ui/UIFactory.java | 13 ++ 5 files changed, 224 insertions(+), 44 deletions(-) create mode 100644 src/main/java/net/jesterpm/podcastuploader/ui/GUIFactory.java create mode 100644 src/main/java/net/jesterpm/podcastuploader/ui/MetadataWindow.java create mode 100644 src/main/java/net/jesterpm/podcastuploader/ui/UIFactory.java (limited to 'src/main/java/net/jesterpm/podcastuploader/ui') 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 */ package net.jesterpm.podcastuploader.ui; @@ -9,9 +9,10 @@ package net.jesterpm.podcastuploader.ui; * * @author Jesse Morgan */ +@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 + */ + +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 + */ +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(); +} -- cgit v1.2.3