summaryrefslogtreecommitdiffstats
path: root/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/ExpiryDateChooser.java
blob: a4810d245d0114a0d8a7adc0ef7c47964d56cd0b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
package org.openslx.dozmod.gui.helper;

import java.awt.Component;
import java.util.Calendar;
import java.util.Date;

import javax.swing.Box;
import javax.swing.DefaultBoundedRangeModel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

import org.apache.log4j.Logger;
import org.openslx.dozmod.gui.control.QLabel;
import org.openslx.dozmod.thrift.Session;
import org.openslx.dozmod.util.FormatHelper;

public class ExpiryDateChooser {

	private static final Logger LOGGER = Logger.getLogger(ExpiryDateChooser.class);

	public final static int DEFAULT_EXTENSION_DURATION = 14;

	private final static JPanel pane = new JPanel();
	private final static GridManager grdPane = new GridManager(pane, 3, true);
	private final static JSlider sldDaysToExtend = new JSlider(JSlider.HORIZONTAL);
	private final static QLabel lblNewDate = new QLabel();
	private final static QLabel lblNewDateLabel = new QLabel();
	private final static String txtNewDateLevel = "Neues Ablaufdatum: ";
	static {
		grdPane.add(new QLabel("Geben Sie ein um wieviele Tage diese Version(en) verlängert werden soll:"), 3)
				.fill(true, true)
				.expand(true, true);
		grdPane.nextRow();

		sldDaysToExtend.setModel(new DefaultBoundedRangeModel(DEFAULT_EXTENSION_DURATION, 0, 1,
				Session.getSatelliteConfig().maxImageValidityDays));
		grdPane.add(sldDaysToExtend, 3).fill(true, false).expand(true, false);
		grdPane.nextRow();

		grdPane.add(lblNewDateLabel);
		grdPane.add(Box.createGlue()).fill(true, false).expand(true, false);
		grdPane.add(lblNewDate).fill(true, true).expand(true, true);
		grdPane.finish(true);
	}

	/**
	 * Helper to ask the user for the number of days to extend a date with. If
	 * startingDate is given, it will preview the starting date + selected
	 * number of days. If startingDate is null, no preview will be done.
	 * Returns the numbers of days selected.
	 * 
	 * @param parent component to center the dialog on.
	 * @param starting date to add the user selected duration on to. Only needed
	 *            for live preview of the future date.
	 * @return the number of days the user selected.
	 */
	public static int askFutureExpiryDate(final Component parent, final Date startingDate) {
		final Calendar startingDayMidnight = Calendar.getInstance();
		if (startingDate != null) {
			startingDayMidnight.setTime(startingDate);
			startingDayMidnight.set(Calendar.HOUR_OF_DAY, 23);
			startingDayMidnight.set(Calendar.MINUTE, 59);
			startingDayMidnight.set(Calendar.SECOND, 59);
			lblNewDate.setText(FormatHelper.longDate(
					DateTimeHelper.addDaysTo(startingDayMidnight.getTime(), DEFAULT_EXTENSION_DURATION)));
			lblNewDateLabel.setText(txtNewDateLevel);
		}
		sldDaysToExtend.setValue(DEFAULT_EXTENSION_DURATION);
		sldDaysToExtend.addChangeListener(new ChangeListener() {
			@Override
			public void stateChanged(ChangeEvent e) {
				if (startingDate != null) {
					Date newExpiryDate = DateTimeHelper.addDaysTo(startingDayMidnight.getTime(),
							sldDaysToExtend.getValue());
					lblNewDate.setText(FormatHelper.longDate(newExpiryDate));
				}
			}
		});

		int ret = JOptionPane.showConfirmDialog(parent, pane, "Ablaufdatum verlängern",
				JOptionPane.OK_CANCEL_OPTION);
		if (ret != 0) {
			LOGGER.info("Canceled by user.");
			return -1;
		}
		if (sldDaysToExtend.getValue() <= 0
				|| sldDaysToExtend.getValue() > Session.getSatelliteConfig().maxImageValidityDays) {
			LOGGER.error("Invalid date returned after asking user extension duration: "
					+ sldDaysToExtend.getValue());
			return -1;
		}
		return sldDaysToExtend.getValue();
	}
}