summaryrefslogtreecommitdiff
path: root/src/main/java/net/jesterpm/podcastuploader/ui
diff options
context:
space:
mode:
authorJesse Morgan <jesse@jesterpm.net>2017-04-26 21:39:07 -0700
committerJesse Morgan <jesse@jesterpm.net>2017-04-26 21:50:18 -0700
commitc5df48d96b5e48845a85f1495d0ed5ab1d1cc37b (patch)
tree034a6d80225bd072b4b95b85da9fe13a78ff67ea /src/main/java/net/jesterpm/podcastuploader/ui
parent46c08b8b1ee91298f42775073873e4ea49e33832 (diff)
Resurrecting my abandoned podcast upload tool and switching to Maven.
Diffstat (limited to 'src/main/java/net/jesterpm/podcastuploader/ui')
-rw-r--r--src/main/java/net/jesterpm/podcastuploader/ui/Action.java17
-rw-r--r--src/main/java/net/jesterpm/podcastuploader/ui/ConfigurationWindow.java157
-rw-r--r--src/main/java/net/jesterpm/podcastuploader/ui/ProgressInterface.java78
-rw-r--r--src/main/java/net/jesterpm/podcastuploader/ui/ProgressWindow.java16
4 files changed, 268 insertions, 0 deletions
diff --git a/src/main/java/net/jesterpm/podcastuploader/ui/Action.java b/src/main/java/net/jesterpm/podcastuploader/ui/Action.java
new file mode 100644
index 0000000..5ec4bde
--- /dev/null
+++ b/src/main/java/net/jesterpm/podcastuploader/ui/Action.java
@@ -0,0 +1,17 @@
+/*
+ * Copyright 2012 Jesse Morgan
+ */
+
+package net.jesterpm.podcastuploader.ui;
+
+/**
+ * Action handler for the UI.
+ *
+ * @author Jesse Morgan <jesse@jesterpm.net>
+ */
+public interface Action {
+ /**
+ * This method is called when the action is performed.
+ */
+ public void onAction();
+}
diff --git a/src/main/java/net/jesterpm/podcastuploader/ui/ConfigurationWindow.java b/src/main/java/net/jesterpm/podcastuploader/ui/ConfigurationWindow.java
new file mode 100644
index 0000000..d0dc96d
--- /dev/null
+++ b/src/main/java/net/jesterpm/podcastuploader/ui/ConfigurationWindow.java
@@ -0,0 +1,157 @@
+/*
+ * Copyright 2012 Jesse Morgan
+ */
+
+package net.jesterpm.podcastuploader.ui;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+
+import javax.swing.border.EmptyBorder;
+import javax.swing.JButton;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+
+/**
+ * UI for the configuration window.
+ *
+ * @author Jesse Morgan <jesse@jesterpm.net>
+ */
+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() {
+ super("Podcast Uploader Configuration");
+
+ JPanel panel = new JPanel();
+ panel.setBorder(new EmptyBorder(10, 10, 10, 10));
+ panel.setLayout(new GridBagLayout());
+ add(panel);
+
+ mAWSKey = new JTextField();
+ mAWSSecret = new JTextField();
+ mS3Bucket = new JTextField();
+ mMetadataServer = new JTextField();
+ mAuthorize = new JButton("Authorize App");
+ mSave = new JButton("Save");
+ mSave.setDefaultCapable(true);
+
+ GridBagConstraints labelConstraint = new GridBagConstraints();
+ GridBagConstraints fieldConstraint = new GridBagConstraints();
+
+ labelConstraint.gridx = 0;
+ labelConstraint.gridy = GridBagConstraints.RELATIVE;
+
+ fieldConstraint.gridx = 1;
+ fieldConstraint.gridy = GridBagConstraints.RELATIVE;
+ 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);
+
+ panel.add(new JLabel("AWS Secret Key:", JLabel.RIGHT), labelConstraint);
+ panel.add(mAWSSecret, fieldConstraint);
+
+ panel.add(new JLabel("S3 Bucket:", JLabel.RIGHT), labelConstraint);
+ 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;
+ buttonConstraint.anchor = GridBagConstraints.LAST_LINE_END;
+ panel.add(mSave, buttonConstraint);
+
+ pack();
+ Dimension d = getPreferredSize();
+ d.height += 20;
+ d.width += 50;
+ setMinimumSize(d);
+ }
+
+ public void setAWSKey(final String value) {
+ mAWSKey.setText(value);
+ }
+
+ public String getAWSKey() {
+ return mAWSKey.getText();
+ }
+
+ public void setAWSSecret(final String value) {
+ mAWSSecret.setText(value);
+ }
+
+ public String getAWSSecret() {
+ return mAWSSecret.getText();
+ }
+
+ public void setS3Bucket(final String value) {
+ mS3Bucket.setText(value);
+ }
+
+ public String getS3Bucket() {
+ 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();
+ }
+ });
+ }
+
+ public void addCancelAction(final Action a) {
+ addWindowListener(new WindowAdapter() {
+ public void windowClosing(final WindowEvent e) {
+ a.onAction();
+ }
+ });
+ }
+}
diff --git a/src/main/java/net/jesterpm/podcastuploader/ui/ProgressInterface.java b/src/main/java/net/jesterpm/podcastuploader/ui/ProgressInterface.java
new file mode 100644
index 0000000..3e85667
--- /dev/null
+++ b/src/main/java/net/jesterpm/podcastuploader/ui/ProgressInterface.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2012 Jesse Morgan
+ */
+
+package net.jesterpm.podcastuploader.ui;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Observer;
+import java.util.Observable;
+
+import net.jesterpm.podcastuploader.control.ObservableTask;
+
+/**
+ * ProgressInterface is an abstract based class for any interface that
+ * provides progress notification. The class tracks the progress of multiple
+ * simultaneous tasks and aggregates their progress.
+ *
+ * @author Jesse Morgan <jesse@jesterpm.net>
+ */
+public abstract class ProgressInterface implements Observer {
+ private Map<ObservableTask, Float> mProgressMap;
+
+ /**
+ * Creates a new ProgressInterface monitoring nothing.
+ */
+ public ProgressInterface() {
+ mProgressMap = new HashMap<ObservableTask, Float>();
+ }
+
+ /**
+ * Begin monitoring the given task.
+ *
+ * @param task The ObservableTask to monitor.
+ */
+ public void monitorTask(final ObservableTask task) {
+ task.addObserver(this);
+ mProgressMap.put(task, 0f);
+ setProgress(getProgress());
+ }
+
+ /**
+ * Called when the progress changes.
+ *
+ * @param progress The current percentage complete,
+ * indicated by a float ranging from 0 to 1.
+ */
+ protected abstract void setProgress(float percentComplete);
+
+ /**
+ * Called when the progress for a task changes.
+ * @param task The task that changed.
+ * @param arg Unused.
+ */
+ @Override
+ public void update(Observable task, Object arg) {
+ ObservableTask observableTask = (ObservableTask) task;
+ mProgressMap.put(observableTask, observableTask.getProgress());
+ setProgress(getProgress());
+ }
+
+ /**
+ * @return A float ranging from 0 to 1 representing the aggregate progress.
+ * If the ProgressInterface is not monitoring any tasks, this will return 0.
+ */
+ public float getProgress() {
+ if (mProgressMap.size() == 0) {
+ return 0;
+ }
+
+ float totalProgress = 0;
+ for (float taskProgress : mProgressMap.values()) {
+ totalProgress += taskProgress;
+ }
+
+ return totalProgress / mProgressMap.size();
+ }
+}
diff --git a/src/main/java/net/jesterpm/podcastuploader/ui/ProgressWindow.java b/src/main/java/net/jesterpm/podcastuploader/ui/ProgressWindow.java
new file mode 100644
index 0000000..01daa83
--- /dev/null
+++ b/src/main/java/net/jesterpm/podcastuploader/ui/ProgressWindow.java
@@ -0,0 +1,16 @@
+/*
+ * Copyright 2012 Jesse Morgan
+ */
+
+package net.jesterpm.podcastuploader.ui;
+
+/**
+ *
+ * @author Jesse Morgan <jesse@jesterpm.net>
+ */
+public class ProgressWindow extends ProgressInterface {
+ @Override
+ public void setProgress(float percentComplete) {
+
+ }
+}