1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package de.aikiit.fotorenamer.gui;
17
18 import de.aikiit.fotorenamer.exception.InvalidDirectoryException;
19 import de.aikiit.fotorenamer.exception.NoFilesFoundException;
20 import de.aikiit.fotorenamer.image.CreationDateFromExifImageRenamer;
21 import de.aikiit.fotorenamer.image.RemoveExifPrefixRenamer;
22 import de.aikiit.fotorenamer.util.ComponentGaugeUtil;
23 import de.aikiit.fotorenamer.util.Version;
24 import org.apache.logging.log4j.LogManager;
25 import org.apache.logging.log4j.Logger;
26
27 import javax.swing.*;
28 import java.awt.*;
29 import java.awt.event.ActionEvent;
30 import java.awt.event.ActionListener;
31 import java.io.File;
32 import java.text.SimpleDateFormat;
33 import java.util.Date;
34
35 import static de.aikiit.fotorenamer.util.LocalizationHelper.getBundleString;
36 import static de.aikiit.fotorenamer.util.LocalizationHelper.getParameterizedBundleString;
37
38
39
40
41
42
43
44
45 public final class MainUIWindow extends JFrame implements ActionListener {
46
47
48
49 private static final Logger LOG =
50 LogManager.getLogger(MainUIWindow.class);
51
52
53
54
55 private static final String VERSION = getParameterizedBundleString("fotorenamer.ui.main.version",
56 new SimpleDateFormat(getBundleString("fotorenamer.datepattern")).
57 format(new Date(Long.parseLong(
58 Version.TIMESTAMP))),
59 Version.VERSION,
60 Version.TIMESTAMP
61 );
62
63
64
65 private static final String IMAGE_LOCATION =
66 File.separator + "image" + File.separator + "miniCamera.png";
67
68
69
70
71 private static final HelpWindow helpWindow = new HelpWindow();
72
73
74
75 private JButton helpButton = null;
76
77
78
79 private JButton goButton = null;
80
81
82
83 private JButton endButton = null;
84
85
86
87 private JButton infoButton = null;
88
89
90
91 private JButton revertButton = null;
92
93
94
95 private ImageDirectorySelector imageDirectorySelector = null;
96
97 private MainUIWindow() {
98 SwingUtilities.invokeLater(this::init);
99 }
100
101
102
103
104 public static void build() {
105 new MainUIWindow();
106 }
107
108
109
110
111 private void init() {
112 String os = "[" + System.getProperty("os.name");
113 os += " " + System.getProperty("os.version");
114 os += " " + System.getProperty("os.arch") + "]";
115
116 this.setTitle(getParameterizedBundleString("fotorenamer.ui.main.title", os));
117 this.getContentPane().setLayout(new BorderLayout());
118 this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
119
120
121 JPanel verzeichnis = new JPanel(new BorderLayout());
122 this.imageDirectorySelector = new ImageDirectorySelector(
123 ComponentGaugeUtil.createImageIcon(IMAGE_LOCATION));
124 verzeichnis.add(imageDirectorySelector);
125
126
127 JPanel knoepfe = new JPanel(new FlowLayout());
128 this.helpButton = new JButton(getBundleString("fotorenamer.ui.main.menu.help"));
129 this.helpButton.addActionListener(this);
130 this.helpButton.setMnemonic(getBundleString("fotorenamer.ui.main.menu.help.mnemonic").charAt(0));
131 knoepfe.add(this.helpButton);
132
133
134 this.infoButton = new JButton(getBundleString("fotorenamer.ui.main.menu.info"));
135 this.infoButton.addActionListener(this);
136 this.infoButton.setMnemonic(getBundleString("fotorenamer.ui.main.menu.info.mnemonic").charAt(0));
137 knoepfe.add(this.infoButton);
138
139
140 this.endButton = new JButton(getBundleString("fotorenamer.ui.main.menu.end"));
141 this.endButton.addActionListener(this);
142 this.endButton.setMnemonic(getBundleString("fotorenamer.ui.main.menu.end.mnemonic").charAt(0));
143 knoepfe.add(this.endButton);
144
145
146 this.goButton = new JButton(getBundleString("fotorenamer.ui.main.menu.start"));
147 this.goButton.addActionListener(this);
148 this.goButton.setMnemonic(getBundleString("fotorenamer.ui.main.menu.start.mnemonic").charAt(0));
149 knoepfe.add(this.goButton);
150
151
152 this.revertButton = new JButton(getBundleString("fotorenamer.ui.main.menu.revert"));
153 this.revertButton.addActionListener(this);
154 this.revertButton.setMnemonic(getBundleString("fotorenamer.ui.main.menu.revert.mnemonic").charAt(0));
155 knoepfe.add(this.revertButton);
156
157 this.getContentPane().add(verzeichnis, BorderLayout.NORTH);
158 this.getContentPane().add(knoepfe, BorderLayout.CENTER);
159 this.pack();
160 ComponentGaugeUtil.makeCentered(this);
161 this.setVisible(true);
162 }
163
164
165
166
167
168
169 public void actionPerformed(final ActionEvent event) {
170 final SwingWorker<Void, Void> worker;
171
172
173 if (event.getSource() == this.endButton) {
174 LOG.info("Bye Bye :-)");
175 System.exit(0);
176 } else if (event.getSource() == this.helpButton) {
177 LOG.info("Displaying help window.");
178 showHelpWindow();
179 } else if (event.getSource() == this.infoButton) {
180
181 JOptionPane.showMessageDialog(null,
182 getParameterizedBundleString("fotorenamer.ui.about", VERSION, new SimpleDateFormat("yyyy").
183 format(new Date(
184 Long.parseLong(
185 Version.TIMESTAMP)))),
186 getBundleString("fotorenamer.ui.main.version.title"),
187 JOptionPane.INFORMATION_MESSAGE);
188 } else if (event.getSource() == this.revertButton || event.getSource()
189 == this.goButton) {
190 worker = new SwingWorker<Void, Void>() {
191 @Override
192 protected Void doInBackground() {
193 if (imageDirectorySelector.isWaiting()) {
194 JOptionPane.showMessageDialog(null,
195 getBundleString("fotorenamer.ui.error.nodirectory"),
196 getBundleString("fotorenamer.ui.error.nodirectory.title"),
197 JOptionPane.ERROR_MESSAGE);
198 return null;
199 }
200
201
202 try {
203 if (event.getSource() == goButton) {
204 goButton.setEnabled(false);
205 goButton.setText(getBundleString("fotorenamer.ui.main.progress"));
206 CreationDateFromExifImageRenamer renamer =
207 new CreationDateFromExifImageRenamer(
208 imageDirectorySelector.getSelectedDirectory()
209 );
210 new Thread(renamer).start();
211 } else {
212 revertButton.setEnabled(false);
213 revertButton.setText(getBundleString("fotorenamer.ui.main.progress"));
214 new RemoveExifPrefixRenamer(
215 imageDirectorySelector.getSelectedDirectory());
216 }
217 } catch (InvalidDirectoryException uv) {
218 LOG.info("Invalid directory selected: " + uv.getMessage());
219 JOptionPane.showMessageDialog(null,
220 getParameterizedBundleString("fotorenamer.ui.error.invaliddirectory", uv.getMessage()),
221 getBundleString("fotorenamer.ui.error.invaliddirectory.title"),
222 JOptionPane.ERROR_MESSAGE);
223 } catch (NoFilesFoundException kde) {
224 LOG.info("No files found in " + kde.getMessage());
225 JOptionPane.showMessageDialog(null,
226 getParameterizedBundleString("fotorenamer.ui.error.nofiles", kde.getMessage()),
227 getBundleString("fotorenamer.ui.error.nofiles.title"),
228 JOptionPane.ERROR_MESSAGE);
229 }
230 return null;
231 }
232
233 @Override
234 protected void done() {
235 LOG.debug("Finished working, will reset UI.");
236
237 goButton.setEnabled(true);
238 goButton.setText(getBundleString("fotorenamer.ui.main.menu.start"));
239 revertButton.setEnabled(true);
240 revertButton.setText(getBundleString("fotorenamer.ui.main.menu.revert"));
241 }
242 };
243
244 worker.execute();
245 }
246 }
247
248
249
250
251
252
253 private static void showHelpWindow() {
254 helpWindow.setVisible(true);
255 }
256 }