1 package osm.surveyor.matchtime.gui;
3 import java.awt.Window;
4 import java.awt.event.ActionEvent;
6 import java.io.IOException;
7 import java.text.DateFormat;
8 import java.text.ParseException;
9 import java.text.SimpleDateFormat;
10 import java.util.Date;
11 import javax.swing.ButtonGroup;
12 import javax.swing.JButton;
13 import javax.swing.JRadioButton;
14 import org.apache.commons.imaging.ImageReadException;
15 import org.apache.commons.imaging.Imaging;
16 import org.apache.commons.imaging.common.ImageMetadata;
17 import org.apache.commons.imaging.formats.jpeg.JpegImageMetadata;
18 import org.apache.commons.imaging.formats.tiff.TiffImageMetadata;
19 import org.apache.commons.imaging.formats.tiff.constants.ExifTagConstants;
20 import osm.surveyor.matchtime.Restamp;
21 import static osm.surveyor.matchtime.gui.ReStamp.dfjp;
22 import osm.surveyor.matchtime.gui.restamp.DialogCorectTime;
26 * この1インスタンスで、1パラメータをあらわす。
28 public class ParameterPanelTime extends ParameterPanel {
29 private static final long serialVersionUID = 9118495619374256843L;
30 SimpleDateFormat sdf = (SimpleDateFormat)DateFormat.getDateTimeInstance();
31 ParameterPanelImageFile imageFile; // 基準時刻画像
34 public ButtonGroup baseTimeGroup = new ButtonGroup();
35 public JRadioButton exifBase = null; // EXIF日時を基準にする/ !(ファイル更新日時を基準にする)
36 public JRadioButton fupdateBase = null; // File更新日時を基準にする/ !(EXIF日時を基準にする)
38 public JButton updateButton;
39 public JButton resetButton;
42 public ParameterPanelTime(
45 ParameterPanelImageFile imageFile
48 this.imageFile = imageFile;
51 UpdateButtonAction buttonAction = new UpdateButtonAction(this);
52 updateButton = new JButton(i18n.getString("button.update"));
53 updateButton.addActionListener(buttonAction);
54 this.add(updateButton);
57 ResetButtonAction resetAction = new ResetButtonAction(this);
58 resetButton = new JButton(i18n.getString("button.reset"));
59 resetButton.addActionListener(resetAction);
60 resetButton.setVisible(false);
61 this.add(resetButton);
64 public ParameterPanelTime setOwner(Window owner) {
69 public ParameterPanelImageFile getImageFile() {
70 return this.imageFile;
76 class UpdateButtonAction implements java.awt.event.ActionListener
78 ParameterPanelTime param;
80 public UpdateButtonAction(ParameterPanelTime param) {
84 public void actionPerformed(ActionEvent e) {
85 fileSelect_Action(param);
86 (new DialogCorectTime(param, owner)).setVisible(true);
93 class ResetButtonAction implements java.awt.event.ActionListener
95 ParameterPanelTime paramPanelTime;
97 public ResetButtonAction(ParameterPanelTime param) {
98 this.paramPanelTime = param;
101 public void actionPerformed(ActionEvent e) {
102 fileSelect_Action(paramPanelTime);
107 * 画像ファイルが選択されたときのアクション
108 * 1.ラジオボタンの選択を参照してTEXTフィールドにファイルの「日時」を設定する
111 void fileSelect_Action(ParameterPanelTime param) {
112 if (imageFile.isEnable()) {
113 File timeFile = imageFile.getImageFile();
116 sdf.applyPattern(Restamp.TIME_PATTERN);
117 if ((exifBase != null) && exifBase.isSelected()) {
119 ImageMetadata meta = Imaging.getMetadata(timeFile);
120 JpegImageMetadata jpegMetadata = (JpegImageMetadata)meta;
121 if (jpegMetadata != null) {
122 TiffImageMetadata exif = jpegMetadata.getExif();
124 String dateTimeOriginal = exif.getFieldValue(ExifTagConstants.EXIF_TAG_DATE_TIME_ORIGINAL)[0];
125 long lastModifyTime = sdf.parse(dateTimeOriginal).getTime();
126 param.argField.setText(dfjp.format(new Date(lastModifyTime)));
129 param.argField.setText("exif == null");
133 catch (IOException | ParseException | ImageReadException ex) {}
136 long lastModified = timeFile.lastModified();
137 param.argField.setText(sdf.format(new Date(lastModified)));
141 param.argField.setText("");
146 public boolean isEnable() {
147 if (this.imageFile.isEnable()) {
148 String text = this.argField.getText();
151 sdf.applyPattern(Restamp.TIME_PATTERN);
155 catch (ParseException e) {