school/cs240/record-indexer/src/client/components/downloadModal/DownloadModal.java

157 lines
4.7 KiB
Java

package client.components.downloadModal;
import client.communication.Communicator;
import client.communication.errors.RemoteServerErrorException;
import client.communication.errors.UnauthorizedAccessException;
import client.persistence.ImageState;
import shared.communication.common.Project_Res;
import shared.communication.params.Projects_Param;
import shared.communication.params.SampleImage_Param;
import shared.communication.responses.Projects_Res;
import shared.communication.responses.SampleImage_Res;
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
import java.util.*;
import java.util.List;
public class DownloadModal extends JDialog {
private ImageState imageState;
private Communicator communicator;
private List<Project_Res> projects;
private JComboBox batchSelect;
public DownloadModal(ImageState imageState, Communicator communicator) {
this.imageState = imageState;
this.communicator = communicator;
setupView();
}
private void setupView() {
this.setModalityType(Dialog.ModalityType.DOCUMENT_MODAL);
this.setTitle("Download Image");
this.setSize(350, 100);
this.setResizable(false);
this.setLocationRelativeTo(null);
this.setLayout(new FlowLayout());
JLabel label = new JLabel("Project: ");
this.add(label);
projects = getProjects().getProjectsList();
List<String> values = getProjectNames();
batchSelect = new JComboBox(values.toArray());
this.add(batchSelect);
JButton sampleImageButton = new JButton("Sample Image?");
sampleImageButton.addActionListener(getSampleImageListener);
this.add(sampleImageButton);
JButton cancelButton = new JButton("Cancel");
cancelButton.addActionListener(closeListener);
this.add(cancelButton);
JButton downloadButton = new JButton("Download");
downloadButton.addActionListener(downloadListener);
this.add(downloadButton);
}
private Projects_Res getProjects() {
Projects_Param param = new Projects_Param();
param.setUsername(imageState.getUsername());
param.setPassword(imageState.getPassword());
try {
return communicator.getProjects(param);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
private SampleImage_Res getSampleImage(int projectId) {
SampleImage_Param param = new SampleImage_Param();
param.setUsername(imageState.getUsername());
param.setPassword(imageState.getPassword());
param.setProjectId(projectId);
try {
return communicator.getSampleImage(param);
} catch (Exception e) {
}
return null;
}
private ActionListener getSampleImageListener = new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
String projectTitle = (String)batchSelect.getSelectedItem();
int projectId = getProjectIdForName(projectTitle);
SampleImage_Res res = getSampleImage(projectId);
String fullPath = communicator.getServerPath() + res.getUrl();
SampleImageModal sampleImageModal = new SampleImageModal(fullPath);
sampleImageModal.setVisible(true);
}
};
private ActionListener closeListener = new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
setVisible(false);
dispatchEvent(new WindowEvent(DownloadModal.this, WindowEvent.WINDOW_CLOSING));
}
};
private ActionListener downloadListener = new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
String projectTitle = (String)batchSelect.getSelectedItem();
int projectId = getProjectIdForName(projectTitle);
imageState.downloadProject(projectId);
setVisible(false);
dispatchEvent(new WindowEvent(DownloadModal.this, WindowEvent.WINDOW_CLOSING));
}
};
private int getProjectIdForName(String title) {
for(Project_Res project : projects) {
if(title.equals(project.getTitle())) {
return project.getId();
}
}
return -1;
}
private List<String> getProjectNames() {
ArrayList<String> titles = new ArrayList<>();
for(Project_Res project : projects) {
titles.add(project.getTitle());
}
return titles;
}
}