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 java.io.Reader;
20 import java.net.URL;
21 import java.util.ArrayList;
22 import java.util.Collections;
23 import java.util.EventListener;
24 import java.util.List;
25
26 import javax.swing.event.ChangeEvent;
27 import javax.swing.event.ChangeListener;
28 import javax.swing.event.EventListenerList;
29
30 import com.thoughtworks.xstream.XStream;
31 import com.thoughtworks.xstream.io.xml.DomDriver;
32
33 public class MRUFileList{
34
35 private static MRUFileList log4jList = new MRUFileList();
36 private static final int DEFAULT_MRU_SIZE = 5;
37
38 private List fileList = new ArrayList();
39 private int size = DEFAULT_MRU_SIZE;
40
41 private static transient EventListenerList listeners = new EventListenerList();
42
43 private MRUFileList() {
44
45 }
46
47 public static void addChangeListener(ChangeListener listener){
48 listeners.add(ChangeListener.class, listener);
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
63 public void opened(URL url) {
64
65 fileList.remove(url);
66
67 while(fileList.size()>=size) {
68 fileList.remove(fileList.size()-1);
69 }
70 fileList.add(0, url);
71 fireChangeEvent();
72 }
73
74 private static void fireChangeEvent() {
75
76 ChangeEvent event = null;
77 EventListener[] eventListeners = listeners.getListeners(ChangeListener.class);
78 for (int i = 0; i < eventListeners.length; i++) {
79 ChangeListener listener = (ChangeListener) eventListeners[i];
80 if(event==null) {
81 event = new ChangeEvent(MRUFileList.class);
82 }
83 listener.stateChanged(event);
84 }
85 }
86
87
88
89
90
91
92 public List getMRUList() {
93 return Collections.unmodifiableList(fileList);
94 }
95
96 public static MRUFileList log4jMRU() {
97 return log4jList;
98 }
99
100 public static void loadLog4jMRUListFromXML(String xml) {
101 XStream xstream = new XStream(new DomDriver());
102 log4jList = (MRUFileList) xstream.fromXML(xml);
103 fireChangeEvent();
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 }