This project has retired. For details please refer to its
Attic page.
ChangeLogFrame xref
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.chemistry.opencmis.workbench;
20
21 import java.awt.BorderLayout;
22 import java.awt.Cursor;
23 import java.awt.Dimension;
24 import java.awt.event.ActionEvent;
25 import java.awt.event.ActionListener;
26 import java.util.Collection;
27 import java.util.GregorianCalendar;
28 import java.util.List;
29
30 import javax.swing.BorderFactory;
31 import javax.swing.JButton;
32 import javax.swing.JFrame;
33 import javax.swing.JLabel;
34 import javax.swing.JPanel;
35 import javax.swing.JScrollPane;
36 import javax.swing.JTable;
37 import javax.swing.JTextField;
38 import javax.swing.table.AbstractTableModel;
39 import javax.swing.table.TableColumn;
40
41 import org.apache.chemistry.opencmis.client.api.ChangeEvent;
42 import org.apache.chemistry.opencmis.client.api.ChangeEvents;
43 import org.apache.chemistry.opencmis.workbench.model.ClientModel;
44 import org.apache.chemistry.opencmis.workbench.swing.CollectionRenderer;
45 import org.apache.chemistry.opencmis.workbench.swing.GregorianCalendarRenderer;
46
47 public class ChangeLogFrame extends JFrame {
48
49 private static final long serialVersionUID = 1L;
50
51 private static final String WINDOW_TITLE = "CMIS Change Log";
52
53 private final ClientModel model;
54
55 private JTextField changeLogTokenField;
56 private ChangeLogTable changeLogTable;
57
58 public ChangeLogFrame(ClientModel model) {
59 super();
60
61 this.model = model;
62 createGUI();
63 }
64
65 private void createGUI() {
66 setTitle(WINDOW_TITLE + " - " + model.getRepositoryName());
67 setPreferredSize(new Dimension(700, 700));
68 setMinimumSize(new Dimension(200, 60));
69
70 setLayout(new BorderLayout());
71
72 JPanel inputPanel = new JPanel(new BorderLayout());
73 inputPanel.setBorder(BorderFactory.createEmptyBorder(3, 3, 3, 3));
74
75 inputPanel.add(new JLabel("Change Log Token: "), BorderLayout.LINE_START);
76
77 changeLogTokenField = new JTextField();
78 try {
79 changeLogTokenField.setText(model.getRepositoryInfo().getLatestChangeLogToken());
80 } catch (Exception e1) {
81 }
82 inputPanel.add(changeLogTokenField, BorderLayout.CENTER);
83
84 JButton loadButton = new JButton("Load");
85 loadButton.addActionListener(new ActionListener() {
86 @Override
87 public void actionPerformed(ActionEvent e) {
88
89 String changeLogToken = changeLogTokenField.getText();
90 if (changeLogToken.trim().length() == 0) {
91 changeLogToken = null;
92 }
93
94 ChangeEvents events = null;
95 try {
96 setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
97 events = model.getClientSession().getSession().getContentChanges(changeLogToken, true, 1000);
98 } catch (Exception ex) {
99 ClientHelper.showError(null, ex);
100 return;
101 } finally {
102 setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
103 }
104
105 changeLogTable.setChangeEvents(events.getChangeEvents());
106 changeLogTokenField.setText(events.getLatestChangeLogToken() == null ? "" : events
107 .getLatestChangeLogToken());
108 }
109 });
110 inputPanel.add(loadButton, BorderLayout.LINE_END);
111 getRootPane().setDefaultButton(loadButton);
112
113 add(inputPanel, BorderLayout.PAGE_START);
114
115 changeLogTable = new ChangeLogTable();
116 add(new JScrollPane(changeLogTable), BorderLayout.CENTER);
117
118 ClientHelper.installEscapeBinding(this, getRootPane(), true);
119
120 setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
121 pack();
122
123 setLocationRelativeTo(null);
124 setVisible(true);
125 }
126
127 static class ChangeLogTable extends JTable {
128
129 private static final long serialVersionUID = 1L;
130
131 private static final String[] COLUMN_NAMES = { "Change Type", "Object Id", "Change Time", "Properties" };
132 private static final int[] COLUMN_WIDTHS = { 100, 200, 200, 400 };
133
134 private List<ChangeEvent> changeEvents;
135
136 public ChangeLogTable() {
137 setDefaultRenderer(GregorianCalendar.class, new GregorianCalendarRenderer());
138 setDefaultRenderer(Collection.class, new CollectionRenderer());
139 setModel(new ChangeLogTableModel(this));
140
141 setAutoResizeMode(AUTO_RESIZE_OFF);
142 setAutoCreateRowSorter(true);
143
144 for (int i = 0; i < COLUMN_WIDTHS.length; i++) {
145 TableColumn column = getColumnModel().getColumn(i);
146 column.setPreferredWidth(COLUMN_WIDTHS[i]);
147 }
148
149 setFillsViewportHeight(true);
150 }
151
152 public void setChangeEvents(List<ChangeEvent> changeEvents) {
153 this.changeEvents = changeEvents;
154 ((AbstractTableModel) getModel()).fireTableDataChanged();
155 }
156
157 public List<ChangeEvent> getChangeEvents() {
158 return changeEvents;
159 }
160
161 static class ChangeLogTableModel extends AbstractTableModel {
162
163 private static final long serialVersionUID = 1L;
164
165 private final ChangeLogTable table;
166
167 public ChangeLogTableModel(ChangeLogTable table) {
168 this.table = table;
169 }
170
171 public String getColumnName(int columnIndex) {
172 return COLUMN_NAMES[columnIndex];
173 }
174
175 public int getColumnCount() {
176 return COLUMN_NAMES.length;
177 }
178
179 public int getRowCount() {
180 if (table.getChangeEvents() == null) {
181 return 0;
182 }
183
184 return table.getChangeEvents().size();
185 }
186
187 public Object getValueAt(int rowIndex, int columnIndex) {
188 ChangeEvent event = table.getChangeEvents().get(rowIndex);
189
190 switch (columnIndex) {
191 case 0:
192 return (event.getChangeType() == null ? "?" : event.getChangeType().value());
193 case 1:
194 return (event.getObjectId() == null ? "?" : event.getObjectId());
195 case 2:
196 return event.getChangeTime();
197 case 3:
198 return event.getProperties().entrySet();
199 }
200
201 return null;
202 }
203
204 @Override
205 public Class<?> getColumnClass(int columnIndex) {
206 if (columnIndex == 2) {
207 return GregorianCalendar.class;
208 } else if (columnIndex == 3) {
209 return Collection.class;
210 }
211
212 return super.getColumnClass(columnIndex);
213 }
214 }
215 }
216 }