Date format is now selectable
diff --git a/src/main/java/org/apache/log4j/chainsaw/LogPanel.java b/src/main/java/org/apache/log4j/chainsaw/LogPanel.java
index 0e1a906..fac7680 100644
--- a/src/main/java/org/apache/log4j/chainsaw/LogPanel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/LogPanel.java
@@ -59,6 +59,7 @@
import java.text.DateFormat;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
+import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.List;
import org.apache.log4j.chainsaw.logevents.ChainsawLoggingEvent;
@@ -1113,6 +1114,7 @@
}
});
addPropertyChangeListener("detailPaneConversionPattern", detailPaneUpdater);
+ addPropertyChangeListener("detailPaneDatetimeFormat", detailPaneUpdater);
searchPane = new JScrollPane(searchTable);
searchPane.getVerticalScrollBar().setUnitIncrement(ChainsawConstants.DEFAULT_ROW_HEIGHT * 2);
@@ -1191,6 +1193,7 @@
e -> {
setDetailPaneConversionPattern(
layoutEditorPane.getConversionPattern());
+ setDetailPaneDatetimeFormat(layoutEditorPane.getDatetimeFormatter());
layoutEditorDialog.setVisible(false);
});
@@ -1223,6 +1226,7 @@
public void actionPerformed(ActionEvent e) {
layoutEditorPane.setConversionPattern(
getDetailPaneConversionPattern());
+ layoutEditorPane.setDatetimeFormatter(getDetailPaneDatetimeFormat());
Dimension size = Toolkit.getDefaultToolkit().getScreenSize();
Point p =
@@ -2688,6 +2692,18 @@
return (detailLayout).getConversionPattern();
}
+ private void setDetailPaneDatetimeFormat(DateTimeFormatter datetimeFormat){
+ DateTimeFormatter oldFormat = getDetailPaneDatetimeFormat();
+ detailLayout.setDateformat(datetimeFormat);
+ firePropertyChange(
+ "detailPaneDatetimeFormat", oldFormat,
+ getDetailPaneDatetimeFormat());
+ }
+
+ private DateTimeFormatter getDetailPaneDatetimeFormat() {
+ return detailLayout.getDateformat();
+ }
+
/**
* Reset the LoggingEvent container, detail panel and status bar
*/
diff --git a/src/main/java/org/apache/log4j/chainsaw/layout/EventDetailLayout.java b/src/main/java/org/apache/log4j/chainsaw/layout/EventDetailLayout.java
index 54df408..9668495 100644
--- a/src/main/java/org/apache/log4j/chainsaw/layout/EventDetailLayout.java
+++ b/src/main/java/org/apache/log4j/chainsaw/layout/EventDetailLayout.java
@@ -44,7 +44,7 @@
private DateTimeFormatter m_dateFormat;
public EventDetailLayout() {
- m_dateFormat = DateTimeFormatter.ISO_DATE_TIME;
+ m_dateFormat = DateTimeFormatter.ISO_LOCAL_TIME;
}
public void setConversionPattern(String conversionPattern) {
@@ -59,7 +59,7 @@
m_dateFormat = dateFormat;
}
- DateTimeFormatter getDateformat(){
+ public DateTimeFormatter getDateformat(){
return m_dateFormat;
}
diff --git a/src/main/java/org/apache/log4j/chainsaw/layout/LayoutEditorPane.java b/src/main/java/org/apache/log4j/chainsaw/layout/LayoutEditorPane.java
index 39636ab..d44c0a9 100644
--- a/src/main/java/org/apache/log4j/chainsaw/layout/LayoutEditorPane.java
+++ b/src/main/java/org/apache/log4j/chainsaw/layout/LayoutEditorPane.java
@@ -30,6 +30,8 @@
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.time.ZonedDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
import java.util.Date;
import java.util.Hashtable;
import org.apache.log4j.chainsaw.logevents.ChainsawLoggingEvent;
@@ -66,6 +68,8 @@
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
private ChainsawLoggingEvent event;
private EventDetailLayout layout = new EventDetailLayout();
+ private DateTimeFormatter m_datetimeFormat;
+ private final JComboBox m_datetimeCombo = new JComboBox();
/**
*
@@ -78,6 +82,7 @@
cutAction = createCutAction();
initComponents();
setupListeners();
+ m_datetimeFormat = DateTimeFormatter.ISO_DATE_TIME;
}
/**
@@ -138,6 +143,7 @@
private void updatePreview() {
String pattern = patternEditor.getText();
layout.setConversionPattern(pattern);
+ layout.setDateformat(m_datetimeFormat);
previewer.setText(layout.format(event));
}
@@ -211,7 +217,9 @@
// editorToolbar.add(new JButton(copyAction));
// editorToolbar.add(new JButton(cutAction));
+ configureDatetimeFormatters();
editorToolbar.add(Box.createHorizontalGlue());
+ editorToolbar.add(m_datetimeCombo);
okCancelToolbar.add(Box.createHorizontalGlue());
okCancelToolbar.add(okButton);
@@ -226,6 +234,40 @@
add(okCancelToolbar);
}
+ private void configureDatetimeFormatters(){
+ java.util.List<DatetimeFormatterOption> options = new ArrayList<>();
+
+ options.add( new DatetimeFormatterOption( DateTimeFormatter.BASIC_ISO_DATE, "Basic ISO Date(20111203)" ) );
+ options.add( new DatetimeFormatterOption( DateTimeFormatter.ISO_LOCAL_DATE, "ISO Local Date(2011-12-03)" ) );
+ options.add( new DatetimeFormatterOption( DateTimeFormatter.ISO_OFFSET_DATE, "ISO Offset Date(2011-12-03+01:00)" ) );
+ options.add( new DatetimeFormatterOption( DateTimeFormatter.ISO_DATE, "ISO Date('2011-12-03+01:00'; '2011-12-03')" ) );
+ options.add( new DatetimeFormatterOption( DateTimeFormatter.ISO_LOCAL_TIME, "ISO Local Time(10:15:30)" ) );
+ options.add( new DatetimeFormatterOption( DateTimeFormatter.ISO_OFFSET_TIME, "ISO Offset Time(10:15:30+01:00)" ) );
+ options.add( new DatetimeFormatterOption( DateTimeFormatter.ISO_TIME, "ISO Time('10:15:30+01:00'; '10:15:30')" ) );
+ options.add( new DatetimeFormatterOption( DateTimeFormatter.ISO_LOCAL_DATE_TIME, "ISO Local Date Time(2011-12-03T10:15:30)" ) );
+ options.add( new DatetimeFormatterOption( DateTimeFormatter.ISO_OFFSET_DATE_TIME, "ISO Offset Date Time(2011-12-03T10:15:30+01:00)" ) );
+ options.add( new DatetimeFormatterOption( DateTimeFormatter.ISO_ZONED_DATE_TIME, "ISO Zoned Date Time(2011-12-03T10:15:30+01:00[Europe/Paris])" ) );
+ options.add( new DatetimeFormatterOption( DateTimeFormatter.ISO_DATE_TIME, "ISO Date Time(2011-12-03T10:15:30+01:00[Europe/Paris])" ) );
+ options.add( new DatetimeFormatterOption( DateTimeFormatter.ISO_ORDINAL_DATE, "ISO Ordinal Date(2012-337)" ) );
+ options.add( new DatetimeFormatterOption( DateTimeFormatter.ISO_WEEK_DATE, "ISO Week Date(2012-W48-6)" ) );
+ options.add( new DatetimeFormatterOption( DateTimeFormatter.ISO_INSTANT, "ISO Instant(2011-12-03T10:15:30Z)" ) );
+ options.add( new DatetimeFormatterOption( DateTimeFormatter.RFC_1123_DATE_TIME, "RFC 1123 DateTue, 3 Jun 2008 11:05:30 GMT)" ) );
+
+ for( DatetimeFormatterOption opt : options ){
+ m_datetimeCombo.addItem(opt);
+
+ if( opt.m_formatter.equals( m_datetimeFormat ) ){
+ m_datetimeCombo.setSelectedItem(opt);
+ }
+ }
+
+ m_datetimeCombo.addActionListener((ae) -> {
+ DatetimeFormatterOption option = (DatetimeFormatterOption)m_datetimeCombo.getSelectedItem();
+ m_datetimeFormat = option.m_formatter;
+ updatePreview();
+ });
+ }
+
public void setConversionPattern(String pattern) {
patternEditor.setText(pattern);
}
@@ -242,6 +284,39 @@
cancelButton.addActionListener(l);
}
+ public void setDatetimeFormatter( DateTimeFormatter formatter ){
+ m_datetimeFormat = formatter;
+
+ for( int x = 0; x < m_datetimeCombo.getItemCount(); x++ ){
+ DatetimeFormatterOption opt = (DatetimeFormatterOption)m_datetimeCombo.getItemAt(x);
+ if( opt.m_formatter == formatter ){
+ m_datetimeCombo.setSelectedIndex(x);
+ break;
+ }
+ }
+
+ updatePreview();
+ }
+
+ public DateTimeFormatter getDatetimeFormatter(){
+ return m_datetimeFormat;
+ }
+
+ private class DatetimeFormatterOption {
+ final DateTimeFormatter m_formatter;
+ final String m_text;
+
+ DatetimeFormatterOption( DateTimeFormatter formatter, String text ){
+ m_formatter = formatter;
+ m_text = text;
+ }
+
+ @Override
+ public String toString(){
+ return m_text;
+ }
+ }
+
public static void main(String[] args) {
JDialog dialog = new JDialog((Frame) null, "Pattern Editor");
dialog.getContentPane().add(new LayoutEditorPane());