1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.log4j.chainsaw.prefs;
18
19 import com.thoughtworks.xstream.XStream;
20 import com.thoughtworks.xstream.io.xml.DomDriver;
21
22 import javax.swing.event.ChangeEvent;
23 import javax.swing.event.ChangeListener;
24 import javax.swing.event.EventListenerList;
25 import java.io.Reader;
26 import java.net.URL;
27 import java.util.ArrayList;
28 import java.util.Collections;
29 import java.util.EventListener;
30 import java.util.List;
31
32 public class MRUFileList {
33
34 private static MRUFileList log4jList = new MRUFileList();
35 private static final int DEFAULT_MRU_SIZE = 5;
36
37 private List<URL> fileList = new ArrayList<>();
38 private int size = DEFAULT_MRU_SIZE;
39
40 private static transient EventListenerList listeners = new EventListenerList();
41
42 private MRUFileList() {
43
44 }
45
46 public static void addChangeListener(ChangeListener listener) {
47 listeners.add(ChangeListener.class, listener);
48 }
49
50 public static void removeChangeListener(ChangeListener listener) {
51 listeners.remove(ChangeListener.class, listener);
52 }
53
54
55
56
57
58
59
60
61
62 public void opened(URL url) {
63
64 fileList.remove(url);
65
66 while (fileList.size() >= size) {
67 fileList.remove(fileList.size() - 1);
68 }
69 fileList.add(0, url);
70 fireChangeEvent();
71 }
72
73 private static void fireChangeEvent() {
74
75 ChangeEvent event = null;
76 EventListener[] eventListeners = listeners.getListeners(ChangeListener.class);
77 for (EventListener eventListener : eventListeners) {
78 ChangeListener listener = (ChangeListener) eventListener;
79 if (event == null) {
80 event = new ChangeEvent(MRUFileList.class);
81 }
82 listener.stateChanged(event);
83 }
84 }
85
86
87
88
89
90
91 public List getMRUList() {
92 return Collections.unmodifiableList(fileList);
93 }
94
95 public static MRUFileList log4jMRU() {
96 return log4jList;
97 }
98
99 public static void loadLog4jMRUListFromXML(String xml) {
100 XStream xstream = new XStream(new DomDriver());
101 log4jList = (MRUFileList) xstream.fromXML(xml);
102 fireChangeEvent();
103 }
104
105 public static void loadLog4jMRUListFromReader(Reader reader) {
106 XStream xstream = new XStream(new DomDriver());
107 log4jList = (MRUFileList) xstream.fromXML(reader);
108 fireChangeEvent();
109
110 }
111
112 }