diff options
author | Jesse Morgan <jesse@jesterpm.net> | 2017-04-26 21:39:07 -0700 |
---|---|---|
committer | Jesse Morgan <jesse@jesterpm.net> | 2017-04-26 21:50:18 -0700 |
commit | c5df48d96b5e48845a85f1495d0ed5ab1d1cc37b (patch) | |
tree | 034a6d80225bd072b4b95b85da9fe13a78ff67ea /src/main/java/net/jesterpm/podcastuploader/ui | |
parent | 46c08b8b1ee91298f42775073873e4ea49e33832 (diff) |
Resurrecting my abandoned podcast upload tool and switching to Maven.
Diffstat (limited to 'src/main/java/net/jesterpm/podcastuploader/ui')
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) { + + } +} |