You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2021/12/04 15:42:29 UTC
[isis] 01/01: ISIS-2903: Xray: adds timestamps to log-entires
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git
commit 5efa8d5e81b72d7ad2a70f3b1b9846c30991b14a
Author: Andi Huber <ah...@apache.org>
AuthorDate: Sat Dec 4 16:40:43 2021 +0100
ISIS-2903: Xray: adds timestamps to log-entires
- in a multi-threaded history we need a way to tell which call-stack
happened first
---
.../apache/isis/commons/internal/debug/_Xray.java | 5 +-
.../internal/debug/xray/JavaApplication78.java | 76 ++++++++++++++++++++++
.../commons/internal/debug/xray/XrayDataModel.java | 21 ++++--
.../commons/internal/debug/xray/_SwingUtil.java | 19 ++++++
4 files changed, 116 insertions(+), 5 deletions(-)
diff --git a/commons/src/main/java/org/apache/isis/commons/internal/debug/_Xray.java b/commons/src/main/java/org/apache/isis/commons/internal/debug/_Xray.java
index 8712766..a64688d 100644
--- a/commons/src/main/java/org/apache/isis/commons/internal/debug/_Xray.java
+++ b/commons/src/main/java/org/apache/isis/commons/internal/debug/_Xray.java
@@ -18,6 +18,8 @@
*/
package org.apache.isis.commons.internal.debug;
+import java.time.LocalDateTime;
+
import org.apache.isis.commons.collections.Can;
import org.apache.isis.commons.internal.base._Strings;
import org.apache.isis.commons.internal.debug.xray.XrayDataModel;
@@ -40,13 +42,14 @@ final class _Xray {
}
val threadId = ThreadMemento.fromCurrentThread();
+ val timeStamp = LocalDateTime.now();
XrayUi.updateModel(model->{
val parentNode = model.getThreadNode(threadId);
val logModel = model.addDataNode(parentNode,
new XrayDataModel.LogEntry(
- "debug-log",
+ "debug-log", timeStamp,
_Strings.ellipsifyAtEnd(logMessage, 80, "..."),
logMessage,
Stickiness.CAN_DELETE_NODE));
diff --git a/commons/src/main/java/org/apache/isis/commons/internal/debug/xray/JavaApplication78.java b/commons/src/main/java/org/apache/isis/commons/internal/debug/xray/JavaApplication78.java
new file mode 100644
index 0000000..8c45336
--- /dev/null
+++ b/commons/src/main/java/org/apache/isis/commons/internal/debug/xray/JavaApplication78.java
@@ -0,0 +1,76 @@
+package org.apache.isis.commons.internal.debug.xray;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.EventQueue;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.util.ArrayList;
+
+import javax.swing.BorderFactory;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.UIManager;
+import javax.swing.UnsupportedLookAndFeelException;
+import javax.swing.border.Border;
+
+public class JavaApplication78 {
+ JFrame frame;
+ JPanel panel, labelsPanel;
+ JLabel label;
+ ArrayList<String> names = new ArrayList<String>();
+ ArrayList<JLabel> labelsArray = new ArrayList<JLabel>();
+ Border paddingBorder = BorderFactory.createEmptyBorder(10, 10, 10, 10);
+ Border border = BorderFactory.createLineBorder(Color.BLUE);
+ JScrollPane labelsScroll;
+
+ public JavaApplication78() {
+ frame = new JFrame();
+ panel = new JPanel(new BorderLayout());
+ names.add(".mp3");
+ names.add(".html");
+ names.add(".jpeg");
+ names.add(".mp4");
+ names.add(".pdf");
+
+ labelsPanel = new JPanel(new GridBagLayout());
+ GridBagConstraints gbc = new GridBagConstraints();
+ gbc.weightx = 1;
+ gbc.fill = GridBagConstraints.HORIZONTAL;
+ gbc.gridwidth = GridBagConstraints.REMAINDER;
+
+ labelsScroll = new JScrollPane(labelsPanel);
+ for (String format : names) {
+ label = new JLabel(format);
+ //icon
+ labelsArray.add(label);
+ labelsPanel.add(label, gbc);
+ label.setBorder(BorderFactory.createCompoundBorder(border, paddingBorder));
+ }
+
+ panel.add(labelsScroll, BorderLayout.CENTER);
+ frame.add(panel);
+ frame.setSize(200, 400);
+ frame.setLocationRelativeTo(null);
+ frame.setVisible(true);
+ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+ }
+
+ public static void main(final String[] args) {
+ EventQueue.invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
+ } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
+ ex.printStackTrace();
+ }
+
+ new JavaApplication78();
+ }
+ });
+ }
+
+}
diff --git a/commons/src/main/java/org/apache/isis/commons/internal/debug/xray/XrayDataModel.java b/commons/src/main/java/org/apache/isis/commons/internal/debug/xray/XrayDataModel.java
index 833456e..c5677cd 100644
--- a/commons/src/main/java/org/apache/isis/commons/internal/debug/xray/XrayDataModel.java
+++ b/commons/src/main/java/org/apache/isis/commons/internal/debug/xray/XrayDataModel.java
@@ -21,6 +21,8 @@ package org.apache.isis.commons.internal.debug.xray;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics2D;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -29,6 +31,7 @@ import java.util.UUID;
import javax.swing.BorderFactory;
import javax.swing.JEditorPane;
+import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
@@ -100,6 +103,7 @@ public abstract class XrayDataModel extends HasIdAndLabel {
private final List<StackTraceElement> data = new ArrayList<>();
private final String id;
+ private final LocalDateTime timestamp;
private final String label;
private final String logMessage;
private final @NonNull Stickiness stickiness;
@@ -117,10 +121,19 @@ public abstract class XrayDataModel extends HasIdAndLabel {
// log message label
- val editorPane = new JEditorPane();
- editorPane.setEditable(false);
- editorPane.setText(logMessage);
- panel2.add(editorPane, BorderLayout.NORTH);
+ val logMessagePane = new JEditorPane();
+ logMessagePane.setEditable(false);
+ logMessagePane.setText(logMessage);
+
+ val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
+
+ val timestampLabel = new JLabel(timestamp.format(formatter));
+
+ panel2.add(
+ _SwingUtil.verticalBox(
+ timestampLabel,
+ logMessagePane),
+ BorderLayout.NORTH);
// table rendering
diff --git a/commons/src/main/java/org/apache/isis/commons/internal/debug/xray/_SwingUtil.java b/commons/src/main/java/org/apache/isis/commons/internal/debug/xray/_SwingUtil.java
index 5670991..0723561 100644
--- a/commons/src/main/java/org/apache/isis/commons/internal/debug/xray/_SwingUtil.java
+++ b/commons/src/main/java/org/apache/isis/commons/internal/debug/xray/_SwingUtil.java
@@ -21,6 +21,9 @@ package org.apache.isis.commons.internal.debug.xray;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Graphics2D;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
import java.util.Collections;
import java.util.function.Consumer;
@@ -87,4 +90,20 @@ final class _SwingUtil {
return canvas;
}
+ public static Component verticalBox(final Component ...components) {
+
+ val panel = new JPanel(new GridBagLayout());
+ val gbc = new GridBagConstraints();
+ gbc.weightx = 1;
+ gbc.fill = GridBagConstraints.HORIZONTAL;
+ gbc.gridwidth = GridBagConstraints.REMAINDER;
+ gbc.insets = new Insets(3, 6, 3, 6);
+
+ for(val component : components) {
+ panel.add(component, gbc);
+ }
+
+ return panel;
+ }
+
}