use of com.github.lgooddatepicker.components.DateTimePicker in project sldeditor by robward-scisys.
the class DateTimePanel method createUI.
/**
* Creates the UI.
*
* @param xPos the x pos
* @param indentWidth the indent width
* @param yOffset the y offset
* @param fieldPanel the field panel
*/
public void createUI(int xPos, int indentWidth, int yOffset, JPanel fieldPanel) {
if (dateTimePicker == null) {
DatePickerSettings dateModel = new DatePickerSettings();
dateModel.setAllowEmptyDates(false);
dateModel.setFormatForDatesCommonEra(DateTimeFormatter.ofPattern("dd MMM yyyy"));
TimePickerSettings timeModel = new TimePickerSettings();
timeModel.setAllowEmptyTimes(false);
timeModel.setDisplaySpinnerButtons(true);
timeModel.setDisplayToggleTimeMenuButton(false);
timeModel.setFormatForDisplayTime(PickerUtilities.createFormatterFromPatternString("HH:mm:ss.SSS", timeModel.getLocale()));
dateTimePicker = new DateTimePicker(dateModel, timeModel);
int x = xPos + indentWidth;
dateTimePicker.setBounds(x, yOffset, DATEPICKER_WIDTH, BasePanel.WIDGET_HEIGHT);
fieldPanel.add(dateTimePicker);
offsetSign = new JComboBox<>(offsetStrings);
int y = BasePanel.WIDGET_HEIGHT + yOffset;
offsetSign.setBounds(x, y, OFFSET_SIGN_WIDTH, BasePanel.WIDGET_HEIGHT);
offsetSign.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (callback != null) {
callback.dateTimeValueUpdated();
}
}
});
fieldPanel.add(offsetSign);
SpinnerNumberModel hourModel = new SpinnerNumberModel();
hourModel.setStepSize(1);
hourModel.setMinimum(0);
hourModel.setMaximum(23);
hourSpinner = new JSpinner(hourModel);
hourSpinner.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
if (callback != null) {
callback.dateTimeValueUpdated();
}
}
});
fieldPanel.add(hourSpinner);
x += OFFSET_SIGN_WIDTH + 2;
hourSpinner.setBounds(x, y, OFFSET_HOURS_WIDTH, BasePanel.WIDGET_HEIGHT);
SpinnerNumberModel secondModel = new SpinnerNumberModel();
secondModel.setStepSize(1);
secondModel.setMinimum(0);
secondModel.setMaximum(59);
minuteSpinner = new JSpinner(secondModel);
fieldPanel.add(minuteSpinner);
minuteSpinner.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
if (callback != null) {
callback.dateTimeValueUpdated();
}
}
});
x += OFFSET_HOURS_WIDTH + 2;
minuteSpinner.setBounds(x, y, OFFSET_MINUTES_WIDTH, BasePanel.WIDGET_HEIGHT);
dateTimePicker.addDateTimeChangeListener(new DateTimeChangeListener() {
@Override
public void dateOrTimeChanged(DateTimeChangeEvent event) {
if (callback != null) {
callback.dateTimeValueUpdated();
}
}
});
}
}
use of com.github.lgooddatepicker.components.DateTimePicker in project dna by leifeld.
the class DocumentEditor method createGui.
private void createGui(int numDocuments) {
String toolTipText = "<html><p width=\"500\">Overwrite the document contents and meta-data " + "by editing the fields shown in this editor dialog.</p>" + "<p width=\"500\">Note that the document text field is only editable if there are " + "no statements contained in the document.</p>" + "<p width=\"500\">In the title, author, source, section, type, notes, and text " + "fields, the following wildcards can be used (across the different fields) to " + "represent the contents of the respective field that are currently saved " + "in the database:</p>" + "<dl>" + "<dt><b>%title</b></dt><dd>Represents the current contents of the title field.</dd>" + "<dt><b>%author</b></dt><dd>Represents the current contents of the author field.</dd>" + "<dt><b>%source</b></dt><dd>Represents the current contents of the source field.</dd>" + "<dt><b>%section</b></dt><dd>Represents the current contents of the section field.</dd>" + "<dt><b>%type</b></dt><dd>Represents the current contents of the type field.</dd>" + "<dt><b>%notes</b></dt><dd>Represents the current contents of the notes field.</dd>" + "<dt><b>%text</b></dt><dd>Represents the current contents of the text field.</dd>" + "<dt><b>%day</b></dt><dd>Represents the current day (1-31) of the document.</dd>" + "<dt><b>%month</b></dt><dd>Represents the current month (1-12) of the document.</dd>" + "<dt><b>%year</b></dt><dd>Represents the current year (e.g., 2007) of the document.</dd>" + "<dt><b>%hour</b></dt><dd>Represents the current hour (0-23) of the document.</dd>" + "<dt><b>%minute</b></dt><dd>Represents the current minute (0-59) of the document.</dd>" + "</dl>" + "<p width=\"500\">For example, you can combine title and date like this: " + "%title (%day.%month.%year).</p>" + "<p width=\"500\">Note that the date or time fields may show as empty when multiple " + "documents are edited simultaneously. This just means the original date or time will be " + "kept when saving unless edited. It is possible to edit only the date or only the time " + "if necessary while keeping the other field empty.</p></html>";
this.setModal(true);
if (numDocuments == 0) {
this.setTitle("Add new document...");
} else {
String s = " document...";
if (numDocuments > 1) {
s = " documents...";
}
this.setTitle("Edit " + numDocuments + s);
}
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
ImageIcon tableAddIcon = new ImageIcon(getClass().getResource("/icons/tabler-icon-file-plus.png"));
this.setIconImage(tableAddIcon.getImage());
this.setLayout(new FlowLayout(FlowLayout.LEFT));
textArea = new JXTextArea("paste the contents of the document here using Ctrl-V...");
textArea.setLineWrap(true);
textArea.setWrapStyleWord(true);
textScroller = new JScrollPane(textArea);
textScroller.setPreferredSize(new Dimension(700, 360));
textScroller.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
textScroller.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
if (numDocuments > 0) {
textScroller.setToolTipText(toolTipText);
}
JPanel fieldsPanel = new JPanel(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.fill = GridBagConstraints.HORIZONTAL;
// first column: labels
gbc.insets = new Insets(3, 0, 3, 7);
gbc.gridy = 0;
gbc.gridx = 0;
JLabel titleLabel = new JLabel("title", JLabel.RIGHT);
if (numDocuments > 0) {
titleLabel.setToolTipText(toolTipText);
}
fieldsPanel.add(titleLabel, gbc);
gbc.gridy = 1;
gbc.gridx = 0;
JLabel dateLabel = new JLabel("date", JLabel.RIGHT);
if (numDocuments > 0) {
dateLabel.setToolTipText(toolTipText);
}
fieldsPanel.add(dateLabel, gbc);
gbc.gridy = 2;
gbc.gridx = 0;
JLabel coderLabel = new JLabel("coder", JLabel.RIGHT);
fieldsPanel.add(coderLabel, gbc);
gbc.gridy = 3;
gbc.gridx = 0;
JLabel authorLabel = new JLabel("author", JLabel.RIGHT);
if (numDocuments > 0) {
authorLabel.setToolTipText(toolTipText);
}
fieldsPanel.add(authorLabel, gbc);
gbc.gridy = 4;
gbc.gridx = 0;
JLabel sourceLabel = new JLabel("source", JLabel.RIGHT);
if (numDocuments > 0) {
sourceLabel.setToolTipText(toolTipText);
}
fieldsPanel.add(sourceLabel, gbc);
gbc.gridy = 5;
gbc.gridx = 0;
JLabel sectionLabel = new JLabel("section", JLabel.RIGHT);
if (numDocuments > 0) {
sectionLabel.setToolTipText(toolTipText);
}
fieldsPanel.add(sectionLabel, gbc);
gbc.gridy = 6;
gbc.gridx = 0;
JLabel typeLabel = new JLabel("type", JLabel.RIGHT);
if (numDocuments > 0) {
typeLabel.setToolTipText(toolTipText);
}
fieldsPanel.add(typeLabel, gbc);
gbc.gridy = 7;
gbc.gridx = 0;
gbc.anchor = GridBagConstraints.NORTH;
JLabel notesLabel = new JLabel("notes", JLabel.RIGHT);
if (numDocuments > 0) {
notesLabel.setToolTipText(toolTipText);
}
fieldsPanel.add(notesLabel, gbc);
gbc.gridy = 8;
gbc.gridx = 0;
JLabel textLabel = new JLabel("text", JLabel.RIGHT);
if (numDocuments > 0) {
textLabel.setToolTipText(toolTipText);
}
fieldsPanel.add(textLabel, gbc);
// second column: fields
gbc.insets = new Insets(3, 0, 3, 0);
gbc.gridy = 0;
gbc.gridx = 1;
gbc.gridwidth = 3;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.weightx = 1.0;
titleField = new JXTextField("paste the title of the document here using Ctrl-V...");
titleField.setColumns(60);
if (numDocuments > 0) {
titleField.setToolTipText(toolTipText);
}
fieldsPanel.add(titleField, gbc);
if (numDocuments < 2) {
titleField.getDocument().addDocumentListener(new DocumentListener() {
@Override
public void changedUpdate(DocumentEvent e) {
checkButton();
}
@Override
public void insertUpdate(DocumentEvent e) {
checkButton();
}
@Override
public void removeUpdate(DocumentEvent e) {
checkButton();
}
public void checkButton() {
boolean problem = false;
if (titleField.getText().equals("")) {
problem = true;
}
if (problem == true) {
okButton.setEnabled(false);
} else {
okButton.setEnabled(true);
}
}
});
}
gbc.gridy = 1;
gbc.gridx = 1;
gbc.fill = GridBagConstraints.NONE;
gbc.anchor = GridBagConstraints.WEST;
DatePickerSettings dateSettings = new DatePickerSettings();
dateSettings.setFormatForDatesCommonEra("dd MM yyyy");
dateSettings.setFormatForDatesBeforeCommonEra("dd MM uuuu");
TimePickerSettings timeSettings = new TimePickerSettings();
timeSettings.setFormatForDisplayTime("HH:mm:ss");
timeSettings.setFormatForMenuTimes("HH:mm:ss");
dateTimePicker = new DateTimePicker(dateSettings, timeSettings);
dateTimePicker.getDatePicker().setDateToToday();
dateTimePicker.getTimePicker().setTime(LocalTime.MIDNIGHT);
ImageIcon dateIcon = new ImageIcon(new ImageIcon(getClass().getResource("/icons/tabler-icon-calendar-event.png")).getImage().getScaledInstance(16, 16, Image.SCALE_SMOOTH));
JButton dateButton = dateTimePicker.getDatePicker().getComponentToggleCalendarButton();
dateButton.setText("");
dateButton.setIcon(dateIcon);
ImageIcon timeIcon = new ImageIcon(new ImageIcon(getClass().getResource("/icons/tabler-icon-clock.png")).getImage().getScaledInstance(16, 16, Image.SCALE_SMOOTH));
JButton timeButton = dateTimePicker.getTimePicker().getComponentToggleTimeMenuButton();
timeButton.setText("");
timeButton.setIcon(timeIcon);
if (numDocuments > 0) {
dateTimePicker.setToolTipText(toolTipText);
dateButton.setToolTipText(toolTipText);
timeButton.setToolTipText(toolTipText);
}
fieldsPanel.add(dateTimePicker, gbc);
gbc.gridy = 2;
gbc.gridx = 1;
gbc.fill = GridBagConstraints.HORIZONTAL;
if (Dna.sql.getActiveCoder().isPermissionEditOthersDocuments()) {
// create list of eligible coders
List<Coder> eligibleCoders = Dna.sql.getCoders().stream().filter(e -> e.getId() == Dna.sql.getActiveCoder().getId() || (e.getId() != Dna.sql.getActiveCoder().getId() && Dna.sql.getActiveCoder().isPermissionEditOthersDocuments(e.getId()))).sorted().collect(Collectors.toList());
if (eligibleCoders.size() == 1) {
// only one eligible coder (must be the active coder); create coder badge panel instead of combo box
this.cbp = new CoderBadgePanel(eligibleCoders.get(0));
fieldsPanel.add(this.cbp, gbc);
} else {
// check if there is only a single coder across the documents and add a fake coder for multiple coders coder varies across documents
boolean oneCoder = (numDocuments == 0 || documents.stream().mapToInt(Document::getCoder).distinct().limit(2).count() <= 1);
if (!oneCoder) {
eligibleCoders.add(0, new Coder(-1, "(keep multiple coders)", Color.BLACK));
}
// create and populate combo box with coders
ArrayList<Coder> coderArrayList = new ArrayList<Coder>(eligibleCoders);
this.coderComboBox = new JComboBox<Coder>();
CoderComboBoxModel comboBoxModel = new CoderComboBoxModel(coderArrayList);
this.coderComboBox.setModel(comboBoxModel);
this.coderComboBox.setRenderer(new CoderComboBoxRenderer(18, 0, 97));
// select the right coder and add combo box to panel
if (numDocuments == 0) {
this.coderComboBox.setSelectedIndex(IntStream.range(0, eligibleCoders.size()).filter(i -> Dna.sql.getActiveCoder().getId() == eligibleCoders.get(i).getId()).findFirst().getAsInt());
} else if (oneCoder) {
this.coderComboBox.setSelectedIndex(IntStream.range(0, eligibleCoders.size()).filter(i -> documents.get(0).getCoder() == eligibleCoders.get(i).getId()).findFirst().getAsInt());
} else {
this.coderComboBox.setSelectedIndex(0);
}
fieldsPanel.add(this.coderComboBox, gbc);
}
} else {
// no permission to add other coders' documents; create coder badge panel
this.cbp = new CoderBadgePanel(Dna.sql.getActiveCoder());
fieldsPanel.add(this.cbp, gbc);
}
gbc.gridy = 3;
gbc.gridx = 1;
authorBox = new JXComboBox();
authorBox.setEditable(true);
AutoCompleteDecorator.decorate(authorBox);
if (numDocuments > 0) {
authorBox.setToolTipText(toolTipText);
}
authorBox.setRenderer(new ComboBoxRenderer());
fieldsPanel.add(authorBox, gbc);
gbc.gridy = 4;
gbc.gridx = 1;
sourceBox = new JXComboBox();
sourceBox.setEditable(true);
sourceBox.setSelectedItem("");
AutoCompleteDecorator.decorate(sourceBox);
if (numDocuments > 0) {
sourceBox.setToolTipText(toolTipText);
}
sourceBox.setRenderer(new ComboBoxRenderer());
fieldsPanel.add(sourceBox, gbc);
gbc.gridy = 5;
gbc.gridx = 1;
sectionBox = new JXComboBox();
sectionBox.setEditable(true);
sectionBox.setSelectedItem("");
AutoCompleteDecorator.decorate(sectionBox);
if (numDocuments > 0) {
sectionBox.setToolTipText(toolTipText);
}
sectionBox.setRenderer(new ComboBoxRenderer());
fieldsPanel.add(sectionBox, gbc);
gbc.gridy = 6;
gbc.gridx = 1;
typeBox = new JXComboBox();
typeBox.setEditable(true);
typeBox.setSelectedItem("");
AutoCompleteDecorator.decorate(typeBox);
if (numDocuments > 0) {
typeBox.setToolTipText(toolTipText);
}
typeBox.setRenderer(new ComboBoxRenderer());
JDBCWorker worker = new JDBCWorker(numDocuments == 0);
worker.execute();
fieldsPanel.add(typeBox, gbc);
gbc.gridy = 7;
gbc.gridx = 1;
notesArea = new JXTextArea("notes...");
notesArea.setLineWrap(true);
notesArea.setWrapStyleWord(true);
notesArea.setRows(4);
JScrollPane notesScroller = new JScrollPane(notesArea);
notesScroller.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
if (numDocuments > 0) {
notesScroller.setToolTipText(toolTipText);
}
fieldsPanel.add(notesScroller, gbc);
gbc.gridy = 8;
gbc.gridx = 1;
fieldsPanel.add(textScroller, gbc);
newArticlePanel = new JPanel(new BorderLayout());
newArticlePanel.add(fieldsPanel, BorderLayout.CENTER);
FlowLayout fl = new FlowLayout(FlowLayout.RIGHT);
JPanel buttons = new JPanel(fl);
ImageIcon cancelIcon = new ImageIcon(new ImageIcon(getClass().getResource("/icons/tabler-icon-x.png")).getImage().getScaledInstance(18, 18, Image.SCALE_SMOOTH));
JButton cancelButton = new JButton("Cancel", cancelIcon);
cancelButton.setToolTipText("close this window without making any changes");
cancelButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
dispose();
}
});
buttons.add(cancelButton);
ImageIcon okIcon = new ImageIcon(new ImageIcon(getClass().getResource("/icons/tabler-icon-check.png")).getImage().getScaledInstance(18, 18, Image.SCALE_SMOOTH));
String okString = "Add";
if (numDocuments > 0) {
okString = "Update";
}
okButton = new JButton(okString, okIcon);
if (numDocuments == 0) {
okButton.setToolTipText("insert a new article based on the information you entered in this window");
okButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int coder = 1;
if (DocumentEditor.this.cbp != null) {
coder = cbp.getCoder().getId();
} else {
coder = ((Coder) coderComboBox.getSelectedItem()).getId();
}
String text = textArea.getText();
String title = titleField.getText().substring(0, Math.min(190, titleField.getText().length()));
LocalDateTime dateTime = dateTimePicker.getDateTimeStrict();
String author = ((String) authorBox.getModel().getSelectedItem()).substring(0, Math.min(190, ((String) authorBox.getModel().getSelectedItem()).length()));
String source = ((String) sourceBox.getModel().getSelectedItem()).substring(0, Math.min(190, ((String) sourceBox.getModel().getSelectedItem()).length()));
String section = ((String) sectionBox.getModel().getSelectedItem()).substring(0, Math.min(190, ((String) sectionBox.getModel().getSelectedItem()).length()));
String notes = notesArea.getText();
String type = ((String) typeBox.getModel().getSelectedItem()).substring(0, Math.min(190, ((String) typeBox.getModel().getSelectedItem()).length()));
ArrayList<Document> al = new ArrayList<Document>();
Document d = new Document(-1, coder, title, text, author, source, section, type, notes, dateTime, new ArrayList<Statement>());
al.add(d);
documents = al;
documentIds = Dna.sql.addDocuments(documents);
changesApplied = true;
LogEvent l = new LogEvent(Logger.MESSAGE, "[GUI] A new document was added to the database.", "A new document was manually added to the database by clicking on the Add button in a New Document dialog window.");
Dna.logger.log(l);
dispose();
}
});
okButton.setEnabled(false);
} else {
okButton.setToolTipText("save updated document data into the database");
okButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int coder = 1;
if (DocumentEditor.this.cbp != null) {
coder = cbp.getCoder().getId();
} else {
// can be -1 for keeping existing coders; needs to be taken care of in the Sql.updateDocuments method
coder = ((Coder) coderComboBox.getSelectedItem()).getId();
}
String message = "Are you sure you want to recode " + documentIds.length + " documents and save the changes to the database?";
int dialog = JOptionPane.showConfirmDialog(DocumentEditor.this, message, "Confirmation required", JOptionPane.YES_NO_OPTION);
if (dialog == 0) {
LocalDate ld = dateTimePicker.getDatePicker().getDate();
LocalTime lt = dateTimePicker.getTimePicker().getTime();
Dna.sql.updateDocuments(documentIds, coder, titleField.getText(), textArea.getText(), (String) authorBox.getSelectedItem(), (String) sourceBox.getSelectedItem(), (String) sectionBox.getSelectedItem(), (String) typeBox.getSelectedItem(), notesArea.getText(), ld, lt);
changesApplied = true;
LogEvent l = new LogEvent(Logger.MESSAGE, "[GUI] " + documentIds.length + " documents were updated in the database.", "Using a Document Editor dialog window, the meta-data of " + documentIds.length + " documents were updated in the database.");
Dna.logger.log(l);
}
dispose();
}
});
}
buttons.add(okButton);
newArticlePanel.add(buttons, BorderLayout.SOUTH);
// add contents for editing if this is not a new document
if (numDocuments > 0) {
String contentTitle = documents.get(0).getTitle();
titleField.setText(contentTitle);
if (numDocuments > 1) {
for (int i = 0; i < documents.size(); i++) {
if (!documents.get(i).getTitle().equals(contentTitle)) {
titleField.setText("%title");
titleField.setPrompt("(Overwrite all titles at once by replacing this text.)");
break;
}
}
}
String contentText = documents.get(0).getText();
if (Dna.sql.documentsContainStatements(documentIds) == true) {
textArea.setEditable(false);
}
if (numDocuments > 1) {
for (int i = 0; i < documents.size(); i++) {
if (!documents.get(i).getText().equals(contentText)) {
textArea.setText("%text");
textArea.setPrompt("(Overwrite all texts at once by replacing this text.)");
break;
}
}
}
if (textArea.getText().equals("")) {
textArea.setText(contentText);
}
String contentNotes = documents.get(0).getNotes();
notesArea.setText(contentNotes);
if (numDocuments > 1) {
for (int i = 0; i < documents.size(); i++) {
if (!documents.get(i).getNotes().equals(contentNotes)) {
notesArea.setText("%notes");
notesArea.setPrompt("(Overwrite all notes at once by replacing this text.)");
break;
}
}
}
String contentAuthor = documents.get(0).getAuthor();
authorBox.setSelectedItem(contentAuthor);
if (numDocuments > 1) {
for (int i = 0; i < documents.size(); i++) {
if (!documents.get(i).getAuthor().equals(contentAuthor)) {
authorBox.setSelectedItem("%author");
break;
}
}
}
String contentSource = documents.get(0).getSource();
sourceBox.setSelectedItem(contentSource);
if (numDocuments > 1) {
for (int i = 0; i < documents.size(); i++) {
if (!documents.get(i).getSource().equals(contentSource)) {
sourceBox.setSelectedItem("%source");
break;
}
}
}
String contentSection = documents.get(0).getSection();
sectionBox.setSelectedItem(contentSection);
if (numDocuments > 1) {
for (int i = 0; i < documents.size(); i++) {
if (!documents.get(i).getSection().equals(contentSection)) {
sectionBox.setSelectedItem("%section");
break;
}
}
}
String contentType = documents.get(0).getType();
typeBox.setSelectedItem(contentType);
if (numDocuments > 1) {
for (int i = 0; i < documents.size(); i++) {
if (!documents.get(i).getType().equals(contentType)) {
typeBox.setSelectedItem("%type");
break;
}
}
}
LocalDateTime contentDateTime = documents.get(0).getDateTime();
dateTimePicker.setDateTimeStrict(contentDateTime);
if (numDocuments > 1) {
for (int i = 0; i < documents.size(); i++) {
if (!documents.get(i).getDateTime().equals(contentDateTime)) {
dateTimePicker.clear();
break;
}
}
}
}
this.add(newArticlePanel);
this.pack();
this.setLocationRelativeTo(null);
this.setVisible(true);
}
use of com.github.lgooddatepicker.components.DateTimePicker in project EmailDatasetBrowser by ArchitecturalKnowledgeAnalysis.
the class DownloadEmailsAction method actionPerformed.
@Override
public void actionPerformed(ActionEvent e) {
JDialog dialog = new JDialog(owner, "Download ", Dialog.ModalityType.APPLICATION_MODAL);
JPanel p = new JPanel(new BorderLayout());
JTextField domainField = new JTextField(0);
JTextField listField = new JTextField(0);
var timeSettings = new TimePickerSettings();
timeSettings.setAllowEmptyTimes(false);
timeSettings.setInitialTimeToNow();
var dateSettings = new DatePickerSettings();
dateSettings.setAllowEmptyDates(false);
DateTimePicker startPicker = new DateTimePicker(dateSettings.copySettings(), timeSettings);
startPicker.setDateTimeStrict(LocalDateTime.now().minusYears(10));
DateTimePicker endPicker = new DateTimePicker(dateSettings.copySettings(), timeSettings);
endPicker.setDateTimeStrict(LocalDateTime.now());
PathSelectField dirField = PathSelectField.directorySelectField();
JPanel inputPanel = new JPanel();
inputPanel.setLayout(new BoxLayout(inputPanel, BoxLayout.PAGE_AXIS));
inputPanel.add(new LabelledField("Domain", domainField));
inputPanel.add(new LabelledField("List", listField));
inputPanel.add(new LabelledField("Start", startPicker));
inputPanel.add(new LabelledField("End", endPicker));
inputPanel.add(dirField);
p.add(inputPanel, BorderLayout.CENTER);
JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
JButton cancelButton = new JButton("Cancel");
cancelButton.addActionListener(event -> dialog.dispose());
JButton downloadButton = new JButton("Download");
downloadButton.addActionListener(event -> {
ApacheMailingListFetcher fetcher = new ApacheMailingListFetcher();
Path outputDir = dirField.getSelectedPath();
dialog.dispose();
ProgressDialog progressDialog = new ProgressDialog(owner, "Downloading...", "Downloading emails");
progressDialog.activate();
fetcher.download(outputDir, domainField.getText(), listField.getText(), startPicker.getDateTimeStrict().atZone(ZoneId.systemDefault()), endPicker.getDateTimeStrict().atZone(ZoneId.systemDefault()), progressDialog).handle((paths, throwable) -> {
progressDialog.done();
if (throwable == null) {
JOptionPane.showMessageDialog(progressDialog, "MBox files downloaded successfully.", "Done", JOptionPane.INFORMATION_MESSAGE);
} else {
throwable.printStackTrace();
}
return null;
});
});
buttonPanel.add(downloadButton);
buttonPanel.add(cancelButton);
p.add(buttonPanel, BorderLayout.SOUTH);
dialog.setContentPane(p);
dialog.pack();
dialog.setLocationRelativeTo(owner);
dialog.setVisible(true);
}
Aggregations