1 | |
package org.jtheque.core.managers.view.impl.frame; |
2 | |
|
3 | |
import org.jdesktop.swingx.JXTable; |
4 | |
import org.jtheque.core.managers.event.EventLog; |
5 | |
import org.jtheque.core.managers.view.able.ILogView; |
6 | |
import org.jtheque.core.managers.view.able.components.IModel; |
7 | |
import org.jtheque.core.managers.view.impl.actions.event.UpdateAction; |
8 | |
import org.jtheque.core.managers.view.impl.components.model.EventsTableModel; |
9 | |
import org.jtheque.core.managers.view.impl.components.model.LogComboBoxModel; |
10 | |
import org.jtheque.core.managers.view.impl.frame.abstraction.SwingBuildedDialogView; |
11 | |
import org.jtheque.core.utils.ui.Borders; |
12 | |
import org.jtheque.core.utils.ui.PanelBuilder; |
13 | |
import org.jtheque.utils.ui.GridBagUtils; |
14 | |
|
15 | |
import javax.swing.JComboBox; |
16 | |
import javax.swing.JLabel; |
17 | |
import javax.swing.JTextArea; |
18 | |
import javax.swing.ListSelectionModel; |
19 | |
import javax.swing.event.ListSelectionEvent; |
20 | |
import javax.swing.event.ListSelectionListener; |
21 | |
import java.awt.Insets; |
22 | |
import java.awt.event.ItemEvent; |
23 | |
import java.awt.event.ItemListener; |
24 | |
import java.text.DateFormat; |
25 | |
|
26 | |
|
27 | |
|
28 | |
|
29 | |
|
30 | |
|
31 | |
|
32 | |
|
33 | |
|
34 | |
|
35 | |
|
36 | |
|
37 | |
|
38 | |
|
39 | |
|
40 | |
|
41 | |
|
42 | |
|
43 | |
|
44 | |
|
45 | |
|
46 | |
|
47 | |
public final class LogView extends SwingBuildedDialogView<IModel> implements ListSelectionListener, ItemListener, ILogView { |
48 | |
private JXTable tableEvents; |
49 | |
private EventsTableModel eventsModel; |
50 | |
|
51 | |
private JLabel labelTitle; |
52 | |
private JLabel labelLog; |
53 | |
private JLabel labelSource; |
54 | |
private JLabel labelLevel; |
55 | |
private JLabel labelDate; |
56 | |
private JLabel labelTime; |
57 | |
|
58 | |
private JTextArea areaDetails; |
59 | |
|
60 | |
private final DateFormat dateFormat; |
61 | |
private final DateFormat timeFormat; |
62 | |
|
63 | |
private static final int DEFAULT_WIDTH = 600; |
64 | |
private static final int DEFAULT_HEIGHT = 450; |
65 | |
|
66 | |
|
67 | |
|
68 | |
|
69 | |
|
70 | |
|
71 | |
|
72 | |
public LogView(DateFormat dateFormat, DateFormat timeFormat){ |
73 | 0 | super(); |
74 | |
|
75 | 0 | this.dateFormat = dateFormat; |
76 | 0 | this.timeFormat = timeFormat; |
77 | |
|
78 | 0 | build(); |
79 | 0 | } |
80 | |
|
81 | |
@Override |
82 | |
protected void initView(){ |
83 | 0 | setTitleKey("log.view.title"); |
84 | 0 | setResizable(false); |
85 | 0 | setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); |
86 | 0 | } |
87 | |
|
88 | |
@Override |
89 | |
protected void buildView(PanelBuilder builder){ |
90 | 0 | builder.setDefaultInsets(new Insets(4, 4, 4, 4)); |
91 | |
|
92 | 0 | builder.addI18nLabel("log.view.log", builder.gbcSet(0, 0, GridBagUtils.NONE, GridBagUtils.LINE_END)); |
93 | |
|
94 | 0 | JComboBox comboLogs = builder.addComboBox(new LogComboBoxModel(), builder.gbcSet(1, 0, GridBagUtils.HORIZONTAL, GridBagUtils.LINE_START, 1.0, 0.0)); |
95 | 0 | comboLogs.addItemListener(this); |
96 | |
|
97 | 0 | eventsModel = new EventsTableModel(); |
98 | 0 | eventsModel.setHeaders(new String[]{ |
99 | |
getMessage("log.view.level"), |
100 | |
getMessage("log.view.date"), |
101 | |
getMessage("log.view.time"), |
102 | |
getMessage("log.view.source"), |
103 | |
getMessage("log.view.title")}); |
104 | |
|
105 | 0 | tableEvents = new JXTable(eventsModel); |
106 | 0 | tableEvents.getSelectionModel().addListSelectionListener(this); |
107 | 0 | tableEvents.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); |
108 | 0 | tableEvents.setVisibleRowCount(5); |
109 | 0 | tableEvents.setColumnControlVisible(true); |
110 | 0 | tableEvents.packAll(); |
111 | |
|
112 | 0 | builder.addScrolled(tableEvents, builder.gbcSet(0, 1, GridBagUtils.BOTH, GridBagUtils.LINE_START, 2, 1, 1.0, 0.67)); |
113 | |
|
114 | 0 | createInfosPanel(builder); |
115 | |
|
116 | 0 | builder.addButton(new UpdateAction(), builder.gbcSet(1, 3, GridBagUtils.NONE, GridBagUtils.LINE_END)); |
117 | 0 | } |
118 | |
|
119 | |
|
120 | |
|
121 | |
|
122 | |
|
123 | |
|
124 | |
private void createInfosPanel(PanelBuilder parent) { |
125 | 0 | PanelBuilder builder = parent.addPanel(parent.gbcSet(0, 2, GridBagUtils.BOTH, GridBagUtils.LINE_START, 2, 1, 1.0, 0.33)); |
126 | |
|
127 | 0 | builder.setBorder(Borders.createTitledBorder("log.view.details")); |
128 | |
|
129 | 0 | addLabels(builder); |
130 | 0 | addFieldLabels(builder); |
131 | 0 | } |
132 | |
|
133 | |
|
134 | |
|
135 | |
|
136 | |
|
137 | |
|
138 | |
private void addFieldLabels(PanelBuilder builder) { |
139 | 0 | labelTitle = builder.addLabel(builder.gbcSet(0, 0, GridBagUtils.NONE, GridBagUtils.BASELINE_LEADING, 4, 1)); |
140 | 0 | labelLog = builder.addLabel(builder.gbcSet(1, 1, GridBagUtils.HORIZONTAL, GridBagUtils.BASELINE_LEADING, 0.5, 0.0)); |
141 | 0 | labelSource = builder.addLabel(builder.gbcSet(1, 2, GridBagUtils.HORIZONTAL, GridBagUtils.BASELINE_LEADING, 0.5, 0.0)); |
142 | 0 | labelLevel = builder.addLabel(builder.gbcSet(1, 3, GridBagUtils.HORIZONTAL, GridBagUtils.BASELINE_LEADING, 0.5, 0.0)); |
143 | 0 | labelDate = builder.addLabel(builder.gbcSet(3, 1, GridBagUtils.HORIZONTAL, GridBagUtils.BASELINE_LEADING, 0.5, 0.0)); |
144 | 0 | labelTime = builder.addLabel(builder.gbcSet(3, 2, GridBagUtils.HORIZONTAL, GridBagUtils.BASELINE_LEADING, 0.5, 0.0)); |
145 | |
|
146 | 0 | areaDetails = new JTextArea(); |
147 | 0 | areaDetails.setRows(3); |
148 | |
|
149 | 0 | builder.addScrolled(areaDetails, builder.gbcSet(0, 5, GridBagUtils.BOTH, GridBagUtils.LINE_START, 4, 1, 1.0, 1.0)); |
150 | 0 | } |
151 | |
|
152 | |
|
153 | |
|
154 | |
|
155 | |
|
156 | |
|
157 | |
private static void addLabels(PanelBuilder builder) { |
158 | 0 | builder.addI18nLabel("log.view.log", PanelBuilder.BOLD, builder.gbcSet(0, 1, GridBagUtils.NONE, GridBagUtils.BASELINE_TRAILING)); |
159 | 0 | builder.addI18nLabel("log.view.source", PanelBuilder.BOLD, builder.gbcSet(0, 2, GridBagUtils.NONE, GridBagUtils.BASELINE_TRAILING)); |
160 | 0 | builder.addI18nLabel("log.view.level", PanelBuilder.BOLD, builder.gbcSet(0, 3, GridBagUtils.NONE, GridBagUtils.BASELINE_TRAILING)); |
161 | |
|
162 | 0 | builder.addI18nLabel("log.view.date", PanelBuilder.BOLD, builder.gbcSet(2, 1, GridBagUtils.NONE, GridBagUtils.BASELINE_TRAILING)); |
163 | 0 | builder.addI18nLabel("log.view.time", PanelBuilder.BOLD, builder.gbcSet(2, 2, GridBagUtils.NONE, GridBagUtils.BASELINE_TRAILING)); |
164 | |
|
165 | 0 | builder.addI18nLabel("log.view.details", builder.gbcSet(0, 4, GridBagUtils.NONE, GridBagUtils.BASELINE_LEADING, 4, 1)); |
166 | 0 | } |
167 | |
|
168 | |
@Override |
169 | |
public void valueChanged(ListSelectionEvent e) { |
170 | 0 | if (tableEvents.getSelectedRowCount() > 0) { |
171 | 0 | EventLog event = eventsModel.getValueAt(tableEvents.getSelectedRow()); |
172 | |
|
173 | 0 | labelTitle.setText(getMessage(event.getTitleKey())); |
174 | 0 | labelLog.setText(event.getLog()); |
175 | 0 | labelSource.setText(event.getSource()); |
176 | 0 | labelLevel.setText(getMessage(event.getLevel().getKey())); |
177 | 0 | labelDate.setText(dateFormat.format(event.getDate())); |
178 | 0 | labelTime.setText(timeFormat.format(event.getDate())); |
179 | 0 | areaDetails.setText(getMessage(event.getDetailsKey())); |
180 | |
} |
181 | 0 | } |
182 | |
|
183 | |
@Override |
184 | |
public void itemStateChanged(ItemEvent e) { |
185 | 0 | if (e.getStateChange() == ItemEvent.SELECTED) { |
186 | 0 | eventsModel.setLog((String) e.getItem()); |
187 | |
} |
188 | 0 | } |
189 | |
} |